清理无用的文件
parent
a53e306427
commit
debe22fdc3
|
@ -1,7 +1,6 @@
|
||||||
using Autofac;
|
using Autofac;
|
||||||
using Autofac.Extras.DynamicProxy;
|
using Autofac.Extras.DynamicProxy;
|
||||||
using IRaCIS.Core.Application;
|
using IRaCIS.Core.Application;
|
||||||
using IRaCIS.Core.Application.AOP;
|
|
||||||
using IRaCIS.Core.Application.BackGroundJob;
|
using IRaCIS.Core.Application.BackGroundJob;
|
||||||
using IRaCIS.Core.Infra.EFCore;
|
using IRaCIS.Core.Infra.EFCore;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
|
@ -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<TResult> InterceptAsync<TResult>(Task<TResult> 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<TResult> InterceptAsync<TResult>(ValueTask<TResult> 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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<QANotice> _qaNoticeRepository;
|
|
||||||
|
|
||||||
// private readonly IRepository<DicomStudy> _studyRepository;
|
|
||||||
// private readonly IRepository<TrialUser> _userTrialRepository;
|
|
||||||
// private readonly IRepository<TrialSiteUser> _userTrialSiteRepository;
|
|
||||||
// private readonly IUserInfo _userInfo;
|
|
||||||
|
|
||||||
// public QANoticeAOP(IRepository<QANotice> qaNoticeRepository,
|
|
||||||
// IUserInfo userInfo, IRepository<DicomStudy> studyRepository, IRepository<TrialUser> userTrialRepository, IRepository<TrialSiteUser> 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");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// }
|
|
||||||
//}
|
|
|
@ -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<TResult>(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<string>(invocation.Arguments[0].ToString());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void InterceptSynchronous(IInvocation invocation)
|
|
||||||
{
|
|
||||||
invocation.Proceed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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<LogActionFilter> _logger;
|
|
||||||
|
|
||||||
// public LogActionFilter(ILogService logService, IUserInfo userInfo , ILogger<LogActionFilter> 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);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
File diff suppressed because it is too large
Load Diff
|
@ -11042,7 +11042,7 @@
|
||||||
构造函数注入
|
构造函数注入
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.MediatR.Handlers.ConsistencyVerificationHandler.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Domain.Share.IUserInfo,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSite},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},AutoMapper.IMapper)">
|
<member name="M:IRaCIS.Core.Application.MediatR.Handlers.ConsistencyVerificationHandler.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Domain.Share.IUserInfo,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialSite},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},AutoMapper.IMapper,Microsoft.Extensions.Localization.IStringLocalizer)">
|
||||||
<summary>
|
<summary>
|
||||||
构造函数注入
|
构造函数注入
|
||||||
</summary>
|
</summary>
|
||||||
|
|
|
@ -348,7 +348,6 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
/// <summary>删除 项目 下某一site </summary>
|
/// <summary>删除 项目 下某一site </summary>
|
||||||
[HttpDelete("{id:guid}/{trialId:guid}")]
|
[HttpDelete("{id:guid}/{trialId:guid}")]
|
||||||
[TrialAudit(AuditType.TrialAudit, AuditOptType.DeleteTrialSite)]
|
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
[Obsolete]
|
[Obsolete]
|
||||||
public async Task<IResponseOutput> DeleteTrialSite(Guid id)
|
public async Task<IResponseOutput> DeleteTrialSite(Guid id)
|
||||||
|
|
|
@ -26,7 +26,6 @@ namespace IRaCIS.Application.Services
|
||||||
/// <param name="subjectCommand">state:1-访视中,2-出组。0-全部</param>
|
/// <param name="subjectCommand">state:1-访视中,2-出组。0-全部</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
|
||||||
[TrialAudit(AuditType.SubjectAudit, AuditOptType.AddOrUpdateSubject)]
|
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
//[Authorize(Policy = IRaCISPolicy.PM_APM_CRC_QC)]
|
//[Authorize(Policy = IRaCISPolicy.PM_APM_CRC_QC)]
|
||||||
public async Task<IResponseOutput<string>> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand)
|
public async Task<IResponseOutput<string>> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand)
|
||||||
|
|
Loading…
Reference in New Issue