修改阅片
parent
d2251e4cb2
commit
bcd1476d2d
|
@ -44,11 +44,8 @@ namespace IRaCIS.Core.API
|
|||
triggerOptions.AddTrigger<TableQuestionRowTrigger>();
|
||||
//triggerOptions.AddTrigger<AddlTrialUserTrigger>();
|
||||
triggerOptions.AddTrigger<VisitTaskIsFrontTaskNeedSignButNotSignTrigger>();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
triggerOptions.AddTrigger<VisitTaskIAfterSignTrigger>();
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -280,10 +280,11 @@
|
|||
<param name="inDto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetSubjectAssignAndTaskStatList(IRaCIS.Core.Application.ViewModel.SubjectAssignStatQuery)">
|
||||
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetTrialDoctorUserSelectList(System.Guid)">
|
||||
<summary>
|
||||
Subject 任务类型 统计 +分配情况
|
||||
获取项目下 阅片人下拉
|
||||
</summary>
|
||||
<param name="trialId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetVisitTaskList(IRaCIS.Core.Application.ViewModel.VisitTaskQuery,IRaCIS.Core.Application.Service.IVisitTaskHelpeService)">
|
||||
|
@ -294,13 +295,6 @@
|
|||
<param name="_visitTaskCommonService"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetJudgeVisitTaskList(IRaCIS.Core.Application.ViewModel.VisitTaskQuery)">
|
||||
<summary>
|
||||
裁判任务
|
||||
</summary>
|
||||
<param name="queryVisitTask"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.Application.Service.Allocation.VisitTaskService.GetReadingTaskList(IRaCIS.Core.Application.ViewModel.VisitTaskQuery)">
|
||||
<summary>
|
||||
PM阅片跟踪
|
||||
|
|
|
@ -147,6 +147,23 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
}
|
||||
|
||||
|
||||
public class PIReaingTaskView: ReadingTaskView
|
||||
{
|
||||
public Guid? FirstAuditUserId { get; set; }
|
||||
|
||||
public string FirstAuditUserName { get; set; }
|
||||
public DateTime? FirstAuditTime { get; set; }
|
||||
|
||||
public int AuditResultEnum { get; set; }
|
||||
|
||||
public Guid? LatestReplyUserId { get; set; }
|
||||
|
||||
public string LatestReplyUserName { get; set; }
|
||||
public DateTime? LatestReplyTime { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class ReadingTaskView : VisitTaskView
|
||||
{
|
||||
|
||||
|
@ -159,7 +176,9 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
public Guid? SourceSubjectVisitId { get; set; }
|
||||
public Guid? SouceReadModuleId { get; set; }
|
||||
|
||||
//public bool IsAfterConvertedTask { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -360,6 +379,23 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
|
||||
public PIAuditState? PIAuditState { get; set; }
|
||||
|
||||
|
||||
|
||||
public string? FirstAuditUserName { get; set; }
|
||||
|
||||
|
||||
public bool? IsWaitPIAudit { get; set; }
|
||||
|
||||
public int? AuditResultEnum { get; set; }
|
||||
|
||||
|
||||
public string? LatestReplyUserName { get; set; }
|
||||
|
||||
public DateTime? FirstAuditTimeBegin { get; set; }
|
||||
public DateTime? FirstAuditTimeEnd { get; set; }
|
||||
public DateTime? LatestReplyTimeBegin { get; set; }
|
||||
public DateTime? LatestReplyTimeEnd { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -109,53 +109,35 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
.Select(t => new TrialReadingCriterionDto() { TrialReadingCriterionId = t.Id, IsAutoCreate = t.IsAutoCreate, IsAdditionalAssessment = t.IsAdditionalAssessment, TrialReadingCriterionName = t.CriterionName, CriterionType = t.CriterionType, ReadingType = t.ReadingType, ReadingInfoSignTime = t.ReadingInfoSignTime })
|
||||
.ToListAsync();
|
||||
|
||||
//if (list.Count == 0)
|
||||
//{
|
||||
// //---该项目还未确认任何一个阅片标准
|
||||
// throw new BusinessValidationFailedException(_localizer["VisitTask_VisitTask_TaskAlreadyApplied"]);
|
||||
|
||||
//}
|
||||
|
||||
|
||||
return list.AsQueryable().WhereIf(isHaveSigned == true, t => t.ReadingInfoSignTime != null)
|
||||
.WhereIf(isAutoCreate == false, t => t.IsAutoCreate == isAutoCreate).ToList();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Subject 任务类型 统计 +分配情况
|
||||
/// 获取项目下 阅片人下拉
|
||||
/// </summary>
|
||||
/// <param name="trialId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<(PageOutput<SubjectAssignStat>, object?)> GetSubjectAssignAndTaskStatList(SubjectAssignStatQuery querySubjectAssign)
|
||||
[HttpGet("{trialId:guid}")]
|
||||
public async Task<List<TrialDoctorUserSelectView>> GetTrialDoctorUserSelectList(Guid trialId)
|
||||
{
|
||||
var query = from trialUser in _trialRepository.Where(t => t.Id == trialId ).SelectMany(t=>t.TrialUserList).Where(t=>t.User.UserTypeEnum==UserTypeEnum.SR || t.User.UserTypeEnum == UserTypeEnum.PI)
|
||||
|
||||
select new TrialDoctorUserSelectView()
|
||||
{
|
||||
TrialId = trialUser.TrialId,
|
||||
//ReadingType = enroll.Trial.ReadingType,
|
||||
DoctorUserId = trialUser.UserId,
|
||||
FullName = trialUser.User.FullName,
|
||||
UserCode = trialUser.User.UserCode,
|
||||
UserName = trialUser.User.UserName,
|
||||
UserTypeEnum = trialUser.User.UserTypeRole.UserTypeEnum
|
||||
};
|
||||
|
||||
var isAddtinoarlCriterion = await _trialReadingCriterionRepository.AnyAsync(t => t.Id == querySubjectAssign.TrialReadingCriterionId && t.IsAutoCreate == false);
|
||||
|
||||
var subjectQuery = _subjectRepository.Where(t => t.TrialId == querySubjectAssign.TrialId && t.SubjectVisitTaskList.Any())
|
||||
.WhereIf(querySubjectAssign.SiteId != null, t => t.SiteId == querySubjectAssign.SiteId)
|
||||
.WhereIf(querySubjectAssign.SubjectId != null, t => t.Id == querySubjectAssign.SubjectId)
|
||||
.WhereIf(querySubjectAssign.DoctorUserId != null, t => t.SubjectDoctorList.Any(t => t.DoctorUserId == querySubjectAssign.DoctorUserId && t.TrialReadingCriterionId == querySubjectAssign.TrialReadingCriterionId))
|
||||
.WhereIf(!string.IsNullOrEmpty(querySubjectAssign.SubjectCode), t => t.Code.Contains(querySubjectAssign.SubjectCode))
|
||||
.WhereIf(isAddtinoarlCriterion, t => t.SubjectCriteriaEvaluationList.Where(t => t.TrialReadingCriterionId == querySubjectAssign.TrialReadingCriterionId).Any(t => t.IsJoinEvaluation))
|
||||
|
||||
|
||||
.ProjectTo<SubjectAssignStat>(_mapper.ConfigurationProvider, new { trialReadingCriterionId = querySubjectAssign.TrialReadingCriterionId });
|
||||
|
||||
|
||||
var pageList = await subjectQuery.ToPagedListAsync(querySubjectAssign.PageIndex, querySubjectAssign.PageSize, string.IsNullOrWhiteSpace(querySubjectAssign.SortField) ? nameof(querySubjectAssign.SubjectId) : querySubjectAssign.SortField, querySubjectAssign.Asc);
|
||||
|
||||
|
||||
|
||||
var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == querySubjectAssign.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder, x.ReadingType, x.IsArbitrationReading, x.IsOncologyReading, x.IsGlobalReading }).FirstOrDefaultAsync()).IfNullThrowException();
|
||||
|
||||
return (pageList, criterionConfig);
|
||||
return await query.ToListAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 访视任务
|
||||
/// </summary>
|
||||
|
@ -203,56 +185,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 裁判任务
|
||||
/// </summary>
|
||||
/// <param name="queryVisitTask"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<JudgeVisitTaskView>/*, object)*/> GetJudgeVisitTaskList(VisitTaskQuery queryVisitTask)
|
||||
{
|
||||
|
||||
var visitTaskQueryable = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false)
|
||||
.Where(t => t.ReadingCategory == ReadingCategory.Judge)
|
||||
|
||||
.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
||||
.WhereIf(queryVisitTask.ReadingCategory != null, t => t.ReadingCategory == queryVisitTask.ReadingCategory)
|
||||
.WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
|
||||
.WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId)
|
||||
.WhereIf(queryVisitTask.IsUrgent != null, t => t.IsUrgent == queryVisitTask.IsUrgent)
|
||||
.WhereIf(queryVisitTask.DoctorUserId != null, t => t.DoctorUserId == queryVisitTask.DoctorUserId)
|
||||
.WhereIf(queryVisitTask.TaskAllocationState != null, t => t.TaskAllocationState == queryVisitTask.TaskAllocationState)
|
||||
.WhereIf(queryVisitTask.ReadingTaskState != null, t => t.ReadingTaskState == queryVisitTask.ReadingTaskState)
|
||||
.WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
|
||||
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate))
|
||||
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
|
||||
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
|
||||
.ProjectTo<JudgeVisitTaskView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var defalutSortArray = new string[] { nameof(VisitTask.IsUrgent) + " desc", nameof(VisitTask.SubjectId), nameof(VisitTaskView.VisitTaskNum) };
|
||||
|
||||
var pageList = await visitTaskQueryable.ToPagedListAsync(queryVisitTask.PageIndex, queryVisitTask.PageSize, queryVisitTask.SortField, queryVisitTask.Asc, string.IsNullOrWhiteSpace(queryVisitTask.SortField), defalutSortArray);
|
||||
|
||||
return pageList;
|
||||
//var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo<TrialTaskConfig>(_mapper.ConfigurationProvider).FirstOrDefault();
|
||||
|
||||
//return (pageList, trialTaskConfig);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// PM阅片跟踪
|
||||
/// </summary>
|
||||
/// <param name="queryVisitTask"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<(PageOutput<ReadingTaskView>, object?)> GetReadingTaskList(VisitTaskQuery queryVisitTask)
|
||||
private IQueryable<VisitTask> GetReadingTaskQueryable(VisitTaskQuery queryVisitTask)
|
||||
{
|
||||
var visitTaskQueryable = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false)
|
||||
//.Where(t => t.IsAnalysisCreate == false && t.DoctorUserId != null)
|
||||
|
||||
.WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
||||
.WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
|
||||
|
@ -274,6 +209,49 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate))
|
||||
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
|
||||
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
|
||||
|
||||
.WhereIf(queryVisitTask.IsWaitPIAudit ==true, t => t.FirstAuditUserId==null)
|
||||
.WhereIf(queryVisitTask.IsWaitPIAudit == false, t => t.FirstAuditUserId != null)
|
||||
|
||||
.WhereIf(queryVisitTask.FirstAuditTimeBegin != null, t => t.AllocateTime > queryVisitTask.FirstAuditTimeBegin)
|
||||
.WhereIf(queryVisitTask.FirstAuditTimeEnd != null, t => t.AllocateTime < queryVisitTask.FirstAuditTimeEnd)
|
||||
.WhereIf(queryVisitTask.LatestReplyTimeBegin != null, t => t.AllocateTime > queryVisitTask.LatestReplyTimeBegin)
|
||||
.WhereIf(queryVisitTask.LatestReplyTimeEnd != null, t => t.AllocateTime < queryVisitTask.LatestReplyTimeEnd)
|
||||
.WhereIf(queryVisitTask.AuditResultEnum != null, t => t.AuditResultEnum == queryVisitTask.AuditResultEnum)
|
||||
|
||||
|
||||
;
|
||||
|
||||
return visitTaskQueryable;
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput<PageOutput<PIReaingTaskView>> > GetPIReadingAuditList(VisitTaskQuery queryVisitTask)
|
||||
{
|
||||
|
||||
var visitTaskQueryable = GetReadingTaskQueryable(queryVisitTask)
|
||||
.ProjectTo<PIReaingTaskView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var defalutSortArray = new string[] { nameof(VisitTask.IsUrgent) + " desc", nameof(VisitTask.SubjectId), nameof(VisitTask.VisitTaskNum) };
|
||||
|
||||
var pageList = await visitTaskQueryable.ToPagedListAsync(queryVisitTask.PageIndex, queryVisitTask.PageSize, queryVisitTask.SortField, queryVisitTask.Asc, string.IsNullOrWhiteSpace(queryVisitTask.SortField), defalutSortArray);
|
||||
|
||||
var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo<TrialUrgentConfig>(_mapper.ConfigurationProvider).FirstOrDefault();
|
||||
|
||||
return ResponseOutput.Ok(pageList, trialTaskConfig);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// PM阅片跟踪
|
||||
/// </summary>
|
||||
/// <param name="queryVisitTask"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IResponseOutput<PageOutput<ReadingTaskView>>> GetReadingTaskList(VisitTaskQuery queryVisitTask)
|
||||
{
|
||||
var visitTaskQueryable = GetReadingTaskQueryable(queryVisitTask)
|
||||
.ProjectTo<ReadingTaskView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var defalutSortArray = new string[] { nameof(VisitTask.IsUrgent) + " desc", nameof(VisitTask.SubjectId), nameof(VisitTask.VisitTaskNum) };
|
||||
|
@ -282,10 +260,13 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
var trialTaskConfig = _trialRepository.Where(t => t.Id == queryVisitTask.TrialId).ProjectTo<TrialUrgentConfig>(_mapper.ConfigurationProvider).FirstOrDefault();
|
||||
|
||||
return (pageList, trialTaskConfig);
|
||||
return ResponseOutput.Ok (pageList, trialTaskConfig);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// PM 重阅追踪
|
||||
/// </summary>
|
||||
|
@ -382,42 +363,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
}
|
||||
|
||||
|
||||
//SPM 能看到项目组申请记录
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<ReReadingTaskView>> GetSPMReReadingTaskList(VisitTaskQuery queryVisitTask)
|
||||
{
|
||||
var visitTaskQueryable = _visitTaskReReadingRepository.Where(t => t.RequestReReadingType == RequestReReadingType.TrialGroupApply && t.OriginalReReadingTask.IsAnalysisCreate == false)
|
||||
.Where(t => t.OriginalReReadingTask.TrialId == queryVisitTask.TrialId)
|
||||
.WhereIf(queryVisitTask.RootReReadingTaskId != null, t => t.RootReReadingTaskId == queryVisitTask.RootReReadingTaskId || t.OriginalReReadingTaskId == queryVisitTask.RootReReadingTaskId)
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskCode), t => t.OriginalReReadingTask.TaskCode.Contains(queryVisitTask.TaskCode!) || t.RootReReadingTask.TaskCode.Contains(queryVisitTask.TaskCode!))
|
||||
.WhereIf(queryVisitTask.TaskState != null, t => t.OriginalReReadingTask.TaskState == queryVisitTask.TaskState)
|
||||
.WhereIf(queryVisitTask.SiteId != null, t => t.OriginalReReadingTask.Subject.SiteId == queryVisitTask.SiteId)
|
||||
.WhereIf(queryVisitTask.SubjectId != null, t => t.OriginalReReadingTask.SubjectId == queryVisitTask.SubjectId)
|
||||
.WhereIf(queryVisitTask.IsUrgent != null, t => t.OriginalReReadingTask.IsUrgent == queryVisitTask.IsUrgent)
|
||||
.WhereIf(queryVisitTask.DoctorUserId != null, t => t.OriginalReReadingTask.DoctorUserId == queryVisitTask.DoctorUserId)
|
||||
.WhereIf(queryVisitTask.ReadingTaskState != null, t => t.OriginalReReadingTask.ReadingTaskState == queryVisitTask.ReadingTaskState)
|
||||
.WhereIf(queryVisitTask.TaskAllocationState != null, t => t.OriginalReReadingTask.TaskAllocationState == queryVisitTask.TaskAllocationState)
|
||||
.WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.OriginalReReadingTask.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
|
||||
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.OriginalReReadingTask.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate) || (t.OriginalReReadingTask.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate == false))
|
||||
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.OriginalReReadingTask.TaskName.Contains(queryVisitTask.TaskName) || t.NewReReadingTask.TaskBlindName.Contains(queryVisitTask.TaskName))
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate == false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate))
|
||||
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime > queryVisitTask.BeginAllocateDate)
|
||||
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
|
||||
.ProjectTo<ReReadingTaskView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var defalutSortArray = new string[] { nameof(ReReadingTaskView.RequestReReadingTime) };
|
||||
|
||||
//var defalutSortArray = new string[] { nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.IsUrgent) + " desc", nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.SubjectId), nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.VisitTaskNum) };
|
||||
|
||||
var pageList = await visitTaskQueryable.ToPagedListAsync(queryVisitTask.PageIndex, queryVisitTask.PageSize, queryVisitTask.SortField, queryVisitTask.Asc, string.IsNullOrWhiteSpace(queryVisitTask.SortField), defalutSortArray);
|
||||
|
||||
return pageList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// IR 待阅片任务列表
|
||||
/// </summary>
|
||||
|
@ -575,10 +520,14 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
var visitQuery = _visitTaskRepository
|
||||
.Where(x => x.TrialId == inDto.TrialId && x.TaskState == TaskState.Effect)
|
||||
|
||||
//PI 读基线的时候,subject 如果基线没阅片完,SR就不能看
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllBaseline,
|
||||
t => t.Subject.SubjectVisitTaskList.Any(c => c.SourceSubjectVisit.IsBaseLine == true && c.ReadingTaskState == ReadingTaskState.HaveSigned))
|
||||
|
||||
//PI 读随访的时候, subject 如果基线没阅片完,SR就不能看
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI && piReadingScopenEnum == PIReadingScopenEnum.AllVisit,
|
||||
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 && t.TaskState==TaskState.Effect))
|
||||
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR, t => t.Subject.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
|
||||
// 仅仅SR阅片 PI 没有任务列表
|
||||
|
|
|
@ -142,9 +142,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
.ForMember(o => o.HistoryReadingDoctorUserList, t => t.MapFrom(u => u.JudgeVisitList));
|
||||
|
||||
CreateMap<VisitTask, ReadingTaskView>().IncludeBase<VisitTask, VisitTaskView>()
|
||||
CreateMap<VisitTask, ReadingTaskView>().IncludeBase<VisitTask, VisitTaskView>();
|
||||
|
||||
;
|
||||
CreateMap<VisitTask, PIReaingTaskView>().IncludeBase<VisitTask, ReadingTaskView>()
|
||||
.ForMember(o => o.FirstAuditUserName, t => t.MapFrom(u => u.FirstAuditUser.UserName))
|
||||
.ForMember(o => o.LatestReplyUserName, t => t.MapFrom(u => u.LatestReplyUser.UserName));
|
||||
|
||||
CreateMap<VisitTask, AnalysisTaskView>().IncludeBase<VisitTask, VisitTaskView>()
|
||||
.ForMember(o => o.IsReReadingOrBackInfluenceAnalysis, t => t.MapFrom(u => u.Subject.IsReReadingOrBackInfluenceAnalysis));
|
||||
|
|
|
@ -624,6 +624,10 @@ 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))
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前任务领取人不是你,不允许提交签名");
|
||||
}
|
||||
|
||||
if (await _visitTaskRepository.AnyAsync(x => x.Id == visitTaskid && x.TaskState != TaskState.Effect))
|
||||
{
|
||||
|
@ -2336,7 +2340,7 @@ namespace IRaCIS.Application.Services
|
|||
if (task != null)
|
||||
{
|
||||
// 有序 自动领取该Subject
|
||||
await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, SubejctId = task.SubjectId, IsInOrder = true }, _schedulerFactory);
|
||||
await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, SubejctId = task.SubjectId, IsInOrder = true });
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -2362,7 +2366,7 @@ namespace IRaCIS.Application.Services
|
|||
if (task != null)
|
||||
{
|
||||
// 有序 自动领取该Subject
|
||||
await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, VisitTaskId = task.VisitTaskId, IsInOrder = false }, _schedulerFactory);
|
||||
await ClaimOrCancelSubjectAsync(new ClaimSubjectDto() { IsClaim = true, VisitTaskId = task.VisitTaskId, IsInOrder = false });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2496,15 +2500,26 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
|
||||
[HttpPost]
|
||||
public async Task ClaimOrCancelSubjectAsync(ClaimSubjectDto claimSubjectDto, ISchedulerFactory _schedulerFactory)
|
||||
public async Task ClaimOrCancelSubjectAsync(ClaimSubjectDto claimSubjectDto)
|
||||
{
|
||||
IScheduler scheduler = await _schedulerFactory.GetScheduler();
|
||||
|
||||
if (claimSubjectDto.IsInOrder)
|
||||
{
|
||||
|
||||
if (claimSubjectDto.IsClaim)
|
||||
{
|
||||
await _subjectRepository.UpdatePartialFromQueryAsync(t => t.Id == claimSubjectDto.SubejctId, u => new Subject() { ClaimUserId = _userInfo.Id }, true);
|
||||
|
||||
if(_subjectRepository.Any(t=>t.Id== claimSubjectDto.SubejctId && t.ClaimUserId != _userInfo.Id))
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前任务已被其他人领取,请进行其他的阅片任务");
|
||||
}
|
||||
else
|
||||
{
|
||||
await _subjectRepository.UpdatePartialFromQueryAsync(t => t.Id == claimSubjectDto.SubejctId, u => new Subject() { ClaimUserId = _userInfo.Id }, true);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//定时任务24h取消
|
||||
|
||||
|
@ -2535,7 +2550,16 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
if (claimSubjectDto.IsClaim)
|
||||
{
|
||||
await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == claimSubjectDto.VisitTaskId, u => new VisitTask() { DoctorUserId = _userInfo.Id }, true);
|
||||
if (_visitTaskRepository.Any(t => t.Id == claimSubjectDto.VisitTaskId && t.DoctorUserId != _userInfo.Id))
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前任务已被其他人领取,请进行其他的阅片任务");
|
||||
}
|
||||
else
|
||||
{
|
||||
await _visitTaskRepository.UpdatePartialFromQueryAsync(t => t.Id == claimSubjectDto.VisitTaskId, u => new VisitTask() { DoctorUserId = _userInfo.Id }, true);
|
||||
|
||||
}
|
||||
|
||||
|
||||
IJobDetail job = JobBuilder.Create<CancelTaskQuartZJob>()
|
||||
.UsingJobData("VisitTaskId",(Guid) claimSubjectDto.VisitTaskId) // 传递GUID参数给任务
|
||||
|
|
|
@ -1,61 +1,48 @@
|
|||
//using AutoMapper;
|
||||
//using EasyCaching.Core;
|
||||
//using EntityFrameworkCore.Triggered;
|
||||
//using IRaCIS.Core.Application.Service;
|
||||
//using IRaCIS.Core.Application.ViewModel;
|
||||
//using IRaCIS.Core.Domain.Share;
|
||||
//using IRaCIS.Core.Infrastructure;
|
||||
//using System.Linq.Expressions;
|
||||
using AutoMapper;
|
||||
using EasyCaching.Core;
|
||||
using EntityFrameworkCore.Triggered;
|
||||
using IRaCIS.Core.Application.Service;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
using System.Linq.Expressions;
|
||||
|
||||
//namespace IRaCIS.Core.Application.Triggers
|
||||
//{
|
||||
|
||||
// public class VisitTaskIAfterSignTrigger : IAfterSaveTrigger<VisitTask>
|
||||
// {
|
||||
namespace IRaCIS.Core.Application.Triggers
|
||||
{
|
||||
|
||||
// private readonly IRepository<VisitTask> _visitTaskRepository;
|
||||
public class VisitTaskIAfterSignTrigger : IAfterSaveTrigger<VisitTask>
|
||||
{
|
||||
|
||||
private readonly IRepository<VisitTask> _visitTaskRepository;
|
||||
|
||||
private readonly IRepository<Subject> _subjectRepository;
|
||||
|
||||
|
||||
// public VisitTaskIAfterSignTrigger(
|
||||
|
||||
// IRepository<VisitTask> visitTaskRepository)
|
||||
// {
|
||||
|
||||
// _visitTaskRepository = visitTaskRepository;
|
||||
// }
|
||||
public VisitTaskIAfterSignTrigger(IRepository<VisitTask> visitTaskRepository, IRepository<Subject> subjectRepository)
|
||||
{
|
||||
_visitTaskRepository = visitTaskRepository;
|
||||
_subjectRepository = subjectRepository;
|
||||
}
|
||||
|
||||
|
||||
// //添加任务的时候 如果需要签名 并且已经签名了 那么要维护该标准 该Subject IsFrontTaskNeedSignButNotSign字段
|
||||
// public async Task AfterSave(ITriggerContext<VisitTask> context, CancellationToken cancellationToken)
|
||||
// {
|
||||
// var visitTask = context.Entity;
|
||||
//添加任务的时候 如果需要签名 并且已经签名了
|
||||
public async Task AfterSave(ITriggerContext<VisitTask> context, CancellationToken cancellationToken)
|
||||
{
|
||||
var visitTask = context.Entity;
|
||||
|
||||
|
||||
// if(visitTask.SignTime!=null && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
// {
|
||||
// switch (visitTask.ReadingCategory)
|
||||
// {
|
||||
// case ReadingCategory.Visit:
|
||||
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))
|
||||
{
|
||||
|
||||
// break;
|
||||
// case ReadingCategory.Global:
|
||||
|
||||
// break;
|
||||
// case ReadingCategory.Judge:
|
||||
|
||||
// break;
|
||||
// case ReadingCategory.Oncology:
|
||||
|
||||
// break;
|
||||
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// }
|
||||
await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == visitTask.SubjectId , t=>new Subject() { ClaimUserId=null});
|
||||
}
|
||||
|
||||
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -102,108 +102,6 @@ namespace IRaCIS.Core.Application.Triggers
|
|||
}
|
||||
|
||||
|
||||
#region 附加评估 暂时废弃
|
||||
// //从未签名状态 改为签名状态时 判断是否进行了附加评估,将附加评估的结果冗余
|
||||
// if (context.ChangeType == ChangeType.Modified && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned && context.UnmodifiedEntity.ReadingTaskState != ReadingTaskState.HaveSigned)
|
||||
// {
|
||||
|
||||
// var criterion = _trialReadingCriterionRepository.Where(t => t.Id == visitTask.TrialReadingCriterionId).FirstOrDefault();
|
||||
|
||||
// //如果是附加评估
|
||||
// if (criterion.IsAdditionalAssessment)
|
||||
// {
|
||||
|
||||
|
||||
// if (visitTask.ReadingCategory == ReadingCategory.Visit)
|
||||
// {
|
||||
|
||||
|
||||
// switch (criterion.CriterionType)
|
||||
// {
|
||||
// case CriterionType.RECIST1Point1:
|
||||
// var isbaseLine = _visitTaskRepository.Where(t => t.Id == visitTask.Id).Select(t => t.SourceSubjectVisit.IsBaseLine).FirstOrDefault();
|
||||
|
||||
|
||||
|
||||
// if (isbaseLine)
|
||||
// {
|
||||
// var currentTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == visitTask.Id &&
|
||||
// t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group"
|
||||
// ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync();
|
||||
|
||||
|
||||
// //双重阅片完成了
|
||||
// if (criterion.ReadingType == ReadingMethod.Double &&
|
||||
//(_visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count() == 2)
|
||||
// )
|
||||
// {
|
||||
|
||||
// var otherTaskId = await _visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.Id != visitTask.Id)
|
||||
// .Select(t => t.Id).FirstOrDefaultAsync();
|
||||
|
||||
|
||||
// var otherTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == otherTaskId &&
|
||||
// t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group"
|
||||
// ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync();
|
||||
|
||||
|
||||
|
||||
// await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult()
|
||||
// {
|
||||
// TrialReadingCriterionId = visitTask.TrialReadingCriterionId,
|
||||
// IsFinalResult = true,
|
||||
// SubjectId = visitTask.SubjectId,
|
||||
// TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId,
|
||||
// FinalAnswer = currentTaskAdditionarlAnswer.Answer,
|
||||
// FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode,
|
||||
|
||||
// });
|
||||
|
||||
// }
|
||||
// if (criterion.ReadingType == ReadingMethod.Single)
|
||||
// {
|
||||
|
||||
// await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult()
|
||||
// {
|
||||
// TrialReadingCriterionId = visitTask.TrialReadingCriterionId,
|
||||
// IsFinalResult = true,
|
||||
// SubjectId = visitTask.SubjectId,
|
||||
// TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId,
|
||||
// FinalAnswer = currentTaskAdditionarlAnswer.Answer,
|
||||
// FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode,
|
||||
|
||||
// });
|
||||
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// }
|
||||
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -426,6 +426,21 @@ namespace IRaCIS.Core.Domain.Models
|
|||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public User FirstAuditUser { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public User LatestReplyUser { get; set; }
|
||||
|
||||
|
||||
public Guid? FirstAuditUserId { get; set; }
|
||||
public DateTime? FirstAuditTime { get; set; }
|
||||
|
||||
public int AuditResultEnum { get; set; }
|
||||
|
||||
public Guid? LatestReplyUserId { get;set; }
|
||||
public DateTime? LatestReplyTime { get; set; }
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in New Issue