diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index 01e40ebcd..e5b986529 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -111,12 +111,12 @@ namespace IRaCIS.Core.API.Controllers /// /// /// - [HttpPost, Route("Inspection/ReadingImageTask/SetOncologyReadingInfo")] + [HttpPost, Route("Inspection/ReadingImageTask/SubmitOncologyReadingInfo")] [UnitOfWork] - public async Task SetOncologyReadingInfo(DataInspectionDto opt) + public async Task SetOncologyReadingInfo(DataInspectionDto opt) { var singid = await _inspectionService.RecordSing(opt.SignInfo); - var result = await _iReadingImageTaskService.SetOncologyReadingInfo(opt.Data); + var result = await _iReadingImageTaskService.SubmitOncologyReadingInfo(opt.Data); await _inspectionService.CompletedSign(singid, result); return result; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs index 55ae58d02..d1a204b0d 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs @@ -24,6 +24,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public Guid VisitTaskId { get; set; } } + + public class SubmitOncologyReadingInfoInDto + { + public Guid OncologyTaskId { get; set; } + } + public class SubmitGlobalReadingInfoInDto { public Guid GlobalTaskId { get; set; } @@ -118,6 +124,9 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// public string TrialEvaluationReason { get; set; } = string.Empty; + //任务阅片状态 + public ReadingTaskState ReadingTaskState { get; set; } + public List OncologyVisits { get; set; } = new List(); } diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs index 2571865bf..01a1436e8 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingImageTaskService.cs @@ -20,6 +20,6 @@ namespace IRaCIS.Core.Application.Contracts Task SubmitGlobalReadingInfo(SubmitGlobalReadingInfoInDto inDto); - Task SetOncologyReadingInfo(SetOncologyReadingInfoInDto inDto); + Task SubmitOncologyReadingInfo(SubmitOncologyReadingInfoInDto inDto); } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs index b3d6bbd91..38f5a6a17 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadModuleService.cs @@ -359,8 +359,8 @@ namespace IRaCIS.Application.Services switch (readModuleData.ModuleType) { case ModuleTypeEnum.Global: - var taskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.SourceSubjectVisitId == readModuleData.SubjectVisitId && x.ReadingTaskState == ReadingTaskState.HaveSigned); - if (taskInfo != null) + var taskListInfo = await _visitTaskRepository.Where(x => x.SourceSubjectVisitId == readModuleData.SubjectVisitId&&x.TaskState==TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync(); + foreach (var taskInfo in taskListInfo) { await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() { @@ -383,18 +383,33 @@ namespace IRaCIS.Application.Services break; case ModuleTypeEnum.Oncology: - var globalModule = await _readModuleRepository.Where(x => x.SubjectId == readModuleData.SubjectId && x.SubjectVisitId == readModuleData.SubjectVisitId && x.ModuleType == ModuleTypeEnum.Global).FirstOrDefaultAsync(); + + var trialInfo = await _trialRepository.Where(x => x.Id == visit.TrialId).FirstNotNullAsync(); + + var globalModule = await _readModuleRepository.Where(x => x.SubjectId == readModuleData.SubjectId && x.SubjectVisitId == readModuleData.SubjectVisitId&& x.ModuleType == ModuleTypeEnum.Global).FirstOrDefaultAsync(); if (globalModule != null) { - var globalTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.SouceReadModuleId == globalModule.Id && x.ReadingTaskState == ReadingTaskState.HaveSigned); - if (globalTaskInfo != null) + var globalTaskInfoList = await _visitTaskRepository.Where(x => x.SouceReadModuleId == globalModule.Id && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync(); + + if (globalTaskInfoList.Count() > 0 && globalTaskInfoList.Count == (int)trialInfo.ReadingType) { - await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() + var isAdd = false; + if (globalTaskInfoList[0].JudgeVisitTaskId == null) { - OriginalVisitId = globalTaskInfo.Id, - ReadingCategory = GenerateTaskCategory.Oncology, - TrialId = dto.TrialId, - ReadingGenerataTaskList = new List() { + isAdd = true; + } + else + { + isAdd = await _visitTaskRepository.AnyAsync(x => x.Id == globalTaskInfoList[0].JudgeVisitTaskId && x.ReadingTaskState == ReadingTaskState.HaveSigned); + } + if (isAdd) + { + await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() + { + OriginalVisitId = globalTaskInfoList[0].Id, + ReadingCategory = GenerateTaskCategory.Oncology, + TrialId = dto.TrialId, + ReadingGenerataTaskList = new List() { new ReadingGenerataTaskDTO() { IsUrgent = readModuleData.IsUrgent ?? false, @@ -405,8 +420,12 @@ namespace IRaCIS.Application.Services ReadingCategory = ReadingCategory.Oncology, } } - }); + }); + } } + + + } break; } diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs index 0fe56dc4c..6186b51da 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs @@ -116,8 +116,9 @@ namespace IRaCIS.Application.Services GetOncologyReadingInfoOutDto result = new GetOncologyReadingInfoOutDto() { TrialEvaluationResult= trialCriterion.EvaluationResult, - TrialEvaluationReason = trialCriterion.EvaluationReason, + TrialEvaluationReason = trialCriterion.EvaluationReason.IsNullOrEmpty()? "肿瘤学阅片评估原因请依据临床数据填写,在与影像学结果不一致时必填。": trialCriterion.EvaluationReason, OncologyTaskId = inDto.VisitTaskId, + ReadingTaskState= taskInfo.ReadingTaskState, }; // 先找到是R1还是R2的阅片 先找到全局阅片 @@ -1224,6 +1225,26 @@ namespace IRaCIS.Application.Services } + /// + /// 提交肿瘤阅片结果 + /// + /// + /// + [NonDynamicMethod] + public async Task SubmitOncologyReadingInfo(SubmitOncologyReadingInfoInDto inDto) + { + //var result = await this.SaveGlobalReadingInfo(inDto); + + await FinishReadUpdateState(inDto.OncologyTaskId); + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => x.Id == inDto.OncologyTaskId, x => new VisitTask() + { + ReadingTaskState = ReadingTaskState.HaveSigned, + SignTime = DateTime.Now, + }); + await _visitTaskRepository.SaveChangesAsync(); + return ResponseOutput.Ok(true); + } + /// /// 提交全局阅片结果 diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs index 3057529e3..6b40bf4a1 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingPeriodSetService.cs @@ -27,6 +27,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _readingPeriodSetRepository; private readonly IRepository _readModuleRepository; private readonly IRepository _visitStageRepository; + private readonly IRepository _trialRepository; private readonly IRepository _visitTaskRepository; private readonly IVisitTaskHelpeService _visitTaskHelpeService; private readonly IRepository _readingPeriodPlanRepository; @@ -38,6 +39,7 @@ namespace IRaCIS.Application.Services IRepository ReadingPeriodSetRepository, IRepository readModuleRepository, IRepository visitStageRepository, + IRepository trialRepository, IRepository visitTaskRepository, IVisitTaskHelpeService visitTaskHelpeService, IRepository readingPeriodPlanRepository, @@ -49,6 +51,7 @@ namespace IRaCIS.Application.Services _readingPeriodSetRepository = ReadingPeriodSetRepository; this._readModuleRepository = readModuleRepository; this._visitStageRepository = visitStageRepository; + this._trialRepository = trialRepository; this._visitTaskRepository = visitTaskRepository; this._visitTaskHelpeService = visitTaskHelpeService; this._readingPeriodPlanRepository = readingPeriodPlanRepository; @@ -341,7 +344,7 @@ namespace IRaCIS.Application.Services { case ReadingSetType.ImageReading: - var taskInfoList = await _visitTaskRepository.Where(x => subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync(); + var taskInfoList = await _visitTaskRepository.Where(x => subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid))&&x.TaskState==TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync(); foreach (var item in taskInfoList) { @@ -371,30 +374,54 @@ namespace IRaCIS.Application.Services break; case ReadingSetType.TumorReading: + + + var trialInfo = await _trialRepository.Where(x => x.Id == readingPeriodSet.TrialId).FirstNotNullAsync(); + var globalModuleIds = await _readModuleRepository.Where(x => subjectVisitIds.Contains(x.SubjectVisitId) && x.ModuleType == ModuleTypeEnum.Global).Select(x => x.Id).ToListAsync(); - var globalTaskInfo = await _visitTaskRepository.Where(x => globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)) && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync(); + var globalTaskInfo = await _visitTaskRepository.Where(x => globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid)) && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).GroupBy(x=> new { x.SouceReadModuleId }).Select(x => + new { + SouceReadModuleId=x.Key.SouceReadModuleId, + Count=x.ToList().Count, + TaskId = x.Select(x=>x.Id).FirstOrDefault(), + ReadModuleId = x.Select(x => x.SouceReadModuleId).FirstOrDefault(), + JudgeTaskId = x.Select(x => x.JudgeVisitTaskId).FirstOrDefault(), + JudgeTaskResultId = x.Select(x => x.JudgeVisitTask.JudgeResultTaskId).FirstOrDefault(), + }).ToListAsync(); foreach (var item in globalTaskInfo) { - var readModule = readModules.Where(x => x.SubjectVisitId == item.SourceSubjectVisitId).FirstOrDefault(); - await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() + + + if (item.Count == (int)trialInfo.ReadingType) { - OriginalVisitId = item.Id, - ReadingCategory = GenerateTaskCategory.Oncology, - TrialId = item.TrialId, - ReadingGenerataTaskList = new List() { - new ReadingGenerataTaskDTO() - { - IsUrgent = readModule.IsUrgent ?? false, - SubjectId = readModule.SubjectId, - VisitNum=readModule.VisitNum, - ReadingName = readModule.ModuleName, - ReadModuleId =readModule.Id, - ReadingCategory = ReadingCategory.Oncology, - } + if (item.JudgeTaskId == null || item.JudgeTaskResultId != null) + { + var readModule = readModules.Where(x => x.Id == item.ReadModuleId).FirstOrDefault(); + await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() + { + OriginalVisitId = item.TaskId, + ReadingCategory = GenerateTaskCategory.Oncology, + TrialId = readingPeriodSet.TrialId, + ReadingGenerataTaskList = new List() { + new ReadingGenerataTaskDTO() + { + IsUrgent = readModule.IsUrgent ?? false, + SubjectId = readModule.SubjectId, + VisitNum=readModule.VisitNum, + ReadingName = readModule.ModuleName, + ReadModuleId =readModule.Id, + ReadingCategory = ReadingCategory.Oncology, + } } - }); + }); + } + + } + + + } break;