diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index c4ce4f6cc..696a146bd 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -18204,15 +18204,6 @@
-
-
- 打包和匿名化影像 默认是匿名化打包,也可以不匿名化打包
-
-
-
-
-
-
获取下载的访视检查信息
diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
index 9a604e791..b253fb01c 100644
--- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs
@@ -108,6 +108,9 @@ namespace IRaCIS.Core.Application.ViewModel
public class VisitTaskViewBasic
{
+
+ public Guid? SourceSubjectVisitId { get; set; }
+
public string SubjectShortName { get; set; }
public Guid Id { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs
index 72b1ee836..274448e1a 100644
--- a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs
@@ -922,14 +922,13 @@ namespace IRaCIS.Application.Contracts
public string IP { get; set; }
- public long VisitImageZipSize { get; set; }
+ public bool IsSuccess { get; set; }
- //文件大小
- public int VisitImageFileCount { get; set; }
+ public DateTime DownloadStartTime { get; set; }
+ public DateTime? DownloadEndTime { get; set; }
- public string VisitImageZipPath { get; set; } = string.Empty;
-
- public int? StudyCount { get; set; }
+ public int ImageCount { get; set; }
+ public long ImageSize { get; set; }
public UserTypeEnum UserTypeEnum { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs
index 7ec29050b..46a38dbd0 100644
--- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs
+++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs
@@ -2215,9 +2215,7 @@ namespace IRaCIS.Application.Services
VisitNum = t.VisitNum,
VisitName = t.VisitName,
VisitEarliestStudyTime = t.SCPStudySubjectVisitList.Min(t => t.SCPStudy.StudyTime),
- VisitLatestStudyTime = t.SCPStudySubjectVisitList.Max(t => t.SCPStudy.StudyTime),
- VisitImageZipPath = t.VisitImageZipPath,
- PackState = t.PackState,
+ VisitLatestStudyTime = t.SCPStudySubjectVisitList.Max(t => t.SCPStudy.StudyTime)
});
var defalutSortArray = new string[] { nameof(PatientSubjectVisitView.SubjectId), nameof(PatientSubjectVisitView.VisitNum) };
@@ -2707,40 +2705,7 @@ namespace IRaCIS.Application.Services
#endregion
- ///
- /// 打包和匿名化影像 默认是匿名化打包,也可以不匿名化打包
- ///
- ///
- ///
- ///
- ///
- public async Task RequestPackageAndAnonymizImage(Guid trialId, Guid subjectVisitId, [FromServices] IOSSService _oSSService, bool isAnonymize = true)
- {
- var subjectVisit = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId);
-
- if (subjectVisit.PackState == PackState.WaitPack)
- {
- HangfireJobHelper.NotImmediatelyOnceOnlyJob(t => t.RequestPackageAndAnonymizImage(trialId, subjectVisitId, isAnonymize), TimeSpan.FromSeconds(1));
-
- subjectVisit.PackState = PackState.Packing;
-
- await _subjectVisitRepository.SaveChangesAsync();
-
- }
-
- var zipPath = subjectVisit.VisitImageZipPath;
-
- if (!string.IsNullOrEmpty(zipPath))
- {
- //记录下载的记录
-
- await _subejctVisitDownloadRepository.AddAsync(new SubejctVisitDownload() { IP = _userInfo.IP, SubjectVisitId = subjectVisitId }, true);
- }
-
- return ResponseOutput.Ok(zipPath);
-
- }
///
/// 获取下载的访视检查信息
@@ -2869,191 +2834,4 @@ namespace IRaCIS.Application.Services
}
- public interface IDownloadAndUploadService
- {
- Task RequestPackageAndAnonymizImage(Guid trialId, Guid subjectVisitId, bool isAnonymize = true);
- }
- [ApiExplorerSettings(GroupName = "Trial")]
- public class DownloadAndUploadService : BaseService, IDownloadAndUploadService
- {
-
- private readonly IRepository _systemAnonymizationRepository;
- private readonly IRepository _subjectVisitRepository;
- private readonly IOSSService _oSSService;
- public DownloadAndUploadService(IRepository systemAnonymizationRepository, IRepository subjectVisitRepository, IOSSService oSSService)
- {
- _systemAnonymizationRepository = systemAnonymizationRepository;
-
- _subjectVisitRepository = subjectVisitRepository;
-
- _oSSService = oSSService;
- }
-
-
- public async Task RequestPackageAndAnonymizImage(Guid trialId, Guid subjectVisitId, bool isAnonymize = true)
- {
-
- var subjectVisit = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId);
-
- try
- {
- var addOrUpdateFixedFieldList = new List();
-
- var ircFieldList = new List();
-
- if (isAnonymize)
- {
- var systemAnonymizationList = _systemAnonymizationRepository.Where(t => t.IsEnable).ToList();
-
- addOrUpdateFixedFieldList = systemAnonymizationList.Where(t => t.IsFixed).ToList();
-
- ircFieldList = systemAnonymizationList.Where(t => t.IsFixed == false).ToList();
- }
-
- var subjectAndVisitInfo = _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new { SubjectCode = t.Subject.Code, t.Trial.TrialCode, t.VisitNum }).FirstOrDefault();
-
- var query = from sv in _subjectVisitRepository.Where(t => t.Id == subjectVisitId)
-
- select new
- {
- SubjectCode = sv.Subject.Code,
- VisitName = sv.VisitName,
- StudyList = sv.StudyList.Select(u => new
- {
- u.PatientIdStr,
- u.StudyTime,
- u.StudyCode,
-
- SeriesList = u.SeriesList.Select(z => new
- {
- z.Modality,
-
- InstancePathList = z.DicomInstanceList.Select(k => new
- {
- k.Path
- })
- })
-
- })
- };
-
- var info = query.FirstOrDefault();
-
- if (info != null)
- {
- // 创建一个临时文件夹来存放文件
- string tempFolderPath = Path.Combine(Directory.GetCurrentDirectory(), $"DownloadTemp_{NewId.NextGuid()}");
- Directory.CreateDirectory(tempFolderPath);
-
- // 遍历查询结果
- foreach (var studyInfo in info.StudyList)
- {
- // 遍历 Series
- foreach (var seriesInfo in studyInfo.SeriesList)
- {
- string studyFolderPath = Path.Combine(tempFolderPath, $"{info.SubjectCode}_{info.VisitName}", $"{studyInfo.StudyCode}_{studyInfo.StudyTime?.ToString("yyyy-MM-dd")}_{seriesInfo.Modality}");
-
- // 创建 影像 文件夹
- Directory.CreateDirectory(studyFolderPath);
-
- // 遍历 InstancePathList
- foreach (var instanceInfo in seriesInfo.InstancePathList)
- {
- // 复制文件到相应的文件夹
- string destinationPath = Path.Combine(studyFolderPath, Path.GetFileName(instanceInfo.Path));
-
- //下载到当前目录
- await _oSSService.DownLoadFromOSSAsync(instanceInfo.Path, destinationPath);
-
- #region 匿名化逻辑
-
-
- if (isAnonymize)
- {
- DicomFile dicomFile = await DicomFile.OpenAsync(destinationPath, Encoding.Default);
-
- DicomDataset dataset = dicomFile.Dataset;
-
- foreach (var item in addOrUpdateFixedFieldList)
- {
-
- var dicomTag = new DicomTag(Convert.ToUInt16(item.Group, 16), Convert.ToUInt16(item.Element, 16));
-
- dataset.AddOrUpdate(dicomTag, item.ReplaceValue);
- }
-
- foreach (var item in ircFieldList)
- {
-
- var dicomTag = new DicomTag(Convert.ToUInt16(item.Group, 16), Convert.ToUInt16(item.Element, 16));
-
- if (dicomTag == DicomTag.ClinicalTrialProtocolID)
- {
- dataset.AddOrUpdate(dicomTag, subjectAndVisitInfo.TrialCode);
-
- }
- if (dicomTag == DicomTag.ClinicalTrialSiteID)
- {
- //dataset.AddOrUpdate(dicomTag, subjectAndVisitInfo.TrialSiteCode);
-
- }
- if (dicomTag == DicomTag.ClinicalTrialSubjectID)
- {
- dataset.AddOrUpdate(dicomTag, subjectAndVisitInfo.SubjectCode);
-
- }
- if (dicomTag == DicomTag.ClinicalTrialTimePointID)
- {
- dataset.AddOrUpdate(dicomTag, subjectAndVisitInfo.VisitNum.ToString());
-
- }
- if (dicomTag == DicomTag.PatientID)
- {
- dataset.AddOrUpdate(dicomTag, subjectAndVisitInfo.TrialCode + "_" + subjectAndVisitInfo.SubjectCode);
-
- }
-
- }
- }
- #endregion
- }
- }
- }
-
- var zipPath = Path.Combine(Directory.GetCurrentDirectory(), $"{info.SubjectCode}_{info.VisitName}_ImageStudy.zip");
-
- ZipFile.CreateFromDirectory(tempFolderPath, zipPath);
-
- //上传到Oss
- var relativePath = await _oSSService.UploadToOSSAsync(zipPath, $"download_zip/{subjectVisitId}", false);
-
-
- //subjectVisit.PackState = PackState.Packed;
- //subjectVisit.VisitImageZipPath = relativePath;
- //await _subjectVisitRepository.SaveChangesAsync();
-
- var zipSize = File.OpenRead(zipPath).Length;
- var fileCount = info.StudyList.SelectMany(t => t.SeriesList).SelectMany(t => t.InstancePathList).Count();
- await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { PackState = PackState.Packed, VisitImageZipPath = relativePath, VisitImageFileCount = fileCount, VisitImageZipSize = zipSize });
-
-
- //清理文件夹
- Directory.Delete(tempFolderPath, true);
- File.Delete(zipPath);
-
- }
- }
- catch (Exception ex)
- {
- await _subjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.Id == subjectVisitId, u => new SubjectVisit() { PackState = PackState.WaitPack });
-
- }
-
-
-
-
-
- }
-
- }
}
diff --git a/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs b/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs
index 05a50ef5d..d35331b07 100644
--- a/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/Visit/_MapConfig.cs
@@ -25,9 +25,6 @@ namespace IRaCIS.Core.Application.Service
CreateMap()
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName))
- .ForMember(d => d.VisitImageFileCount, u => u.MapFrom(s => s.SubjectVisit.VisitImageFileCount))
- .ForMember(d => d.VisitImageZipPath, u => u.MapFrom(s => s.SubjectVisit.VisitImageZipPath))
- .ForMember(d => d.VisitImageZipSize, u => u.MapFrom(s => s.SubjectVisit.VisitImageZipSize))
.ForMember(d => d.DownloadTime, u => u.MapFrom(s => s.CreateTime))
.ForMember(d => d.DownloadUserName, u => u.MapFrom(s => s.CreateUser.UserName))
.ForMember(d => d.StudyCount, u => u.MapFrom(s => s.SubjectVisit.StudyList.Count()))
@@ -173,9 +170,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.SubjectShortName, u => u.MapFrom(s => s.Subject.ShortName))
.ForMember(d => d.TrialReadingCriterionName, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionName))
.ForMember(d => d.CriterionType, u => u.MapFrom(s => s.TrialReadingCriterion.CriterionType))
- .ForMember(d => d.PatientList, u => u.MapFrom(s => s.Subject.SubjectPatientList))
- .ForMember(d => d.VisitImageZipPath, u => u.MapFrom(s => s.SourceSubjectVisit.VisitImageZipPath))
- .ForMember(d => d.PackState, u => u.MapFrom(s => s.SourceSubjectVisit.PackState));
+ .ForMember(d => d.PatientList, u => u.MapFrom(s => s.Subject.SubjectPatientList));
CreateMap().ReverseMap();
diff --git a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
index ccb6d6aa5..e9d3faf70 100644
--- a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
+++ b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs
@@ -184,17 +184,5 @@ public class SubjectVisit : BaseFullDeleteAuditEntity
public ReadingStatusEnum ReadingStatus { get; set; }
- #region HIR 废弃
- //文件数
- public long VisitImageZipSize { get; set; }
-
- //文件大小
- public int VisitImageFileCount { get; set; }
-
- public string VisitImageZipPath { get; set; } = string.Empty;
-
- //路径
- public PackState PackState { get; set; }
- #endregion
}