From 308f5140a16f48d8704aa53b551ce2dd287d15c6 Mon Sep 17 00:00:00 2001
From: he <109787524@qq.com>
Date: Thu, 23 Oct 2025 16:58:03 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=AF=94=E4=BE=8B=E5=B0=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Reading/Dto/ReadingImageTaskViewModel.cs | 5 +
.../ReadingNoDicomTaskService.cs | 99 +++++++++++++++++++
.../ReadingNoneDicomMarkBinding.cs | 4 +-
3 files changed, 107 insertions(+), 1 deletion(-)
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
index 3f1331bd4..590a4b017 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingImageTaskViewModel.cs
@@ -2479,6 +2479,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string OrderMarkName { get; set; }
+ ///
+ /// 比例
+ ///
+ public decimal? Proportion { get; set; }
+
public Guid? MarkId { get; set; }
public Guid? NoneDicomFileId { get; set; }
diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingNoDicomTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingNoDicomTaskService.cs
index 857f708b9..1e242facd 100644
--- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingNoDicomTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingNoDicomTaskService.cs
@@ -4,6 +4,7 @@ using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
+using IRaCIS.Core.Infra.EFCore.Common;
using MassTransit;
using Microsoft.AspNetCore.Mvc;
using Panda.DynamicWebApi.Attributes;
@@ -159,6 +160,98 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.Ok();
}
+
+ ///
+ /// 修改比例修改答案
+ ///
+ ///
+ ///
+ ///
+ private async Task ChangePlottingScale(Guid? id, decimal proportion)
+ {
+ var markInfo = await _readingNoneDicomMarkRepository.Where(x => x.Id == id).Select(x => new
+ {
+ x.NoneDicomFileId,
+ x.VisitTaskId
+ }).FirstNotNullAsync();
+
+ var visitTask = await _visitTaskRepository.Where(x => x.Id == markInfo.VisitTaskId).Include(x=>x.TrialReadingCriterion).FirstNotNullAsync();
+
+
+ var digitPlaces = visitTask.TrialReadingCriterion.DigitPlaces??0;
+
+ if (proportion == -1)
+ {
+ await _readingNoneDicomMarkBindingRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == markInfo.VisitTaskId && x.ReadingNoneDicomMark.NoneDicomFileId == markInfo.NoneDicomFileId);
+ }
+ else
+ {
+ var bindingList= await _readingNoneDicomMarkBindingRepository.Where(x => x.VisitTaskId == markInfo.VisitTaskId && x.ReadingNoneDicomMark.NoneDicomFileId == markInfo.NoneDicomFileId)
+ .ToListAsync();
+
+ List ImageToolAttributeList = new List()
+ {
+ "length",
+ "perimeter",
+ "area"
+ };
+
+ var questionAnswerList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == markInfo.VisitTaskId &&
+ bindingList.Select(b => b.QuestionId).Contains(x.ReadingQuestionTrialId)
+ && ImageToolAttributeList.Contains(x.ReadingQuestionTrial.ImageToolAttribute)).Include(x=>x.ReadingQuestionTrial)
+ .ToListAsync();
+
+ foreach (var item in questionAnswerList)
+ {
+ var answerValue = item.Answer.IsNullOrEmptyReturn0();
+ switch (item.ReadingQuestionTrial.ImageToolAttribute)
+ {
+ case "length":
+ case "perimeter":
+ answerValue = answerValue * proportion;
+ break;
+ case "area":
+ answerValue = answerValue * proportion * proportion;
+ break;
+ }
+
+
+ await _readingTaskQuestionAnswerRepository.UpdatePartialFromQueryAsync(item.Id, x => new ReadingTaskQuestionAnswer()
+ {
+ Answer= decimal.Round(answerValue, digitPlaces).ToString("F" + digitPlaces.ToString())
+ });
+ }
+
+ var tableQuestionAnswerList = await _readingTableQuestionAnswerRepository.Where(x => x.VisitTaskId == markInfo.VisitTaskId &&
+ bindingList.Select(b => b.TableQuestionId).Contains(x.TableQuestionId)
+ && ImageToolAttributeList.Contains(x.ReadingTableQuestionTrial.ImageToolAttribute)).Include(x => x.ReadingTableQuestionTrial)
+ .ToListAsync();
+
+ foreach (var item in tableQuestionAnswerList)
+ {
+ var answerValue = item.Answer.IsNullOrEmptyReturn0();
+ switch (item.ReadingTableQuestionTrial.ImageToolAttribute)
+ {
+ case "length":
+ case "perimeter":
+ answerValue = answerValue * proportion;
+ break;
+ case "area":
+ answerValue = answerValue * proportion * proportion;
+ break;
+ }
+
+
+ await _readingTableQuestionAnswerRepository.UpdatePartialFromQueryAsync(item.Id, x => new ReadingTableQuestionAnswer()
+ {
+ Answer = decimal.Round(answerValue, digitPlaces).ToString("F" + digitPlaces.ToString())
+ });
+ }
+ }
+
+ return ResponseOutput.Ok();
+ }
+
///
/// 删除绑定关系
///
@@ -197,7 +290,13 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task AddNoneDicomMark(AddNoneDicomMarkInDto inDto)
{
+
var entity = await _readingNoneDicomMarkRepository.InsertOrUpdateAsync(inDto, true);
+
+ if (inDto.Proportion != null)
+ {
+ await this.ChangePlottingScale(entity.Id, inDto.Proportion.Value);
+ }
return ResponseOutput.Ok(entity.Id);
}
diff --git a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingNoneDicomMarkBinding.cs b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingNoneDicomMarkBinding.cs
index 425aea6be..8ce8bd255 100644
--- a/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingNoneDicomMarkBinding.cs
+++ b/IRaCIS.Core.Domain/Reading/ReadingFormAnswer/ReadingNoneDicomMarkBinding.cs
@@ -1,3 +1,5 @@
+using Org.BouncyCastle.Crypto.Digests;
+
namespace IRaCIS.Core.Domain.Models;
[Comment("项目阅片 - 非Dicom标记绑定")]
@@ -7,7 +9,7 @@ public class ReadingNoneDicomMarkBinding : BaseAddAuditEntity
[JsonIgnore]
[ForeignKey("NoneDicomMarkId")]
- public NoneDicomStudy NoneDicomStudy { get; set; }
+ public ReadingNoneDicomMark ReadingNoneDicomMark { get; set; }
public Guid VisitTaskId { get; set; }