diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 833c80a3d..f8f0bee30 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -8768,6 +8768,11 @@ IVUS测量值导入 + + + 帧数 + + 外弹力膜面积Emm @@ -8783,6 +8788,11 @@ 外弹力膜面积- 管腔面积 + + + 帧数 + + 第一次 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs index 80c66feed..33c6da229 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingCalculateViewModel.cs @@ -213,20 +213,25 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto ///// //public int PlaqueNum { get; set; } + /// + /// 帧数 + /// + public decimal? FrameNumber { get; set; } + /// /// 外弹力膜面积Emm /// - public decimal Emm { get; set; } + public decimal? Emm { get; set; } /// /// 管腔面积Lumen /// - public decimal Lumen { get; set; } + public decimal? Lumen { get; set; } /// /// 外弹力膜面积- 管腔面积 /// - public decimal EmmSubtractionLumen + public decimal? EmmSubtractionLumen { get { @@ -244,20 +249,25 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public class OCTFCTUploadData { + /// + /// 帧数 + /// + public decimal? FrameNumber { get; set; } + /// /// 第一次 /// - public decimal FirstData { get; set; } + public decimal? FirstData { get; set; } /// /// 第二次 /// - public decimal SecondData { get; set; } + public decimal? SecondData { get; set; } /// /// 第三次 /// - public decimal ThirdData { get; set; } + public decimal? ThirdData { get; set; } /// /// 巨噬细胞浸润测量 @@ -291,7 +301,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public decimal? LipidAngle { get; set; } - public decimal Avg { get { + public decimal? Avg { get { return ( FirstData + SecondData + ThirdData) / 3; } } diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs index 20a4eebcf..a8d119aaa 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/IVUSCalculateService.cs @@ -6,6 +6,7 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore.Common; using IRaCIS.Core.Infrastructure; using MassTransit; +using MathNet.Numerics; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; @@ -473,6 +474,33 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate return decimal.Parse(decimal.Round(decimal.Parse(value ?? "0"), digitPlaces, MidpointRounding.AwayFromZero).ToString("F" + digitPlaces.ToString())); }; + + decimal? getdecimalEmptyData(string value) + { + if (value == string.Empty) + { + return null; + } + return decimal.Parse(decimal.Round(decimal.Parse(value ?? "0"), digitPlaces, MidpointRounding.AwayFromZero).ToString("F" + digitPlaces.ToString())); + } + + string getStringValue(decimal? value) + { + if (value == null) + { + return string.Empty; + } + if (digitPlaces == -1) + { + return value.Value.ToString(); + } + else + { + return decimal.Round(value.Value, digitPlaces, MidpointRounding.AwayFromZero).ToString("F" + digitPlaces.ToString()); + } + + } + List measuredValueList = new List(); var errorRow = new List { }; @@ -484,8 +512,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate iVUSMeasuredValue = new IVUSMeasuredValue() { //PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()), - Emm = getdecimalData(dataTable.Rows[i]["A"].ToString()), - Lumen = getdecimalData(dataTable.Rows[i]["B"].ToString()), + FrameNumber = getdecimalEmptyData(dataTable.Rows[i]["A"].ToString()), + Emm = getdecimalEmptyData(dataTable.Rows[i]["B"].ToString()), + Lumen = getdecimalEmptyData(dataTable.Rows[i]["C"].ToString()), }; } catch (Exception) @@ -553,22 +582,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.PlaqueNumber).Select(x => x.Id).FirstOrDefault(), //}); - var emm = item.Emm.ToString(); - var lumen=item.Lumen.ToString(); - var emmSubtractionLumen = item.EmmSubtractionLumen.ToString(); - - if (taskinfo.TrialReadingCriterion.DigitPlaces != -1) - { - - emm = decimal.Round(decimal.Parse(emm ?? "0"), digitPlaces, MidpointRounding.AwayFromZero).ToString("F" + digitPlaces.ToString()); - lumen = decimal.Round(decimal.Parse(lumen ?? "0"), digitPlaces, MidpointRounding.AwayFromZero).ToString("F" + digitPlaces.ToString()); - emmSubtractionLumen = decimal.Round(decimal.Parse(emmSubtractionLumen ?? "0"), digitPlaces, MidpointRounding.AwayFromZero).ToString("F" + digitPlaces.ToString()); - } + // EMM tableAnswers.Add(new ReadingTableQuestionAnswer() { - Answer = emm, + Answer = getStringValue(item.FrameNumber), + QuestionId = questionInfo.Id, + TrialId = taskinfo.TrialId, + VisitTaskId = taskinfo.Id, + RowId = newRowId, + RowIndex = maxnum, + TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.FrameNumber).Select(x => x.Id).FirstOrDefault(), + }); + + // EMM + tableAnswers.Add(new ReadingTableQuestionAnswer() + { + Answer = getStringValue(item.Emm), QuestionId = questionInfo.Id, TrialId = taskinfo.TrialId, VisitTaskId = taskinfo.Id, @@ -579,7 +610,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableAnswers.Add(new ReadingTableQuestionAnswer() { - Answer = lumen, + Answer = getStringValue(item.Lumen), QuestionId = questionInfo.Id, TrialId = taskinfo.TrialId, VisitTaskId = taskinfo.Id, @@ -590,7 +621,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableAnswers.Add(new ReadingTableQuestionAnswer() { - Answer = emmSubtractionLumen, + Answer = getStringValue(item.EmmSubtractionLumen), QuestionId = questionInfo.Id, TrialId = taskinfo.TrialId, VisitTaskId = taskinfo.Id, diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs index f84acadca..a74ae2b33 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/OCTCalculateService.cs @@ -354,15 +354,16 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate measuredValueList.Add(new OCTFCTUploadData() { //PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()), - FirstData = getdecimalData(dataTable.Rows[i]["A"].ToString()), - SecondData = getdecimalData(dataTable.Rows[i]["B"].ToString()), - ThirdData = getdecimalData(dataTable.Rows[i]["C"].ToString()), - MacrophageInfiltrationMeasurement = getNone(dataTable.Rows[i]["D"].ToString()), - MacrophageInfiltrationAngle = getdecimalEmptyData(dataTable.Rows[i]["E"].ToString() ?? string.Empty), - MicrochannelMeasurement = getNone(dataTable.Rows[i]["F"].ToString()), - CholesterolCrystalMeasurement = getNone(dataTable.Rows[i]["G"].ToString()), - LumenAreaMeasurement = getdecimalData(dataTable.Rows[i]["H"].ToString()), - LipidAngle = getdecimalEmptyData(dataTable.Rows[i]["I"].ToString() ?? string.Empty), + FrameNumber = getdecimalEmptyData(dataTable.Rows[i]["A"].ToString()), + FirstData = getdecimalEmptyData(dataTable.Rows[i]["B"].ToString()), + SecondData = getdecimalEmptyData(dataTable.Rows[i]["C"].ToString()), + ThirdData = getdecimalEmptyData(dataTable.Rows[i]["D"].ToString()), + MacrophageInfiltrationMeasurement = getNone(dataTable.Rows[i]["E"].ToString()), + MacrophageInfiltrationAngle = getdecimalEmptyData(dataTable.Rows[i]["F"].ToString() ?? string.Empty), + MicrochannelMeasurement = getNone(dataTable.Rows[i]["G"].ToString()), + CholesterolCrystalMeasurement = getNone(dataTable.Rows[i]["H"].ToString()), + LumenAreaMeasurement = getdecimalEmptyData(dataTable.Rows[i]["I"].ToString()), + LipidAngle = getdecimalEmptyData(dataTable.Rows[i]["J"].ToString() ?? string.Empty), }); } catch (Exception) @@ -463,19 +464,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate // TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.PlaqueNumber).Select(x => x.Id).FirstOrDefault(), //}); - var avg = item.Avg.ToString(); - - - if (taskinfo.TrialReadingCriterion.DigitPlaces != -1) + // 帧数 + tableAnswers.Add(new ReadingTableQuestionAnswer() { - avg = decimal.Round(decimal.Parse(avg ?? "0"), digitPlaces, MidpointRounding.AwayFromZero).ToString("F" + digitPlaces.ToString()); - - } + Answer = item.FrameNumber.DecimalNullToString(digitPlaces), + QuestionId = questionInfo.Id, + TrialId = taskinfo.TrialId, + VisitTaskId = taskinfo.Id, + RowId = newRowId, + RowIndex = maxnum, + TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.FrameNumber).Select(x => x.Id).FirstOrDefault(), + }); + + // 第一次 tableAnswers.Add(new ReadingTableQuestionAnswer() { - Answer = item.FirstData.ToString(), + Answer = item.FirstData.DecimalNullToString(digitPlaces), QuestionId = questionInfo.Id, TrialId = taskinfo.TrialId, VisitTaskId = taskinfo.Id, @@ -486,7 +492,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableAnswers.Add(new ReadingTableQuestionAnswer() { - Answer = item.SecondData.ToString(), + Answer = item.SecondData.DecimalNullToString(digitPlaces), QuestionId = questionInfo.Id, TrialId = taskinfo.TrialId, VisitTaskId = taskinfo.Id, @@ -497,7 +503,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableAnswers.Add(new ReadingTableQuestionAnswer() { - Answer = item.ThirdData.ToString(), + Answer = item.ThirdData.DecimalNullToString(digitPlaces), QuestionId = questionInfo.Id, TrialId = taskinfo.TrialId, VisitTaskId = taskinfo.Id, @@ -508,7 +514,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate tableAnswers.Add(new ReadingTableQuestionAnswer() { - Answer = avg, + Answer = item.Avg.DecimalNullToString(digitPlaces), QuestionId = questionInfo.Id, TrialId = taskinfo.TrialId, VisitTaskId = taskinfo.Id, diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index b8cd392f9..b6539dfaa 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -2466,7 +2466,12 @@ namespace IRaCIS.Core.Domain.Share /// /// 斑块到血管开口的距离 /// - PlaqueToOstiumDistance=1031, + PlaqueToOstiumDistance = 1031, + + /// + /// 帧数 + /// + FrameNumber =1032, /// /// 第一次测量 diff --git a/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs b/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs index 8a835bc1f..7d632c633 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/ReadingCommon.cs @@ -131,6 +131,23 @@ namespace IRaCIS.Core.Infra.EFCore.Common } } + public static string DecimalNullToString (this decimal? value,int ? digitPlaces) + { + digitPlaces = digitPlaces ?? 0; + if (value==null) + { + return string.Empty; + } + if (digitPlaces == -1) + { + return value.Value.ToString(); + } + else + { + return decimal.Round(value.Value, digitPlaces.Value, MidpointRounding.AwayFromZero).ToString("F" + digitPlaces.ToString()); + } + } + public static Dictionary TaskNumDic = new Dictionary() { {ReadingCategory.Visit, 0 },