From 47eaed78ed1063e6b45469c60d2101dc5c8edacf Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 4 Dec 2024 17:45:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/ExcelExportService.cs | 85 ++++++++++++++----- .../Service/QC/DTO/QCListViewModel.cs | 4 +- .../Service/QC/_MapConfig.cs | 7 +- 3 files changed, 72 insertions(+), 24 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 7f623e5d4..771306921 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -12,9 +12,11 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using NPOI.POIFS.Properties; +using NPOI.SS.Formula.Functions; using NPOI.XSSF.UserModel; using System.ComponentModel.Design; using System.Globalization; +using System.Linq; using static IRaCIS.Core.Application.Service.ExcelExportHelper; using IDictionaryService = IRaCIS.Application.Interfaces.IDictionaryService; @@ -1612,34 +1614,77 @@ namespace IRaCIS.Core.Application.Service.Common } else { - //产生了阅片期 - if (resultExceptJudgeList.Any(t => t.IsSubjectHaveReadingPeriod)) + + //没有产生裁判 有可能一个人没做完,也有可能做完了没产生裁判 + //两个人都做了(1、两个人都阅片完,确实没产生,2、两个人都阅片完,还没到阅片期,没产生裁判) + + //默认都设置为null 仅仅处理 阅片期读完了没产生裁判 裁判选择标记需要设置的访视 + visitItem.IsJudgeSelect = null; + visitItem.IsTrigerJudge = null; + + //阅片期访视号 + var subjectReadingPeriondVisitNumList = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode).FirstOrDefault()?.SubjectCriterionReadingPeriodVisitNumList; + + if (subjectReadingPeriondVisitNumList != null) { - //没有产生裁判 有可能一个人没做完,也有可能做完了没产生裁判 - //两个人都做了 - if (resultExceptJudgeList.Count(t => t.VisitTaskNum == visitItem.VisitTaskNum && t.SubjectCode == visitItem.SubjectCode) == 2) + //两个人完成最大得任务号 + var subjectMaxFinishedVisitTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode) + .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max(); + + var minReadingPeriodVisitNum = subjectReadingPeriondVisitNumList.Min(); + + var maxReadingPeriodVisitNum = subjectReadingPeriondVisitNumList.Max(); + + //最小阅片期 最大阅片期 完成访视号 对应存在三种情况 + + //有阅片期读完了 存在两种 + //大于最大阅片期 + if (subjectMaxFinishedVisitTaskNum > maxReadingPeriodVisitNum) { - //不存在裁判 将R1设置 - if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + //两个人都做完了 并且当前任务号小于 最大阅片期 才设置裁判 产生标记和裁判选择标记 + if (resultExceptJudgeList.Count(t => t.VisitTaskNum == visitItem.VisitTaskNum && t.SubjectCode == visitItem.SubjectCode) == 2 && visitItem.VisitTaskNum <= maxReadingPeriodVisitNum) { - visitItem.IsJudgeSelect = true; - } - else - { - visitItem.IsJudgeSelect = false; + //不存在裁判 将R1设置 + if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + { + visitItem.IsJudgeSelect = true; + visitItem.IsTrigerJudge = false; + + } + else + { + visitItem.IsJudgeSelect = false; + visitItem.IsTrigerJudge = false; + } } } - else + //大于最小阅片期 + else if (subjectMaxFinishedVisitTaskNum > minReadingPeriodVisitNum) { - visitItem.IsJudgeSelect = null; - visitItem.IsTrigerJudge = null; + //找到小于完成最大任务号最近的阅片期号 + + var latestFinishedReadingPeriodNum = subjectReadingPeriondVisitNumList.Where(t => t < subjectMaxFinishedVisitTaskNum).OrderBy(t => t).Max(); + + if (resultExceptJudgeList.Count(t => t.VisitTaskNum == visitItem.VisitTaskNum && t.SubjectCode == visitItem.SubjectCode) == 2 && visitItem.VisitTaskNum <= latestFinishedReadingPeriodNum) + { + //不存在裁判 将R1设置 + if (visitItem.ArmEnum == Arm.DoubleReadingArm1) + { + visitItem.IsJudgeSelect = true; + visitItem.IsTrigerJudge = false; + + } + else + { + visitItem.IsJudgeSelect = false; + visitItem.IsTrigerJudge = false; + } + } + } } - else - { - visitItem.IsJudgeSelect = null; - visitItem.IsTrigerJudge = null; - } + + diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index 1818fdcde..61e5802ec 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -227,7 +227,7 @@ namespace IRaCIS.Core.Application.Contracts public string SubjectCode { get; set; } = String.Empty; [DictionaryTranslateAttribute("Subject_Visit_Status")] - public SubjectStatus SubjectStatus { get; set; } + public SubjectStatus SubjectStatus { get; set; } public String TrialSiteCode { get; set; } = String.Empty; @@ -1159,7 +1159,7 @@ namespace IRaCIS.Core.Application.Contracts { public List QuestionAnswerList { get; set; } - public bool IsSubjectHaveReadingPeriod { get; set; } + public List SubjectCriterionReadingPeriodVisitNumList { get; set; } public String TrialSiteCode { get; set; } = String.Empty; public string SubjectCode { get; set; } = String.Empty; diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index 728795f1e..212d2ad66 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -257,9 +257,12 @@ namespace IRaCIS.Core.Application.Service false))) .ForMember(o => o.JudgeNote, t => t.MapFrom(u => u.ReadingCategory==ReadingCategory.Judge? u.JudgeResultRemark : u.JudgeVisitTask.JudgeResultRemark)) .ForMember(o => o.VisitNote, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).FirstOrDefault()!.Answer)) - .ForMember(o => o.IsSubjectHaveReadingPeriod, t => t.MapFrom(u => arbitrationRule == ArbitrationRule.Reading ? - u.Subject.ReadModuleList.Any(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.ReadingSetType == ReadingSetType.ImageReading) : false)) + //.ForMember(o => o.IsSubjectHaveReadingPeriod, t => t.MapFrom(u => arbitrationRule == ArbitrationRule.Reading ? + //u.Subject.ReadModuleList.Any(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.ReadingSetType == ReadingSetType.ImageReading) : false)) + + .ForMember(o => o.SubjectCriterionReadingPeriodVisitNumList, t => t.MapFrom(u => + u.Subject.ReadModuleList.Where(t=>t.TrialReadingCriterionId == trialReadingCriterionId && t.ReadingSetType == ReadingSetType.ImageReading).Select(c=>c.SubjectVisit.VisitNum))) .ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.Subject.TrialSite.TrialSiteCode)) .ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code)) .ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName))