From b192b311eb27564c032b8a9ed3e11fee2497c6e6 Mon Sep 17 00:00:00 2001 From: "{872297557@qq.com}" <872297557@qq.com> Date: Sat, 24 Dec 2022 10:19:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7=E5=88=86=E6=9E=90?= =?UTF-8?q?=E8=A7=84=E5=88=99=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/TaskConsistentRuleViewModel.cs | 6 +- .../Allocation/TaskConsistentRuleService.cs | 206 ++++++++++-------- .../Service/QC/QCOperationService.cs | 4 +- 3 files changed, 125 insertions(+), 91 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/TaskConsistentRuleViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/TaskConsistentRuleViewModel.cs index 3f2654846..6dba43be2 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/TaskConsistentRuleViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/TaskConsistentRuleViewModel.cs @@ -130,7 +130,8 @@ namespace IRaCIS.Core.Application.ViewModel public Guid TrialReadingCriterionId { get; set; } - + public string BlindSubjectCode { get; set; } = string.Empty; + public string BlindTrialSiteCode { get; set; } = string.Empty; } public class VisitTaskSimpleDTO :VisitTaskGroupSimpleDTO @@ -148,8 +149,7 @@ namespace IRaCIS.Core.Application.ViewModel public bool IsHaveGeneratedTask { get; set; } - public string BlindSubjectCode { get; set; } = string.Empty; - public string BlindTrialSiteCode { get; set; } = string.Empty; + diff --git a/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs b/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs index 594e9af7c..f0a739539 100644 --- a/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs @@ -149,14 +149,14 @@ namespace IRaCIS.Core.Application.Service var blindSubjectCode = string.Empty; - var subjectTask = _visitTaskRepository.Where(t => t.SubjectId == subject.SubjectId && t.TrialReadingCriterionId==trialReadingCriterionId).OrderByDescending(t => t.BlindSubjectCode).FirstOrDefault().IfNullThrowException(); + var subjectTask = _visitTaskRepository.Where(t => t.SubjectId == subject.SubjectId && t.TrialReadingCriterionId==trialReadingCriterionId && t.IsSelfAnalysis == true).OrderByDescending(t => t.BlindSubjectCode).FirstOrDefault().IfNullThrowException(); if (subjectTask.BlindSubjectCode != String.Empty) { blindSubjectCode = subjectTask.BlindSubjectCode; } else { - var maxCodeStr = _visitTaskRepository.Where(t => t.TrialId == subject.TrialId && t.TrialReadingCriterionId == trialReadingCriterionId).OrderByDescending(t => t.BlindSubjectCode).Select(t => t.BlindSubjectCode).FirstOrDefault(); + var maxCodeStr = _visitTaskRepository.Where(t => t.TrialId == subject.TrialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsSelfAnalysis == true).OrderByDescending(t => t.BlindSubjectCode).Select(t => t.BlindSubjectCode).FirstOrDefault(); if ( !string.IsNullOrEmpty(maxCodeStr)) { @@ -287,109 +287,143 @@ namespace IRaCIS.Core.Application.Service var configDoctorUserIdList = await doctorUserIdQuery.ToListAsync(); - - - foreach (var subject in subjectList.Where(t => t.IsHaveGeneratedTask == false)) + using (await _mutex.LockAsync()) { + int maxCodeInt = 0; - //组间一致性分析 也用盲态SubjectCode - - - - - - - var subjectAddTaskList = new List(); - - - //需要处理的医生 - - var needAddDoctorUserIdList = configDoctorUserIdList.Except(subject.VisitTaskList.Select(t => (Guid)t.DoctorUserId)).ToList(); - - if (needAddDoctorUserIdList.Count == 0) - { - throw new BusinessValidationFailedException("请配置一致性分析的医生"); - } - - - foreach (var needAddDoctorUserId in needAddDoctorUserIdList) + foreach (var subject in subjectList.Where(t => t.IsHaveGeneratedTask == false)) { - //每个医生 都生成处理的任务 - foreach (var task in subject.SubjectTaskVisitList.Take(filterObj.PlanVisitCount)) + //组间一致性分析 也用盲态SubjectCode + //处理 Subject 编号 + + var blindSubjectCode = string.Empty; + + var subjectTask = _visitTaskRepository.Where(t => t.SubjectId == subject.SubjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsSelfAnalysis==false).OrderByDescending(t => t.BlindSubjectCode).FirstOrDefault().IfNullThrowException(); + if (subjectTask.BlindSubjectCode != String.Empty) { - - subjectAddTaskList.Add(new VisitTaskGroupSimpleDTO() - { - ReadingCategory = task.ReadingCategory, - ReadingTaskState = task.ReadingTaskState, - TaskBlindName = task.TaskBlindName, - TaskName = task.TaskName, - TaskState = task.TaskState, - SubjectId = task.SubjectId, - VisitTaskNum = task.VisitTaskNum, - TrialId = task.TrialId, - DoctorUserId = needAddDoctorUserId, - ArmEnum = Arm.GroupConsistentArm, - SouceReadModuleId = task.SouceReadModuleId, - SourceSubjectVisitId = task.SourceSubjectVisitId, - - TrialReadingCriterionId=task.TrialReadingCriterionId, - }); - + blindSubjectCode = subjectTask.BlindSubjectCode; } - - //最后一个访视添加全局 - - if (filterObj.IsGenerateGlobalTask) + else { - var lastTask = (subjectAddTaskList.Take(filterObj.PlanVisitCount).Last()).Clone(); + var maxCodeStr = _visitTaskRepository.Where(t => t.TrialId == subject.TrialId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsSelfAnalysis == false).OrderByDescending(t => t.BlindSubjectCode).Select(t => t.BlindSubjectCode).FirstOrDefault(); - - var existGlobal = _visitTaskRepository.Where(t => t.SubjectId == lastTask.SubjectId && t.TrialReadingCriterionId==trialReadingCriterionId && t.TaskState == TaskState.Effect && t.ReadingCategory == ReadingCategory.Global && t.VisitTaskNum == lastTask.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Global]).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault(); - - - if (existGlobal == null) + if (!string.IsNullOrEmpty(maxCodeStr)) { - existGlobal = new VisitTaskSimpleDTO() - { - SubjectId = lastTask.SubjectId, - TrialId = lastTask.TrialId, - ReadingCategory = ReadingCategory.Global, - TaskName = lastTask.TaskName + "_Global", - TaskBlindName = lastTask.TaskBlindName + "_Global", + int.TryParse(maxCodeStr.Substring(maxCodeStr.Length - filterObj.BlindSubjectNumberOfPlaces), out maxCodeInt); - TrialReadingCriterionId =trialReadingCriterionId, - - }; } - - - existGlobal.ArmEnum = Arm.GroupConsistentArm; - existGlobal.DoctorUserId = needAddDoctorUserId; - - subjectAddTaskList.Add(existGlobal); + blindSubjectCode = filterObj.BlindTrialSiteCode + (maxCodeInt + 1).ToString($"D{filterObj.BlindSubjectNumberOfPlaces}"); } + + + + + + var subjectAddTaskList = new List(); + + + //需要处理的医生 + + var needAddDoctorUserIdList = configDoctorUserIdList.Except(subject.VisitTaskList.Select(t => (Guid)t.DoctorUserId)).ToList(); + + if (needAddDoctorUserIdList.Count == 0) + { + throw new BusinessValidationFailedException("请配置一致性分析的医生"); + } + + + foreach (var needAddDoctorUserId in needAddDoctorUserIdList) + { + + //每个医生 都生成处理的任务 + foreach (var task in subject.SubjectTaskVisitList.Take(filterObj.PlanVisitCount)) + { + + subjectAddTaskList.Add(new VisitTaskGroupSimpleDTO() + { + ReadingCategory = task.ReadingCategory, + ReadingTaskState = task.ReadingTaskState, + TaskBlindName = task.TaskBlindName, + TaskName = task.TaskName, + TaskState = task.TaskState, + SubjectId = task.SubjectId, + VisitTaskNum = task.VisitTaskNum, + TrialId = task.TrialId, + DoctorUserId = needAddDoctorUserId, + ArmEnum = Arm.GroupConsistentArm, + SouceReadModuleId = task.SouceReadModuleId, + SourceSubjectVisitId = task.SourceSubjectVisitId, + + TrialReadingCriterionId = task.TrialReadingCriterionId, + + BlindSubjectCode=blindSubjectCode, + BlindTrialSiteCode=filterObj.BlindTrialSiteCode + + + }); + + } + + //最后一个访视添加全局 + + if (filterObj.IsGenerateGlobalTask) + { + var lastTask = (subjectAddTaskList.Take(filterObj.PlanVisitCount).Last()).Clone(); + + + var existGlobal = _visitTaskRepository.Where(t => t.SubjectId == lastTask.SubjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.TaskState == TaskState.Effect && t.ReadingCategory == ReadingCategory.Global && t.VisitTaskNum == lastTask.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Global]).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault(); + + + if (existGlobal == null) + { + existGlobal = new VisitTaskSimpleDTO() + { + SubjectId = lastTask.SubjectId, + TrialId = lastTask.TrialId, + ReadingCategory = ReadingCategory.Global, + TaskName = lastTask.TaskName + "_Global", + TaskBlindName = lastTask.TaskBlindName + "_Global", + + TrialReadingCriterionId = trialReadingCriterionId, + + BlindSubjectCode = blindSubjectCode, + BlindTrialSiteCode = filterObj.BlindTrialSiteCode + + }; + } + + + + existGlobal.ArmEnum = Arm.GroupConsistentArm; + existGlobal.DoctorUserId = needAddDoctorUserId; + + subjectAddTaskList.Add(existGlobal); + } + + } + + + await _visitTaskCommonService.AddTaskAsync(new GenerateTaskCommand() + { + TrialId = filterObj.TrialId, + + ReadingCategory = GenerateTaskCategory.GroupConsistent, + + + GenerataGroupConsistentTaskList = subjectAddTaskList + }); + + + await _taskConsistentRuleRepository.SaveChangesAsync(); } - - await _visitTaskCommonService.AddTaskAsync(new GenerateTaskCommand() - { - TrialId = filterObj.TrialId, - - ReadingCategory = GenerateTaskCategory.GroupConsistent, - - - GenerataGroupConsistentTaskList = subjectAddTaskList - }); - - - await _taskConsistentRuleRepository.SaveChangesAsync(); } + return ResponseOutput.Ok(); diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index b776d5905..5350fa15d 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -1103,8 +1103,8 @@ namespace IRaCIS.Core.Application.Image.QA .Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsUrgent, t.IsHaveFirstGiveMedicineDate, t.ClinicalInformationTransmissionEnum }) .FirstOrDefaultAsync(t => t.TrialId == cRCRequestToQCCommand.TrialId)).IfNullThrowException(); - //找到符合配置的标准 确认的、双重,有序,阅片期仲裁 - var trialReadingCriterionIdList = _repository.Where(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.IsConfirm && t.ReadingType == ReadingMethod.Double && t.ArbitrationRule == ArbitrationRule.Reading && t.IsReadingTaskViewInOrder).Select(t => t.Id).ToList(); + //找到符合配置的标准 确认的并且签名的、双重,有序,阅片期仲裁 + var trialReadingCriterionIdList = _repository.Where(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.IsConfirm t.ReadingInfoSignTime != null && t.ReadingType == ReadingMethod.Double && t.ArbitrationRule == ArbitrationRule.Reading && t.IsReadingTaskViewInOrder).Select(t => t.Id).ToList(); var dbSubjectVisitList = await _subjectVisitRepository.Where(t => cRCRequestToQCCommand.SubjectVisitIds.Contains(t.Id), true).Include(t => t.Subject).ToListAsync();