diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index cdced0ca1..197a3046a 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -14,6 +14,9 @@ using Nito.AsyncEx; using System.ComponentModel.DataAnnotations; using IRaCIS.Core.Application.Auth; using IRaCIS.Core.Application.Helper; +using IRaCIS.Core.Application.ViewModel; +using IRaCIS.Core.Domain.Models; +using IRaCIS.Core.Application.Service; namespace IRaCIS.Core.Application.Image.QA { @@ -31,6 +34,9 @@ namespace IRaCIS.Core.Application.Image.QA private readonly IRepository _checkChallengeDialogrepository; private readonly IRepository _trialRepository; + + private readonly IVisitTaskHelpeService _IVisitTaskHelpeService; + private readonly AsyncLock _mutex = new AsyncLock(); public QCOperationService(IRepository subjectVisitRepository, @@ -41,7 +47,8 @@ namespace IRaCIS.Core.Application.Image.QA IRepository subjectRepository, IRepository readingClinicalDataRepository, IRepository qCChallengeDialogrepository, - IRepository checkChallengeDialogrepository + IRepository checkChallengeDialogrepository, + IVisitTaskHelpeService visitTaskHelpeService ) { _subjectVisitRepository = subjectVisitRepository; @@ -53,6 +60,8 @@ namespace IRaCIS.Core.Application.Image.QA this._qCChallengeDialogrepository = qCChallengeDialogrepository; this._checkChallengeDialogrepository = checkChallengeDialogrepository; _trialRepository = trialRepository; + + _IVisitTaskHelpeService= visitTaskHelpeService; } #region QC质疑 以及回复 关闭 @@ -1284,8 +1293,8 @@ namespace IRaCIS.Core.Application.Image.QA dbSubjectVisit.AuditState = AuditStateEnum.ToAudit; } - //非基线设置为PD的话 根据配置自动生成阅片期 - if (!dbSubjectVisit.IsBaseLine && dbSubjectVisit.PDState == PDStateEnum.PDProgress) + //非基线设置为PD的话 或者设置为末次访视 根据配置自动生成阅片期 + if (!dbSubjectVisit.IsBaseLine && dbSubjectVisit.PDState == PDStateEnum.PDProgress && dbSubjectVisit.IsFinalVisit) { //该标准需要添加阅片期 foreach (var trialReadingCriterionId in trialReadingCriterionIdList) @@ -1294,7 +1303,7 @@ namespace IRaCIS.Core.Application.Image.QA if (!await _repository.Where(t => t.SubjectVisitId == dbSubjectVisit.Id && t.ReadingSetType == ReadingSetType.ImageReading && t.TrialReadingCriterionId == trialReadingCriterionId).AnyAsync()) { - await _repository.AddAsync(new ReadModule() + var newReadModule = await _repository.AddAsync(new ReadModule() { TrialReadingCriterionId = trialReadingCriterionId, ReadingSetType = ReadingSetType.ImageReading, @@ -1895,8 +1904,8 @@ namespace IRaCIS.Core.Application.Image.QA { session.CreateDirectory(targetPath); } - - + + foreach (var studyFolder in studyFolders) { var targetFolder = Path.Combine(targetPath, studyFolder.Name); diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs index 2216cf2c8..8164b7972 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs @@ -55,6 +55,14 @@ namespace IRaCIS.Core.Application.Triggers if (subjectVisit.IsFinalVisit) { await VerifyDealFinalVisitAsync(subjectVisit); + + await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisit.SubjectId, + u => new Subject() { Status = SubjectStatus.OutOfVisit, FinalSubjectVisitId = subjectVisit.Id }); + + + //末次访视后的 访视设置为不可用 + await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && + t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); } else { @@ -65,19 +73,16 @@ namespace IRaCIS.Core.Application.Triggers await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitExecuted == VisitExecutedEnum.Unavailable, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.UnExecuted }); - var readingPeriodSet =await _readingPeriodSetRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.IsGlobal).FirstOrDefaultAsync(); + //var readingPeriodSet =await _readingPeriodSetRepository.Where(x => x.TrialId == subjectVisit.TrialId && x.IsGlobal).FirstOrDefaultAsync(); - if (readingPeriodSet != null) - { - await _readingPeriodPlanRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == readingPeriodSet.Id && x.SubjectVisitId == subjectVisit.Id); - await _readModuleRepository.UpdatePartialFromQueryAsync(x => x.SubjectVisitId == subjectVisit.Id && x.ReadingPeriodSetId == readingPeriodSet.Id,x=> new ReadModule() { - IsDeleted = true - - }); - - await _readModuleRepository.SaveChangesAsync(); - - } + //if (readingPeriodSet != null) + //{ + // await _readingPeriodPlanRepository.DeleteFromQueryAsync(x => x.ReadingPeriodSetId == readingPeriodSet.Id && x.SubjectVisitId == subjectVisit.Id); + // await _readModuleRepository.UpdatePartialFromQueryAsync(x => x.SubjectVisitId == subjectVisit.Id && x.ReadingPeriodSetId == readingPeriodSet.Id,x=> new ReadModule() { + // IsDeleted = true + // }); + // await _readModuleRepository.SaveChangesAsync(); + //} @@ -99,27 +104,21 @@ namespace IRaCIS.Core.Application.Triggers throw new BusinessValidationFailedException("该受试者已有后续访视已上传影像或已提交,当前访视不允许设置为末次访视。"); } - await _subjectRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisit.SubjectId, - u => new Subject() { Status = SubjectStatus.OutOfVisit, FinalSubjectVisitId = subjectVisit.Id }); - - //末次访视后的 访视设置为不可用 - await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == subjectVisit.SubjectId && t.VisitNum > subjectVisit.VisitNum && - t.VisitExecuted == VisitExecutedEnum.UnExecuted, u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.Unavailable }); + #region 末次访视生成阅片器和任务 更换位置 废弃 var trialId = subjectVisit.TrialId; - var subjectVisitId= subjectVisit.Id; + var subjectVisitId = subjectVisit.Id; // 是否全局阅片 var trial = await _repository.Where(x => x.Id == trialId).FirstNotNullAsync(); - - if (!subjectVisit.IsBaseLine) + if (!subjectVisit.IsBaseLine && subjectVisit.SubmitState == SubmitStateEnum.Submitted) { - var criterionList = await _repository.Where(x => x.TrialId == trialId&&x.ReadingInfoSignTime!=null && x.IsConfirm && x.IsReadingPeriod && x.IsReadingTaskViewInOrder).ToListAsync(); + var criterionList = await _repository.Where(x => x.TrialId == trialId && x.ReadingInfoSignTime != null && x.IsConfirm && x.IsReadingPeriod && x.IsReadingTaskViewInOrder).ToListAsync(); foreach (var item in criterionList) { //ReadingPeriodSet? readingPeriodSet = await _readingPeriodSetRepository.FirstOrDefaultNoTrackingAsync(x => x.TrialId == trialId && x.IsGlobal && x.TrialReadingCriterionId == item.Id); @@ -160,7 +159,7 @@ namespace IRaCIS.Core.Application.Triggers ReadModule newReadModule = new ReadModule() { //ReadingPeriodSetId = readingPeriodSet.Id, - Id= NewId.NextGuid(), + Id = NewId.NextGuid(), IsUrgent = subjectVisit.IsUrgent, SubjectVisitId = subjectVisitId, ReadingStatus = ReadingStatusEnum.TaskAllocate, @@ -173,43 +172,43 @@ namespace IRaCIS.Core.Application.Triggers TrialReadingCriterionId = item.Id, }; - await _readModuleRepository.AddAsync(newReadModule); + readModule = await _readModuleRepository.AddAsync(newReadModule); + } - var visitTaskList = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == item.Id && x.SourceSubjectVisitId == subjectVisitId && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync(); + var visitTaskList = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == item.Id && x.SourceSubjectVisitId == subjectVisitId && x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned).ToListAsync(); - foreach (var visitTask in visitTaskList) + foreach (var visitTask in visitTaskList) + { + await _ivisitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() { - await _ivisitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand() - { - OriginalVisitId = visitTask.Id, - ReadingCategory = GenerateTaskCategory.Global, - TrialId = subjectVisit.TrialId, + OriginalVisitId = visitTask.Id, + ReadingCategory = GenerateTaskCategory.Global, + TrialId = subjectVisit.TrialId, - ReadingGenerataTaskList = new List() { + ReadingGenerataTaskList = new List() { new ReadingGenerataTaskDTO (){ IsUrgent=subjectVisit.IsUrgent, ReadingCategory=ReadingCategory.Global, - ReadingName=newReadModule.ModuleName, - ReadModuleId=newReadModule.Id, + ReadingName=readModule.ModuleName, + ReadModuleId=readModule.Id, SubjectId=subjectVisit.SubjectId, VisitNum=visitTask.VisitTaskNum, }, }, - }); + }); - } - - } } await _readModuleRepository.SaveChangesAsync(); } - - + + #endregion + + } }