IR 周期任务临时提交

IRC_NewDev
hang 2024-10-18 09:03:22 +08:00
parent 81b9c57de7
commit 13db4fc9e1
3 changed files with 113 additions and 24 deletions

View File

@ -1286,27 +1286,6 @@
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.EmailSendService.SendTrialImageQCTaskEmailAsync(System.Guid)">
<summary>
影像质控
</summary>
<param name="trialId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.EmailSendService.SendTrialQCQuestionEmailAsync(System.Guid)">
<summary>
QC质疑
</summary>
<param name="trialId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.EmailSendService.SendTrialImageQuestionAsync(System.Guid)">
<summary>
影像质疑
</summary>
<param name="trialId"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.Service.TrialEmailNoticeConfigService">
<summary>
TrialEmailNoticeConfigService
@ -12920,6 +12899,18 @@
MIM 回复医学返回通知IR
</summary>
</member>
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.UrgentMIMRepliedMedicalReviewConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.User},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TaskMedicalReview},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Dictionary},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.EmailNoticeConfig},Microsoft.Extensions.Options.IOptionsMonitor{IRaCIS.Core.Domain.Share.SystemEmailSendConfig})">
<summary>
MIM 回复医学返回通知IR
</summary>
</member>
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.UrgentMIMRepliedMedicalReviewConsumer.Consume(MassTransit.ConsumeContext{IRaCIS.Core.Domain.UrgentMIMRepliedMedicalReview})">
<summary>
MIM 回复医学返回通知IR
</summary>
<param name="context"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.UrgentIRApplyedReReadingConsumer">
<summary>
加急阅片 IR 申请重阅 或者PM 申请重阅
@ -13071,6 +13062,16 @@
影像质控
</summary>
</member>
<member name="T:IRaCIS.Core.Application.MassTransit.Recurring.UrgentIRUnReadTaskRecurringEventConsumer">
<summary>
10分钟检测通知IR 已通知的进行标注,下次不会再通知
</summary>
</member>
<member name="M:IRaCIS.Core.Application.MassTransit.Recurring.UrgentIRUnReadTaskRecurringEventConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingQuestionCriterionTrial},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitTask},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialUser})">
<summary>
10分钟检测通知IR 已通知的进行标注,下次不会再通知
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.TaskAllocationRuleView">
<summary> TaskAllocationRuleView 列表视图模型 </summary>
</member>

View File

@ -0,0 +1,85 @@
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.MassTransit.Consumer;
using MassTransit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.MassTransit.Recurring
{
/// <summary>
/// 10分钟检测通知IR 已通知的进行标注,下次不会再通知
/// </summary>
public class UrgentIRUnReadTaskRecurringEventConsumer(IRepository<ReadingQuestionCriterionTrial> _trialReadingCriterionRepository,
IRepository<VisitTask> _visitTaskRepository, IRepository<TrialUser> _trialUserRepository) : IConsumer<UrgentIRUnReadTaskRecurringEvent>
{
public Task Consume(ConsumeContext<UrgentIRUnReadTaskRecurringEvent> context)
{
var trialId = context.Message.TrialId;
//找到该项目所有的IR 并且有加急 和Pd 未读的任务
Expression<Func<VisitTask, bool>> comonTaskFilter = t => t.TrialId == trialId && t.TaskState == TaskState.Effect && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskAllocationState == TaskAllocationState.Allocated;
var trialUserList = _trialUserRepository.Where(t => t.TrialId == trialId).Select(t => new
{
t.UserId,
t.User.FullName,
t.User.UserName,
t.Trial.TrialCode,
t.Trial.ResearchProgramNo,
TrialReadingCriterionList = t.Trial.TrialReadingCriterionList.Select(t => new { t.CriterionName, TrialReadingCriterionId = t.Id }).ToList()
});
foreach (var trialUser in trialUserList)
{
var userId=trialUser.UserId;
var doctorCriterionList = _trialReadingCriterionRepository.Where(t => t.IsSigned && t.IsConfirm && t.Trial.TrialUserList.Any(t => t.UserId == userId))
.Select(c => new
{
TrialReadingCriterionId = c.Id,
UnReadList = c.VisitTaskList
.Where(t => t.DoctorUserId == userId && t.ReadingTaskState != ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect)
// 前序 不存在 未一致性核查未通过的
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
//前序 不存在 未生成任务的访视
.Where(t => c.IsAutoCreate == false ? !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum) : true)
.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
.Where(t=> t.SourceSubjectVisit.PDState==PDStateEnum.PDProgress || t.SourceSubjectVisit.IsEnrollmentConfirm ||
t.ReadModule.SubjectVisit.PDState == PDStateEnum.PDProgress || t.ReadModule.SubjectVisit.IsEnrollmentConfirm)
.Select(c=>new
{
SubejctCode= c.IsAnalysisCreate? c.BlindSubjectCode: c.Subject.Code,
c.TaskBlindName,
c.TaskName
}).ToList()
});
}
Console.WriteLine(DateTime.Now);
return Task.CompletedTask;
}
}
}

View File

@ -10,7 +10,7 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer;
/// <summary>
/// QC 影像质疑待处理
/// </summary>
public class QCImageQuestionRecurringEvent :DomainEvent
public class QCImageQuestionRecurringEvent : DomainEvent
{
public Guid TrialId { get; set; }
}
@ -31,7 +31,10 @@ public class ImageQCRecurringEvent : DomainEvent
public Guid TrialId { get; set; }
}
public class TestEvent
//加急的待阅任务时过10分钟统计10分钟内该IR账号的全部待阅任务
public class UrgentIRUnReadTaskRecurringEvent : DomainEvent
{
public Guid TrialId { get; set; }
}