增加影像退回接口
continuous-integration/drone/push Build is passing Details

Test_HIR_Net8
hang 2025-09-23 16:13:17 +08:00
parent e4cf4cc8b8
commit 380546ca3c
4 changed files with 95 additions and 2 deletions

View File

@ -1227,4 +1227,15 @@ namespace IRaCIS.Application.Contracts
public string Path { get; set; }
public long? FileSize { get; set; }
}
public class VisitImageBackCommand
{
[NotDefault]
public Guid TrialId { get; set; }
[NotDefault]
public Guid SubjectId { get; set; }
[NotDefault]
public Guid SubjectVisitId { get; set; }
}
}

View File

@ -74,7 +74,83 @@ namespace IRaCIS.Application.Services
) : BaseService
{
#region 访视提交生成任务了,但是需要退回
/// <summary>
/// 阅片任务退回,删除影像数据,解除访视和检查绑定关系
/// </summary>
/// <param name="inCommand"></param>
/// <param name="_dicomStudyRepository"></param>
/// <param name="_dicomSeriesRepository"></param>
/// <param name="_dicomInstanceRepository"></param>
/// <param name="_repository"></param>
/// <returns></returns>
[HttpPut]
public async Task<IResponseOutput> VisitImageBack(VisitImageBackCommand inCommand,
[FromServices] IRepository<DicomStudy> _dicomStudyRepository,
[FromServices] IRepository<DicomSeries> _dicomSeriesRepository,
[FromServices] IRepository<DicomInstance> _dicomInstanceRepository,
[FromServices] IRepository _repository)
{
var minVisitNum = _subjectVisitRepository.Where(t => t.Id == inCommand.SubjectVisitId).Select(t => t.VisitNum).FirstOrDefault();
//修改提交状态
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.SubjectId == inCommand.SubjectId && t.VisitNum >= minVisitNum, t => new SubjectVisit()
{
SubmitState = SubmitStateEnum.ToSubmit,
SubmitTime = null,
SubmitUserId = null,
AuditState = AuditStateEnum.None,
CheckState = CheckStateEnum.None,
});
//清理影像检查
await _dicomStudyRepository.BatchDeleteNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId && t.SubjectVisit.VisitNum >= minVisitNum);
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId && t.SubjectVisit.VisitNum >= minVisitNum);
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId && t.SubjectVisit.VisitNum >= minVisitNum);
//解除当前以及后续访视检查绑定关系
await _studySubjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectVisit.VisitNum >= minVisitNum && t.SubjectVisit.SubjectId == inCommand.SubjectId, u => new SCPStudySubjectVisit() { StudyId = null });
await _subjectPatientRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId, u => new SubjectPatient() { IsBinded = false });
//清理任务
var deleteVisitTaskIdList = _repository.Where<VisitTask>(t => t.SubjectId == inCommand.SubjectId && t.SourceSubjectVisit.VisitNum >= minVisitNum).Select(t => t.Id).ToList();
await _repository.BatchDeleteNoTrackingAsync<VisitTask>(t => t.SubjectId == inCommand.SubjectId && t.SourceSubjectVisit.VisitNum >= minVisitNum);
await _repository.BatchDeleteNoTrackingAsync<ReadingCustomTag>(t => deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingGlobalTaskInfo>(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.TaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingJudgeInfo>(t => t.TrialId == inCommand.TrialId && (deleteVisitTaskIdList.Contains(t.TaskIdOne) || deleteVisitTaskIdList.Contains(t.TaskIdTwo)));
await _repository.BatchDeleteNoTrackingAsync<ReadingOncologyTaskInfo>(t => deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTableAnswerRowInfo>(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTableQuestionAnswer>(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionMark>(t => t.VisitTask.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTaskRelation>(t => t.VisitTask.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.TaskId));
return ResponseOutput.Ok();
}
#endregion
#region 医院信息管理
@ -649,7 +725,7 @@ namespace IRaCIS.Application.Services
#region new ok
var query = _patientRepository.Where(t => isAdminOrOA ? true : t.SCPStudyList.Any(c => c.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId))))
.WhereIf(inQuery.CalledAEList.Any(), t => t.SCPStudyList.Any(c=> inQuery.CalledAEList.Contains(c.CalledAE)))
.WhereIf(inQuery.CalledAEList.Any(), t => t.SCPStudyList.Any(c => inQuery.CalledAEList.Contains(c.CalledAE)))
.WhereIf(inQuery.HospitalGroupIdList.Any(), t => t.SCPStudyList.Any(c => c.HospitalGroupList.Any(c => inQuery.HospitalGroupIdList.Contains(c.HospitalGroupId))))
.WhereIf(inQuery.PatientHospitalGroupTagIdList.Any(), t => t.PatientHospitalGroupTagList.Any(k => inQuery.PatientHospitalGroupTagIdList.Contains(k.HospitalGroupTagId)))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientIdStr), t => t.PatientIdStr.Contains(inQuery.PatientIdStr))
@ -858,7 +934,7 @@ namespace IRaCIS.Application.Services
SeriesCount = scpStudy.SeriesCount,
StudyTime = scpStudy.StudyTime,
StudyIdStr = scpStudy.StudyId,
StudyInstanceUid= scpStudy.StudyInstanceUid,
StudyInstanceUid = scpStudy.StudyInstanceUid,
HospitalGroupList = scpStudy.HospitalGroupList.Select(t => new SCPStudyHospitalGroupInfo()
{

View File

@ -13,6 +13,9 @@ public class DicomInstance : BaseFullAuditEntity, IEntitySeqId
[ForeignKey("StudyId")]
public DicomStudy DicomStudy { get; set; }
[JsonIgnore]
public SubjectVisit SubjectVisit { get; set; }
[JsonIgnore]
public List<ReadingTableAnswerRowInfo> ReadingTableAnswerRowInfoList { get; set; }
#endregion

View File

@ -12,6 +12,9 @@ public class DicomSeries : BaseFullDeleteAuditEntity, IEntitySeqId
[JsonIgnore]
public List<DicomInstance> DicomInstanceList { get; set; }
[JsonIgnore]
public SubjectVisit SubjectVisit { get; set; }
[JsonIgnore]
public List<SubjectCriteriaEvaluationVisitStudyFilter> SubjectCriteriaEvaluationVisitStudyFilterList { get; set; }
#endregion