From ed580eab741f15c28aa602d9d2dfaccc05b6d2f4 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 23 Sep 2025 10:08:13 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs | 2 ++ IRaCIS.Core.Application/Service/Visit/_MapConfig.cs | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs index 488782087..f8178014f 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs @@ -346,6 +346,8 @@ namespace IRaCIS.Application.Contracts public DateTime UpdateTime { get; set; } = DateTime.Now; public Guid CreateUserId { get; set; } public DateTime CreateTime { get; set; } = DateTime.Now; + + public int? SCPStudyCount { get; set; } } public class UpdateSubjectVisitStudyBindingCommand diff --git a/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs b/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs index 7f225ac77..aaff7cdf3 100644 --- a/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs @@ -112,7 +112,8 @@ namespace IRaCIS.Core.Application.Service CreateMap() .ForMember(d => d.CalledAEList, u => u.MapFrom(s => s.SCPStudyList.Select(t => t.CalledAE).Distinct())) .ForMember(d => d.CallingAEList, u => u.MapFrom(s => s.SCPStudyList.Select(t => t.CallingAE).Distinct())) - .ForMember(d => d.PatientId, u => u.MapFrom(s => s.Id)); + .ForMember(d => d.PatientId, u => u.MapFrom(s => s.Id)) + .ForMember(d => d.SCPStudyCount, u => u.MapFrom(s => s.SCPStudyList.Count())); CreateMap().IncludeMembers(t => t.SCPStudy) .ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName)); From 380546ca3c39ae68d51ee959ec8caada66878ae8 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 23 Sep 2025 16:13:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BD=B1=E5=83=8F?= =?UTF-8?q?=E9=80=80=E5=9B=9E=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Visit/DTO/PatientViewModel.cs | 11 +++ .../Service/Visit/PatientService.cs | 80 ++++++++++++++++++- IRaCIS.Core.Domain/Image/DicomInstance.cs | 3 + IRaCIS.Core.Domain/Image/DicomSeries.cs | 3 + 4 files changed, 95 insertions(+), 2 deletions(-) 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 From 3f6e006a9533519beb3904ac3c3e2427bdb9c840 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 24 Sep 2025 16:11:44 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E4=BA=8B=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Service/Visit/PatientService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index e15eae042..636624bd3 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -144,7 +144,7 @@ namespace IRaCIS.Application.Services await _repository.BatchDeleteNoTrackingAsync(t => t.VisitTask.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.TaskId)); - + await _subjectVisitRepository.SaveChangesAsync(); return ResponseOutput.Ok(); } From a1afbc248794d25d3cc28ee60264780a060e721d Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 24 Sep 2025 17:26:03 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=AE=BF=E8=A7=86=E9=80=80=E5=9B=9E?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/IRaCIS.Core.Application.xml | 11 +++++++++++ .../Service/Visit/PatientService.cs | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 14dda6423..50ce7881f 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -18526,6 +18526,17 @@ 入组流程-向CRO提交医生[Submit] + + + 阅片任务退回,删除影像数据,解除访视和检查绑定关系 + + + + + + + + 获取医院的配置信息 diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs index 636624bd3..42f35d2c6 100644 --- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs +++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs @@ -98,7 +98,7 @@ namespace IRaCIS.Application.Services //修改提交状态 - await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.SubjectId == inCommand.SubjectId && t.VisitNum >= minVisitNum, t => new SubjectVisit() + await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.SubjectId == inCommand.SubjectId && t.VisitNum >= minVisitNum && t.SubmitState == SubmitStateEnum.Submitted, t => new SubjectVisit() { SubmitState = SubmitStateEnum.ToSubmit, SubmitTime = null,