修改比例尺

Test_IRC_Net8
he 2025-10-23 16:58:03 +08:00
parent 102cf5f6dc
commit 308f5140a1
3 changed files with 107 additions and 1 deletions

View File

@ -2479,6 +2479,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string OrderMarkName { get; set; }
/// <summary>
/// 比例
/// </summary>
public decimal? Proportion { get; set; }
public Guid? MarkId { get; set; }
public Guid? NoneDicomFileId { get; set; }

View File

@ -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();
}
/// <summary>
/// 修改比例修改答案
/// </summary>
/// <param name="id"></param>
/// <param name="proportion"></param>
/// <returns></returns>
private async Task<IResponseOutput> 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<string> ImageToolAttributeList = new List<string>()
{
"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();
}
/// <summary>
/// 删除绑定关系
/// </summary>
@ -197,7 +290,13 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task<IResponseOutput> 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);
}

View File

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