From dff3ce99b8e120ef90c1292d44fe061de1dbbfa1 Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Fri, 22 Apr 2022 14:42:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/InspectionController.cs | 3 +- .../Controllers/StudyController.cs | 18 ++++--- .../ImageAndDoc/DTO/DicomInstanceModel.cs | 5 +- .../ImageAndDoc/DicomArchiveService.cs | 49 ++++++++++--------- .../Interface/IDicomArchiveService.cs | 2 +- .../Service/QC/QCOperationService.cs | 32 ++++++++++-- 6 files changed, 73 insertions(+), 36 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/InspectionController.cs b/IRaCIS.Core.API/Controllers/InspectionController.cs index cf7d24c5d..631746d42 100644 --- a/IRaCIS.Core.API/Controllers/InspectionController.cs +++ b/IRaCIS.Core.API/Controllers/InspectionController.cs @@ -345,7 +345,7 @@ namespace IRaCIS.Core.API.Controllers } /// - /// + /// 影像转发 /// /// /// @@ -354,6 +354,7 @@ namespace IRaCIS.Core.API.Controllers public async Task ForwardSVDicomImage(DataInspectionDto opt) { var fun = _qCOperationService.ForwardSVDicomImage; + opt.AuditInfo.NeedSava = false; return await _inspectionService.Enforcement(opt.OptCommand, opt.AuditInfo, opt.SignInfo, fun); } diff --git a/IRaCIS.Core.API/Controllers/StudyController.cs b/IRaCIS.Core.API/Controllers/StudyController.cs index 4d179fe2b..90f799171 100644 --- a/IRaCIS.Core.API/Controllers/StudyController.cs +++ b/IRaCIS.Core.API/Controllers/StudyController.cs @@ -70,7 +70,7 @@ namespace IRaCIS.Api.Controllers { DataInspectionAddDTO data = JsonConvert.DeserializeObject(archiveStudyCommand.AuditInfo); - + string studycode = string.Empty; data.CreateTime = DateTime.Now; //Stopwatch sw = new Stopwatch(); var startTime = DateTime.Now; @@ -138,9 +138,9 @@ namespace IRaCIS.Api.Controllers memoryStream.Seek(0, SeekOrigin.Begin); var archiveStudyId = await _dicomArchiveService.ArchiveDicomStreamAsync(memoryStream, savedInfo, seriesInstanceUidList, instanceUidList); - - if (!archivedStudyIds.Contains(archiveStudyId)) - archivedStudyIds.Add(archiveStudyId); + studycode = archiveStudyId.Item2; + if (!archivedStudyIds.Contains(archiveStudyId.Item1)) + archivedStudyIds.Add(archiveStudyId.Item1); } } catch @@ -163,8 +163,11 @@ namespace IRaCIS.Api.Controllers memoryStream.Seek(0, SeekOrigin.Begin); var archiveStudyId = await _dicomArchiveService.ArchiveDicomStreamAsync(memoryStream, savedInfo, seriesInstanceUidList, instanceUidList); - if (!archivedStudyIds.Contains(archiveStudyId)) - archivedStudyIds.Add(archiveStudyId); + studycode = archiveStudyId.Item2; + + + if (!archivedStudyIds.Contains(archiveStudyId.Item1)) + archivedStudyIds.Add(archiveStudyId.Item1); } } } @@ -217,6 +220,9 @@ namespace IRaCIS.Api.Controllers data.GeneralId = archivedStudyIds[0]; + Dictionary keyValuePairs = new Dictionary(); + keyValuePairs.Add("StyudCode", studycode); + data.JsonDetail = _inspectionService.AddJsonItem(data.JsonDetail, keyValuePairs); await _inspectionService.AddInspectionRecordAsync(data); diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs index 5b6c6ba4c..a3bb260aa 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/DicomInstanceModel.cs @@ -1,4 +1,6 @@ -namespace IRaCIS.Core.Application.Contracts +using IRaCIS.Core.Domain.Share; + +namespace IRaCIS.Core.Application.Contracts { public class DicomInstanceDTO { @@ -39,6 +41,7 @@ public string ResearchProgramNo { get; set; } = string.Empty; public string TrialIndication { get; set; } = string.Empty; + public CheckStateEnum CheckState { get; set; } public decimal VisitNum { get; set; } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DicomArchiveService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DicomArchiveService.cs index 88a4e73c6..c6419829b 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DicomArchiveService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DicomArchiveService.cs @@ -50,7 +50,7 @@ namespace IRaCIS.Core.Application.Services return success; } - public async Task ArchiveDicomStreamAsync(Stream dicomStream, + public async Task> ArchiveDicomStreamAsync(Stream dicomStream, DicomTrialSiteSubjectInfo addtionalInfo, List seriesInstanceUidList, List instanceUidList) { @@ -65,7 +65,7 @@ namespace IRaCIS.Core.Application.Services if (instanceUidList.Any(t => t == sopInstanceUid)) { - return IdentifierHelper.CreateGuid(studyInstanceUid, addtionalInfo.TrialId.ToString()); + return new Tuple(IdentifierHelper.CreateGuid(studyInstanceUid, addtionalInfo.TrialId.ToString()), string.Empty) ; } @@ -203,6 +203,26 @@ namespace IRaCIS.Core.Application.Services await _seriesRepository.AddAsync(dicomSeries); #region 稽查 List datas = new List(); + //datas.Add(new DataInspection() + //{ + + // SiteId = dicomStudy.SiteId, + // SubjectId = dicomStudy.SubjectId, + // TrialId = dicomStudy.TrialId, + // GeneralId = dicomSeries.Id, + // SubjectVisitId = dicomStudy.SubjectVisitId, + // CreateTime = createtime.AddMilliseconds(10), + // Identification = "Add|DICOM Series|Info|Visit-Image Upload", + // JsonDetail = JsonConvert.SerializeObject(new + // { + // StudyCode = dicomStudy.StudyCode, + // Modalities = dicomStudy.Modalities, + // SeriesNumber = dicomSeries.SeriesNumber, + // InstanceCount = dicomSeries.InstanceCount, + // SeriesTime = dicomSeries.SeriesTime, + + // }) + //}); datas.Add(new DataInspection() { @@ -212,26 +232,6 @@ namespace IRaCIS.Core.Application.Services GeneralId = dicomSeries.Id, SubjectVisitId = dicomStudy.SubjectVisitId, CreateTime = createtime.AddMilliseconds(10), - Identification = "Add|DICOM Series|Info|Visit-Image Upload", - JsonDetail = JsonConvert.SerializeObject(new - { - StudyCode = dicomStudy.StudyCode, - Modalities = dicomStudy.Modalities, - SeriesNumber = dicomSeries.SeriesNumber, - InstanceCount = dicomSeries.InstanceCount, - SeriesTime = dicomSeries.SeriesTime, - - }) - }); - datas.Add(new DataInspection() - { - - SiteId = dicomStudy.SiteId, - SubjectId = dicomStudy.SubjectId, - TrialId = dicomStudy.TrialId, - GeneralId = dicomSeries.Id, - SubjectVisitId = dicomStudy.SubjectVisitId, - CreateTime = createtime.AddMilliseconds(510), Identification = "Init|DICOM Series|Status|Visit-Image Upload", JsonDetail = JsonConvert.SerializeObject(new { @@ -241,6 +241,7 @@ namespace IRaCIS.Core.Application.Services InstanceCount = dicomSeries.InstanceCount, SeriesTime = dicomSeries.SeriesTime, IsReading = dicomSeries.IsReading, + IsDeleted = dicomSeries.IsReading, }) }); @@ -275,7 +276,7 @@ namespace IRaCIS.Core.Application.Services if (dataset.InternalTransferSyntax.IsEncapsulated) await dicomFile.SaveAsync(filePath); else await dicomFile.Clone(DicomTransferSyntax.RLELossless).SaveAsync(filePath); //RLELossless } - return dicomInstance.StudyId; + return new Tuple(dicomInstance.StudyId, dicomStudy.StudyCode); } @@ -464,6 +465,8 @@ namespace IRaCIS.Core.Application.Services SiteId = dicomStudy.SiteId, TrialId = dicomStudy.TrialId, SubjectId = dicomStudy.SubjectId, + IsDeleted=false, + IsReading=false, SubjectVisitId = dicomStudy.SubjectVisitId, InstanceCount = 0 diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IDicomArchiveService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IDicomArchiveService.cs index 372561d8a..62531e71b 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IDicomArchiveService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/Interface/IDicomArchiveService.cs @@ -2,7 +2,7 @@ { public interface IDicomArchiveService { - Task ArchiveDicomStreamAsync(Stream dicomStream, DicomTrialSiteSubjectInfo addtionalInfo, List seriesInstanceUidList, List instanceUidList); + Task> ArchiveDicomStreamAsync(Stream dicomStream, DicomTrialSiteSubjectInfo addtionalInfo, List seriesInstanceUidList, List instanceUidList); //ICollection GetArchivedStudyList(List archivedStudyIds); Task DicomDBDataSaveChange(); diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index 06c6ee749..8d614d46e 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -2022,12 +2022,28 @@ namespace IRaCIS.Core.Application.Image.QA [HttpPost("{trialId:guid}")] public async Task ForwardSVDicomImage(Guid[] subjectVisitIdList) { - + List datas = new List(); foreach (var subjectVisitId in subjectVisitIdList) { - var info = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); + + var info = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); + Dictionary keyValuePairs = new Dictionary() { + {"SubmitState","已提交" }, + { "AuditState","通过"}, + { "CheckState",info.CheckState== CheckStateEnum.CVIng? "核查中": "核查通过"}, + { "ForwardState",""} + + }; + DataInspection data = new DataInspection() + { + TrialId= info.TrialId, + SiteId=info.SiteId, + SubjectId=info.SubjectId, + SubjectVisitId= subjectVisitId, + Identification= "NaN-14-0" + }; var targetPath = "/IMPORT-IMAGES/" + info.TrialCode + "_" + info.SubjectCode + "_" + info.VisitName; var path = _dicomFileStoreHelper.GetSubjectVisitPath(info.TrialId, info.SiteId, info.SubjectId, info.SubjectVisitId); @@ -2091,13 +2107,21 @@ namespace IRaCIS.Core.Application.Image.QA await _subjectVisitRepository.BatchUpdateAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { ForwardState = ForwardStateEnum.ForwardFailed }); + keyValuePairs["ForwardState"] = "转发失败"; } await _subjectVisitRepository.BatchUpdateAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { ForwardState = ForwardStateEnum.Forwarded,ForwardUserId = _userInfo.Id,ForwardTime = DateTime.Now}); - } - + keyValuePairs["ForwardState"] = "转发成功"; + + data.JsonDetail = JsonConvert.SerializeObject(keyValuePairs); + datas.Add(data); + } + await _subjectVisitRepository.AddListInspectionRecordAsync(datas); + + await _subjectVisitRepository.SaveChangesAsync(); + return ResponseOutput.Ok(); }