diff --git a/IRaCIS.Core.API/Program.cs b/IRaCIS.Core.API/Program.cs
index 7cd490da1..a3bb05fd6 100644
--- a/IRaCIS.Core.API/Program.cs
+++ b/IRaCIS.Core.API/Program.cs
@@ -9,6 +9,8 @@ using IRaCIS.Core.Application.MediatR.Handlers;
using System.Threading.Tasks;
using MassTransit;
using MassTransit.NewIdProviders;
+using System.IO;
+using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.API
{
@@ -56,14 +58,20 @@ namespace IRaCIS.Core.API
+
//// 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, "zh-CN.json"));
+
+
host.Run();
Log.Logger.Warning($"当前环境:{enviromentName}");
@@ -154,5 +162,45 @@ namespace IRaCIS.Core.API
await _mediator.Send(new TrialStateCacheRequest());
}
+
+
+ private static void LoadJsonFile(string filePath)
+ {
+
+ IConfigurationBuilder builder = new ConfigurationBuilder()
+ .AddJsonFile(filePath);
+
+ IConfigurationRoot enConfiguration = builder.Build();
+
+
+
+ foreach (IConfigurationSection section in enConfiguration.GetChildren())
+ {
+ if (filePath.Contains("en-US.json") )
+ {
+ StaticData.En_US_Dic[section.Key] = section.Value;
+
+ }
+ else
+ {
+ StaticData.Zh_CN_Dic[section.Key] = section.Value;
+ }
+ }
+
+
+
+
+
+
+ }
+ public static void WatchJsonFile(string 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.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 5190b6352..9d5f6a754 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -5192,6 +5192,11 @@
鍏ㄥ眬闃呯墖鏄剧ず绫诲瀷
+
+
+ 杞寲鏄剧ず绫诲瀷
+
+
榛樿鍊
@@ -5447,6 +5452,11 @@
鍏ㄥ眬闃呯墖鏄剧ず绫诲瀷
+
+
+ 杞寲鏄剧ず绫诲瀷
+
+
榛樿鍊
@@ -5767,6 +5777,11 @@
鍏ㄥ眬闃呯墖鏄剧ず绫诲瀷
+
+
+ 杞寲鏄剧ず绫诲瀷
+
+
榛樿鍊
@@ -5912,6 +5927,11 @@
鍏ㄥ眬闃呯墖鏄剧ず绫诲瀷
+
+
+ 杞寲鏄剧ず绫诲瀷
+
+
榛樿鍊
diff --git a/IRaCIS.Core.Application/Service/Common/SystemMonitor.cs b/IRaCIS.Core.Application/Service/Common/SystemMonitor.cs
index caa897bd6..72e260849 100644
--- a/IRaCIS.Core.Application/Service/Common/SystemMonitor.cs
+++ b/IRaCIS.Core.Application/Service/Common/SystemMonitor.cs
@@ -64,7 +64,7 @@ namespace IRaCIS.Core.Application.Service.Common
catch (Exception e)
{
- throw new BusinessValidationFailedException("瑙f瀽Json鏂囦欢閰嶇疆鍑虹幇闂");
+ throw new BusinessValidationFailedException("瑙f瀽Json鏂囦欢閰嶇疆鍑虹幇闂:"+e.Message);
}
//榛樿瀛樺偍鐨勮矾寰
@@ -88,7 +88,6 @@ namespace IRaCIS.Core.Application.Service.Common
if (bestDrive == null || ((double)(defaultDrive.TotalSize - defaultDrive.TotalFreeSpace) / defaultDrive.TotalSize) * 100 < switchingRatio)
{
bestStoreRootFolder = defaultStoreRootFolder;
-
}
else
{
diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs
index 9ae6ac8a3..da81b29a2 100644
--- a/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs
+++ b/IRaCIS.Core.Application/Service/ImageAndDoc/DTO/UnionStudyViewDodel.cs
@@ -176,6 +176,24 @@ namespace IRaCIS.Core.Application.Contracts
}
+ public class PreArchiveDicomStudyCommand
+ {
+ [NotDefault]
+ public Guid TrialId { get; set; }
+ [NotDefault]
+ public Guid SiteId { get; set; }
+ [NotDefault]
+ public Guid SubjectId { get; set; }
+ [NotDefault]
+ public Guid SubjectVisitId { get; set; }
+
+ public int FailedFileCount { get; set; }
+ public decimal FileSize { get; set; }
+
+
+ public int FileCount { get; set; }
+ }
+
public class NewArchiveStudyCommand
{
[NotDefault]
@@ -186,6 +204,8 @@ namespace IRaCIS.Core.Application.Contracts
public Guid SubjectId { get; set; }
[NotDefault]
public Guid SubjectVisitId { get; set; }
+ [NotDefault]
+ public Guid StudyMonitorId { get; set; }
public bool IsAdd { get; set; }
diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
index 9f5b4312c..422b5e8cb 100644
--- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
+++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
@@ -9,6 +9,10 @@ using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Infrastructure;
using DocumentFormat.OpenXml.Presentation;
using IRaCIS.Core.Domain.Models;
+using IRaCIS.Core.Application.Filter;
+using IRaCIS.Core.Application.MediatR.Handlers;
+using Microsoft.AspNetCore.Http;
+using Newtonsoft.Json;
namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
@@ -26,10 +30,13 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
private readonly IRepository _dicomstudyRepository;
private readonly IRepository _dictionaryRepository;
+ private readonly IRepository _studyMonitorRepository;
+
+
public StudyService(IEasyCachingProvider provider
, IRepository subjectVisitRepository,
IRepository dicomInstanceRepository,
- IRepository dicomSeriesRepository, IRepository dicomstudyRepository, IRepository dictionaryRepository)
+ IRepository dicomSeriesRepository, IRepository dicomstudyRepository, IRepository dictionaryRepository, IRepository studyMonitorRepository)
{
_provider = provider;
_subjectVisitRepository = subjectVisitRepository;
@@ -37,6 +44,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
_dicomSeriesRepository = dicomSeriesRepository;
_dicomstudyRepository = dicomstudyRepository;
_dictionaryRepository = dictionaryRepository;
+ _studyMonitorRepository = studyMonitorRepository;
}
@@ -75,9 +83,52 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
#endregion
}
+
+ [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
+
+ public async Task PreArchiveDicomStudy(PreArchiveDicomStudyCommand preArchiveStudyCommand)
+ {
+
+
+
+
+ var studyMonitor = new StudyMonitor()
+ {
+ TrialId = preArchiveStudyCommand.TrialId,
+ SiteId = preArchiveStudyCommand.SiteId,
+ SubjectId = preArchiveStudyCommand.SubjectId,
+ SubjectVisitId = preArchiveStudyCommand.SubjectVisitId,
+
+ IsSuccess = false,
+ UploadStartTime = DateTime.Now,
+ IsDicom = true,
+ IP = _userInfo.IP,
+
+ FileSize = preArchiveStudyCommand.FileSize,
+ FileCount = preArchiveStudyCommand.FileCount,
+ FailedFileCount = preArchiveStudyCommand.FailedFileCount,
+
+ };
+
+
+ var addEntity = await _studyMonitorRepository.AddAsync(studyMonitor, true);
+
+ return ResponseOutput.Ok(addEntity.Id);
+
+ }
+
+
+ [UnitOfWork]
+ [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task AddOrUpdateArchiveStudy(NewArchiveStudyCommand incommand)
{
var trialId = incommand.TrialId;
+
+ var studyMonitor = await _studyMonitorRepository.FirstOrDefaultAsync(t => t.Id == incommand.StudyMonitorId);
+ studyMonitor.UploadFinishedTime = DateTime.Now;
+ studyMonitor.ArchiveFinishedTime = DateTime.Now;
+ studyMonitor.IsDicomReUpload = !incommand.IsAdd;
+
if (incommand.IsAdd)
{
var study = _mapper.Map(incommand.Study);
@@ -148,6 +199,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
+ studyMonitor.StudyId = study.Id;
+ studyMonitor.StudyCode = study.StudyCode;
}
else
{
@@ -168,7 +221,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
var series = _mapper.Map(seriesItem);
- series.Id = IdentifierHelper.CreateGuid(series.StudyInstanceUid, series.SeriesInstanceUid, trialId.ToString());
+ series.Id = IdentifierHelper.CreateGuid(series.StudyInstanceUid, series.SeriesInstanceUid, trialId.ToString());
series.StudyId = study.Id;
series.TrialId = incommand.TrialId;
@@ -181,7 +234,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
foreach (var instanceItem in incommand.InstanceList)
{
var insntance = _mapper.Map(instanceItem);
- insntance.Id= IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString());
+ insntance.Id = IdentifierHelper.CreateGuid(insntance.StudyInstanceUid, insntance.SeriesInstanceUid, insntance.SopInstanceUid, trialId.ToString());
insntance.StudyId = study.Id;
insntance.SeriesId = series.Id;
@@ -199,6 +252,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
//鏌愪釜搴忓垪涓嬪皯浜唅nstance
}
+
+
+
await _dicomstudyRepository.SaveChangesAsync();
return ResponseOutput.Ok();
@@ -207,8 +263,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
-
-
[HttpPost]
public async Task> GetDicomAndNoneDicomStudyList(StudyQuery studyQuery)
{
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
index 99f6436b3..6d583a687 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
@@ -640,24 +640,21 @@ namespace IRaCIS.Core.Application
AdditionalAssessment additional = new AdditionalAssessment();
var addTypeList = additional.GetSystemDefeaultAdditionalAssessmentList(updateItem.CriterionType, updateItem.AdditionalAssessmentType);
- foreach (var addType in addTypeList)
+ if(! await _readingQuestionTrialRepository.AnyAsync(t => t.ReadingQuestionCriterionTrialId == updateItem.TrialReadingCriterionId && t.IsAdditional==true))
{
- foreach (var question in addType.AdditionalQuestionList)
+ foreach (var addType in addTypeList)
{
- question.ReadingQuestionCriterionTrialId = updateItem.TrialReadingCriterionId;
- question.TrialId = trialId;
+ foreach (var question in addType.AdditionalQuestionList)
+ {
+ question.ReadingQuestionCriterionTrialId = updateItem.TrialReadingCriterionId;
+ question.TrialId = trialId;
- await _readingQuestionTrialRepository.AddAsync(question);
+ await _readingQuestionTrialRepository.AddAsync(question);
+ }
}
- }
+ }
}
- else
- {
- //鍒犻櫎闄勫姞闂
-
- await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(t => t.ReadingQuestionCriterionTrialId == updateItem.TrialReadingCriterionId && t.IsAdditional == true);
- }
-
+
await _trialCriterionAdditionalAssessmentTypeRepository.UpdatePartialFromQueryAsync(updateItem.Id, t => new TrialCriterionAdditionalAssessmentType() { IsSelected = updateItem.IsSelected });
}
}
diff --git a/IRaCIS.Core.Domain/_Config/_StaticData.cs b/IRaCIS.Core.Domain/_Config/_StaticData.cs
index 41f9c6dee..a6d0b10a6 100644
--- a/IRaCIS.Core.Domain/_Config/_StaticData.cs
+++ b/IRaCIS.Core.Domain/_Config/_StaticData.cs
@@ -1,8 +1,14 @@
-锘縩amespace IRaCIS.Core.Domain.Share;
+锘縰sing System.Collections.Generic;
+
+namespace IRaCIS.Core.Domain.Share;
public static class StaticData
{
+ public static Dictionary En_US_Dic = new Dictionary();
+
+ public static Dictionary Zh_CN_Dic = new Dictionary();
+
#region 瀛楀吀琛ㄩ」鍥哄畾鍊
@@ -19,6 +25,8 @@ public static class StaticData
public static class Folder
{
+
+ public static readonly string Resources = "Resources";
public static readonly string IRaCISDataFolder = "IRaCISData";
public static readonly string TrialDataFolder = "TrialData";