From 8cccb5da36bc92abd0f6512468c33ad19c0c9bf3 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 5 Dec 2023 11:27:55 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E8=87=B4?= =?UTF-8?q?=E6=80=A7=E6=A0=B8=E6=9F=A5=E5=9B=BD=E9=99=85=E5=8C=96=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/appsettings.Test_IRC.json | 11 ---------- .../ConsistencyVerificationHandler.cs | 21 +++++++++++++++---- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/IRaCIS.Core.API/appsettings.Test_IRC.json b/IRaCIS.Core.API/appsettings.Test_IRC.json index 1563831a3..e75753b45 100644 --- a/IRaCIS.Core.API/appsettings.Test_IRC.json +++ b/IRaCIS.Core.API/appsettings.Test_IRC.json @@ -37,17 +37,6 @@ } }, - "AliyunOSS": { - "RegionId": "cn-shanghai", - "Endpoint": "https://oss-cn-shanghai.aliyuncs.com", - "AccessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ", - "AccessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio", - "BucketName": "zy-irc-test-store", - "RoleArn": "acs:ram::1899121822495495:role/oss-upload", - "ViewEndpoint": "https://zy-irc-test-store.oss-cn-shanghai.aliyuncs.com", - "Region": "oss-cn-shanghai" - }, - "BasicSystemConfig": { "OpenUserComplexPassword": false, diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index 0373eef90..b1f7858c7 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -226,7 +226,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers num++; //影像检查(EDC 缺少) ConsistencyVerification_EdcL - if (_userInfo.IsEn_Us) + if (_userInfo.IsEn_Us) { dialogMsg.AppendLine($"
{num}. {item.StudyDate} {item.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_EdcL")}
"); } @@ -261,9 +261,22 @@ namespace IRaCIS.Core.Application.MediatR.Handlers dialogMsg.AppendLine($"
"); dialogMsg.AppendLine(@$"
{StaticData.International("ConsistencyVerification_Desc")}
"); - //---根据导入的一致性核查数据,请确认本访视以下不一致检查项信息: - dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + String.Join(" | ", dbExceptExcel.Select(t => $"{StaticData.International("ConsistencyVerification_Edc")}{t.StudyDate} {t.Modality} ")) + " | " - + String.Join(" | ", excelExceptDB.Select(t => $"{StaticData.International("ConsistencyVerification_IrcLi")}{t.StudyDate} {t.Modality}")); + if (_userInfo.IsEn_Us) + { + //---根据导入的一致性核查数据,请确认本访视以下不一致检查项信息: + dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + + String.Join(" | ", dbExceptExcel.Select(t => $"{t.StudyDate} {t.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_Edc")}")) + " | " + + String.Join(" | ", excelExceptDB.Select(t => $"{t.StudyDate} {t.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_IrcLi")}")); + } + else + { + //---根据导入的一致性核查数据,请确认本访视以下不一致检查项信息: + dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + + String.Join(" | ", dbExceptExcel.Select(t => $"{StaticData.International("ConsistencyVerification_Edc")}{t.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{t.Modality}{StaticData.International("ConsistencyVerification_ImgC")}")) + " | " + + String.Join(" | ", excelExceptDB.Select(t => $"{StaticData.International("ConsistencyVerification_IrcLi")}{t.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{t.Modality}{StaticData.International("ConsistencyVerification_ImgC")}")); + } + + //新增一致性核查质疑记录 From a9cf5555136439bc2d5fa9c9508da7cda54145a1 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Mon, 4 Dec 2023 15:32:25 +0800 Subject: [PATCH 02/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0OSS=20=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Application/Helper/OSSService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index 66ecfbbec..47ad9e321 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -104,11 +104,11 @@ namespace IRaCIS.Core.Application.Helper - public OSSService(IOptionsMonitor options) + public OSSService(IOptionsMonitor options) { var ossOptions = options.CurrentValue; - _OSSConfig = ossOptions; + _OSSConfig = ossOptions.AliyunOSS; _ossClient = new OssClient(_OSSConfig.endPoint, _OSSConfig.accessKeyId, _OSSConfig.accessKeySecret); From adff45de00afaf6294a723e487992df1013319d7 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 5 Dec 2023 13:43:37 +0800 Subject: [PATCH 03/14] =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7=E6=A0=B8?= =?UTF-8?q?=E6=9F=A5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ConsistencyVerificationHandler.cs | 60 ++++--------------- 1 file changed, 10 insertions(+), 50 deletions(-) diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index b1f7858c7..1a4a9399b 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -5,6 +5,7 @@ using Newtonsoft.Json; using MediatR; using System.Linq.Expressions; using System.Text; +using Microsoft.Extensions.Localization; namespace IRaCIS.Core.Application.MediatR.Handlers { @@ -17,6 +18,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers private readonly IRepository _trialSiteRepository; private readonly IMapper _mapper; private readonly IRepository _noneDicomStudyRepository; + public IStringLocalizer _localizer { get; set; } /// /// 构造函数注入 @@ -25,7 +27,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers public ConsistencyVerificationHandler(IRepository studyRepository, IUserInfo userInfo, IRepository subjectRepository, IRepository subjectVisitRepository, IRepository trialSiteRepository, IRepository noneDicomStudyRepository, - IMapper mapper) + IMapper mapper, IStringLocalizer localizer) { _noneDicomStudyRepository = noneDicomStudyRepository; _studyRepository = studyRepository; @@ -34,6 +36,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers _subjectVisitRepository = subjectVisitRepository; _trialSiteRepository = trialSiteRepository; _mapper = mapper; + _localizer = localizer; } async Task IRequestHandler.Handle(ConsistencyVerificationRequest request, CancellationToken cancellationToken) @@ -121,16 +124,8 @@ namespace IRaCIS.Core.Application.MediatR.Handlers { num++; - if (_userInfo.IsEn_Us) - { - dialogMsg.AppendLine($"
{num}. {item.StudyDate} {item.Modality} {StaticData.International("ConsistencyVerification_ImgC")}
"); + dialogMsg.AppendLine($"
{num}. {_localizer["ConsistencyVerification_ImgC", item.StudyDate, item.Modality]}
"); - } - else - { - dialogMsg.AppendLine($"
{num}. {item.StudyDate} {StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_ImgC")}
"); - - } paramInfoList.Add(new ParamInfoDto() { @@ -225,61 +220,26 @@ namespace IRaCIS.Core.Application.MediatR.Handlers { num++; //影像检查(EDC 缺少) ConsistencyVerification_EdcL - - if (_userInfo.IsEn_Us) - { - dialogMsg.AppendLine($"
{num}. {item.StudyDate} {item.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_EdcL")}
"); - } - else - { - dialogMsg.AppendLine($"
{num}. {StaticData.International("ConsistencyVerification_EdcL")}{item.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_ImgC")}
"); - - } - + dialogMsg.AppendLine($"
{num}. {_localizer["ConsistencyVerification_EdcL", item.StudyDate, item.Modality]}
"); } foreach (var item in excelExceptDB) { num++; - // 影像检查(IRC 缺少) - - if (_userInfo.IsEn_Us) - { - dialogMsg.AppendLine($"
{num}. {item.StudyDate} {item.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_IrcL")}
"); - - } - else - { - dialogMsg.AppendLine($"
{num}. {StaticData.International("ConsistencyVerification_IrcL")}{item.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_ImgC")}
"); - - } - + dialogMsg.AppendLine($"
{num}. {_localizer["ConsistencyVerification_IrcLi", item.StudyDate, item.Modality]}
"); } dialogMsg.AppendLine($"
"); dialogMsg.AppendLine(@$"
{StaticData.International("ConsistencyVerification_Desc")}
"); - if (_userInfo.IsEn_Us) - { - //---根据导入的一致性核查数据,请确认本访视以下不一致检查项信息: - dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + - String.Join(" | ", dbExceptExcel.Select(t => $"{t.StudyDate} {t.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_Edc")}")) + " | " - + String.Join(" | ", excelExceptDB.Select(t => $"{t.StudyDate} {t.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_IrcLi")}")); - } - else - { - //---根据导入的一致性核查数据,请确认本访视以下不一致检查项信息: - dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + - String.Join(" | ", dbExceptExcel.Select(t => $"{StaticData.International("ConsistencyVerification_Edc")}{t.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{t.Modality}{StaticData.International("ConsistencyVerification_ImgC")}")) + " | " - + String.Join(" | ", excelExceptDB.Select(t => $"{StaticData.International("ConsistencyVerification_IrcLi")}{t.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{t.Modality}{StaticData.International("ConsistencyVerification_ImgC")}")); - } - + dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + + String.Join(" | ", dbExceptExcel.Select(t => $"{_localizer["ConsistencyVerification_EdcL", t.StudyDate, t.Modality]}")) + " | " + + String.Join(" | ", excelExceptDB.Select(t => $"{_localizer["ConsistencyVerification_IrcLi", t.StudyDate, t.Modality]}")); //新增一致性核查质疑记录 - dbSV.CheckState = CheckStateEnum.CVIng; dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply; From c390997f7923b100de15eae40941a8fef51539bd Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 5 Dec 2023 14:19:21 +0800 Subject: [PATCH 04/14] =?UTF-8?q?=E6=B8=85=E7=90=86=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_ServiceExtensions/AutofacModuleSetup.cs | 1 - .../AOP/AsyncInterceptor.cs | 97 - IRaCIS.Core.Application/AOP/QANoticeAOP.cs | 499 ------ .../AOP/TrialStatusAutofacAOP.cs | 89 - .../BusinessFilter/LogActionFilter.cs | 81 - .../BusinessFilter/TrialAuditFilter.cs | 1575 ----------------- .../IRaCIS.Core.Application.xml | 2 +- .../Service/TrialSiteUser/TrialSiteService.cs | 1 - .../Service/Visit/SubjectService.cs | 1 - 9 files changed, 1 insertion(+), 2345 deletions(-) delete mode 100644 IRaCIS.Core.Application/AOP/AsyncInterceptor.cs delete mode 100644 IRaCIS.Core.Application/AOP/QANoticeAOP.cs delete mode 100644 IRaCIS.Core.Application/AOP/TrialStatusAutofacAOP.cs delete mode 100644 IRaCIS.Core.Application/BusinessFilter/LogActionFilter.cs delete mode 100644 IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs diff --git a/IRaCIS.Core.API/_ServiceExtensions/AutofacModuleSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/AutofacModuleSetup.cs index 3435a738a..015405bf1 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/AutofacModuleSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/AutofacModuleSetup.cs @@ -1,7 +1,6 @@ using Autofac; using Autofac.Extras.DynamicProxy; using IRaCIS.Core.Application; -using IRaCIS.Core.Application.AOP; using IRaCIS.Core.Application.BackGroundJob; using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Http; diff --git a/IRaCIS.Core.Application/AOP/AsyncInterceptor.cs b/IRaCIS.Core.Application/AOP/AsyncInterceptor.cs deleted file mode 100644 index d08f1649f..000000000 --- a/IRaCIS.Core.Application/AOP/AsyncInterceptor.cs +++ /dev/null @@ -1,97 +0,0 @@ -using Castle.DynamicProxy; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; - -namespace IRaCIS.Core.Application.AOP -{ - public abstract class AsyncInterceptorBase : IInterceptor - { - public AsyncInterceptorBase() - { - } - - public void Intercept(IInvocation invocation) - { - BeforeProceed(invocation); - invocation.Proceed(); - if (IsAsyncMethod(invocation.MethodInvocationTarget)) - { - invocation.ReturnValue = InterceptAsync((dynamic)invocation.ReturnValue, invocation); - } - else - { - AfterProceedSync(invocation); - } - } - - private bool CheckMethodReturnTypeIsTaskType(MethodInfo method) - { - var methodReturnType = method.ReturnType; - if (methodReturnType.IsGenericType) - { - if (methodReturnType.GetGenericTypeDefinition() == typeof(Task<>) || - methodReturnType.GetGenericTypeDefinition() == typeof(ValueTask<>)) - return true; - } - else - { - if (methodReturnType == typeof(Task) || - methodReturnType == typeof(ValueTask)) - return true; - } - return false; - } - - private bool IsAsyncMethod(MethodInfo method) - { - bool isDefAsync = Attribute.IsDefined(method, typeof(AsyncStateMachineAttribute), false); - bool isTaskType = CheckMethodReturnTypeIsTaskType(method); - bool isAsync = isDefAsync && isTaskType; - - return isAsync; - } - - protected object ProceedAsyncResult { get; set; } - - - private async Task InterceptAsync(Task task, IInvocation invocation) - { - await task.ConfigureAwait(false); - await AfterProceedAsync(invocation, false); - } - - private async Task InterceptAsync(Task task, IInvocation invocation) - { - ProceedAsyncResult = await task.ConfigureAwait(false); - await AfterProceedAsync(invocation, true); - return (TResult)ProceedAsyncResult; - } - - private async ValueTask InterceptAsync(ValueTask task, IInvocation invocation) - { - await task.ConfigureAwait(false); - await AfterProceedAsync(invocation, false); - } - - private async ValueTask InterceptAsync(ValueTask task, IInvocation invocation) - { - ProceedAsyncResult = await task.ConfigureAwait(false); - await AfterProceedAsync(invocation, true); - return (TResult)ProceedAsyncResult; - } - - protected virtual void BeforeProceed(IInvocation invocation) { } - - protected virtual void AfterProceedSync(IInvocation invocation) { } - - protected virtual Task AfterProceedAsync(IInvocation invocation, bool hasAsynResult) - { - return Task.CompletedTask; - } - } -} diff --git a/IRaCIS.Core.Application/AOP/QANoticeAOP.cs b/IRaCIS.Core.Application/AOP/QANoticeAOP.cs deleted file mode 100644 index 0e80ae3a4..000000000 --- a/IRaCIS.Core.Application/AOP/QANoticeAOP.cs +++ /dev/null @@ -1,499 +0,0 @@ -//using System; -//using Castle.DynamicProxy; -//using IRaCIS.Core.Application.Contracts.Dicom.DTO; -//using IRaCIS.Core.Infra.EFCore; - -//using System.Linq; -//using IRaCIS.Core.Domain.Models; -//using IRaCIS.Core.Domain.Share; - -//namespace IRaCIS.Core.API.Utility.AOP -//{ -//#pragma warning disable -// public class QANoticeAOP : IInterceptor -// { -// private readonly IRepository _qaNoticeRepository; - -// private readonly IRepository _studyRepository; -// private readonly IRepository _userTrialRepository; -// private readonly IRepository _userTrialSiteRepository; -// private readonly IUserInfo _userInfo; - -// public QANoticeAOP(IRepository qaNoticeRepository, -// IUserInfo userInfo, IRepository studyRepository, IRepository userTrialRepository, IRepository userTrialSiteRepository) -// { -// _qaNoticeRepository = qaNoticeRepository; - -// _studyRepository = studyRepository; -// _userTrialRepository = userTrialRepository; -// _userTrialSiteRepository = userTrialSiteRepository; -// _userInfo = userInfo; -// } - -// public void Intercept(IInvocation invocation) -// { -// //处理拦截的方法 -// invocation.Proceed(); - -// if (invocation.Method.Name == "UpdateStudyStatus") -// { -// var studyStatus = invocation.Arguments[0] as StudyStatusDetailCommand; - -// var study = _studyRepository.FirstOrDefault(t=>t.Id==studyStatus.StudyId); - - -// if (study.Status == (int)StudyStatus.Uploaded) -// { -// _qaNoticeRepository.Add(new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, - -// NoticeTypeEnum = NoticeType.NotNeedNotice, -// NeedDeal = false, -// StudyStatusStr = "Uploaded", -// Message = $"CRC : {_userInfo.RealName} has uploaded {study.StudyCode} ", -// SendTime = DateTime.Now, -// }); -// } - -// #region 处理QA通知模块 - -// //查询项目的参与者 和 负责site下CRC用户 -// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList(); - -// // 找到该study 关联Site 下的CRC - -// var crcList = _userTrialSiteRepository.Where(t => -// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList(); - - -// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList(); - -// var pm = trialUserList.FirstOrDefault(t => t.User.UserTypeEnum == UserTypeEnum.ProjectManager); - - - - -// // CRC =>QA -// if (studyStatus.Status == (int)StudyStatus.QARequested) -// { -// //找出当前操作的CRC -// //PM 或者admin可以代替CRC角色 不能从CRC列表中查询用户 -// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id); - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, - -// //FromUser = currentCRC.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentCRC.UserType, -// NoticeTypeEnum = NoticeType.CRC_RequestToQA_NoticeQA, -// NeedDeal = true, -// StudyStatusStr = "QA Requested", -// Message = -// $"CRC -> QA : {_userInfo.RealName} request QA {study.StudyCode} , Inquiry can be performed! ", -// SendTime = DateTime.Now, -// }; - -// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName + " / " + t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.User.UserTypeRole.UserTypeShortName -// })); - -// _qaNoticeRepository.Add(notice); - -// //DealRequestToQA(study.Id); - -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); -// } - -// // QA =>CRC 向CRC推送消息影像有问题 同时作为 requestToQA 的边界 -// else if (studyStatus.Status == (int)StudyStatus.QAing) -// { -// //找出当前操作的QA 如果是pm 或者admin 代替操作 此时会有问题 所以 谁代替,就以谁的名义执行 -// //var currentQA = qaList.First(t => t.UserId == _userInfo.Id); -// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id); - -// //在项目CRC列表中筛选出 负责该study关联 site的CRC -// var siteCRCList = _userTrialSiteRepository.Where(t => -// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList(); - -// //查询项目的参与者 和 负责site下CRC用户 - - - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentQA.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentQA.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.QA_InQA_NoticeCRC, -// NeedDeal = true, -// StudyStatusStr = "In QA", -// Message = $"QA -> CRC : {_userInfo.RealName} inquiry {study.StudyCode} ", -// SendTime = DateTime.Now, -// }; - -// siteCRCList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName + " / " + t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.UserTypeRole.UserTypeShortName -// })); - -// //添加 发送给CRC的消息 消息和CRC是 一对多 -// _qaNoticeRepository.Add(notice); - - -// //处理 消息 标记已处理 -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && -// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA)).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); - - -// } -// // QA =>QA 给自己的消息 通知需要匿名化 同时作为 requestToQA 的边界 -// else if (studyStatus.Status == (int)StudyStatus.QAFinish) -// { - -// //找出当前操作的QA 如果是pm 或者admin 代替操作 此时会有问题 所以 谁代替,就以谁的名义执行 -// //var currentQA = qaList.First(t => t.UserId == _userInfo.Id); -// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id); - -// //发送给当前项目QA列表 - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentQA.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentQA.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.QA_QAPass_NoticeQA, -// NeedDeal = true, -// StudyStatusStr = "QA-Passed", -// Message = -// $"QA -> QA : {_userInfo.RealName} inquiry {study.StudyCode} finished,Anonymization can be performed!", -// SendTime = DateTime.Now, -// }; - -// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName+" / "+t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.User.UserTypeRole.UserTypeShortName -// })); - -// _qaNoticeRepository.Add(notice); - -// //处理 消息 标记已处理 存在意外情况 qa发给CRC的 但是qa里面设置了 通过或者不通过 此时qa发送的消息也设置为已处理 -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && -// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA || - -// t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC || -// t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC || -// t.NoticeTypeEnum == NoticeType.QA_AddQARecord_NoticeCRC)).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); - - -// } -// // QA =>CRC 暂时不用发送消息给CRC 因为CRC 暂时没有入口回复 同时作为 requestToQA 的边界 -// else if (studyStatus.Status == (int)StudyStatus.QAFInishNotPass) -// { - -// _qaNoticeRepository.Add(new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.NotNeedNotice, -// NeedDeal = false, -// StudyStatusStr = "QA-Failed", -// Message = $"QA : {_userInfo.RealName} set {study.StudyCode} QA-Failed !", -// SendTime = DateTime.Now, -// }); - -// //处理 消息 标记已处理 -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && -// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA || - - -// t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC || -// t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC || -// t.NoticeTypeEnum == NoticeType.QA_AddQARecord_NoticeCRC)).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); -// } - -// #endregion - - -// } - -// else if (invocation.Method.Name == "ReUploadSameStudy") -// { -// var studyId = Guid.Parse(invocation.Arguments[0].ToString()); - -// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId); -// var status = study.Status; - -// //处理CRC 重传时 QA消息 - -// if (status == (int)StudyStatus.QAing) -// { -// //查询项目的参与者 和 负责site下CRC用户 -// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList(); - -// // 找到该study 关联Site 下的CRC - -// var crcList = _userTrialSiteRepository.Where(t => -// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList(); - -// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList(); - -// //CRC =>QA CRC的职能被PM 或者admin代替 -// //if (_userInfo.UserTypeEnumInt == (int)UserType.ClinicalResearchCoordinator) -// { -// //PM 或者admin可以代替CRC角色 不能从CRC列表中查询用户 -// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id); - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentCRC.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentCRC.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.CRC_ReUpload_NoticeQA, -// NeedDeal = true, -// Message = $"CRC -> QA :{_userInfo.RealName} has reuploaded {study.StudyCode} , Need to be inquiry again", -// SendTime = DateTime.Now -// }; - -// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName+" / "+t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.User.UserTypeRole.UserTypeShortName -// })); - -// _qaNoticeRepository.Add(notice); - -// //这里作为 QA 设置 Inqa 状态的回复 或者QA和CRC对话的 -// var needDealNoticeList = _qaNoticeRepository.Where(t => t.SubjectVisitId == study.Id && t.NeedDeal -// && (t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC || t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC)) -// .ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); - -// } -// } -// else -// { -// //不是QAing 的重传 不发送qa消息 -// return; -// } - - - -// } - -// else if (invocation.Method.Name == "DicomAnonymize") -// { -// var studyId = Guid.Parse(invocation.Arguments[0].ToString()); - -// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId); - -// #region 处理QA通知 匿名化完毕 通知PM - -// //查询项目的参与者 和 负责site下CRC用户 -// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList(); - -// // 找到该study 关联Site 下的CRC - -// var crcList = _userTrialSiteRepository.Where(t => -// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList(); - -// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList(); - -// // -// var pm = trialUserList.FirstOrDefault(t => t.User.UserTypeEnum == UserTypeEnum.ProjectManager); - - -// //找出当前操作的QA 如果是pm 或者admin 代替操作 此时会有问题 所以 谁代替,就以谁的名义执行 -// //var currentQA = trialUserList.First(t => -// // t.UserTypeEnum == UserType.IQC && t.UserId == _userInfo.Id); -// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id); - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentQA.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentQA.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.QA_Anonymized_NoticeQA, -// NeedDeal = true, -// StudyStatusStr = "Anonymized", -// //Message = $"QA -> PM :{_userInfo.RealName} has anonymized {study.StudyCode} ,Forward can be performed!!", -// Message = $"QA -> QA :{_userInfo.RealName} has anonymized {study.StudyCode} ,Forward can be performed!!", - -// SendTime = DateTime.Now, - -// }; - -// //notice.QANoticeUserList.Add(new QANoticeUser() -// //{ -// // QANoticeId = notice.Id, -// // StudyId = study.Id, -// // ToUser = pm.UserRealName, -// // ToUserId = pm.UserId, -// // ToUserType = pm.UserType -// //}); - -// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName+" / "+t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.User.UserTypeRole.UserTypeShortName -// })); - -// _qaNoticeRepository.Add(notice); - -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && (t.NoticeTypeEnum == NoticeType.QA_QAPass_NoticeQA)).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); - - -// #endregion -// } - -// else if (invocation.Method.Name == "ForwardStudy") -// { -// var studyId = Guid.Parse(invocation.Arguments[0].ToString()); - -// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId); - -// //匿名化操作产生的消息 设置为已经处理 -// _qaNoticeRepository.Add(new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentQA.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentQA.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.NotNeedNotice, -// NeedDeal = false, -// StudyStatusStr = "Forwarded", -// //Message = $"PM :{_userInfo.RealName} has forwarded {study.StudyCode} !", -// Message = $"QA :{_userInfo.RealName} has forwarded {study.StudyCode} !", -// SendTime = DateTime.Now, -// }); - -// var needDealList = _qaNoticeRepository.Where(t => -// t.SubjectVisitId == study.Id && t.NeedDeal && t.NoticeTypeEnum == NoticeType.QA_Anonymized_NoticeQA).ToList(); - -// needDealList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); -// } - -// var success = _qaNoticeRepository.SaveChanges(); - -// if (!success) -// { -// throw new Exception("Send QA message failed"); -// } -// } - - -// } -//} \ No newline at end of file diff --git a/IRaCIS.Core.Application/AOP/TrialStatusAutofacAOP.cs b/IRaCIS.Core.Application/AOP/TrialStatusAutofacAOP.cs deleted file mode 100644 index e1523b6d9..000000000 --- a/IRaCIS.Core.Application/AOP/TrialStatusAutofacAOP.cs +++ /dev/null @@ -1,89 +0,0 @@ -using Castle.DynamicProxy; -using EasyCaching.Core; -using IRaCIS.Application.Contracts; -using IRaCIS.Core.Domain.Share; - -namespace IRaCIS.Core.Application.AOP -{ - public class TrialStatusAutofacAOP : IAsyncInterceptor - { - private readonly IEasyCachingProvider _provider; - - public TrialStatusAutofacAOP(IEasyCachingProvider provider) - { - _provider = provider; - } - - - - public void InterceptAsynchronous(IInvocation invocation) - { - invocation.Proceed(); - } - - //这里AOP 处理两个方法 分别是 项目的添加和更新、项目状态的变更 - - public void InterceptAsynchronous(IInvocation invocation) - { - - - //处理拦截的方法 - invocation.Proceed(); - - - - dynamic result = invocation.ReturnValue; - - //接口成功了,才修改缓存 - if (!result.IsSuccess) - { - return; - } - - #region 处理项目列表的查询 在前端界面已经在某个界面,但是服务器重置了,此时没有缓存项目信息,接口不能正确返回,因故采用,启动时查询,每天查询一次,缓存一天,然后项目添加、更改状态时,及时更新 - - //if (invocation.Method.Name == "GetTrialList") - //{ - // //在此 将当前查询的项目Id 和对应的项目状态进行缓存 - // dynamic result = invocation.ReturnValue; - // foreach (var item in result.CurrentPageData) - // { - // _provider.Remove(item.Id.ToString()); - // _provider.Set(item.Id.ToString(), item.TrialStatusStr.ToString(), TimeSpan.FromDays(1)); - // } - //} - - #endregion - - if (invocation.Method.Name == "AddOrUpdateTrial") - { - //如果是添加 那么将对应的初始状态加进去 更新状态是单独操作的 - - var trialModel = (invocation.Arguments[0] as TrialCommand).IfNullThrowConvertException(); - if (trialModel.Id == null || trialModel.Id == Guid.Empty) - { - _provider.Set(result.Data.Id.ToString(), StaticData.TrialState.TrialOngoing, TimeSpan.FromDays(1)); - } - - - } - // 更新缓存 - else if (invocation.Method.Name == "UpdateTrialStatus") - { - //项目状态更新,也需要及时更新 - _provider.Set(invocation.Arguments[0].ToString(), invocation.Arguments[1].ToString(), TimeSpan.FromDays(1)); - - ////Test参数是否符合要求 - //var tt = invocation.Arguments[0].ToString(); - //var cc = _provider.Get(invocation.Arguments[0].ToString()); - - } - - } - - public void InterceptSynchronous(IInvocation invocation) - { - invocation.Proceed(); - } - } -} \ No newline at end of file diff --git a/IRaCIS.Core.Application/BusinessFilter/LogActionFilter.cs b/IRaCIS.Core.Application/BusinessFilter/LogActionFilter.cs deleted file mode 100644 index 64f11585b..000000000 --- a/IRaCIS.Core.Application/BusinessFilter/LogActionFilter.cs +++ /dev/null @@ -1,81 +0,0 @@ -//using System.Diagnostics; -//using IRaCIS.Application.Interfaces; -//using IRaCIS.Application.Contracts; -//using IRaCIS.Core.Infra.EFCore; -//using IRaCIS.Core.Infrastructure.Extention; -//using Microsoft.AspNetCore.Mvc; -//using Microsoft.AspNetCore.Mvc.Filters; -//using Microsoft.Extensions.Logging; -//using Newtonsoft.Json; - -//namespace IRaCIS.Core.Application.Filter -//{ - -// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] -// public class LogFilter : Attribute -// { -// } -// public class LogActionFilter : IAsyncActionFilter -// { -// private readonly ILogService _logService; -// private readonly IUserInfo _userInfo; -// private readonly ILogger _logger; - -// public LogActionFilter(ILogService logService, IUserInfo userInfo , ILogger logger) -// { -// _logService = logService; -// _userInfo = userInfo; -// _logger = logger; -// } - -// public Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) -// { - -// if (context.ActionDescriptor.EndpointMetadata!=null&& context.ActionDescriptor.EndpointMetadata.Any(m => m.GetType() == typeof(LogFilter))) -// { -// return LogAsync(context, next); -// } -// return next(); -// } - -// public async Task LogAsync(ActionExecutingContext context, ActionExecutionDelegate next) -// { -// var sw = new Stopwatch(); -// sw.Start(); - -// dynamic actionResult = (await next()).Result; -// sw.Stop(); -// var args = JsonConvert.SerializeObject(context.ActionArguments); -// var result = JsonConvert.SerializeObject(actionResult?.Value); - -// var attr = (ApiExplorerSettingsAttribute)context.ActionDescriptor.EndpointMetadata.FirstOrDefault(m => m.GetType() == typeof(ApiExplorerSettingsAttribute)); -// var groupName = attr?.GroupName; -// var res = actionResult?.Value as IResponseOutput; -// var input = new SystemLogDTO -// { -// ClientIP = string.Empty, -// OptUserId = _userInfo.Id, -// OptUserName = _userInfo.UserName, -// ApiPath = context.ActionDescriptor.AttributeRouteInfo.Template.ToLower(), -// Params = args, -// Result = result, -// RequestTime = DateTime.Now, -// ElapsedMilliseconds = sw.ElapsedMilliseconds, -// Status =res?.IsSuccess?? false, -// Message = res?.ErrorMessage, -// LogCategory = groupName -// }; - -// try -// { -// _logService.SaveLog2Db(input); -// } -// catch (Exception ex) -// { - -// _logger.LogError(ex.Message); -// } - -// } -// } -//} diff --git a/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs b/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs deleted file mode 100644 index a614a1e6d..000000000 --- a/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs +++ /dev/null @@ -1,1575 +0,0 @@ -//using IRaCIS.Application.Contracts; -//using IRaCIS.Core.Application.Contracts.Dicom.DTO; -//using IRaCIS.Core.Application.Contracts.DTO; -//using IRaCIS.Core.Infra.EFCore; -//using IRaCIS.Core.Domain.Models; -//using IRaCIS.Core.Domain.Share; -//using IRaCIS.Core.Infrastructure.Extention; -//using Microsoft.AspNetCore.Mvc.Filters; -//using Microsoft.EntityFrameworkCore; -//using Microsoft.Extensions.Logging; -//using IRaCIS.Core.Infrastructure; -//using IRaCIS.Core.Application.Contracts; - -//namespace IRaCIS.Core.Application.Filter -//{ -//#pragma warning disable CS8618 - -//#pragma warning disable CS8062 -// //by zhouhang 2021.08 - - -//审计类型大类 -using Microsoft.AspNetCore.Mvc.Filters; - -public enum AuditType -{ - TrialAudit = 0, - SubjectAudit = 1, - StudyAudit = 2 -} - -//具体审计操作 -public enum AuditOptType -{ - //DeleteTrial = 2, - AddOrUpdateTrial = 0, - - AddTrialSiteSurvey = 1, - - //参与人员 - AddTrialStaff = 3, - DeleteTrailStaff = 4, - - //Site - AddTrialSite = 5, - DeleteTrialSite = 6, - - //Site CRC - AddTrialSiteCRC = 7, - DeleteTrialSiteCRC = 8, - - //访视计划 - AddOrUpdateTrialVisitPlanItem = 9, - DeleteTrialVisitPlanItem = 10, - ConfirmTrialVisitPlan = 11, - - //项目模板 - AddOrUpdateTrialTemplate = 12, - DeleteTrialTemplate = 13, - - //subject 访视计划 - AddOrUpdateSubjectOutPlanVisit = 14, - DeleteSubjectOutPlanVisit = 15, - SetSVExecuted = 16, - - AddOrUpdateSubject = 17, - DeleteSubject = 18, - - //影像上传 - UploadImage = 19, - - //变更QA状态 比如设置为QA中 QA结束通过、不通过 - ChangeStudyStatus = 20, - - //匿名化 - Anonymized = 22, - - //转发 - Forwarded = 24 -} - -[AttributeUsage(AttributeTargets.Method)] -public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilter -{ - private readonly AuditType _auditType; - private readonly AuditOptType _auditOptType; - public TrialAuditAttribute(AuditType auditType, AuditOptType auditOptType) - { - _auditType = auditType; - _auditOptType = auditOptType; - } - public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) - { - await next(); - - } -} - -// [AttributeUsage(AttributeTargets.Method)] -// public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilter -// { -// private readonly AuditType _auditType; -// private readonly AuditOptType _auditOptType; -// public IDictionary _actionArguments; - -// #region 根据不同接口构造的属性 - -// private TrialAuditAttribute _attr; - -// private string _userIdStr; - -// private string _userRealName; - -// private IRepository _auditRepository; - -// private TrialUser _userTrial; - -// private TrialSiteUser _userTrialSite; - -// private VisitStage _visitPlan; - -// //private QATrialTemplate _qATrailTemplate; - -// private Subject _subject; - -// private SubjectVisit _subjectVisit; - -// private TrialSite _trialSite; - -// private DicomStudy _study; - -// private IRepository _studyRepository; - -// //private IRaCISDBContext _dbContext; - -// //private IDbContextTransaction transaction; - - -// #endregion - -// public TrialAuditAttribute(AuditType auditType, AuditOptType auditOptType) -// { -// _auditType = auditType; -// _auditOptType = auditOptType; -// } - - -// #region 同步版本 废弃 - -// //public void OnActionExecuted(ActionExecutedContext executedcontext) -// //{ - -// // //上传影像接口返回值类型特殊 需要单独处理 -// // if (_attr._auditOptType == AuditOptType.UploadImage) -// // { -// // //接口参数 -// // var archiveStudyInfo = (ArchiveStudyCommand)_actionArguments.Values.ToList()[0]; - -// // //接口返回结果 因为上传成功和不成功 泛型类型不一样 -// // dynamic archive = executedcontext.Result; -// // if (archive == null) -// // { -// // var logger = (ILogger)executedcontext.HttpContext.RequestServices.GetService( -// // typeof(ILogger)); - -// // logger.LogError("影像上传,OnActionExecuted Reuslt 为null"); -// // return; -// // } -// // var archiveResult = (IResponseOutput)archive.Value; - - - -// // if (archiveResult.IsSuccess) -// // { -// // _studyRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // var successResult = (IResponseOutput)archiveResult; - -// // _study = _studyRepository.GetAll().First(t => -// // t.Id == successResult.Data.ArchivedDicomStudies.ToList()[0].Id); - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _study.TrialId, -// // SubjectId = _study.SubjectId, -// // StudyId = _study.Id, -// // AuditType = (int)AuditType.StudyAudit, -// // Note = $"{ _userRealName} 动作变更了 { _study.StudyCode} 检查状态为 {DealStudyStatus(_study.Status)} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); - -// // _auditRepository.SaveChanges(); -// // } - -// // return; -// // } - -// // //接口返回结果 -// // dynamic actionResult = executedcontext.Result; -// // var result = (IResponseOutput)actionResult.Value;//此处审计只涉及到添加更新和删除, 统一了相关接口的返回结果,才能在此强制转换 - - - -// // switch (_attr._auditType) -// // { -// // //项目审计 -// // case AuditType.TrialAudit: - -// // switch (_attr._auditOptType) -// // { -// // //项目的添加和更新接口 -// // case AuditOptType.AddOrUpdateTrial: - -// // //接口参数 -// // var trialInfo = (TrialCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // //判断是添加还是更新 -// // TrialId = trialInfo.Id == null ? Guid.Parse(result.Data) : trialInfo.Id.Value, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = trialInfo.Id == null ? $"{ _userRealName} 添加了项目 {trialInfo.Code} " : $"{ _userRealName} 更新了项目 {trialInfo.Code} 基本信息 ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //添加项目运维人员 -// // case AuditOptType.AddTrialStaff: - -// // //接口参数 -// // var trialUsers = (List)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = trialUsers[0].TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 添加了项目运维人员 {string.Join(',', trialUsers.Select(t => t.UserRealName).ToList())} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; - -// // //添加研究中心 -// // case AuditOptType.AddTrialSite: -// // //接口参数 -// // var trialSites = (List)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // //查询site信息 -// // var siteIds = trialSites.Select(t => t.SiteId).ToList(); -// // var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// // var siteNames = _siteRepository.Where(t => siteIds.Contains(t.Id)).Select(u => u.SiteName); - -// // _auditRepository.Add(new TrialAudit() -// // { -// // //判断是添加还是更新 -// // TrialId = trialSites[0].TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 添加了项目研究中心 {string.Join(',', siteNames)} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; - -// // //研究中心添加运维人员 -// // case AuditOptType.AddTrialSiteCRC: -// // //接口参数 -// // var trialSiteCRCs = (List)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // //查询site信息 -// // var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// // var siteName = _siteRepository.GetAll().First(t => t.Id == trialSiteCRCs[0].SiteId).SiteName; - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = trialSiteCRCs[0].TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 为{ siteName } 添加了运维人员 {string.Join(',', trialSiteCRCs.Select(t => t.UserRealName).ToList())}", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; - -// // //删除项目运维人员 -// // case AuditOptType.DeleteTrailStaff: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _userTrial.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 移除了项目参与人员 {_userTrial.UserRealName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //删除项目site -// // case AuditOptType.DeleteTrialSite: - -// // if (result.IsSuccess) -// // { -// // //查询site信息 -// // var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// // var siteName = _siteRepository.GetAll().First(t => t.Id == _trialSite.SiteId).SiteName; - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _trialSite.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 移除了研究中心 {siteName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //删除项目Site CRC -// // case AuditOptType.DeleteTrialSiteCRC: - -// // if (result.IsSuccess) -// // { -// // //查询site信息 -// // var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// // var siteName = _siteRepository.GetAll().First(t => t.Id == _userTrial.SiteId).SiteName; - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _userTrial.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 移除了 {siteName} 的运维人员 {_userTrial.UserRealName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } -// // break; - -// // //添加访视计划Item -// // case AuditOptType.AddOrUpdateTrialVisitPlanItem: -// // //接口参数 -// // var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = visitPlanItem.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = visitPlanItem.Id == null ? $"{ _userRealName} 添加了访视计划项 {visitPlanItem.VisitName} " : $"{ _userRealName} 更新了访视计划项为 {visitPlanItem.VisitName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //删除访视计划Item -// // case AuditOptType.DeleteTrialVisitPlanItem: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _visitPlan.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 移除了访视计划项 {_visitPlan.VisitName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } -// // break; - -// // //确认了访视计划 -// // case AuditOptType.ConfirmTrialVisitPlan: -// // var trialId = (Guid)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = trialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 确认了访视计划,不允许修改 ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //添加了QA模板 -// // case AuditOptType.AddOrUpdateTrialTemplate: -// // //接口参数 -// // var trialQATemplate = (TrialQATemplateAddCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { - -// // TrialId = trialQATemplate.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = trialQATemplate.Id == null ? $"{ _userRealName} 添加了QA模板 {trialQATemplate.Name} " : $"{ _userRealName} 更新了QA模板 {trialQATemplate.Name} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - - -// // break; -// // //删除项目模板 -// // case AuditOptType.DeleteTrialTemplate: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { - -// // TrialId = _qATrailTemplate.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 移除了QA模板 {_qATrailTemplate.Name} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } -// // break; - -// // } - -// // break; -// // //受试者审计 -// // case AuditType.SubjectAudit: - - -// // switch (_attr._auditOptType) -// // { -// // // 添加或者更新受试者 -// // case AuditOptType.AddOrUpdateSubject: - -// // //接口参数 -// // var subject = (SubjectCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = subject.TrialId, -// // SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = subject.Id == null ? $"{ _userRealName} 添加了受试者 {subject.LastName + subject.FirstName} 并初始化了访视计划" : $"{ _userRealName} 对受试者 { subject.LastName + subject.FirstName} 信息进行了更新 ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // // 删除受试者 -// // case AuditOptType.DeleteSubject: -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _subject.TrialId, -// // SubjectId = _subject.Id, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = $"{ _userRealName} 移除了受试者 {_subject.LastName + _subject.FirstName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // // 受试者计划外访视 -// // case AuditOptType.AddOrUpdateSubjectOutPlanVisit: - -// // //接口参数 -// // var subjectVisit = (SubjectVisitCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // var _subjectRepository = -// // (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _subject = _subjectRepository.FirstOrDefault(t => t.Id == subjectVisit.SubjectId); - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _subject.TrialId, -// // SubjectId = _subject.Id, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = subjectVisit.Id == null ? $"{ _userRealName} 为受试者 {_subject.LastName + _subject.FirstName} 添加了计划外访视 {subjectVisit.VisitName}" : $"{ _userRealName} 更新受试者 {_subject.LastName + _subject.FirstName} 计划外访视{subjectVisit.VisitName}", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // // 删除计划外访视 -// // case AuditOptType.DeleteSubjectOutPlanVisit: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _subjectVisit.TrialId, -// // SubjectId = _subject.Id, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = $"{ _userRealName} 移除了受试者{_subject.LastName + _subject.FirstName} 计划外访视 {_subjectVisit.VisitName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // // 人工设置已执行 -// // case AuditOptType.SetSVExecuted: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _subjectVisit.TrialId, -// // SubjectId = _subject.Id, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = $"{ _userRealName} 将受试者 {_subject.LastName + _subject.FirstName} 访视 {_subjectVisit.VisitName} 设置为已执行 ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - - -// // break; -// // } - -// // break; - -// // //检查审计 -// // case AuditType.StudyAudit: -// // _studyRepository = -// // (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // switch (_attr._auditOptType) -// // { - -// // case AuditOptType.ChangeStudyStatus: - -// // //接口参数 -// // var studyStatusInfo = (StudyStatusDetailCommand)_actionArguments.Values.ToList()[0]; - -// // _study = _studyRepository.FirstOrDefault(t => t.Id == studyStatusInfo.StudyId); - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _study.TrialId, -// // SubjectId = _study.SubjectId, -// // StudyId = _study.Id, -// // AuditType = (int)AuditType.StudyAudit, -// // Note = $"{ _userRealName} 动作变更了 { _study.StudyCode} 检查状态为 {DealStudyStatus(_study.Status)} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; - -// // case AuditOptType.Anonymized: - -// // case AuditOptType.Forwarded: - -// // //接口参数 -// // var studyId = (Guid)_actionArguments.Values.ToList()[0]; - -// // _study = _studyRepository.FirstOrDefault(t => t.Id == studyId); - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _study.TrialId, -// // SubjectId = _study.SubjectId, -// // StudyId = _study.Id, -// // AuditType = (int)AuditType.StudyAudit, -// // Note = $"{ _userRealName} 动作变更了 { _study.StudyCode} 检查状态为 {DealStudyStatus(_study.Status)} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - - -// // break; -// // } - -// // break; - -// // } - -// // _auditRepository.SaveChanges(); - -// //} - - -// //public void OnActionExecuting(ActionExecutingContext context) -// //{ -// // //_dbContext = (IRaCISDBContext)context.HttpContext.RequestServices.GetService(typeof(IRaCISDBContext)); - - -// // _actionArguments = context.ActionArguments; - -// // _attr = (TrialAuditAttribute)context.ActionDescriptor.EndpointMetadata.First(m => m.GetType() == typeof(TrialAuditAttribute)); - -// // _userIdStr = context.HttpContext.User.Claims.First(t => t.Type == "id")?.Value ?? Guid.Empty.ToString(); -// // _userRealName = context.HttpContext.User.Claims.First(t => t.Type == "realName")?.Value ?? string.Empty; - -// // //获取接口仓储 -// // _auditRepository = (IRepository)context.HttpContext.RequestServices.GetService(typeof(IRepository)); - - - -// // switch (_attr._auditType) -// // { -// // //项目审计 -// // case AuditType.TrialAudit: - -// // switch (_attr._auditOptType) -// // { -// // //删除项目运维人员 -// // case AuditOptType.DeleteTrailStaff: - -// // // 删除项目Site CRC -// // case AuditOptType.DeleteTrialSiteCRC: - -// // //接口参数 -// // var userTrialId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _userTrialRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _userTrial = _userTrialRepository.GetAll().First(t => t.Id == userTrialId); -// // break; - - -// // //删除项目site -// // case AuditOptType.DeleteTrialSite: - -// // //接口参数 -// // var trialSiteId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _TrialsiteRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _trialSite = _TrialsiteRepository.GetAll().First(t => t.Id == trialSiteId); -// // break; - -// // case AuditOptType.DeleteTrialVisitPlanItem: - -// // //接口参数 -// // var visitPlanId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _visitPlanRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _visitPlan = _visitPlanRepository.GetAll().First(t => t.Id == visitPlanId); - -// // break; -// // case AuditOptType.DeleteTrialTemplate: - -// // //接口参数 -// // var qATrailTemplateId = (Guid)_actionArguments.Values.ToList()[0]; -// // var _qATrailTemplateRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _qATrailTemplate = _qATrailTemplateRepository.GetAll() -// // .FirstOrDefault(t => t.Id == qATrailTemplateId); - -// // break; - -// // } - -// // break; - -// // //受试者审计 -// // case AuditType.SubjectAudit: - -// // switch (_auditOptType) -// // { -// // case AuditOptType.DeleteSubject: -// // //接口参数 -// // var subjectId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _subjectRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _subject = _subjectRepository.FirstOrDefault(t => t.Id == subjectId); - -// // break; - -// // case AuditOptType.DeleteSubjectOutPlanVisit: -// // case AuditOptType.SetSVExecuted: - -// // //接口参数 -// // var subjectVisitId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _subjectVisitRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _subjectVisit = _subjectVisitRepository.FirstOrDefault(t => t.Id == subjectVisitId); - -// // _subjectRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _subject = _subjectRepository.FirstOrDefault(t => t.Id == _subjectVisit.SubjectId); - -// // break; -// // } -// // break; - - -// // //检查审计 -// // case AuditType.StudyAudit: - -// // switch (_attr._auditOptType) -// // { -// // case AuditOptType.UploadImage: - -// // break; -// // } -// // break; - -// // } - -// //} -// #endregion - -// public static string DealStudyStatus(int status) -// { - -// var message = string.Empty; -// switch (status) -// { -// case (int)StudyStatus.Uploaded: -// message = "Uploaded"; -// break; - -// case (int)StudyStatus.QARequested: - -// message = "QA Requested"; -// break; -// case (int)StudyStatus.QAing: - -// message = "In QA"; -// break; - -// //case (int)StudyStatus.Abandon: -// // message = "Study has abandon"; -// // break; - -// case (int)StudyStatus.QAFinish: -// message = "QA Completed Passed"; -// break; - -// case (int)StudyStatus.QAFInishNotPass: -// message = "QA Completed Failed"; -// break; - -// case (int)StudyStatus.Anonymizing: -// message = "Anonymizing"; -// break; - -// case (int)StudyStatus.Anonymized: -// message = "Anonymized"; -// break; - -// case (int)StudyStatus.AnonymizeFailed: -// message = "Anonymize Failed"; -// break; - -// case (int)StudyStatus.Forwarding: -// message = "Forwarding"; -// break; - -// case (int)StudyStatus.Forwarded: -// message = "Forwarded "; -// break; - -// case (int)StudyStatus.ForwardFailed: -// message = "Forward Failed "; -// break; -// } - -// return message; -// } - -// public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) -// { -// // 开启AOP事务(审计消息记录和 添加更新记录 在一个事务里面,不再是分开的事务) -// //var _dbContext = (IRaCISDBContext)context.HttpContext.RequestServices.GetService(typeof(IRaCISDBContext)); - -// //var strategy = _dbContext.Database.CreateExecutionStrategy(); - -// var _dbContext = (IRaCISDBContext)context.HttpContext.RequestServices.GetService(typeof(IRaCISDBContext)); - -// var strategy = _dbContext.Database.CreateExecutionStrategy(); - -// await strategy.Execute(async () => -// { -// var currentTransaction = _dbContext.Database.CurrentTransaction; - -// var transaction = currentTransaction ?? _dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted); - -// #region 执行方法前 - -// _actionArguments = context.ActionArguments; - -// _attr = (TrialAuditAttribute)context.ActionDescriptor.EndpointMetadata.First(m => m.GetType() == typeof(TrialAuditAttribute)); - -// _userIdStr = context.HttpContext.User.Claims.First(t => t.Type == "id")?.Value ?? Guid.Empty.ToString(); -// _userRealName = context.HttpContext.User.Claims.First(t => t.Type == "realName")?.Value ?? string.Empty; - -// //获取接口仓储 -// _auditRepository = (IRepository)context.HttpContext.RequestServices.GetService(typeof(IRepository)); - -// switch (_attr._auditType) -// { -// //项目审计 -// case AuditType.TrialAudit: - -// switch (_attr._auditOptType) -// { -// //删除项目运维人员 -// case AuditOptType.DeleteTrailStaff: - -// //接口参数 -// var userTrial = (Guid)_actionArguments.Values.ToList()[0]; - -// var _userTrialRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _userTrial = _userTrialRepository.AsQueryable().Include(t => t.User).FirstOrDefault(t => t.Id == userTrial); -// break; - -// // 删除项目Site CRC -// case AuditOptType.DeleteTrialSiteCRC: - -// //接口参数 -// var userTrialSiteId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _userTrialSiteRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _userTrialSite = _userTrialSiteRepository.AsQueryable().Include(t => t.User).FirstOrDefault(t => t.Id == userTrialSiteId); -// break; - - -// //删除项目site -// case AuditOptType.DeleteTrialSite: - -// //接口参数 -// var trialSiteId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _TrialsiteRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _trialSite = _TrialsiteRepository.AsQueryable().Include(t => t.Site).FirstOrDefault(t => t.Id == trialSiteId); -// break; - -// case AuditOptType.DeleteTrialVisitPlanItem: - -// //接口参数 -// var visitPlanId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _visitPlanRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _visitPlan = _visitPlanRepository.FirstOrDefault(t => t.Id == visitPlanId).IfNullThrowException(); - -// break; -// case AuditOptType.DeleteTrialTemplate: - - - -// break; - -// } - -// break; - -// //受试者审计 -// case AuditType.SubjectAudit: - -// switch (_auditOptType) -// { -// case AuditOptType.DeleteSubject: -// //接口参数 -// var subjectId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _subjectRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _subject = _subjectRepository.FirstOrDefault(t => t.Id == subjectId).IfNullThrowException(); - -// break; - -// case AuditOptType.DeleteSubjectOutPlanVisit: -// case AuditOptType.SetSVExecuted: - -// //接口参数 -// var subjectVisitId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _subjectVisitRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _subjectVisit = _subjectVisitRepository.FirstOrDefault(t => t.Id == subjectVisitId).IfNullThrowException(); - -// _subjectRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _subject = _subjectRepository.FirstOrDefault(t => t.Id == _subjectVisit.SubjectId).IfNullThrowException(); - -// break; -// } -// break; - - -// //检查审计 -// case AuditType.StudyAudit: - -// switch (_attr._auditOptType) -// { -// case AuditOptType.UploadImage: - -// break; -// } -// break; - -// } - -// #endregion - -// //获取实际执行方法next() 的结果 -// ActionExecutedContext executedcontext = await next(); - -// #region 方法执行后 - -// //上传影像接口返回值类型特殊 需要单独处理 -// if (_attr._auditOptType == AuditOptType.UploadImage) -// { - -// //接口参数 -// var archiveStudyInfo = (ArchiveStudyCommand)_actionArguments.Values.ToList()[0]; - -// if (executedcontext.Exception != null) -// { -// var logger = (ILogger)executedcontext.HttpContext.RequestServices.GetService( -// typeof(ILogger)); - -// logger!.LogError("影像上传 中间发生异常", executedcontext.Exception.StackTrace); - -// return; -// } - -// //接口返回结果 因为上传成功和不成功 泛型类型不一样 -// dynamic archive = executedcontext.Result; - - -// var archiveResult = (IResponseOutput)archive.Value; - -// if (archiveResult.IsSuccess) -// { - - -// _studyRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); - -// _auditRepository = (IRepository)context.HttpContext.RequestServices.GetService(typeof(IRepository)); - -// var successResult = (IResponseOutput)archiveResult; - -// var studyList = _studyRepository.Where(t => t.SubjectVisitId == successResult.Data.ArchivedDicomStudies.ToList()[0].SubjectVisitId).ToList(); - -// studyList.ForEach(study => -// { -// var mes = study.Status == (int)StudyStatus.Uploaded ? "上传了" : "重传了"; -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = study.TrialId, -// SubjectId = study.SubjectId, -// StudyId = study.Id, -// AuditType = (int)AuditType.StudyAudit, -// //Note = $"{ _userRealName} 动作变更了 { _study.StudyCode} 检查状态为 {DealStudyStatus(_study.Status)} ", -// Note = $"{ _userRealName} {mes} { study.StudyCode} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// }); - - - -// _auditRepository.SaveChanges(); - -// transaction.Commit(); - -// return; - -// } - - -// } - -// //接口返回结果 -// if (executedcontext.Result is null) -// { -// throw new BusinessValidationFailedException(executedcontext.Exception.Message); -// } -// dynamic actionResult = executedcontext.Result; - -// //此处审计只涉及到添加更新和删除, 统一了相关接口的返回结果,才能在此强制转换 -// //var result = (IResponseOutput)actionResult.Value; - -// var result = (IResponseOutput)actionResult.Value; - - -// switch (_attr._auditType) -// { -// //项目审计 -// case AuditType.TrialAudit: - -// switch (_attr._auditOptType) -// { -// //项目的添加和更新接口 -// case AuditOptType.AddOrUpdateTrial: - -// //接口参数 -// var trialInfo = (TrialCommand)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// //判断是添加还是更新 -// TrialId = trialInfo.Id == null ? Guid.Parse(result.Data) : trialInfo.Id.Value, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = trialInfo.Id == null ? $"{ _userRealName} 添加了项目 {trialInfo.TrialCode} " : $"{ _userRealName} 更新了项目 {trialInfo.TrialCode} 基本信息 ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //添加项目运维人员 -// case AuditOptType.AddTrialStaff: - -// //接口参数 -// var trialUsers = (TrialUserAddCommand[])_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = trialUsers[0].TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// //Note = $"{ _userRealName} 添加了项目运维人员 {string.Join(',', trialUsers.Select(t => t.UserRealName).ToList())} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; - -// //添加研究中心 -// case AuditOptType.AddTrialSite: -// //接口参数 -// var trialSites = (List)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// //查询site信息 -// var siteIds = trialSites.Select(t => t.SiteId).ToList(); -// var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// var siteNames = _siteRepository.Where(t => siteIds.Contains(t.Id)).Select(u => u.SiteName); - -// _auditRepository.Add(new TrialAudit() -// { -// //判断是添加还是更新 -// TrialId = trialSites[0].TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 添加了项目研究中心 {string.Join(',', siteNames)} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; - -// //研究中心添加运维人员 -// case AuditOptType.AddTrialSiteCRC: -// //接口参数 -// var trialSiteCRCs = (List)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// //查询site信息 -// var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// var siteName = _siteRepository.FirstOrDefault(t => t.Id == trialSiteCRCs[0].SiteId).IfNullThrowException().SiteName; - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = trialSiteCRCs[0].TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 为{ siteName } 添加了运维人员 {string.Join(',', trialSiteCRCs.Select(t => t.UserRealName).ToList())}", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; - -// //删除项目运维人员 -// case AuditOptType.DeleteTrailStaff: - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _userTrial.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 移除了项目参与人员 {_userTrial.User.LastName + " / " + _userTrial.User.FirstName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //删除项目site -// case AuditOptType.DeleteTrialSite: - -// if (result.IsSuccess) -// { -// //查询site信息 -// var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// var siteName = _siteRepository.FirstOrDefault(t => t.Id == _trialSite.SiteId).IfNullThrowException().SiteName; - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _trialSite.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 移除了研究中心 {siteName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //删除项目Site CRC -// case AuditOptType.DeleteTrialSiteCRC: - -// if (result.IsSuccess) -// { -// //查询site信息 -// var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// var siteName = _siteRepository.FirstOrDefault(t => t.Id == _userTrialSite.SiteId).IfNullThrowException().SiteName; - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _userTrialSite.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 移除了 {siteName} 的运维人员 {_userTrialSite.User.UserName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } -// break; - -// //添加访视计划Item -// case AuditOptType.AddOrUpdateTrialVisitPlanItem: -// //接口参数 -// var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = visitPlanItem.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = visitPlanItem.Id == null ? $"{ _userRealName} 添加了访视计划项 {visitPlanItem.VisitName} " : $"{ _userRealName} 更新了访视计划项为 {visitPlanItem.VisitName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //删除访视计划Item -// case AuditOptType.DeleteTrialVisitPlanItem: - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _visitPlan.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 移除了访视计划项 {_visitPlan.VisitName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } -// break; - -// //确认了访视计划 -// case AuditOptType.ConfirmTrialVisitPlan: -// var trialId = (Guid)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = trialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 确认了访视计划,不允许修改 ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //添加了QA模板 -// case AuditOptType.AddOrUpdateTrialTemplate: -// //接口参数 - -// if (result.IsSuccess) -// { - -// } - - -// break; -// //删除项目模板 -// case AuditOptType.DeleteTrialTemplate: - -// if (result.IsSuccess) -// { - -// } -// break; - -// } - -// break; -// //受试者审计 -// case AuditType.SubjectAudit: - - -// switch (_attr._auditOptType) -// { -// // 添加或者更新受试者 -// case AuditOptType.AddOrUpdateSubject: - -// //接口参数 -// var subject = (SubjectCommand)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = subject.TrialId, -// SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value, -// AuditType = (int)AuditType.SubjectAudit, -// Note = subject.Id == null ? $"{ _userRealName} 添加了受试者 {subject.ShortName } 并初始化了访视计划" : $"{ _userRealName} 对受试者 { subject.ShortName } 信息进行了更新 ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// // 删除受试者 -// case AuditOptType.DeleteSubject: -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _subject.TrialId, -// SubjectId = _subject.Id, -// AuditType = (int)AuditType.SubjectAudit, -// Note = $"{ _userRealName} 移除了受试者 {_subject.LastName + _subject.FirstName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// // 受试者计划外访视 -// case AuditOptType.AddOrUpdateSubjectOutPlanVisit: - -// //接口参数 -// var subjectVisit = (SubjectVisitCommand)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// var _subjectRepository = -// (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _subject = _subjectRepository.FirstOrDefault(t => t.Id == subjectVisit.SubjectId).IfNullThrowException(); - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _subject.TrialId, -// SubjectId = _subject.Id, -// AuditType = (int)AuditType.SubjectAudit, -// Note = subjectVisit.Id == null ? $"{ _userRealName} 为受试者 {_subject.LastName + _subject.FirstName} 添加了计划外访视 {subjectVisit.VisitName}" : $"{ _userRealName} 更新受试者 {_subject.LastName + _subject.FirstName} 计划外访视{subjectVisit.VisitName}", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// // 删除计划外访视 -// case AuditOptType.DeleteSubjectOutPlanVisit: - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _subjectVisit.TrialId, -// SubjectId = _subject.Id, -// AuditType = (int)AuditType.SubjectAudit, -// Note = $"{ _userRealName} 移除了受试者{_subject.LastName + _subject.FirstName} 计划外访视 {_subjectVisit.VisitName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// // 人工设置已执行 -// case AuditOptType.SetSVExecuted: - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _subjectVisit.TrialId, -// SubjectId = _subject.Id, -// AuditType = (int)AuditType.SubjectAudit, -// Note = $"{ _userRealName} 将受试者 {_subject.LastName + _subject.FirstName} 访视 {_subjectVisit.VisitName} 设置为已执行 ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - - -// break; -// } - -// break; - -// //检查审计 -// case AuditType.StudyAudit: -// _studyRepository = -// (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// switch (_attr._auditOptType) -// { - -// case AuditOptType.ChangeStudyStatus: - -// //接口参数 -// var studyStatusInfo = (StudyStatusDetailCommand)_actionArguments.Values.ToList()[0]; - -// _study = _studyRepository.FirstOrDefault(t => t.Id == studyStatusInfo.StudyId).IfNullThrowException(); - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _study.TrialId, -// SubjectId = _study.SubjectId, -// StudyId = _study.Id, -// AuditType = (int)AuditType.StudyAudit, -// Note = $"{ _userRealName} 动作变更了 { _study.StudyCode} 检查状态为 {DealStudyStatus(_study.Status)} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; - -// case AuditOptType.Anonymized: - -// case AuditOptType.Forwarded: - -// //接口参数 -// var studyId = (Guid)_actionArguments.Values.ToList()[0]; - -// _study = _studyRepository.FirstOrDefault(t => t.Id == studyId).IfNullThrowException(); - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _study.TrialId, -// SubjectId = _study.SubjectId, -// StudyId = _study.Id, -// AuditType = (int)AuditType.StudyAudit, -// Note = $"{ _userRealName} 动作变更了 { _study.StudyCode} 检查状态为 {DealStudyStatus(_study.Status)} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - - -// break; -// } - -// break; - -// } - -// _auditRepository.SaveChanges(); - -// #endregion - - -// //提交事务 Commit transaction if all commands succeed, transaction will auto-rollback when disposed if either commands fails -// transaction.Commit(); -// } -// ); - - - - - - - - - -// } -// } -//} - - - - diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 67dd0e63f..8a73e868f 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -12012,7 +12012,7 @@ 构造函数注入
- + 构造函数注入 diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs index 51073a746..2406b12c1 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs @@ -348,7 +348,6 @@ namespace IRaCIS.Core.Application.Services /// 删除 项目 下某一site [HttpDelete("{id:guid}/{trialId:guid}")] - [TrialAudit(AuditType.TrialAudit, AuditOptType.DeleteTrialSite)] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [Obsolete] public async Task DeleteTrialSite(Guid id) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index 58872405f..a90ec99e0 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -26,7 +26,6 @@ namespace IRaCIS.Application.Services /// state:1-访视中,2-出组。0-全部 /// - [TrialAudit(AuditType.SubjectAudit, AuditOptType.AddOrUpdateSubject)] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] //[Authorize(Policy = IRaCISPolicy.PM_APM_CRC_QC)] public async Task> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand) From bcc9e1c7614446b61da7d930c65db95fa2438673 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 5 Dec 2023 14:40:30 +0800 Subject: [PATCH 05/14] =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7=E6=A0=B8?= =?UTF-8?q?=E6=9F=A5=E5=9B=BD=E9=99=85=E5=8C=96=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Handlers/ConsistencyVerificationHandler.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index 1a4a9399b..5603cb53f 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -116,7 +116,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers StringBuilder dialogMsg = new StringBuilder(); //---您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下: - dialogMsg.Append($"
{StaticData.International("ConsistencyVerification_Img")}
"); + dialogMsg.Append($"
{_localizer["ConsistencyVerification_Img"]}
"); var num = 0; List paramInfoList = new List(); @@ -184,7 +184,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers { dialogMsg.AppendLine($"
"); //---核对EDC数据,完全一致, 审核通过 - dialogMsg.AppendLine(StaticData.International("ConsistencyVerification_EDCA")); + dialogMsg.AppendLine(_localizer["ConsistencyVerification_EDCA"]); // dialogMsg.AppendLine(@$"
说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); @@ -192,9 +192,9 @@ namespace IRaCIS.Core.Application.MediatR.Handlers dbSV.CheckUserId = _userInfo.Id; dbSV.CheckPassedTime = DateTime.Now; //---核对EDC数据,完全一致 - dbSV.CheckResult = StaticData.International("ConsistencyVerification_EDCB"); + dbSV.CheckResult = _localizer["ConsistencyVerification_EDCB"]; //---自动核查通过 - dbSV.ManualPassReason = StaticData.International("ConsistencyVerification_Auto"); + dbSV.ManualPassReason = _localizer["ConsistencyVerification_Auto"]; //维护状态 dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate; @@ -213,7 +213,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers else { //"Problems are as follows: - dialogMsg.AppendLine($"
{StaticData.International("ConsistencyVerification_Prob")}
"); + dialogMsg.AppendLine($"
{_localizer["ConsistencyVerification_Prob"]}
"); num = 0; foreach (var item in dbExceptExcel) @@ -232,9 +232,9 @@ namespace IRaCIS.Core.Application.MediatR.Handlers } dialogMsg.AppendLine($"
"); - dialogMsg.AppendLine(@$"
{StaticData.International("ConsistencyVerification_Desc")}
"); + dialogMsg.AppendLine(@$"
{_localizer["ConsistencyVerification_Desc"]}
"); - dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + + dbSV.CheckResult = _localizer["ConsistencyVerification_Conf"] + String.Join(" | ", dbExceptExcel.Select(t => $"{_localizer["ConsistencyVerification_EdcL", t.StudyDate, t.Modality]}")) + " | " + String.Join(" | ", excelExceptDB.Select(t => $"{_localizer["ConsistencyVerification_IrcLi", t.StudyDate, t.Modality]}")); From edbcabace604430f079621e6a4d708e7b1857109 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 5 Dec 2023 17:48:38 +0800 Subject: [PATCH 06/14] =?UTF-8?q?Program=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/{Program.cs => 1Program.cs} | 0 IRaCIS.Core.API/{Startup.cs => 1Startup.cs} | 0 IRaCIS.Core.API/{Test.cs => 1Test.cs} | 0 IRaCIS.Core.API/2Program.cs | 231 --------------- IRaCIS.Core.API/IRC系统更新日志.docx | Bin 18441 -> 0 bytes IRaCIS.Core.API/IRaCIS.Core.API.xml | 56 ++-- IRaCIS.Core.API/Progranm.cs | 265 ++++++++++++++++++ .../Service/Management/UserService.cs | 7 +- .../ReadingImageTaskService.cs | 7 +- 9 files changed, 298 insertions(+), 268 deletions(-) rename IRaCIS.Core.API/{Program.cs => 1Program.cs} (100%) rename IRaCIS.Core.API/{Startup.cs => 1Startup.cs} (100%) rename IRaCIS.Core.API/{Test.cs => 1Test.cs} (100%) delete mode 100644 IRaCIS.Core.API/2Program.cs delete mode 100644 IRaCIS.Core.API/IRC系统更新日志.docx create mode 100644 IRaCIS.Core.API/Progranm.cs diff --git a/IRaCIS.Core.API/Program.cs b/IRaCIS.Core.API/1Program.cs similarity index 100% rename from IRaCIS.Core.API/Program.cs rename to IRaCIS.Core.API/1Program.cs diff --git a/IRaCIS.Core.API/Startup.cs b/IRaCIS.Core.API/1Startup.cs similarity index 100% rename from IRaCIS.Core.API/Startup.cs rename to IRaCIS.Core.API/1Startup.cs diff --git a/IRaCIS.Core.API/Test.cs b/IRaCIS.Core.API/1Test.cs similarity index 100% rename from IRaCIS.Core.API/Test.cs rename to IRaCIS.Core.API/1Test.cs diff --git a/IRaCIS.Core.API/2Program.cs b/IRaCIS.Core.API/2Program.cs deleted file mode 100644 index e7649cb42..000000000 --- a/IRaCIS.Core.API/2Program.cs +++ /dev/null @@ -1,231 +0,0 @@ -//using Autofac; -//using Autofac.Extensions.DependencyInjection; -//using IRaCIS.Core.API; -//using IRaCIS.Core.Application.Filter; -//using IRaCIS.Core.Application.MediatR.Handlers; -//using LogDashboard; -//using MassTransit; -//using MassTransit.NewIdProviders; -//using MediatR; -//using Microsoft.AspNetCore.Builder; -//using Microsoft.AspNetCore.Http.Features; -//using Microsoft.AspNetCore.HttpOverrides; -//using Microsoft.AspNetCore.SignalR; -//using Microsoft.Extensions.Configuration; -//using Microsoft.Extensions.DependencyInjection; -//using Microsoft.Extensions.Hosting; -//using Serilog; -//using System; - -//var builder = WebApplication.CreateBuilder(args); - - -// //ļΪ׼ urlȡֵ(дݲļ˾ͲҪݻ) -// var config = new ConfigurationBuilder() -// .AddEnvironmentVariables() -// .Build(); - -// var enviromentName = config["ASPNETCORE_ENVIRONMENT"]; - -// if (string.IsNullOrWhiteSpace(enviromentName)) -// { - -// var index = Array.IndexOf(args, "--env"); -// enviromentName = index > -1 -// ? args[index + 1] -// : "Development"; -// } - - -// NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); - - - - -//builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()) -// .ConfigureContainer(containerBuilder => -// { -// containerBuilder.RegisterModule(); -// }) -// .UseWindowsService().UseSerilog(); - - - -//// Add services to the container. - -////ػ -//builder.Services.AddJsonLocalization(options => options.ResourcesPath = "Resources"); - -//// 쳣ͳһ֤JsonлáַͳһTrim() -//builder.Services.AddControllers(options => -//{ -// //options.Filters.Add(); -// options.Filters.Add(); -// options.Filters.Add(); -// //options.Filters.Add(); - -// //if (_configuration.GetSection("BasicSystemConfig").GetValue("OpenLoginLimit")) -// //{ -// // options.Filters.Add(); - -// //} - - -//}).AddNewtonsoftJsonSetup(); // NewtonsoftJson л - -////̬WebApi + UnifiedApiResultFilter ʡ -//builder.Services.AddDynamicWebApiSetup(); -////AutoMapper -//builder.Services.AddAutoMapperSetup(); -////EF ORM QueryWithNoLock -//builder.Services.AddEFSetup(builder.Configuration); -////Http Ӧѹ -//builder.Services.AddResponseCompressionSetup(); -////Swagger Api ĵ -//builder.Services.AddSwaggerSetup(); -////JWT Token ֤ -//builder.Services.AddJWTAuthSetup(builder.Configuration); -//// MediatR Ϣ ¼ ӳ עhandlerӦϵ -//builder.Services.AddMediatR(typeof(ConsistencyVerificationHandler).Assembly); -//// EasyCaching -//builder.Services.AddEasyCachingSetup(); - -////services.AddDistributedMemoryCache(); - -////// hangfire ʱ н棬Ѻ~ -//builder.Services.AddhangfireSetup(builder.Configuration); -////// QuartZ ʱ ʹhangfire ʱãҪԴ򿪣Ѿ -////builder.Services.AddQuartZSetup(_configuration); - -//// ϴļ -////services.AddStaticFileAuthorizationSetup(); - - -//////HttpReports ʱ -////services.AddHttpReports().AddHttpTransport(); -////Serilog ־ӻ LogDashboard־ -//builder.Services.AddLogDashboardSetup(); -////ϴ -//builder.Services.Configure(options => -//{ -// options.MultipartBodyLengthLimit = int.MaxValue; -// options.ValueCountLimit = int.MaxValue; -// options.ValueLengthLimit = int.MaxValue; -//}); -////IP ð ߺ -////services.AddIpPolicyRateLimitSetup(_configuration); -////û Ȩ -//builder.Services.AddAuthorizationPolicySetup(builder.Configuration); - -//builder.Services.AddJsonConfigSetup(builder.Configuration); - -////תͷ ȡʵIP -//builder.Services.Configure(options => -//{ -// options.ForwardedHeaders = -// ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; -//}); -////DicomӰȾͼƬ ƽ̨ -//builder.Services.AddDicomSetup(); - -//// ʵʱӦ -//builder.Services.AddSignalR(); - - -//builder.Services.AddSingleton(); - -//builder.Services.AddControllers(); -//// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -////builder.Services.AddEndpointsApiExplorer(); -////builder.Services.AddSwaggerGen(); - -////SerilogExtension.AddSerilogSetup(enviromentName, builder.Host.confi); - - -//var app = builder.Build(); - -//// Configure the HTTP request pipeline. - -////ػ -//app.UseLocalization(); - -//app.UseForwardedHeaders(); - - -////Ҫ token ʵľ̬ļ wwwroot css, JavaScript, and images don't require authentication. -//app.UseStaticFiles(); - -//app.UseIRacisHostStaticFileStore(app.Environment); - -////LogDashboard -//app.UseLogDashboard("/LogDashboard"); - -////hangfire -////app.UseHangfireConfig(app.Environment); - -//////ʱ -////app.UseHttpReports(); - -////// м -////app.UseIpRateLimiting(); - -////Ӧѹ -//app.UseResponseCompression(); - -//if (app.Environment.IsDevelopment()) -//{ -// app.UseDeveloperExceptionPage(); -//} -//else -//{ - -// //app.UseHsts(); -//} - -//SwaggerSetup.Configure(app, app.Environment); - -//Console.WriteLine("ǰ " + builder.Environment.EnvironmentName); - -////app.UseMiddleware(); - -//// 쳣 404 -//app.UseStatusCodePagesWithReExecute("/Error/{0}"); - - - - -//////serilog ¼ûϢ -//app.UseSerilogConfig(app.Environment); - -//app.UseRouting(); - -//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); - - -//app.UseAuthentication(); -////app.UseJwtBearerQueryString(); -//app.UseAuthorization(); - -//////ļŷ Token -//////app.UseIRacisHostStaticFileStore(env); - - - -////app.UseEndpoints(endpoints => -////{ - - -//// endpoints.MapControllers(); - -//// endpoints.MapHub("/UploadHub")/*.RequireCors(t=>t.WithOrigins(new string[] {"null"}).AllowAnyMethod().AllowAnyHeader().AllowCredentials())*/; -////}); - - - -//app.MapControllers(); -//app.MapHub("/UploadHub")/*.RequireCors(t=>t.WithOrigins(new string[] {"null"}).AllowAnyMethod().AllowAnyHeader().AllowCredentials())*/; - - -//app.Run(); - -//ͬ diff --git a/IRaCIS.Core.API/IRC系统更新日志.docx b/IRaCIS.Core.API/IRC系统更新日志.docx deleted file mode 100644 index 467c074a1e7709eb03de8e22214976827220fcea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18441 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 J9y^0H0RRi!yVd{z diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 5b5c02b0c..fb1288021 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -4,34 +4,6 @@ IRaCIS.Core.API - - - 主要处理 前端404等错误 全局业务异常已统一处理了,非业务错误会来到这里 - - - - - - - 医生基本信息 、工作信息 专业信息、审核状态 - - - - - 获取医生详情 - - - - - - - - - - - - 系统用户登录接口[New] - 添加实验项目-返回新增Id[AUTH] 新记录Id @@ -373,6 +345,27 @@ 序列化成员 + + + 医生基本信息 、工作信息 专业信息、审核状态 + + + + + 获取医生详情 + + + + + + + + + + + + 系统用户登录接口[New] + 为了前端 一段时间无操作,需要重新登陆 @@ -380,6 +373,13 @@ + + + 主要处理 前端404等错误 全局业务异常已统一处理了,非业务错误会来到这里 + + + + 对称可逆加密 diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs new file mode 100644 index 000000000..5116d15fa --- /dev/null +++ b/IRaCIS.Core.API/Progranm.cs @@ -0,0 +1,265 @@ +using System; +using Autofac.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Configuration; +using Serilog; +using MediatR; +using IRaCIS.Core.Application.MediatR.Handlers; +using System.Threading.Tasks; +using MassTransit; +using MassTransit.NewIdProviders; +using System.IO; +using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore; +using IRaCIS.Core.Application.Helper; +using System.Runtime.InteropServices; +using Microsoft.AspNetCore.Builder; +using IRaCIS.Core.API; +using Autofac; +using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.DependencyInjection; +using IRaCIS.Core.Application.Filter; +using Microsoft.AspNetCore.HttpOverrides; +using IRaCIS.Application.Services.BackGroundJob; +using LogDashboard; + + + +#region ãԼάƽ̨ + +//ļΪ׼ urlȡֵ(дݲļ˾ͲҪݻ) +var config = new ConfigurationBuilder() + .AddEnvironmentVariables() + .Build(); + +var enviromentName = config["ASPNETCORE_ENVIRONMENT"]; + +if (string.IsNullOrWhiteSpace(enviromentName)) +{ + + var index = Array.IndexOf(args, "--env"); + enviromentName = index > -1 + ? args[index + 1] + : "Development"; +} + +if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) +{ + Log.Logger.Warning($"ǰƽ̨windows"); +} +else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) +{ + Log.Logger.Warning($"ǰƽ̨linux"); +} +else +{ + Log.Logger.Warning($"ǰƽ̨OSX or FreeBSD"); +} + +#endregion + + +NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); + +var builder = WebApplication.CreateBuilder(args); + +builder.Host.UseEnvironment(enviromentName) + .ConfigureAppConfiguration((hostContext, config) => + { + + //Console.WriteLine(hostContext.HostingEnvironment.EnvironmentName); + config.AddJsonFile("appsettings.json", false, true) + .AddJsonFile($"appsettings.{enviromentName}.json", false, true); + }) + .UseServiceProviderFactory(new AutofacServiceProviderFactory()) + .ConfigureContainer(containerBuilder => + { + containerBuilder.RegisterModule(); + }) + .UseWindowsService().UseSerilog(); + + + + +#region ÷ +var _configuration = builder.Configuration; + +// +builder.Services.AddHealthChecks(); +//ػ +builder.Services.AddJsonLocalization(options => options.ResourcesPath = "Resources"); + +// 쳣ͳһ֤JsonлáַͳһTrim() +builder.Services.AddControllers(options => +{ + //options.Filters.Add(); + options.Filters.Add(); + options.Filters.Add(); + options.Filters.Add(); + + if (_configuration.GetSection("BasicSystemConfig").GetValue("OpenLoginLimit")) + { + options.Filters.Add(); + } + +}) + .AddNewtonsoftJsonSetup(); // NewtonsoftJson л + +builder.Services.AddOptions().Configure(_configuration.GetSection("SystemEmailSendConfig")); +builder.Services.AddOptions().Configure(_configuration.GetSection("BasicSystemConfig")); +builder.Services.AddOptions().Configure(_configuration.GetSection("AliyunOSS")); +builder.Services.AddOptions().Configure(_configuration.GetSection("ObjectStoreService")); + + +//̬WebApi + UnifiedApiResultFilter ʡ +builder.Services.AddDynamicWebApiSetup(); +//AutoMapper +builder.Services.AddAutoMapperSetup(); +//EF ORM QueryWithNoLock +builder.Services.AddEFSetup(_configuration); +//Http Ӧѹ +builder.Services.AddResponseCompressionSetup(); +//Swagger Api ĵ +builder.Services.AddSwaggerSetup(); +//JWT Token ֤ +builder.Services.AddJWTAuthSetup(_configuration); + +// MediatR Ϣ ¼ ӳ עhandlerӦϵ +builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining()); +// EasyCaching +builder.Services.AddEasyCachingSetup(_configuration); + +// hangfire ʱ н棬Ѻ~ +builder.Services.AddhangfireSetup(_configuration); + + +//Serilog ־ӻ LogDashboard־ +builder.Services.AddLogDashboardSetup(); + + +builder.Services.AddJsonConfigSetup(_configuration); +//תͷ ȡʵIP +builder.Services.Configure(options => +{ + options.ForwardedHeaders = + ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; +}); +//DicomӰȾͼƬ ƽ̨ +builder.Services.AddDicomSetup(); + +// ʵʱӦ +builder.Services.AddSignalR(); + +builder.Services.AddSingleton(); + + + + + +#region ʷ +//builder.Services.AddMemoryCache(); +////ϴ +//builder.Services.Configure(options => +//{ +// options.MultipartBodyLengthLimit = int.MaxValue; +// options.ValueCountLimit = int.MaxValue; +// options.ValueLengthLimit = int.MaxValue; +//}); +//IP ð ߺ +//services.AddIpPolicyRateLimitSetup(_configuration); +// û Ȩ +//services.AddAuthorizationPolicySetup(_configuration); +#endregion + +#endregion + +var app = builder.Build(); +var env = app.Environment; + +#region м + + +// Configure the HTTP request pipeline. + +//ػ +app.UseLocalization(); + +app.UseForwardedHeaders(); + +//Ӧѹ +app.UseResponseCompression(); + +//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); + +//Ҫ token ʵľ̬ļ wwwroot css, JavaScript, and images don't require authentication. +app.UseStaticFiles(); + +app.UseMiddleware(); + +//LogDashboard +app.UseLogDashboard("/LogDashboard"); + +//hangfire +app.UseHangfireConfig(env); + + +//// м +//app.UseIpRateLimiting(); + + +if (env.IsDevelopment()) +{ + app.UseDeveloperExceptionPage(); +} +else +{ + //app.UseHsts(); +} + +// 쳣 404 +app.UseStatusCodePagesWithReExecute("/Error/{0}"); + +SwaggerSetup.Configure(app, env); + + +////serilog ¼ûϢ +app.UseSerilogConfig(env); + +app.UseRouting(); + +app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); + +//app.UseIRacisHostStaticFileStore(env); + + +app.UseAuthentication(); +app.UseAuthorization(); + + +app.UseEndpoints(endpoints => +{ + endpoints.MapControllers(); + + endpoints.MapHub("/UploadHub"); + + endpoints.MapHealthChecks("/health"); +}); + +// Serilog +SerilogExtension.AddSerilogSetup(enviromentName, app.Services); + +Log.Logger.Warning($"ǰ{enviromentName}"); + +var hangfireJobService = app.Services.GetRequiredService(); + +await hangfireJobService.InitHangfireJobTaskAsync(); + + +#endregion + +app.Run(); + + + diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 2606ad5b0..6f2f6718e 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -12,6 +12,7 @@ using Microsoft.Identity.Client; using static IRaCIS.Core.Domain.Share.StaticData; using IRaCIS.Core.Application.ViewModel; using Medallion.Threading; +using EasyCaching.Core; namespace IRaCIS.Application.Services { @@ -26,7 +27,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _userLogRepository; private readonly IDistributedLockProvider _distributedLockProvider; - private readonly IMemoryCache _cache; + private readonly IEasyCachingProvider _cache; private readonly IOptionsMonitor _verifyConfig; @@ -36,7 +37,7 @@ namespace IRaCIS.Application.Services IMailVerificationService mailVerificationService, IRepository verificationCodeRepository, IRepository doctorRepository, - IMemoryCache cache, + IEasyCachingProvider cache, IRepository userTrialRepository, IOptionsMonitor verifyConfig, IRepository userLogRepository @@ -631,7 +632,7 @@ namespace IRaCIS.Application.Services string cacheKey = $"{cachePrefix}{userName}"; // 从缓存中获取登录失败次数 - int? failCount = _cache.Get(cacheKey); + int? failCount = _cache.Get(cacheKey).Value; if (failCount == null) { diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index b7c96d35e..21b355e6b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -62,12 +62,10 @@ namespace IRaCIS.Application.Services private readonly IRepository _noneDicomStudyFileSystem; private readonly IRepository _readingQuestionTrialRepository; - private readonly IMemoryCache _cache; private readonly ITrialEmailNoticeConfigService _trialEmailNoticeConfigService; public ReadingImageTaskService( - IMapper mapper, IRepository noneDicomStudyRepository, IRepository visitTaskRepository, IRepository TrialRepository, @@ -90,8 +88,7 @@ namespace IRaCIS.Application.Services IRepository userRepository, IEasyCachingProvider provider, IRepository readingCustomTagRepository, - IRepository readingTaskQuestionMarkRepository, - IMemoryCache cache, + IRepository readingTaskQuestionMarkRepository, IRepository readingCriterionDictionaryRepository, IRepository readingTrialCriterionDictionaryRepository, IRepository tumorAssessmentRepository, @@ -107,7 +104,6 @@ namespace IRaCIS.Application.Services IRepository readingQuestionTrialRepository ) { - base._mapper = mapper; this._noneDicomStudyRepository = noneDicomStudyRepository; this._visitTaskRepository = visitTaskRepository; this._trialRepository = TrialRepository; @@ -144,7 +140,6 @@ namespace IRaCIS.Application.Services this._readingQuestionSystem = ReadingQuestionSystem; this._noneDicomStudyFileSystem = noneDicomStudyFileSystem; this._readingQuestionTrialRepository = readingQuestionTrialRepository; - this._cache = cache; this._trialEmailNoticeConfigService = trialEmailNoticeConfigService; } From 9bb5266d615ea6438803590cf20f19d2f9cc0382 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 5 Dec 2023 17:50:57 +0800 Subject: [PATCH 07/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Progranm.cs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index 5116d15fa..32d6aa977 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -27,6 +27,9 @@ using LogDashboard; + +var builder = WebApplication.CreateBuilder(args); + #region ãԼάƽ̨ //ļΪ׼ urlȡֵ(дݲļ˾ͲҪݻ) @@ -58,13 +61,9 @@ else Log.Logger.Warning($"ǰƽ̨OSX or FreeBSD"); } -#endregion - NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); -var builder = WebApplication.CreateBuilder(args); - builder.Host.UseEnvironment(enviromentName) .ConfigureAppConfiguration((hostContext, config) => { @@ -79,8 +78,7 @@ builder.Host.UseEnvironment(enviromentName) containerBuilder.RegisterModule(); }) .UseWindowsService().UseSerilog(); - - +#endregion #region ÷ @@ -259,7 +257,16 @@ await hangfireJobService.InitHangfireJobTaskAsync(); #endregion -app.Run(); +try +{ + app.Run(); + +} +catch (Exception e) +{ + + Log.Logger.Error(e.InnerException is null ? e.Message + e.StackTrace : e.InnerException?.Message + e.InnerException?.StackTrace); +} From 8f438ff314162027ea47b545310a27d34d86a3dc Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 6 Dec 2023 08:43:53 +0800 Subject: [PATCH 08/14] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=B8=B8=E8=A7=81nuget?= =?UTF-8?q?=E5=8C=85=EF=BC=8C=E9=A2=84=E5=A4=87=E5=8D=87=E7=BA=A7net8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/1Program.cs | 2 +- IRaCIS.Core.API/IRaCIS.Core.API.csproj | 21 +++++++------------ .../IRaCIS.Core.Application.csproj | 18 ++++++++-------- IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj | 4 ++-- .../IRaCIS.Core.Infra.EFCore.csproj | 4 ++-- .../IRaCIS.Core.Infrastructure.csproj | 4 ++-- IRaCIS.Core.Test/IRaCIS.Core.Test.csproj | 2 +- 7 files changed, 25 insertions(+), 30 deletions(-) diff --git a/IRaCIS.Core.API/1Program.cs b/IRaCIS.Core.API/1Program.cs index 7ba083592..1f3449c62 100644 --- a/IRaCIS.Core.API/1Program.cs +++ b/IRaCIS.Core.API/1Program.cs @@ -17,7 +17,7 @@ using System.Runtime.InteropServices; namespace IRaCIS.Core.API { - public class Program + public class Program1 { public readonly string environment; public static async Task Main(string[] args) diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.csproj b/IRaCIS.Core.API/IRaCIS.Core.API.csproj index c3c264151..816fd9726 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.csproj +++ b/IRaCIS.Core.API/IRaCIS.Core.API.csproj @@ -24,12 +24,7 @@ 1701;1702;1591 - - - - - - + @@ -70,20 +65,20 @@ - - + + true - + - + - + - - + + diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj index 8153511fb..bf82287d9 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj @@ -65,18 +65,18 @@ - + - - + + - + true @@ -85,9 +85,9 @@ true - - - + + + @@ -96,8 +96,8 @@ - - + + diff --git a/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj b/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj index 53f18f1b4..5611c9d8f 100644 --- a/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj +++ b/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj b/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj index 926824848..aec773466 100644 --- a/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj +++ b/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj @@ -23,8 +23,8 @@ - - + + diff --git a/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj b/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj index 738f20c04..ffeaf4324 100644 --- a/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj +++ b/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj @@ -13,9 +13,9 @@ - + - + diff --git a/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj b/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj index 899f95036..807e7a1be 100644 --- a/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj +++ b/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj @@ -14,7 +14,7 @@ - + all From 0e4c972b19bbc7a5731b2a44fe7318565f7b650a Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 6 Dec 2023 09:09:59 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9program=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Progranm.cs | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index 32d6aa977..ecb3447bd 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -48,18 +48,6 @@ if (string.IsNullOrWhiteSpace(enviromentName)) : "Development"; } -if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) -{ - Log.Logger.Warning($"ǰƽ̨windows"); -} -else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) -{ - Log.Logger.Warning($"ǰƽ̨linux"); -} -else -{ - Log.Logger.Warning($"ǰƽ̨OSX or FreeBSD"); -} NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); @@ -248,7 +236,6 @@ app.UseEndpoints(endpoints => // Serilog SerilogExtension.AddSerilogSetup(enviromentName, app.Services); -Log.Logger.Warning($"ǰ{enviromentName}"); var hangfireJobService = app.Services.GetRequiredService(); @@ -259,8 +246,31 @@ await hangfireJobService.InitHangfireJobTaskAsync(); try { + #region л ƽ̨ + + Log.Logger.Warning($"ǰ{enviromentName}"); + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + Log.Logger.Warning($"ǰƽ̨windows"); + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + Log.Logger.Warning($"ǰƽ̨linux"); + } + else + { + Log.Logger.Warning($"ǰƽ̨OSX or FreeBSD"); + } + + #endregion + + app.Run(); + + + } catch (Exception e) { From 1baa31db04e01b3ef9c125cc0ab7b768ce19a6a8 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 6 Dec 2023 09:30:45 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E5=86=99=E6=B3=95=E5=8F=98=E6=9B=B4=20?= =?UTF-8?q?=E5=AF=BC=E8=87=B4windows=20=E6=9C=8D=E5=8A=A1=E6=8C=82?= =?UTF-8?q?=E6=8E=89=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Progranm.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index ecb3447bd..be89b76e3 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -27,11 +27,7 @@ using LogDashboard; - -var builder = WebApplication.CreateBuilder(args); - -#region ãԼάƽ̨ - +#region ȡ //ļΪ׼ urlȡֵ(дݲļ˾ͲҪݻ) var config = new ConfigurationBuilder() .AddEnvironmentVariables() @@ -48,11 +44,19 @@ if (string.IsNullOrWhiteSpace(enviromentName)) : "Development"; } +#endregion + +var builder = WebApplication.CreateBuilder(new WebApplicationOptions +{ + EnvironmentName = enviromentName +}); + +#region NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); -builder.Host.UseEnvironment(enviromentName) +builder.Host .ConfigureAppConfiguration((hostContext, config) => { From 1fb1b3d563dba47db98c8d7165ed124f087d7c92 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 6 Dec 2023 09:57:45 +0800 Subject: [PATCH 11/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8C=BB=E7=94=9F?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Progranm.cs | 13 ++++++++++++- .../Service/Doctor/ResearchPublicationService.cs | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index be89b76e3..af047ad5f 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -43,7 +43,6 @@ if (string.IsNullOrWhiteSpace(enviromentName)) ? args[index + 1] : "Development"; } - #endregion var builder = WebApplication.CreateBuilder(new WebApplicationOptions @@ -51,11 +50,23 @@ var builder = WebApplication.CreateBuilder(new WebApplicationOptions EnvironmentName = enviromentName }); +#region windows еķʽ + +var urlsIndex = Array.IndexOf(args, "--urls"); +if (urlsIndex > -1) +{ + builder.WebHost.UseUrls(args[urlsIndex + 1]); +} +// +#endregion + #region NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); + + builder.Host .ConfigureAppConfiguration((hostContext, config) => { diff --git a/IRaCIS.Core.Application/Service/Doctor/ResearchPublicationService.cs b/IRaCIS.Core.Application/Service/Doctor/ResearchPublicationService.cs index 1c17ceebe..8749571be 100644 --- a/IRaCIS.Core.Application/Service/Doctor/ResearchPublicationService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/ResearchPublicationService.cs @@ -23,9 +23,9 @@ namespace IRaCIS.Application.Services public async Task GetResearchPublication(Guid doctorId) { var doctorScientificResearchInfo = await researchPublicationRepository.Where(o => o.DoctorId == doctorId) - .ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); + .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - return doctorScientificResearchInfo; + return doctorScientificResearchInfo!; } From f469ce0227bbdcb5b79e41ddc99f302af3883166 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 6 Dec 2023 10:17:54 +0800 Subject: [PATCH 12/14] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=9A=84=E6=96=B9=E5=BC=8F=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/Progranm.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index af047ad5f..c58aaf662 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -24,6 +24,7 @@ using IRaCIS.Core.Application.Filter; using Microsoft.AspNetCore.HttpOverrides; using IRaCIS.Application.Services.BackGroundJob; using LogDashboard; +using OfficeOpenXml.Utils; @@ -52,12 +53,20 @@ var builder = WebApplication.CreateBuilder(new WebApplicationOptions #region windows еķʽ -var urlsIndex = Array.IndexOf(args, "--urls"); +//foreach (var arg in args) +//{ +// Console.WriteLine(arg); +//} + +int urlsIndex = Array.FindIndex(args, arg => arg != null && arg.StartsWith("--urls")); + if (urlsIndex > -1) { - builder.WebHost.UseUrls(args[urlsIndex + 1]); + var url = args[urlsIndex].Substring("--urls=".Length); + Console.WriteLine(url); + builder.WebHost.UseUrls(url); } -// + #endregion #region From fc8aaea395550486eab585854f46bc30b6dfeb19 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 6 Dec 2023 10:33:11 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/UploadDownLoadController.cs | 2 +- .../Helper/FileStoreHelper.cs | 34 ------------------- .../Service/Inspection/DTO/InspectionModel.cs | 4 --- .../Management/DTO/UserTypeRoleModel.cs | 1 - .../Service/Management/UserService.cs | 2 +- .../Service/QC/DTO/QARecordViewModel.cs | 2 +- .../Service/QC/DTO/QCListViewModel.cs | 1 - .../Reading/Dto/ReadingPeriodSetViewModel.cs | 2 +- 8 files changed, 4 insertions(+), 44 deletions(-) diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 34193ceeb..73efc46c6 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -402,7 +402,7 @@ namespace IRaCIS.Core.API.Controllers } - catch (Exception ex) + catch (Exception ) { _provider.Remove($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}"); diff --git a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs index 8027d4635..63e2278f1 100644 --- a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs +++ b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs @@ -14,40 +14,6 @@ namespace IRaCIS.Core.Application.Helper; public static class FileStoreHelper { - public static string UploadOOS(string filePath,string route) - { - var endpoint = ConfigurationManager.AppSettings["AliyunOSS:endpoint"]; - // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 - - // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 - var accessKeyId = ConfigurationManager.AppSettings["AliyunOSS:accessKeyId"]; - var accessKeySecret = ConfigurationManager.AppSettings["AliyunOSS:accessKeySecret"]; - // 填写Bucket名称,例如examplebucket。 - var bucketName = ConfigurationManager.AppSettings["AliyunOSS:bucketName"]; - // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 - - var fileNameList = filePath.Split(',').ToList(); - var fileName = fileNameList[fileNameList.Count - 1]; - - var objectName = route+ fileName; - // 填写本地文件完整路径,例如D:\\localpath\\examplefile.txt。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 - var localFilename = filePath; - // 创建OSSClient实例。 - var client = new OssClient(endpoint, accessKeyId, accessKeySecret); - try - { - // 上传文件。 - var result = client.PutObject(bucketName, objectName, localFilename); - - return result.ETag; - } - catch (Exception ex) - { - throw new BusinessValidationFailedException("上传异常!"); - - } - } - //处理文件名 压缩包,或者目录类的 会带上相对路径 public static (string TrustedFileNameForFileStorage, string RealName) GetStoreFileName(string fileName,bool isChangeToPdfFormat=false) { diff --git a/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs b/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs index dfd96079c..127b80708 100644 --- a/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs +++ b/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs @@ -357,7 +357,6 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO public class GetDataInspectionOutDto : DataInspection { - public Guid? TrialReadingCriterionId { get; set; } public string TrialReadingCriterionName { get; set; } public string BlindName { get; set; } @@ -371,9 +370,6 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO //public string ParentJson { get; set; } = string.Empty; - - public string CreateUserRealName { get; set; } = string.Empty; - public string Description { get; set; } = string.Empty; public string DescriptionCN { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs index a68328309..2b97741d3 100644 --- a/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs @@ -9,7 +9,6 @@ namespace IRaCIS.Core.Application.Contracts /// UserTypeRoleView 列表视图模型 public class UserTypeRoleView : UserTypeMenuAddOrEdit { - public UserTypeEnum UserTypeEnum { get; set; } public List UserTypeGroupList { get; set; } = new List(); public new List UserTypeGroupIdList => UserTypeGroupList.Select(t => t.DictionaryId).ToList(); diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 6f2f6718e..e24721232 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -282,7 +282,7 @@ namespace IRaCIS.Application.Services { await _mailVerificationService.AdminResetPwdSendEmailAsync(userId, pwd); } - catch (Exception ex) + catch (Exception ) { //---请检查邮箱地址或者联系维护人员, 邮件发送失败, 未能创建账户成功 throw new BusinessValidationFailedException(_localizer["User_CreateFailed"]); diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs index c26348971..bbdb7f757 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs @@ -476,7 +476,7 @@ namespace IRaCIS.Core.Application.Contracts.DTO { return JsonConvert.DeserializeObject>(ParamInfo); } - catch (Exception e) + catch (Exception ) { return new List(); diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index c620c1100..51ee5499d 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -711,7 +711,6 @@ namespace IRaCIS.Core.Application.Contracts public string RequestReReadingReason { get; set; } = string.Empty; - public DateTime? SuggesteFinishedTime { get; set; } [DictionaryTranslateAttribute("RequestReReadingResult")] public RequestReReadingResult RequestReReadingResultEnum { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs index 9f3c9f688..9c22a8b91 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs @@ -10,7 +10,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public class ReadingPeriodSetAddOrEdit { - public new Guid? Id { get; set; } + public Guid? Id { get; set; } /// /// 项目ID From 6a8a0059515ff0754e111da1640c705ba719e9b7 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 6 Dec 2023 11:47:10 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E4=BF=AE=E6=94=B9trigger=20=E6=B3=A8?= =?UTF-8?q?=E5=85=A5=E6=9C=8D=E5=8A=A1=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Triggers/AddlTrialUserTrigger.cs | 8 +++++--- .../Triggers/SubjectStateTrigger.cs | 10 ++++++++-- .../Triggers/SubjectVisitFinalVisitTrigger.cs | 13 ++++++++++--- IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs | 10 +++++----- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs b/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs index b89ffbf42..6f5082e6e 100644 --- a/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs @@ -1,6 +1,7 @@ using EntityFrameworkCore.Triggered; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; +using Microsoft.Extensions.Localization; using System; using System.Collections.Generic; using System.Linq; @@ -11,18 +12,19 @@ namespace IRaCIS.Core.Application.Triggers { // 统一处理 外部用户、中心调研(先添加 再发送邮件)、参与医生加入到项目 ----废弃 - public class AddlTrialUserTrigger :BaseService, IBeforeSaveTrigger + public class AddlTrialUserTrigger :IBeforeSaveTrigger { + public IStringLocalizer _localizer; private readonly IRepository _trialRepository; private readonly IRepository _userRepository; - public AddlTrialUserTrigger(IRepository trialRepository, IRepository userRepository) + public AddlTrialUserTrigger(IRepository trialRepository, IRepository userRepository, IStringLocalizer localizer) { _trialRepository = trialRepository; _userRepository = userRepository; - + _localizer = localizer; } public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) { diff --git a/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs index 765de8984..884a0e8ec 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs @@ -1,20 +1,26 @@ using AutoMapper; using EntityFrameworkCore.Triggered; using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure; using MassTransit; +using Microsoft.Extensions.Localization; namespace IRaCIS.Core.Application.Triggers { /// /// /// - public class SubjectStateTrigger :BaseService, IAfterSaveTrigger + public class SubjectStateTrigger : IAfterSaveTrigger { + public IStringLocalizer _localizer; + private readonly IRepository _repository; private readonly IRepository _subjectVisitRepository; - public SubjectStateTrigger(IRepository subjectVisitRepository) + public SubjectStateTrigger(IRepository subjectVisitRepository, IStringLocalizer localizer, IRepository repository) { + _repository = repository; + _localizer = localizer; _subjectVisitRepository = subjectVisitRepository; } diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs index 6c2073461..791e17704 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs @@ -2,15 +2,17 @@ using IRaCIS.Core.Application.Service; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure; using MassTransit; +using Microsoft.Extensions.Localization; namespace IRaCIS.Core.Application.Triggers { /// /// 处理 访视 末次评估 会影响Subject 状态 /// - public class SubjectVisitFinalVisitTrigger :BaseService, IAfterSaveTrigger + public class SubjectVisitFinalVisitTrigger :IAfterSaveTrigger { private readonly IRepository _subjectVisitRepository; private readonly IRepository _readingPeriodSetRepository; @@ -19,7 +21,8 @@ namespace IRaCIS.Core.Application.Triggers private readonly IRepository _subjectRepository; private readonly IRepository _visitTaskRepository; private readonly IVisitTaskHelpeService _ivisitTaskHelpeService; - + public IStringLocalizer _localizer; + private readonly IRepository _repository; public SubjectVisitFinalVisitTrigger(IRepository subjectVisitRepository, IRepository readingPeriodSetRepository, @@ -27,7 +30,9 @@ namespace IRaCIS.Core.Application.Triggers IRepository visitTaskRepository, IVisitTaskHelpeService visitTaskHelpeService, IRepository readModuleRepository, - IRepository subjectRepository) + IRepository subjectRepository, + IStringLocalizer localizer, + IRepository repository) { _subjectVisitRepository = subjectVisitRepository; this._readingPeriodSetRepository = readingPeriodSetRepository; @@ -36,6 +41,8 @@ namespace IRaCIS.Core.Application.Triggers this._readingPeriodPlanRepository = readingPeriodPlanRepository; this._readModuleRepository = readModuleRepository; _subjectRepository = subjectRepository; + _repository = repository; + _localizer = localizer; } public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index ab463a705..535cae623 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -587,12 +587,12 @@ namespace IRaCIS.Core.Infra.EFCore throw new DBSaveFailedException("SQL 事务失败,请检查环境。"); } - catch (Exception ex) - { - _logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message); + //catch (Exception ex) + //{ + // _logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message); - throw new DBSaveFailedException("数据保存异常。"); - } + // throw new DBSaveFailedException(ex.Message); + //} }