From d2251e4cb24ff52543f142af6583e58c9d3025a8 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Fri, 7 Jul 2023 11:21:38 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=87=8D=E9=98=85=E5=88=97?=
=?UTF-8?q?=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BackGroundJob/CancelTaskQuartZJob.cs | 2 +-
.../IRaCIS.Core.Application.xml | 64 --
.../Allocation/DTO/VisitTaskViewModel.cs | 27 -
.../Service/Allocation/VisitTaskService.cs | 996 +-----------------
.../ReadingImageTaskService.cs | 2 +-
IRaCIS.Core.Domain/Allocation/VisitTask.cs | 2 -
6 files changed, 16 insertions(+), 1077 deletions(-)
diff --git a/IRaCIS.Core.Application/BackGroundJob/CancelTaskQuartZJob.cs b/IRaCIS.Core.Application/BackGroundJob/CancelTaskQuartZJob.cs
index 7a74f8ece..fdb402ecb 100644
--- a/IRaCIS.Core.Application/BackGroundJob/CancelTaskQuartZJob.cs
+++ b/IRaCIS.Core.Application/BackGroundJob/CancelTaskQuartZJob.cs
@@ -48,7 +48,7 @@ namespace IRaCIS.Application.Services.BackGroundJob
{
Guid id = (Guid)dataMap.Get("VisitTaskId");
- await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == id, u => new VisitTask() { ClaimUserId = null }, true);
+ await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == id && t.ReadingTaskState!=ReadingTaskState.HaveSigned, u => new VisitTask() { DoctorUserId = null }, true);
}
}
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 1947d3750..ef6169522 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -286,70 +286,6 @@
-
-
- 一次性分配所有医生 批量分配(添加),后端现在没限制
-
-
-
-
-
-
- 阅片人维度 Subject统计表
-
-
-
-
-
-
-
- 获取Subject 分配医生情况
-
-
-
-
-
-
-
- 取消Subject 分配的医生
-
-
-
-
-
-
-
- 任务 手动分配 重新分配 确认 取消分配
- 分配
-
-
-
-
-
- 获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
-
-
-
-
-
- 批量为 多个Subject 分配医生 手动分配 IsReAssign 为true 批量删除 重新分配
-
-
-
-
-
-
- 批量取消Subject 分配的医生
-
- 数量
-
-
-
- 手动分配确认 绑定该Subject的已存在的任务给医生
-
-
-
-
访视任务
diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
index 7ac16c2c3..88beec092 100644
--- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
@@ -108,33 +108,6 @@ namespace IRaCIS.Core.Application.ViewModel
public CriterionType CriterionType { get; set; }
-
- /////
- ///// 仲裁对象
- /////
- //public ArbitrationRule ArbitrationRule { get; set; } = ArbitrationRule.Reading;
-
-
- /////
- ///// 阅片模式
- /////
- //public ReadingMethod ReadingType { get; set; } = ReadingMethod.Double;
-
- /////
- ///// 全局阅片
- /////
- //public bool IsGlobalReading { get; set; } = true;
-
- /////
- ///// 仲裁阅片
- /////
- //public bool IsArbitrationReading { get; set; } = true;
-
-
- /////
- ///// 肿瘤学阅片 原字段 IsClinicalReading
- /////
- //public bool IsOncologyReading { get; set; }
#endregion
}
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
index e1ed42cee..48071ca4a 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
@@ -154,492 +154,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
return (pageList, criterionConfig);
}
- ///
- /// 一次性分配所有医生 批量分配(添加),后端现在没限制
- ///
- ///
- ///
- [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
- public async Task BatchAssignDoctorToSubject(BatchAssignDoctorToSubjectCommand command)
- {
- //var inOrder = _trialRepository.Where(t => t.Id == command.TrialId).Select(t => t.IsReadingTaskViewInOrder).FirstOrDefault();
-
- //var inOrder = _trialReadingCriterionRepository.Where(t => t.Id == command.TrialReadingCriterionId).Select(t => t.IsReadingTaskViewInOrder).FirstOrDefault();
-
-
- foreach (var subjectId in command.SubjectIdList)
- {
- foreach (var doctorArm in command.DoctorArmList)
- {
- if (!await _subjectUserRepository.Where(t => t.TrialReadingCriterionId == command.TrialReadingCriterionId).AnyAsync(t => t.SubjectId == subjectId && t.DoctorUserId == doctorArm.DoctorUserId && t.ArmEnum == doctorArm.ArmEnum && t.IsConfirmed && t.OrignalSubjectUserId == null))
- {
- await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = command.TrialId, TrialReadingCriterionId = command.TrialReadingCriterionId, ArmEnum = doctorArm.ArmEnum, DoctorUserId = doctorArm.DoctorUserId, SubjectId = subjectId, AssignTime = DateTime.Now });
-
- //task.SuggesteFinishedTime = task.IsUrgent ? DateTime.Now.AddDays(2) : DateTime.Now.AddDays(7);
-
- }
-
-
- Expression> updateWhere = t => t.TrialReadingCriterionId == command.TrialReadingCriterionId && t.SubjectId == subjectId && t.ArmEnum == doctorArm.ArmEnum && t.TrialId == command.TrialId && t.TaskAllocationState == TaskAllocationState.NotAllocate && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false;
-
- //if (inOrder)
- //{
- // //针对有序阅片 只分配< 最小的 不是一致性核查通过状态 和不是失访 的访视 的任务
- // if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == subjectId && t.CheckState != CheckStateEnum.CVPassed && t.IsLostVisit == false))
- // {
- // 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);
-
- // }
-
- //}
-
-
- await _visitTaskRepository
- .UpdatePartialFromQueryAsync(updateWhere,
- u => new VisitTask()
- {
- AllocateTime = DateTime.Now,
- DoctorUserId = doctorArm.DoctorUserId,
- TaskAllocationState = TaskAllocationState.Allocated,
-
- SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget),
- });
- }
- }
-
- await _subjectUserRepository.SaveChangesAsync();
-
-
-
-
-
- return ResponseOutput.Ok();
- }
-
-
-
- ///
- /// 阅片人维度 Subject统计表
- ///
- ///
- ///
- ///
- public async Task<(List, object)> GetDoctorSubjectStat(Guid trialId, Guid trialReadingCriterionId)
- {
- var list = await _taskAllocationRuleRepository.Where(t => t.TrialId == trialId)
- .Where(t => t.Enroll.EnrollReadingCategoryList.Any(t => t.TrialReadingCriterionId == trialReadingCriterionId))
- .ProjectTo(_mapper.ConfigurationProvider, new { trialReadingCriterionId = trialReadingCriterionId }).ToListAsync();
-
- var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder, x.ReadingType, x.IsArbitrationReading, x.IsOncologyReading }).FirstOrDefaultAsync()).IfNullThrowException();
-
- return (list, criterionConfig);
- }
-
-
- ///
- /// 获取Subject 分配医生情况
- ///
- ///
- ///
- ///
- public async Task<(List, object)> GetSubjectAssignedDoctorList(Guid subjectId, Guid trialReadingCriterionId)
- {
- var list = await _subjectUserRepository.Where(t => t.SubjectId == subjectId && t.OrignalSubjectUserId == null && t.IsConfirmed && t.TrialReadingCriterionId == trialReadingCriterionId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync();
-
- var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == trialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder, x.ReadingType, x.IsGlobalReading, x.IsOncologyReading, x.IsArbitrationReading }).FirstOrDefaultAsync()).IfNullThrowException();
-
- return (list, criterionConfig);
- }
-
-
- ///
- /// 取消Subject 分配的医生
- ///
- ///
- ///
- ///
- [HttpPost]
- [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
- public async Task CancelSubjectAssignedDoctor(CancelSubjectDoctorCommand cancelCommand)
- {
- foreach (var command in cancelCommand.CancelList.Where(t => t.IsCancelAssign))
- {
- if (await _visitTaskRepository.AnyAsync(t => t.TrialReadingCriterionId == cancelCommand.TrialReadingCriterionId && t.SubjectId == command.SubjectId && t.DoctorUserId == command.DoctorUserId && t.ArmEnum == command.ArmEnum && t.ReadingTaskState != ReadingTaskState.WaitReading))
- {
- //---当前医生已开始做该Subject 该标准的任务,不允许取消分配
- throw new BusinessValidationFailedException(_localizer["VisitTask_DoctorConfigNotFound"]);
- }
-
- await _subjectUserRepository.DeleteFromQueryAsync(t => t.Id == command.Id);
-
- await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.TrialReadingCriterionId == cancelCommand.TrialReadingCriterionId && t.SubjectId == command.SubjectId && t.DoctorUserId == command.DoctorUserId && t.ArmEnum == command.ArmEnum && t.ReadingTaskState == ReadingTaskState.WaitReading && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false, u => new VisitTask()
- {
- AllocateTime = null,
- DoctorUserId = null,
- TaskAllocationState = TaskAllocationState.NotAllocate,
- SuggesteFinishedTime = null
- });
- }
-
- var subjectId = cancelCommand.CancelList.First().SubjectId;
-
- await _repository.AddAsync(new SubjectCanceDoctor() { SubjectId = subjectId, Note = cancelCommand.Note });
-
- await _visitTaskRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok();
- }
-
-
-
-
- ///
- /// 任务 手动分配 重新分配 确认 取消分配
- /// 分配
- ///
- ///
- [HttpPost]
- [UnitOfWork]
- [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
- public async Task AssignSubjectTaskToDoctor(AssignSubjectTaskToDoctorCommand assignSubjectTaskToDoctorCommand)
- {
- var visitTask = await _visitTaskRepository.FirstOrDefaultAsync(t => t.Id == assignSubjectTaskToDoctorCommand.Id);
-
- if (assignSubjectTaskToDoctorCommand.TaskOptType == TaskOptType.Assign || assignSubjectTaskToDoctorCommand.TaskOptType == TaskOptType.ReAssign)
- {
- //手动分配验证规则
-
- if (visitTask.SourceSubjectVisitId != null)
- {
-
- if (await _visitTaskRepository.AnyAsync(t => t.SourceSubjectVisitId == visitTask.SourceSubjectVisitId && t.TaskAllocationState == TaskAllocationState.Allocated && t.DoctorUserId == assignSubjectTaskToDoctorCommand.DoctorUserId && t.Id != visitTask.Id))
- {
- //---其中一个任务已分配给该医生,不允许分配
- return ResponseOutput.NotOk(_localizer["VisitTask_BackendDataError"]);
- }
- }
- else if (visitTask.SouceReadModuleId != null)
- {
- if (await _visitTaskRepository.AnyAsync(t => t.SouceReadModuleId == visitTask.SouceReadModuleId && t.TaskAllocationState == TaskAllocationState.Allocated && t.DoctorUserId == assignSubjectTaskToDoctorCommand.DoctorUserId && t.Id != visitTask.Id))
- {
- //---其中一个任务已分配给该医生,不允许分配
- return ResponseOutput.NotOk(_localizer["VisitTask_BackendDataError"]);
- }
- }
- else
- {
- //---出现脏数据 任务来源字段没有值
- throw new BusinessValidationFailedException(_localizer["VisitTask_DirtyData"]);
- }
-
- //PM 回退了 但是还没生成任务 当前任务编号前有访视进行了回退就不允许分配
- if (await _subjectVisitRepository.AnyAsync(t => t.SubjectId == visitTask.SubjectId && t.IsPMBackOrReReading && t.VisitNum <= visitTask.VisitTaskNum))
- {
- //---该受试者有访视进入了退回流程,还未经过一致性核查通过,不允许分配
- return ResponseOutput.NotOk(_localizer["VisitTask_MissingTaskSource"]);
- }
-
-
- visitTask.AllocateTime = DateTime.Now;
- visitTask.DoctorUserId = assignSubjectTaskToDoctorCommand.DoctorUserId;
- visitTask.TaskAllocationState = TaskAllocationState.Allocated;
-
- visitTask.SuggesteFinishedTime = GetSuggessFinishTime(true, UrgentType.NotUrget);
-
-
-
- //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)
- {
- //验证 是不是两个任务都给了同一个医生
-
-
-
- //是否删除配置规则表里的 Subject 医生绑定关系 重新添加绑定关系
-
- //是否其该Subject 其他访视 绑定的医生 也同时变更?
-
-
- }
-
- else if (assignSubjectTaskToDoctorCommand.TaskOptType == TaskOptType.Confirm)
- {
- visitTask.TaskAllocationState = TaskAllocationState.Allocated;
- }
- else if (assignSubjectTaskToDoctorCommand.TaskOptType == TaskOptType.CancelAssign)
- {
- visitTask.AllocateTime = null;
- visitTask.DoctorUserId = null;
- visitTask.TaskAllocationState = TaskAllocationState.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();
- }
-
-
-
-
- ///
- /// 获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
- ///
- ///
- [HttpPost]
- public async Task> GetSubjectAssignList(SubjectAssignQuery querySubjectAssign)
- {
- 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 && querySubjectAssign.IsJudgeDoctor == false, t => t.SubjectDoctorList.Where(t => t.ArmEnum != Arm.JudgeArm).Any())
- .WhereIf(querySubjectAssign.IsHaveAssigned != null && querySubjectAssign.IsHaveAssigned == true && querySubjectAssign.IsJudgeDoctor, t => t.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).Any())
- .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.IsAssignConfirmed != null && querySubjectAssign.IsAssignConfirmed == true && querySubjectAssign.IsJudgeDoctor == false, t => t.SubjectDoctorList.Where(t => t.ArmEnum != Arm.JudgeArm).All(u => u.IsConfirmed))
- .WhereIf(querySubjectAssign.IsAssignConfirmed != null && querySubjectAssign.IsAssignConfirmed == true && querySubjectAssign.IsJudgeDoctor, t => t.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).All(u => u.IsConfirmed))
-
- .WhereIf(querySubjectAssign.IsAssignConfirmed != null && querySubjectAssign.IsAssignConfirmed == false && querySubjectAssign.IsJudgeDoctor == false, t => t.SubjectDoctorList.Where(t => t.ArmEnum != Arm.JudgeArm).Any(u => u.IsConfirmed == false))
- .WhereIf(querySubjectAssign.IsAssignConfirmed != null && querySubjectAssign.IsAssignConfirmed == false && querySubjectAssign.IsJudgeDoctor, t => t.SubjectDoctorList.Where(t => t.ArmEnum == Arm.JudgeArm).Any(u => u.IsConfirmed == false))
-
- .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, new { isJudgeDoctor = querySubjectAssign.IsJudgeDoctor });
-
- var pageList = await subjectQuery.ToPagedListAsync(querySubjectAssign.PageIndex, querySubjectAssign.PageSize, string.IsNullOrWhiteSpace(querySubjectAssign.SortField) ? nameof(querySubjectAssign.SubjectId) : querySubjectAssign.SortField, querySubjectAssign.Asc);
-
- return pageList;
- }
-
-
- ///
- /// 批量为 多个Subject 分配医生 手动分配 IsReAssign 为true 批量删除 重新分配
- ///
- ///
- ///
- [HttpPost]
- [UnitOfWork]
- [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
- public async Task AssignSubjectDoctor(AssginSubjectDoctorCommand assginSubjectDoctorCommand)
- {
- var trialId = assginSubjectDoctorCommand.TrialId;
- var doctorUserIdList = assginSubjectDoctorCommand.DoctorUserIdArmList.Select(t => t.DoctorUserId).ToList();
-
- if (assginSubjectDoctorCommand.IsJudgeDoctor)
- {
- 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);
- }
-
-
- }
- 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)
- {
-
- var armEnum = assginSubjectDoctorCommand.DoctorUserIdArmList.Where(t => t.DoctorUserId == doctorUserId).First().ArmEnum;
-
-
- if (await _subjectUserRepository.AnyAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.DoctorUserId == doctorUserId && t.ArmEnum != armEnum && t.OrignalSubjectUserId == null))
- {
- //---有Subject 在其他Arm组已有该医生,不允许在新的组添加该医生
- throw new BusinessValidationFailedException(_localizer["VisitTask_InconsistentSubjectStatus"]);
- }
-
- if (await _subjectUserRepository.AnyAsync(t => t.TrialId == trialId && t.SubjectId == subjectId && t.DoctorUserId == doctorUserId && t.ArmEnum == armEnum && t.OrignalSubjectUserId == null))
- {
- //---有Subject 已有该Arm组的医生,不允许继续分配,请刷新页面,确认页面数据是否过期
- throw new BusinessValidationFailedException(_localizer["VisitTask_DuplicateDoctorInArm"]);
- }
- else
- {
- await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = trialId, SubjectId = subjectId, DoctorUserId = doctorUserId, ArmEnum = armEnum, AssignTime = DateTime.Now });
-
- }
-
- }
-
- }
-
-
- await _subjectUserRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok();
- }
-
- ///
- /// 批量取消Subject 分配的医生
- ///
- /// 数量
- [HttpPost]
- [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
- public async Task CancelSubjectAssignDoctor(CancelSubjectAssignCommand cancelSubjectAssignCommand)
- {
- if (cancelSubjectAssignCommand.IsJudgeDoctor)
- {
- foreach (var subjectId in cancelSubjectAssignCommand.SubjectIdList)
- {
- if (await _visitTaskRepository.AnyAsync(t => t.SubjectId == subjectId && t.DoctorUserId != null && t.ArmEnum == Arm.JudgeArm))
- {
- //---有Subject任务已应用,不允许取消分配
- throw new BusinessValidationFailedException(_localizer["VisitTask_DoctorAlreadyInArm"]);
- }
-
- await _subjectUserRepository.DeleteFromQueryAsync(t => t.SubjectId == subjectId && t.ArmEnum == Arm.JudgeArm);
- }
- }
- else
- {
- foreach (var subjectId in cancelSubjectAssignCommand.SubjectIdList)
- {
- if (await _visitTaskRepository.AnyAsync(t => t.SubjectId == subjectId && t.DoctorUserId != null && t.ArmEnum != Arm.JudgeArm))
- {
- //---有Subject任务已应用,不允许取消分配
- throw new BusinessValidationFailedException(_localizer["VisitTask_DoctorAlreadyInArm"]);
- }
-
- await _subjectUserRepository.DeleteFromQueryAsync(t => t.SubjectId == subjectId && t.ArmEnum != Arm.JudgeArm);
- }
- }
-
- await _subjectUserRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok();
- }
-
-
- ///
- /// 手动分配确认 绑定该Subject的已存在的任务给医生
- ///
- ///
- ///
- [HttpPost]
- [UnitOfWork]
- [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
- public async Task ManualAssignDoctorApplyTask(AssignConfirmCommand assignConfirmCommand)
- {
- var trialId = assignConfirmCommand.TrialId;
-
- //获取项目配置 判断应该分配几个医生
- //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();
-
- //需要确认的Subject
- var subjectIdList = assignConfirmCommand.SubjectDoctorUserList.Select(t => t.SubjectId).ToList();
-
- //将关系确认
- if (assignConfirmCommand.SubjectDoctorUserList.Count == 0)
- {
- await _subjectUserRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.IsConfirmed == false && t.OrignalSubjectUserId == null, u => new SubjectUser() { IsConfirmed = true });
- }
- else
- {
- await _subjectUserRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == trialId && t.IsConfirmed == false && t.OrignalSubjectUserId == null
- && subjectIdList.Contains(t.SubjectId), u => new SubjectUser() { IsConfirmed = true });
- }
-
-
- var taskList = _visitTaskRepository.Where(t => t.TrialId == assignConfirmCommand.TrialId && t.DoctorUserId == null, true)
- .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())
- //过滤掉 那些回退的subject
- .Where(t => !t.Subject.SubjectVisitList.Any(t => t.IsPMBackOrReReading))
-
- .ToList();
-
-
- foreach (var subjectTaskGroup in taskList.GroupBy(t => t.SubjectId))
- {
- var subjectId = subjectTaskGroup.Key;
-
-
-
- //如果数据为空 那么就是确认所有已分配的
- List subjectDoctorIdArmList = new List();
-
- if (assignConfirmCommand.SubjectDoctorUserList.Count == 0)
- {
- subjectDoctorIdArmList = _subjectUserRepository.Where(t => t.SubjectId == subjectId && t.OrignalSubjectUserId == null).Select(t => new DoctorArm() { DoctorUserId = t.DoctorUserId, ArmEnum = t.ArmEnum }).ToList();
- }
- else
- {
- subjectDoctorIdArmList = assignConfirmCommand.SubjectDoctorUserList.Where(t => t.SubjectId == subjectId).First().DoctorUserIdArmList;
- }
-
-
- foreach (var task in subjectTaskGroup.OrderBy(t => t.ArmEnum).ToList())
- {
-
- var subjectDoctorArm = subjectDoctorIdArmList.Where(t => t.ArmEnum == task.ArmEnum).FirstOrDefault();
-
- if (subjectDoctorArm != null)
- {
- task.DoctorUserId = subjectDoctorArm.DoctorUserId;
- task.AllocateTime = DateTime.Now;
- task.TaskAllocationState = TaskAllocationState.Allocated;
-
- task.SuggesteFinishedTime = /*task.IsUrgent ? DateTime.Now.AddDays(2) : DateTime.Now.AddDays(7)*/ GetSuggessFinishTime(true, UrgentType.NotUrget);
-
- await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == task.SourceSubjectVisitId, u => new SubjectVisit() { ReadingStatus = ReadingStatusEnum.ImageReading });
-
- await _readModuleRepository.BatchUpdateNoTrackingAsync(t => t.Id == task.SouceReadModuleId, u => new ReadModule() { ReadingStatus = ReadingStatusEnum.ImageReading });
-
-
- }
- else
- {
- //---在配置表中未找到配置的医生,无法应用绑定,请核对数据
- throw new BusinessValidationFailedException(_localizer["VisitTask_TaskAlreadyApplied"]);
- }
-
- }
- }
-
-
-
- await _visitTaskRepository.SaveChangesAsync();
-
- return ResponseOutput.Ok();
- }
-
///
@@ -1062,7 +576,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
var visitQuery = _visitTaskRepository
.Where(x => x.TrialId == inDto.TrialId && x.TaskState == TaskState.Effect)
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllBaseline,
- t=>t.Subject.SubjectVisitTaskList.Any(c=>c.SourceSubjectVisit.IsBaseLine==true && c.ReadingTaskState==ReadingTaskState.HaveSigned))
+ t => t.Subject.SubjectVisitTaskList.Any(c => c.SourceSubjectVisit.IsBaseLine == true && c.ReadingTaskState == ReadingTaskState.HaveSigned))
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI && piReadingScopenEnum == PIReadingScopenEnum.AllVisit,
t => t.Subject.SubjectVisitTaskList.Any(c => c.SourceSubjectVisit.IsBaseLine == true && c.ReadingTaskState == ReadingTaskState.HaveSigned))
@@ -1333,7 +847,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
}
- if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer)
+ if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI)
{
task.ReReadingApplyState = ReReadingApplyState.DocotorHaveApplyed;
@@ -1360,7 +874,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
var originalTask = pmApply.OriginalReReadingTask;
//PM 有序影响列表
- if (await _visitTaskRepository.Where(t => t.TrialId == originalTask.TrialId && t.SubjectId == originalTask.SubjectId && t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.IsAnalysisCreate == false && t.TrialReadingCriterionId == originalTask.TrialReadingCriterionId && t.VisitTaskNum >= originalTask.VisitTaskNum)
+ if (await _visitTaskRepository.Where(t => t.TrialId == originalTask.TrialId && t.SubjectId == originalTask.SubjectId && t.TaskState == TaskState.Effect /*&& t.TaskAllocationState == TaskAllocationState.Allocated*/ && t.IsAnalysisCreate == false && t.TrialReadingCriterionId == originalTask.TrialReadingCriterionId && t.VisitTaskNum >= originalTask.VisitTaskNum)
.AnyAsync(t => t.VisitTaskNum == task.VisitTaskNum))
{
//---当前为有序阅片,影像存在问题,项目组已申请回退,暂不能申请重阅
@@ -1540,7 +1054,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
visitTaskReReadingAppply.RequestReReadingRejectReason = agreeReReadingCommand.RequestReReadingRejectReason;
- Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == origenalTask.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) && t.TaskAllocationState == TaskAllocationState.Allocated;
+ Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == origenalTask.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze);
//是否是一致性分析任务 正常申请 会影响一致性分析任务
filterExpression = filterExpression.And(t => t.IsAnalysisCreate == origenalTask.IsAnalysisCreate);
@@ -1586,289 +1100,18 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (agreeReReadingCommand.RequestReReadingResultEnum == RequestReReadingResult.Agree)
{
- //PM申请 SPM / CPM审批 回退访视,在此不生成访视任务 影响多个标准的任务
- if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.TrialGroupApply && (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM))
+
+ //IR申请 PM 审批 注意这里有一致性分析的申请同意 不会回退访视,在此要生成影响的访视任务
+ if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.DocotorApply && _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager )
{
- #region PM 申请两个IR 同一访视,其他人的申请记录也设置为同意 不会出现,因为在未处理前 一个Subject只能申请一次
-
-
- // await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.OriginalReReadingTask.SubjectId == origenalTask.SubjectId &&
- // t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed &&
- // t.RequestReReadingType == RequestReReadingType.TrialGroupApply &&
- //t.OriginalReReadingTask.VisitTaskNum == origenalTask.VisitTaskNum &&
- //t.Id != item.Id, u => new VisitTaskReReading()
- //{
- // RequestReReadingConfirmUserId = _userInfo.Id,
- // RequestReReadingResultEnum = RequestReReadingResult.Agree,
- //});
-
- // //只更新 PM 申请 同一访视的数据
- // await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == origenalTask.SubjectId &&
- // t.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed &&
- // t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId &&
- // t.IsAnalysisCreate == origenalTask.IsAnalysisCreate &&
- // t.VisitTaskNum == origenalTask.VisitTaskNum &&
- // t.Id != origenalTask.Id, u => new VisitTask()
- // {
- // ReReadingApplyState = ReReadingApplyState.Agree
- // });
- #endregion
-
- // 不管有序 无序 都会 回退访视
- if (origenalTask.ReadingCategory == ReadingCategory.Visit)
- {
- //执行类似一致性核查回退流程
- await VisitBackAsync(origenalTask.SourceSubjectVisitId);
-
- }
- else
- {
- //---仅允许同意访视类型的任务重阅
- throw new BusinessValidationFailedException(_localizer["VisitTask_ReReadTaskNotApplied"]);
- }
//有序阅片
if (criterionConfig.IsReadingTaskViewInOrder)
{
-
- //访视影响当前以及当前之后的 两个阅片人的
filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum);
- #region 影响的任务
-
-
-
- var influenceTaskList = await _visitTaskRepository.Where(filterExpression, true).ToListAsync();
-
- var trakingOrigenalTask = influenceTaskList.Where(t => t.Id == origenalTask.Id).FirstOrDefault();
-
- foreach (var influenceTask in influenceTaskList)
- {
- //处理申请的任务
- if (influenceTask.Id == origenalTask.Id)
- {
- ReReadingTaskTrackingDeal(influenceTask, agreeReReadingCommand);
-
- await InfluenceAddtioncalEvaluationCritrionAsync(origenalTask, influenceTaskList.Where(t => t.Id != origenalTask.Id).Where(t => t.SourceSubjectVisitId != null).Select(t => (Guid)t.SourceSubjectVisitId).Distinct().ToList());
-
- await SetReReadingOrBackInfluenceAnalysisAsync(origenalTask.SubjectId);
-
- await SetMedicalReviewInvalidAsync(influenceTaskList);
-
- }
-
-
- if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
- {
- influenceTask.TaskState = TaskState.HaveReturned;
-
- trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
- }
- else
- {
- influenceTask.TaskState = TaskState.Adbandon;
-
- trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
- }
-
- #region 废弃 分配 留存
-
- ////申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配
- //if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != origenalTask.VisitTaskNum)
- //{
- // if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
- // {
- // influenceTask.TaskState = TaskState.HaveReturned;
-
- // trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
- // }
- // else if (influenceTask.ReadingTaskState == ReadingTaskState.Reading)
- // {
- // influenceTask.TaskState = TaskState.Adbandon;
- // trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
- // }
- // else
- // {
- // influenceTask.DoctorUserId = null;
- // influenceTask.AllocateTime = null;
- // influenceTask.SuggesteFinishedTime = null;
- // influenceTask.TaskAllocationState = TaskAllocationState.NotAllocate;
-
- // trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.CancelAssign });
- // }
- //}
- ////当前访视
- //else
- //{
- // if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
- // {
- // influenceTask.TaskState = TaskState.HaveReturned;
-
- // trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
- // }
- // else
- // {
- // influenceTask.TaskState = TaskState.Adbandon;
-
- // trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
- // }
-
- //}
-
- #endregion
-
-
- }
- #endregion
- }
- //无序阅片 没有 全局 肿瘤学
- else
- {
-
- // 1.当前任务及裁判任务
- // 2.影响所有阅片人的任务
-
- var judegTaskNum = origenalTask.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge];
-
- filterExpression = filterExpression.And(t => t.VisitTaskNum == origenalTask.VisitTaskNum || t.VisitTaskNum == judegTaskNum);
-
-
- var influenceTaskList = await _visitTaskRepository.Where(filterExpression, true).ToListAsync();
-
- //影像列表为空就为null
- var trakingOrigenalTask = influenceTaskList.Where(t => t.Id == origenalTask.Id).FirstOrDefault();
-
- foreach (var influenceTask in influenceTaskList)
- {
- //处理申请的任务
- if (influenceTask.Id == origenalTask.Id)
- {
- ReReadingTaskTrackingDeal(influenceTask, agreeReReadingCommand);
-
-
- await SetReReadingOrBackInfluenceAnalysisAsync(origenalTask.SubjectId);
-
- await SetMedicalReviewInvalidAsync(influenceTaskList);
-
- trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
- }
- else
- {
- if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
- {
- influenceTask.TaskState = TaskState.HaveReturned;
-
- trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
- }
- else
- {
- influenceTask.TaskState = TaskState.Adbandon;
-
- trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
- }
- }
- }
-
- }
-
-
-
- }
- //IR申请 PM 审批 注意这里有一致性分析的申请同意 不会回退访视,在此要生成影响的访视任务
- else if (visitTaskReReadingAppply.RequestReReadingType == RequestReReadingType.DocotorApply && (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.AIR))
- {
-
-
-
- //有序阅片
- if (criterionConfig.IsReadingTaskViewInOrder)
- {
- #region 有序 IR 申请 重阅 影响的其他访视查询
-
-
-
- switch (origenalTask.ReadingCategory)
- {
- case ReadingCategory.Visit:
- //影响后续访视已经读完的,正在读的,未读的不做处理 以及其他类型任务
-
- //申请的是转化的,那么影响列表要排除转化之前的
- if (criterionConfig.CriterionType == CriterionType.IRECIST1Point1 && origenalTask.BeforeConvertedTaskId != null)
- {
-
-
- filterExpression = filterExpression.And(t => (t.VisitTaskNum > origenalTask.VisitTaskNum &&
- (
- ((t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global) && t.DoctorUserId == origenalTask.DoctorUserId)
- // 裁判 肿瘤学是另外的医生做
- || t.ReadingCategory == ReadingCategory.Judge
- || t.ReadingCategory == ReadingCategory.Oncology
- )) || t.Id == origenalTask.Id)
- ;
- }
- else if (isIR1Point1AdditionalAssessmentBaseline)
- {
- filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum &&
- (((
- ((t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global) && t.DoctorUserId == origenalTask.DoctorUserId)
- // 裁判 肿瘤学是另外的医生做
- || t.ReadingCategory == ReadingCategory.Judge
- || t.ReadingCategory == ReadingCategory.Oncology
- ) && t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId) || (t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB))
- );
- }
- else
- {
- filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum &&
- (
- ((t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global) && t.DoctorUserId == origenalTask.DoctorUserId)
- // 裁判 肿瘤学是另外的医生做
- || t.ReadingCategory == ReadingCategory.Judge
- || t.ReadingCategory == ReadingCategory.Oncology
- )
- );
- }
-
-
-
-
-
-
- break;
-
-
- //不影响后续访视: (t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState != ReadingTaskState.WaitReading) ||
- case ReadingCategory.Global:
-
- filterExpression = filterExpression.And(t => t.VisitTaskNum > origenalTask.VisitTaskNum &&
- ((t.DoctorUserId == origenalTask.DoctorUserId && t.ReadingCategory == ReadingCategory.Global)
- || (t.ReadingCategory == ReadingCategory.Oncology) || (t.ReadingCategory == ReadingCategory.Judge)) || t.Id == origenalTask.Id);
- break;
-
- case ReadingCategory.Oncology:
-
- //仅仅影响自己 后续任务如果是访视任务、全局任务或裁判任务,均不处理
- filterExpression = filterExpression.And(t => t.Id == origenalTask.Id);
- break;
-
- case ReadingCategory.Judge:
-
- //裁判的影响自己 和后续肿瘤学阅片(不是自己做的)
- filterExpression = filterExpression.And(t => t.Id == origenalTask.Id || t.VisitTaskNum > origenalTask.VisitTaskNum && t.ReadingCategory == ReadingCategory.Oncology);
-
- break;
-
-
- default:
- //---不支持重阅的任务类型
- throw new BusinessValidationFailedException(_localizer["VisitTask_UnsupportedTaskType"]);
-
- }
-
- #endregion
-
#region 这里时影响其他的任务 /*不包括申请的任务 申请的任务,在上面会统一处理*/
@@ -1989,18 +1232,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
_ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
}
- //else if (origenalTask.ReadingCategory == ReadingCategory.Global)
- //{
- // var list = _repository.Where(t => t.GlobalTaskId == origenalTask.Id).ToList();
-
- // foreach (var item in list)
- // {
- // item.Id = Guid.Empty;
- // item.GlobalTaskId = newTask.Id;
- // }
-
- // _ = _repository.AddRangeAsync(list).Result;
- //}
}
@@ -2020,18 +1251,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
_ = _readingTaskQuestionAnswerRepository.AddRangeAsync(list).Result;
}
- //else if (origenalTask.ReadingCategory == ReadingCategory.Global)
- //{
- // var list = _repository.Where(t => t.GlobalTaskId == origenalTask.Id).ToList();
-
- // foreach (var item in list)
- // {
- // item.Id = Guid.Empty;
- // item.GlobalTaskId = newTask.Id;
- // }
-
- // _ = _repository.AddRangeAsync(list).Result;
- //}
+
}
}
@@ -2257,7 +1477,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
return ResponseOutput.NotOk(_localizer["VisitTask_ConsistencyTaskCannotBeReturned"]);
}
- Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == task.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) && t.TaskAllocationState == TaskAllocationState.Allocated;
+ Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == task.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) /*&& t.TaskAllocationState == TaskAllocationState.Allocated*/;
if (criterionConfig.CriterionType == CriterionType.RECIST1Point1 && criterionConfig.IsAdditionalAssessment)
@@ -2291,7 +1511,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (criterionConfig.IsReadingTaskViewInOrder)
{
- //Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == task.SubjectId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == false && t.TaskAllocationState == TaskAllocationState.Allocated;
filterExpression = filterExpression.And(t => t.IsAnalysisCreate == false);
@@ -2348,50 +1567,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
}
- #region 废弃取消分配留存
- ////申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配
- //if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != task.VisitTaskNum)
- //{
- // //后续访视处理访视
- // if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
- // {
- // influenceTask.TaskState = TaskState.HaveReturned;
-
- // origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
- // }
- // else if (influenceTask.ReadingTaskState == ReadingTaskState.Reading)
- // {
- // influenceTask.TaskState = TaskState.Adbandon;
- // origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
- // }
- // else
- // {
- // influenceTask.DoctorUserId = null;
- // influenceTask.AllocateTime = null;
- // influenceTask.SuggesteFinishedTime = null;
- // influenceTask.TaskAllocationState = TaskAllocationState.NotAllocate;
-
- // origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.CancelAssign });
- // }
- //}
- //else
- //{
- // //申请的访视 全局肿瘤学
-
- // if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
- // {
- // influenceTask.TaskState = TaskState.HaveReturned;
- // origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Return });
- // }
- // else
- // {
- // influenceTask.TaskState = TaskState.Adbandon;
- // origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
- // }
-
- //}
- #endregion
@@ -2442,11 +1618,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
return ResponseOutput.NotOk(_localizer["VisitTask_PMOnlyAllowedForReturn"]);
}
-
-
-
-
-
await _visitTaskRepository.SaveChangesAsync();
return ResponseOutput.Ok();
@@ -2593,11 +1764,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
var filterObj = (await _visitTaskRepository.FirstOrDefaultNoTrackingAsync(t => t.Id == taskId)).IfNullThrowException();
var trialId = filterObj.TrialId;
- //var trialConfig = (await _trialRepository.Where(t => t.Id == trialId).Select(t => new { TrialId = t.Id, t.IsReadingTaskViewInOrder, t.ReadingType }).FirstOrDefaultAsync()).IfNullThrowException();
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == filterObj.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.CriterionType, x.IsAdditionalAssessment, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
- Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == filterObj.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) && t.TaskAllocationState == TaskAllocationState.Allocated;
+ Expression> filterExpression = t => t.TrialId == trialId && t.SubjectId == filterObj.SubjectId && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze) /*&& t.TaskAllocationState == TaskAllocationState.Allocated*/;
//是否是一致性分析任务 (一致性分析的任务 不会产生裁判 肿瘤学 仅仅有生成的访视和全局)
@@ -2654,8 +1824,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
//IR 申请 PM 同意 仅仅影响自己
- if ((_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && applyId != null && await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.IndependentReviewer))
- || (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer && applyId == null))
+ if ((_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && applyId != null && await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && (t.CreateUser.UserTypeEnum == UserTypeEnum.SR|| t.CreateUser.UserTypeEnum == UserTypeEnum.PI)))
+ || ( (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR|| _userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI) && applyId == null))
{
//当前任务及其之后的所有访视任务、全局任务、裁判任务、肿瘤学阅片任务
@@ -2664,100 +1834,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
if (criterionConfig.IsReadingTaskViewInOrder)
{
- switch (filterObj.ReadingCategory)
- {
- case ReadingCategory.Visit:
- //影响当前医生 以及当前医生之后的 1、访视任务 已经读完的
- //2、后续任务如果是全局、肿瘤学阅片任务,状态为阅片完成标记为重阅重置;若在阅片中,则标记为失效;若为待阅片,则标记为失效;
- //3、当前任务、后续访视任务或者全局任务触发了裁判任务,若裁判任务状态为阅片完成,则标记为重阅重置;若在阅片中或待阅片,则标记为失效
-
- //申请的是转化的,那么影响列表要排除转化之前的
- if (criterionConfig.CriterionType == CriterionType.IRECIST1Point1 && filterObj.BeforeConvertedTaskId != null)
- {
-
-
- filterExpression = filterExpression.And(t => (t.VisitTaskNum > filterObj.VisitTaskNum &&
- (
- ((t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global) && t.DoctorUserId == filterObj.DoctorUserId)
- // 裁判 肿瘤学是另外的医生做
- || t.ReadingCategory == ReadingCategory.Judge
- || t.ReadingCategory == ReadingCategory.Oncology
- )) || t.Id == filterObj.Id)
- ;
- }
- // IR 申请1.1 基线重阅,影响附加评估所有的任务
- else if (isIR1Point1AdditionalAssessmentBaseline)
- {
- filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum &&
- (((
- ((t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global) && t.DoctorUserId == filterObj.DoctorUserId)
- // 裁判 肿瘤学是另外的医生做
- || t.ReadingCategory == ReadingCategory.Judge
- || t.ReadingCategory == ReadingCategory.Oncology
- ) && t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId) || (t.TrialReadingCriterion.CriterionType == CriterionType.RECIST1Pointt1_MB))
- );
- }
- else
- {
- filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum &&
- (
- ((t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global) && t.DoctorUserId == filterObj.DoctorUserId)
- // 裁判 肿瘤学是另外的医生做
- || t.ReadingCategory == ReadingCategory.Judge
- || t.ReadingCategory == ReadingCategory.Oncology
- )
- );
- }
-
-
-
-
-
- break;
-
- case ReadingCategory.Global:
-
- // 1、后续任务如果是访视任务,均不处理;
- //2、后续任务如果是全局、状态为阅片完成则标记为重阅重置,若阅片中或待阅片则不处理;
- //3、当前任务或者全局任务触发了裁判任务,若裁判任务状态为阅片完成,则标记为重阅重置;若在阅片中或待阅片,则标记为失效
- //4、后续任务为肿瘤学阅片任务,状态为阅片完成标记为重阅重置;若在阅片中,则标记为失效;若为待阅片,则标记为失效;
-
- //filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum &&
- //((t.DoctorUserId == filterObj.DoctorUserId && ((t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned) || t.ReadingCategory == ReadingCategory.Global)) || (t.ReadingCategory == ReadingCategory.Oncology) || (t.ReadingCategory == ReadingCategory.Judge)));
-
-
- filterExpression = filterExpression.And(t => t.VisitTaskNum > filterObj.VisitTaskNum &&
- (
- (t.DoctorUserId == filterObj.DoctorUserId && t.ReadingCategory == ReadingCategory.Global)
- || (t.ReadingCategory == ReadingCategory.Oncology)
- || (t.ReadingCategory == ReadingCategory.Judge)
- ) || t.Id == filterObj.Id);
-
- break;
-
- //1、后续任务如果是访视任务、全局任务或裁判任务,均不处理;
- case ReadingCategory.Oncology:
-
- //仅仅影响自己
- filterExpression = filterExpression.And(t => t.Id == filterObj.Id);
- break;
-
- //(只允许申请该阅片人最后一次完成裁判的任务重阅)申请的时候做了限制
- case ReadingCategory.Judge:
-
- // 1、后续任务如果是访视任务、全局任务,均不处理;
- //2、后续若有肿瘤学阅片,若肿瘤学阅片任务状态为阅片完成,则标记为重阅重置;若为阅片中则标记为失效,如为待阅片,则取消分配
-
- //裁判的影响自己 和后续肿瘤学阅片(不是自己做的)
- filterExpression = filterExpression.And(t => t.Id == filterObj.Id || t.VisitTaskNum > filterObj.VisitTaskNum && t.ReadingCategory == ReadingCategory.Oncology);
-
- break;
-
-
- default:
- //---不支持重阅的任务类型
- throw new BusinessValidationFailedException(_localizer["VisitTask_UnsupportedTaskType"]);
- }
+ filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
}
//无序
else
@@ -2770,51 +1847,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
//throw new BusinessValidationFailedException("仅允许PM 同意 IR 申请的任务");
}
- //PM 影响所有阅片人 仅仅针对访视 SPM CPM 掉用
-
- else if (((_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM) && applyId != null && await _visitTaskReReadingRepository.AnyAsync(t => t.Id == applyId && t.CreateUser.UserTypeEnum == UserTypeEnum.ProjectManager) && filterObj.IsAnalysisCreate == false && filterObj.ReadingCategory == ReadingCategory.Visit)
- || (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && applyId == null))
- {
-
-
-
-
- //有序
- if (criterionConfig.IsReadingTaskViewInOrder)
- {
- switch (filterObj.ReadingCategory)
- {
- case ReadingCategory.Visit:
-
- //访视影响当前以及当前之后的 两个阅片人的
- filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
-
- break;
-
- default:
- //---不支持重阅的任务类型
- throw new BusinessValidationFailedException(_localizer["VisitTask_UnsupportedTaskType"]);
- }
-
- if (await _visitTaskReReadingRepository.AnyAsync(t => t.RequestReReadingType == RequestReReadingType.DocotorApply && t.RequestReReadingResultEnum == RequestReReadingResult.Default &&
- t.OriginalReReadingTask.VisitTaskNum >= filterObj.VisitTaskNum && t.OriginalReReadingTask.SubjectId == filterObj.SubjectId && t.OriginalReReadingTask.TrialReadingCriterionId == filterObj.TrialReadingCriterionId && t.OriginalReReadingTask.IsAnalysisCreate == filterObj.IsAnalysisCreate))
- {
- isIRAppyTaskInfluenced = true;
- }
- }
- //无序
- else
- {
- // 1.当前任务及裁判任务
- // 2.影响所有阅片人的任务
-
- var judegTaskNum = filterObj.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge];
-
- filterExpression = filterExpression.And(t => t.VisitTaskNum == filterObj.VisitTaskNum || t.VisitTaskNum == judegTaskNum);
- }
-
- //throw new BusinessValidationFailedException("仅允许SPM CPM 同意 PM 申请的非 一致性分析的访视任务");
- }
else
{
//---当前用户查看列表未定义
@@ -3041,6 +2073,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
return list;
}
-
+
}
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index 0030802b5..3215f66f5 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -2535,7 +2535,7 @@ namespace IRaCIS.Application.Services
{
if (claimSubjectDto.IsClaim)
{
- await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == claimSubjectDto.VisitTaskId, u => new VisitTask() { ClaimUserId = _userInfo.Id }, true);
+ await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == claimSubjectDto.VisitTaskId, u => new VisitTask() { DoctorUserId = _userInfo.Id }, true);
IJobDetail job = JobBuilder.Create()
.UsingJobData("VisitTaskId",(Guid) claimSubjectDto.VisitTaskId) // 传递GUID参数给任务
diff --git a/IRaCIS.Core.Domain/Allocation/VisitTask.cs b/IRaCIS.Core.Domain/Allocation/VisitTask.cs
index e471274f9..a6ad76911 100644
--- a/IRaCIS.Core.Domain/Allocation/VisitTask.cs
+++ b/IRaCIS.Core.Domain/Allocation/VisitTask.cs
@@ -426,8 +426,6 @@ namespace IRaCIS.Core.Domain.Models
}
}
- public Guid? ClaimUserId { get; set; }
-
}
///