From 1532ac4a7ee50b55c2c2ee8d0b613721625a2421 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 24 Oct 2025 10:12:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E8=87=B4=E6=80=A7?= =?UTF-8?q?=E5=85=A8=E9=87=8F=E6=A0=B8=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 35 +++++---- .../Command/ConsistenCheckCommand.cs | 7 +- .../Consumer/ConsistencyCheckConsumer.cs | 17 ++--- .../TrialSiteUser/DTO/TrialStatViewModel.cs | 74 ++++++++++++++++++- .../Service/TrialSiteUser/TrialStatService.cs | 41 ++++++++-- 5 files changed, 140 insertions(+), 34 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index c8452203a..e83e73b9c 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -674,20 +674,6 @@ - - - 邮件事件消息列表 - - - - - - - 重新发布失败的事件消息 - - - - 质控问题答案导出 @@ -995,6 +981,20 @@ + + + 邮件事件消息列表 + + + + + + + 重新发布失败的事件消息 + + + + ExploreRecommendService @@ -18837,6 +18837,13 @@ + + + 疗效统计表,只针对肿瘤标准 排除基线 + + + + 访视 质疑状态 触发修改 diff --git a/IRaCIS.Core.Application/MassTransit/Command/ConsistenCheckCommand.cs b/IRaCIS.Core.Application/MassTransit/Command/ConsistenCheckCommand.cs index 16036f343..5f085ff13 100644 --- a/IRaCIS.Core.Application/MassTransit/Command/ConsistenCheckCommand.cs +++ b/IRaCIS.Core.Application/MassTransit/Command/ConsistenCheckCommand.cs @@ -1,4 +1,5 @@ -using MiniExcelLibs.Attributes; +using IRaCIS.Core.Application.Helper; +using MiniExcelLibs.Attributes; using System.ComponentModel.DataAnnotations; namespace IRaCIS.Core.Application.MassTransit.Command @@ -37,7 +38,8 @@ namespace IRaCIS.Core.Application.MassTransit.Command public class FullCheckResult: CheckViewModel { - + public string LatestScanDateStr { get; set; } = string.Empty; + public string Modalitys { get; set; } = string.Empty; public DateTime CheckTime { get; set; } public string CheckResult { get; set; } @@ -81,6 +83,7 @@ namespace IRaCIS.Core.Application.MassTransit.Command public string Modality { get; set; } = string.Empty; #region 全量一致性核查加入 + [DictionaryTranslateAttribute("Subject_Visit_Status")] public SubjectStatus SubjectStatus { get; set; } diff --git a/IRaCIS.Core.Application/MassTransit/Consumer/ConsistencyCheckConsumer.cs b/IRaCIS.Core.Application/MassTransit/Consumer/ConsistencyCheckConsumer.cs index 97bb2cdae..f27466de2 100644 --- a/IRaCIS.Core.Application/MassTransit/Consumer/ConsistencyCheckConsumer.cs +++ b/IRaCIS.Core.Application/MassTransit/Consumer/ConsistencyCheckConsumer.cs @@ -197,7 +197,7 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer var dbExceptExcel = dbVisitStudyList.Except(etcVisitStudyList); // excel 存在 - var excelExceptDB = etcVisitStudyList.Except(dbCheckList); + var excelExceptDB = etcVisitStudyList.Except(dbVisitStudyList); //ETC 和系统的完全一致 两者没有差别 if (dbExceptExcel.Count() == 0 && excelExceptDB.Count() == 0) @@ -313,8 +313,7 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer var etcList = context.Message.ETCList; - Expression> subjectVisitLambda = x => x.TrialId == trialId /*&& x.Subject.IsSubjectQuit == false*/ && x.AuditState == AuditStateEnum.QCPassed && - (x.CheckState == CheckStateEnum.CVPassed); + Expression> subjectVisitLambda = x => x.TrialId == trialId /*&& x.Subject.IsSubjectQuit == false*/ && x.AuditState == AuditStateEnum.QCPassed; var dicomQuery = from sv in _subjectVisitRepository.Where(subjectVisitLambda) join subject in _subjectRepository.AsQueryable() on sv.SubjectId equals subject.Id @@ -390,9 +389,9 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer var dbExceptExcel = dbVisitStudyList.Except(etcVisitStudyList); // excel 存在 - var excelExceptDB = etcVisitStudyList.Except(dbCheckList); + var excelExceptDB = etcVisitStudyList.Except(dbVisitStudyList); - var dbCurrentVisitFirst = dbCheckList.First(); + var dbCurrentVisitFirst = dbVisitStudyList.First(); //ETC 和系统的完全一致 两者没有差别 if (dbExceptExcel.Count() == 0 && excelExceptDB.Count() == 0) @@ -407,8 +406,8 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer SiteCode = dbCurrentVisitFirst.SiteCode, SubjectCode = dbCurrentVisitFirst.SubjectCode, VisitName = dbCurrentVisitFirst.VisitName, - Modality = string.Join('、', dbVisitStudyList.Select(t => t.Modality)), - StudyDate = dbVisitStudyList.Select(t => t.StudyDate).MaxBy(d => DateTime.Parse(d)) ?? "" + Modalitys = string.Join('、', dbVisitStudyList.Select(t => t.Modality)), + LatestScanDateStr = dbVisitStudyList.Select(t => t.StudyDate).MaxBy(d => DateTime.Parse(d)) ?? "" }); } else @@ -425,8 +424,8 @@ namespace IRaCIS.Core.Application.MassTransit.Consumer SiteCode = dbCurrentVisitFirst.SiteCode, SubjectCode = dbCurrentVisitFirst.SubjectCode, VisitName = dbCurrentVisitFirst.VisitName, - Modality = string.Join('、', dbVisitStudyList.Select(t => t.Modality)), - StudyDate = dbVisitStudyList.Select(t => t.StudyDate).MaxBy(d => DateTime.Parse(d)) ?? "", + Modalitys = string.Join('、', dbVisitStudyList.Select(t => t.Modality)), + LatestScanDateStr = dbVisitStudyList.Select(t => t.StudyDate).MaxBy(d => DateTime.Parse(d)) ?? "", CheckResult = checkResult }); } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs index 87eba5c60..e60d03b3b 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialStatViewModel.cs @@ -1,5 +1,8 @@ -using System; +using IRaCIS.Core.Application.Contracts; +using IRaCIS.Core.Application.Helper; +using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -76,8 +79,9 @@ namespace IRaCIS.Core.Application.ViewModel public class EfficacyEvaluationQuery { + [NotDefault] public Guid TrialId { get; set; } - + [NotDefault] public Guid TrialReadingCriterionId { get; set; } } @@ -87,4 +91,70 @@ namespace IRaCIS.Core.Application.ViewModel public int SubjectCount { get; set; } } + + public class EfficacyEvaluationExport + { + + + public Guid Id { get; set; } + + public Guid SubjectId { get; set; } + + public string SubjectCode { get; set; } = String.Empty; + + public decimal VisitTaskNum { get; set; } + + public string TaskName { get; set; } + public string TaskBlindName { get; set; } + + + public ReadingTaskState ReadingTaskState { get; set; } + + public ReadingCategory ReadingCategory { get; set; } + + public bool? IsBaseline { get; set; } + + + [DictionaryTranslateAttribute("ArmEnum")] + public Arm ArmEnum { get; set; } + + //裁判结果选择的访视或者全局任务Id + public Arm? JudgeArmEnum { get; set; } + + //裁判选择标记 + //根据裁判的任务结果 设置访视任务的这个字段 该字段表示 裁判认同该任务的结果 + [DictionaryTranslateAttribute("YesOrNoAudit")] + public bool? IsJudgeSelect { get; set; } + + + //在当前访视触发裁判,或者在截止日期小于等于当前访视的阅片期触发裁判 + [DictionaryTranslateAttribute("YesOrNoAudit")] + public bool? IsTrigerJudge { get; set; } + + //(如果是访视点裁判,则仅在所选阅片人对应访视 显示;如果是阅片期裁判,则在所选阅片人 阅片期内的所有访视 显示此原因) + public string JudgeNote { get; set; } = string.Empty; + + + public string VisitNote { get; set; } + + + + + + + + + + + + + + public Guid? DoctorUserId { get; set; } + public string UserName { get; set; } + public List QuestionAnswerList { get; set; } + + public List SubjectCriterionReadingPeriodVisitNumList { get; set; } + + public String TrialSiteCode { get; set; } = String.Empty; + } } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs index cc79ae16b..f92b862d3 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialStatService.cs @@ -15,7 +15,7 @@ public class TrialStatService( IRepository _trialDocumentRepository, IRepository _systemDocumentRepository, IRepository _systemNoticeRepository, - IRepository _subjectVisitImageBackRecordReposiotry, + IRepository _visitTaskRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService { @@ -33,7 +33,8 @@ public class TrialStatService( QCFinishedCount = t.SubjectVisitList.Where(t => t.AuditState == AuditStateEnum.QCPassed || t.AuditState == AuditStateEnum.QCFailed).Count(), CheckFinishedCount = t.SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.CVPassed).Count(), - CriterionList = t.TrialReadingCriterionList.Select(t => new VisitReadingCriterionInfo() + CriterionList = t.TrialReadingCriterionList.Where(t => inQuery.TrialReadingCriterionId != null ? t.Id == inQuery.TrialReadingCriterionId : true) + .Select(t => new VisitReadingCriterionInfo() { TrialReadingCriterionId = t.Id, TrialReadingCriterionName = t.CriterionName, @@ -84,10 +85,36 @@ public class TrialStatService( return list; } - /////疗效统计表,只针对肿瘤标准 排除基线 - ///// - //public async Task> GetTrialEfficacyEvaluationStatList(EfficacyEvaluationQuery inQuery) - //{ - //} + /// + /// 疗效统计表,只针对肿瘤标准 排除基线 + /// + /// + /// + public async Task> GetTrialEfficacyEvaluationStatList(EfficacyEvaluationQuery inQuery) + { + + var query = _visitTaskRepository + .Where(t => t.TrialId == inQuery.TrialId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)) + + //访视和全局查询已签名完成的,裁判可以是未签名,未完成的 + .Where(t => (t.ReadingTaskState == ReadingTaskState.HaveSigned && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)) || t.ReadingCategory == ReadingCategory.Judge) + .Select(t => new EfficacyEvaluationExport() + { + Id = t.Id, + SubjectId = t.SubjectId, + SubjectCode = t.Subject.Code, + VisitTaskNum = t.VisitTaskNum, + TaskName = t.TaskName, + TaskBlindName = t.TaskBlindName, + ReadingTaskState = t.ReadingTaskState, + ReadingCategory = t.ReadingCategory, + + + + }); + + return new List { }; + + } } \ No newline at end of file