From d22c6f8702d11ef5274dd48142e7447af46cefca Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 6 Nov 2024 10:51:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=A0=E9=99=A4=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/QC/QCOperationService.cs | 88 +++++++++++++------ 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index f78e7d3..15911a4 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -68,7 +68,7 @@ namespace IRaCIS.Core.Application.Image.QA [HttpGet("{trialId:guid}/{subjectVisitId:guid}/{currentQCType:int}")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] - // [Authorize(Policy = IRaCISPolicy.IQC)] + // [Authorize(Policy = IRaCISPolicy.IQC)] public async Task VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType) { await VerifyIsCanQCAsync(null, subjectVisitId); @@ -91,7 +91,7 @@ namespace IRaCIS.Core.Application.Image.QA /// [HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] - // [Authorize(Policy = IRaCISPolicy.IQC)] + // [Authorize(Policy = IRaCISPolicy.IQC)] public async Task AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType) { await VerifyIsCanQCAsync(null, qaQuestionCommand.SubjectVisitId); @@ -150,7 +150,7 @@ namespace IRaCIS.Core.Application.Image.QA [HttpPut] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [UnitOfWork] - // [Authorize(Policy = IRaCISPolicy.IQC)] + // [Authorize(Policy = IRaCISPolicy.IQC)] public async Task CloseQCChallenge(CloseQCChallengeInDto input) { @@ -202,7 +202,7 @@ namespace IRaCIS.Core.Application.Image.QA /// [HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] - // [Authorize(Policy = IRaCISPolicy.IQC)] + // [Authorize(Policy = IRaCISPolicy.IQC)] public async Task DeleteQCChallenge(Guid qcChallengeId) { @@ -229,7 +229,7 @@ namespace IRaCIS.Core.Application.Image.QA /// [HttpPost("{trialId:guid}")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] - //[Authorize(Policy = IRaCISPolicy.CRC_IQC)] + //[Authorize(Policy = IRaCISPolicy.CRC_IQC)] public async Task AddQCChallengeReply(QADialogCommand qaDialogCommand) { var qaReply = _mapper.Map(qaDialogCommand); @@ -779,7 +779,6 @@ namespace IRaCIS.Core.Application.Image.QA //}).ToListAsync(); - var succeess2 = await _repository.BatchDeleteAsync(t => t.StudyId == id); var success3 = await _dicomSeriesrepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id); //var success3 = await _dicomSeriesrepository.DeleteFromQueryAsync(t => t.StudyId == id, true); @@ -787,19 +786,52 @@ namespace IRaCIS.Core.Application.Image.QA //删除 物理文件 - var instancePathList = await _repository.Where(t => t.StudyId == id) - .Select(t => t.Path).ToListAsync(); + //var instancePathList = await _repository.Where(t => t.StudyId == id) + // .Select(t => t.Path).ToListAsync(); - instancePathList.ForEach(path => + var instancePath= await _repository.Where(t => t.StudyId == id).Select(t => t.Path).FirstOrDefaultAsync(); + + + //instancePathList.ForEach(path => + //{ + + // var physicalPath = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, path); + + // Console.WriteLine(physicalPath); + + + // if (System.IO.File.Exists(physicalPath)) + // { + // Console.WriteLine("存在:" + physicalPath); + // File.Delete(physicalPath); + // } + // else + // { + // Console.WriteLine("不存在:" + physicalPath); + // } + //}); + + var parentDirectory = Directory.GetParent(FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, instancePath ?? string.Empty))?.FullName; + + if (parentDirectory != null) { + Console.WriteLine("删除目录: " + parentDirectory); - var physicalPath = FileStoreHelper.GetPhysicalFilePath(_hostEnvironment, path); - - if (System.IO.File.Exists(physicalPath)) + // 递归删除目录 + if (Directory.Exists(parentDirectory)) { - File.Delete(physicalPath); + Directory.Delete(parentDirectory, recursive: true); + Console.WriteLine("目录已删除。"); + } - }); + } + else + { + Console.WriteLine("无法找到父目录。"); + } + + var succeess2 = await _repository.BatchDeleteAsync(t => t.StudyId == id); + //var instanceIdList = await _repository.Where(t => t.StudyId == id) // .Select(t => new { InstanceId = t.Id, t.SeriesId, t.StudyId, t.SubjectId, t.SiteId }).ToListAsync(); @@ -1064,7 +1096,7 @@ namespace IRaCIS.Core.Application.Image.QA { if (nameList.Count() > 0) - { + { return ResponseOutput.NotOk($"当前检查批次要求进行疾病进展确认。请在提交当前检查批次前,先处理未提交的前序检查批次:{string.Join('、', nameList)}。", 1, ApiResponseCodeEnum.NeedTips); } } @@ -1076,15 +1108,15 @@ namespace IRaCIS.Core.Application.Image.QA var thisname = dbSubjectVisitList.Select(x => x.VisitName).ToList(); return ResponseOutput.NotOk($"After submitting images of the current study batch({string.Join('、', thisname)}), please submit unsubmitted images of antecedent study batches({string.Join('、', nameList)}) as soon as possible.", 0, ApiResponseCodeEnum.NeedTips); - //return ResponseOutput.NotOk($"After submitting the curent batch, please submit unsubmitted earlier batches as soon as possible: :{string.Join('、', nameList)}.", 0, ApiResponseCodeEnum.NeedTips); + //return ResponseOutput.NotOk($"After submitting the curent batch, please submit unsubmitted earlier batches as soon as possible: :{string.Join('、', nameList)}.", 0, ApiResponseCodeEnum.NeedTips); } } } //同时要根据项目有没有配置Subject 级别临床数据 - - if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData) && await _repository.AnyAsync(t=>t.TrialId== cRCRequestToQCCommand.TrialId && t.ClinicalDataLevel==ClinicalLevel.Subject)) + + if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData) && await _repository.AnyAsync(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.ClinicalDataLevel == ClinicalLevel.Subject)) { return ResponseOutput.NotOk($"基线没有临床数据,确认提交?", 0, ApiResponseCodeEnum.NeedTips); } @@ -1187,7 +1219,7 @@ namespace IRaCIS.Core.Application.Image.QA // IC 上传的基线数据签名 - await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign==false, x => new ReadingClinicalData() + await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign == false, x => new ReadingClinicalData() { IsSign = true, ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned @@ -1237,14 +1269,14 @@ namespace IRaCIS.Core.Application.Image.QA - await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId)&& x.SubjectId == dbSubjectVisit.SubjectId&& - dbSubjectVisit.VisitNum<= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum+0.01m) // 当前的检查批次 全局 裁判 及之前 全都加急 + await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId && + dbSubjectVisit.VisitNum <= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的检查批次 全局 裁判 及之前 全都加急 && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() { IsUrgent = true, TaskUrgentType = TaskUrgentType.PDProgress, - IsCanEditUrgentState=false, + IsCanEditUrgentState = false, }); await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId @@ -1254,7 +1286,7 @@ namespace IRaCIS.Core.Application.Image.QA IsUrgent = true, TaskUrgentType = TaskUrgentType.Other, - TaskUrgentRemake= "后续检查批次设为pd", + TaskUrgentRemake = "后续检查批次设为pd", IsCanEditUrgentState = false, }); } @@ -1266,7 +1298,7 @@ namespace IRaCIS.Core.Application.Image.QA }); await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && - x.VisitTaskNum>= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的检查批次 全局 裁判 全都加急 + x.VisitTaskNum >= dbSubjectVisit.VisitNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的检查批次 全局 裁判 全都加急 && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() { @@ -1348,7 +1380,7 @@ namespace IRaCIS.Core.Application.Image.QA } //非基线设置为PD的话 或者设置为末次检查批次 根据配置自动生成阅片期 - if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit) ) + if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit)) { //该标准需要添加阅片期 @@ -1594,7 +1626,7 @@ namespace IRaCIS.Core.Application.Image.QA } - await _qcChallengeRepository.UpdatePartialFromQueryAsync(t => t.IsClosed == false&& t.SubjectVisitId==dbSubjectVisit.Id, u => new QCChallenge() { IsClosed = true, ClosedTime=DateTime.Now, CloseResonEnum = QCChallengeCloseEnum.Unresolvable }); + await _qcChallengeRepository.UpdatePartialFromQueryAsync(t => t.IsClosed == false && t.SubjectVisitId == dbSubjectVisit.Id, u => new QCChallenge() { IsClosed = true, ClosedTime = DateTime.Now, CloseResonEnum = QCChallengeCloseEnum.Unresolvable }); } @@ -1623,7 +1655,7 @@ namespace IRaCIS.Core.Application.Image.QA /// [HttpPut("{trialId:guid}/{subjectVisitId:guid}/{setOrCancel:bool}")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] - // [Authorize(Policy = IRaCISPolicy.IQC)] + // [Authorize(Policy = IRaCISPolicy.IQC)] public async Task SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel) { var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException(); @@ -1909,6 +1941,6 @@ namespace IRaCIS.Core.Application.Image.QA - + } }