diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 20e8932f0..b493a8a1f 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -1740,6 +1740,11 @@
裁判结果的备注
+
+
+ 任务Id
+
+
任务Id
@@ -3612,6 +3617,20 @@
+
+
+ 验证访视提交
+
+
+
+
+
+
+ 获取ReadingCalculateDto
+
+
+
+
自动计算
@@ -3753,6 +3772,27 @@
+
+
+ 获取靶病灶评估
+
+
+
+
+
+
+ 获取非靶病灶评估
+
+
+
+
+
+
+ 获取新病灶评估
+
+
+
+
阅片医学审核
@@ -4392,6 +4432,11 @@
答案
+
+
+ 问题名称
+
+
病灶类型
@@ -7376,6 +7421,13 @@
+
+
+ 验证访视提交
+
+
+
+
提交表格问题
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
index aa23def80..be845ea02 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs
@@ -52,6 +52,11 @@ namespace IRaCIS.Core.Application.ViewModel
///
public string Answer { get; set; }
+ ///
+ /// 问题名称
+ ///
+ public string QuesionName { get; set; }
+
///
/// 病灶类型
///
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
index a31d1ae10..1061d3e43 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
@@ -889,6 +889,20 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
}
+ public class VerifyVisitTaskQuestionsOutDto
+ {
+ public bool IsVerified { get; set; }
+
+ public string ErrorMessage { get; set; }
+ }
+
+ public class VerifyVisitTaskQuestionsInDto
+ {
+ ///
+ /// 任务Id
+ ///
+ public Guid VisitTaskId { get; set; }
+ }
public class SubmitTableQuestionInDto
{
public Guid QuestionId { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingCalculateService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingCalculateService.cs
index aba474474..943302239 100644
--- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingCalculateService.cs
@@ -4,6 +4,7 @@
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
+using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.ViewModel;
namespace IRaCIS.Core.Application.Interfaces
{
@@ -13,5 +14,8 @@ namespace IRaCIS.Core.Application.Interfaces
public interface IReadingCalculateService
{
Task CalculateTask(CalculateTaskInDto inDto);
+
+
+ Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto);
}
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs
index 41186f8ac..36a9f5592 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingCalculateService.cs
@@ -12,6 +12,7 @@ using Panda.DynamicWebApi.Attributes;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.Common;
using Microsoft.Extensions.Caching.Memory;
+using IRaCIS.Core.Application.Service.Reading.Dto;
namespace IRaCIS.Core.Application.Service
{
@@ -64,37 +65,109 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task CalculateTask(CalculateTaskInDto inDto)
{
- var visitTask = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
- var criterionId = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == visitTask.TrialId && x.IsConfirm).Select(x => x.Id).FirstOrDefaultAsync();
- List questionInfos = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == criterionId).Select(x => new QuestionInfo()
+ ReadingCalculateDto readingData = await GetReadingCalculateDto(inDto.VisitTaskId);
+ readingData.IsChangeOtherTask = inDto.IsChangeOtherTask;
+ await ReadingCalculate(readingData);
+ }
+
+ ///
+ /// 验证访视提交
+ ///
+ ///
+ ///
+ public async Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto)
+ {
+ await this.CalculateTask(new CalculateTaskInDto()
{
- LesionType=x.LesionType,
- QuestionId=x.Id,
- QuestionType=x.QuestionType,
+ VisitTaskId = inDto.VisitTaskId,
+ IsChangeOtherTask = true
+ });
+ visitTaskAnswerList = null;
+ ReadingCalculateDto data = await GetReadingCalculateDto(inDto.VisitTaskId);
+ VerifyVisitTaskQuestionsOutDto result = new VerifyVisitTaskQuestionsOutDto() {
+
+ IsVerified=true,
+ ErrorMessage=string.Empty,
+ };
+
+ foreach (var item in data.QuestionInfo.Where(x => x.QuestionType != null))
+ {
+ switch (item.QuestionType)
+ {
+ case QuestionType.TargetLesion:
+ var targetLesionAnswer = await GetTargetLesionEvaluate(data);
+ if (item.Answer != targetLesionAnswer)
+ {
+ result.IsVerified = false;
+ var msg = $"问题【{item.QuesionName}】的答案为【{item.Answer}】但是计算答案为【{targetLesionAnswer}】";
+ result.ErrorMessage += result.ErrorMessage == string.Empty ? msg : "," + msg;
+ }
+ break;
+
+ case QuestionType.NoTargetLesion:
+ var noTargetLesionAnswer = await GetNoTargetLesionEvaluate(data);
+ if (item.Answer != noTargetLesionAnswer)
+ {
+ result.IsVerified = false;
+ var msg = $"问题【{item.QuesionName}】的答案为【{item.Answer}】但是计算答案为【{noTargetLesionAnswer}】";
+ result.ErrorMessage += result.ErrorMessage == string.Empty ? msg : "," + msg;
+ }
+ break;
+ case QuestionType.NewLesions:
+ var newTargetLesionAnswer = await GetNewLesionEvaluate(data);
+ if (item.Answer != newTargetLesionAnswer)
+ {
+ result.IsVerified = false;
+ var msg = $"问题【{item.QuesionName}】的答案为【{item.Answer}】但是计算答案为【{newTargetLesionAnswer}】";
+ result.ErrorMessage += result.ErrorMessage == string.Empty ? msg : "," + msg;
+ }
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ ///
+ /// 获取ReadingCalculateDto
+ ///
+ ///
+ ///
+ public async Task GetReadingCalculateDto(Guid visitTaskId)
+ {
+ var visitTask = await _visitTaskRepository.Where(x => x.Id == visitTaskId).FirstNotNullAsync();
+ var criterionId = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == visitTask.TrialId && x.IsConfirm).Select(x => x.Id).FirstOrDefaultAsync();
+ List questionInfos = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == criterionId).Select(x => new QuestionInfo()
+ {
+ LesionType = x.LesionType,
+ QuestionId = x.Id,
+ QuesionName=x.QuestionName,
+ QuestionType = x.QuestionType,
}).ToListAsync();
- var questionAnswers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).Select(x => new
+ var questionAnswers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).Select(x => new
{
x.ReadingQuestionTrialId,
x.Answer
- }).ToListAsync() ;
+ }).ToListAsync();
- var tableQuestion = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).Include(x=>x.ReadingTableQuestionTrial).Select(x => new TableQuestionInfo()
+ var tableQuestion = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == visitTaskId).Include(x => x.ReadingTableQuestionTrial).Select(x => new TableQuestionInfo()
{
Answer = x.Answer,
QuestionMark = x.ReadingTableQuestionTrial.QuestionMark,
TableQuestionId = x.TableQuestionId,
- QuestionId=x.QuestionId,
- RowIndex=x.RowIndex,
+ QuestionId = x.QuestionId,
+
+ RowIndex = x.RowIndex,
}).ToListAsync();
- foreach (var item in questionInfos)
- {
+ foreach (var item in questionInfos)
+ {
item.Answer = questionAnswers.Where(y => y.ReadingQuestionTrialId == item.QuestionId).Select(x => x.Answer).FirstOrDefault() ?? string.Empty;
var thisItemTableQuestions = tableQuestion.Where(x => x.QuestionId == item.QuestionId).ToList();
- item.TableRowInfoList= thisItemTableQuestions.GroupBy(x=> new { x.RowIndex })
+ item.TableRowInfoList = thisItemTableQuestions.GroupBy(x => new { x.RowIndex })
.Select(g => new TableRowInfo()
{
RowIndex = g.Key.RowIndex,
@@ -105,17 +178,16 @@ namespace IRaCIS.Core.Application.Service
ReadingCalculateDto readingData = new ReadingCalculateDto()
{
SubjectId = visitTask.SubjectId,
- VisitTaskId = inDto.VisitTaskId,
+ VisitTaskId = visitTaskId,
SubjectVisitId = visitTask.SourceSubjectVisitId.Value,
QuestionInfo = questionInfos,
- CriterionId= criterionId,
- IsChangeOtherTask=inDto.IsChangeOtherTask,
- TrialId=visitTask.TrialId,
- DoctorUserId=visitTask.DoctorUserId,
+ CriterionId = criterionId,
+ TrialId = visitTask.TrialId,
+ DoctorUserId = visitTask.DoctorUserId,
};
- //await ReadingCalculate(readingData);
- }
+ return readingData;
+ }
///
/// 自动计算
@@ -334,13 +406,13 @@ namespace IRaCIS.Core.Application.Service
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && (x.Answer == "是"||x.Answer.ToLower()=="true".ToLower())))
{
// 淋巴结的短径
- result += decimal.Parse((item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0());
+ 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 == "是" || x.Answer.ToLower() == "true".ToLower())))
{
// 非淋巴结的长径
- result += decimal.Parse(item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0());
+ result += item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
}
}
@@ -368,7 +440,7 @@ namespace IRaCIS.Core.Application.Service
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && (x.Answer == "是" || x.Answer.ToLower() == "false".ToLower())))
{
// 非淋巴结的长径
- result += decimal.Parse(item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0());
+ result += item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
}
}
@@ -514,10 +586,10 @@ namespace IRaCIS.Core.Application.Service
var isExists = false;
foreach (var item in rowIndexs)
{
- var lastValue = decimal.Parse(lastQuestionAsnwer.Where(x => x.RowIndex == item && x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0());
+ var lastValue = lastQuestionAsnwer.Where(x => x.RowIndex == item && x.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
var thisRowData = thisQuestionAsnwer.Where(x => x.RowIndex == item).SelectMany(x => x.TableQuestionList).ToList();
- var thisValue = decimal.Parse(thisRowData.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0());
+ var thisValue = thisRowData.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault().IsNullOrEmptyReturn0();
if (thisValue - lastValue > 5)
{
@@ -664,7 +736,7 @@ namespace IRaCIS.Core.Application.Service
.Select(x => x.Id).FirstOrDefaultAsync();
- var baseLineSOD = decimal.Parse((await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0());
+ var baseLineSOD =(await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == baseLineTaskId && x.ReadingQuestionTrial.QuestionType == QuestionType.SOD).Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0();
return baseLineSOD;
}
#endregion
@@ -686,7 +758,7 @@ namespace IRaCIS.Core.Application.Service
VisitTaskId = x.VisitTaskId,
QuestionId = x.ReadingQuestionTrialId,
VisitName = x.VisitTask.SourceSubjectVisit.VisitName,
- SOD = decimal.Parse(x.Answer.IsNullOrEmptyReturn0()),
+ SOD = x.Answer.IsNullOrEmptyReturn0(),
}).ToListAsync();
}
@@ -713,7 +785,239 @@ namespace IRaCIS.Core.Application.Service
return LastVisitTaskId;
}
- #endregion
+ #endregion
- }
+ #region 计算阅片问题 外层问题
+
+ #region 获取靶病灶评估
+ ///
+ /// 获取靶病灶评估
+ ///
+ ///
+ ///
+ public async Task GetTargetLesionEvaluate(ReadingCalculateDto inDto)
+ {
+ var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
+ dynamic resultData = new
+ {
+ //非淋巴结靶病灶长径之和
+ SumOfDiameter = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SumOfDiameter).Sum(x => x.Answer.IsNullOrEmptyReturn0()),
+
+ //所有淋巴结靶病灶的短径小于10mm
+ DiameterLessThan10 = true,
+
+ // SOD 百分比与基线期SOD相比减小≥30%
+ SODPercentBigger30 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SODPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= (decimal)0.3,
+
+ // SOD 百分比 与基线期SOD相比减小<30%
+ SODPercentLess30 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SODPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < (decimal)0.3,
+
+ // SOD 百分比 整体访视期间最低点SOD相比增加<20%
+ LowPercentLess20 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < (decimal)0.2,
+
+ // SOD 百分比 比整体访视期间最低点SOD增加≥20%
+ LowPercentBigger20 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= (decimal)0.2,
+
+ // SOD 变化值 比整体访视期间最低点SOD绝对增加值<5 mm
+ LowChangeLess5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) < 5,
+
+ // 比整体访视期间最低点SOD绝对增加值≥5 mm
+ LowChangeBigger5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
+
+ // 被评估为NE的单个靶病灶 是否存在状态为不可评估的靶病灶
+ ExixtsNETargetLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer == "不可评估"),
+
+ //// 上次访视点整体肿瘤评估
+ LastTargetLesionEvaluate = string.Empty,
+
+ // 当前访视点非淋巴结病灶长径>0
+ CurrentMajoreBigger0 = true,
+
+ // 至少一个淋巴结靶病灶短径≥10 mm
+ CurrenShortBigger10 = true,
+
+ // 该淋巴结靶病灶短径绝对增加值≥5 mm
+ IsAddFive = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.IsAddFive && x.Answer == "是").Count() > 0,
+ };
+
+
+
+
+ foreach (var item in tableQuestion)
+ {
+ if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && (x.Answer == "是" || x.Answer.ToLower() == "true".ToLower())))
+ {
+ // 淋巴结的短径
+ resultData.DiameterLessThan10 = (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() < 10;
+
+ // 至少一个淋巴结靶病灶短径≥10 mm
+ resultData.CurrenShortBigger10 = (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() >= 10;
+ }
+
+ if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && (x.Answer == "否" || x.Answer.ToLower() == "false".ToLower())))
+ {
+ // 当前访视点非淋巴结病灶
+ resultData.CurrentMajoreBigger0 = (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() > 0;
+ }
+ }
+
+
+ var lastVisitTaskId = await GetLastVisitTaskId(inDto);
+ var questionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.Tumor).Select(x => x.QuestionId).FirstOrDefault();
+ resultData.LastTargetLesionEvaluate=(await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == questionId)
+ .Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty;
+
+
+
+
+
+ string result = string.Empty;
+ if (resultData.calculateData == 0 && resultData.DiameterLessThan10 && !resultData.ExixtsNETargetLesion)
+ {
+ result = "CR";
+ }
+ else if (
+ (resultData.SODPercentBigger30 && resultData.LowPercentLess20 && !resultData.ExixtsNETargetLesion)
+ ||
+ (resultData.SODPercentBigger30 && resultData.LowChangeLess5 && !resultData.ExixtsNETargetLesion)
+ )
+ {
+ result = "PR";
+ }
+ else if (
+ (resultData.SODPercentLess30 && resultData.LowPercentLess20 && !resultData.ExixtsNETargetLesion)
+ ||
+ (resultData.SODPercentLess30 && resultData.LowChangeLess5 && !resultData.ExixtsNETargetLesion)
+ )
+ {
+ result = "SD";
+ }
+ else if (resultData.LowPercentBigger20 && resultData.LowChangeBigger5)
+ {
+ result = "PD";
+ }
+ else if (
+ (resultData.LowPercentLess20 && resultData.ExixtsNETargetLesion)
+ ||
+ (resultData.LowPercentBigger20 && resultData.LowChangeLess5 && resultData.ExixtsNETargetLesion)
+ )
+ {
+ result = "NE";
+ }
+
+ else if (!resultData.ExixtsNETargetLesion)
+ {
+ result = "ND";
+ }
+
+ else if (
+ (resultData.LastTargetLesionEvaluate == "CR" && resultData.CurrenShortBigger10 && resultData.IsAddFive)
+ ||
+ (resultData.LastTargetLesionEvaluate == "CR" && resultData.CurrentMajoreBigger0)
+ )
+ {
+ result = "PD";
+ }
+
+
+ return result;
+ }
+ #endregion
+
+ #region 获取非靶病灶评估
+
+ ///
+ /// 获取非靶病灶评估
+ ///
+ ///
+ ///
+ public async Task GetNoTargetLesionEvaluate(ReadingCalculateDto inDto)
+ {
+ var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NonTargetLesions).SelectMany(x => x.TableRowInfoList).ToList();
+
+ var tableQuestions = tableRows.SelectMany(x => x.TableQuestionList).ToList();
+
+ //任意单个病灶 / 病灶组评估为“显著增大”
+ if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer == "显著增大"))
+ {
+ return "PD";
+ }
+ //所有单个病灶/病灶组状态评估状态为“消失”
+ else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer != "消失"))
+ {
+ return "PD";
+ }
+ // 任意单个病灶/病灶组评估为“无法评估”并且没有“显著增大”
+ else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer == "无法评估") &&
+ !tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer != "显著增大")
+ )
+ {
+ return "NE";
+ }
+ // 基线时没有非靶病灶
+ else if (tableQuestions.Count() == 0)
+ {
+ return "ND";
+ }
+
+ // 所有单个病灶/病灶组评估为”存在”或者有些评估为“消失”有些评估为“存在”,且没有“显著增大”和“无法评估”的病灶
+
+ else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer != "存在")
+ || (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer == "存在" || x.Answer == "消失") && !tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && (x.Answer != "显著增大" || x.Answer != "无法评估")))
+
+ )
+ {
+ return "NN";
+ }
+ else
+ {
+ return string.Empty;
+ }
+
+ }
+
+ #endregion
+
+ #region 获取新病灶评估
+ ///
+ /// 获取新病灶评估
+ ///
+ ///
+ ///
+ public async Task GetNewLesionEvaluate(ReadingCalculateDto inDto)
+ {
+ var tableRows = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewLesions).SelectMany(x => x.TableRowInfoList).ToList();
+
+ var tableQuestions = tableRows.SelectMany(x => x.TableQuestionList).ToList();
+
+
+ // 当前访视存在至少一个明确新病灶
+ if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer == "明确"))
+ {
+ return "是";
+ }
+ //当前访视不存在明确新病灶且存在至少一个疑似新病灶
+ else if (!tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer != "明确") ||
+ tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer == "疑似")
+ )
+ {
+ return "疑似";
+ }
+
+ //只要有任何一个新病灶状态为“无法评估”
+ else if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer == "无法评估"))
+ {
+ return "NE";
+ }
+ else
+ {
+ return "否";
+ }
+
+ }
+ #endregion
+
+ #endregion
+
+ }
}
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs
index bf01ac64f..eb9966ec8 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTaskService.cs
@@ -1844,6 +1844,17 @@ namespace IRaCIS.Application.Services
#region 提交问题
+ ///
+ /// 验证访视提交
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto)
+ {
+ return await _readingCalculateService.VerifyVisitTaskQuestions(inDto);
+ }
+
///
/// 提交表格问题
///
diff --git a/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs b/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs
index f02fe9c2c..39540633b 100644
--- a/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs
+++ b/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs
@@ -38,16 +38,16 @@ namespace IRaCIS.Core.Infra.EFCore.Common
}
}
- public static string IsNullOrEmptyReturn0(this string value)
+ public static decimal IsNullOrEmptyReturn0(this string value)
{
if (value == null || value == string.Empty)
{
- return "0";
+ return 0;
}
else
{
- return value;
+ return decimal.Parse(value);
}
}