From 8703e3cfc60123c412e4e250a5ce0cfe77a8ba29 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 1 Aug 2022 15:11:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E9=85=8D=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Allocation/VisitTaskService.cs | 46 +++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index bd42c7e97..a3a46cb8b 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -85,6 +85,8 @@ namespace IRaCIS.Core.Application.Service.Allocation /// public async Task BatchAssignDoctorToSubject(BatchAssignDoctorToSubjectCommand command) { + var inOrder = _trialRepository.Where(t => t.Id == command.TrialId).Select(t => t.IsReadingTaskViewInOrder).FirstOrDefault(); + foreach (var subjectId in command.SubjectIdList) { foreach (var doctorArm in command.DoctorArmList) @@ -95,16 +97,54 @@ namespace IRaCIS.Core.Application.Service.Allocation - await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectId && t.ArmEnum == doctorArm.ArmEnum && t.TrialId == command.TrialId && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false, + Expression> updateWhere = t => t.SubjectId == subjectId && t.ArmEnum == doctorArm.ArmEnum && t.TrialId == command.TrialId && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false; + + if (inOrder) + { + + var notCheckPassedMinVisitNum = await _subjectVisitRepository.Where(t => t.SubjectId == subjectId && t.CheckState!=CheckStateEnum.CVPassed).OrderBy(t => t.VisitNum).Select(t => t.VisitNum).FirstOrDefaultAsync(); + + + updateWhere = updateWhere.And(t => t.VisitTaskNum < notCheckPassedMinVisitNum); + + ////找到未分配的最小的任务号 + //var minVisitTaskNum = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.ArmEnum == doctorArm.ArmEnum && t.TrialId == command.TrialId && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.TaskState == TaskState.Effect).OrderBy(t => t.VisitTaskNum).Select(t => t.VisitTaskNum).FirstOrDefault(); + + //var maxVisitTaskNum = _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.ArmEnum == doctorArm.ArmEnum && t.TrialId == command.TrialId && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.TaskState == TaskState.Effect).OrderByDescending(t => t.VisitTaskNum).Select(t => t.VisitTaskNum).FirstOrDefault(); + + + //if (_subjectVisitRepository.Where(t => t.SubjectId == subjectId && t.VisitNum < minVisitTaskNum).Any(t => t.CheckState != CheckStateEnum.CVPassed)) + //{ + // //throw new BusinessValidationFailedException("Subject 前序有访视未一致性核查通过,不允许分配任务"); + + + // //不分配 + // updateWhere = updateWhere.And(t => t.VisitTaskNum < minVisitTaskNum); + + //} + //else if(_subjectVisitRepository.Where(t => t.SubjectId == subjectId && t.VisitNum<=maxVisitTaskNum && t.VisitNum >= minVisitTaskNum).Any(t => t.CheckState != CheckStateEnum.CVPassed)) + //{ + // var notCheckPassedVisitNum= await _subjectVisitRepository.Where(t => t.SubjectId == subjectId && t.VisitNum <= maxVisitTaskNum && t.VisitNum >= minVisitTaskNum).OrderByDescending(t=>t.VisitNum).Select(t=>t.VisitNum).FirstOrDefaultAsync(); + + // //分配两者之间的任务 + // updateWhere = updateWhere.And(t => t.VisitTaskNum >= minVisitTaskNum && t.VisitTaskNum<= notCheckPassedVisitNum); + //} + + } + + + await _visitTaskRepository + .BatchUpdateNoTrackingAsync(updateWhere, u => new VisitTask() { AllocateTime = DateTime.Now, DoctorUserId = doctorArm.DoctorUserId, TaskAllocationState = TaskAllocationState.Allocated, - SuggesteFinishedTime = /*t.IsUrgent ? DateTime.Now.AddDays(2) :*/ DateTime.Now.AddDays(7), + SuggesteFinishedTime = DateTime.Now.AddDays(7), }); + //task.SuggesteFinishedTime = task.IsUrgent ? DateTime.Now.AddDays(2) : DateTime.Now.AddDays(7); @@ -1321,7 +1361,7 @@ namespace IRaCIS.Core.Application.Service.Allocation await _repository.UpdatePartialFromQueryAsync(t => t.Id == subjectId, u => new Subject() { IsReReadingOrBackInfluenceAnalysis = true }); } - + } ///