diff --git a/IRaCIS.Core.Application/BackGroundJob/CancelTaskQuartZJob.cs b/IRaCIS.Core.Application/BackGroundJob/CancelTaskQuartZJob.cs index fdb402ecb..37e7293d1 100644 --- a/IRaCIS.Core.Application/BackGroundJob/CancelTaskQuartZJob.cs +++ b/IRaCIS.Core.Application/BackGroundJob/CancelTaskQuartZJob.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.Logging; using Quartz; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.ViewModel; +using IRaCIS.Core.Application.Contracts; namespace IRaCIS.Application.Services.BackGroundJob { @@ -40,9 +41,12 @@ namespace IRaCIS.Application.Services.BackGroundJob if (isInOrder) { - Guid id = (Guid)dataMap.Get("SubjectId"); + Guid subjectId = (Guid)dataMap.Get("SubjectId"); + + Guid trialReadingCriterionId = (Guid)dataMap.Get("TrialReadingCriterionId"); + + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectId && t.TrialReadingCriterionId==trialReadingCriterionId, u => new VisitTask() { SubjectCriterionClaimUserId = null }); - await _subjectRepository.UpdatePartialFromQueryAsync(t => t.Id ==id, u => new Subject() { ClaimUserId = null }, true); } else { diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 8767e26a1..0dab67fd3 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -894,6 +894,9 @@ namespace IRaCIS.Core.Application.ViewModel public Guid? VisitTaskId { get; set; } + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + [NotDefault] public Guid SubejctId { get; set; } public bool IsClaim { get; set; } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index a70e5a2c8..6c04e02e4 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -652,13 +652,14 @@ namespace IRaCIS.Core.Application.Service.Allocation .WhereIf(!string.IsNullOrEmpty(inDto.SubjectCode), t => (t.Subject.Code.Contains(inDto.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inDto.SubjectCode) && t.IsAnalysisCreate)); - var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode, x.Subject.ClaimUserId ,x.Subject.ClaimUser.UserName }); + var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode, x.SubjectCriterionClaimUserId ,x.SubjectCriterionClaimUser.UserName }); var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView() { SubjectId = x.Key.SubjectId, SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode, - ClaimUserId = x.Key.ClaimUserId, + + ClaimUserId = x.Key.SubjectCriterionClaimUserId, ClaimUserName=x.Key.UserName, SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime), diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 131ce3167..83c1ca822 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -624,7 +624,7 @@ namespace IRaCIS.Application.Services throw new BusinessValidationFailedException(_localizer["ReadingImage_BeSigned"]); } - if(await _visitTaskRepository.AnyAsync(x=> x.Id == visitTaskid && x.DoctorUserId != _userInfo.Id && x.Subject.ClaimUserId != _userInfo.Id)) + if(await _visitTaskRepository.AnyAsync(x=> x.Id == visitTaskid && x.DoctorUserId != _userInfo.Id && x.SubjectCriterionClaimUserId != _userInfo.Id)) { throw new BusinessValidationFailedException("当前任务领取人不是你,不允许提交签名"); } @@ -2286,7 +2286,7 @@ namespace IRaCIS.Application.Services if (task != null) { // 有序 自动领取该Subject - await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, SubejctId = task.SubjectId, VisitTaskId=task.VisitTaskId, IsInOrder = true }); + await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, SubejctId = task.SubjectId, TrialReadingCriterionId=task.TrialReadingCriterionId, VisitTaskId=task.VisitTaskId, IsInOrder = true }); } } else @@ -2312,7 +2312,7 @@ namespace IRaCIS.Application.Services if (task != null) { // 无序 自动领取该Subject - await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, VisitTaskId = task.VisitTaskId, IsInOrder = false }); + await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, TrialReadingCriterionId=task.TrialReadingCriterionId, VisitTaskId = task.VisitTaskId, IsInOrder = false }); } } @@ -2450,20 +2450,23 @@ namespace IRaCIS.Application.Services { IScheduler scheduler = await _schedulerFactory.GetScheduler(); + //有序 用SubjectCriterionClaimUserId 某个标准的所有任务,该字段保持一致 if (claimSubjectDto.IsInOrder) { if (claimSubjectDto.IsClaim) { - - if(_subjectRepository.Any(t=>t.Id== claimSubjectDto.SubejctId && t.ClaimUserId != _userInfo.Id && t.ClaimUserId!=null)) + //每个subject 每个标准的领取放在 任务上 免得加表 + if(_visitTaskRepository.Any(t=>t.Id== claimSubjectDto.SubejctId && t.TrialReadingCriterionId==claimSubjectDto.TrialReadingCriterionId + && t.SubjectCriterionClaimUserId != _userInfo.Id && t.SubjectCriterionClaimUserId != null)) { throw new BusinessValidationFailedException("当前任务已被其他人领取,请进行其他的阅片任务"); } else { - await _subjectRepository.UpdatePartialFromQueryAsync(t => t.Id == claimSubjectDto.SubejctId, u => new Subject() { ClaimUserId = _userInfo.Id }, true); + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.Id == claimSubjectDto.SubejctId && t.TrialReadingCriterionId == claimSubjectDto.TrialReadingCriterionId , u => new VisitTask() { SubjectCriterionClaimUserId = _userInfo.Id }); + //列表可以看到当前阅片人是谁 await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.Id == claimSubjectDto.VisitTaskId, u => new VisitTask() { DoctorUserId = _userInfo.Id }); } @@ -2474,6 +2477,7 @@ namespace IRaCIS.Application.Services IJobDetail job = JobBuilder.Create() .UsingJobData("SubjectId", claimSubjectDto.SubejctId) // 传递GUID参数给任务 + .UsingJobData("TrialReadingCriterionId", claimSubjectDto.TrialReadingCriterionId) .UsingJobData("IsInOrder", claimSubjectDto.IsInOrder) .Build(); @@ -2490,9 +2494,10 @@ namespace IRaCIS.Application.Services } else { - await _subjectRepository.UpdatePartialFromQueryAsync(t => t.Id == claimSubjectDto.SubejctId, u => new Subject() { ClaimUserId = null }, true); + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.Id == claimSubjectDto.SubejctId && t.TrialReadingCriterionId == claimSubjectDto.TrialReadingCriterionId , u => new VisitTask() { SubjectCriterionClaimUserId = null }); } } + //无序 直接用DoctorUserId 当做领取人 else { if (claimSubjectDto.IsClaim) diff --git a/IRaCIS.Core.Application/Triggers/VisitTaskIAfterSignTrigger.cs b/IRaCIS.Core.Application/Triggers/VisitTaskIAfterSignTrigger.cs index 70c90c2f3..c354677f0 100644 --- a/IRaCIS.Core.Application/Triggers/VisitTaskIAfterSignTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/VisitTaskIAfterSignTrigger.cs @@ -31,13 +31,15 @@ namespace IRaCIS.Core.Application.Triggers { var visitTask = context.Entity; - + if (visitTask.SignTime != null && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned - && _subjectRepository.Where(t=>t.Id==visitTask.SubjectId).SelectMany(c=>c.SubjectVisitList) - .Any(t=>t.Id==visitTask.SourceSubjectVisitId && t.IsBaseLine)) - { - await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == visitTask.SubjectId , t=>new Subject() { ClaimUserId=null}); + //&& _subjectRepository.Where(t=>t.Id==visitTask.SubjectId).SelectMany(c=>c.SubjectVisitList) + //.Any(t=>t.Id==visitTask.SourceSubjectVisitId && t.IsBaseLine) + ) + { + //任务阅片完成 自动释放 + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.Id == visitTask.SubjectId && t.TrialReadingCriterionId==visitTask.TrialReadingCriterionId , t=>new VisitTask() { SubjectCriterionClaimUserId=null}); } diff --git a/IRaCIS.Core.Domain/Allocation/VisitTask.cs b/IRaCIS.Core.Domain/Allocation/VisitTask.cs index 44acec4a6..1135e0088 100644 --- a/IRaCIS.Core.Domain/Allocation/VisitTask.cs +++ b/IRaCIS.Core.Domain/Allocation/VisitTask.cs @@ -469,6 +469,10 @@ namespace IRaCIS.Core.Domain.Models public Guid? LatestReplyUserId { get;set; } public DateTime? LatestReplyTime { get; set; } + public User SubjectCriterionClaimUser { get; set; } + + public Guid? SubjectCriterionClaimUserId { get; set; } + } /// diff --git a/IRaCIS.Core.Domain/Visit/Subject.cs b/IRaCIS.Core.Domain/Visit/Subject.cs index ce75c64dc..9b1d0c066 100644 --- a/IRaCIS.Core.Domain/Visit/Subject.cs +++ b/IRaCIS.Core.Domain/Visit/Subject.cs @@ -116,11 +116,6 @@ namespace IRaCIS.Core.Domain.Models public List ClinicalFormList { get; set; } - public Guid? ClaimUserId { get; set; } - - [JsonIgnore] - public User ClaimUser { get; set;} - //是否分配了读片医生 //public bool IsAssignDoctorUser{get;set;} }