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); } }