Uat_Study
he 2023-06-05 14:33:58 +08:00
parent 350101091a
commit 1d3e324b9a
3 changed files with 105 additions and 11 deletions

View File

@ -1233,7 +1233,7 @@
<param name="indto"></param> <param name="indto"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.TestCalculate(System.Guid,IRaCIS.Core.Domain.Share.QuestionType)"> <member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.TestCalculate(System.Guid,System.Nullable{IRaCIS.Core.Domain.Share.QuestionType})">
<summary> <summary>
测试计算 测试计算
</summary> </summary>

View File

@ -22,8 +22,29 @@ namespace IRaCIS.Core.Application.ViewModel
public decimal VisitNum { get; set; } public decimal VisitNum { get; set; }
public string TumorAnswer { get; set; } = string.Empty; /// <summary>
/// 靶病灶是否为IUPD或者ICPD
/// </summary>
public bool TargetAssessmentIsIUorIC { get; set; }
/// <summary>
/// 靶病灶是否为IUPD或者ICPD
/// </summary>
public bool NewTargetLesionAssessmentIsIUorIC { get; set; }
} }
public class TirggerAnswerInfo
{
public Guid VisitTaskId { get; set; }
public QuestionType QuestionType { get; set; }
public string Answer { get; set; } = string.Empty;
}
public class VisitStudyTime public class VisitStudyTime
{ {
/// <summary> /// <summary>

View File

@ -88,6 +88,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// 首次转变的任务ID /// 首次转变的任务ID
/// </summary> /// </summary>
public Guid? firstChangeTaskId; public Guid? firstChangeTaskId;
/// <summary>
/// 触发任务list
/// </summary>
public List<TirggerTaskInfo>? compareTaskList = null;
#endregion #endregion
#region 删除病灶获取起始病灶序号 #region 删除病灶获取起始病灶序号
@ -1704,24 +1709,92 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{ {
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync(); var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
var lastTaskId = await GetLastVisitTaskId(inDto); var lastTaskId = await GetLastVisitTaskId(inDto);
if (compareTaskList == null)
{
// 先找到第一个转变任务的number 直接找是否为转变任务 查询耗性能
var firstChangeVisitTaskNum = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
x.DoctorUserId == taskinfo.DoctorUserId &&
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum
&& x.BeforeConvertedTaskId != null && x.TaskState == TaskState.Effect
).OrderBy(x => x.VisitTaskNum).Select(x => x.VisitTaskNum).FirstOrDefaultAsync();
// 找到转变之后 所有任务
compareTaskList = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
x.DoctorUserId == taskinfo.DoctorUserId &&
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum &&
x.VisitTaskNum >= firstChangeVisitTaskNum && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect
).OrderBy(x => x.VisitTaskNum).Select(x => new TirggerTaskInfo()
{
VisitTaskId = x.Id,
VisitNum = x.VisitTaskNum,
}).ToListAsync();
// 获取所有任务Id
var visitTaskids = compareTaskList.Select(x => x.VisitTaskId).ToList();
// 找到所有任务的靶病灶评估和非靶病灶评估
var answers = await _readingTaskQuestionAnswerRepository.Where(x => (x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion || x.ReadingQuestionTrial.QuestionType == QuestionType.NewTargetLesion) &&
visitTaskids.Contains(x.VisitTaskId)
).Select(x => new TirggerAnswerInfo()
{
VisitTaskId = x.VisitTaskId,
Answer = x.Answer,
QuestionType = x.ReadingQuestionTrial.QuestionType.Value
}).ToListAsync();
compareTaskList.ForEach(x =>
{
x.TargetAssessmentIsIUorIC = answers.Any(x => questionType == QuestionType.TargetLesion && (x.Answer == TargetAssessment.iUPD.GetEnumInt() || x.Answer == TargetAssessment.iCPD.GetEnumInt()));
x.NewTargetLesionAssessmentIsIUorIC = answers.Any(x => questionType == QuestionType.TargetLesion && (x.Answer == NewTargetLesionAssessment.iUPD.GetEnumInt() || x.Answer == NewTargetLesionAssessment.iCPD.GetEnumInt()));
});
}
Guid? compareTaskId = null; Guid? compareTaskId = null;
int index = 0;
switch (questionType) switch (questionType)
{ {
case QuestionType.TargetLesion: case QuestionType.TargetLesion:
if (await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion && index = compareTaskList.FindLastIndex(x => x.TargetAssessmentIsIUorIC);
(x.Answer == TargetAssessment.iUPD.GetEnumInt() || x.Answer == TargetAssessment.iCPD.GetEnumInt()))) if (index == -1)
{ {
compareTaskId = lastTaskId; return compareTaskList[0].VisitTaskId;
}
else if (index > 0 && !compareTaskList[index-1].TargetAssessmentIsIUorIC)
{
return compareTaskList[index-1].VisitTaskId;
}
else
{
return compareTaskList[0].VisitTaskId;
} }
break;
case QuestionType.NewTargetLesion: case QuestionType.NewTargetLesion:
if (await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion && index = compareTaskList.FindLastIndex(x => x.NewTargetLesionAssessmentIsIUorIC);
(x.Answer == NewTargetLesionAssessment.iUPD.GetEnumInt() || x.Answer == NewTargetLesionAssessment.iCPD.GetEnumInt()))) if (index == -1)
{ {
compareTaskId = lastTaskId; return compareTaskList[0].VisitTaskId;
}
else if (index > 0 && !compareTaskList[index - 1].NewTargetLesionAssessmentIsIUorIC)
{
return compareTaskList[index - 1].VisitTaskId;
}
else
{
return compareTaskList[0].VisitTaskId;
} }
break;
} }