Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing Details

Test_IRC_Net8
he 2025-02-13 13:12:11 +08:00
commit c16153fa19
11 changed files with 18777 additions and 35 deletions

View File

@ -16646,6 +16646,16 @@
<param name="state"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.SetInstanceState(System.Guid,System.Guid,System.Guid,System.Int32)">
<summary>
1、设置为不读片2 设置为读片(取消 先前设置为不读片) 4 设置为删除(数据库记录软删除) 5 恢复为未删除
</summary>
<param name="subjectVisitId"></param>
<param name="seriesId"></param>
<param name="instanceId"></param>
<param name="state"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.UpdateModality(IRaCIS.Core.Application.Contracts.DTO.UpdateModalityCommand)">
<summary>
type 1 :study 2: series 3:非dicom QC修改检查部位和 拍片类型

View File

@ -79,6 +79,11 @@ namespace IRaCIS.Core.Application.Contracts.Dicom.DTO
public int InstanceNumber { get; set; }
public bool IsReading { get; set; }
public bool IsDeleted { get; set; }
public Guid? StudyId { get; set; }
public List<int?> KeyFramesList { get; set; } = new List<int?> { };

View File

@ -23,9 +23,9 @@ namespace IRaCIS.Core.Application.Services
ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
.ProjectTo<DicomInstanceDTO>(_mapper.ConfigurationProvider).ToListAsync();
var imageResizePath = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t => t.DicomSerie.ImageResizePath).FirstOrDefaultAsync();
var seriesInfo = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t => new { t.DicomSerie.ImageResizePath,t.DicomSerie.IsDeleted,t.DicomSerie.IsReading }).FirstOrDefaultAsync();
return ResponseOutput.Ok(list, new { ImageResizePath = imageResizePath });
return ResponseOutput.Ok(list, seriesInfo);
}

View File

@ -29,7 +29,7 @@ namespace IRaCIS.Core.Application.Services
var instanceList = await _instanceRepository.Where(s => s.StudyId == studyId).OrderBy(t => t.SeriesId).ThenBy(t => t.InstanceNumber)
.ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
.Select(t => new { t.SeriesId, t.Id, t.Path, t.NumberOfFrames, t.InstanceNumber, t.HtmlPath }).ToListAsync();//.GroupBy(u => u.SeriesId);
.Select(t => new { t.SeriesId, t.Id, t.Path, t.NumberOfFrames, t.InstanceNumber, t.HtmlPath ,t.IsReading,t.IsDeleted}).ToListAsync();//.GroupBy(u => u.SeriesId);
foreach (var series in seriesList)
{
@ -42,6 +42,8 @@ namespace IRaCIS.Core.Application.Services
HtmlPath = k.HtmlPath,
Path = k.Path,
InstanceNumber = k.InstanceNumber,
IsReading=k.IsReading,
IsDeleted=k.IsDeleted
}).ToList();
}

View File

@ -84,9 +84,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<DicomInstance, DicomInstanceDTO>()
.ForMember(o => o.IsDeleted, t => t.MapFrom(u => u.DicomSerie.IsDeleted))
.ForMember(o => o.SliceThickness, t => t.MapFrom(u => u.DicomSerie.SliceThickness))
.ForMember(o => o.IsReading, t => t.MapFrom(u => u.DicomSerie.IsReading));
.ForMember(o => o.SliceThickness, t => t.MapFrom(u => u.DicomSerie.SliceThickness));
CreateMap<DicomStudy, DicomStudyDTO>();
CreateMap<DicomSeries, DicomSeriesDTO>();
CreateMap<SCPSeries, DicomSeriesDTO>();

View File

@ -659,6 +659,74 @@ namespace IRaCIS.Core.Application.Image.QA
return ResponseOutput.Ok(await _dicomStudyRepository.SaveChangesAsync());
}
/// <summary>
/// 1、设置为不读片2 设置为读片(取消 先前设置为不读片) 4 设置为删除(数据库记录软删除) 5 恢复为未删除
/// </summary>
/// <param name="subjectVisitId"></param>
/// <param name="seriesId"></param>
/// <param name="instanceId"></param>
/// <param name="state"></param>
/// <returns></returns>
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{seriesId:guid}/{instanceId:guid}/{state:int}")]
[TrialGlobalLimit("AfterStopCannNotOpt")]
public async Task<IResponseOutput> SetInstanceState(Guid subjectVisitId, Guid seriesId, Guid instanceId, int state)
{
await VerifyIsCanQCAsync(null, subjectVisitId);
var instance = (await _dicomInstanceRepository.Where(t => t.Id == instanceId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
if (state == 1)
{
instance.IsReading = false;
}
else if (state == 2)
{
instance.IsReading = true;
}
else if (state == 4)
{
instance.IsDeleted = true;
var series = (await _dicomSeriesRepository.Where(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
series.InstanceCount = series.InstanceCount - 1;
var study = (await _dicomStudyRepository.Where(t => t.Id == series.StudyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
study.InstanceCount = study.InstanceCount - 1;
////删除到最后一个instance
//if (series.InstanceCount == 0)
//{
// series.IsDeleted = true;
//}
}
else if (state == 5)
{
instance.IsDeleted = false;
var series = (await _dicomSeriesRepository.Where(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
series.InstanceCount = series.InstanceCount + 1;
var study = (await _dicomStudyRepository.Where(t => t.Id == series.StudyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
study.InstanceCount = study.InstanceCount + 1;
}
return ResponseOutput.Ok(await _dicomStudyRepository.SaveChangesAsync());
}
/// <summary>
///type 1 :study 2: series 3:非dicom QC修改检查部位和 拍片类型
/// </summary>

View File

@ -237,7 +237,8 @@ namespace IRaCIS.Core.Application.Services
var studyIds = studyList.Select(t => t.StudyId).ToList();
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath }).ToListAsync();
.WhereIf(isReading == 1, s => s.IsReading)
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath,t.IsReading,t.IsDeleted }).ToListAsync();
foreach (var t in studyList)
{
@ -257,6 +258,8 @@ namespace IRaCIS.Core.Application.Services
HtmlPath = k.HtmlPath,
Path = k.Path,
InstanceNumber = k.InstanceNumber,
IsReading=k.IsReading,
IsDeleted=k.IsDeleted,
}).ToList();
}
);
@ -497,8 +500,8 @@ namespace IRaCIS.Core.Application.Services
}).ToListAsync();
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId) && t.IsReading)
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath,t.IsReading }).ToListAsync();
List<DicomSeriesDTO> seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
.WhereIf(isManualGenerate == false, t => t.IsReading)

View File

@ -2,7 +2,7 @@
[Comment("归档 - Instance表")]
[Table("DicomInstance")]
public class DicomInstance : BaseFullAuditEntity, IEntitySeqId
public class DicomInstance : BaseFullDeleteAuditEntity, IEntitySeqId
{
#region 导航属性
[JsonIgnore]
@ -75,4 +75,6 @@ public class DicomInstance : BaseFullAuditEntity, IEntitySeqId
public string WindowWidth { get; set; } = null!;
public bool IsReading { get; set; } = true;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,61 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class AddInstanceIsReading : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<Guid>(
name: "DeleteUserId",
table: "DicomInstance",
type: "uniqueidentifier",
nullable: true);
migrationBuilder.AddColumn<DateTime>(
name: "DeletedTime",
table: "DicomInstance",
type: "datetime2",
nullable: true);
migrationBuilder.AddColumn<bool>(
name: "IsDeleted",
table: "DicomInstance",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<bool>(
name: "IsReading",
table: "DicomInstance",
type: "bit",
nullable: false,
defaultValue: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "DeleteUserId",
table: "DicomInstance");
migrationBuilder.DropColumn(
name: "DeletedTime",
table: "DicomInstance");
migrationBuilder.DropColumn(
name: "IsDeleted",
table: "DicomInstance");
migrationBuilder.DropColumn(
name: "IsReading",
table: "DicomInstance");
}
}
}

View File

@ -813,6 +813,12 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<Guid>("CreateUserId")
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("DeleteUserId")
.HasColumnType("uniqueidentifier");
b.Property<DateTime?>("DeletedTime")
.HasColumnType("datetime2");
b.Property<long?>("FileSize")
.HasColumnType("bigint");
@ -846,6 +852,12 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<DateTime?>("InstanceTime")
.HasColumnType("datetime2");
b.Property<bool>("IsDeleted")
.HasColumnType("bit");
b.Property<bool>("IsReading")
.HasColumnType("bit");
b.Property<int>("NumberOfFrames")
.HasColumnType("int");