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