Test.EIImageViewer
parent
40baccf48b
commit
1d82214520
|
@ -149,6 +149,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
/// </summary>
|
||||
public bool IsOnlyChangeAllTask { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 修约小数点
|
||||
/// </summary>
|
||||
public int DigitPlaces { get; set; } = 2;
|
||||
|
||||
public List<QuestionInfo> QuestionInfo { get; set; } = new List<QuestionInfo>();
|
||||
|
||||
|
||||
|
|
|
@ -842,7 +842,8 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
SubmitTableQuestionOutDto result = new SubmitTableQuestionOutDto();
|
||||
await VerifyTaskIsSign(inDto.VisitTaskId);
|
||||
|
||||
var criterionId = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Select(x => x.TrialReadingCriterionId).FirstOrDefaultAsync();
|
||||
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == criterionId).FirstNotNullAsync();
|
||||
var tableQuestionIds = inDto.AnswerList.Select(x => x.TableQuestionId).ToList();
|
||||
|
||||
var tableQuestionIdGroup = tableQuestionIds.GroupBy(x => new { TableQuestionId = x }).Select(x => new TableQuestionData
|
||||
|
@ -883,8 +884,23 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
if (rowCount > item.MaxRowCount.Value - 1)
|
||||
{
|
||||
//throw new BusinessValidationFailedException($"问题{item.QuestionName}最大相同问题数为{item.MaxRowCount.Value},当前已存在{rowCount}条!");
|
||||
throw new BusinessValidationFailedException($"按照RECIST1.1的相关规则,同一器官的靶病灶数量不超过{item.MaxRowCount.Value}个,请确认!!");
|
||||
|
||||
Dictionary<CriterionType, string> errorMsgDic = new Dictionary<CriterionType, string>()
|
||||
{
|
||||
{CriterionType.RECIST1Pointt1, "按照RECIST1.1的相关规则,同一器官的靶病灶数量不超过"},
|
||||
};
|
||||
string msg = string.Empty;
|
||||
try
|
||||
{
|
||||
msg = $"{ errorMsgDic[criterionInfo.CriterionType]}{item.MaxRowCount.Value}个,请确认!!";
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
msg=$"问题{item.QuestionName}最大相同问题数为{item.MaxRowCount.Value},当前已存在{rowCount}条!";
|
||||
}
|
||||
|
||||
throw new BusinessValidationFailedException(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
public async Task<ReadingCalculateDto> GetReadingCalculateDto(Guid visitTaskId)
|
||||
{
|
||||
var visitTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync();
|
||||
|
||||
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == visitTask.TrialReadingCriterionId).FirstNotNullAsync();
|
||||
var subjectVisit = await _subjectVisitRepository.Where(x => x.Id == (visitTask.SourceSubjectVisitId ?? default(Guid))).FirstOrDefaultAsync();
|
||||
|
||||
var baseLineVisitId = await _subjectVisitRepository.Where(x => x.SubjectId == visitTask.SubjectId && x.IsBaseLine).Select(x => x.Id).FirstOrDefaultAsync();
|
||||
|
@ -129,6 +131,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
VisitName = subjectVisit.VisitName,
|
||||
BlindName = subjectVisit.BlindName,
|
||||
VisitTaskNum = visitTask.VisitTaskNum,
|
||||
DigitPlaces= criterionInfo.DigitPlaces??2,
|
||||
};
|
||||
|
||||
return readingData;
|
||||
|
|
|
@ -53,6 +53,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
|
||||
}
|
||||
|
||||
private List<SiteVisitForTumor> siteVisitForTumorList = null;
|
||||
|
||||
#region 获取阅片报告
|
||||
/// <summary>
|
||||
|
@ -437,6 +438,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
// 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.NewBoneLesionsCount,GetIntFun=GetNewBoneLesionCount},
|
||||
|
||||
// 间隔天数
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.DaysBetween,GetIntFun=GetNumberOfDaysBetween},
|
||||
|
||||
// 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.SiteVisitForTumorEvaluation,GetStringFun=GetSiteVisitForTumorEvaluation},
|
||||
|
||||
|
@ -498,6 +502,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
item.Answer = nameof(YesOrNoOrNa.NA);
|
||||
}
|
||||
break;
|
||||
case QuestionType.DaysBetween:
|
||||
item.Answer = (await calculate.GetIntFun(inDto)).ToString();
|
||||
break;
|
||||
case QuestionType.SiteVisitForTumorEvaluation:
|
||||
item.Answer = await calculate.GetStringFun(inDto);
|
||||
break;
|
||||
|
@ -595,7 +602,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
#endregion
|
||||
|
||||
|
||||
#region 既往新病灶计数
|
||||
#region 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
/// <summary>
|
||||
/// 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
/// </summary>
|
||||
|
@ -616,6 +623,36 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
#endregion
|
||||
|
||||
|
||||
#region 间隔天数
|
||||
/// <summary>
|
||||
/// 获取
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<int> GetNumberOfDaysBetween(ReadingCalculateDto inDto)
|
||||
{
|
||||
if (inDto.IsBaseLine)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
|
||||
var taskList = await GetSiteVisitForTumorList(inDto);
|
||||
var lastTask = taskList.Where(x => x.VisitTaskNum < taskinfo.VisitTaskNum).OrderByDescending(x => x.VisitTaskNum).FirstOrDefault();
|
||||
if (lastTask != null)
|
||||
{
|
||||
var thisTask = taskList.FirstOrDefault();
|
||||
|
||||
return (int)Math.Floor((thisTask.EarliestScanDate-lastTask.LatestScanDate).TotalDays);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region 访视点肿瘤评估
|
||||
/// <summary>
|
||||
|
@ -649,16 +686,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
public async Task ChangeLastTaskSiteVisitForTumorEvaluation(ReadingCalculateDto inDto)
|
||||
{
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
|
||||
var taskList = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
|
||||
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
|
||||
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum <= taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
|
||||
).OrderByDescending(x => x.VisitTaskNum).Select(x => new SiteVisitForTumor()
|
||||
{
|
||||
VisitTaskId=x.Id,
|
||||
VisitTaskNum=x.VisitTaskNum,
|
||||
EarliestScanDate=x.SourceSubjectVisit.EarliestScanDate??DateTime.Now,
|
||||
LatestScanDate=x.SourceSubjectVisit.LatestScanDate ?? DateTime.Now,
|
||||
}).ToListAsync();
|
||||
var taskList =await GetSiteVisitForTumorList(inDto);
|
||||
var lastTask = taskList.Where(x => x.VisitTaskNum < taskinfo.VisitTaskNum).OrderByDescending(x => x.VisitTaskNum).FirstOrDefault();
|
||||
|
||||
var baseLineTask = taskList.OrderBy(x => x.VisitTaskNum).FirstOrDefault();
|
||||
|
@ -720,6 +748,34 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 获取访视日期信息
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<SiteVisitForTumor>> GetSiteVisitForTumorList(ReadingCalculateDto inDto)
|
||||
{
|
||||
if (siteVisitForTumorList == null)
|
||||
{
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
|
||||
siteVisitForTumorList = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
|
||||
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
|
||||
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum <= taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
|
||||
).OrderByDescending(x => x.VisitTaskNum).Select(x => new SiteVisitForTumor()
|
||||
{
|
||||
VisitTaskId = x.Id,
|
||||
VisitTaskNum = x.VisitTaskNum,
|
||||
EarliestScanDate = x.SourceSubjectVisit.EarliestScanDate ?? DateTime.Now,
|
||||
LatestScanDate = x.SourceSubjectVisit.LatestScanDate ?? DateTime.Now,
|
||||
}).ToListAsync();
|
||||
}
|
||||
|
||||
return siteVisitForTumorList;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public async Task<object> GetReportVerify(GetReportVerifyInDto inDto)
|
||||
{
|
||||
return new() {
|
||||
|
|
|
@ -752,7 +752,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
else
|
||||
{
|
||||
return decimal.Round((thisSOD.NullChange0() - baseLineSOD) * 100 / baseLineSOD, 2);
|
||||
return decimal.Round((thisSOD.NullChange0() - baseLineSOD) * 100 / baseLineSOD, inDto.DigitPlaces);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
@ -804,7 +804,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
else
|
||||
{
|
||||
return decimal.Round((thisSOD.NullChange0() - minSOD) * 100 / minSOD, 2);
|
||||
return decimal.Round((thisSOD.NullChange0() - minSOD) * 100 / minSOD, inDto.DigitPlaces);
|
||||
}
|
||||
|
||||
|
||||
|
@ -996,30 +996,30 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task ChangeAllLowPercent(ChangeAllTaskDto inDto)
|
||||
{
|
||||
var visitTaskList = await GetVisitTaskAnswerList(inDto.calculateDto);
|
||||
//public async Task ChangeAllLowPercent(ChangeAllTaskDto inDto)
|
||||
//{
|
||||
// var visitTaskList = await GetVisitTaskAnswerList(inDto.calculateDto);
|
||||
|
||||
var lowSod = (await GetLowSODVisit(inDto.calculateDto)).Select(x => x.SOD).OrderBy(x => x).FirstOrDefault();
|
||||
// var lowSod = (await GetLowSODVisit(inDto.calculateDto)).Select(x => x.SOD).OrderBy(x => x).FirstOrDefault();
|
||||
|
||||
foreach (var item in visitTaskList.Where(x => x.VisitTaskId != inDto.calculateDto.BaseLineTaskId))
|
||||
{
|
||||
decimal percent = 0;
|
||||
if (lowSod == 0)
|
||||
{
|
||||
percent = 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
percent = decimal.Round((item.SOD - lowSod) * 100 / lowSod, 2);
|
||||
}
|
||||
// foreach (var item in visitTaskList.Where(x => x.VisitTaskId != inDto.calculateDto.BaseLineTaskId))
|
||||
// {
|
||||
// decimal percent = 0;
|
||||
// if (lowSod == 0)
|
||||
// {
|
||||
// percent = 100;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// percent = decimal.Round((item.SOD - lowSod) * 100 / lowSod, 2);
|
||||
// }
|
||||
|
||||
await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == item.VisitTaskId && x.ReadingQuestionTrialId == inDto.QuestionId, x => new ReadingTaskQuestionAnswer()
|
||||
{
|
||||
Answer = percent.ToString()
|
||||
});
|
||||
}
|
||||
}
|
||||
// await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == item.VisitTaskId && x.ReadingQuestionTrialId == inDto.QuestionId, x => new ReadingTaskQuestionAnswer()
|
||||
// {
|
||||
// Answer = percent.ToString()
|
||||
// });
|
||||
// }
|
||||
//}
|
||||
|
||||
#endregion
|
||||
|
||||
|
|
|
@ -1014,7 +1014,7 @@ namespace IRaCIS.Core.Domain.Share
|
|||
/// <summary>
|
||||
/// 间隔天数
|
||||
/// </summary>
|
||||
DaysBetween = 21,
|
||||
DaysBetween = 22,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
|
|||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static Dictionary<int, string> SplitLesionDic = new Dictionary<int, string>()
|
||||
|
|
Loading…
Reference in New Issue