Uat_Study
he 2023-06-05 13:37:12 +08:00
parent 5d797959e3
commit 343360cdbe
4 changed files with 90 additions and 39 deletions

View File

@ -1458,9 +1458,9 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetFirstChangeTaskId(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)"> <member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetCompareTaskId(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto,IRaCIS.Core.Domain.Share.QuestionType)">
<summary> <summary>
获取第一次转变访视任务Id 获取比较任务Id 需要之前一次访视为IUPD或者ICPD
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>

View File

@ -479,6 +479,9 @@ namespace IRaCIS.Application.Services
// 在修改前 去除这个问题 // 在修改前 去除这个问题
x.BeforeQuestionList = x.BeforeQuestionList.Where(x => x.QuestionType != QuestionType.SiteVisitForTumorEvaluation).ToList(); x.BeforeQuestionList = x.BeforeQuestionList.Where(x => x.QuestionType != QuestionType.SiteVisitForTumorEvaluation).ToList();
x.AfterQuestionList = x.AfterQuestionList.Where(x => x.QuestionType == QuestionType.SiteVisitForTumorEvaluation|| x.GlobalAnswerType != GlobalAnswerType.Question).ToList();
}); });
} }

View File

@ -1,4 +1,5 @@
using System; using IRaCIS.Core.Domain.Share;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -11,6 +12,18 @@ namespace IRaCIS.Core.Application.ViewModel
public Guid VisitTaskId { get; set; } public Guid VisitTaskId { get; set; }
} }
public class ReadingTaskQuestionAnswerDto : ReadingTaskQuestionAnswer
{
public QuestionType QuestionType { get; set; }
}
public class TirggerTaskInfo
{
public Guid VisitTaskId { get; set; }
public decimal VisitNum { get; set; }
public string TumorAnswer { get; set; } = string.Empty;
}
public class VisitStudyTime public class VisitStudyTime
{ {
/// <summary> /// <summary>

View File

@ -462,7 +462,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{ {
#region 计算 这里顺序非常重要 后面计算的值要依赖前面计算的结果 #region 计算 这里顺序非常重要 后面计算的值要依赖前面计算的结果
var needAddList = new List<ReadingTaskQuestionAnswer>(); var needAddList = new List<ReadingTaskQuestionAnswerDto>();
List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>() List<ReadingCalculateData> calculateList = new List<ReadingCalculateData>()
@ -498,13 +498,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
new ReadingCalculateData (){QuestionType=QuestionType.NETarget,GetStringFun=GetNETarget}, new ReadingCalculateData (){QuestionType=QuestionType.NETarget,GetStringFun=GetNETarget},
// 与触发iRECIST访视相比SOD变化量 // 与触发iRECIST访视相比SOD变化量
new ReadingCalculateData (){QuestionType=QuestionType.ComparedTriggeringSODChange,GetDecimalNullFun=GetComparedTriggeringSODChange,IsConvertedTask=true}, new ReadingCalculateData (){QuestionType=QuestionType.ComparedTriggeringSODChange,GetStringFun=GetComparedTriggeringSODChange,IsConvertedTask=true},
// 新靶病灶直径之和iSOD // 新靶病灶直径之和iSOD
new ReadingCalculateData (){QuestionType=QuestionType.ISOD,GetDecimalNullFun=GetiSODData,IsConvertedTask=true}, new ReadingCalculateData (){QuestionType=QuestionType.ISOD,GetDecimalNullFun=GetiSODData,IsConvertedTask=true},
// 与触发iRECIST访视相比iSOD变化量 // 与触发iRECIST访视相比iSOD变化量
new ReadingCalculateData (){QuestionType=QuestionType.ComparedTriggeringiSODChange,GetDecimalNullFun=GetComparedTriggeringiSODChange,IsConvertedTask=true}, new ReadingCalculateData (){QuestionType=QuestionType.ComparedTriggeringiSODChange,GetStringFun=GetComparedTriggeringiSODChange,IsConvertedTask=true},
// 靶病灶评估 // 靶病灶评估
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate,IsConvertedTask=false}, new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate,IsConvertedTask=false},
@ -710,9 +710,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
needAddList.Add(new ReadingTaskQuestionAnswer() needAddList.Add(new ReadingTaskQuestionAnswerDto()
{ {
Answer = item.Answer, Answer = item.Answer,
QuestionType= calculate.QuestionType,
ReadingQuestionTrialId = item.QuestionId, ReadingQuestionTrialId = item.QuestionId,
}); });
} }
@ -730,13 +731,35 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
} }
var questionIds = needAddList.Select(x => x.ReadingQuestionTrialId).ToList(); var questionIds = needAddList.Select(x => x.ReadingQuestionTrialId).ToList();
await _readingTaskQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => questionIds.Contains(x.ReadingQuestionTrialId) && x.VisitTaskId == inDto.VisitTaskId); await _readingTaskQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => questionIds.Contains(x.ReadingQuestionTrialId) && x.VisitTaskId == inDto.VisitTaskId);
// 这里在某些条件下 要删除 sod变化量 和isod变化量
// 靶病灶评估为IUPD或者ICPD
var targetLesionIsIUorIC = needAddList.Any(x => x.QuestionType == QuestionType.TargetLesion && (x.Answer.EqEnum(TargetAssessment.iUPD) || x.Answer.EqEnum(TargetAssessment.iCPD)));
// 新靶病灶为IUPD或者ICPD
var newTargetLesionIsIUorIC = needAddList.Any(x => x.QuestionType == QuestionType.NewTargetLesion && (x.Answer.EqEnum(NewTargetLesionAssessment.iUPD) || x.Answer.EqEnum(NewTargetLesionAssessment.iCPD)));
needAddList.ForEach(x => needAddList.ForEach(x =>
{ {
if (x.QuestionType == QuestionType.ComparedTriggeringSODChange && !targetLesionIsIUorIC)
{
x.Answer = string.Empty;
}
else if (x.QuestionType == QuestionType.ComparedTriggeringiSODChange && !newTargetLesionIsIUorIC)
{
x.Answer = string.Empty;
}
x.SubjectId = inDto.SubjectId; x.SubjectId = inDto.SubjectId;
x.ReadingQuestionCriterionTrialId = inDto.CriterionId; x.ReadingQuestionCriterionTrialId = inDto.CriterionId;
x.VisitTaskId = inDto.VisitTaskId; x.VisitTaskId = inDto.VisitTaskId;
@ -1335,18 +1358,22 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
public async Task<decimal?> GetComparedTriggeringSODChange(ReadingCalculateDto inDto) public async Task<string> GetComparedTriggeringSODChange(ReadingCalculateDto inDto)
{ {
var firstChangeTaskId = await this.GetFirstChangeTaskId(inDto); var compareTaskId = await this.GetCompareTaskId(inDto,QuestionType.TargetLesion);
if (compareTaskId == null)
{
return string.Empty;
}
var firstChangeSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstChangeTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); var firstChangeSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstChangeTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
var value = await GetSODData(inDto); var value = await GetSODData(inDto);
if (value == null || inDto.IsBaseLine|| !inDto.IsConvertedTask||inDto.BeforeConvertedTaskId!=null) if (value == null || inDto.IsBaseLine|| !inDto.IsConvertedTask||inDto.BeforeConvertedTaskId!=null)
{ {
return null; return string.Empty;
} }
return value.NullChange0() - firstChangeSOD; return (value.NullChange0() - firstChangeSOD).ToString();
} }
#endregion #endregion
@ -1409,20 +1436,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// </summary> /// </summary>
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
public async Task<decimal?> GetComparedTriggeringiSODChange(ReadingCalculateDto inDto) public async Task<string> GetComparedTriggeringiSODChange(ReadingCalculateDto inDto)
{ {
var firstChangeTaskId = await GetFirstChangeTaskId(inDto); var compareTaskId = await this.GetCompareTaskId(inDto, QuestionType.NewTargetLesion);
if (compareTaskId == null)
var firstChangeiSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == firstChangeTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.ISOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0(); {
return string.Empty;
}
var firstChangeiSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == compareTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.ISOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
var value = await GetiSODData(inDto); var value = await GetiSODData(inDto);
if (value == null || inDto.IsBaseLine || !inDto.IsConvertedTask || inDto.BeforeConvertedTaskId != null) if (value == null || inDto.IsBaseLine || !inDto.IsConvertedTask || inDto.BeforeConvertedTaskId != null)
{ {
return null; return string.Empty;
} }
return value.NullChange0() - firstChangeiSOD; return (value.NullChange0() - firstChangeiSOD).ToString();
} }
#endregion #endregion
@ -1666,33 +1697,37 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
/// <summary> /// <summary>
/// 获取第一次转变访视任务Id /// 获取比较任务Id 需要之前一次访视为IUPD或者ICPD
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
private async Task<Guid> GetFirstChangeTaskId(ReadingCalculateDto inDto) private async Task<Guid?> GetCompareTaskId(ReadingCalculateDto inDto,QuestionType questionType)
{ {
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
if (firstChangeTaskId != null) var lastTaskId = await GetLastVisitTaskId(inDto);
Guid? compareTaskId = null;
switch (questionType)
{ {
return firstChangeTaskId.Value; case QuestionType.TargetLesion:
} if (await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion &&
else (x.Answer == TargetAssessment.iUPD.GetEnumInt() || x.Answer == TargetAssessment.iCPD.GetEnumInt())))
{ {
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync(); compareTaskId = lastTaskId;
var taskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit && }
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId && break;
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.Id).FirstOrDefaultAsync();
firstChangeTaskId = taskId;
return taskId;
}
case QuestionType.NewTargetLesion:
if (await _readingTaskQuestionAnswerRepository.AnyAsync(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion &&
(x.Answer == NewTargetLesionAssessment.iUPD.GetEnumInt() || x.Answer == NewTargetLesionAssessment.iCPD.GetEnumInt())))
{
compareTaskId = lastTaskId;
}
break;
}
return compareTaskId;
} }
#endregion #endregion
#region 计算阅片问题 外层问题 #region 计算阅片问题 外层问题
@ -1745,7 +1780,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList(); var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
var lastVisitTaskId = await GetLastVisitTaskId(inDto); var lastVisitTaskId = await GetLastVisitTaskId(inDto);
var targetLesionQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.QuestionId).FirstOrDefault(); var targetLesionQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.QuestionId).FirstOrDefault();
var firstChangeTaskId = await GetFirstChangeTaskId(inDto);
var sodQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SOD).Select(x => x.QuestionId).FirstOrDefault(); var sodQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SOD).Select(x => x.QuestionId).FirstOrDefault();
IRECISTTargetLesionDto resultData = new IRECISTTargetLesionDto() IRECISTTargetLesionDto resultData = new IRECISTTargetLesionDto()
{ {