diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 97c7f264e..6e45dcc6c 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -41,7 +41,7 @@ - 获取应用Subject后 医生比率情况 + 获取访视任务 应用Subject后 医生比率情况 diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 70bff0ba6..0f34ad099 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -211,6 +211,8 @@ namespace IRaCIS.Core.Application.ViewModel public string SubjectCode { get; set; } = String.Empty; + public bool IsJudgeDoctor { get; set; } + public Guid? DoctorUserId { get; set; } @@ -269,6 +271,8 @@ namespace IRaCIS.Core.Application.ViewModel public List SubjectIdList { get; set; } + public bool IsJudgeDoctor { get; set; } + public List DoctorUserIdArmList { get; set; } = new List(); } @@ -283,6 +287,8 @@ namespace IRaCIS.Core.Application.ViewModel { public Guid TrialId { get; set; } + public bool IsJudgeDoctor { get; set; } + public List SubjectIdList { get; set; } } @@ -322,6 +328,7 @@ namespace IRaCIS.Core.Application.ViewModel { public Guid TrialId { get; set; } + public bool IsJudgeDoctor { get; set; } public List SubjectDoctorUserList { get; set; } = new List(); } @@ -346,6 +353,8 @@ namespace IRaCIS.Core.Application.ViewModel public Guid SubjectId { get; set; } + public bool IsJudgeDoctor { get; set; } + public Guid? DoctorUserId { get; set; } public TaskOptType TaskOptType { get; set; } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index 4857e54ed..d92919f4e 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -312,15 +312,27 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task> GetSubjectAssignList(SubjectAssignQuery querySubjectAssign) { - var subjectQuery = _subjectRepository.Where(t => t.TrialId == querySubjectAssign.TrialId) - .Where(t => t.SubjectVisitTaskList.Any()) + var subjectQuery = _subjectRepository.Where(t => t.TrialId == querySubjectAssign.TrialId) + .WhereIf(querySubjectAssign.IsJudgeDoctor == false,t=> t.SubjectVisitTaskList.Where(t => t.ArmEnum != Arm.JudgeArm).Any()) + .WhereIf(querySubjectAssign.IsJudgeDoctor , t=>t.SubjectVisitTaskList.Where(t => t.ArmEnum == Arm.JudgeArm).Any()) + .WhereIf(querySubjectAssign.SiteId != null, t => t.SiteId == querySubjectAssign.SiteId) .WhereIf(querySubjectAssign.SubjectId != null, t => t.Id == querySubjectAssign.SubjectId) - .WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == true, t => t.SubjectDoctorList.Count() > 0) - .WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == false, t => !t.SubjectDoctorList.Any()) - .WhereIf(querySubjectAssign.IsHaveApplyedTask != null && querySubjectAssign.IsHaveApplyedTask == true, t => t.SubjectDoctorList.SelectMany(t => t.Subject.SubjectVisitTaskList).All(u => u.DoctorUserId != null)) - .WhereIf(querySubjectAssign.IsHaveApplyedTask != null && querySubjectAssign.IsHaveApplyedTask == false, t => t.SubjectDoctorList.SelectMany(t => t.Subject.SubjectVisitTaskList).Any(u => u.DoctorUserId == null)) - .WhereIf(querySubjectAssign.DoctorUserId != null, t => t.SubjectDoctorList.Any(t => t.DoctorUserId == querySubjectAssign.DoctorUserId)) + + .WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == true && querySubjectAssign.IsJudgeDoctor == false, t => t.SubjectDoctorList.Where(t => t.ArmEnum != Arm.JudgeArm).Count() > 0) + .WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == true && querySubjectAssign.IsJudgeDoctor , t => t.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).Count() > 0) + .WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == false && querySubjectAssign.IsJudgeDoctor == false, t => !t.SubjectDoctorList.Where(t => t.ArmEnum != Arm.JudgeArm).Any()) + .WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == false && querySubjectAssign.IsJudgeDoctor , t => !t.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).Any()) + + + .WhereIf(querySubjectAssign.IsHaveApplyedTask != null && querySubjectAssign.IsHaveApplyedTask == true && querySubjectAssign.IsJudgeDoctor == false, t => t.SubjectDoctorList.Where(t => t.ArmEnum != Arm.JudgeArm).SelectMany(t => t.Subject.SubjectVisitTaskList).All(u => u.DoctorUserId != null)) + .WhereIf(querySubjectAssign.IsHaveApplyedTask != null && querySubjectAssign.IsHaveApplyedTask == true && querySubjectAssign.IsJudgeDoctor, t => t.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).SelectMany(t => t.Subject.SubjectVisitTaskList).All(u => u.DoctorUserId != null)) + + .WhereIf(querySubjectAssign.IsHaveApplyedTask != null && querySubjectAssign.IsHaveApplyedTask == false && querySubjectAssign.IsJudgeDoctor == false, t => t.SubjectDoctorList.Where(t => t.ArmEnum != Arm.JudgeArm).SelectMany(t => t.Subject.SubjectVisitTaskList).Any(u => u.DoctorUserId == null)) + .WhereIf(querySubjectAssign.IsHaveApplyedTask != null && querySubjectAssign.IsHaveApplyedTask == false && querySubjectAssign.IsJudgeDoctor, t => t.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).SelectMany(t => t.Subject.SubjectVisitTaskList).Any(u => u.DoctorUserId == null)) + + .WhereIf(querySubjectAssign.DoctorUserId != null && querySubjectAssign.IsJudgeDoctor == false, t => t.SubjectDoctorList.Where(t=>t.ArmEnum != Arm.JudgeArm).Any(t => t.DoctorUserId == querySubjectAssign.DoctorUserId)) + .WhereIf(querySubjectAssign.DoctorUserId != null && querySubjectAssign.IsJudgeDoctor, t => t.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).Any(t => t.DoctorUserId == querySubjectAssign.DoctorUserId)) .ProjectTo(_mapper.ConfigurationProvider); var pageList = await subjectQuery.ToPagedListAsync(querySubjectAssign.PageIndex, querySubjectAssign.PageSize, string.IsNullOrWhiteSpace(querySubjectAssign.SortField) ? nameof(querySubjectAssign.SubjectId) : querySubjectAssign.SortField, querySubjectAssign.Asc); @@ -337,21 +349,42 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task AssignSubjectDoctor(AssginSubjectDoctorCommand assginSubjectDoctorCommand) { - + var trialId = assginSubjectDoctorCommand.TrialId; var doctorUserIdList = assginSubjectDoctorCommand.DoctorUserIdArmList.Select(t => t.DoctorUserId).ToList(); - if (assginSubjectDoctorCommand.IsReAssign) + if (assginSubjectDoctorCommand.IsJudgeDoctor) { - - if (await _visitTaskRepository.AnyAsync(t => assginSubjectDoctorCommand.SubjectIdList.Contains(t.SubjectId) && t.DoctorUserId != null)) + if (assginSubjectDoctorCommand.IsReAssign) { - throw new BusinessValidationFailedException("有Subject任务已应用,不允许重新分配"); + + if (await _visitTaskRepository.AnyAsync(t => assginSubjectDoctorCommand.SubjectIdList.Contains(t.SubjectId) && t.DoctorUserId != null && t.ArmEnum == Arm.JudgeArm)) + { + throw new BusinessValidationFailedException("有Subject任务已应用,不允许重新分配"); + } + + + await _subjectUserRepository.BatchDeleteNoTrackingAsync(t => doctorUserIdList.Contains(t.DoctorUserId) && assginSubjectDoctorCommand.SubjectIdList.Contains(t.SubjectId) && t.ArmEnum == Arm.JudgeArm); } - await _subjectUserRepository.BatchDeleteNoTrackingAsync(t => doctorUserIdList.Contains(t.DoctorUserId) && assginSubjectDoctorCommand.SubjectIdList.Contains(t.SubjectId)); } + else + { + if (assginSubjectDoctorCommand.IsReAssign) + { + if (await _visitTaskRepository.AnyAsync(t => assginSubjectDoctorCommand.SubjectIdList.Contains(t.SubjectId) && t.DoctorUserId != null && t.ArmEnum != Arm.JudgeArm)) + { + throw new BusinessValidationFailedException("有Subject任务已应用,不允许重新分配"); + } + + + await _subjectUserRepository.BatchDeleteNoTrackingAsync(t => doctorUserIdList.Contains(t.DoctorUserId) && assginSubjectDoctorCommand.SubjectIdList.Contains(t.SubjectId) && t.ArmEnum != Arm.JudgeArm); + } + + + + } foreach (var subjectId in assginSubjectDoctorCommand.SubjectIdList) { foreach (var doctorUserId in doctorUserIdList) @@ -359,12 +392,26 @@ namespace IRaCIS.Core.Application.Service var armEnum = assginSubjectDoctorCommand.DoctorUserIdArmList.Where(t => t.DoctorUserId == doctorUserId).First().ArmEnum; - await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = assginSubjectDoctorCommand.TrialId, SubjectId = subjectId, DoctorUserId = doctorUserId, ArmEnum = armEnum, AssignTime = DateTime.Now }); + + if (await _subjectUserRepository.AnyAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.DoctorUserId == doctorUserId && t.ArmEnum == armEnum)) + { + throw new BusinessValidationFailedException("有Subject 已有该Arm组的医生,不允许继续分配,请刷新页面,确认页面数据是否过期"); + } + if (await _subjectUserRepository.AnyAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.DoctorUserId == doctorUserId && t.ArmEnum != armEnum)) + { + throw new BusinessValidationFailedException("有Subject 在其他Arm组已有该医生,不允许在新的组添加该医生"); + } + else + { + await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = trialId, SubjectId = subjectId, DoctorUserId = doctorUserId, ArmEnum = armEnum, AssignTime = DateTime.Now }); + + } + } - //await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectId, u => new Subject() { IsAssignDoctorUser = true }); } + await _subjectUserRepository.SaveChangesAsync(); return ResponseOutput.Ok(); @@ -377,17 +424,30 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task CancelSubjectAssignDoctor(CancelSubjectAssignCommand cancelSubjectAssignCommand) { - foreach (var subjectId in cancelSubjectAssignCommand.SubjectIdList) + if (cancelSubjectAssignCommand.IsJudgeDoctor) { - if (await _visitTaskRepository.AnyAsync(t => t.SubjectId == subjectId && t.DoctorUserId != null)) + foreach (var subjectId in cancelSubjectAssignCommand.SubjectIdList) { - throw new BusinessValidationFailedException("有Subject任务已应用,不允许取消分配"); + if (await _visitTaskRepository.AnyAsync(t => t.SubjectId == subjectId && t.DoctorUserId != null && t.ArmEnum == Arm.JudgeArm)) + { + throw new BusinessValidationFailedException("有Subject任务已应用,不允许取消分配"); + } + + await _subjectUserRepository.DeleteFromQueryAsync(t => t.SubjectId == subjectId && t.ArmEnum == Arm.JudgeArm); } - - await _subjectUserRepository.DeleteFromQueryAsync(t => t.SubjectId == subjectId); - //await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectId, u => new Subject() { IsAssignDoctorUser = false }); } + else + { + foreach (var subjectId in cancelSubjectAssignCommand.SubjectIdList) + { + if (await _visitTaskRepository.AnyAsync(t => t.SubjectId == subjectId && t.DoctorUserId != null && t.ArmEnum != Arm.JudgeArm)) + { + throw new BusinessValidationFailedException("有Subject任务已应用,不允许取消分配"); + } + await _subjectUserRepository.DeleteFromQueryAsync(t => t.SubjectId == subjectId && t.ArmEnum != Arm.JudgeArm); + } + } await _subjectUserRepository.SaveChangesAsync(); @@ -414,7 +474,8 @@ namespace IRaCIS.Core.Application.Service var subjectIdList = assignConfirmCommand.SubjectDoctorUserList.Select(t => t.SubjectId).ToList(); var taskList = _visitTaskRepository.Where(t => t.TrialId == assignConfirmCommand.TrialId && t.DoctorUserId == null, true) - .WhereIf(subjectIdList.Count() > 0, t => subjectIdList.Contains(t.SubjectId) && t.Subject.SubjectDoctorList.Any()) + .WhereIf(subjectIdList.Count() > 0 && assignConfirmCommand.IsJudgeDoctor==false, t => subjectIdList.Contains(t.SubjectId) && t.Subject.SubjectDoctorList.Where(t => t.ArmEnum != Arm.JudgeArm).Any()) + .WhereIf(subjectIdList.Count() > 0 && assignConfirmCommand.IsJudgeDoctor, t => subjectIdList.Contains(t.SubjectId) && t.Subject.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).Any()) .ToList(); @@ -496,243 +557,6 @@ namespace IRaCIS.Core.Application.Service var trialConfig = (await _trialRepository.Where(t => t.Id == trialId).Select(t => new { TrialId = t.Id, t.ReadingType, t.IsFollowVisitAutoAssign, t.IsFollowGlobalVisitAutoAssign, t.FollowGlobalVisitAutoAssignDefaultState, t.TaskAllocateObjEnum }).FirstOrDefaultAsync()).IfNullThrowException(); - - - - #region 按照医生维度分配Subject - - ////受试者总数 - //var subjectCount = subjectList.Count(); - - ////获取待分配的医生列表 指导分配医生的数量 - //var waitAllocationDoctorList = _taskAllocationRuleRepository.Where(t => t.TrialId == trialId && t.IsEnable) - // .Select(t => new { t.DoctorUserId, t.PlanReadingRatio, Weight = (subjectCount * t.PlanReadingRatio) % 100 }) - // .OrderByDescending(t => t.PlanReadingRatio).ThenByDescending(t => t.Weight).ToList(); - - ////给医生分配Subject 前验证 已经分配的数据是否符合分配的规范 - //foreach (var subject in subjectList) - //{ - // var doctorCount = subject.DoctorUserList.Count(); - // //分配两个医生 - // if (trialConfig.ReadingType == ReadingMethod.Double) - // { - - // if (doctorCount > 2) - // { - // throw new BusinessValidationFailedException("双重阅片当前有Subject绑定医生数量大于2"); - // } - - // } - // else if (trialConfig.ReadingType == ReadingMethod.Single) - // { - // if (doctorCount > 1) - // { - // throw new BusinessValidationFailedException("单重阅片当前有Subject绑定医生数量大于1"); - // } - // } - //} - - ////存放分配后Subject 医生的情况 - //var assignedSubjectDoctorList = subjectList.Clone().SelectMany(t => t.DoctorUserList.Select(c => new { t.SubjectId, DoctorUserId = c.DoctorUserId, c.ArmEnum })).ToList(); - - //if (trialConfig.ReadingType == ReadingMethod.Single) - //{ - // //eg : 10个Sujbect 都是1/4 先分配整数 再分配 10%4=2个 - - // //特殊: 不够分的subject数量 适用于 2个Subject 4个医生 这种 - - - // var integerPlan = 0; - - // waitAllocationDoctorList.ForEach(doctor => - // { - - // integerPlan += (int)Math.Floor((double)(subjectCount * doctor.PlanReadingRatio) / 100); - - // }); - - - // var specialSubjectCount = subjectCount - integerPlan; - - // //按照医生维度 分配Subject - // foreach (var doctor in waitAllocationDoctorList) - // { - - - // //该医生的目前已分配到的受试者 - // var hasAssignedSubjectIdList = assignedSubjectDoctorList.Where(t => t.DoctorUserId == doctor.DoctorUserId).Select(t => t.SubjectId).Distinct().ToList(); - - // //已分配的Subject 数量 - // var hasAssignedSubjectCount = hasAssignedSubjectIdList.Count(); - - // //该医生计划分配到的Subject 最接近的整数数量 - // var planSubjectCount = (int)Math.Ceiling((double)(subjectCount * doctor.PlanReadingRatio) / 100); - - // //权重大的,将特殊的分配 - // if (doctor.Weight != 50) - // { - // if (specialSubjectCount > 0) - // { - // specialSubjectCount--; - - // planSubjectCount++; - // } - - // } - - // //如果计划的数量 大于已经分配的数量 那么该医生 可以分配新的Subject - // if (planSubjectCount > hasAssignedSubjectCount) - // { - - // //从未分配的Subjct找到可以分配的分配给该医生 - - // var allAssignedSubjectIdList = assignedSubjectDoctorList.Select(t => t.SubjectId).Distinct().ToList(); - - // //取需要分配的数量 并且没有分配给其他医生的包括自己 - // var assignSubjectIdList = subjectList.Where(t => !allAssignedSubjectIdList.Contains(t.SubjectId)).Select(t => t.SubjectId).Take(planSubjectCount - hasAssignedSubjectCount).ToList(); - - // foreach (var assignSubjectId in assignSubjectIdList) - // { - // //将分配结果记录 - // assignedSubjectDoctorList.Add(new { SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 0 }); - - // await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = trialId, SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, AssignTime = DateTime.Now }); - - - // } - // } - // else - // { - // throw new BusinessValidationFailedException("当前有医生已分配的Subject 数量,超过了计划分配Subject数量,不支持自动分配"); - // } - - // } - - //} - //if (trialConfig.ReadingType == ReadingMethod.Double) - //{ - // var integerPlan = 0; - - // waitAllocationDoctorList.ForEach(doctor => - // { - - // integerPlan += (int)Math.Floor((double)(subjectCount * doctor.PlanReadingRatio * 2) / 100); - - // }); - - - // var specialSubjectCount = (subjectCount * 2) - integerPlan; - - // //按照医生维度 分配Subject - // foreach (var doctor in waitAllocationDoctorList) - // { - - - // //该医生的目前已分配到的受试者 - // var hasAssignedSubjectIdList = assignedSubjectDoctorList.Where(t => t.DoctorUserId == doctor.DoctorUserId).Select(t => t.SubjectId).ToList(); - - // //已分配的Subject 数量 - // var hasAssignedSubjectCount = hasAssignedSubjectIdList.Count(); - - // //该医生计划分配到的Subject 最接近的整数数量 - // var planSubjectCount = (int)Math.Floor((double)(subjectCount * doctor.PlanReadingRatio * 2) / 100); - - // //判断是否能整除 - - // var yuShu = (subjectCount * doctor.PlanReadingRatio * 2) % 100; - - // if (yuShu != 0) - // { - // if (specialSubjectCount > 0) - // { - // specialSubjectCount--; - // planSubjectCount++; - - // } - // } - - - // //如果计划的数量 大于已经分配的数量 那么该医生 可以分配新的Subject - // if (planSubjectCount > hasAssignedSubjectCount) - // { - - // //分配给其他医生 已经满了的 - // var otherExceptDoctorIdList = assignedSubjectDoctorList.Where(t => t.DoctorUserId != doctor.DoctorUserId).GroupBy(t => t.SubjectId) - // .Select(g => new { SubjectId = g.Key, DoctorCount = g.Count() }).Where(c => c.DoctorCount == 2).Select(t => t.SubjectId).ToList(); - - - // //取需要分配的数量 并且没有分配给其他医生的包括自己 - // var assignSubjectIdList = subjectList.Where(t => !hasAssignedSubjectIdList.Contains(t.SubjectId) && !otherExceptDoctorIdList.Contains(t.SubjectId)) - // .Select(t => t.SubjectId).Take((planSubjectCount - hasAssignedSubjectCount)).ToList(); - - // foreach (var assignSubjectId in assignSubjectIdList) - // { - - - // var otherHaveAssignedSubject = assignedSubjectDoctorList.Where(t => t.SubjectId == assignSubjectId).FirstOrDefault(); - - // if (otherHaveAssignedSubject != null) - // { - - // if (otherHaveAssignedSubject.ArmEnum == 1) - // { - // assignedSubjectDoctorList.Add(new { SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 2 }); - - // await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = trialId, SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 2, AssignTime = DateTime.Now }); - - // } - // else if (otherHaveAssignedSubject.ArmEnum == 2) - // { - // assignedSubjectDoctorList.Add(new { SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 1 }); - - // await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = trialId, SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 1, AssignTime = DateTime.Now }); - - // } - // } - // else - // { - // assignedSubjectDoctorList.Add(new { SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 1 }); - - // await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = trialId, SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 1, AssignTime = DateTime.Now }); - - // } - - - // } - // } - // else - // { - // throw new BusinessValidationFailedException("当前有医生已分配的Subject 数量,超过了计划分配Subject数量,不支持自动分配"); - // } - - - - // } - - - - // //如果是2个Subject 3个医生 这种 都是百分之33的比率 - // // 10 3 - - - - - - - - //} - - ////验证是否所有Subject 是否分配好 - - //if (assignedSubjectDoctorList.Select(t => t.SubjectId).Distinct().Count() != subjectCount) - //{ - // throw new BusinessValidationFailedException("分配算法有问题,有Subject 未分配"); - //} - - #endregion - - - #region 完全按照Subject 遍历去分 var subjectCount = subjectList.Count; @@ -895,10 +719,30 @@ namespace IRaCIS.Core.Application.Service if (assignSubjectTaskToDoctorCommand.TaskOptType == TaskOptType.Assign || assignSubjectTaskToDoctorCommand.TaskOptType == TaskOptType.ReAssign) { + //手动分配验证规则 + + if (visitTask.SourceSubjectVisitId != null) + { + + } + else if(visitTask.SouceReadModuleId != null) + { + + } + else + { + throw new BusinessValidationFailedException("出现脏数据 任务来源字段没有值"); + } + + + visitTask.AllocateTime = DateTime.Now; visitTask.DoctorUserId = assignSubjectTaskToDoctorCommand.DoctorUserId; visitTask.TaskState = TaskState.Allocated; + await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == visitTask.SourceSubjectVisitId, u => new SubjectVisit() { ReadingStatus = ReadingStatusEnum.ImageReading }); + + await _readModuleRepository.BatchUpdateNoTrackingAsync(t => t.Id == visitTask.SouceReadModuleId, u => new ReadModule() { ReadingStatus = ReadingStatusEnum.ImageReading }); } else if (assignSubjectTaskToDoctorCommand.TaskOptType == TaskOptType.ReAssign) @@ -923,6 +767,10 @@ namespace IRaCIS.Core.Application.Service visitTask.AllocateTime = null; visitTask.DoctorUserId = null; visitTask.TaskState = TaskState.NotAllocate; + + await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == visitTask.SourceSubjectVisitId, u => new SubjectVisit() { ReadingStatus = ReadingStatusEnum.TaskAllocate }); + + await _readModuleRepository.BatchUpdateNoTrackingAsync(t => t.Id == visitTask.SouceReadModuleId, u => new ReadModule() { ReadingStatus = ReadingStatusEnum.TaskAllocate }); } await _visitTaskRepository.SaveChangesAsync(); return ResponseOutput.Ok();