修改删除检查文件

master
hang 2024-11-06 10:51:18 +08:00
parent 083595cdea
commit d22c6f8702
1 changed files with 60 additions and 28 deletions

View File

@ -68,7 +68,7 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpGet("{trialId:guid}/{subjectVisitId:guid}/{currentQCType:int}")] [HttpGet("{trialId:guid}/{subjectVisitId:guid}/{currentQCType:int}")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
// [Authorize(Policy = IRaCISPolicy.IQC)] // [Authorize(Policy = IRaCISPolicy.IQC)]
public async Task<IResponseOutput> VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType) public async Task<IResponseOutput> VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType)
{ {
await VerifyIsCanQCAsync(null, subjectVisitId); await VerifyIsCanQCAsync(null, subjectVisitId);
@ -91,7 +91,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <returns></returns> /// <returns></returns>
[HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")] [HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
// [Authorize(Policy = IRaCISPolicy.IQC)] // [Authorize(Policy = IRaCISPolicy.IQC)]
public async Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType) public async Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
{ {
await VerifyIsCanQCAsync(null, qaQuestionCommand.SubjectVisitId); await VerifyIsCanQCAsync(null, qaQuestionCommand.SubjectVisitId);
@ -150,7 +150,7 @@ namespace IRaCIS.Core.Application.Image.QA
[HttpPut] [HttpPut]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
[UnitOfWork] [UnitOfWork]
// [Authorize(Policy = IRaCISPolicy.IQC)] // [Authorize(Policy = IRaCISPolicy.IQC)]
public async Task<IResponseOutput> CloseQCChallenge(CloseQCChallengeInDto input) public async Task<IResponseOutput> CloseQCChallenge(CloseQCChallengeInDto input)
{ {
@ -202,7 +202,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <returns></returns> /// <returns></returns>
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")] [HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
// [Authorize(Policy = IRaCISPolicy.IQC)] // [Authorize(Policy = IRaCISPolicy.IQC)]
public async Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId) public async Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId)
{ {
@ -229,7 +229,7 @@ namespace IRaCIS.Core.Application.Image.QA
/// <returns></returns> /// <returns></returns>
[HttpPost("{trialId:guid}")] [HttpPost("{trialId:guid}")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
//[Authorize(Policy = IRaCISPolicy.CRC_IQC)] //[Authorize(Policy = IRaCISPolicy.CRC_IQC)]
public async Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand) public async Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand)
{ {
var qaReply = _mapper.Map<QCChallengeDialog>(qaDialogCommand); var qaReply = _mapper.Map<QCChallengeDialog>(qaDialogCommand);
@ -779,7 +779,6 @@ namespace IRaCIS.Core.Application.Image.QA
//}).ToListAsync(); //}).ToListAsync();
var succeess2 = await _repository.BatchDeleteAsync<DicomInstance>(t => t.StudyId == id);
var success3 = await _dicomSeriesrepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id); var success3 = await _dicomSeriesrepository.BatchDeleteNoTrackingAsync(t => t.StudyId == id);
//var success3 = await _dicomSeriesrepository.DeleteFromQueryAsync(t => t.StudyId == id, true); //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<DicomInstance>(t => t.StudyId == id) //var instancePathList = await _repository.Where<DicomInstance>(t => t.StudyId == id)
.Select(t => t.Path).ToListAsync(); // .Select(t => t.Path).ToListAsync();
instancePathList.ForEach(path => var instancePath= await _repository.Where<DicomInstance>(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 (Directory.Exists(parentDirectory))
if (System.IO.File.Exists(physicalPath))
{ {
File.Delete(physicalPath); Directory.Delete(parentDirectory, recursive: true);
Console.WriteLine("目录已删除。");
} }
}); }
else
{
Console.WriteLine("无法找到父目录。");
}
var succeess2 = await _repository.BatchDeleteAsync<DicomInstance>(t => t.StudyId == id);
//var instanceIdList = await _repository.Where<DicomInstance>(t => t.StudyId == id) //var instanceIdList = await _repository.Where<DicomInstance>(t => t.StudyId == id)
// .Select(t => new { InstanceId = t.Id, t.SeriesId, t.StudyId, t.SubjectId, t.SiteId }).ToListAsync(); // .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) if (nameList.Count() > 0)
{ {
return ResponseOutput.NotOk($"当前检查批次要求进行疾病进展确认。请在提交当前检查批次前,先处理未提交的前序检查批次:{string.Join('、', nameList)}。", 1, ApiResponseCodeEnum.NeedTips); 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(); 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 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 级别临床数据 //同时要根据项目有没有配置Subject 级别临床数据
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData) && await _repository.AnyAsync<ClinicalDataTrialSet>(t=>t.TrialId== cRCRequestToQCCommand.TrialId && t.ClinicalDataLevel==ClinicalLevel.Subject)) if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData) && await _repository.AnyAsync<ClinicalDataTrialSet>(t => t.TrialId == cRCRequestToQCCommand.TrialId && t.ClinicalDataLevel == ClinicalLevel.Subject))
{ {
return ResponseOutput.NotOk($"基线没有临床数据,确认提交?", 0, ApiResponseCodeEnum.NeedTips); return ResponseOutput.NotOk($"基线没有临床数据,确认提交?", 0, ApiResponseCodeEnum.NeedTips);
} }
@ -1187,7 +1219,7 @@ namespace IRaCIS.Core.Application.Image.QA
// IC 上传的基线数据签名 // 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, IsSign = true,
ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned 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&& await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId &&
dbSubjectVisit.VisitNum<= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum+0.01m) // 当前的检查批次 全局 裁判 及之前 全都加急 dbSubjectVisit.VisitNum <= x.VisitTaskNum && x.VisitTaskNum < Math.Ceiling(dbSubjectVisit.VisitNum + 0.01m) // 当前的检查批次 全局 裁判 及之前 全都加急
&& x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask() && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
{ {
IsUrgent = true, IsUrgent = true,
TaskUrgentType = TaskUrgentType.PDProgress, TaskUrgentType = TaskUrgentType.PDProgress,
IsCanEditUrgentState=false, IsCanEditUrgentState = false,
}); });
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && x.SubjectId == dbSubjectVisit.SubjectId
@ -1254,7 +1286,7 @@ namespace IRaCIS.Core.Application.Image.QA
IsUrgent = true, IsUrgent = true,
TaskUrgentType = TaskUrgentType.Other, TaskUrgentType = TaskUrgentType.Other,
TaskUrgentRemake= "后续检查批次设为pd", TaskUrgentRemake = "后续检查批次设为pd",
IsCanEditUrgentState = false, IsCanEditUrgentState = false,
}); });
} }
@ -1266,7 +1298,7 @@ namespace IRaCIS.Core.Application.Image.QA
}); });
await _visitTaskRepository.BatchUpdateNoTrackingAsync(x => trialInOrderCriterionIdList.Contains(x.TrialReadingCriterionId) && 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() && x.ReadingTaskState != ReadingTaskState.HaveSigned && x.TaskState == TaskState.Effect, x => new VisitTask()
{ {
@ -1348,7 +1380,7 @@ namespace IRaCIS.Core.Application.Image.QA
} }
//非基线设置为PD的话 或者设置为末次检查批次 根据配置自动生成阅片期 //非基线设置为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
/// <returns></returns> /// <returns></returns>
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{setOrCancel:bool}")] [HttpPut("{trialId:guid}/{subjectVisitId:guid}/{setOrCancel:bool}")]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
// [Authorize(Policy = IRaCISPolicy.IQC)] // [Authorize(Policy = IRaCISPolicy.IQC)]
public async Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel) public async Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel)
{ {
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException(); var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
@ -1909,6 +1941,6 @@ namespace IRaCIS.Core.Application.Image.QA
} }
} }