diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
index c50f93154..47242c654 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
@@ -149,6 +149,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public bool IsOnlyChangeAllTask { get; set; } = false;
+ ///
+ /// 修约小数点
+ ///
+ public int DigitPlaces { get; set; } = 2;
+
public List QuestionInfo { get; set; } = new List();
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
index 753263923..c6211e9c8 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs
@@ -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 errorMsgDic = new Dictionary()
+ {
+ {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);
}
}
}
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs
index 97938994c..b7ea032eb 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/GeneralCalculateService.cs
@@ -52,6 +52,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
public async Task 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;
diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs
index 50095083f..49cbb64f8 100644
--- a/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs
+++ b/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs
@@ -53,6 +53,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
this._readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository;
}
+ private List siteVisitForTumorList = null;
#region 获取阅片报告
///
@@ -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 自治疗后第二个访视点以来持续的新骨病变数量
///
/// 自治疗后第二个访视点以来持续的新骨病变数量
///
@@ -616,6 +623,36 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#endregion
+ #region 间隔天数
+ ///
+ /// 获取
+ ///
+ ///
+ ///
+ public async Task 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 访视点肿瘤评估
///
@@ -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
+ ///
+ /// 获取访视日期信息
+ ///
+ ///
+ ///
+ public async Task> 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
///
///
- 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
diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
index 06bc4fa24..9736bcd42 100644
--- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
+++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs
@@ -1014,7 +1014,7 @@ namespace IRaCIS.Core.Domain.Share
///
/// 间隔天数
///
- DaysBetween = 21,
+ DaysBetween = 22,
}
///
diff --git a/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs b/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs
index f3e7a9e65..44528c849 100644
--- a/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs
+++ b/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs
@@ -39,7 +39,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
};
}
-
+
public static Dictionary SplitLesionDic = new Dictionary()