.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