功能修改

Uat_IRC_Net8
he 2026-05-07 14:39:50 +08:00
parent f6c9490124
commit f56dcb0cce
11 changed files with 22567 additions and 18 deletions

View File

@ -5932,6 +5932,82 @@
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.ReadingImport">
<summary>
阅片导入
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.GetReadingCalculationData(IRaCIS.Core.Application.Service.Reading.Dto.GetReadingCalculationDataInDto)">
<summary>
获取阅片的计算数据
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.GetDeleteLesionStatrIndex(IRaCIS.Core.Application.Service.Reading.Dto.DeleteReadingRowAnswerInDto)">
<summary>
删除病灶获取起始病灶序号
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.GetReadingReportEvaluation(IRaCIS.Core.Application.Service.Reading.Dto.GetReadingReportEvaluationInDto)">
<summary>
获取阅片报告
</summary>
<param name="indto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.AddTaskLesionAnswerFromLastTask(IRaCIS.Core.Application.ViewModel.AddTaskLesionAnswerFromLastTaskInDto)">
<summary>
将上一次的访视病灶添加到这一次
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.TestCalculate(System.Guid,IRaCIS.Core.Domain.Share.QuestionType)">
<summary>
测试计算
</summary>
<param name="visitTaskId"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.CalculateTask(IRaCIS.Core.Application.Service.Reading.Dto.CalculateTaskInDto)">
<summary>
计算任务
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.ReadingCalculate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto,System.Collections.Generic.List{IRaCIS.Core.Domain.Share.QuestionType})">
<summary>
自动计算
</summary>
<param name="inDto"></param>
<param name="calculateType"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.GetFatFractionAvg(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
获取脂肪分数平均值
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.GetFattyLiverGrading(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
获取脂肪肝分级
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFAdvanceCalculateService.CalculateAvg(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
计算平均值
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.MRIPDFFCalculateService.ReadingImport">
<summary>
阅片导入
@ -15390,11 +15466,11 @@
<param name="addOrEditSegmentation"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.SegmentationService.SaveSegmentationVersionAsync(System.Guid)">
<member name="M:IRaCIS.Core.Application.Service.SegmentationService.SaveSegmentationVersionAsync(IRaCIS.Core.Application.ViewModel.SaveSegmentationVersionAsyncInDto)">
<summary>
添加新版本
</summary>
<param name="segmentationId"></param>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.SegmentationService.GetSegmentationVersionList(IRaCIS.Core.Application.ViewModel.SegmentationVersionQuery)">

View File

@ -96,6 +96,11 @@ public class SegmentationVersionView
public string CreateUserName { get; set; }
}
public class SaveSegmentationVersionAsyncInDto
{
public Guid SegmentationId { get; set; }
}
public class SegmentationVersionQuery : PageInput
{
public Guid SegmentationId { get; set; }

View File

@ -4,15 +4,17 @@
// 生成时间 2026-03-10 06:17:28Z
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Domain.Models;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Application.MassTransit.Command;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Infrastructure.Extention;
using System.Threading.Tasks;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infra.EFCore;
using Microsoft.Extensions.Logging;
using IRaCIS.Core.Infrastructure.Extention;
using MassTransit;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
namespace IRaCIS.Core.Application.Service;
@ -72,12 +74,6 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
[HttpPost]
public async Task<IResponseOutput> AddOrUpdateSegmentation(SegmentationAddOrEdit addOrEditSegmentation)
{
if (addOrEditSegmentation.Id != null)
{
await SaveSegmentationVersionAsync(addOrEditSegmentation.Id.Value);
}
var entity = await _segmentationRepository.InsertOrUpdateAsync(addOrEditSegmentation, true);
return ResponseOutput.Ok(entity.Id.ToString());
@ -86,11 +82,13 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
/// <summary>
/// 添加新版本
/// </summary>
/// <param name="segmentationId"></param>
/// <param name="inDto"></param>
/// <returns></returns>
private async Task SaveSegmentationVersionAsync(Guid segmentationId)
[HttpPost]
public async Task SaveSegmentationVersionAsync(SaveSegmentationVersionAsyncInDto inDto)
{
var data = await _segmentationRepository.FirstOrDefaultNoTrackingAsync(x => x.Id == segmentationId);
var data = await _segmentationRepository.FirstOrDefaultNoTrackingAsync(x => x.Id == inDto.SegmentationId);
var segmentList = await _segmentRepository.Where(x => x.SegmentationId == inDto.SegmentationId).OrderBy(x=>x.SegmentNumber).ProjectTo<SegmentVersionData>(_mapper.ConfigurationProvider).ToListAsync();
if (data.SEGUrl != string.Empty)
{
@ -102,6 +100,7 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
.FirstOrDefaultAsync();
var newVersion = maxVersion + 1;
var versionEntity = new SegmentationVersion
{
SegmentationId = data.Id,
@ -109,6 +108,7 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
SegmentationJson = data.SegmentationJson,
SEGUrl = data.SEGUrl,
FileSize = data.FileSize,
SegmentList= segmentList,
};
await _segmentationVersionRepository.AddAsync(versionEntity);
@ -146,14 +146,22 @@ public class SegmentationService(IRepository<Segmentation> _segmentationReposito
{
var version = await _segmentationVersionRepository.Where(x => x.Id == inDto.VersionId && x.SegmentationId == inDto.SegmentationId).FirstNotNullAsync();
var segmentation = await _segmentationRepository.Where(x => x.Id == inDto.SegmentationId).FirstNotNullAsync();
await _segmentationRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.SegmentationId, t => new Segmentation
{
SegmentationJson = version.SegmentationJson,
SEGUrl = version.SEGUrl,
FileSize = version.FileSize,
});
var segmentList = _mapper.Map<List<Segment>>(version.SegmentList);
await _segmentRepository.BatchDeleteNoTrackingAsync(x => x.SegmentationId == inDto.SegmentationId);
await _segmentRepository.AddRangeAsync(segmentList);
await _segmentationRepository.SaveChangesAsync();
await DeleteBindingsAndAnswersAsync(inDto.SegmentationId, null);
return ResponseOutput.Ok();
}

View File

@ -17,6 +17,9 @@ namespace IRaCIS.Core.Application.Service
// 在此处拷贝automapper 映射
CreateMap<Segment, SegmentVersionData>();
CreateMap<SegmentVersionData, Segment>();
CreateMap<Segment, SegmentView>();
CreateMap<Segment, SegmentAddOrEdit>().ReverseMap();

View File

@ -476,7 +476,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
QuestionMark.FourthMeasurement,
};
var answers = item.TableQuestionList.Where(x => questionMarks.Contains(x.QuestionMark)).Select(x=>x.Answer).ToList();
if (answers.Count() == 3 && !answers.Any(x => x.IsNullOrEmpty()))
if (answers.Count() == 4 && !answers.Any(x => x.IsNullOrEmpty()))
{
var avgAnswernum= answers.Select(x=>x.IsNullOrEmptyReturn0()).Average(x=>x);
avgAnswer = decimal.Round(avgAnswernum, inDto.DigitPlaces, MidpointRounding.AwayFromZero).ToString("F" + inDto.DigitPlaces.ToString());

View File

@ -11,7 +11,7 @@ namespace IRaCIS.Core.Domain.Models
[Comment("分割")]
[Table("Segment")]
public class Segment : BaseFullDeleteAuditEntity
public class Segment : BaseFullDeleteAuditEntity, ISegment
{
#region 导航属性
[JsonIgnore]
@ -114,4 +114,99 @@ namespace IRaCIS.Core.Domain.Models
}
/// <summary>
/// 继承这个接口 因为版本里面需要复制这个表的数据
/// </summary>
public interface ISegment
{
/// <summary>
/// 分割Id
/// </summary>
Guid SegmentationId { get; set; }
/// <summary>
/// 任务Id
/// </summary>
Guid VisitTaskId { get; set; }
/// <summary>
/// 分割的序号
/// </summary>
public int SegmentNumber { get; set; }
/// <summary>
/// 分割的Json
/// </summary>
string SegmentJson { get; set; }
/// <summary>
/// SegmentName
/// </summary>
string SegmentName { get; set; }
/// <summary>
/// 颜色
/// </summary>
string ColorRgb { get; set; }
/// <summary>
/// 均值
/// </summary>
decimal? AvgValue { get; set; }
/// <summary>
/// 最大值
/// </summary>
decimal? MaxValue { get; set; }
/// <summary>
/// 最小值
/// </summary>
decimal? MinValue { get; set; }
/// <summary>
/// 方差
/// </summary>
decimal? Variance { get; set; }
/// <summary>
/// 中位数
/// </summary>
decimal? Median { get; set; }
/// <summary>
/// 体积
/// </summary>
decimal? Volume { get; set; }
/// <summary>
/// 长径
/// </summary>
decimal? MajorAxis { get; set; }
/// <summary>
/// 短径
/// </summary>
decimal? ShortAxis { get; set; }
/// <summary>
/// Peak
/// </summary>
decimal? Peak { get; set; }
/// <summary>
/// TLG
/// </summary>
decimal? TLG { get; set; }
/// <summary>
/// MTV
/// </summary>
decimal? MTV { get; set; }
/// <summary>
/// 是否锁定
/// </summary>
bool IsLock { get; set; }
}
}

View File

@ -39,6 +39,106 @@ public class SegmentationVersion : BaseAddAuditEntity
/// </summary>
public long FileSize { get; set; } = 0;
/// <summary>
/// SgenmentList
/// </summary>
[MaxLength]
public List<SegmentVersionData> SegmentList { get; set; } = new List<SegmentVersionData>();
}
public class SegmentVersionData: ISegment
{
/// <summary>
/// 分割Id
/// </summary>
public Guid SegmentationId { get; set; }
/// <summary>
/// 任务Id
/// </summary>
public Guid VisitTaskId { get; set; }
/// <summary>
/// 分割的序号
/// </summary>
public int SegmentNumber { get; set; }
/// <summary>
/// 分割的Json
/// </summary>
[MaxLength]
public string SegmentJson { get; set; } = string.Empty;
/// <summary>
/// SegmentName
/// </summary>
public string SegmentName { get; set; } = string.Empty;
/// <summary>
/// 颜色
/// </summary>
public string ColorRgb { get; set; } = string.Empty;
/// <summary>
/// 均值
/// </summary>
public decimal? AvgValue { get; set; }
/// <summary>
/// 最大值
/// </summary>
public decimal? MaxValue { get; set; }
/// <summary>
/// 最小值
/// </summary>
public decimal? MinValue { get; set; }
/// <summary>
/// 方差
/// </summary>
public decimal? Variance { get; set; }
/// <summary>
/// 中位数
/// </summary>
public decimal? Median { get; set; }
/// <summary>
/// 体积
/// </summary>
public decimal? Volume { get; set; }
/// <summary>
/// 长径
/// </summary>
public decimal? MajorAxis { get; set; }
/// <summary>
/// 短径
/// </summary>
public decimal? ShortAxis { get; set; }
/// <summary>
/// Peak
/// </summary>
public decimal? Peak { get; set; }
/// <summary>
/// TLG
/// </summary>
public decimal? TLG { get; set; }
/// <summary>
/// MTV
/// </summary>
public decimal? MTV { get; set; }
/// <summary>
/// 是否锁定
/// </summary>
public bool IsLock { get; set; } = false;
}

View File

@ -111,6 +111,14 @@ public class IRaCISDBContext : DbContext
);
});
modelBuilder.Entity<SegmentationVersion>(entity =>
{
entity.Property(e => e.SegmentList).HasConversion(
v => v == null ? null : JsonConvert.SerializeObject(v),
v => string.IsNullOrEmpty(v) ? new List<SegmentVersionData>() {} : JsonConvert.DeserializeObject<List<SegmentVersionData>>(v)
);
});
#region pgsql codefirst 配置 暂时屏蔽
//if (base.Database.IsNpgsql())
//{

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class segmentList : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "SegmentList",
table: "SegmentationVersion",
type: "nvarchar(max)",
nullable: false,
defaultValue: "");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "SegmentList",
table: "SegmentationVersion");
}
}
}

View File

@ -9571,6 +9571,10 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("SegmentList")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<Guid>("SegmentationId")
.HasColumnType("uniqueidentifier");