diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/TaskConsistentRuleViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/TaskConsistentRuleViewModel.cs index 4e09eae88..77cd6cdb1 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/TaskConsistentRuleViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/TaskConsistentRuleViewModel.cs @@ -41,6 +41,9 @@ namespace IRaCIS.Core.Application.ViewModel [NotDefault] public Guid TaskConsistentRuleId { get; set; } + //[NotDefault] + //public Guid TrialReadingCriterionId { get; set; } + } public class GroupConsistentQuery : PageInput @@ -264,10 +267,15 @@ namespace IRaCIS.Core.Application.ViewModel ///TaskConsistentRuleQuery 列表查询参数模型 public class TaskConsistentRuleQuery { + [NotDefault] public Guid TrialId { get; set; } public bool IsSelfAnalysis { get; set; } + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } + + } /// TaskConsistentRuleAddOrEdit 列表查询参数模型 @@ -287,6 +295,8 @@ namespace IRaCIS.Core.Application.ViewModel public int BlindSubjectNumberOfPlaces { get; set; } public string BlindTrialSiteCode { get; set; } = string.Empty; + [NotDefault] + public Guid TrialReadingCriterionId { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs b/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs index d378680ac..010d41655 100644 --- a/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs @@ -72,6 +72,8 @@ namespace IRaCIS.Core.Application.Service var visitTaskQueryable = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId) .Where(t => t.IsAnalysisCreate) + .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId) + .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId) .WhereIf(queryVisitTask.SubjectId != null, t => t.SubjectId == queryVisitTask.SubjectId) .WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState) @@ -386,9 +388,11 @@ namespace IRaCIS.Core.Application.Service { var trialId = filterObj.TrialId; + var trialReadingCriterionId = filterObj.TrialReadingCriterionId; + #region Subejct 维度 - Expression> comonTaskFilter = u => u.TrialId == trialId && u.IsAnalysisCreate == false && u.TaskState == TaskState.Effect && u.ReadingTaskState == ReadingTaskState.HaveSigned && + Expression> comonTaskFilter = u => u.TrialId == trialId && u.IsAnalysisCreate == false && u.TaskState == TaskState.Effect && u.ReadingTaskState == ReadingTaskState.HaveSigned && u.TrialReadingCriterionId== trialReadingCriterionId && u.SignTime!.Value.AddDays(filterObj.IntervalWeeks * 7) < DateTime.Now && (u.ReReadingApplyState == ReReadingApplyState.Default || u.ReReadingApplyState == ReReadingApplyState.Reject) && u.DoctorUserId == doctorUserId; @@ -426,9 +430,9 @@ namespace IRaCIS.Core.Application.Service TrialSiteCode = t.TrialSite.TrialSiteCode, SubjectId = t.Id, - BlindSubjectCode = t.SubjectVisitTaskList.Where(t => t.IsAnalysisCreate).OrderByDescending(t => t.BlindSubjectCode).Select(t => t.BlindSubjectCode).FirstOrDefault(), + BlindSubjectCode = t.SubjectVisitTaskList.Where(t => t.IsAnalysisCreate && t.TrialReadingCriterionId == trialReadingCriterionId).OrderByDescending(t => t.BlindSubjectCode).Select(t => t.BlindSubjectCode).FirstOrDefault(), - IsHaveGeneratedTask = t.SubjectVisitTaskList.Any(c => c.DoctorUserId == doctorUserId && c.IsSelfAnalysis == true), + IsHaveGeneratedTask = t.SubjectVisitTaskList.Any(c => c.DoctorUserId == doctorUserId && c.IsSelfAnalysis == true && c.TrialReadingCriterionId==trialReadingCriterionId), ValidVisitCount = t.SubjectVisitTaskList.AsQueryable().Where(visitTaskFilter).Count(), @@ -484,11 +488,13 @@ namespace IRaCIS.Core.Application.Service { var trialId = filterObj.TrialId; + var trialReadingCriterionId = filterObj.TrialReadingCriterionId; + var trialConfig = (await _repository.Where(t => t.Id == trialId).Select(t => new { TrialId = t.Id, t.ReadingType, t.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException(); - Expression> comonTaskFilter = u => u.TrialId == trialId && u.IsAnalysisCreate == false && u.TaskState == TaskState.Effect && u.ReadingTaskState == ReadingTaskState.HaveSigned + Expression> comonTaskFilter = u => u.TrialId == trialId && u.IsAnalysisCreate == false && u.TaskState == TaskState.Effect && u.ReadingTaskState == ReadingTaskState.HaveSigned && u.TrialReadingCriterionId == trialReadingCriterionId && (u.ReReadingApplyState == ReReadingApplyState.Default || u.ReReadingApplyState == ReReadingApplyState.Reject); @@ -572,7 +578,7 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task GetConsistentRule(TaskConsistentRuleQuery inQuery) { - return await _taskConsistentRuleRepository.Where(t => t.TrialId == inQuery.TrialId && t.IsSelfAnalysis == inQuery.IsSelfAnalysis).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); + return await _taskConsistentRuleRepository.Where(t => t.TrialId == inQuery.TrialId && t.IsSelfAnalysis == inQuery.IsSelfAnalysis && t.TrialReadingCriterionId==inQuery.TrialReadingCriterionId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); } /// @@ -645,13 +651,13 @@ namespace IRaCIS.Core.Application.Service var verifyExp1 = new EntityVerifyExp() { - VerifyExp = t => t.TrialId == addOrEditTaskConsistentRule.TrialId && t.IsSelfAnalysis == addOrEditTaskConsistentRule.IsSelfAnalysis, + VerifyExp = t => t.TrialId == addOrEditTaskConsistentRule.TrialId && t.IsSelfAnalysis == addOrEditTaskConsistentRule.IsSelfAnalysis && t.TrialReadingCriterionId==addOrEditTaskConsistentRule.TrialReadingCriterionId, VerifyMsg = "已有该项目配置,不允许继续增加" }; - if (await _visitTaskRepository.AnyAsync(t => t.IsSelfAnalysis == addOrEditTaskConsistentRule.IsSelfAnalysis && t.TrialId == addOrEditTaskConsistentRule.TrialId)) + if (await _visitTaskRepository.AnyAsync(t => t.IsSelfAnalysis == addOrEditTaskConsistentRule.IsSelfAnalysis && t.TrialId == addOrEditTaskConsistentRule.TrialId && t.TrialReadingCriterionId == addOrEditTaskConsistentRule.TrialReadingCriterionId)) { - return ResponseOutput.NotOk("已有Subject 生成了任务,不允许修改配置"); + return ResponseOutput.NotOk("该标准已有Subject 生成了任务,不允许修改配置"); } var entity = await _taskConsistentRuleRepository.InsertOrUpdateAsync(addOrEditTaskConsistentRule, true, verifyExp1); @@ -667,9 +673,9 @@ namespace IRaCIS.Core.Application.Service var config = await _taskConsistentRuleRepository.FirstOrDefaultAsync(t => t.Id == taskConsistentRuleId); - if (await _visitTaskRepository.AnyAsync(t => t.IsAnalysisCreate && t.TrialId == config.TrialId && t.IsSelfAnalysis == config.IsSelfAnalysis)) + if (await _visitTaskRepository.AnyAsync(t => t.IsAnalysisCreate && t.TrialId == config.TrialId && t.IsSelfAnalysis == config.IsSelfAnalysis && t.TrialReadingCriterionId==config.TrialReadingCriterionId)) { - throw new BusinessValidationFailedException("已产生一致性分析任务,不允许删除"); + throw new BusinessValidationFailedException("该标准已产生一致性分析任务,不允许删除"); } diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs index d78730f43..36f6ec8cf 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs @@ -2562,7 +2562,7 @@ namespace IRaCIS.Core.Application.Service.Allocation var list = await _visitTaskRepository.Where(filterExpression) //IR 申请的时候,仅仅看到影响自己的 - .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer, t => t.DoctorUserId == _userInfo.Id) + .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer, t => t.DoctorUserId == _userInfo.Id .OrderBy(t => t.VisitTaskNum).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); #region 影响后的操作 @@ -2582,14 +2582,18 @@ namespace IRaCIS.Core.Application.Service.Allocation { influenceTask.OptType = ReReadingOrBackOptType.Return; } - else if (influenceTask.ReadingTaskState == ReadingTaskState.Reading) + else { influenceTask.OptType = ReReadingOrBackOptType.Abandon; } - else - { - throw new BusinessValidationFailedException("IR 申请重阅,不会影响到后续未读的任务,当前影响列表有未读的任务,请核查"); - } + //else if (influenceTask.ReadingTaskState == ReadingTaskState.Reading) + //{ + // influenceTask.OptType = ReReadingOrBackOptType.Abandon; + //} + //else + //{ + // throw new BusinessValidationFailedException("IR 申请重阅,不会影响到后续未读的任务,当前影响列表有未读的任务,请核查"); + //} } else { diff --git a/IRaCIS.Core.Domain/Allocation/TaskConsistentRule.cs b/IRaCIS.Core.Domain/Allocation/TaskConsistentRule.cs index 9734b67dc..1ce5902dc 100644 --- a/IRaCIS.Core.Domain/Allocation/TaskConsistentRule.cs +++ b/IRaCIS.Core.Domain/Allocation/TaskConsistentRule.cs @@ -62,6 +62,13 @@ namespace IRaCIS.Core.Domain.Models public string Note { get; set; } + public Guid TrialReadingCriterionId { get; set; } + + [JsonIgnore] + [ForeignKey("TrialReadingCriterionId")] + public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; } + + //[Projectable] //public List DoctorConsistentTaskList => DoctorVisitTaskList.Where(t => t.IsAnalysisCreate && t.TaskConsistentRuleId == Id).ToList(); } diff --git a/IRaCIS.Core.Domain/Allocation/VisitTask.cs b/IRaCIS.Core.Domain/Allocation/VisitTask.cs index c4e103319..4eb7de060 100644 --- a/IRaCIS.Core.Domain/Allocation/VisitTask.cs +++ b/IRaCIS.Core.Domain/Allocation/VisitTask.cs @@ -80,6 +80,7 @@ namespace IRaCIS.Core.Domain.Models public Guid TrialReadingCriterionId { get; set; } + [JsonIgnore] [ForeignKey("TrialReadingCriterionId")] public ReadingQuestionCriterionTrial TrialReadingCriterion { get; set; }