diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 302b2bed9..7d3d1cd21 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1761,6 +1761,11 @@ 基线任务Id + + + 影像是否无法融合 + + 删除病灶获取起始病灶序号(RECIST1Point1 固定是1) @@ -1811,6 +1816,13 @@ + + + 获取影像是否无法融合 + + + + 获取报告整体整体评估 diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs index 3c40540ca..bce37b092 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/LuganoCalculateService.cs @@ -111,7 +111,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate /// private Guid? BaseLineTaskId; - private string nAString = "NA"; + /// + /// 影像是否无法融合 + /// + private bool? isUnableFuse; + + + private string nAString = "NA"; #endregion #region 删除病灶获取起始病灶序号 @@ -767,13 +773,32 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } + /// + /// 获取影像是否无法融合 + /// + /// + /// + public async Task ImageQualityIsUnableFuse(ReadingCalculateDto inDto) + { + if (isUnableFuse != null) + { + return isUnableFuse.Value; + } + else + { + var imageQualityProblem = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.ImageQualityProblem).Select(x => x.Answer).FirstOrDefault(); + isUnableFuse = imageQualityProblem == ((int)ImageQualityIssues.PETCTFailureFuse).ToString(); + return isUnableFuse.Value; + } - /// - /// 获取报告整体整体评估 - /// - /// - /// - public async Task GetReportTumor(Guid visitTaskId) + } + + /// + /// 获取报告整体整体评估 + /// + /// + /// + public async Task GetReportTumor(Guid visitTaskId) { return await GetTumor(await _generalCalculateService.GetReadingCalculateDto(visitTaskId)); } @@ -2428,11 +2453,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate //无需标记,自主选择 else { - Console.WriteLine("计算了PET5PS,当前接口" + _userInfo.RequestUrl + "当前结果"); return string.Empty; } - Console.WriteLine("计算了PET5PS,当前接口" + _userInfo.RequestUrl+"当前结果"+ result.GetEnumInt()); return result.GetEnumInt(); } #endregion diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index b4bf54ad2..93e01519e 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -402,39 +402,67 @@ namespace IRaCIS.Core.Domain.Share Min = 9 } - /// - /// 数值单位 - /// - public enum ValueUnit - { - None = 0, + /// + /// 数值单位 + /// + public enum ValueUnit + { + /// + /// 无 + /// + none = 0, - /// - /// MM - /// - MM = 1, + /// + /// mm + /// + mm = 1, - /// - /// CM - /// - CM = 2, + /// + /// cm + /// + cm = 2, - /// - /// 个 - /// - Individual = 3, + /// + /// 个 + /// + individual = 3, - /// - /// 自定义 - /// - Custom = 4, - } + /// + /// 自定义 + /// + Custom = 4, + + /// + /// mm2 + /// + mm2 = 5, + + /// + /// mm3 + /// + mm3 = 6, + + /// + /// SUV + /// + SUV = 7, + + /// + /// HU + /// + HU = 8, + + /// + /// % + /// + percentage = 9, + } - /// - /// 数值类型 - /// - public enum ValueOfType + /// + /// 数值类型 + /// + public enum ValueOfType { /// @@ -1973,10 +2001,49 @@ public enum SUVChangeVSBaseline } - /// - /// 问题类型 这里序号关系着计算顺序 请勿修改 - /// - public enum QuestionType + + /// + /// 影像质量问题 + /// + public enum ImageQualityIssues + { + /// + /// 解剖不完整 + /// + IncompleteAnatomy = 1, + + /// + /// 扫描断层丢失 + /// + MissingScanSlice=2, + + /// + /// 存在运动伪影 + /// + MotionArtifactsPresent = 3, + + /// + /// 关键解剖部位缺失 + /// + KeyAnatomyOutOfFieldOfView = 4, + + /// + /// 其它(需要备注) + /// + OtherIssuesCommentsRequired=5, + + /// + /// PET-CT影像无法融合 + /// + PETCTFailureFuse = 6, + + } + + + /// + /// 问题类型 这里序号关系着计算顺序 请勿修改 + /// + public enum QuestionType { /// /// 靶病灶径线之和(SOD) @@ -2287,6 +2354,11 @@ public enum SUVChangeVSBaseline /// 脾底位置 /// SplenicBottomPosition = 61, + + /// + /// 影像质量问题 + /// + ImageQualityProblem = 67, } diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index 6eefb8d0d..186af7474 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -2700,7 +2700,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common // 保存影像质量 、 修改整体肿瘤评估结果 、 非dicom 保存访视阅片结果 、附加评估 if (_userInfo.RequestUrl == "ReadingImageTask/changeDicomReadingQuestionAnswer" || _userInfo.RequestUrl == "ReadingImageTask/saveImageQuality" - || _userInfo.RequestUrl == "ReadingImageTask/saveVisitTaskQuestions" + || _userInfo.RequestUrl.Contains("SaveTaskQuestion") + || _userInfo.RequestUrl == "ReadingImageTask/saveVisitTaskQuestions" || _userInfo.RequestUrl == "ReadingImageTask/changeCalculationAnswer" || _userInfo.RequestUrl == "ReadingImageTask/submitTaskAdditionalQuestion") { @@ -2718,7 +2719,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common t.QuestionEnName, QuestionId = t.Id, t.DictionaryCode, - t.ShowOrder, + t.Unit, + t.ShowOrder, AnswerType = t.Type, }).OrderBy(t => t.ShowOrder).ToListAsync(); @@ -2790,8 +2792,11 @@ namespace IRaCIS.Core.Infra.EFCore.Common }, new { - QuestionAnswerList = taskQuestionAnswerList.Join(quesionList, t => t.ReadingQuestionTrialId, u => u.QuestionId, (t, u) => - new { Answer = u.AnswerType == "upload" ? "❄❅❆❇❈❉❊" + t.Answer : t.Answer, u.DictionaryCode, u.QuestionName, u.QuestionEnName, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList() + QuestionAnswerList = taskQuestionAnswerList.Join(quesionList, + t => t.ReadingQuestionTrialId, + u => u.QuestionId, + (t, u) => + new { Answer = u.AnswerType == "upload" ? "❄❅❆❇❈❉❊" + t.Answer : t.Answer, u.DictionaryCode, u.QuestionName, u.QuestionEnName, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList() , TableQuestionAndAnswerList = tableQuesionAndAnswerList } @@ -2848,9 +2853,15 @@ namespace IRaCIS.Core.Infra.EFCore.Common originalRowMark = await _dbContext.ReadingTableAnswerRowInfo.Where(t => t.Id == entity.SplitRowId).Select(t => t.RowMark).FirstOrDefaultAsync(); } - //处理标识 因为触发器在稽查后才进行操作 + //处理标识 因为触发器在稽查后才进行操作 - entity.RowMark = entity.OrderMark + entity.RowIndex.GetLesionMark(); + if (entity.OrderMark == string.Empty) + { + entity.OrderMark = await _dbContext.ReadingQuestionTrial.Where(x => x.Id == entity.QuestionId).Select(x => x.OrderMark).FirstOrDefaultAsync(); + + } + + entity.RowMark = entity.OrderMark + entity.RowIndex.GetLesionMark();