修改领取逻辑

Uat_Study
hang 2023-07-31 09:24:42 +08:00
parent 9bfca25044
commit d3d991cb3a
7 changed files with 35 additions and 21 deletions

View File

@ -9,6 +9,7 @@ using Microsoft.Extensions.Logging;
using Quartz; using Quartz;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Application.Contracts;
namespace IRaCIS.Application.Services.BackGroundJob namespace IRaCIS.Application.Services.BackGroundJob
{ {
@ -40,9 +41,12 @@ namespace IRaCIS.Application.Services.BackGroundJob
if (isInOrder) 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 else
{ {

View File

@ -894,6 +894,9 @@ namespace IRaCIS.Core.Application.ViewModel
public Guid? VisitTaskId { get; set; } public Guid? VisitTaskId { get; set; }
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
[NotDefault]
public Guid SubejctId { get; set; } public Guid SubejctId { get; set; }
public bool IsClaim { get; set; } public bool IsClaim { get; set; }

View File

@ -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)); .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() var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
{ {
SubjectId = x.Key.SubjectId, SubjectId = x.Key.SubjectId,
SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode, SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
ClaimUserId = x.Key.ClaimUserId,
ClaimUserId = x.Key.SubjectCriterionClaimUserId,
ClaimUserName=x.Key.UserName, ClaimUserName=x.Key.UserName,
SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime), SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime),

View File

@ -624,7 +624,7 @@ namespace IRaCIS.Application.Services
throw new BusinessValidationFailedException(_localizer["ReadingImage_BeSigned"]); 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("当前任务领取人不是你,不允许提交签名"); throw new BusinessValidationFailedException("当前任务领取人不是你,不允许提交签名");
} }
@ -2286,7 +2286,7 @@ namespace IRaCIS.Application.Services
if (task != null) if (task != null)
{ {
// 有序 自动领取该Subject // 有序 自动领取该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 else
@ -2312,7 +2312,7 @@ namespace IRaCIS.Application.Services
if (task != null) if (task != null)
{ {
// 无序 自动领取该Subject // 无序 自动领取该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(); IScheduler scheduler = await _schedulerFactory.GetScheduler();
//有序 用SubjectCriterionClaimUserId 某个标准的所有任务,该字段保持一致
if (claimSubjectDto.IsInOrder) if (claimSubjectDto.IsInOrder)
{ {
if (claimSubjectDto.IsClaim) if (claimSubjectDto.IsClaim)
{ {
//每个subject 每个标准的领取放在 任务上 免得加表
if(_subjectRepository.Any(t=>t.Id== claimSubjectDto.SubejctId && t.ClaimUserId != _userInfo.Id && t.ClaimUserId!=null)) if(_visitTaskRepository.Any(t=>t.Id== claimSubjectDto.SubejctId && t.TrialReadingCriterionId==claimSubjectDto.TrialReadingCriterionId
&& t.SubjectCriterionClaimUserId != _userInfo.Id && t.SubjectCriterionClaimUserId != null))
{ {
throw new BusinessValidationFailedException("当前任务已被其他人领取,请进行其他的阅片任务"); throw new BusinessValidationFailedException("当前任务已被其他人领取,请进行其他的阅片任务");
} }
else 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 }); 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<CancelTaskQuartZJob>() IJobDetail job = JobBuilder.Create<CancelTaskQuartZJob>()
.UsingJobData("SubjectId", claimSubjectDto.SubejctId) // 传递GUID参数给任务 .UsingJobData("SubjectId", claimSubjectDto.SubejctId) // 传递GUID参数给任务
.UsingJobData("TrialReadingCriterionId", claimSubjectDto.TrialReadingCriterionId)
.UsingJobData("IsInOrder", claimSubjectDto.IsInOrder) .UsingJobData("IsInOrder", claimSubjectDto.IsInOrder)
.Build(); .Build();
@ -2490,9 +2494,10 @@ namespace IRaCIS.Application.Services
} }
else 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 else
{ {
if (claimSubjectDto.IsClaim) if (claimSubjectDto.IsClaim)

View File

@ -31,13 +31,15 @@ namespace IRaCIS.Core.Application.Triggers
{ {
var visitTask = context.Entity; var visitTask = context.Entity;
if (visitTask.SignTime != null && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned 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});
} }

View File

@ -469,6 +469,10 @@ namespace IRaCIS.Core.Domain.Models
public Guid? LatestReplyUserId { get;set; } public Guid? LatestReplyUserId { get;set; }
public DateTime? LatestReplyTime { get; set; } public DateTime? LatestReplyTime { get; set; }
public User SubjectCriterionClaimUser { get; set; }
public Guid? SubjectCriterionClaimUserId { get; set; }
} }
/// <summary> /// <summary>

View File

@ -116,11 +116,6 @@ namespace IRaCIS.Core.Domain.Models
public List<ClinicalForm> ClinicalFormList { get; set; } public List<ClinicalForm> ClinicalFormList { get; set; }
public Guid? ClaimUserId { get; set; }
[JsonIgnore]
public User ClaimUser { get; set;}
//是否分配了读片医生 //是否分配了读片医生
//public bool IsAssignDoctorUser{get;set;} //public bool IsAssignDoctorUser{get;set;}
} }