diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs index da81b29a2..9c9ca883b 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs @@ -210,12 +210,9 @@ namespace IRaCIS.Core.Application.Contracts public bool IsAdd { get; set; } public AddOrUpdateStudyDto Study { get; set; } + - public List SeriesList { get; set; } - - public List InstanceList { get; set; } - - } + } public class AddOrUpdateStudyDto { @@ -253,6 +250,9 @@ namespace IRaCIS.Core.Application.Contracts public string BodyPartExamined { get; set; } = string.Empty; + public List SeriesList { get; set; } + + } public class AddOrUpdateSeriesDto @@ -278,6 +278,9 @@ namespace IRaCIS.Core.Application.Contracts public string AcquisitionNumber { get; set; } = string.Empty; public string TriggerTime { get; set; } = string.Empty; + public List InstanceList { get; set; } + + } diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs index 422b5e8cb..24d8ccd74 100644 --- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs +++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs @@ -168,7 +168,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc await _dicomstudyRepository.AddAsync(study); - foreach (var seriesItem in incommand.SeriesList) + foreach (var seriesItem in incommand.Study.SeriesList) { var series = _mapper.Map(seriesItem); @@ -182,7 +182,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc await _dicomSeriesRepository.AddAsync(series); - foreach (var instanceItem in incommand.InstanceList) + foreach (var instanceItem in seriesItem.InstanceList) { var isntance = _mapper.Map(instanceItem); isntance.StudyId = study.Id; @@ -209,34 +209,59 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var study = await _dicomstudyRepository.FirstOrDefaultAsync(t => t.Id == studyId); - _mapper.Map(incommand.Study, study); + //_mapper.Map(incommand.Study, study); //特殊处理逻辑 SpecialArchiveStudyDeal(study); - await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.StudyId == incommand.Study.Id); + //await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.StudyId == incommand.Study.Id); - foreach (var seriesItem in incommand.SeriesList) + // 少了整个序列 + + //某个序列下少了instance + foreach (var seriesItem in incommand.Study.SeriesList) { - var series = _mapper.Map(seriesItem); + var seriesId = IdentifierHelper.CreateGuid(seriesItem.StudyInstanceUid, seriesItem.SeriesInstanceUid, trialId.ToString()); - series.Id = IdentifierHelper.CreateGuid(series.StudyInstanceUid, series.SeriesInstanceUid, trialId.ToString()); - series.StudyId = study.Id; + DicomSeries dicomSeries = await _dicomSeriesRepository.FirstOrDefaultAsync(t=>t.Id==seriesId); - series.TrialId = incommand.TrialId; - series.SiteId = incommand.SiteId; - series.SubjectId = incommand.SubjectId; - series.SubjectVisitId = incommand.SubjectVisitId; + //判断重复 + if (dicomSeries == null) + { - await _dicomSeriesRepository.AddAsync(series); - foreach (var instanceItem in incommand.InstanceList) + var series = _mapper.Map(seriesItem); + + series.Id = seriesId; + series.StudyId = study.Id; + + series.TrialId = incommand.TrialId; + series.SiteId = incommand.SiteId; + series.SubjectId = incommand.SubjectId; + series.SubjectVisitId = incommand.SubjectVisitId; + + + dicomSeries= await _dicomSeriesRepository.AddAsync(series); + + //新的序列 那么 检查的序列数量+1 + study.SeriesCount += 1; + + + } + else + { + //该序列掉了instance + dicomSeries.InstanceCount += seriesItem.InstanceCount; + } + + + foreach (var instanceItem in seriesItem.InstanceList) { var insntance = _mapper.Map(instanceItem); insntance.Id = IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString()); insntance.StudyId = study.Id; - insntance.SeriesId = series.Id; + insntance.SeriesId = dicomSeries.Id; insntance.TrialId = incommand.TrialId; insntance.SiteId = incommand.SiteId; @@ -245,16 +270,17 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc await _dicomInstanceRepository.AddAsync(insntance); } + + + // 不管是新的序列 还是 该序列 掉了Instance 重传的时候 检查的instance 数量都会增加 + study.InstanceCount += seriesItem.InstanceCount; + } - // 少了整个序列 - //某个序列下少了instance } - - await _dicomstudyRepository.SaveChangesAsync(); return ResponseOutput.Ok(); @@ -738,7 +764,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc result.AllowReUpload = true; result.UploadedSeriesList = _repository.Where(t => t.StudyId == verifyStudyInfo.Id).Select(t => new UploadedSeries() - { SeriesInstanceUid = t.SeriesInstanceUid, SOPInstanceUIDList = t.DicomInstanceList.Select(c => c.SopInstanceUid).ToList() }).ToList(); + { SeriesId=t.Id, SeriesInstanceUid = t.SeriesInstanceUid, SOPInstanceUIDList = t.DicomInstanceList.Select(c => c.SopInstanceUid).ToList() }).ToList(); } //不是同一个受试者 else diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs index 54d6cd175..98fe2a280 100644 --- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs +++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs @@ -319,6 +319,8 @@ namespace IRaCIS.Core.Application.Contracts public class UploadedSeries { + public Guid SeriesId { get; set; } + public string SeriesInstanceUid { get; set; } public List SOPInstanceUIDList { get; set; }