diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index c47c3b572..eacabd893 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -454,12 +454,11 @@ - + 同步系统配置的文档到想项目中 - diff --git a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs index ee4d31560..cc3f110dc 100644 --- a/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs +++ b/IRaCIS.Core.Application/Service/Document/DTO/TrialEmailNoticeConfigViewModel.cs @@ -100,7 +100,11 @@ namespace IRaCIS.Core.Application.ViewModel public CommonDocumentBusinessScenario? BusinessScenarioEnum { get; set; } - public CriterionType? CriterionTypeEnum { get; set; } + //public CriterionType? CriterionTypeEnum { get; set; } + + public Guid? TrialReadingCriterionId { get; set; } + + public bool IsDistinguishCriteria { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index e27f540a8..3d03f74eb 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -56,7 +56,7 @@ namespace IRaCIS.Core.Application.Service EmailSMTPServerAddress = x.EmailSMTPServerAddress, EmailFromEmail = x.EmailFromEmail, EmailFromName = x.EmailFromEmail, - IsConfigureEmail=x.IsConfigureEmail, + IsConfigureEmail = x.IsConfigureEmail, EmailSMTPServerPort = x.EmailSMTPServerPort }).FirstNotNullAsync(); @@ -88,12 +88,12 @@ namespace IRaCIS.Core.Application.Service EmailAuthorizationCode = inDto.EmailAuthorizationCode, EmailSMTPServerAddress = inDto.EmailSMTPServerAddress, EmailSMTPServerPort = inDto.EmailSMTPServerPort, - IsConfigureEmail=true, + IsConfigureEmail = true, }); - await _trialEmailNoticeConfigRepository.BatchUpdateNoTrackingAsync(x => x.TrialId == inDto.TrialId, x => new TrialEmailNoticeConfig() + await _trialEmailNoticeConfigRepository.BatchUpdateNoTrackingAsync(x => x.TrialId == inDto.TrialId, x => new TrialEmailNoticeConfig() { AuthorizationCode = inDto.EmailAuthorizationCode, FromEmail = inDto.EmailFromEmail, @@ -103,36 +103,56 @@ namespace IRaCIS.Core.Application.Service }); await _trialRepository.SaveChangesAsync(); - return ResponseOutput.Ok(); + return ResponseOutput.Ok(); } /// /// 同步系统配置的文档到想项目中 /// /// - /// /// /// - private async Task SyncSystemEmainCofigDocListAsync(Guid trialId, CriterionType? criterionTypeEnum) + private async Task SyncSystemEmainCofigDocListAsync(Guid trialId) { - 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 && t.TrialId == trialId).Count(); + //判断流程配置是否确认 确认了一定确认了标准 可以进行同步 + + if (_repository.Where(t => t.Id == trialId).Any(t => t.IsTrialProcessConfirmed == true)) + { + + //只要有系统标准的文档 说明同步过了 + var trialDocCount = _trialEmailNoticeConfigRepository.Where(t =>/* t.CriterionTypeEnum == criterionTypeEnum &&*/ t.TrialId == trialId && t.TrialReadingCriterionId != null).Count(); if (trialDocCount == 0) { + //找到确认的标准 + var list= await _repository.Where(t => t.TrialId == trialId && t.IsConfirm).Select(t => new { t.CriterionType, TrialReadingCriterionId = t.Id }).ToListAsync(); + + var confirmedCriterionTypeList = list.Select(t => (CriterionType?) t.CriterionType).ToList(); + + var docmentList = _repository.Where(t => confirmedCriterionTypeList.Contains(t.CriterionTypeEnum) ).Select(t => new { t.Path, t.Name, t.Code, t.BusinessScenarioEnum ,t.CriterionTypeEnum}).ToList(); + foreach (var item in docmentList) { - await _trialEmailNoticeConfigRepository.AddAsync(new TrialEmailNoticeConfig() { TrialId=trialId, CriterionTypeEnum= criterionTypeEnum.Value, FileName = item.Name, FilePath = item.Path, BusinessScenarioEnum = item.BusinessScenarioEnum, Code = item.Code }); + await _trialEmailNoticeConfigRepository.AddAsync(new TrialEmailNoticeConfig() + { + TrialId = trialId, + TrialReadingCriterionId= list.Where(t=>t.CriterionType==item.CriterionTypeEnum).FirstOrDefault()?.TrialReadingCriterionId, + FileName = item.Name, + FilePath = item.Path, + BusinessScenarioEnum = item.BusinessScenarioEnum, + Code = item.Code + }); } } + } + + await _trialEmailNoticeConfigRepository.SaveChangesAsync(); } @@ -162,15 +182,15 @@ namespace IRaCIS.Core.Application.Service VisitEarliestScanDate = t.SourceSubjectVisit.EarliestScanDate, - VisitName =(string?) t.SourceSubjectVisit.VisitName, - IsFinalVisit=(bool?)t.SourceSubjectVisit.IsFinalVisit, - PDState =(PDStateEnum?) t.SourceSubjectVisit.PDState, - IsEnrollmentConfirm= (bool?) t.SourceSubjectVisit.IsEnrollmentConfirm, - IsBaseline =(bool?) t.SourceSubjectVisit.IsBaseLine, + VisitName = (string?)t.SourceSubjectVisit.VisitName, + IsFinalVisit = (bool?)t.SourceSubjectVisit.IsFinalVisit, + PDState = (PDStateEnum?)t.SourceSubjectVisit.PDState, + IsEnrollmentConfirm = (bool?)t.SourceSubjectVisit.IsEnrollmentConfirm, + IsBaseline = (bool?)t.SourceSubjectVisit.IsBaseLine, ModuleEarliestScanDate = t.ReadModule.SubjectVisit.EarliestScanDate, - ModuleVisitName = (string?) t.ReadModule.SubjectVisit.VisitName, + ModuleVisitName = (string?)t.ReadModule.SubjectVisit.VisitName, MoudulePDState = (PDStateEnum?)t.ReadModule.SubjectVisit.PDState, t.SourceSubjectVisitId, @@ -206,7 +226,7 @@ namespace IRaCIS.Core.Application.Service if (taskInfo.ReadingTaskState == ReadingTaskState.HaveSigned) { //入组确认场景 - if (taskInfo.IsEnrollmentConfirm==true && taskInfo.IsEnrollementQualificationConfirm==true && taskInfo.IsBaseline==true) + if (taskInfo.IsEnrollmentConfirm == true && taskInfo.IsEnrollementQualificationConfirm == true && taskInfo.IsBaseline == true) { businessScenarioEnum = CommonDocumentBusinessScenario.EnrollConfirmed; @@ -257,7 +277,7 @@ namespace IRaCIS.Core.Application.Service - var toUserList = _repository.Where(t => t.TrialId == taskInfo.TrialId && toUserTypeEnumList.Contains(t.User.UserTypeEnum) && t.SiteId== taskInfo.SiteId).Select(t => new { t.User.EMail, t.User.FullName }).ToList(); + var toUserList = _repository.Where(t => t.TrialId == taskInfo.TrialId && toUserTypeEnumList.Contains(t.User.UserTypeEnum) && t.SiteId == taskInfo.SiteId).Select(t => new { t.User.EMail, t.User.FullName }).ToList(); var copyUserTypeEnumList = emailConfig.TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.Copy).Select(c => c.UserType).ToList(); var copyUserList = _repository.Where(t => t.TrialId == taskInfo.TrialId && copyUserTypeEnumList.Contains(t.User.UserTypeEnum)).Select(t => new { t.User.EMail, t.User.FullName }).ToList(); @@ -341,7 +361,7 @@ namespace IRaCIS.Core.Application.Service { //如果其他阅片人已经做了,说明发送了入组确认报告,第二个人做完就不发送了 if (await _visitTaskRepository.AnyAsync(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && - t.Id != visitTaskId && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.TrialReadingCriterionId==taskInfo.TrialReadingCriterionId)) + t.Id != visitTaskId && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId)) { isNeedSend = false; } @@ -369,7 +389,7 @@ namespace IRaCIS.Core.Application.Service } } - + } else if (businessScenarioEnum == CommonDocumentBusinessScenario.PDConfirmed) { @@ -414,7 +434,7 @@ namespace IRaCIS.Core.Application.Service } else//非截止访视 在访视读完后,发送 { - answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Visit,taskInfo.CriterionType); + answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Visit, taskInfo.CriterionType); } } //截止访视 在访视读完,并完成全局阅片后发送全局的结果 @@ -438,7 +458,7 @@ namespace IRaCIS.Core.Application.Service if (taskInfo.ArbitrationRule == ArbitrationRule.Visit) { //找到 访视,裁判 所有有效任务(不可能有全局的) 访视和裁判任务的SourceSubjectVisitId 一样 - var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId==taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && + var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync(); @@ -503,7 +523,7 @@ namespace IRaCIS.Core.Application.Service //是全局任务 或者全局的裁判任务 (如果是全局任务,那么此时裁判任务已经生成) else if (taskInfo.SouceReadModuleId != null) { - var taskList = await _visitTaskRepository.Where(t =>t.TrialReadingCriterionId==taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && t.SouceReadModuleId == taskInfo.SouceReadModuleId + var taskList = await _visitTaskRepository.Where(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && t.SouceReadModuleId == taskInfo.SouceReadModuleId && (t.ReadingCategory == ReadingCategory.Global || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync(); //两个全局没有裁判 @@ -575,7 +595,7 @@ namespace IRaCIS.Core.Application.Service { //在两位阅片人读完访视后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完 - var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId==taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync(); + var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync(); //这里要求 到这里已经如果有裁判 已经生成裁判了保存数据库 if (taskList.Count == 2 && taskList.Count(t => t.ReadingTaskState == ReadingTaskState.HaveSigned && t.ReadingCategory == ReadingCategory.Visit) == 2) @@ -619,7 +639,7 @@ namespace IRaCIS.Core.Application.Service } else { - isNeedSend=false; + isNeedSend = false; } #region MiniWord 组织字典 发送 @@ -631,7 +651,7 @@ namespace IRaCIS.Core.Application.Service ["ResearchProgramNo"] = taskInfo.ResearchProgramNo, ["TrialSiteCode"] = taskInfo.TrialSiteCode, ["SubjectCode"] = taskInfo.SubjectCode, - ["VisitName"] = taskInfo.SourceSubjectVisitId != null ? taskInfo.VisitName:taskInfo.ModuleVisitName, + ["VisitName"] = taskInfo.SourceSubjectVisitId != null ? taskInfo.VisitName : taskInfo.ModuleVisitName, ["EarliestScanDate"] = taskInfo.SourceSubjectVisitId != null ? taskInfo.VisitEarliestScanDate : taskInfo.ModuleEarliestScanDate, ["SignTime"] = taskInfo.SignTime, ["Result"] = answer @@ -786,11 +806,11 @@ namespace IRaCIS.Core.Application.Service - - + + } @@ -814,11 +834,10 @@ namespace IRaCIS.Core.Application.Service public async Task> GetTrialEmailNoticeConfigList(TrialEmailNoticeConfigQuery inQuery) { - await SyncSystemEmainCofigDocListAsync(inQuery.TrialId, inQuery.CriterionTypeEnum); var trialEmailNoticeConfigQueryable = _trialEmailNoticeConfigRepository.Where(t => t.TrialId == inQuery.TrialId) - .WhereIf(inQuery.CriterionTypeEnum != null, t => t.CriterionTypeEnum == inQuery.CriterionTypeEnum) - .WhereIf(inQuery.CriterionTypeEnum == null, t => t.CriterionTypeEnum == null) + .WhereIf(inQuery.IsDistinguishCriteria == false, t => t.TrialReadingCriterionId == null) + .WhereIf(inQuery.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId) .WhereIf(inQuery.BusinessScenarioEnum != null, t => t.BusinessScenarioEnum == inQuery.BusinessScenarioEnum) .ProjectTo(_mapper.ConfigurationProvider); @@ -892,18 +911,18 @@ namespace IRaCIS.Core.Application.Service } - private async Task TestEmailConfigAsync(TrialEmailNoticeConfigAddOrEdit config) + private async Task TestEmailConfigAsync(TrialEmailNoticeConfigAddOrEdit config) { - var toUserList = await _repository.Where(t => t.TrialId == config.TrialId ).WhereIf(config.ToUserTypeList!=null,t=> config.ToUserTypeList.Contains(t.User.UserTypeEnum)).Select(t => new { t.User.EMail, t.User.FullName }).ToListAsync(); + var toUserList = await _repository.Where(t => t.TrialId == config.TrialId && config.ToUserTypeList.Contains(t.User.UserTypeEnum)).Select(t => new { t.User.EMail, t.User.FullName }).ToListAsync(); if (!config.FromEmail.Contains("@") || string.IsNullOrEmpty(config.FromEmail)) { throw new BusinessValidationFailedException("项目发件邮箱配置有误,请核实"); } - - if (toUserList.Count() == 0|| toUserList.Where(t=>t.EMail.Contains("@")).Count()==0) + + if (toUserList.Count() == 0 || toUserList.Where(t => t.EMail.Contains("@")).Count() == 0) { throw new BusinessValidationFailedException("项目没有有效的收件人,无法发送邮件"); } @@ -948,7 +967,7 @@ namespace IRaCIS.Core.Application.Service catch (Exception ex) { - throw new BusinessValidationFailedException("发件人配置错误,请核对服务器地址或者授权码是否填写有误"+ex.Message); + throw new BusinessValidationFailedException("发件人配置错误,请核对服务器地址或者授权码是否填写有误" + ex.Message); } diff --git a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs index a4b6029a5..b7c4b78a9 100644 --- a/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs +++ b/IRaCIS.Core.Domain/Document/TrialEmailNoticeConfig.cs @@ -73,6 +73,9 @@ namespace IRaCIS.Core.Domain.Models public CriterionType? CriterionTypeEnum { get; set; } + + public Guid? TrialReadingCriterionId { get; set; } + [Required] public string FilePath { get; set; } = string.Empty;