From 45900199291b4a04c9cd074ed848357acad969ed Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Thu, 23 Jun 2022 10:59:37 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9Sujbect=20=20=E5=88=86?=
=?UTF-8?q?=E9=85=8D=E5=8C=BB=E7=94=9F=20=E2=80=9C=E5=BA=94=E7=94=A8?=
=?UTF-8?q?=E8=AF=AF=E8=A7=A3=E2=80=9D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 12 +--
.../Allocation/DTO/VisitTaskViewModel.cs | 21 +++-
.../Service/Allocation/VisitTaskService.cs | 95 ++++++++++++-------
.../Service/Allocation/_MapConfig.cs | 3 +-
IRaCIS.Core.Domain/Allocation/SubjectUser.cs | 10 ++
.../Context/IRaCISDBContext.cs | 1 +
6 files changed, 95 insertions(+), 47 deletions(-)
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index b87d72bcc..7035be90c 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -63,6 +63,12 @@
访视读片任务
+
+
+ 获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
+
+
+
获取随访 阅片期 全局 任务列表
@@ -112,12 +118,6 @@
-
-
- 获取手动分配 未分配的Subject列表(IsHaveAssigned 传递false)
-
-
-
批量为 多个Subject 分配医生 手动分配 IsReAssign 为true 批量删除 重新分配
diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
index eea21e3bf..e6645027c 100644
--- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
@@ -251,7 +251,7 @@ namespace IRaCIS.Core.Application.ViewModel
public bool? IsHaveAssigned { get; set; }
- public bool? IsHaveApplyedTask { get; set; }
+ public bool? IsAssignConfirmed { get; set; }
}
@@ -271,17 +271,24 @@ namespace IRaCIS.Core.Application.ViewModel
[JsonIgnore]
public bool IsJudge { get; set; }
- public bool IsAssignDoctorApplyedTask => DoctorUserList.Where(t=> IsJudge? t.ArmEnum==Arm.JudgeArm : t.ArmEnum != Arm.JudgeArm).All(t => t.IsAssignDoctorApplyedTask) && DoctorUserList.Where(t => IsJudge ? t.ArmEnum == Arm.JudgeArm : t.ArmEnum != Arm.JudgeArm).Count() > 0;
+ public bool IsConfirmed => DoctorUserList.Where(t=> IsJudge? t.ArmEnum==Arm.JudgeArm : t.ArmEnum != Arm.JudgeArm).All(t => t.IsConfirmed)
+ && DoctorUserList.Where(t => IsJudge ? t.ArmEnum == Arm.JudgeArm : t.ArmEnum != Arm.JudgeArm).Count() > 0;
public List DoctorUserIdList => DoctorUserList.Select(t => t.DoctorUserId).ToList();
- public List DoctorUserList { get; set; } = new List();
+ //.ForEach(t => t.HistoryDoctorList = TotalDoctorUserList.Where(c => (Guid?)t.Id == c.OrignalSubjectUserId).ToList())
+ public List DoctorUserList => TotalDoctorUserList.Where(t => t.IsConfirmed && t.OrignalSubjectUserId == null).ToList()
+ ;
+
+ [JsonIgnore]
+ public List TotalDoctorUserList { get; set; } = new List();
}
public class AssignDoctorView
{
+ public Guid Id { get; set; }
public Guid DoctorUserId { get; set; }
public string UserCode { get; set; }
@@ -294,7 +301,13 @@ namespace IRaCIS.Core.Application.ViewModel
public Arm ArmEnum { get; set; }
- public bool IsAssignDoctorApplyedTask { get; set; }
+ public bool IsConfirmed { get; set; }
+
+ //该属性有值 说明该医生被替换了 分配的时候 要过滤掉
+ public Guid? OrignalSubjectUserId { get; set; }
+
+ //public List HistoryDoctorList { get; set; }
+
}
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
index 2e0a59b2d..31c6d9e50 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
@@ -44,6 +44,42 @@ namespace IRaCIS.Core.Application.Service
_readModuleRepository = readModuleRepository;
}
+
+ ///
+ /// 获取手动分配 未分配的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;
+ }
+
///
/// 获取随访 阅片期 全局 任务列表
///
@@ -197,6 +233,7 @@ namespace IRaCIS.Core.Application.Service
public async Task<(PageOutput,object)> GetIRUnReadSubjectTaskList(IRUnReadSubjectQuery iRUnReadSubjectQuery)
{
var trialId = iRUnReadSubjectQuery.TrialId;
+
#region 按照任务的维度统计分组
//var query = _visitTaskRepository.Where(t => t.TrialId == trialId)
@@ -336,40 +373,7 @@ namespace IRaCIS.Core.Application.Service
- ///
- /// 获取手动分配 未分配的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).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, 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;
- }
+
///
@@ -378,6 +382,7 @@ namespace IRaCIS.Core.Application.Service
///
///
[HttpPost]
+ [UnitOfWork]
public async Task AssignSubjectDoctor(AssginSubjectDoctorCommand assginSubjectDoctorCommand)
{
var trialId = assginSubjectDoctorCommand.TrialId;
@@ -501,10 +506,21 @@ 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();
-
//需要确认的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())
@@ -515,6 +531,8 @@ namespace IRaCIS.Core.Application.Service
{
var subjectId = subjectTaskGroup.Key;
+
+
//如果数据为空 那么就是确认所有已分配的
List subjectDoctorIdArmList = new List();
@@ -522,6 +540,8 @@ namespace IRaCIS.Core.Application.Service
{
subjectDoctorIdArmList = _subjectUserRepository.Where(t => t.SubjectId == subjectId).Select(t => new DoctorArm() { DoctorUserId = t.DoctorUserId, ArmEnum = t.ArmEnum }).ToList();
+
+
}
else
{
@@ -541,10 +561,13 @@ namespace IRaCIS.Core.Application.Service
task.AllocateTime = DateTime.Now;
task.TaskState = TaskState.Allocated;
+ task.SuggesteFinishedTime = task.IsUrgent ? DateTime.Now.AddDays(2) : DateTime.Now.AddDays(7);
+
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
{
@@ -841,5 +864,7 @@ namespace IRaCIS.Core.Application.Service
await _visitTaskRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
+
+
}
}
diff --git a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs
index 33b04773c..c9a529683 100644
--- a/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/_MapConfig.cs
@@ -143,14 +143,13 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.IsAssignedDoctorUser, t => t.MapFrom(u => u.SubjectDoctorList.Where(t=>isJudgeDoctor? t.ArmEnum == Arm.JudgeArm: t.ArmEnum != Arm.JudgeArm).Any()))
- .ForMember(o => o.DoctorUserList, t => t.MapFrom(u => u.SubjectDoctorList.Where(t => isJudgeDoctor ? true : t.ArmEnum != Arm.JudgeArm).OrderBy(t => t.ArmEnum)));
+ .ForMember(o => o.TotalDoctorUserList, t => t.MapFrom(u => u.SubjectDoctorList.Where(t => isJudgeDoctor ? true : t.ArmEnum != Arm.JudgeArm).OrderBy(t => t.ArmEnum)));
CreateMap()
//.ForMember(o => o.AssignTime, t => t.MapFrom(u => u.AssignTime))
.ForMember(o => o.UserCode, t => t.MapFrom(u => u.DoctorUser.UserCode))
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName))
.ForMember(o => o.FullName, t => t.MapFrom(u => u.DoctorUser.FullName))
- .ForMember(o => o.IsAssignDoctorApplyedTask, t => t.MapFrom(u => u.Subject.SubjectVisitTaskList.Any(c => c.DoctorUserId == u.DoctorUserId)))
.ForMember(o => o.UserTypeShortName, t => t.MapFrom(u => u.DoctorUser.UserTypeRole.UserTypeShortName));
diff --git a/IRaCIS.Core.Domain/Allocation/SubjectUser.cs b/IRaCIS.Core.Domain/Allocation/SubjectUser.cs
index 34ae75e9f..8d7055f3e 100644
--- a/IRaCIS.Core.Domain/Allocation/SubjectUser.cs
+++ b/IRaCIS.Core.Domain/Allocation/SubjectUser.cs
@@ -63,6 +63,16 @@ namespace IRaCIS.Core.Domain.Models
public Arm ArmEnum { get; set; }
+ public bool IsConfirmed { get; set; }
+
+ //该属性有值 说明该医生被替换了 分配的时候 要过滤掉
+ public Guid? OrignalSubjectUserId { get; set; }
+
+ //Parent
+ public SubjectUser OrignalSubjectUser { get; set; }
+
+ //ChildList
+ public List EarlierSubjectUserList { get; set; }
public List SubjectArmVisitTaskList { get; set; }
diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
index 082cee21c..8dee5b6e3 100644
--- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
+++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
@@ -93,6 +93,7 @@ namespace IRaCIS.Core.Infra.EFCore
modelBuilder.Entity().HasMany(t => t.SubjectArmVisitTaskList).WithOne(t=>t.SujectArm).HasForeignKey(t => new { t.SubjectId,t.ArmEnum}).HasPrincipalKey(u => new { u.SubjectId,u.ArmEnum });
modelBuilder.Entity().HasMany(t => t.JudgeVisitList).WithOne(t=>t.JudgeVisitTask);
modelBuilder.Entity().HasMany(t => t.ChildList).WithOne(t => t.Parent);
+ modelBuilder.Entity().HasMany(t => t.EarlierSubjectUserList).WithOne(t => t.OrignalSubjectUser);
if (_userInfo.IsEn_Us)
{
modelBuilder.Entity().Property(t => t.MappedValue).HasColumnName(nameof(Domain.Models.Dictionary.Value));