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