From aa9df5838cb82ee08ff87a2ebf3a326e7bf0df43 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Tue, 20 Aug 2024 17:58:24 +0800
Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B7=BB=E5=8A=A0pacs=20?=
=?UTF-8?q?=E5=BD=B1=E5=83=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IRaCIS.Core.Application.xml | 5 +-
.../Service/ImageAndDoc/StudyService.cs | 2 +
.../Service/Visit/DTO/PatientViewModel.cs | 13 +-
.../Service/Visit/DTO/VisitPointViewModel.cs | 12 +-
.../Service/Visit/PatientService.cs | 235 +++++++++++++++++-
5 files changed, 256 insertions(+), 11 deletions(-)
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 1a4367aee..11b44c194 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -15192,11 +15192,14 @@
-
+
提交 患者检查和访视的绑定
+
+
+
diff --git a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
index 6a824473d..adbd3a14c 100644
--- a/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
+++ b/IRaCIS.Core.Application/Service/ImageAndDoc/StudyService.cs
@@ -205,6 +205,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
study.TrialId = incommand.TrialId;
study.SubjectId = incommand.SubjectId;
study.SubjectVisitId = incommand.SubjectVisitId;
+ study.IsFromPACS = false;
//如果因为意外情况,连续点击两次,导致第一次插入了,第二次进来也会插入,在此判断一下
var findStudy = await _dicomstudyRepository.FirstOrDefaultAsync(t => t.Id == study.Id);
@@ -279,6 +280,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
studyMonitor.StudyCode = study.StudyCode;
//特殊处理逻辑
+ study.IsFromPACS = false;
study.Modalities = string.Join("、", incommand.Study.SeriesList.Select(t => t.Modality).Union(study.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct());
SpecialArchiveStudyDeal(study);
modalitys = study.Modalities;
diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs
index 05d8d3fcc..2409b3028 100644
--- a/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Visit/DTO/PatientViewModel.cs
@@ -256,9 +256,9 @@ namespace IRaCIS.Application.Contracts
public string? TrialSiteCode { get; set; }
- public string? TrialSiteName { get; set; }
+ public string? TrialSiteName { get; set; }
- public string? TrialSiteAliasName { get; set; }
+ public string? TrialSiteAliasName { get; set; }
}
@@ -382,7 +382,7 @@ namespace IRaCIS.Application.Contracts
}
- public class SubmitVisitStudyBindingCommand
+ public class VerifyPacsImageCommand
{
[NotDefault]
public Guid TrialId { get; set; }
@@ -396,6 +396,13 @@ namespace IRaCIS.Application.Contracts
public List SCPStudyIdList { get; set; }
}
+ public class SubmitVisitStudyBindingCommand: VerifyPacsImageCommand
+ {
+
+
+ public List ReUploadSCPStudyIdList { get; set; }
+ }
+
public class SubjectVisitSelectQuery
{
[NotDefault]
diff --git a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs
index 92d44de4b..382023c91 100644
--- a/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Visit/DTO/VisitPointViewModel.cs
@@ -264,7 +264,7 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsCriticalSequence { get; set; } = false;
- public int SeriesCount =>SeriesList.Count;
+ public int SeriesCount => SeriesList.Count;
public int InstanceCount { get; set; }
public bool IsDicom { get; set; } = true;
@@ -369,6 +369,16 @@ namespace IRaCIS.Core.Application.Contracts
public List SOPInstanceUIDList { get; set; }
}
+ public class VerifySCPStudyUploadResult
+ {
+ public Guid SCPStudyId { get; set; }
+
+ public string ErrorMesseage { get; set; } = String.Empty;
+
+ public bool AllowUpload { get; set; } = false;
+
+ public bool AllowReUpload { get; set; } = false;
+ }
public class VerifyStudyUploadResult
{
diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs
index 1d98ce922..2953f522f 100644
--- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs
+++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs
@@ -54,10 +54,12 @@ namespace IRaCIS.Application.Services
private readonly IRepository _scpStudyRepository;
private readonly IRepository _subjectRepository;
private readonly IRepository _subjectVisitRepository;
+ private readonly IRepository _dictionaryRepository;
private readonly IDistributedLockProvider _distributedLockProvider;
- public PatientService(IRepository studyRepository, IRepository trialRepository, IRepository patientRepository, IRepository subjectRepository, IRepository subjectVisitRepository, IDistributedLockProvider distributedLockProvider)
+ public PatientService(IRepository studyRepository, IRepository dictionaryRepository, IRepository trialRepository, IRepository patientRepository, IRepository subjectRepository, IRepository subjectVisitRepository, IDistributedLockProvider distributedLockProvider)
{
+ _dictionaryRepository = dictionaryRepository;
_scpStudyRepository = studyRepository;
_trialRepository = trialRepository;
_patientRepository = patientRepository;
@@ -75,7 +77,7 @@ namespace IRaCIS.Application.Services
[HttpPost]
public async Task>> GetSCPImageUploadList(SCPImageUploadQuery inQuery)
{
- var query = _repository.Where(t=>t.TrialId==inQuery.TrialId)
+ var query = _repository.Where(t => t.TrialId == inQuery.TrialId)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CalledAE), t => t.CalledAE.Contains(inQuery.CalledAE))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAEIP), t => t.CallingAEIP.Contains(inQuery.CallingAEIP))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.CallingAE), t => t.CallingAE.Contains(inQuery.CallingAE))
@@ -283,23 +285,120 @@ namespace IRaCIS.Application.Services
+ public async Task> VerifyPacsImage(VerifyPacsImageCommand inCommand)
+ {
+ var trialId = inCommand.TrialId;
+
+ var subjectId = inCommand.SubjectId;
+
+ var isVerifyVisitImageDate = await _repository.Where(t => t.Id == inCommand.TrialId).Select(t => t.IsVerifyVisitImageDate).FirstNotNullAsync();
+
+ var result = new List();
+
+ var visitList = _repository.Where(t => t.SubjectId == inCommand.SubjectId).Select(t => new { t.VisitNum, t.EarliestScanDate, t.LatestScanDate, t.Id }).ToList();
+
+ var currentVisitNum = visitList.First(t => t.Id == inCommand.SubjectVisitId).VisitNum;
+
+ var scpStudyList = _scpStudyRepository.Where(t => inCommand.SCPStudyIdList.Contains(t.Id)).Select(t => new { StudyDate = t.StudyTime, t.Id }).ToList();
+
+ foreach (var waitUploadItem in scpStudyList)
+ {
+ if (isVerifyVisitImageDate)
+ {
+ //小于当前访视 最近的最晚拍片
+ var before = visitList.Where(u => u.VisitNum < currentVisitNum).Max(k => k.LatestScanDate);
+
+ if (before != null && waitUploadItem.StudyDate != null && before > waitUploadItem.StudyDate)
+ {
+
+ // $"当前访视检查时间{waitUploadItem.StudyDate?.ToString("yyyy-MM-dd")}不能早于前序访视检查时间{before?.ToString("yyyy-MM-dd")},请核对检查数据是否有误",
+ result.Add(new VerifySCPStudyUploadResult() { ErrorMesseage = _localizer["Study_VisitBeforePrevError", waitUploadItem.StudyDate?.ToString("yyyy-MM-dd")!, before?.ToString("yyyy-MM-dd")!] });
+ }
+
+ //大于当前访视 最近的最早拍片日期
+ var after = visitList.Where(u => u.VisitNum > currentVisitNum).Min(k => k.EarliestScanDate);
+
+ if (after != null && waitUploadItem.StudyDate != null && after < waitUploadItem.StudyDate)
+ {
+ // $"当前访视检查时间{waitUploadItem.StudyDate?.ToString("yyyy-MM-dd")}不能晚于该访视之后的检查时间{after?.ToString("yyyy-MM-dd")},请核对检查数据是否有误"
+ result.Add(new VerifySCPStudyUploadResult() { ErrorMesseage = _localizer["Study_VisitAfterSubseqError", waitUploadItem.StudyDate?.ToString("yyyy-MM-dd")!, after?.ToString("yyyy-MM-dd")!]});
+ }
+ }
+
+ var verifyStudyInfo = _repository.Where(t => t.TrialId == trialId && t.Id == waitUploadItem.Id).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault();
+
+ var currentStudyResult = new VerifyStudyUploadResult();
+
+ //数据库不存在该检查 允许上传
+ if (verifyStudyInfo == null)
+ {
+ currentStudyResult.AllowUpload = true;
+ }
+ //数据库该项目有该检查 看是否支持重传
+ else
+ {
+ //是同一个受试者 支持重传
+ if (verifyStudyInfo.SubjectId == subjectId && verifyStudyInfo.SubjectVisitId == inCommand.SubjectVisitId)
+ {
+ currentStudyResult.AllowReUpload = true;
+ }
+ //不是同一个受试者
+ else
+ {
+ //有默认值,其实不用写,这里为了好理解
+ currentStudyResult.AllowUpload = false;
+
+ currentStudyResult.AllowReUpload = false;
+
+ //$"此处不可以上传。当前影像检查已经上传给受试者{verifyStudyInfo.SubjectCode}的{verifyStudyInfo.VisitName}"
+ currentStudyResult.ErrorMesseage = _localizer["Study_ImgAlreadyUploaded", verifyStudyInfo.SubjectCode, verifyStudyInfo.VisitName];
+ }
+ }
+ }
+
+
+ return result;
+
+
+ }
+
+
+
///
/// 提交 患者检查和访视的绑定
///
///
+ ///
+ ///
+ ///
///
[HttpPost]
[UnitOfWork]
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
- public async Task SubmitVisitStudyBinding(SubmitVisitStudyBindingCommand inCommand)
+ public async Task SubmitVisitStudyBinding(SubmitVisitStudyBindingCommand inCommand,
+ [FromServices]IRepository _dicomstudyRepository,
+ [FromServices] IRepository _dicomSeriesRepository,
+ [FromServices] IRepository _dicomInstanceRepository)
{
+ //这里要做校验 + 同时验证本地系统里面的影像是否存在pacs推过来的
+
+ var copyCommand = inCommand.Clone();
+ copyCommand.SCPStudyIdList = inCommand.SCPStudyIdList.Union(inCommand.ReUploadSCPStudyIdList).ToList();
+ var verifyResult = await VerifyPacsImage(copyCommand);
+
+ var allowUploadList = verifyResult.Where(u => u.AllowUpload == true).Select(t => t.SCPStudyId).ToList();
+ var allowReUploadList = verifyResult.Where(u => u.AllowReUpload == true).Select(t => t.SCPStudyId).ToList();
+
+ if (inCommand.SCPStudyIdList.All(t => allowUploadList.Contains(t)) && inCommand.ReUploadSCPStudyIdList.All(t => allowReUploadList.Contains(t)))
+ {
+ throw new BusinessValidationFailedException("对接提示: 前端提交的检查有不能上传的,请刷新页面调用验证接口重试!");
+ }
+
var subjectId = inCommand.SubjectId;
var subjectVisitId = inCommand.SubjectVisitId;
var trialId = inCommand.TrialId;
-
-
var @lock = _distributedLockProvider.CreateLock($"StudyCode");
using (await @lock.AcquireAsync())
@@ -308,6 +407,7 @@ namespace IRaCIS.Application.Services
int currentNextCodeInt = dbStudyCodeIntMax + 1;
+ //新增的,上传的
foreach (var scpStudyId in inCommand.SCPStudyIdList)
{
@@ -315,7 +415,6 @@ namespace IRaCIS.Application.Services
if (find != null)
{
-
var newStuty = _mapper.Map(find.SCPStudy);
await _repository.AddAsync(newStuty);
@@ -362,6 +461,93 @@ namespace IRaCIS.Application.Services
}
+ foreach (var scpStudyId in inCommand.ReUploadSCPStudyIdList)
+ {
+
+ var study = await _dicomstudyRepository.FirstOrDefaultAsync(t => t.Id == scpStudyId);
+
+ var instanceIdList = _dicomInstanceRepository.Where(t => t.Id == scpStudyId).Select(t => t.Id).ToList();
+
+ var scpStudy = _scpStudyRepository.Where(t => t.Id == scpStudyId).Include(t=>t.SeriesList).ThenInclude(t=>t.SCPInstanceList).FirstOrDefault();
+
+ //以最后一次为准
+ study.IsFromPACS = true;
+ //特殊处理逻辑
+ study.Modalities = string.Join("、", scpStudy.SeriesList.Select(t => t.Modality).Union(study.Modalities.Split("、", StringSplitOptions.RemoveEmptyEntries)).Distinct());
+
+ SpecialArchiveStudyDeal(study);
+
+
+ // 少了整个序列
+
+ //某个序列下少了instance
+ foreach (var seriesItem in scpStudy.SeriesList)
+ {
+ var seriesId = IdentifierHelper.CreateGuid(seriesItem.StudyInstanceUid, seriesItem.SeriesInstanceUid, trialId.ToString());
+
+ DicomSeries dicomSeries = await _dicomSeriesRepository.FirstOrDefaultAsync(t => t.Id == seriesId);
+
+ //判断重复
+ if (dicomSeries == null)
+ {
+ var series = _mapper.Map(seriesItem);
+
+ series.SeqId = Guid.Empty;
+ series.TrialId = trialId;
+ series.SubjectId = subjectId;
+ series.SubjectVisitId = subjectVisitId;
+
+
+ dicomSeries = await _dicomSeriesRepository.AddAsync(series);
+
+
+
+ foreach (var instanceItem in seriesItem.SCPInstanceList)
+ {
+ var instance = _mapper.Map(instanceItem);
+
+ instance.SeqId = Guid.Empty;
+ instance.TrialId = trialId;
+ instance.SubjectId = subjectId;
+ instance.SubjectVisitId = subjectVisitId;
+
+ await _dicomInstanceRepository.AddAsync(instance);
+ }
+
+ //新的序列 那么 检查的序列数量+1
+ study.SeriesCount += 1;
+
+ study.InstanceCount += seriesItem.SCPInstanceList.Count;
+ }
+ else
+ {
+ //该序列掉了instance
+ dicomSeries.InstanceCount += seriesItem.SCPInstanceList.Count;
+
+ var newInstanceList = seriesItem.SCPInstanceList.Where(t => !instanceIdList.Contains(t.Id));
+
+ foreach (var instanceItem in newInstanceList)
+ {
+ var instance = _mapper.Map(instanceItem);
+
+ instance.SeqId = Guid.Empty;
+ instance.TrialId = trialId;
+ instance.SubjectId = subjectId;
+ instance.SubjectVisitId = subjectVisitId;
+
+ await _dicomInstanceRepository.AddAsync(instance);
+ }
+
+ study.InstanceCount += newInstanceList.Count();
+
+ }
+ }
+
+ await _repository.SaveChangesAsync();
+ await _repository.BatchUpdateAsync(t => t.Id == scpStudy.PatientId, u => new SCPPatient() { SubjectId = subjectId });
+ await _repository.BatchUpdateAsync(t => t.Id == scpStudyId, u => new SCPStudy() { SubjectVisitId = subjectVisitId });
+ }
+
}
@@ -373,6 +559,43 @@ namespace IRaCIS.Application.Services
return ResponseOutput.Ok();
}
+
+ private void SpecialArchiveStudyDeal(DicomStudy study)
+ {
+ #region 特殊逻辑
+
+
+ if (study.PatientBirthDate.Length == 8)
+ {
+ study.PatientBirthDate = $"{study.PatientBirthDate[0]}{study.PatientBirthDate[1]}{study.PatientBirthDate[2]}{study.PatientBirthDate[3]}-{study.PatientBirthDate[4]}{study.PatientBirthDate[5]}-{study.PatientBirthDate[6]}{study.PatientBirthDate[7]}";
+ }
+
+ var dicModalityList = _dictionaryRepository.Where(t => t.Code == "Modality").SelectMany(t => t.ChildList.Select(c => c.Value)).ToList();
+
+
+ var modality = study.Modalities;
+
+ var modalityForEdit = dicModalityList.Contains(modality) ? modality : String.Empty;
+
+ if (modality == "MR")
+ {
+ modalityForEdit = "MRI";
+ }
+
+ if (modality == "PT")
+ {
+ modalityForEdit = "PET";
+ }
+ if (modality == "PT、CT")
+ {
+ modalityForEdit = "PET-CT";
+ }
+
+ study.ModalityForEdit = modalityForEdit;
+ #endregion
+ }
+
+
#endregion
From f8cd361415aa87c377d9efc834604146e8e0c147 Mon Sep 17 00:00:00 2001
From: hang <87227557@qq.com>
Date: Wed, 21 Aug 2024 00:06:36 +0800
Subject: [PATCH 2/5] =?UTF-8?q?=E6=B7=BB=E5=8A=A0FusionCache?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
IRaCIS.Core.API/Progranm.cs | 9 +++++++++
IRaCIS.Core.Application/IRaCIS.Core.Application.csproj | 1 +
.../Service/Inspection/DTO/InspectionModel.cs | 3 +--
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs
index 7ea14af41..e5b925818 100644
--- a/IRaCIS.Core.API/Progranm.cs
+++ b/IRaCIS.Core.API/Progranm.cs
@@ -140,6 +140,7 @@ builder.Services.AddJWTAuthSetup(_configuration);
// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
//builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining());
+#region MassTransit
//masstransit组件 也支持MediatR 中介者模式,但是支持分布式,考虑后续,所以在次替代MediatR
builder.Services.AddMediator(cfg =>
{
@@ -150,6 +151,14 @@ builder.Services.AddMassTransit(cfg =>
{
cfg.UsingInMemory();
});
+#endregion
+
+
+#region FusionCache
+
+builder.Services.AddFusionCache();
+
+#endregion
// EasyCaching 缓存
builder.Services.AddEasyCachingSetup(_configuration);
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj
index 4a29c0a3b..37ecfb7ae 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj
@@ -86,6 +86,7 @@
+
diff --git a/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs b/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs
index 530acadbf..e35d07230 100644
--- a/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs
+++ b/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs
@@ -1,5 +1,4 @@
-using Castle.Core.Internal;
-using IRaCIS.Application.Contracts;
+using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Domain.Share;
From de6098013d8896890b52963e1182dcde3007fb0e Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Wed, 21 Aug 2024 10:46:13 +0800
Subject: [PATCH 3/5] =?UTF-8?q?=E5=AF=BC=E8=A1=A8=E7=AD=BE=E5=90=8Dbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
index ceb1e0de1..6c545b2d4 100644
--- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
+++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
@@ -187,7 +187,7 @@ namespace IRaCIS.Core.Application.Contracts
public DateTime CreateTime { get; set; }
[DictionaryTranslateAttribute("YesOrNo")]
- public bool IsConfirmed { get; set; }
+ public bool IsConfirmed => ConfirmTime != null;
public string RealName { get; set; }
From 0804a05925d36ae9309b55ab36ca7d41fcc55584 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Wed, 21 Aug 2024 12:18:36 +0800
Subject: [PATCH 4/5] =?UTF-8?q?=E5=87=86=E5=A4=87=E6=96=B0=E7=BC=93?=
=?UTF-8?q?=E5=AD=98=E4=B8=B4=E6=97=B6=E5=B7=A5=E4=BD=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BackGroundJob/IRaCISCHangfireJob.cs | 80 +++++++++----------
.../BusinessFilter/TrialResourceFilter.cs | 20 ++---
.../_IRaCIS/_Config/_StaticData.cs | 8 +-
3 files changed, 50 insertions(+), 58 deletions(-)
diff --git a/IRaCIS.Core.Application/BackGroundJob/IRaCISCHangfireJob.cs b/IRaCIS.Core.Application/BackGroundJob/IRaCISCHangfireJob.cs
index 514df5174..6317b4020 100644
--- a/IRaCIS.Core.Application/BackGroundJob/IRaCISCHangfireJob.cs
+++ b/IRaCIS.Core.Application/BackGroundJob/IRaCISCHangfireJob.cs
@@ -9,6 +9,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using SharpCompress.Common;
+using ZiggyCreatures.Caching.Fusion;
namespace IRaCIS.Application.Services.BackGroundJob
{
@@ -21,28 +22,16 @@ namespace IRaCIS.Application.Services.BackGroundJob
Task InitHangfireJobTaskAsync();
}
- public class IRaCISCHangfireJob : IIRaCISHangfireJob
+ public class IRaCISCHangfireJob(IRepository _trialRepository,
+ IEasyCachingProvider _provider,
+ ILogger _logger,
+ IRepository _systemAnonymizationRepository,
+ IRepository _internationalizationRepository,
+ IRepository _trialEmailNoticeConfigRepository
+ ) : IIRaCISHangfireJob
{
public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources);
- private readonly IRepository _trialRepository;
- private readonly IEasyCachingProvider _provider;
- private readonly ILogger _logger;
- private readonly IRepository _systemAnonymizationRepository;
- private readonly IRepository _trialEmailNoticeConfigRepository;
- private readonly IRepository _internationalizationRepository;
-
-
-
- public IRaCISCHangfireJob(IRepository trialRepository, ILogger logger, IEasyCachingProvider provider, IRepository trialEmailNoticeConfigRepository, IRepository internationalizationRepository, IRepository systemAnonymizationRepository)
- {
- _trialRepository = trialRepository;
- _provider = provider;
- _logger = logger;
- _trialEmailNoticeConfigRepository = trialEmailNoticeConfigRepository;
- _internationalizationRepository = internationalizationRepository;
- _systemAnonymizationRepository = systemAnonymizationRepository;
- }
public async Task InitHangfireJobTaskAsync()
{
@@ -52,7 +41,7 @@ namespace IRaCIS.Application.Services.BackGroundJob
//项目状态 立即加载到缓存中
await MemoryCacheTrialStatusAsync();
- await MemoryCacheAnonymizeData();
+ //await MemoryCacheAnonymizeData();
//创建项目缓存 定时任务
@@ -69,29 +58,8 @@ namespace IRaCIS.Application.Services.BackGroundJob
_logger.LogInformation("项目启动 hangfire 任务初始化 执行结束");
}
- ///
- /// 缓存项目状态
- ///
- ///
- public async Task MemoryCacheTrialStatusAsync()
- {
- var list = await _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr })
- .ToListAsync();
- list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(7)));
-
- }
-
- public async Task MemoryCacheAnonymizeData()
- {
- var systemAnonymizationList = await _systemAnonymizationRepository.Where(t => t.IsEnable).ToListAsync();
-
- _provider.Set(StaticData.Anonymize.Anonymize_AddFixedFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed).ToList(), TimeSpan.FromDays(7));
- _provider.Set(StaticData.Anonymize.Anonymize_AddIRCInfoFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
- _provider.Set(StaticData.Anonymize.Anonymize_FixedField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed).ToList(), TimeSpan.FromDays(7));
- _provider.Set(StaticData.Anonymize.Anonymize_IRCInfoField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
- }
@@ -136,6 +104,36 @@ namespace IRaCIS.Application.Services.BackGroundJob
}
+
+
+ #region 废弃 前端上传的时候获取
+
+
+ ///
+ /// 缓存项目状态--之前是启动的时候就获取所有的项目进行缓存,加上定时任务刷新,现在的话,改为是按照需要进行缓存请求数据库
+ ///
+ ///
+ public async Task MemoryCacheTrialStatusAsync()
+ {
+
+ var list = await _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr })
+ .ToListAsync();
+
+ list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(7)));
+
+ }
+ public async Task MemoryCacheAnonymizeData()
+ {
+ var systemAnonymizationList = await _systemAnonymizationRepository.Where(t => t.IsEnable).ToListAsync();
+
+ _provider.Set(StaticData.Anonymize.Anonymize_AddFixedFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed).ToList(), TimeSpan.FromDays(7));
+ _provider.Set(StaticData.Anonymize.Anonymize_AddIRCInfoFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
+ _provider.Set(StaticData.Anonymize.Anonymize_FixedField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed).ToList(), TimeSpan.FromDays(7));
+ _provider.Set(StaticData.Anonymize.Anonymize_IRCInfoField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
+ }
+
+
+ #endregion
}
diff --git a/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs b/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs
index f7dfe2583..f231decaf 100644
--- a/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs
+++ b/IRaCIS.Core.Application/BusinessFilter/TrialResourceFilter.cs
@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Localization;
using System.Text.RegularExpressions;
+using ZiggyCreatures.Caching.Fusion;
using static IRaCIS.Core.Domain.Share.StaticData;
namespace IRaCIS.Core.Application.Filter
@@ -16,36 +17,25 @@ namespace IRaCIS.Core.Application.Filter
{
private readonly IEasyCachingProvider _provider;
private readonly IUserInfo _userInfo;
-
+ private readonly IFusionCache _fusionCache;
public IStringLocalizer _localizer;
private readonly List _trialOptList=new List();
- public TrialResourceFilter(IEasyCachingProvider provider, IStringLocalizer localizer , IUserInfo userInfo, string trialOpt = null, string trialOpt2 = null, string trialOpt3 = null)
+ public TrialResourceFilter(IFusionCache fusionCache, IEasyCachingProvider provider, IStringLocalizer localizer , IUserInfo userInfo, string trialOpt = null, string trialOpt2 = null, string trialOpt3 = null)
{
+ _fusionCache = fusionCache;
_provider = provider;
_userInfo = userInfo;
_localizer = localizer;
- //_trialOpt = trialOpt;
if (!string.IsNullOrWhiteSpace(trialOpt)) _trialOptList.Add(trialOpt.Trim());
if (!string.IsNullOrWhiteSpace(trialOpt2)) _trialOptList.Add(trialOpt2.Trim());
if (!string.IsNullOrWhiteSpace(trialOpt3)) _trialOptList.Add(trialOpt3.Trim());
-
}
-
-
- //public TrialResourceFilter(IEasyCachingProvider provider, IUserInfo userInfo)
- //{
- // _provider = provider;
- // _userInfo = userInfo;
- //}
-
-
-
-
+ StaticData
//优先选择异步的方法
public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs
index 42ab4a9ca..79ccfa568 100644
--- a/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs
+++ b/IRaCIS.Core.Infrastructure/_IRaCIS/_Config/_StaticData.cs
@@ -15,6 +15,7 @@ public static class StaticData
public static Dictionary Log_Locoalize_Dic = new Dictionary();
+ #region 国际化
public static readonly string En_US_Json = "en-US.json";
public static readonly string Zh_CN_Json = "zh-CN.json";
@@ -70,9 +71,11 @@ public static class StaticData
}
+ #endregion
- #region 字典表项固定值
- public static readonly string Title = "Title";
+ #region 字典表项固定值
+
+ public static readonly string Title = "Title";
public static readonly string ReadingType = "ReadingType";
public static readonly string Subspeciality = "Subspeciality";
@@ -80,6 +83,7 @@ public static class StaticData
public static readonly string Criterion = "Criterion";
public static readonly string ReviewType = "ReviewType";
public static readonly string ReadingStandard = "ReadingStandard";
+
#endregion
From 418cc9b4b9fbccfa3e841ed3fb5f2971585b5d79 Mon Sep 17 00:00:00 2001
From: hang <872297557@qq.com>
Date: Wed, 21 Aug 2024 12:24:30 +0800
Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9pacs=20=E9=AA=8C=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
IRaCIS.Core.Application/Service/Visit/PatientService.cs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/IRaCIS.Core.Application/Service/Visit/PatientService.cs b/IRaCIS.Core.Application/Service/Visit/PatientService.cs
index 2953f522f..f812315b5 100644
--- a/IRaCIS.Core.Application/Service/Visit/PatientService.cs
+++ b/IRaCIS.Core.Application/Service/Visit/PatientService.cs
@@ -327,7 +327,7 @@ namespace IRaCIS.Application.Services
var verifyStudyInfo = _repository.Where(t => t.TrialId == trialId && t.Id == waitUploadItem.Id).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault();
- var currentStudyResult = new VerifyStudyUploadResult();
+ var currentStudyResult = new VerifySCPStudyUploadResult();
//数据库不存在该检查 允许上传
if (verifyStudyInfo == null)
@@ -354,6 +354,8 @@ namespace IRaCIS.Application.Services
currentStudyResult.ErrorMesseage = _localizer["Study_ImgAlreadyUploaded", verifyStudyInfo.SubjectCode, verifyStudyInfo.VisitName];
}
}
+
+ result.Add(currentStudyResult);
}