修改归档路径

Test.EIImageViewer
hang 2022-11-17 15:50:51 +08:00
parent 89cf6073f3
commit 385bb1116e
10 changed files with 83 additions and 46 deletions

View File

@ -417,7 +417,7 @@ public static class FileStoreHelper
return Path.Combine(rootPath, StaticData.Folder.TrialDataFolder, trialId.ToString(), siteId.ToString(), subjectId.ToString(), subjectVisitId.ToString(), StaticData.Folder.DicomFolder);
}
public static string GetDicomInstanceFilePath(IWebHostEnvironment _hostEnvironment, Guid trialId, Guid siteId, Guid subjectId, Guid subjectVisitId, Guid studyId, Guid instanceId)
public static (string PhysicalPath, string RelativePath) GetDicomInstanceFilePath(IWebHostEnvironment _hostEnvironment, Guid trialId, Guid siteId, Guid subjectId, Guid subjectVisitId, Guid studyId, Guid instanceId)
{
var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
@ -429,10 +429,17 @@ public static class FileStoreHelper
{
Directory.CreateDirectory(path);
}
return Path.Combine(path, instanceId.ToString() + ".dcm");
var physicalPath = Path.Combine(path, instanceId.ToString() + ".dcm");
var relativePath = $"/{StaticData.Folder.IRaCISDataFolder}/{StaticData.Folder.TrialDataFolder}/{trialId}/{siteId}/{subjectId}/{subjectVisitId}/{StaticData.Folder.DicomFolder}/{studyId}/{instanceId}.dcm";
return (physicalPath, relativePath);
}
// 获取医生通用文件存放路径
public static (string PhysicalPath, string RelativePath) GetDoctorOrdinaryFilePath(IWebHostEnvironment _hostEnvironment, string fileName,Guid doctorId,string attachmentType)

View File

@ -31,6 +31,8 @@
public DateTime UpdateTime { get; set; }
public List<Guid> InstanceList { get; set; } = new List<Guid>();
public List<string> InstancePathList { get; set; } = new List<string>();
}
public class DicomSeriesWithLabelDTO : DicomSeriesDTO

View File

@ -43,7 +43,7 @@ namespace IRaCIS.Core.Application.Services
public async Task<bool> DicomDBDataSaveChange()
{
var success = await _studyRepository.SaveChangesAsync();
var success = await _studyRepository.SaveChangesAsync();
return success;
}
@ -62,17 +62,17 @@ namespace IRaCIS.Core.Application.Services
if (instanceUidList.Any(t => t == sopInstanceUid))
{
return (IdentifierHelper.CreateGuid(studyInstanceUid, addtionalInfo.TrialId.ToString()), string.Empty) ;
return (IdentifierHelper.CreateGuid(studyInstanceUid, addtionalInfo.TrialId.ToString()), string.Empty);
}
var anonymize_AddFixedFiledList = _provider.Get<List<SystemAnonymization>>(StaticData.Anonymize.Anonymize_AddFixedFiled).Value ??new List<SystemAnonymization>();
var anonymize_AddIRCInfoFiledList = _provider.Get<List<SystemAnonymization>>(StaticData.Anonymize.Anonymize_AddIRCInfoFiled).Value ??new List<SystemAnonymization>();
var anonymize_AddFixedFiledList = _provider.Get<List<SystemAnonymization>>(StaticData.Anonymize.Anonymize_AddFixedFiled).Value ?? new List<SystemAnonymization>();
var anonymize_AddIRCInfoFiledList = _provider.Get<List<SystemAnonymization>>(StaticData.Anonymize.Anonymize_AddIRCInfoFiled).Value ?? new List<SystemAnonymization>();
var anonymize_FixedFieldList = _provider.Get<List<SystemAnonymization>>(StaticData.Anonymize.Anonymize_FixedField).Value ?? new List<SystemAnonymization>();
var anonymize_IRCInfoFieldList = _provider.Get<List<SystemAnonymization>>(StaticData.Anonymize.Anonymize_IRCInfoField).Value ?? new List<SystemAnonymization>();
if(anonymize_AddFixedFiledList.Union(anonymize_AddIRCInfoFiledList).Union(anonymize_FixedFieldList).Union(anonymize_IRCInfoFieldList) .Count()==0)
if (anonymize_AddFixedFiledList.Union(anonymize_AddIRCInfoFiledList).Union(anonymize_FixedFieldList).Union(anonymize_IRCInfoFieldList).Count() == 0)
{
throw new BusinessValidationFailedException("未取到缓存匿名化配置数据,上传停止,请联系开发人员核实");
}
@ -113,7 +113,7 @@ namespace IRaCIS.Core.Application.Services
}
if (dicomTag == DicomTag.PatientID)
{
dataset.AddOrUpdate(dicomTag, addtionalInfo.TrialCode+"_"+ addtionalInfo.SubjectCode);
dataset.AddOrUpdate(dicomTag, addtionalInfo.TrialCode + "_" + addtionalInfo.SubjectCode);
}
@ -127,14 +127,14 @@ namespace IRaCIS.Core.Application.Services
dicomSeries.DicomStudy = dicomStudy;
var createtime=DateTime.Now;
var createtime = DateTime.Now;
if (isStudyNeedAdd)
{
// 添加检查
await _studyRepository.AddAsync(dicomStudy);
}
if (isSeriesNeedAdd)
{
dicomSeries.DicomStudy = dicomStudy;
@ -143,12 +143,12 @@ namespace IRaCIS.Core.Application.Services
}
await _instanceRepository.AddAsync(dicomInstance);
var (physicalPath, relativePath) = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
dicomInstance.Path = relativePath;
await _instanceRepository.AddAsync(dicomInstance);
string filePath = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
var samplesPerPixel = dataset.GetSingleValueOrDefault(DicomTag.SamplesPerPixel, string.Empty);
var photometricInterpretation = dataset.GetSingleValueOrDefault(DicomTag.PhotometricInterpretation, string.Empty);
@ -156,23 +156,23 @@ namespace IRaCIS.Core.Application.Services
{
if (dataset.InternalTransferSyntax.IsEncapsulated)
{
await dicomFile.SaveAsync(filePath);
await dicomFile.SaveAsync(physicalPath);
}
else
{
await dicomFile.Clone(DicomTransferSyntax.JPEGLSLossless).SaveAsync(filePath);
await dicomFile.Clone(DicomTransferSyntax.JPEGLSLossless).SaveAsync(physicalPath);
}
}
else
{
if (dataset.InternalTransferSyntax.IsEncapsulated) await dicomFile.SaveAsync(filePath);
else await dicomFile.Clone(DicomTransferSyntax.RLELossless).SaveAsync(filePath); //RLELossless
if (dataset.InternalTransferSyntax.IsEncapsulated) await dicomFile.SaveAsync(physicalPath);
else await dicomFile.Clone(DicomTransferSyntax.RLELossless).SaveAsync(physicalPath); //RLELossless
}
return (dicomInstance.StudyId, dicomStudy.StudyCode);
}
private DicomStudy CreateDicomStudy(DicomDataset dataset, DicomTrialSiteSubjectInfo addtionalInfo, out bool isStudyNeedAdd)
private DicomStudy CreateDicomStudy(DicomDataset dataset, DicomTrialSiteSubjectInfo addtionalInfo, out bool isStudyNeedAdd)
{
string studyInstanceUid = dataset.GetString(DicomTag.StudyInstanceUID);
@ -200,7 +200,7 @@ namespace IRaCIS.Core.Application.Services
var modality = dataset.GetSingleValueOrDefault(DicomTag.Modality, string.Empty);
var dicModalityList = _dictionaryRepository.Where(t => t.Code == "Modality").SelectMany(t => t.ChildList.Select(c => c.Value)).ToList();
var dicModalityList = _dictionaryRepository.Where(t => t.Code == "Modality").SelectMany(t => t.ChildList.Select(c => c.Value)).ToList();
dicomStudy = new DicomStudy
{
@ -251,15 +251,15 @@ namespace IRaCIS.Core.Application.Services
var dbStudyCodeIntMax = _studyRepository.Where(s => s.TrialId == addtionalInfo.TrialId).Select(t => t.Code).DefaultIfEmpty().Max();
//获取缓存中的值 并发的时候,需要记录,已被占用的值 这样其他线程在此占用的最大的值上递增
var cacheMaxCodeInt = _provider.Get<int>($"{addtionalInfo.TrialId }_{ StaticData.CacheKey.StudyMaxCode}").Value;
var cacheMaxCodeInt = _provider.Get<int>($"{addtionalInfo.TrialId}_{StaticData.CacheKey.StudyMaxCode}").Value;
int currentNextCodeInt = cacheMaxCodeInt > dbStudyCodeIntMax ? cacheMaxCodeInt + 1 : dbStudyCodeIntMax + 1;
dicomStudy.Code = currentNextCodeInt;
dicomStudy.StudyCode = AppSettings.GetCodeStr(currentNextCodeInt, nameof(DicomStudy));
dicomStudy.StudyCode = AppSettings.GetCodeStr(currentNextCodeInt, nameof(DicomStudy));
_provider.Set<int>($"{addtionalInfo.TrialId }_{ StaticData.CacheKey.StudyMaxCode}", dicomStudy.Code, TimeSpan.FromMinutes(30));
_provider.Set<int>($"{addtionalInfo.TrialId}_{StaticData.CacheKey.StudyMaxCode}", dicomStudy.Code, TimeSpan.FromMinutes(30));
}

View File

@ -56,11 +56,11 @@ namespace IRaCIS.Core.Application.Services
DicomStudy dicomStudy = await _studyRepository.FirstOrDefaultAsync(s => s.Id == dicomInstance.StudyId).IfNullThrowException();
path = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
var(physicalPath, relativePath) = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
using (var sw = ImageHelper.RenderPreviewJpeg(path))
using (var sw = ImageHelper.RenderPreviewJpeg(physicalPath))
{
var bytes = new byte[sw.Length];
sw.Read(bytes, 0, bytes.Length);
@ -85,11 +85,11 @@ namespace IRaCIS.Core.Application.Services
//}
//else
filePath = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
var (physicalPath, relativePath) = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
using (var sw = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
using (var sw = new FileStream(physicalPath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
var bytes = new byte[sw.Length];
sw.Read(bytes, 0, bytes.Length);

View File

@ -64,7 +64,9 @@ namespace IRaCIS.Core.Application.Services
});
}
var idList = await _instanceRepository.Where(s => s.StudyId == studyId).ToListAsync();//.GroupBy(u => u.SeriesId);
var idList = await _instanceRepository.Where(s => s.StudyId == studyId).OrderBy(t=>t.SeriesId).ThenBy(t => t.InstanceNumber)
.ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
.Select(t=>new {t.SeriesId, t.Id,t.Path}).ToListAsync();//.GroupBy(u => u.SeriesId);
foreach (var item in seriesList)
{
@ -74,8 +76,12 @@ namespace IRaCIS.Core.Application.Services
}
else
{
item.InstanceList = idList.Where(s => s.SeriesId == item.Id).OrderBy(t => t.InstanceNumber)
.ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime).Select(u => u.Id).ToList();
//item.InstanceList = idList.Where(s => s.SeriesId == item.Id).OrderBy(t => t.InstanceNumber)
// .ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime).Select(u => u.Id).ToList();
item.InstanceList = idList.Where(s => s.SeriesId == item.Id).Select(u => u.Id).ToList();
item.InstancePathList = idList.Where(s => s.SeriesId == item.Id).Select(u => u.Path).ToList();
}
}
@ -97,9 +103,9 @@ namespace IRaCIS.Core.Application.Services
DicomStudy dicomStudy = await _studyRepository.FirstOrDefaultAsync(s => s.Id == dicomInstance.StudyId).IfNullThrowException();
path = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
var (physicalPath, relativePath) = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
using (var sw = ImageHelper.RenderPreviewJpeg(path))
using (var sw = ImageHelper.RenderPreviewJpeg(physicalPath))
{
var bytes = new byte[sw.Length];
sw.Read(bytes, 0, bytes.Length);

View File

@ -324,7 +324,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
DicomStudy dicomStudy = await _repository.FirstOrDefaultAsync<DicomStudy>(s => s.Id == dicomInstance.StudyId);
if (dicomStudy != null)
{
path = FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
var( physicalPath ,relativePath )= FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, dicomInstance.Id);
path = physicalPath;
}
}

View File

@ -780,12 +780,12 @@ namespace IRaCIS.Core.Application.Image.QA
instanceIdList.ForEach(t =>
{
var dicomStudy = new DicomStudy() { Id = t.StudyId, SubjectId = t.SubjectId, TrialId = trialId, SiteId = t.SiteId, SubjectVisitId = subjectVisitId };
var path =
var (physicalPath, relativePath) =
FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, t.InstanceId);
if (System.IO.File.Exists(path))
if (System.IO.File.Exists(physicalPath))
{
File.Delete(path);
File.Delete(physicalPath);
}
});
@ -1365,13 +1365,13 @@ namespace IRaCIS.Core.Application.Image.QA
instanceIdList.ForEach(t =>
{
var dicomStudy = new DicomStudy() { Id = t.StudyId, SubjectId = t.SubjectId, TrialId = trialId, SiteId = t.SiteId, SubjectVisitId = subjectVisitId };
var path =
var (physicalPath, relativePath) =
FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, t.InstanceId);
if (System.IO.File.Exists(path))
if (System.IO.File.Exists(physicalPath))
{
File.Delete(path);
File.Delete(physicalPath);
}
});
@ -1428,13 +1428,13 @@ namespace IRaCIS.Core.Application.Image.QA
instanceIdList.ForEach(t =>
{
var dicomStudy = new DicomStudy() { Id = t.StudyId, SubjectId = t.SubjectId, TrialId = trialId, SiteId = t.SiteId, SubjectVisitId = subjectVisitId };
var path =
var(physicalPath, relativePath) =
FileStoreHelper.GetDicomInstanceFilePath(_hostEnvironment, dicomStudy.TrialId, dicomStudy.SiteId, dicomStudy.SubjectId, dicomStudy.SubjectVisitId, dicomStudy.Id, t.InstanceId);
if (System.IO.File.Exists(path))
if (System.IO.File.Exists(physicalPath))
{
File.Delete(path);
File.Delete(physicalPath);
}
});

View File

@ -148,8 +148,17 @@ namespace IRaCIS.Core.Application.Service
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
CreateMap<VisitTask, RECIST1Point1EvaluationOfTumorEfficacyExport>()
.ForMember(o => o.OverallTumorEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstOrDefault().Answer ))
.ForMember(o => o.TargetlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion).FirstOrDefault().Answer))
.ForMember(o => o.NoneTargetlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.NoTargetLesion).FirstOrDefault().Answer))
.ForMember(o => o.IsExistNewlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.NewLesions).FirstOrDefault().Answer))
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.Subject.TrialSite.TrialSiteCode))
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
#endregion

View File

@ -1,5 +1,6 @@
using BeetleX.BNR;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Distributed;
using System.Text.RegularExpressions;
@ -105,9 +106,16 @@ namespace IRaCIS.Application.Services
return findStr;
}
[HttpPost]
public async Task<IActionResult> Get(TestModel testModel)
public async Task Get(TestModel testModel)
{
//update DicomInstance set Path = '/IRaCISData/TrialData/' + cast(DicomInstance.TrialId as varchar) + '/' + DicomInstance.SiteId + '/' + DicomInstance.SubjectId + '/' + DicomInstance.SubjectVisitId + '/Dicom/' + DicomInstance.StudyId + '/' + DicomInstance.Id + '.dcm'
await _repository.BatchUpdateAsync<DicomInstance>(u=>u.Id!=Guid.Empty,t => new DicomInstance() { Path = $"/{StaticData.Folder.IRaCISDataFolder}/{StaticData.Folder.TrialDataFolder}/{t.TrialId}/{t.SiteId}/{t.SubjectId}/{t.SubjectVisitId}/{StaticData.Folder.DicomFolder}/{t.StudyId}/{t.Id}.dcm" });
// Load a document.
//using (var document = DocX.Load(Path.Combine(_hostEnvironment.ContentRootPath, "ReplaceText.docx")))
//{
@ -126,7 +134,7 @@ namespace IRaCIS.Application.Services
// }
//}
return await NpoiWordHelper.TemplateExportWordAsync(Path.Combine(_hostEnvironment.ContentRootPath, "ReplaceText.docx"), new { test = "xiugai", ZZZZ = "ModiffyZZZZ" }, null, _hostEnvironment);
//return await NpoiWordHelper.TemplateExportWordAsync(Path.Combine(_hostEnvironment.ContentRootPath, "ReplaceText.docx"), new { test = "xiugai", ZZZZ = "ModiffyZZZZ" }, null, _hostEnvironment);
//_cache.SetString("test" , "cacheStr");

View File

@ -46,5 +46,8 @@ namespace IRaCIS.Core.Domain.Models
public DateTime CreateTime { get; set; } = DateTime.Now;
public Guid UpdateUserId { get; set; }
public DateTime UpdateTime { get; set; } = DateTime.Now;
public string Path { get; set; }
}
}