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();