From e5597d25b9bcd429de6181c299cfa98652231f60 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 4 Jul 2025 13:52:20 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=89=E9=98=85?= =?UTF-8?q?=E7=89=87=E6=9C=9F=20=E6=97=A0=E5=85=A8=E5=B1=80=E8=A7=A6?= =?UTF-8?q?=E5=8F=91PD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/MailService.cs | 1 + .../Document/TrialEmailNoticeConfigService.cs | 30 +++++++++++-------- .../ReadingMedicalReviewService.cs | 16 +++++----- .../ReadingImageTaskService.cs | 3 +- .../ReadingJudgeTaskService.cs | 3 +- .../SiteSurvey/TrialSiteSurveyService.cs | 3 +- 6 files changed, 32 insertions(+), 24 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs index f49527200..597b55bba 100644 --- a/IRaCIS.Core.Application/Service/Common/MailService.cs +++ b/IRaCIS.Core.Application/Service/Common/MailService.cs @@ -265,6 +265,7 @@ namespace IRaCIS.Core.Application.Service //中心调研 登陆 public async Task AnolymousSendEmail(string researchProgramNo, string emailAddress, int verificationCode) { + //throw new BusinessValidationFailedException("模拟邮件取数据或者发送异常!!!"); var messageToSend = new MimeMessage(); //发件地址 diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 69d9280d6..5869ab32c 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -237,6 +237,8 @@ namespace IRaCIS.Core.Application.Service //单双中 t.TrialReadingCriterion.ReadingType, + t.TrialReadingCriterion.IsGlobalReading, + t.TrialReadingCriterion.CriterionType, //有序与否 t.TrialReadingCriterion.IsReadingTaskViewInOrder, @@ -369,7 +371,7 @@ namespace IRaCIS.Core.Application.Service //仲裁在访视上 就没有全局阅片 没有阅片期 - if (taskInfo.ArbitrationRule == ArbitrationRule.Visit) + if (taskInfo.ArbitrationRule == ArbitrationRule.Visit || (taskInfo.ArbitrationRule == ArbitrationRule.Reading && taskInfo.IsGlobalReading == false)) { //找到 访视,裁判 所有有效任务(不可能有全局的) 访视和裁判任务的SourceSubjectVisitId 一样 var taskList = await _visitTaskRepository.Where(t => t.SourceSubjectVisitId == taskInfo.SourceSubjectVisitId && t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && @@ -406,8 +408,8 @@ namespace IRaCIS.Core.Application.Service } - //仲裁在阅片期 - else if (taskInfo.ArbitrationRule == ArbitrationRule.Reading) + //仲裁在阅片期 并且有阅片期 + else if (taskInfo.ArbitrationRule == ArbitrationRule.Reading && taskInfo.IsGlobalReading) { //是访视任务 不可能是裁判任务(访视上不会生成裁判),也不会是全局任务(全局任务 SourceSubjectVisitId=null ) if (taskInfo.SourceSubjectVisitId != null) @@ -868,13 +870,14 @@ namespace IRaCIS.Core.Application.Service var currentLatestPdVisitId = pdSubjectVisitIdList.Last(); //标准配置 var trialReadingCriterionConfig = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == trialReadingCriterionId).Select(t => new - { TrialReadingCriterionId = t.Id, t.ReadingType, t.IsReadingTaskViewInOrder, t.CriterionType, t.ArbitrationRule }).FirstNotNullAsync(); + { TrialReadingCriterionId = t.Id, t.ReadingType, t.IsReadingTaskViewInOrder, t.CriterionType, t.ArbitrationRule, t.IsGlobalReading }).FirstNotNullAsync(); // 项目双重 if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double && trialReadingCriterionConfig.IsReadingTaskViewInOrder == ReadingOrder.InOrder) { - //仲裁在访视上面 - if (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Visit) + //仲裁在访视上面 或者有阅片期 但是没有全局任务 + if (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Visit || + (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Reading && trialReadingCriterionConfig.IsGlobalReading == false)) { //在两位阅片人读完访视后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完 @@ -910,8 +913,8 @@ namespace IRaCIS.Core.Application.Service } } - //仲裁在阅片期上 - else if (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Reading) + //仲裁在阅片期上 并且有全局任务 + else if (trialReadingCriterionConfig.ArbitrationRule == ArbitrationRule.Reading && trialReadingCriterionConfig.IsGlobalReading) { var existReadModule = await _readModuleRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == currentLatestPdVisitId && t.ReadingSetType == ReadingSetType.ImageReading) .FirstOrDefaultAsync(); @@ -923,6 +926,7 @@ namespace IRaCIS.Core.Application.Service } else { + var taskList = await _visitTaskRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.TaskState == TaskState.Effect && t.SouceReadModuleId == existReadModule.Id && (t.ReadingCategory == ReadingCategory.Global || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync(); @@ -1285,23 +1289,23 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi case CriterionType.PCWG3: var questionAnsewer = await _readingGlobalTaskInfoRepository.Where(t => t.TaskId == visitTaskId && t.TrialReadingQuestion.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstOrDefaultAsync(); - if (questionAnsewer != null&& questionAnsewer.Answer.IsNotNullOrEmpty()) + if (questionAnsewer != null && questionAnsewer.Answer.IsNotNullOrEmpty()) { answer = questionAnsewer.Answer; } else { - var visittaskList=await _visitTaskRepository.Where(t => t.Id == visitTaskId ).Select(x=>x.RelatedVisitTaskIdList).FirstOrDefaultAsync(); + var visittaskList = await _visitTaskRepository.Where(t => t.Id == visitTaskId).Select(x => x.RelatedVisitTaskIdList).FirstOrDefaultAsync(); var task = await _visitTaskRepository.Where(x => visittaskList.Contains(x.Id) && x.ReadingCategory == ReadingCategory.Visit).OrderByDescending(x => x.VisitTaskNum).FirstOrDefaultAsync(); if (task != null) { - answer= await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == task.Id && t.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation) + answer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == task.Id && t.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation) .Select(t => t.Answer).FirstOrDefaultAsync(); } } - - + + break; diff --git a/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicalReviewService.cs b/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicalReviewService.cs index 943c669b6..9a70bd3a3 100644 --- a/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicalReviewService.cs +++ b/IRaCIS.Core.Application/Service/Reading/MedicalAudit/ReadingMedicalReviewService.cs @@ -367,7 +367,7 @@ namespace IRaCIS.Core.Application.Service /// /// [HttpPost] - [TrialGlobalLimit( "AfterStopCannNotOpt" )] + [TrialGlobalLimit("AfterStopCannNotOpt")] public async Task SaveMedicineQuestion(SaveMedicineQuestionInDto inDto) { var medicalReviewInfo = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).FirstNotNullAsync(); @@ -411,7 +411,7 @@ namespace IRaCIS.Core.Application.Service /// /// /// - [TrialGlobalLimit( "AfterStopCannNotOpt" )] + [TrialGlobalLimit("AfterStopCannNotOpt")] public async Task SaveMedicalReviewInfo(SaveMedicalReviewInfoInDto inDto) { var medicalReviewInfo = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).FirstNotNullAsync(); @@ -466,7 +466,7 @@ namespace IRaCIS.Core.Application.Service /// /// [HttpPost] - [TrialGlobalLimit( "AfterStopCannNotOpt" )] + [TrialGlobalLimit("AfterStopCannNotOpt")] public async Task ClosedMedicalReviewDialog(ClosedMedicalReviewDialogInDto inDto) { await _taskMedicalReviewRepository.UpdatePartialFromQueryAsync(inDto.TaskMedicalReviewId, x => new TaskMedicalReview() @@ -499,7 +499,7 @@ namespace IRaCIS.Core.Application.Service /// /// /// - [TrialGlobalLimit( "AfterStopCannNotOpt" )] + [TrialGlobalLimit("AfterStopCannNotOpt")] public async Task SendMedicalReviewDialog(SendMedicalReviewDialogInDto inDto) { var medicalReviewInfo = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).FirstNotNullAsync(); @@ -539,7 +539,7 @@ namespace IRaCIS.Core.Application.Service /// /// [UnitOfWork] - [TrialGlobalLimit( "AfterStopCannNotOpt" )] + [TrialGlobalLimit("AfterStopCannNotOpt")] public async Task IRSendMedicalReviewDialog(IRSendMedicalReviewDialogInDto inDto) { var medicalReviewInfo = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).FirstNotNullAsync(); @@ -680,7 +680,7 @@ namespace IRaCIS.Core.Application.Service if (allMedicalAuditList.All(t => t.IsApplyHeavyReading == false && t.AuditSignTime != null && t.AuditState == MedicalReviewAuditState.HaveSigned)) { //自动发送 - await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(medicalReviewInfo.VisitTaskId, false); + await SafeMailHelper.Run(async () => await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(medicalReviewInfo.VisitTaskId, false)); } @@ -699,7 +699,7 @@ namespace IRaCIS.Core.Application.Service /// [HttpPost] [UnitOfWork] - [TrialGlobalLimit( "AfterStopCannNotOpt" )] + [TrialGlobalLimit("AfterStopCannNotOpt")] public async Task IRConfirmMedicalReview(IRConfirmMedicalReviewInDto inDto) { var medicalReviewInfo = await _taskMedicalReviewRepository.Where(x => x.Id == inDto.TaskMedicalReviewId).FirstNotNullAsync(); @@ -802,7 +802,7 @@ namespace IRaCIS.Core.Application.Service .Select(x => new GetIRMedicalFeedbackListOutDto { TaskState = x.VisitTask.TaskState, - IsSubjectQuit=x.VisitTask.Subject.IsSubjectQuit, + IsSubjectQuit = x.VisitTask.Subject.IsSubjectQuit, Id = x.Id, VisitTaskId = x.VisitTaskId, IsUrgent = x.VisitTask.IsUrgent, diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index ee14737c0..6489a67ae 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -3504,7 +3504,8 @@ namespace IRaCIS.Core.Application.Service await _visitTaskRepository.SaveChangesAsync(); - await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(visitTaskId); + await SafeMailHelper.Run(async () => await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(visitTaskId)); + } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs index 9f38d901a..cd7fdead0 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingJudgeTaskService.cs @@ -501,7 +501,8 @@ namespace IRaCIS.Core.Application.Service // 创建任务关联关系 await this.CreateTaskRelated(inDto.VisitTaskId); - await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(inDto.VisitTaskId); + await SafeMailHelper.Run(async () => await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(inDto.VisitTaskId)); + return ResponseOutput.Ok(result); } diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs index a12ff3ffe..c2a4bf479 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/TrialSiteSurveyService.cs @@ -288,7 +288,8 @@ namespace IRaCIS.Core.Application.Contracts var trialInfo = await _trialRepository.FirstOrDefaultAsync(t => t.Id == userInfo.TrialId); - await _mailVerificationService.AnolymousSendEmail(trialInfo.ResearchProgramNo, userInfo.Email, verificationCode); + await SafeMailHelper.Run(async () => await _mailVerificationService.AnolymousSendEmail(trialInfo.ResearchProgramNo, userInfo.Email, verificationCode)); + return ResponseOutput.Ok(); From d4dc00804b7aee13ad6a92540a9cc6ac642db206 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 4 Jul 2025 13:58:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=A5=E7=BB=84?= =?UTF-8?q?=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Document/TrialEmailNoticeConfigService.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 5869ab32c..b47505f33 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -1086,6 +1086,7 @@ namespace IRaCIS.Core.Application.Service x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State && x.ReadingQuestionTrial.LesionType == LesionType.TargetLesion)) { enrollAnswer = _userInfo.IsEn_Us ? "Yes" : "是"; + isEnroll = true; } break; @@ -1099,6 +1100,7 @@ x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.LesionNumber && x.Readi if (exists) { enrollAnswer = _userInfo.IsEn_Us ? "Yes" : "是"; + isEnroll = true; } break;