//-------------------------------------------------------------------- // 此代码由T4模板自动生成 byzhouhang 20210918 // 生成时间 2022-10-20 11:52:17 // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- using IRaCIS.Core.Domain.Models; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Application.Helper; using IRaCIS.Application.Contracts; namespace IRaCIS.Core.Application.Service { /// /// TrialEmailNoticeConfigService /// [ApiExplorerSettings(GroupName = "Trial")] public class TrialEmailNoticeConfigService : BaseService, ITrialEmailNoticeConfigService { private readonly IRepository _trialEmailNoticeConfigRepository; public IRepository _visitTaskRepository { get; } public IRepository _trialUserRepository { get; } public TrialEmailNoticeConfigService(IRepository trialEmailNoticeConfigRepository, IRepository visitTaskRepository,IRepository trialUserRepository) { _trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository; _visitTaskRepository = visitTaskRepository; _trialUserRepository = trialUserRepository; } /// /// 同步系统配置的文档到想项目中 /// /// /// /// /// private async Task SyncSystemEmainCofigDocListAsync(Guid trialId, CriterionType? criterionTypeEnum) { if (criterionTypeEnum != null) { var docmentList = _repository.Where(t => t.CriterionTypeEnum == criterionTypeEnum).Select(t => new { t.Path, t.Name, t.Code, t.BusinessScenarioEnum }).ToList(); var trialDocCount = _trialEmailNoticeConfigRepository.Where(t => t.CriterionTypeEnum == criterionTypeEnum).Count(); if (trialDocCount == 0) { foreach (var item in docmentList) { await _trialEmailNoticeConfigRepository.AddAsync(new TrialEmailNoticeConfig() { FileName = item.Name, FilePath = item.Path, BusinessScenarioEnum = item.BusinessScenarioEnum, Code = item.Code }); } } } await _trialEmailNoticeConfigRepository.SaveChangesAsync(); } /// /// 测试邮件 带附件 填充word --前端不需要用 /// /// /// /// /// /// /// public async Task FillWordTemplateAndEmailConfig(Guid trialId, Guid visitTaskId, Guid trialReadingCriterionId, CommonDocumentBusinessScenario businessScenarioEnum) { var criterionTypeEnum = await _repository.Where(t => t.TrialId == trialId && t.Id == trialReadingCriterionId).Select(t => t.CriterionType).FirstOrDefaultAsync(); var emailConfig = await _trialEmailNoticeConfigRepository.Where(t => t.TrialId == trialId && t.CriterionTypeEnum == criterionTypeEnum && t.BusinessScenarioEnum == businessScenarioEnum).FirstOrDefaultAsync(); if (emailConfig == null) { throw new BusinessValidationFailedException("找不到该项目标准场景下邮件的配置"); } //填充邮件基本配置 var sendEmailConfig = new SMTPEmailConfig(); //foreach (var item in emailConfig.ReceiveEmailList) //{ // sendEmailConfig.ToMailAddressList.Add(new MimeKit.MailboxAddress(item, item)); //} //foreach (var item in emailConfig.CopyEmailList) //{ // if (item.Contains("@") && !string.IsNullOrEmpty(item)) // { // sendEmailConfig.CopyToMailAddressList.Add(new MimeKit.MailboxAddress(item.Trim(), item.Trim())); // } //} //邮件内容html await FillWordTemplateAndSetEmailAsync(visitTaskId, sendEmailConfig, businessScenarioEnum, criterionTypeEnum!); //邮件附件 var path = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, emailConfig.FilePath); if (!File.Exists(path)) { throw new BusinessValidationFailedException("找不到该项目标准场景下邮件模板"); } sendEmailConfig.EmailAttachMentConfigList.Add(new EmailAttachMentConfig() { FileName = emailConfig.FileName, FileStream = System.IO.File.OpenRead(path) }); await SendEmailHelper.SendEmailAsync(sendEmailConfig); } private async Task FillWordTemplateAndSetEmailAsync(Guid visitTaskId, SMTPEmailConfig sendEmailConfig, CommonDocumentBusinessScenario businessScenarioEnum, CriterionType criterionType) { var pathToFile = _hostEnvironment.WebRootPath + Path.DirectorySeparatorChar.ToString() + "EmailTemplate" + Path.DirectorySeparatorChar.ToString() + "SubjectEnrollConfirmOrPDProgress.html"; if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed) { sendEmailConfig.TopicDescription = "入组确认"; using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { var templateInfo = SourceReader.ReadToEnd(); sendEmailConfig.HtmlBodyStr = string.Format(templateInfo, $" 附件为入组确认报告,请查收 " ); } switch (criterionType) { case CriterionType.SelfDefine: break; case CriterionType.RECIST1Pointt1: //_visitTaskRepository.Where(t => t.Id == visitTaskId).Select(t => new { t.Trial.ResearchProgramNo, t.Subject.TrialSite.TrialSiteCode, SubjectCode = t.Subject.Code, VisitEarliestScanDate = t.SourceSubjectVisit.EarliestScanDate, t.sou }) break; case CriterionType.PCWG3: break; case CriterionType.mRECISTMesothelioma: break; case CriterionType.RECIL: break; case CriterionType.RECIST1Point0: break; case CriterionType.WHO: break; case CriterionType.PERCIST: break; case CriterionType.Forrest: break; case CriterionType.Lugano2014: break; case CriterionType.iRECIST: break; case CriterionType.RANO_BM: break; case CriterionType.RANO: break; case CriterionType.IWCLL2018: break; case CriterionType.mRECISTHCC: break; case CriterionType.Cheson2007: break; case CriterionType.IMWG2016: break; default: break; } } else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed) { sendEmailConfig.TopicDescription = "疾病进展"; using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { var templateInfo = SourceReader.ReadToEnd(); sendEmailConfig.HtmlBodyStr = string.Format(templateInfo, $" 附件为疾病进展确认报告,请查收 " ); } switch (criterionType) { case CriterionType.SelfDefine: break; case CriterionType.RECIST1Pointt1: break; case CriterionType.PCWG3: break; case CriterionType.mRECISTMesothelioma: break; case CriterionType.RECIL: break; case CriterionType.RECIST1Point0: break; case CriterionType.WHO: break; case CriterionType.PERCIST: break; case CriterionType.Forrest: break; case CriterionType.Lugano2014: break; case CriterionType.iRECIST: break; case CriterionType.RANO_BM: break; case CriterionType.RANO: break; case CriterionType.IWCLL2018: break; case CriterionType.mRECISTHCC: break; case CriterionType.Cheson2007: break; case CriterionType.IMWG2016: break; default: break; } } } /// /// 选择人员下拉 /// /// /// [HttpPost] public async Task> GetTrialUserSelectList(Guid trialId) { var query = _trialUserRepository.Where(t => t.TrialId == param.TrialId && t.IsDeleted==false,false,true ).IgnoreQueryFilters() .ProjectTo(_mapper.ConfigurationProvider); return await query.ToListAsync(); } [HttpPost] public async Task> GetTrialEmailNoticeConfigList(TrialEmailNoticeConfigQuery inQuery) { await SyncSystemEmainCofigDocListAsync(inQuery.TrialId, inQuery.CriterionTypeEnum); var trialEmailNoticeConfigQueryable = _trialEmailNoticeConfigRepository .WhereIf(inQuery.CriterionTypeEnum != null, t => t.CriterionTypeEnum == inQuery.CriterionTypeEnum) .WhereIf(inQuery.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == inQuery.BusinessScenarioEnum) .ProjectTo(_mapper.ConfigurationProvider); return await trialEmailNoticeConfigQueryable.ToListAsync(); } public async Task AddOrUpdateTrialEmailNoticeConfig(TrialEmailNoticeConfigAddOrEdit addOrEditTrialEmailNoticeConfig) { List trialEmailNoticeUsers = new List(); trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.From, UserId = addOrEditTrialEmailNoticeConfig.FromUserId }); foreach (var item in addOrEditTrialEmailNoticeConfig.ToUserIdList) { trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.To, UserId = item }); } foreach (var item in addOrEditTrialEmailNoticeConfig.CopyUserIdList) { trialEmailNoticeUsers.Add(new TrialEmailNoticeUser() { EmailUserType = EmailUserType.Copy, UserId = item }); } //var entity = await _trialEmailNoticeConfigRepository.InsertOrUpdateAsync(addOrEditTrialEmailNoticeConfig); if (addOrEditTrialEmailNoticeConfig.Id == null) { var entity = _mapper.Map(addOrEditTrialEmailNoticeConfig); entity.TrialEmailNoticeUserList = trialEmailNoticeUsers; await _trialEmailNoticeConfigRepository.AddAsync(entity, true); return ResponseOutput.Ok(entity.Id.ToString()); } else { await _repository.BatchDeleteAsync(t => t.TrialEmailNoticeConfigId == addOrEditTrialEmailNoticeConfig.Id); var entity = (await _trialEmailNoticeConfigRepository.Where(t => t.Id == addOrEditTrialEmailNoticeConfig.Id, true, true).Include(t => t.TrialEmailNoticeUserList).FirstOrDefaultAsync()).IfNullThrowException(); await _repository.AddRangeAsync(trialEmailNoticeUsers); await _trialEmailNoticeConfigRepository.SaveChangesAsync(); return ResponseOutput.Ok(); } } [HttpDelete("{trialEmailNoticeConfigId:guid}")] public async Task DeleteTrialEmailNoticeConfig(Guid trialEmailNoticeConfigId) { var success = await _trialEmailNoticeConfigRepository.DeleteFromQueryAsync(t => t.Id == trialEmailNoticeConfigId, true); return ResponseOutput.Ok(); } } }