diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs index f8178014f..9fc5974a7 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs @@ -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; } + } } diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index 84ea2012b..e15eae042 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -74,7 +74,83 @@ namespace IRaCIS.Application.Services ) : BaseService { + #region 访视提交生成任务了,但是需要退回 + /// + /// 阅片任务退回,删除影像数据,解除访视和检查绑定关系 + /// + /// + /// + /// + /// + /// + /// + [HttpPut] + public async Task VisitImageBack(VisitImageBackCommand inCommand, + [FromServices] IRepository _dicomStudyRepository, + [FromServices] IRepository _dicomSeriesRepository, + [FromServices] IRepository _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(t => t.SubjectId == inCommand.SubjectId && t.SourceSubjectVisit.VisitNum >= minVisitNum).Select(t => t.Id).ToList(); + + await _repository.BatchDeleteNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId && t.SourceSubjectVisit.VisitNum >= minVisitNum); + + + + await _repository.BatchDeleteNoTrackingAsync(t => deleteVisitTaskIdList.Contains(t.VisitTaskId)); + await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.TaskId)); + await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == inCommand.TrialId && (deleteVisitTaskIdList.Contains(t.TaskIdOne) || deleteVisitTaskIdList.Contains(t.TaskIdTwo))); + + await _repository.BatchDeleteNoTrackingAsync(t => deleteVisitTaskIdList.Contains(t.VisitTaskId)); + + await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId)); + + await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId)); + await _repository.BatchDeleteNoTrackingAsync(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId)); + await _repository.BatchDeleteNoTrackingAsync(t => t.VisitTask.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId)); + + await _repository.BatchDeleteNoTrackingAsync(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() { diff --git a/IRaCIS.Core.Domain/Image/DicomInstance.cs b/IRaCIS.Core.Domain/Image/DicomInstance.cs index 38743a6ff..fb7816ab9 100644 --- a/IRaCIS.Core.Domain/Image/DicomInstance.cs +++ b/IRaCIS.Core.Domain/Image/DicomInstance.cs @@ -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 ReadingTableAnswerRowInfoList { get; set; } #endregion diff --git a/IRaCIS.Core.Domain/Image/DicomSeries.cs b/IRaCIS.Core.Domain/Image/DicomSeries.cs index 41d0c6e51..d99e1d0dc 100644 --- a/IRaCIS.Core.Domain/Image/DicomSeries.cs +++ b/IRaCIS.Core.Domain/Image/DicomSeries.cs @@ -12,6 +12,9 @@ public class DicomSeries : BaseFullDeleteAuditEntity, IEntitySeqId [JsonIgnore] public List DicomInstanceList { get; set; } + [JsonIgnore] + public SubjectVisit SubjectVisit { get; set; } + [JsonIgnore] public List SubjectCriteriaEvaluationVisitStudyFilterList { get; set; } #endregion