修改任务查询

This commit is contained in:
2023-03-06 13:09:19 +08:00
parent 6baae40a38
commit 0e55c50d4c
4 changed files with 197 additions and 141 deletions
@@ -59,7 +59,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
{
SubjectVisitId = sv.Id,
SiteCode = trialSite.TrialSiteCode,
StudyDate = study.StudyTime == null?string.Empty: ((DateTime)study.StudyTime).ToString("yyyy-MM-dd"),
StudyDate = study.StudyTime == null ? string.Empty : ((DateTime)study.StudyTime).ToString("yyyy-MM-dd"),
StudyId = study.Id,
Modality = study.ModalityForEdit,
SubjectCode = subject.Code,
@@ -81,143 +81,181 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
VisitName = sv.VisitName,
};
var dbList = (await dicomQuery.ToListAsync()).Union(await noneDicomQuey.ToListAsync());
var dbList = (await dicomQuery.ToListAsync()).Union(await noneDicomQuey.ToListAsync()).ToList();
//处理数据库 大小写
dbList.ForEach(t => { t.Modality = t.Modality.ToUpper().Trim(); t.SiteCode = t.SiteCode.ToUpper().Trim(); t.VisitName = t.VisitName.ToUpper().Trim(); t.SubjectCode = t.SubjectCode.ToUpper().Trim(); });
var dbCheckList = _mapper.Map<List<CheckViewModel>>(dbList);
//按照数据库数据访视分组
var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName })
.Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList();
////按照数据库数据访视分组 按照数据库的数据 一个个的访视对比
//var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName })
// .Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList();
foreach (var sv in svGroup)
//按照Excel数据访视分组 按照数据库的数据 一个个的访视对比
var svExcelGroup = etcList.GroupBy(t => new { t.SiteCode, t.SubjectCode, t.VisitName })
.Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, ExcelStudyList = g.ToList() }).ToList();
foreach (var sv in svExcelGroup)
{
//找到etc 当前visit site 和subject 一致的检查列表
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("您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:");
var num = 0;
List<ParamInfoDto> paramInfoList = new List<ParamInfoDto>();
foreach (var item in sv.StudyList)
//Excel 的数据 在IRC 中可以找到该访视
if (dbCheckList.Any(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName))
{
num++;
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查");
paramInfoList.Add(new ParamInfoDto()
{
Modality= item.Modality,
StudyDate= item.StudyDate,
});
}
var dbSV = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == sv.SubjectVisitId)).IfNullThrowException();
var dbVisitStudyList = dbList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
//找到etc 当前visit site 和subject 一致的检查列表
var etcVisitStudyList = etcList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
// 该访视 在EDC Excel中没有任何数据
if (etcVisitStudyList.Count == 0)
{
dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
num = 0;
foreach (var item in sv.StudyList)
StringBuilder dialogMsg = new StringBuilder();
dialogMsg.Append("您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:");
var num = 0;
List<ParamInfoDto> paramInfoList = new List<ParamInfoDto>();
foreach (var item in dbVisitStudyList)
{
num++;
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
}
dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
dbSV.CheckResult = "当前访视在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和EDC系统保持一致";
dbSV.CheckState = CheckStateEnum.CVIng;
dbSV.ForwardState = ForwardStateEnum.ToForward;
dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() {
SubjectVisitId = sv.SubjectVisitId,
IsCRCNeedReply= true,
TalkContent = dialogMsg.ToString(),
ParamInfo= JsonConvert.SerializeObject(paramInfoList),
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);
//ETC 和系统的完全一致 两者没有差别
if (dbExceptExcel.Count() == 0 && excelExceptDB.Count()==0)
{
dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine($"核对EDC数据,完全一致, 审核通过");
// dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
dbSV.CheckState = CheckStateEnum.CVPassed;
dbSV.CheckUserId = _userInfo.Id;
dbSV.CheckPassedTime = DateTime.Now;
dbSV.CheckResult = "核对EDC数据,完全一致";
dbSV.ManualPassReason = "自动核查通过";
//维护状态
dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate;
dbSV.RequestBackState = dbSV.RequestBackState== RequestBackStateEnum.CRC_RequestBack? RequestBackStateEnum.PM_NotAgree: RequestBackStateEnum.NotRequest;
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId,
ParamInfo = JsonConvert.SerializeObject(paramInfoList),
TalkContent = dialogMsg.ToString(), UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now });
}
// ETC 和系统的有区别
else
{
dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
num = 0;
foreach (var item in dbExceptExcel)
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查");
paramInfoList.Add(new ParamInfoDto()
{
num++;
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
Modality = item.Modality,
StudyDate = item.StudyDate,
});
}
var subjectVisitId = dbVisitStudyList.FirstOrDefault().SubjectVisitId;
var dbSV = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
#region Excel
//// 该访视 在EDC Excel中没有任何数据
//if (etcVisitStudyList.Count == 0)
//{
// dialogMsg.AppendLine($"<br/>");
// dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
// num = 0;
// foreach (var item in sv.StudyList)
// {
// num++;
// dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
// }
// dialogMsg.AppendLine($"<br/>");
// dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
// dbSV.CheckResult = "当前访视在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和EDC系统保持一致";
// dbSV.CheckState = CheckStateEnum.CVIng;
// dbSV.ForwardState = ForwardStateEnum.ToForward;
// dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
// dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog()
// {
// SubjectVisitId = sv.SubjectVisitId,
// IsCRCNeedReply = true,
// TalkContent = dialogMsg.ToString(),
// ParamInfo = JsonConvert.SerializeObject(paramInfoList),
// UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
// CreateTime = DateTime.Now
// });
//}
//else
#endregion
{
//etc 和数据库 并集
var unionList = dbVisitStudyList.Union(etcVisitStudyList);
// 数据库存在
var dbExceptExcel = dbVisitStudyList.Except(etcVisitStudyList);
// excel 存在
var excelExceptDB = etcVisitStudyList.Except(dbCheckList);
//ETC 和系统的完全一致 两者没有差别
if (dbExceptExcel.Count() == 0 && excelExceptDB.Count() == 0)
{
dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine($"核对EDC数据,完全一致, 审核通过");
// dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
dbSV.CheckState = CheckStateEnum.CVPassed;
dbSV.CheckUserId = _userInfo.Id;
dbSV.CheckPassedTime = DateTime.Now;
dbSV.CheckResult = "核对EDC数据,完全一致";
dbSV.ManualPassReason = "自动核查通过";
//维护状态
dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate;
dbSV.RequestBackState = dbSV.RequestBackState == RequestBackStateEnum.CRC_RequestBack ? RequestBackStateEnum.PM_NotAgree : RequestBackStateEnum.NotRequest;
dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog()
{
SubjectVisitId = subjectVisitId,
ParamInfo = JsonConvert.SerializeObject(paramInfoList),
TalkContent = dialogMsg.ToString(),
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
CreateTime = DateTime.Now
});
}
// ETC 和系统的有区别
else
{
dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
num = 0;
foreach (var item in dbExceptExcel)
{
num++;
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
}
foreach (var item in excelExceptDB)
{
num++;
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(IRC 缺少) ");
}
dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如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 = subjectVisitId,
IsCRCNeedReply = true,
TalkContent = dialogMsg.ToString(),
ParamInfo = JsonConvert.SerializeObject(paramInfoList),
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
CreateTime = DateTime.Now
});
}
foreach (var item in excelExceptDB)
{
num++;
dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(IRC 缺少) ");
}
dialogMsg.AppendLine($"<br/>");
dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如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, IsCRCNeedReply = true, TalkContent = dialogMsg.ToString(),
ParamInfo = JsonConvert.SerializeObject(paramInfoList),
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now });
}
dbSV.CheckTime = DateTime.Now;
}
dbSV.CheckTime = DateTime.Now;
}
await _subjectVisitRepository.SaveChangesAsync();