diff --git a/IRaCIS.Core.API/Program.cs b/IRaCIS.Core.API/Program.cs index a3bb05fd6..24f9703c9 100644 --- a/IRaCIS.Core.API/Program.cs +++ b/IRaCIS.Core.API/Program.cs @@ -52,29 +52,27 @@ namespace IRaCIS.Core.API .Build(); + //// Serilog + SerilogExtension.AddSerilogSetup(enviromentName, host.Services); + Log.Logger.Warning($"当前环境:{enviromentName}"); + + NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); - - - - //// Serilog - SerilogExtension.AddSerilogSetup(enviromentName, host.Services); - //缓存项目的状态 匿名化数据 await InitCache(host); - WatchJsonFile(Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, "en-US.json") ); + WatchJsonFile(Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, StaticData.En_US_Json) ); - WatchJsonFile(Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, "zh-CN.json")); + WatchJsonFile(Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources, StaticData.Zh_CN_Json)); host.Run(); - Log.Logger.Warning($"当前环境:{enviromentName}"); } catch (Exception e) @@ -83,46 +81,6 @@ namespace IRaCIS.Core.API Log.Logger.Error(e.InnerException is null ? e.Message + e.StackTrace : e.InnerException?.Message + e.InnerException?.StackTrace); } - - - #region Nlog 废弃 - //var logger = NLog.Web.NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger(); - //try - //{ - // var ihostBuilder = CreateHostBuilder(args); - - // ihostBuilder.UseEnvironment(environment); - - // ihostBuilder.ConfigureAppConfiguration((hostContext, config) => - // { - - // //Console.WriteLine(hostContext.HostingEnvironment.EnvironmentName); - // config.AddJsonFile("appsettings.json", false, true) - // .AddJsonFile($"appsettings.{environment}.json", false, true); - // }); - - // var host = ihostBuilder.Build(); - - // CacheTrialStatus(host); - - // host.Run(); - - //} - //catch (Exception exception) - //{ - // //NLog: catch setup errors - // logger.Error(exception, "Stopped program because of exception"); - //} - //finally - //{ - // // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux) - // NLog.LogManager.Shutdown(); - //} - - #endregion - - - } public static IHostBuilder CreateHostBuilder(string[] args) => @@ -141,17 +99,8 @@ namespace IRaCIS.Core.API //webBuilder.UseSerilog();//在宿主机启动的时候配置serilog,与微软ILogger进行整合 webBuilder.UseStartup(); }).UseSerilog() - .UseServiceProviderFactory(new AutofacServiceProviderFactory());//使用Autofac替代本身容器 - //ConfigureLogging(logging => - //{ - // logging.ClearProviders(); - // logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); - //}) - //.UseNLog() - // NLog: Setup NLog for Dependency injection; - - - + .UseServiceProviderFactory(new AutofacServiceProviderFactory()); + private static async Task InitCache(IHost host) { @@ -176,7 +125,7 @@ namespace IRaCIS.Core.API foreach (IConfigurationSection section in enConfiguration.GetChildren()) { - if (filePath.Contains("en-US.json") ) + if (filePath.Contains(StaticData.En_US_Json) ) { StaticData.En_US_Dic[section.Key] = section.Value; @@ -195,11 +144,13 @@ namespace IRaCIS.Core.API } public static void WatchJsonFile(string filePath) { + LoadJsonFile(filePath); + + FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(filePath), Path.GetFileName(filePath)); watcher.Changed += (sender, e) => LoadJsonFile(filePath); watcher.EnableRaisingEvents = true; - LoadJsonFile(filePath); } } diff --git a/IRaCIS.Core.API/_ServiceExtensions/Serilog/SerilogSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/Serilog/SerilogSetup.cs index f4af9e13a..f0740dbbf 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/Serilog/SerilogSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/Serilog/SerilogSetup.cs @@ -36,10 +36,10 @@ namespace IRaCIS.Core.API config.WriteTo.Email(new EmailConnectionInfo() { EmailSubject = "绯荤粺璀﹀憡,璇烽熼熸煡鐪!",//閭欢鏍囬 - FromEmail = "iracis_grr@163.com",//鍙戜欢浜洪偖绠 - MailServer = "smtp.163.com",//smtp鏈嶅姟鍣ㄥ湴鍧 - NetworkCredentials = new NetworkCredential("iracis_grr@163.com", "XLWVQKZAEKLDWOAH"),//涓や釜鍙傛暟鍒嗗埆鏄彂浠朵汉閭涓庡鎴风鎺堟潈鐮 - Port = 25,//绔彛鍙 + FromEmail = "test@extimaging.com",//鍙戜欢浜洪偖绠 + MailServer = "smtp.qiye.aliyun.com",//smtp鏈嶅姟鍣ㄥ湴鍧 + NetworkCredentials = new NetworkCredential("test@extimaging.com", "SHzyyl2021"),//涓や釜鍙傛暟鍒嗗埆鏄彂浠朵汉閭涓庡鎴风鎺堟潈鐮 + Port = 465,//绔彛鍙 ToEmail = "872297557@qq.com"//鏀朵欢浜 }, restrictedToMinimumLevel: LogEventLevel.Error, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [ {Level} {ClientIp} {ClientAgent} {TokenUserRealName} {TokenUserType} ] || [path: {RequestPath} arguments: {RequestBody}] {SourceContext:l} || {Message} || {Exception} ||end {NewLine})"); 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..ac3691d2e 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) + // 灏戜簡鏁翠釜搴忓垪 + + //鏌愪釜搴忓垪涓嬪皯浜唅nstance + 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); + + //鏂扮殑搴忓垪 閭d箞 妫鏌ョ殑搴忓垪鏁伴噺+1 + study.SeriesCount += 1; + + + } + else + { + //璇ュ簭鍒楁帀浜唅nstance + 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; + } - // 灏戜簡鏁翠釜搴忓垪 - //鏌愪釜搴忓垪涓嬪皯浜唅nstance } - - await _dicomstudyRepository.SaveChangesAsync(); return ResponseOutput.Ok(); @@ -629,7 +655,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc /// 鎵归噺楠岃瘉 妫鏌ユ槸鍚﹀彲浠ヤ笂浼 骞跺憡鐭ュ師鍥 /// [HttpPost] - public (List, object?) VerifyStudyAllowUpload(VerifyUploadOrReupload verifyInfo) + public IResponseOutput> VerifyStudyAllowUpload(VerifyUploadOrReupload verifyInfo) { var trialInfo = _repository.Where().FirstOrDefault(t => t.Id == verifyInfo.TrialId).IfNullThrowException(); @@ -677,13 +703,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc var systemAnonymizationList = _repository.Where(t => t.IsEnable).ToList(); - return (result, new + return ResponseOutput.Ok>(result, new { DicomStoreInfo = otherData, AnonymizeFixedList = systemAnonymizationList.Where(t => t.IsFixed).ToList(), AnonymizeNotFixedList = systemAnonymizationList.Where(t => t.IsFixed == false).ToList() - } - ); + }); } @@ -738,7 +763,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/TrialSiteUser/_MapConfig.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs index 6dab84b71..4ec110bde 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig.cs @@ -162,7 +162,9 @@ namespace IRaCIS.Core.Application.Service CreateMap(); - CreateMap().ForMember(t => t.TrialId, u => u.MapFrom(c => c.Id)) + var isEn_Us = false; + + CreateMap().ForMember(t => t.TrialId, u => u.MapFrom(c => c.Id)) .ForMember(t => t.TrialCriterionIds, u => u.MapFrom(c => c.ReadingQuestionCriterionTrialList.Where(v =>v.IsConfirm).OrderBy(x=>x.ShowOrder).Select(r => r.Id))) .ForMember(t => t.TrialCriterionNames, u => u.MapFrom(c => c.ReadingQuestionCriterionTrialList.Where(v => v.IsConfirm).OrderBy(x => x.ShowOrder).Select(r => r.CriterionName))) .ForMember(t => t.ClinicalDataTrialSetIds, u => u.MapFrom(c => c.clinicalDataTrialSets.Where(v => v.IsConfirm).Select(r => r.Id))) 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; } diff --git a/IRaCIS.Core.Domain/_Config/_StaticData.cs b/IRaCIS.Core.Domain/_Config/_StaticData.cs index a6d0b10a6..c77d20da2 100644 --- a/IRaCIS.Core.Domain/_Config/_StaticData.cs +++ b/IRaCIS.Core.Domain/_Config/_StaticData.cs @@ -1,4 +1,6 @@ -锘縰sing System.Collections.Generic; +锘縰sing System; +using System.Collections.Generic; +using System.IO; namespace IRaCIS.Core.Domain.Share; @@ -10,6 +12,12 @@ public static class StaticData public static Dictionary Zh_CN_Dic = new Dictionary(); + public static readonly string En_US_Json = "en-US.json"; + public static readonly string Zh_CN_Json = "zh-CN.json"; + + + + #region 瀛楀吀琛ㄩ」鍥哄畾鍊 public static readonly string Title = "Title";