From 41a7c43fe9a7c187aeb1d5c619a7737485a427b8 Mon Sep 17 00:00:00 2001 From: "{872297557@qq.com}" <872297557@qq.com> Date: Thu, 12 Jan 2023 17:57:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4IsFrontTaskNeedSignButNotSign?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs | 5 ++ .../IRaCIS.Core.Application.xml | 5 ++ .../ReadingClinicalDataService.cs | 30 ++++------ ...askIsFrontTaskNeedSignButNotSignTrigger.cs | 59 +++++++++++++++++++ 4 files changed, 80 insertions(+), 19 deletions(-) create mode 100644 IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs diff --git a/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs index ac0e9fad5..94d9208d4 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/EFSetup.cs @@ -43,6 +43,11 @@ namespace IRaCIS.Core.API triggerOptions.AddTrigger(); triggerOptions.AddTrigger(); + triggerOptions.AddTrigger(); + + + + }); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 31ca1366e..5d1cd4e54 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -8224,6 +8224,11 @@ 因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务 + + + 因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务 + + 构造函数注入 diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 2a8180e03..0004e3734 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -319,17 +319,6 @@ namespace IRaCIS.Application.Services IsClinicalDataSign = true }); - - - - var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务 - //小于自己任务号的任务 存在需要签名 但是没签名 - .Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)).Select(t => t.Id); - - await _visitTaskRepository.BatchUpdateNoTrackingAsync(t=>visitTaskIdQueryable.Contains(t.Id), u => new VisitTask() - { - IsFrontTaskNeedSignButNotSign = true - }); } @@ -358,18 +347,21 @@ namespace IRaCIS.Application.Services IsClinicalDataSign = true }); - var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务 - //小于自己任务号的任务 存在需要签名 但是没签名 - .Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)).Select(t => t.Id); - - await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable.Contains(t.Id), u => new VisitTask() - { - IsFrontTaskNeedSignButNotSign = true - }); + } } + //维护 IsFrontTaskNeedSignButNotSign 在添加任务哪里用触发器也维护了 + var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务 + //小于自己任务号的任务 存在需要签名 但是没签名 + .Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)).Select(t => t.Id); + + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable.Contains(t.Id), u => new VisitTask() + { + IsFrontTaskNeedSignButNotSign = true + }); + } diff --git a/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs b/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs new file mode 100644 index 000000000..0e275794b --- /dev/null +++ b/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs @@ -0,0 +1,59 @@ +using AutoMapper; +using EasyCaching.Core; +using EntityFrameworkCore.Triggered; +using IRaCIS.Core.Application.Service; +using IRaCIS.Core.Application.ViewModel; +using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infrastructure; +using System.Linq.Expressions; + +namespace IRaCIS.Core.Application.Triggers +{ + /// + /// 因为可能先一致性核查通过,生成其他标准的任务了,新签名的标准也需要产生任务 + /// + public class VisitTaskIsFrontTaskNeedSignButNotSignTrigger : IAfterSaveTrigger + { + + private readonly IRepository _visitTaskRepository; + + + public VisitTaskIsFrontTaskNeedSignButNotSignTrigger( + + IRepository visitTaskRepository) + { + + + _visitTaskRepository = visitTaskRepository; + } + + + //添加任务的时候 如果需要签名 并且已经签名了 那么要维护该标准 该Subject IsFrontTaskNeedSignButNotSign字段 + public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) + { + var visitTask = context.Entity; + + + Expression> visitTaskLambda = x => x.TrialId == visitTask.TrialId && x.SubjectId == visitTask.SubjectId && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId; + if (context.ChangeType == ChangeType.Added) + { + + if (visitTask.IsNeedClinicalDataSign ) + { + + var visitTaskIdQueryable = _visitTaskRepository.Where(visitTaskLambda) //该Subject 该标准的任务 + //小于自己任务号的任务 存在需要签名 但是没签名 + .Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum)).Select(t => t.Id); + + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => visitTaskIdQueryable.Contains(t.Id), u => new VisitTask() + { + IsFrontTaskNeedSignButNotSign = true + }); + } + + } + } + + + } +} \ No newline at end of file