Uat_Study
parent
b928edb036
commit
cf4cace26e
|
@ -1181,6 +1181,16 @@
|
||||||
获取Sod的值
|
获取Sod的值
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="F:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.iSODData">
|
||||||
|
<summary>
|
||||||
|
获取iSod的值
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="F:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.lastVisitTaskId">
|
||||||
|
<summary>
|
||||||
|
上一次访视Id
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetDeleteLesionStatrIndex(IRaCIS.Core.Application.Service.Reading.Dto.DeleteReadingRowAnswerInDto)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetDeleteLesionStatrIndex(IRaCIS.Core.Application.Service.Reading.Dto.DeleteReadingRowAnswerInDto)">
|
||||||
<summary>
|
<summary>
|
||||||
删除病灶获取起始病灶序号(RECIST1Point1 固定是1)
|
删除病灶获取起始病灶序号(RECIST1Point1 固定是1)
|
||||||
|
@ -1355,6 +1365,27 @@
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetLastTaskSODChange(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
|
<summary>
|
||||||
|
与前一访视SOD相比变化量
|
||||||
|
</summary>
|
||||||
|
<param name="inDto"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetiSODData(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
|
<summary>
|
||||||
|
获取iSOD
|
||||||
|
</summary>
|
||||||
|
<param name="inDto"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetISODChange(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
|
<summary>
|
||||||
|
与前一访视相比iSOD变化量
|
||||||
|
</summary>
|
||||||
|
<param name="inDto"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.ChangeAllLowestIncrease(IRaCIS.Core.Application.Service.Reading.Dto.ChangeAllTaskDto)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.ChangeAllLowestIncrease(IRaCIS.Core.Application.Service.Reading.Dto.ChangeAllTaskDto)">
|
||||||
<summary>
|
<summary>
|
||||||
修改与整个访视期间SOD最低点相比增加的值(mm)
|
修改与整个访视期间SOD最低点相比增加的值(mm)
|
||||||
|
@ -1405,6 +1436,13 @@
|
||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetIRECISTTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
|
<summary>
|
||||||
|
获取IRECIST靶病灶评估
|
||||||
|
</summary>
|
||||||
|
<param name="inDto"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<!-- Badly formed XML comment ignored for member "M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)" -->
|
<!-- Badly formed XML comment ignored for member "M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)" -->
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetNoTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetNoTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
|
||||||
<summary>
|
<summary>
|
||||||
|
|
|
@ -268,6 +268,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
|
|
||||||
public DateTime? LatestScanDate { get; set; }
|
public DateTime? LatestScanDate { get; set; }
|
||||||
|
|
||||||
|
public TaskState TaskState { get; set; }
|
||||||
public string TaskName { get; set; }
|
public string TaskName { get; set; }
|
||||||
|
|
||||||
public decimal VisitTaskNum { get; set; }
|
public decimal VisitTaskNum { get; set; }
|
||||||
|
|
|
@ -475,7 +475,7 @@ namespace IRaCIS.Application.Services
|
||||||
var taskQuery = _visitTaskRepository.Where(x =>
|
var taskQuery = _visitTaskRepository.Where(x =>
|
||||||
x.TrialId == taskInfo.TrialId &&
|
x.TrialId == taskInfo.TrialId &&
|
||||||
x.SubjectId == taskInfo.SubjectId &&
|
x.SubjectId == taskInfo.SubjectId &&
|
||||||
x.VisitTaskNum <= taskInfo.VisitTaskNum &&
|
x.VisitTaskNum < taskInfo.VisitTaskNum &&
|
||||||
x.ArmEnum == taskInfo.ArmEnum &&
|
x.ArmEnum == taskInfo.ArmEnum &&
|
||||||
x.Id != inDto.VisitTaskId &&
|
x.Id != inDto.VisitTaskId &&
|
||||||
x.DoctorUserId == taskInfo.DoctorUserId &&
|
x.DoctorUserId == taskInfo.DoctorUserId &&
|
||||||
|
|
|
@ -151,25 +151,25 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task AddConvertedTaskFocus(Guid visitTaskId, Guid beforeConvertedTaskId)
|
public async Task AddConvertedTaskFocus(Guid visitTaskId, Guid beforeConvertedTaskId)
|
||||||
{
|
{
|
||||||
var originalTask = await _visitTaskRepository.Where(x => x.Id == beforeConvertedTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
|
var originalTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Include(x => x.TrialReadingCriterion).FirstNotNullAsync();
|
||||||
|
|
||||||
var taskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId && x.ReadingQuestionTrial.Type != "calculation").IgnoreAutoIncludes().AsNoTracking().ToListAsync();
|
var taskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == beforeConvertedTaskId && x.ReadingQuestionTrial.Type != "calculation").IgnoreAutoIncludes().AsNoTracking().ToListAsync();
|
||||||
|
|
||||||
taskAnswer.ForEach(x => {
|
taskAnswer.ForEach(x => {
|
||||||
|
|
||||||
x.VisitTaskId = beforeConvertedTaskId;
|
x.VisitTaskId = visitTaskId;
|
||||||
|
|
||||||
x.Id = NewId.NextGuid();
|
x.Id = NewId.NextGuid();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == visitTaskId).AsNoTracking().ProjectTo<CopyTableAnswerRowInfo>(_mapper.ConfigurationProvider).IgnoreAutoIncludes().ToListAsync();
|
var tableRowAnswers = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == beforeConvertedTaskId).AsNoTracking().ProjectTo<CopyTableAnswerRowInfo>(_mapper.ConfigurationProvider).IgnoreAutoIncludes().ToListAsync();
|
||||||
|
|
||||||
tableRowAnswers.ForEach(x =>
|
tableRowAnswers.ForEach(x =>
|
||||||
{
|
{
|
||||||
x.VisitTaskId = beforeConvertedTaskId;
|
x.VisitTaskId = visitTaskId;
|
||||||
x.IsCurrentTaskAdd = false;
|
x.IsCurrentTaskAdd = false;
|
||||||
x.FristAddTaskId = beforeConvertedTaskId;
|
x.FristAddTaskId = visitTaskId;
|
||||||
x.Id = NewId.NextGuid();
|
x.Id = NewId.NextGuid();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -180,12 +180,12 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var tableAnswer = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).IgnoreAutoIncludes().AsNoTracking().ToListAsync();
|
var tableAnswer = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == beforeConvertedTaskId).IgnoreAutoIncludes().AsNoTracking().ToListAsync();
|
||||||
|
|
||||||
tableAnswer.ForEach(x =>
|
tableAnswer.ForEach(x =>
|
||||||
{
|
{
|
||||||
x.Id = NewId.NextGuid();
|
x.Id = NewId.NextGuid();
|
||||||
x.VisitTaskId = beforeConvertedTaskId;
|
x.VisitTaskId = visitTaskId;
|
||||||
x.RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault();
|
x.RowId = tableRowAnswers.Where(y => y.OriginalId == x.RowId).Select(x => x.Id).FirstOrDefault();
|
||||||
});
|
});
|
||||||
var addrowInfo = _mapper.Map<List<ReadingTableAnswerRowInfo>>(tableRowAnswers);
|
var addrowInfo = _mapper.Map<List<ReadingTableAnswerRowInfo>>(tableRowAnswers);
|
||||||
|
@ -311,7 +311,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
BlindName = x.TaskBlindName,
|
BlindName = x.TaskBlindName,
|
||||||
IsBaseLine = x.SourceSubjectVisit.IsBaseLine,
|
IsBaseLine = x.SourceSubjectVisit.IsBaseLine,
|
||||||
VisitTaskId = x.Id,
|
VisitTaskId = x.Id,
|
||||||
|
TaskState= x.TaskState,
|
||||||
TaskName = x.TaskName,
|
TaskName = x.TaskName,
|
||||||
LatestScanDate= x.SourceSubjectVisit!=null?x.SourceSubjectVisit.LatestScanDate : null,
|
LatestScanDate= x.SourceSubjectVisit!=null?x.SourceSubjectVisit.LatestScanDate : null,
|
||||||
VisitTaskNum = x.VisitTaskNum,
|
VisitTaskNum = x.VisitTaskNum,
|
||||||
|
@ -320,7 +320,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
//CrterionDictionaryGroup = x.CrterionDictionaryGroup,
|
//CrterionDictionaryGroup = x.CrterionDictionaryGroup,
|
||||||
IsCurrentTask = x.Id == visitTaskId,
|
IsCurrentTask = x.Id == visitTaskId,
|
||||||
|
|
||||||
}).ToListAsync();
|
}).OrderBy(x=>x.VisitTaskNum).ThenByDescending(x=>x.TaskState).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
taskInfoList.ForEach(x =>
|
taskInfoList.ForEach(x =>
|
||||||
|
|
|
@ -66,7 +66,17 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private decimal? sODData;
|
private decimal? sODData;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取iSod的值
|
||||||
|
/// </summary>
|
||||||
|
private decimal? iSODData;
|
||||||
|
|
||||||
private string nAString = "NA";
|
private string nAString = "NA";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上一次访视Id
|
||||||
|
/// </summary>
|
||||||
|
public Guid? lastVisitTaskId;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 删除病灶获取起始病灶序号
|
#region 删除病灶获取起始病灶序号
|
||||||
|
@ -420,13 +430,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
//与基线访视相比SOD变化百分比
|
//与基线访视相比SOD变化百分比
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.SODPercent,GetDecimalNullFun=GetSODPercent},
|
new ReadingCalculateData (){QuestionType=QuestionType.SODPercent,GetDecimalNullFun=GetSODPercent},
|
||||||
|
|
||||||
//与整个访视期间SOD最低点相比增加的值(mm) //其他任务需要改
|
//与整个访视期间SOD最低点相比增加的值(mm)
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.LowestIncrease,GetDecimalNullFun=GetLowestIncrease,/*ChangeAllTaskFun=ChangeAllLowestIncrease*/},
|
new ReadingCalculateData (){QuestionType=QuestionType.LowestIncrease,GetDecimalNullFun=GetLowestIncrease,/*ChangeAllTaskFun=ChangeAllLowestIncrease*/},
|
||||||
|
|
||||||
//与整个访视期间SOD最低点相比增加的百分比 //其他任务需要改
|
//与整个访视期间SOD最低点相比增加的百分比
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.LowPercent,GetDecimalNullFun=GetLowPercent,/*ChangeAllTaskFun=ChangeAllLowPercent*/},
|
new ReadingCalculateData (){QuestionType=QuestionType.LowPercent,GetDecimalNullFun=GetLowPercent,/*ChangeAllTaskFun=ChangeAllLowPercent*/},
|
||||||
|
|
||||||
//整个访视期间SOD最低点访视名称 //其他任务需要改
|
//整个访视期间SOD最低点访视名称
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.LowVisit,GetStringFun=GetLowVisit,/*ChangeAllTaskFun=ChangeAllLowVisitName*/},
|
new ReadingCalculateData (){QuestionType=QuestionType.LowVisit,GetStringFun=GetLowVisit,/*ChangeAllTaskFun=ChangeAllLowVisitName*/},
|
||||||
|
|
||||||
//是否存在非淋巴结靶病灶
|
//是否存在非淋巴结靶病灶
|
||||||
|
@ -438,6 +448,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
//被评估为NE的单个靶病灶
|
//被评估为NE的单个靶病灶
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.NETarget,GetStringFun=GetNETarget},
|
new ReadingCalculateData (){QuestionType=QuestionType.NETarget,GetStringFun=GetNETarget},
|
||||||
|
|
||||||
|
// 与前一访视SOD相比变化量
|
||||||
|
new ReadingCalculateData (){QuestionType=QuestionType.LastVisitSODChange,GetDecimalNullFun=GetLastTaskSODChange},
|
||||||
|
|
||||||
|
//新靶病灶直径之和(iSOD)
|
||||||
|
new ReadingCalculateData (){QuestionType=QuestionType.ISOD,GetDecimalNullFun=GetiSODData},
|
||||||
|
|
||||||
|
// 与前一访视相比iSOD变化量
|
||||||
|
new ReadingCalculateData (){QuestionType=QuestionType.LastVisitiSODChange,GetDecimalNullFun=GetISODChange},
|
||||||
|
|
||||||
//靶病灶评估
|
//靶病灶评估
|
||||||
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate},
|
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate},
|
||||||
|
|
||||||
|
@ -739,15 +758,14 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
await _generalCalculateService.AddConvertedTaskFocus(taskinfo.Id, taskinfo.BeforeConvertedTaskId.Value);
|
await _generalCalculateService.AddConvertedTaskFocus(taskinfo.Id, taskinfo.BeforeConvertedTaskId.Value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
||||||
{
|
{
|
||||||
var LastVisitTaskId = await _visitTaskRepository.Where(x => (x.ReadingCategory == ReadingCategory.Visit &&
|
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
|
||||||
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
|
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
|
||||||
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
|
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
|
||||||
x.DoctorUserId == taskinfo.DoctorUserId &&
|
x.DoctorUserId == taskinfo.DoctorUserId &&
|
||||||
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
|
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
|
||||||
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum
|
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.ArmEnum == taskinfo.ArmEnum
|
||||||
&& x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect) || (x.Id == taskinfo.BeforeConvertedTaskId)
|
&& x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect
|
||||||
).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
|
).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
|
@ -1182,6 +1200,96 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 与前一访视SOD相比变化量
|
||||||
|
/// <summary>
|
||||||
|
/// 与前一访视SOD相比变化量
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<decimal?> GetLastTaskSODChange(ReadingCalculateDto inDto)
|
||||||
|
{
|
||||||
|
var lastTaskId = await this.GetLastVisitTaskId(inDto);
|
||||||
|
var lastSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
|
||||||
|
|
||||||
|
var value = await GetSODData(inDto);
|
||||||
|
|
||||||
|
if (value == null || inDto.IsBaseLine)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return value.NullChange0() - lastSOD;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 新靶病灶直径之和(iSOD)
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取iSOD
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<decimal?> GetiSODData(ReadingCalculateDto inDto)
|
||||||
|
{
|
||||||
|
if (iSODData != null)
|
||||||
|
{
|
||||||
|
return iSODData.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewTargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
|
||||||
|
|
||||||
|
if (tableQuestion.Count() == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
decimal result = 0;
|
||||||
|
|
||||||
|
foreach (var item in tableQuestion)
|
||||||
|
{
|
||||||
|
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
|
||||||
|
{
|
||||||
|
// 淋巴结的短径
|
||||||
|
result += (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.No)))
|
||||||
|
{
|
||||||
|
// 非淋巴结的长径
|
||||||
|
result += item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
iSODData = result;
|
||||||
|
|
||||||
|
return iSODData.Value;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 与前一访视相比iSOD变化量
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 与前一访视相比iSOD变化量
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<decimal?> GetISODChange(ReadingCalculateDto inDto)
|
||||||
|
{
|
||||||
|
|
||||||
|
var lastTaskId = await this.GetLastVisitTaskId(inDto);
|
||||||
|
var lastiSOD = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.ISOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
|
||||||
|
|
||||||
|
var value = await GetiSODData(inDto);
|
||||||
|
|
||||||
|
if (value == null || inDto.IsBaseLine)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return value.NullChange0() - lastiSOD;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region 修改其他标准
|
#region 修改其他标准
|
||||||
|
|
||||||
|
@ -1397,26 +1505,73 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private async Task<Guid> GetLastVisitTaskId(ReadingCalculateDto inDto)
|
private async Task<Guid> GetLastVisitTaskId(ReadingCalculateDto inDto)
|
||||||
{
|
{
|
||||||
// 拿到这一个访视
|
|
||||||
var thisNum = await _subjectVisitRepository.Where(x => x.Id == inDto.SubjectVisitId).Select(x => x.VisitNum).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
// 先找到上一个访视
|
if (lastVisitTaskId != null)
|
||||||
var lastVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == inDto.SubjectId && !x.IsLostVisit && x.VisitNum < thisNum).OrderByDescending(x => x.VisitNum).Select(x => x.Id).FirstOrDefaultAsync();
|
{
|
||||||
|
return lastVisitTaskId.Value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).ProjectTo<VisitTaskDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
|
||||||
|
var lastTaskId = 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 < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect
|
||||||
|
).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
|
||||||
|
lastVisitTaskId = lastTaskId;
|
||||||
|
return lastTaskId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 找到访视任务Id
|
|
||||||
|
|
||||||
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
|
|
||||||
x.TrialReadingCriterionId == inDto.TrialReadingCriterionId &&
|
|
||||||
x.TaskState == TaskState.Effect &&
|
|
||||||
x.IsAnalysisCreate == inDto.IsAnalysisCreate
|
|
||||||
&& x.SourceSubjectVisitId == lastVisitId && x.ArmEnum==inDto.ArmEnum).Select(x => x.Id).FirstOrDefaultAsync();
|
|
||||||
|
|
||||||
return LastVisitTaskId;
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 计算阅片问题 外层问题
|
#region 计算阅片问题 外层问题
|
||||||
|
|
||||||
|
#region 获取IRECIST靶病灶评估
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取IRECIST靶病灶评估
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<string> GetIRECISTTargetLesionEvaluate(ReadingCalculateDto inDto)
|
||||||
|
{
|
||||||
|
//if(基线没有靶病灶)
|
||||||
|
//{
|
||||||
|
// 靶病灶疗效为 ND
|
||||||
|
//}else if ((上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)|| 上一访视评估为iUPD || 本次访视SOD增加不小于5mm)
|
||||||
|
//{
|
||||||
|
// 靶病灶疗效为 ICPD
|
||||||
|
//} else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
|
||||||
|
|
||||||
|
//{
|
||||||
|
// 靶病灶疗效为 iUPD
|
||||||
|
//} else if (有任一靶病灶为NE状态)
|
||||||
|
// {
|
||||||
|
// 靶病灶疗效为 NE
|
||||||
|
//}
|
||||||
|
// else if (所有非淋巴结靶病灶消失,径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
|
||||||
|
//{
|
||||||
|
// 靶病灶疗效为 iCR
|
||||||
|
//} else if (与基线期SOD相比减小≥30 %)
|
||||||
|
//{
|
||||||
|
// 靶病灶疗效为 iPR
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
// {
|
||||||
|
// 靶病灶疗效为 iSD
|
||||||
|
//}
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region 获取靶病灶评估
|
#region 获取靶病灶评估
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取靶病灶评估
|
/// 获取靶病灶评估
|
||||||
|
|
|
@ -1199,11 +1199,48 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
/// </summary>
|
/// </summary>
|
||||||
DaysBetween = 22,
|
DaysBetween = 22,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 与前一访视SOD相比变化量
|
||||||
|
/// </summary>
|
||||||
|
LastVisitSODChange = 23,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新靶病灶直径之和(iSOD)
|
||||||
|
/// </summary>
|
||||||
|
ISOD = 24,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 与前一访视相比iSOD变化量
|
||||||
|
/// </summary>
|
||||||
|
LastVisitiSODChange = 25,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新靶病灶评估
|
||||||
|
/// </summary>
|
||||||
|
NewTargetLesion = 26,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 新非靶病灶评估
|
||||||
|
/// </summary>
|
||||||
|
NewNoTargetLesion = 27,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 其它既往新病灶评估
|
||||||
|
/// </summary>
|
||||||
|
OtherNewTargetLesion = 28,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 触发iRECIST后新病灶评估
|
||||||
|
/// </summary>
|
||||||
|
IRECISTNewTargetLesion = 29,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 新病灶评估
|
/// 新病灶评估
|
||||||
/// </summary>
|
/// </summary>
|
||||||
NewLesionEvaluation = 30,
|
NewLesionEvaluation = 30,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否脑转移
|
/// 是否脑转移
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue