diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 73a505d69..5f91adc12 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -7095,11 +7095,6 @@
是否查询所有的一致性分析临床数据 (为否只查询PDF)
-
-
- 是否是阅片页面获取临床数据 (阅片其他访视任务需要获取受试者级别的)
-
-
获取访视列表
diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs
index a8ca5b3b2..c9cf90803 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;
@@ -1473,7 +1475,7 @@ namespace IRaCIS.Core.Application.Service.Common
- public List DealJudgeMark(ArbitrationRule arbitrationRule, IEnumerable list) where T : CommonEvaluationExport
+ public List DealJudgeMark(ArbitrationRule arbitrationRule, bool isGlobalReading, IEnumerable list) where T : CommonEvaluationExport
{
//处理访视任务的裁判标记
var resultExceptJudgeList = list.Where(t => t.ReadingCategory != ReadingCategory.Judge).ToList();
@@ -1504,6 +1506,7 @@ namespace IRaCIS.Core.Application.Service.Common
}
else
{
+
//两个人都做了
if (resultExceptJudgeList.Count(t => t.VisitTaskNum == item.VisitTaskNum && t.SubjectCode == item.SubjectCode) == 2)
{
@@ -1523,11 +1526,13 @@ namespace IRaCIS.Core.Application.Service.Common
item.IsTrigerJudge = null;
}
+
+
}
}
}
- if (arbitrationRule == ArbitrationRule.Reading)
+ else if (arbitrationRule == ArbitrationRule.Reading)
{
//处理访视裁判标记
foreach (var visitItem in resultExceptJudgeList.Where(t => t.ReadingCategory == ReadingCategory.Visit))
@@ -1609,30 +1614,76 @@ namespace IRaCIS.Core.Application.Service.Common
}
else
{
+
//没有产生裁判 有可能一个人没做完,也有可能做完了没产生裁判
- //两个人都做了
- if (resultExceptJudgeList.Count(t => t.VisitTaskNum == visitItem.VisitTaskNum && t.SubjectCode == visitItem.SubjectCode) == 2)
+ //两个人都做了(1、两个人都阅片完,确实没产生,2、两个人都阅片完,还没到阅片期,没产生裁判)
+
+ //默认都设置为null 仅仅处理 阅片期读完了没产生裁判 裁判选择标记需要设置的访视
+ visitItem.IsJudgeSelect = null;
+ visitItem.IsTrigerJudge = null;
+
+ //阅片期访视号
+ var subjectReadingPeriondVisitNumList = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode).FirstOrDefault()?.SubjectCriterionReadingPeriodVisitNumList;
+
+ if (subjectReadingPeriondVisitNumList != null && subjectReadingPeriondVisitNumList.Count()>0)
{
- //不存在裁判 将R1设置
- if (visitItem.ArmEnum == Arm.DoubleReadingArm1)
+ //两个人完成最大得任务号(访视+全局)
+ var subjectMaxFinishedTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode)
+ .GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max();
+
+ var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0;
+
+ var minReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Min() + addReadingPeriodNum;
+
+ //最小阅片期 完成访视号
+
+ //有阅片期读完了 肯定要读到最小阅片期号后面
+
+ if (subjectMaxFinishedTaskNum >= minReadingPeriodTaskNum)
{
- visitItem.IsJudgeSelect = true;
- }
- else
- {
- visitItem.IsJudgeSelect = false;
+ //找到<= 完成最大访视任务号最近的阅片期号
+ var latestFinishedReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Select(t => t + addReadingPeriodNum).Where(t => t <= subjectMaxFinishedTaskNum).Max();
+
+ //小于已完成的阅片期的访视 设置触发裁判标志为否 并设置默认的裁判选择标记 (两个人肯定做完了)
+ if (visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum)
+ {
+
+ //不存在裁判 将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;
- }
+
+
+
}
}
}
+ else
+ {
+ foreach (var visitItem in resultExceptJudgeList.Where(t => t.ReadingCategory == ReadingCategory.Visit))
+ {
+ visitItem.IsJudgeSelect = null;
+ visitItem.IsTrigerJudge = null;
+ }
+
+ }
return resultExceptJudgeList;
}
@@ -1978,7 +2029,7 @@ namespace IRaCIS.Core.Application.Service.Common
[FromServices] IRepository _trialRepository)
{
//每次查询必须是单标准的
- var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync();
+ var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.IsGlobalReading, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync();
var query = _visitTaskRepository.Where(t => t.TrialId == inQuery.TrialId && t.IsAnalysisCreate == false && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze))
@@ -2094,11 +2145,11 @@ namespace IRaCIS.Core.Application.Service.Common
list = new List();
- foreach (var item in taskList)
+ foreach (var item in taskList.OrderBy(t => t.SubjectCode).ThenBy(t => t.ArmEnum).ThenBy(t => t.VisitTaskNum))
{
if (item.LesionList.Count > 0)
{
- foreach (var lession in item.LesionList)
+ foreach (var lession in item.LesionList.OrderBy(t => t.LessionType).ThenBy(t => t.LessionCode))
{
var firstLessionAnser = lession.LessionAnswerList.FirstOrDefault() ?? new CommonLessionQuestionAnswerInfo();
@@ -2160,7 +2211,7 @@ namespace IRaCIS.Core.Application.Service.Common
exportInfo.CriterionName = criterion.CriterionName;
//处理裁判标记
- list = DealJudgeMark(criterion.ArbitrationRule, list);
+ list = DealJudgeMark(criterion.ArbitrationRule, criterion.IsGlobalReading, list);
#region 系统标准处理整体肿瘤评估合并
diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs
index 7622ef5ea..fec3dc50d 100644
--- a/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs
+++ b/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs
@@ -199,7 +199,7 @@ namespace IRaCIS.Core.Application.Contracts.DTO
public class QCChallengeWithUser : QCChallengeCommand
{
-
+ public bool IsBaseLine { get; set; }
public string VisitName { get; set; }
public string BlindName { get; set; } = string.Empty;
public string SubjectCode { get; set; }
diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs
index f7cce53d0..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,6 +1159,8 @@ namespace IRaCIS.Core.Application.Contracts
{
public List QuestionAnswerList { 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/QCListService.cs b/IRaCIS.Core.Application/Service/QC/QCListService.cs
index c6964a247..7953faaca 100644
--- a/IRaCIS.Core.Application/Service/QC/QCListService.cs
+++ b/IRaCIS.Core.Application/Service/QC/QCListService.cs
@@ -154,6 +154,8 @@ namespace IRaCIS.Core.Application.Image.QA
var pageList = await query.ToPagedListAsync(inQuery, new string[] { nameof(QCCRCChallengeViewModel.IsUrgent) + " desc", nameof(QCCRCChallengeViewModel.CreateTime) });
var config = await _trialRepository.Where(t => t.Id == inQuery.TrialId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException();
+ config.IsHaveSubjectClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == inQuery.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.Subject) && x.UploadRole == UploadRole.CRC);
+ config.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == inQuery.TrialId && x.IsConfirm && (x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && x.UploadRole == UploadRole.CRC);
return ResponseOutput.Ok(pageList, config);
}
diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
index c8f0760cd..03ec86fa1 100644
--- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
+++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs
@@ -257,6 +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.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))
@@ -612,6 +618,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName))
+ .ForMember(d => d.IsBaseLine, u => u.MapFrom(s => s.SubjectVisit.IsBaseLine))
.ForMember(d => d.BlindName, u => u.MapFrom(s => s.SubjectVisit.BlindName));
@@ -627,6 +634,7 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName))
+ .ForMember(d => d.IsBaseLine, u => u.MapFrom(s => s.SubjectVisit.IsBaseLine))
.ForMember(d => d.BlindName, u => u.MapFrom(s => s.SubjectVisit.BlindName))
;
@@ -693,14 +701,14 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path));
CreateMap()
- .ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s => isFilterZip ? s.NoneDicomFileList.Where(t => !t.FileType.Contains(StaticData.FileType.Zip)) : s.NoneDicomFileList))
+ .ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s => isFilterZip ? s.NoneDicomFileList.Where(t => !t.FileType.Contains(StaticData.FileType.Zip)).OrderBy(t => t.FileType).ThenBy(t => t.FileName) : s.NoneDicomFileList.OrderBy(t => t.FileType).ThenBy(t => t.FileName)))
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
Guid? visiTaskId = null;
CreateMap()
.ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s => isFilterZip ?
- s.TaskNoneDicomFileList.Where(t => visiTaskId != null ? t.VisitTaskId == visiTaskId : true).Where(t => !t.FileType.Contains(StaticData.FileType.Zip))
- : s.TaskNoneDicomFileList.Where(t => visiTaskId != null ? t.VisitTaskId == visiTaskId : true)))
+ s.TaskNoneDicomFileList.Where(t => visiTaskId != null ? t.VisitTaskId == visiTaskId : true).Where(t => !t.FileType.Contains(StaticData.FileType.Zip)).OrderBy(t => t.FileType).ThenBy(t=>t.FileName)
+ : s.TaskNoneDicomFileList.Where(t => visiTaskId != null ? t.VisitTaskId == visiTaskId : true).OrderBy(t => t.FileType).ThenBy(t => t.FileName)))
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
}