修改关键图裁判选择标记
parent
6d9cfe5e45
commit
0333002ffa
|
@ -546,6 +546,45 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
}
|
||||
|
||||
public class TrialKeyImageExportDTO
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string ResearchProgramNo { get; set; }
|
||||
public string CriterionName { get; set; }
|
||||
public ArbitrationRule ArbitrationRule { get; set; }
|
||||
|
||||
public bool IsGlobalReading { get; set; }
|
||||
|
||||
public List<decimal> SubjectCriterionReadingPeriodVisitNumList { get; set; }
|
||||
|
||||
public string TrialSiteCode { get; set; }
|
||||
|
||||
public string VisitName { get; set; }
|
||||
|
||||
public Decimal VisitTaskNum { get; set; }
|
||||
|
||||
public string SubjectCode { get; set; }
|
||||
|
||||
public Arm ArmEnum { get; set; }
|
||||
|
||||
public Guid? JudgeResultTaskId { get; set; }
|
||||
|
||||
public bool? IsTrigerJudge { get; set; }
|
||||
public bool? IsJudgeSelect { get; set; }
|
||||
|
||||
public ReadingCategory ReadingCategory { get; set; }
|
||||
|
||||
|
||||
public List<TrialKeyPicturePath> QuestionMarkPictureList { get; set; }
|
||||
|
||||
public List<TrialKeyPicturePath> TableQuestionRowPictureList { get; set; }
|
||||
}
|
||||
public class TrialKeyPicturePath
|
||||
{
|
||||
public string PicturePath { get; set; }
|
||||
|
||||
public string OtherPicturePath { get; set; }
|
||||
}
|
||||
public class TrialExportImageCommand
|
||||
{
|
||||
[NotDefault]
|
||||
|
|
|
@ -5,8 +5,10 @@ using IRaCIS.Core.Application.Contracts.Dicom.DTO;
|
|||
using IRaCIS.Core.Application.Filter;
|
||||
using IRaCIS.Core.Application.Helper;
|
||||
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
|
||||
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using IRaCIS.Core.Infra.EFCore.Common;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
using MassTransit;
|
||||
using MassTransit.Initializers;
|
||||
|
@ -1013,7 +1015,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
InstancePathList = z.DicomInstanceList.Select(k => new
|
||||
{
|
||||
k.Path,
|
||||
k.FileSize
|
||||
k.FileSize
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -1031,7 +1033,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
{
|
||||
file.FileName,
|
||||
file.Path,
|
||||
file.FileType,
|
||||
file.FileType,
|
||||
file.FileSize
|
||||
})
|
||||
})
|
||||
|
@ -1260,30 +1262,246 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
if (inCommand.IsKeyImage)
|
||||
{
|
||||
var downloadInfo = _visitTaskRepository.Where(t => t.TrialId == inCommand.TrialId && t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.IsAnalysisCreate == false)
|
||||
var downloadInfoList = _visitTaskRepository.Where(t => t.TrialId == inCommand.TrialId && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Global)
|
||||
&& t.ReadingTaskState == ReadingTaskState.HaveSigned && t.IsAnalysisCreate == false)
|
||||
.Where(t => inCommand.SubjectVisitIdList.Contains((Guid)t.SourceSubjectVisitId))
|
||||
.Select(t => new
|
||||
.Select(t => new TrialKeyImageExportDTO()
|
||||
{
|
||||
t.Trial.ResearchProgramNo,
|
||||
ResearchProgramNo = t.Trial.ResearchProgramNo,
|
||||
CriterionName = t.TrialReadingCriterion.CriterionName,
|
||||
ArbitrationRule = t.TrialReadingCriterion.ArbitrationRule,
|
||||
IsGlobalReading = t.TrialReadingCriterion.IsGlobalReading,
|
||||
SubjectCriterionReadingPeriodVisitNumList = t.Subject.ReadModuleList
|
||||
.Where(u => u.TrialReadingCriterionId == t.TrialReadingCriterionId && u.ReadingSetType == ReadingSetType.ImageReading).Select(c => c.SubjectVisit.VisitNum).ToList(),
|
||||
|
||||
TrialSiteCode = t.Subject.TrialSite.TrialSiteCode,
|
||||
SubjectCode = t.Subject.Code,
|
||||
VisitName = (string?)t.SourceSubjectVisit.VisitName,
|
||||
|
||||
ReadingCategory = t.ReadingCategory,
|
||||
|
||||
VisitName = t.ReadingCategory == ReadingCategory.Visit ? t.SourceSubjectVisit.VisitName : "",
|
||||
|
||||
VisitTaskNum = t.VisitTaskNum,
|
||||
|
||||
ArmEnum = t.ArmEnum,
|
||||
|
||||
QuestionMarkPictureList = t.ReadingTaskQuestionMarkList.Select(c => new { c.PicturePath, c.OtherPicturePath }).ToList(),
|
||||
QuestionMarkPictureList = t.ReadingTaskQuestionMarkList.Select(c => new TrialKeyPicturePath { PicturePath = c.PicturePath, OtherPicturePath = c.OtherPicturePath }).ToList(),
|
||||
|
||||
TableQuestionRowPictureList = t.LesionList.Select(c => new { c.PicturePath, c.OtherPicturePath }).ToList(),
|
||||
TableQuestionRowPictureList = t.LesionList.Select(c => new TrialKeyPicturePath { PicturePath = c.PicturePath, OtherPicturePath = c.OtherPicturePath }).ToList(),
|
||||
|
||||
Id = t.Id,
|
||||
//裁判选择结果
|
||||
JudgeResultTaskId = t.JudgeVisitTask.JudgeResultTaskId,
|
||||
|
||||
IsJudgeSelect = t.JudgeResultTaskId == t.Id
|
||||
//是否触发裁判
|
||||
IsTrigerJudge = t.JudgeVisitTaskId != null,
|
||||
|
||||
IsJudgeSelect = null
|
||||
|
||||
|
||||
}).ToList();
|
||||
|
||||
return ResponseOutput.Ok(downloadInfo);
|
||||
foreach (var subjectCriterionGroup in downloadInfoList.GroupBy(t => new { t.SubjectCode, t.CriterionName, t.ArbitrationRule, t.IsGlobalReading }))
|
||||
{
|
||||
var arbitrationRule = subjectCriterionGroup.Key.ArbitrationRule;
|
||||
var isGlobalReading = subjectCriterionGroup.Key.IsGlobalReading;
|
||||
|
||||
foreach (var item in subjectCriterionGroup)
|
||||
{
|
||||
if (arbitrationRule == ArbitrationRule.Visit)
|
||||
{
|
||||
//是否产生裁判
|
||||
|
||||
if (item.IsTrigerJudge == true)
|
||||
{
|
||||
//裁判做完了
|
||||
if (item.JudgeResultTaskId != null)
|
||||
{
|
||||
//裁判选择了自己,那么设置
|
||||
if (item.JudgeResultTaskId == item.Id)
|
||||
{
|
||||
item.IsJudgeSelect = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
item.IsJudgeSelect = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//没产生 且两个人做完了 默认R1
|
||||
|
||||
if (subjectCriterionGroup.Where(t => t.VisitTaskNum == item.VisitTaskNum && t.SubjectCode == item.SubjectCode).Select(t => t.ArmEnum).Distinct().Count() == 2)
|
||||
{
|
||||
if (item.ArmEnum == Arm.DoubleReadingArm1)
|
||||
{
|
||||
item.IsJudgeSelect = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
item.IsJudgeSelect = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if (arbitrationRule == ArbitrationRule.Reading)
|
||||
{
|
||||
|
||||
//阅片期访视号
|
||||
var subjectReadingPeriondVisitNumList = subjectCriterionGroup.FirstOrDefault()?.SubjectCriterionReadingPeriodVisitNumList;
|
||||
|
||||
//两个人完成最大得任务号(访视+全局)
|
||||
var subjectMaxFinishedTaskNum = subjectCriterionGroup.GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max();
|
||||
|
||||
var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0;
|
||||
|
||||
//可能没有配置阅片期 ,或者配置了 没有完成
|
||||
var finishedGlobalCount = 0;
|
||||
|
||||
var globalFinishedVisitTaskNumList = new List<decimal>();
|
||||
|
||||
//没有配置阅片期
|
||||
if (subjectReadingPeriondVisitNumList == null)
|
||||
{
|
||||
finishedGlobalCount = 0;
|
||||
}
|
||||
{
|
||||
globalFinishedVisitTaskNumList = subjectCriterionGroup.Where(t => subjectReadingPeriondVisitNumList.Any(c => (c + addReadingPeriodNum) == t.VisitTaskNum))
|
||||
.Select(t => new { t.VisitTaskNum, t.ArmEnum }).Distinct()
|
||||
.GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).ToList();
|
||||
|
||||
finishedGlobalCount = globalFinishedVisitTaskNumList.Count();
|
||||
|
||||
}
|
||||
|
||||
if (finishedGlobalCount != 0)
|
||||
{
|
||||
//最大的完成的全局是否产生裁判
|
||||
|
||||
var maxFinishedGlobalNum = globalFinishedVisitTaskNumList.Max();
|
||||
|
||||
var globalMaxTask = subjectCriterionGroup.FirstOrDefault(t => t.VisitTaskNum == maxFinishedGlobalNum);
|
||||
|
||||
// 触发了裁判
|
||||
if (globalMaxTask.IsTrigerJudge == true)
|
||||
{
|
||||
//最大裁判完成了
|
||||
|
||||
var maxJudgeVisitTaskNum = maxFinishedGlobalNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge];
|
||||
|
||||
if (globalMaxTask.JudgeResultTaskId != null)
|
||||
{
|
||||
|
||||
var maxJudgeArmEnum = subjectCriterionGroup.Where(t => t.Id == globalMaxTask.JudgeResultTaskId).FirstOrDefault().ArmEnum;
|
||||
|
||||
if (item.VisitTaskNum < maxJudgeVisitTaskNum)
|
||||
{
|
||||
//触发裁判
|
||||
item.IsTrigerJudge = true;
|
||||
|
||||
if (item.ArmEnum == maxJudgeArmEnum)
|
||||
{
|
||||
item.IsJudgeSelect = true;
|
||||
}
|
||||
//裁判没选择的人设置为false
|
||||
else
|
||||
{
|
||||
item.IsJudgeSelect = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//最大的裁判未完成
|
||||
|
||||
//找到当前未阅最大裁判之前的已完成的最大裁判任务
|
||||
|
||||
var finishedGlobalFinishedMaxJudge = subjectCriterionGroup.Where(t => globalFinishedVisitTaskNumList.Contains(t.VisitTaskNum) && t.IsTrigerJudge == true && t.JudgeResultTaskId != null).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault();
|
||||
|
||||
|
||||
//未完成裁判之前 没有已完成的全局裁判
|
||||
if (finishedGlobalFinishedMaxJudge == null)
|
||||
{
|
||||
if (item.VisitTaskNum < maxJudgeVisitTaskNum)
|
||||
{
|
||||
item.IsTrigerJudge = true;
|
||||
//item.IsJudgeSelect = null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
var maxFinishedJudgeVisitTaskNum = finishedGlobalFinishedMaxJudge.VisitTaskNum + +ReadingCommon.TaskNumDic[ReadingCategory.Judge];
|
||||
|
||||
var maxFinishedJudgeArmEnum = subjectCriterionGroup.Where(t => t.Id == finishedGlobalFinishedMaxJudge.JudgeResultTaskId).FirstOrDefault().ArmEnum;
|
||||
|
||||
if (item.VisitTaskNum < maxFinishedJudgeVisitTaskNum)
|
||||
{
|
||||
item.IsTrigerJudge = true;
|
||||
|
||||
if (item.ArmEnum == maxFinishedJudgeArmEnum)
|
||||
{
|
||||
item.IsJudgeSelect = true;
|
||||
}
|
||||
//裁判没选择的人设置为false
|
||||
else
|
||||
{
|
||||
item.IsJudgeSelect = false;
|
||||
}
|
||||
}
|
||||
else if (item.VisitTaskNum > maxFinishedJudgeVisitTaskNum && item.VisitTaskNum < maxJudgeVisitTaskNum)
|
||||
{
|
||||
//完成裁判 和未完成裁判之间的 裁判选择标记默认是null
|
||||
|
||||
item.IsTrigerJudge = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//在未完成全局裁判之后的访视 未知 都是null
|
||||
|
||||
item.IsTrigerJudge = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//最大的全局未产生裁判
|
||||
|
||||
if (item.VisitTaskNum <= maxFinishedGlobalNum)
|
||||
{
|
||||
item.IsTrigerJudge = false;
|
||||
|
||||
if (item.ArmEnum == Arm.DoubleReadingArm1)
|
||||
{
|
||||
item.IsJudgeSelect = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
item.IsJudgeSelect = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
downloadInfoList = downloadInfoList.Where(t => t.ReadingCategory == ReadingCategory.Visit).ToList();
|
||||
return ResponseOutput.Ok(downloadInfoList);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue