diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 6ecfb017..d175dc64 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -143,6 +143,21 @@ namespace IRaCIS.Core.Application.Service //每个访视 根据项目配置生成任务 双审生成两个 + TaskUrgentType? taskUrgentType = null; + + if (subjectVisit.PDState == PDStateEnum.PDProgress) + { + taskUrgentType = TaskUrgentType.PDProgress; + } + else if (subjectVisit.IsEnrollmentConfirm) + { + taskUrgentType = TaskUrgentType.EnrollmentConfirm; + } + else if (subjectVisit.IsUrgent) + { + taskUrgentType = TaskUrgentType.VisitUrgent; + } + if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double) { //未防止脏数据 这里也多判断一次 @@ -152,26 +167,13 @@ namespace IRaCIS.Core.Application.Service VisitTask? task1 = null; VisitTask? task2 = null; - + if (!existCurrentVisitTaskList.Any(t => t.ArmEnum == Arm.DoubleReadingArm1)) { currentMaxCodeInt = currentMaxCodeInt + 1; - TaskUrgentType? taskUrgentType = null; - - if (subjectVisit.PDState == PDStateEnum.PDProgress) - { - taskUrgentType = TaskUrgentType.PDProgress; - } - else if (subjectVisit.IsEnrollmentConfirm) - { - taskUrgentType = TaskUrgentType.EnrollmentConfirm; - } - else if (subjectVisit.IsUrgent) - { - taskUrgentType = TaskUrgentType.VisitUrgent; - } + task1 = await _visitTaskRepository.AddAsync(new VisitTask() { @@ -208,6 +210,7 @@ namespace IRaCIS.Core.Application.Service IsUrgent = subjectVisit.IsUrgent, TaskBlindName = blindTaskName, TaskName = subjectVisit.VisitName, + TaskUrgentType = taskUrgentType, VisitTaskNum = subjectVisit.VisitNum, //CheckPassedTime = subjectVisit.CheckPassedTime, ArmEnum = Arm.DoubleReadingArm2,//特殊 @@ -261,6 +264,7 @@ namespace IRaCIS.Core.Application.Service TaskBlindName = blindTaskName, TaskName = subjectVisit.VisitName, VisitTaskNum = subjectVisit.VisitNum, + TaskUrgentType = taskUrgentType, //CheckPassedTime = subjectVisit.CheckPassedTime, ArmEnum = Arm.SingleReadingArm, //特殊 Code = currentMaxCodeInt + 1, @@ -435,7 +439,7 @@ namespace IRaCIS.Core.Application.Service int currentMaxCodeInt = cacheMaxCodeInt > dbMaxCode ? cacheMaxCodeInt : dbMaxCode; - + switch (generateTaskCommand.ReadingCategory) @@ -451,6 +455,29 @@ namespace IRaCIS.Core.Application.Service foreach (var subjectVisit in subjectGroup.SubjectVisitList) { + + var subjectVisitInfo = await _subjectVisitRepository.Where(x => x.Id == subjectVisit.Id).Select(x => new + { + x.PDState, + x.IsEnrollmentConfirm, + x.IsUrgent, + }).FirstNotNullAsync(); + + TaskUrgentType? taskUrgentType = null; + + if (subjectVisitInfo.PDState == PDStateEnum.PDProgress) + { + taskUrgentType = TaskUrgentType.PDProgress; + } + else if (subjectVisitInfo.IsEnrollmentConfirm) + { + taskUrgentType = TaskUrgentType.EnrollmentConfirm; + } + else if (subjectVisitInfo.IsUrgent) + { + taskUrgentType = TaskUrgentType.VisitUrgent; + } + var visitNumList = _subjectVisitRepository.Where(t => t.SubjectId == subjectGroup.SubjectId && t.IsLostVisit == false).OrderBy(t => t.VisitNum).Select(t => t.VisitNum).ToList(); @@ -507,6 +534,8 @@ namespace IRaCIS.Core.Application.Service SubjectId = subjectVisit.SubjectId, IsUrgent = subjectVisit.IsUrgent, TaskBlindName = blindTaskName, + TaskUrgentType = taskUrgentType, + TaskName = subjectVisit.VisitName, VisitTaskNum = subjectVisit.VisitNum, //CheckPassedTime = subjectVisit.CheckPassedTime, @@ -532,6 +561,7 @@ namespace IRaCIS.Core.Application.Service IsUrgent = subjectVisit.IsUrgent, TaskBlindName = blindTaskName, TaskName = subjectVisit.VisitName, + TaskUrgentType = taskUrgentType, VisitTaskNum = subjectVisit.VisitNum, //CheckPassedTime = subjectVisit.CheckPassedTime, ArmEnum = Arm.DoubleReadingArm2,//特殊 @@ -814,6 +844,7 @@ namespace IRaCIS.Core.Application.Service IsUrgent = subjectVisit.IsUrgent, TaskBlindName = blindTaskName, TaskName = subjectVisit.VisitName, + TaskUrgentType = taskUrgentType, VisitTaskNum = subjectVisit.VisitNum, //CheckPassedTime = subjectVisit.CheckPassedTime, ArmEnum = Arm.SingleReadingArm, //特殊 @@ -935,7 +966,7 @@ namespace IRaCIS.Core.Application.Service Code = currentMaxCodeInt + 1, TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), ReadingCategory = ReadingCategory.Visit, - + TaskUrgentType = latestTask.TaskUrgentType, SourceSubjectVisitId = latestTask.SourceSubjectVisitId, VisitTaskNum = latestTask.VisitTaskNum, TaskBlindName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(latestTask.VisitTaskNum), @@ -1036,7 +1067,30 @@ namespace IRaCIS.Core.Application.Service var reReadingVisitTask = generateTaskCommand.ReReadingTask; - var subjectVisitUrgent = _subjectVisitRepository.Where(t => t.Id == reReadingVisitTask.SourceSubjectVisitId).Select(t=>t.IsUrgent).FirstOrDefault(); + + + + var subjectVisitUrgentInfo = await _subjectVisitRepository.Where(x => x.Id == reReadingVisitTask.SourceSubjectVisitId).Select(x => new + { + x.PDState, + x.IsEnrollmentConfirm, + x.IsUrgent, + }).FirstNotNullAsync(); + + TaskUrgentType? taskUrgent = null; + + if (subjectVisitUrgentInfo.PDState == PDStateEnum.PDProgress) + { + taskUrgent = TaskUrgentType.PDProgress; + } + else if (subjectVisitUrgentInfo.IsEnrollmentConfirm) + { + taskUrgent = TaskUrgentType.EnrollmentConfirm; + } + else if (subjectVisitUrgentInfo.IsUrgent) + { + taskUrgent = TaskUrgentType.VisitUrgent; + } var newTask = await _visitTaskRepository.AddAsync(new VisitTask() { @@ -1047,7 +1101,8 @@ namespace IRaCIS.Core.Application.Service TaskName = reReadingVisitTask.TaskName, TaskBlindName = reReadingVisitTask.TaskBlindName, - IsUrgent = reReadingVisitTask.IsAnalysisCreate?false: subjectVisitUrgent, + IsUrgent = reReadingVisitTask.IsAnalysisCreate?false: subjectVisitUrgentInfo.IsUrgent, + TaskUrgentType = reReadingVisitTask.IsAnalysisCreate ? null : taskUrgent, VisitTaskNum = reReadingVisitTask.VisitTaskNum, ReadingCategory = reReadingVisitTask.ReadingCategory, @@ -1073,7 +1128,7 @@ namespace IRaCIS.Core.Application.Service // AllocateTime = DateTime.Now, //DoctorUserId = reReadingVisitTask.DoctorUserId, - });; + }); generateTaskCommand.Action(newTask); @@ -1264,6 +1319,7 @@ namespace IRaCIS.Core.Application.Service // 需要添加全局任务再添加 if (originalTaskInfo.TrialReadingCriterion.IsGlobalReading) { + var visitNumList = _subjectVisitRepository.Where(t => t.SubjectId == originalTaskInfo.SubjectId && t.IsLostVisit == false).OrderBy(t => t.VisitNum).Select(t => t.VisitNum).ToList(); foreach (var item in generateTaskCommand.ReadingGenerataTaskList) { item.VisitNum = originalTaskInfo.VisitTaskNum; @@ -1275,14 +1331,15 @@ namespace IRaCIS.Core.Application.Service VisitTaskNum = item.VisitNum + ReadingCommon.TaskNumDic[ReadingCategory.Global], TaskName = item.ReadingName, ArmEnum = originalTaskInfo.ArmEnum,//特殊 - + TaskUrgentType= originalTaskInfo.TaskUrgentType, + TaskUrgentRemake= originalTaskInfo.TaskUrgentRemake, DoctorUserId = originalTaskInfo.DoctorUserId, AllocateTime = DateTime.Now, TaskAllocationState = TaskAllocationState.Allocated, SuggesteFinishedTime = DateTime.Now.AddDays(7), Code = currentMaxCodeInt + 1, - TaskBlindName = "G-"+ item.VisitNum.ToString("0.##"), + TaskBlindName = "G-"+ visitNumList.IndexOf(originalTaskInfo.VisitTaskNum), SouceReadModuleId = item.ReadModuleId, TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), ReadingCategory = item.ReadingCategory, diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingGlobalTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingGlobalTaskService.cs index 46fa86f4..2073ec29 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingGlobalTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingGlobalTaskService.cs @@ -46,18 +46,37 @@ namespace IRaCIS.Application.Services public async Task BatchSubmitGlobalReadingInfo(BatchSubmitGlobalReadingInfo inDto) { await VerifyTaskIsSign(inDto.GlobalTaskId); + + var criterionType = await _visitTaskRepository.Where(x => x.Id == inDto.GlobalTaskId).Select(x => x.TrialReadingCriterion.CriterionType).FirstNotNullAsync(); foreach (var item in inDto.VisitTaskAnswerList) { foreach (var answer in item.AnswerList) { await _readingGlobalTaskInfoRepository.BatchDeleteNoTrackingAsync(x => x.GlobalTaskId == inDto.GlobalTaskId && x.TaskId == item.VisitTaskId && x.GlobalAnswerType == answer.GlobalAnswerType && x.QuestionId == answer.QuestionId); - await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == item.VisitTaskId && x.ReadingQuestionTrialId == answer.QuestionId - && x.Answer != answer.Answer && answer.Answer != string.Empty&& answer.Answer!=null - , x => new ReadingTaskQuestionAnswer() + + + if (criterionType == CriterionType.PCWG3) { - GlobalChangeAnswer = answer.Answer, - IsGlobalChange=true, - }); + await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == item.VisitTaskId && x.ReadingQuestionTrialId == answer.QuestionId + && x.Answer != answer.Answer && answer.Answer != string.Empty && answer.Answer != null + , x => new ReadingTaskQuestionAnswer() + { + Answer= answer.Answer, + GlobalChangeAnswer = answer.Answer, + IsGlobalChange = true, + }); + } + else + { + await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == item.VisitTaskId && x.ReadingQuestionTrialId == answer.QuestionId + && x.Answer != answer.Answer && answer.Answer != string.Empty && answer.Answer != null + , x => new ReadingTaskQuestionAnswer() + { + GlobalChangeAnswer = answer.Answer, + IsGlobalChange = true, + }); + } + } } var answers= inDto.VisitTaskAnswerList.SelectMany(x => x.AnswerList.Select(y => new ReadingGlobalTaskInfo() @@ -308,6 +327,10 @@ namespace IRaCIS.Application.Services }).ToList(); + + List questionTypes = new List() + { + }; if (criterionType != CriterionType.PCWG3) { x.AgreeOrNot = new List() @@ -322,6 +345,8 @@ namespace IRaCIS.Application.Services } }; + + questionTypes.Add(new GetGlobalQuestionType() { GlobalAnswerType = GlobalAnswerType.UpdateType, QuestionName = "评估更新类型" }); } else { @@ -331,14 +356,8 @@ namespace IRaCIS.Application.Services - List questionTypes = new List() - { - }; - if(criterionType!= CriterionType.PCWG3) - { - questionTypes.Add(new GetGlobalQuestionType() { GlobalAnswerType = GlobalAnswerType.UpdateType, QuestionName = "评估更新类型" }); - - } + + questionTypes.Add(new GetGlobalQuestionType() { GlobalAnswerType = GlobalAnswerType.Reason, QuestionName = "全局阅片备注" }); foreach (var item in questionTypes) {