添加项目文件。

This commit is contained in:
DK
2022-03-28 15:27:40 +08:00
parent b620fcb0cf
commit dc78fd1a09
898 changed files with 173053 additions and 0 deletions
@@ -0,0 +1,103 @@
using Magicodes.ExporterAndImporter.Core;
using MediatR;
using MiniExcelLibs.Attributes;
namespace IRaCIS.Core.Application.MediatR.CommandAndQueries
{
public class ConsistencyVerificationRequest : IRequest<string>
{
public List<CheckViewModel> ETCList { get; set; } = new List<CheckViewModel>();
public Guid TrialId { get; set; }
}
public class CheckDBModel : CheckViewModel
{
public Guid SubjectVisitId { get; set; }
public Guid StudyId { get; set; }
}
public class CheckViewModel
{
[ExcelColumnName("中心编号")]
public string SiteCode { get; set; } = string.Empty;
[ExcelColumnName("受试者筛选号")]
public string SubjectCode { get; set; } = string.Empty;
[ExcelColumnName("访视名称")]
public string VisitName { get; set; } = string.Empty;
[ExcelColumnName("检查日期")]
public string StudyDate { get; set; } = string.Empty;
[ExcelColumnName("检查技术")]
public string Modality { get; set; } = string.Empty;
public override bool Equals(object? obj)
{
if (obj == null) return false;
var checkModel = obj as CheckViewModel;
if (checkModel is not null)
{
return SiteCode == checkModel.SiteCode && SubjectCode == checkModel.SubjectCode && VisitName == checkModel.VisitName && StudyDate == checkModel.StudyDate && Modality == checkModel.Modality;
}
else
{
return false;
}
}
public override int GetHashCode()
{
return (SiteCode + SubjectCode + VisitName + StudyDate + Modality).GetHashCode();
}
}
public class VisitPlanInfluenceSubjectVisitDTO
{
[ExporterHeader(IsIgnore = true)]
public Guid StudyId { get; set; }
[ExporterHeader(IsIgnore = true)]
public Guid TrialId { get; set; }
[ExporterHeader(IsIgnore = true)]
public Guid SubjectVisitId { get; set; }
[ExporterHeader(DisplayName = "中心编号")]
public string TrialSiteCode { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "受试者")]
public string SubjectCode { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "访视名称")]
public string VisitName { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "检查时间", Format = "yyyy-mm-dd hh:mm:ss")]
public DateTime StudyTime { get; set; }
[ExporterHeader(DisplayName = "检查技术")]
public string Modality { get; set; } = string.Empty;
[ExporterHeader(IsIgnore = true)]
public bool IsDicomStudy { get; set; }
[ExporterHeader(DisplayName = "影像类型")]
public string ImageType => IsDicomStudy ? "Dicom" : "非Dicom";
[ExporterHeader(DisplayName = "历史窗口")]
public string HistoryWindow { get; set; } = string.Empty;
[ExporterHeader(DisplayName = "之前超窗调整后没超窗")]
[ValueMapping(text: "yes", true)]
[ValueMapping(text: "no", false)]
public bool IsOverWindowNowNotOverWindow { get; set; }
[ExporterHeader(DisplayName = "目前窗口")]
public string NowWindow { get; set; } = string.Empty;
[ExporterHeader(IsIgnore = true)]
public DateTime CreateTime { get; set; }
}
}
@@ -0,0 +1,23 @@
using IRaCIS.Core.Domain.Share;
using MediatR;
using System;
namespace IRaCIS.Core.Application.MediatR.CommandAndQueries
{
public class QAMessageRequest:IRequest<bool>
{
//有一部分QA 消息 在 AutoFac AOP中,但是由于直接服务生成API 上面切入的AOP会失效,
//因为采用进程内消息通信,可以解耦代码,避免写在一起,影响阅读,专注于业务逻辑
public NoticeType MessageType { get; set; }
public Guid SubjectVisitId { get; set; }
//用于关联关系记录 删除的时候,处理消息
public Guid QCChallengeId { get; set; }
//用于关联关系记录 删除的时候,处理消息
public Guid QCChallengeReplyId { get; set; }
}
}
@@ -0,0 +1,44 @@
using EasyCaching.Core;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore;
using MediatR;
namespace IRaCIS.Core.Application.MediatR.Handlers
{
public class AnonymizeCacheRequest : IRequest<bool>
{
}
public class AnonymizeCacheHandler : IRequestHandler<AnonymizeCacheRequest,bool>
{
private readonly IRepository _repository;
private readonly IEasyCachingProvider _provider;
/// <summary>
/// 构造函数注入
/// </summary>
public AnonymizeCacheHandler(IRepository repository, IEasyCachingProvider provider)
{
_repository = repository;
_provider = provider;
}
public Task<bool> Handle(AnonymizeCacheRequest request, CancellationToken cancellationToken)
{
var systemAnonymizationList = _repository.Where<SystemAnonymization>(t => t.IsEnable).ToList();
_provider.Set(StaticData.Anonymize_AddFixedFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize_AddIRCInfoFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize_FixedField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed).ToList(), TimeSpan.FromDays(7));
_provider.Set(StaticData.Anonymize_IRCInfoField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
return Task.FromResult(true);
}
}
}
@@ -0,0 +1,151 @@
using AutoMapper;
using IRaCIS.Core.Application.MediatR.CommandAndQueries;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore;
using MediatR;
using System.Linq.Expressions;
namespace IRaCIS.Core.Application.MediatR.Handlers
{
public class ConsistencyVerificationHandler : IRequestHandler<ConsistencyVerificationRequest, string>
{
private readonly IRepository<DicomStudy> _studyRepository;
private readonly IUserInfo _userInfo;
private readonly IRepository<Subject> _subjectRepository;
private readonly IRepository<SubjectVisit> _subjectVisitRepository;
private readonly IRepository<TrialSite> _trialSiteRepository;
private readonly IMapper _mapper;
private readonly IRepository<NoneDicomStudy> _noneDicomStudyRepository;
/// <summary>
/// 构造函数注入
/// </summary>
public ConsistencyVerificationHandler(IRepository<DicomStudy> studyRepository, IUserInfo userInfo,
IRepository<Subject> subjectRepository, IRepository<SubjectVisit> subjectVisitRepository,
IRepository<TrialSite> trialSiteRepository, IRepository<NoneDicomStudy> noneDicomStudyRepository,
IMapper mapper)
{
_noneDicomStudyRepository = noneDicomStudyRepository;
_studyRepository = studyRepository;
_userInfo = userInfo;
_subjectRepository = subjectRepository;
_subjectVisitRepository = subjectVisitRepository;
_trialSiteRepository = trialSiteRepository;
_mapper = mapper;
}
async Task<string> IRequestHandler<ConsistencyVerificationRequest, string>.Handle(ConsistencyVerificationRequest request, CancellationToken cancellationToken)
{
var trialId = request.TrialId;
//处理Excel大小写
request.ETCList.ForEach(t => { t.Modality = t.Modality.ToUpper().Trim(); t.StudyDate = Convert.ToDateTime(t.StudyDate).ToString("yyyy-MM-dd"); t.SiteCode = t.SiteCode.ToUpper().Trim(); t.VisitName = t.VisitName.ToUpper().Trim(); t.SubjectCode = t.SubjectCode.ToUpper().Trim(); });
var etcList = request.ETCList;
//Expression<Func<SubjectVisit, bool>> subjectVisitLambda2 = x => x.TrialId == request.TrialId;
//subjectVisitLambda2= subjectVisitLambda2.And(x => x.CheckState == CheckStateEnum.ToCheck && x.AuditState == AuditStateEnum.QCPassed || (x.CheckState == CheckStateEnum.CVIng && x.AuditState == AuditStateEnum.QCPassed));
Expression<Func<SubjectVisit, bool>> subjectVisitLambda = x => x.TrialId == request.TrialId &&
(x.CheckState == CheckStateEnum.ToCheck && x.AuditState == AuditStateEnum.QCPassed || (x.CheckState == CheckStateEnum.CVIng && x.AuditState == AuditStateEnum.QCPassed));
var dicomQuery = from sv in _subjectVisitRepository.Where(subjectVisitLambda)
join trialSite in _trialSiteRepository.Where(t => t.TrialId == trialId) on sv.SiteId equals trialSite.SiteId
join subject in _subjectRepository.AsQueryable() on sv.SubjectId equals subject.Id
join study in _studyRepository.AsQueryable() on sv.Id equals study.SubjectVisitId
select new CheckDBModel()
{
SubjectVisitId = sv.Id,
SiteCode = trialSite.TrialSiteCode,
StudyDate = study.StudyTime.ToString("yyyy-MM-dd"),
StudyId = study.Id,
Modality = study.Modalities,
SubjectCode = subject.Code,
VisitName = sv.VisitName,
};
var noneDicomQuey = from sv in _subjectVisitRepository.Where(subjectVisitLambda)
join trialSite in _trialSiteRepository.Where(t => t.TrialId == trialId) on sv.SiteId equals trialSite.SiteId
join subject in _subjectRepository.AsQueryable() on sv.SubjectId equals subject.Id
join noneDicomStudy in _noneDicomStudyRepository.AsQueryable() on sv.Id equals noneDicomStudy.SubjectVisitId
select new CheckDBModel()
{
SubjectVisitId = sv.Id,
SiteCode = trialSite.TrialSiteCode,
StudyDate = noneDicomStudy.ImageDate.ToString("yyyy-MM-dd"),
StudyId = noneDicomStudy.Id,
Modality = noneDicomStudy.Modality,
SubjectCode = subject.Code,
VisitName = sv.VisitName,
};
var dbList = (await dicomQuery.ToListAsync()).Union(await noneDicomQuey.ToListAsync());
//处理数据库 大小写
dbList.ForEach(t => { t.Modality = t.Modality.ToUpper().Trim(); t.SiteCode = t.SiteCode.ToUpper().Trim(); t.VisitName = t.VisitName.ToUpper().Trim(); t.SubjectCode = t.SubjectCode.ToUpper().Trim(); });
var dbCheckList = _mapper.Map<List<CheckViewModel>>(dbList);
//按照数据库数据访视分组
var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName })
.Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList();
foreach (var sv in svGroup)
{
//找到etc 当前visit site 和subject 一致的检查列表
var etcVisitStudyList = etcList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
var dbVisitStudyList = dbCheckList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
var dbSV = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == sv.SubjectVisitId).IfNullThrowException();
if (etcVisitStudyList.Count == 0)
{
dbSV.CheckResult = "当前访视在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和ETC系统保持一致";
dbSV.CheckState = CheckStateEnum.CVIng;
dbSV.ForwardState = ForwardStateEnum.ToForward;
dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, TalkContent = dbSV.CheckResult, UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
}
else
{
//etc 和数据库 并集
var unionList = dbVisitStudyList.Union(etcVisitStudyList);
var dbExceptExcel = dbVisitStudyList.Except(etcVisitStudyList);
var excelExceptDB = etcVisitStudyList.Except(dbCheckList);
//两者没有差别
if (dbExceptExcel.Count() == 0)
{
dbSV.CheckState = CheckStateEnum.CVPassed;
dbSV.CheckPassedTime = DateTime.Now;
dbSV.CheckResult = "核对EDC数据,完全一致";
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, TalkContent = dbSV.CheckResult, UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
}
else
{
dbSV.CheckResult = "根据导入的一致性核查数据,请确认本访视以下不一致检查项信息:" + String.Join(" | ", dbExceptExcel.Select(t => $"EDC 缺少:{t.StudyDate} {t.Modality} ")) + " | "
+ String.Join(" | ", excelExceptDB.Select(t => $"IRC 缺少:{t.StudyDate} {t.Modality}"));
dbSV.CheckState = CheckStateEnum.CVIng;
dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
//讲核查结果发送消息给CRC
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, TalkContent = dbSV.CheckResult, UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt });
}
}
dbSV.CheckTime = DateTime.Now;
await _subjectVisitRepository.SaveChangesAsync();
}
return "OK";
}
}
}
@@ -0,0 +1,234 @@
//using IRaCIS.Core.Application.MediatR.CommandAndQueries;
//using MediatR;
//using System.Threading;
//using System.Threading.Tasks;
//using IRaCIS.Core.Domain.Share;
//using IRaCIS.Core.Infra.EFCore;
//using IRaCIS.Core.Domain.Models;
//using System.Linq;
//using System;
//namespace IRaCIS.Core.Application.MediatR.Handlers
//{
// public class QAMessageHandler : IRequestHandler<QAMessageRequest, bool>
// {
// private readonly IRepository<TrialUser> _userTrialRepository;
// private readonly IRepository<TrialSiteUser> _userTrialSiteRepository;
// private readonly IRepository<DicomStudy> _studyRepository;
// private readonly IRepository<QANotice> _qaNoticeRepository;
// private readonly IUserInfo _userInfo;
// private readonly IRepository<QCChallenge> _qaRecordRepository;
// private readonly IRepository<Subject> _subjectRepository;
// private readonly IRepository<SubjectVisit> _subjectVisitRepository;
// /// <summary>
// /// 构造函数注入
// /// </summary>
// public QAMessageHandler(IRepository<DicomStudy> studyRepository, IRepository<TrialUser> userTrialRepository, IRepository<TrialSiteUser> userTrialSiteRepository, IRepository<QANotice> qaNoticeRepository, IUserInfo userInfo,
// IRepository<QCChallenge> qaRecordRepository, IRepository<Subject> subjectRepository, IRepository<SubjectVisit> subjectVisitRepository)
// {
// _userTrialSiteRepository = userTrialSiteRepository;
// _userTrialRepository = userTrialRepository;
// _studyRepository = studyRepository;
// _qaNoticeRepository = qaNoticeRepository;
// _userInfo = userInfo;
// _qaRecordRepository = qaRecordRepository;
// _subjectRepository = subjectRepository;
// _subjectVisitRepository = subjectVisitRepository;
// }
// public Task<bool> Handle(QAMessageRequest request, CancellationToken cancellationToken)
// {
// var qaRecord = _qaRecordRepository.FirstOrDefault(t => t.Id == request.QCChallengeId);
// var subjectQuery =
// from sv in _subjectVisitRepository.Where(t => t.Id == qaRecord.SubjectVisitId)
// join sub in _subjectRepository.AsQueryable() on sv.SubjectId equals sub.Id
// select new
// {
// sv.VisitName,
// sv.VisitNum,
// SubjectName = sub.LastName + " / " + sub.FirstName,
// sub.SiteId
// };
// var subject = subjectQuery.First();
// //查询项目的参与者 和 负责site下CRC用户
// var trialUserList = _userTrialRepository.Where(t => t.TrialId == qaRecord.TrialId).ToList();
// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList();
// if (request.MessageType == NoticeType.QA_AddQARecord_NoticeCRC)
// {
// //找出当前操作的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 == subject.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == qaRecord.TrialId).ToList();
// //var siteCRCList = userList.Where(t => t.SiteId == subject.SiteId && t.UserTypeEnum == UserType.ClinicalResearchCoordinator).ToList();
// var notice = new QANotice()
// {
// TrialId = qaRecord.TrialId,
// SubjectVisitId = qaRecord.SubjectVisitId,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.QA_AddQARecord_NoticeCRC,
// NeedDeal = true,
// Message = $"QA -> CRC : {_userInfo.RealName} add QA Record",
// SendTime = DateTime.Now,
// RelationId = request.QCChallengeId
// };
// siteCRCList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser()
// {
// QANoticeId = notice.Id,
// SubjectVisitId = qaRecord.SubjectVisitId,
// ToUser = t.User.LastName + " / " + t.User.FirstName,
// ToUserId = t.UserId,
// ToUserType = t.UserTypeRole.UserTypeShortName
// }));
// //添加 发送给CRC的消息 消息和CRC是 一对多
// _qaNoticeRepository.Add(notice);
// }
// else if (request.MessageType == NoticeType.QARecordDialogPost)
// {
// #region QA通知处理 新建一条QA通知消息 需要分用户类型 记录关联Id 为了删除操作
// //CRC =>QA
// if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator)
// {
// //PM 或者admin可以代替CRC角色 不能从CRC列表中查询用户
// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id);
// var notice = new QANotice()
// {
// TrialId = qaRecord.TrialId,
// SubjectVisitId = qaRecord.SubjectVisitId,
// //FromUser = currentCRC.UserRealName,
// //FromUserId = _userInfo.Id,
// //FromUserType = currentCRC.UserType,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.CRC_QARecordDialogPost_NoticeQA,
// NeedDeal = true,
// Message = $"CRC -> QA : {_userInfo.RealName} post or reply message for QA record about SubjectName:{subject.SubjectName } VisitName: {subject.VisitName} VisitNum:{subject.VisitName} !",
// SendTime = DateTime.Now,
// RelationId = request.QCChallengeReplyId
// };
// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser()
// {
// QANoticeId = notice.Id,
// SubjectVisitId = qaRecord.SubjectVisitId,
// 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.AsQueryable()
// .Where(t => t.SubjectVisitId == qaRecord.SubjectVisitId && t.NeedDeal && (t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC
// || t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC || t.NoticeTypeEnum == NoticeType.QA_AddQARecord_NoticeCRC)).ToList();
// needDealNoticeList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// }
// if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
// {
// //找出当前操作的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 = userList.Where(t => t.SiteId == subject.SiteId && t.UserTypeEnum == UserType.ClinicalResearchCoordinator).ToList();
// var siteCRCList = _userTrialSiteRepository.Where(t =>
// t.SiteId == subject.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == qaRecord.TrialId).ToList();
// var notice = new QANotice()
// {
// TrialId = qaRecord.TrialId,
// SubjectVisitId = qaRecord.SubjectVisitId,
// //FromUser = currentQA.UserRealName,
// //FromUserId = _userInfo.Id,
// //FromUserType = currentQA.UserType,
// FromUser = _userInfo.RealName,
// FromUserId = _userInfo.Id,
// FromUserType = _userInfo.UserTypeShortName,
// NoticeTypeEnum = NoticeType.QA_QARecordDialogPost_NoticeCRC,
// NeedDeal = true,
// Message = $"QA -> CRC : {_userInfo.RealName} post or reply message for QA record about SubjectName:{subject.SubjectName } VisitName: {subject.VisitName} VisitNum:{subject.VisitName} !",
// SendTime = DateTime.Now,
// RelationId = request.QCChallengeReplyId
// };
// siteCRCList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser()
// {
// QANoticeId = notice.Id,
// SubjectVisitId = qaRecord.SubjectVisitId,
// ToUser = t.User.LastName + " / " + t.User.FirstName,
// ToUserId = t.UserId,
// ToUserType = t.UserTypeRole.UserTypeShortName
// }));
// //添加 发送给CRC的消息 消息和CRC是 一对多
// _qaNoticeRepository.Add(notice);
// //这里作为 CRC post的对话的回复
// var needDealNoticeList = _qaNoticeRepository.AsQueryable()
// .Where(t => t.SubjectVisitId == qaRecord.SubjectVisitId && t.NeedDeal && t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA).ToList();
// needDealNoticeList.ForEach(t =>
// {
// t.NeedDeal = false;
// t.DealTime = DateTime.Now;
// _qaNoticeRepository.Update(t);
// });
// }
// #endregion
// }
// else
// {
// }
// return Task.FromResult(true);
// }
// }
//}
@@ -0,0 +1,45 @@
using EasyCaching.Core;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore;
using MediatR;
namespace IRaCIS.Core.Application.MediatR.Handlers
{
public class TrialStateCacheRequest : IRequest<bool>
{
}
public class TrialStateCacheHandler : IRequestHandler<TrialStateCacheRequest, bool>
{
private readonly IRepository<Trial> _trialRepository;
private readonly IEasyCachingProvider _provider;
/// <summary>
/// 构造函数注入
/// </summary>
public TrialStateCacheHandler(IRepository<Trial> trialRepository, IEasyCachingProvider provider)
{
_trialRepository = trialRepository;
_provider = provider;
}
public Task<bool> Handle(TrialStateCacheRequest request, CancellationToken cancellationToken)
{
//项目启动,将项目状态缓存,因为hangfire 加入后台任务,还是向队列添加任务,执行都有延迟,效果不好
var list = _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr }).ToList();
// 每天都会有任务刷新状态,项目编辑 添加时 都会处理到缓存中
list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(7)));
return Task.FromResult(true);
}
}
}