diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index 4fddb69c5..3294818d2 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -4,6 +4,7 @@ using IRaCIS.Core.Domain.Share; using MediatR; using System.Linq.Expressions; +using System.Text; namespace IRaCIS.Core.Application.MediatR.Handlers { @@ -99,50 +100,91 @@ namespace IRaCIS.Core.Application.MediatR.Handlers 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(); + + StringBuilder dialogMsg = new StringBuilder(); + dialogMsg.Append("你好根据本系统自动像识别,该受者本访视已提交的像检查情况如下:"); + var num = 0; + foreach (var item in sv.StudyList) + { + num++; + dialogMsg.AppendLine($"
{num}.{item.StudyDate}{item.Modality}"); + } + var dbSV = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == sv.SubjectVisitId).IfNullThrowException(); if (etcVisitStudyList.Count == 0) { + dialogMsg.AppendLine($"
存在问题如下:"); + num = 0; + foreach (var item in sv.StudyList) + { + num++; + dialogMsg.AppendLine($"
{num}.{item.StudyDate}{item.Modality} 在导入模板中不存在 不存在!"); + } + + dialogMsg.AppendLine(@$"
说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); + 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,CreateTime=DateTime.Now }); + dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, TalkContent = dialogMsg.ToString(), UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,CreateTime=DateTime.Now }); } else { //etc 和数据库 并集 var unionList = dbVisitStudyList.Union(etcVisitStudyList); + // 数据库存在 var dbExceptExcel = dbVisitStudyList.Except(etcVisitStudyList); + + // excel 存在 var excelExceptDB = etcVisitStudyList.Except(dbCheckList); //两者没有差别 if (dbExceptExcel.Count() == 0) { + + dialogMsg.AppendLine($"核对EDC数据,完全一致, 审核通过"); + dialogMsg.AppendLine(@$"
说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); dbSV.CheckState = CheckStateEnum.CVPassed; dbSV.CheckPassedTime = DateTime.Now; dbSV.CheckResult = "核对EDC数据,完全一致"; dbSV.ManualPassReason = "自动核查通过"; dbSV.RequestBackState = dbSV.RequestBackState== RequestBackStateEnum.CRC_RequestBack? RequestBackStateEnum.PM_NotAgree: RequestBackStateEnum.NotRequest; - dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, TalkContent = dbSV.CheckResult, UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now }); + dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, TalkContent = dialogMsg.ToString(), UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now }); } else { + + dialogMsg.AppendLine($"
存在问题如下:"); + + num = 0; + foreach (var item in dbExceptExcel) + { + num++; + dialogMsg.AppendLine($"
{num}.EDC 缺少{item.StudyDate}{item.Modality} !"); + } + + foreach (var item in excelExceptDB) + { + num++; + dialogMsg.AppendLine($"
{num}.IRC 缺少{item.StudyDate}{item.Modality} !"); + } + + + dialogMsg.AppendLine(@$"
说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。"); + 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, CreateTime = DateTime.Now }); + dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, TalkContent = dialogMsg.ToString(), UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now }); } }