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

IRC_NewDev
he 2024-09-26 13:27:48 +08:00
commit e6628e952f
8 changed files with 155 additions and 102 deletions

View File

@ -649,14 +649,35 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
[HttpPost]
public async Task<List<TaskNoneDicomStudyDTO>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery)
{
var subjectCode = string.Empty;
var subjectId = inQuery.SubjectId;
var doctorUserId = _userInfo.Id;
if (inQuery.VisitTaskId != null)
{
//考虑到一致性分析,必须要这个编号进行过滤
//医学审核查看下载按钮,这个时候需要知道医生
var taskInfo = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => new {
SubjectCode = t.IsAnalysisCreate ? t.BlindSubjectCode : t.Subject.Code,
SubjectId = t.SubjectId,
t.DoctorUserId,
t.IsAnalysisCreate
}).FirstNotNullAsync();
subjectId = taskInfo.SubjectId;
subjectCode = taskInfo.SubjectCode;
doctorUserId = (Guid)taskInfo.DoctorUserId!;
}
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
.Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync();
var query = from u in _visitTaskRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId
&& t.SourceSubjectVisitId != null && t.DoctorUserId == _userInfo.Id && t.TaskState == TaskState.Effect)
var query = from u in _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId
&& t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect)
//满足 有序或者随机只看到当前任务的dicom 非dicom检查
.WhereIf(info.IsReadingTaskViewInOrder != ReadingOrder.SubjectRandom && inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)
join ns in _noneDicomStudyReposiotry.Where(t => t.SubjectId == inQuery.SubjectId).WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|"))
join ns in _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId).WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|"))
on u.SourceSubjectVisitId equals ns.SubjectVisitId
select new TaskNoneDicomStudyDTO()
@ -686,7 +707,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
};
var list = await query.Where(t => t.SubjectCode == inQuery.SubjectCode).SortToListAsync(inQuery);
var list = await query.Where(t => t.SubjectCode == subjectCode).SortToListAsync(inQuery);
var noneDicomStudyTaskIdList = list.Select(t => t.VisitTaskId).ToList();

View File

@ -15,6 +15,8 @@ namespace IRaCIS.Core.Application.Contracts
public Guid CreateUserId { get; set; }
public Guid NoneDicomStudyId { get; set; }
public long? FileSize { get; set; }
public string FullFilePath => Path;
public string FileType { get; set; }

View File

@ -9,8 +9,6 @@ public class TaskStudy : BaseFullDeleteAuditEntity, IEntitySeqId
[ForeignKey("VisitTaskId")]
public VisitTask VisitTask { get; set; }
[JsonIgnore]
public List<StudyMonitor> DicomStudyMonitorList { get; set; } = new List<StudyMonitor>();
[JsonIgnore]
public List<TaskInstance> InstanceList { get; set; }

View File

@ -13,7 +13,7 @@ public class IRaCISDBContextFactory : IDesignTimeDbContextFactory<IRaCISDBContex
public IRaCISDBContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<IRaCISDBContext>();
optionsBuilder.UseSqlServer("Server=106.14.89.110,1434;Database=Test_IRC_KEY;User ID=sa;Password=xc@123456;TrustServerCertificate=true", contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
optionsBuilder.UseSqlServer("Server=106.14.89.110,1433;Database=Test_IRC_KEY;User ID=sa;Password=xc@123456;TrustServerCertificate=true", contextOptionsBuilder => contextOptionsBuilder.EnableRetryOnFailure());
//迁移的时候,不生成外键
optionsBuilder.ReplaceService<IMigrationsSqlGenerator, NoForeignKeyMigrationsSqlGenerator>();
return new IRaCISDBContext(optionsBuilder.Options);

View File

@ -1,81 +1,97 @@
//using IRaCIS.Core.Domain.Models;
//using Microsoft.EntityFrameworkCore.Metadata.Builders;
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
//namespace IRaCIS.Core.Infra.EFCore.EntityConfigration;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration;
///// <summary>
///// 医学影像 数据量大,主键是 SeqId ,Id 是自己算的也可以作为Id但是不是有序的数据量大会导致性能很差所以是逻辑主键
///// </summary>
/// <summary>
/// 医学影像 数据量大,主键是 SeqId ,Id 是自己算的也可以作为Id但是不是有序的数据量大会导致性能很差所以是逻辑主键
/// </summary>
//public class DicomStudyConfigration : IEntityTypeConfiguration<DicomStudy>
//{
// public void Configure(EntityTypeBuilder<DicomStudy> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
public class DicomStudyConfigration : IEntityTypeConfiguration<DicomStudy>
{
public void Configure(EntityTypeBuilder<DicomStudy> builder)
{
builder.HasKey(e => e.SeqId);
//public class DicomSeriesConfigration : IEntityTypeConfiguration<DicomSeries>
//{
// public void Configure(EntityTypeBuilder<DicomSeries> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
builder.HasMany(s => s.SeriesList).WithOne(se => se.DicomStudy).HasForeignKey(se => se.StudyId).HasPrincipalKey(st=>st.Id);
//public class DicomInstanceConfigration : IEntityTypeConfiguration<DicomInstance>
//{
// public void Configure(EntityTypeBuilder<DicomInstance> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
builder.HasMany(s => s.DicomStudyMonitorList).WithOne(sm => sm.DicomStudy).HasForeignKey(sm => sm.StudyId).HasPrincipalKey(se => se.Id);
}
}
//public class TaskStudyConfigration : IEntityTypeConfiguration<TaskStudy>
//{
// public void Configure(EntityTypeBuilder<TaskStudy> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
public class DicomSeriesConfigration : IEntityTypeConfiguration<DicomSeries>
{
public void Configure(EntityTypeBuilder<DicomSeries> builder)
{
builder.HasKey(e => e.SeqId);
//public class TaskSeriesConfigration : IEntityTypeConfiguration<TaskSeries>
//{
// public void Configure(EntityTypeBuilder<TaskSeries> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
builder.HasMany(s => s.DicomInstanceList).WithOne(di => di.DicomSerie).HasForeignKey(t => t.SeriesId).HasPrincipalKey(se => se.Id);
//public class TaskInstanceConfigration : IEntityTypeConfiguration<TaskInstance>
//{
// public void Configure(EntityTypeBuilder<TaskInstance> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
}
}
public class DicomInstanceConfigration : IEntityTypeConfiguration<DicomInstance>
{
public void Configure(EntityTypeBuilder<DicomInstance> builder)
{
builder.HasKey(e => e.SeqId);
}
}
public class TaskStudyConfigration : IEntityTypeConfiguration<TaskStudy>
{
public void Configure(EntityTypeBuilder<TaskStudy> builder)
{
builder.HasKey(e => e.SeqId);
builder.HasMany(s => s.SeriesList).WithOne(se => se.TaskStudy).HasForeignKey(se => se.StudyId).HasPrincipalKey(st => st.Id);
}
}
public class TaskSeriesConfigration : IEntityTypeConfiguration<TaskSeries>
{
public void Configure(EntityTypeBuilder<TaskSeries> builder)
{
builder.HasKey(e => e.SeqId);
builder.HasMany(s => s.InstanceList).WithOne(di => di.TaskSeries).HasForeignKey(t => t.SeriesId).HasPrincipalKey(se => se.Id);
}
}
public class TaskInstanceConfigration : IEntityTypeConfiguration<TaskInstance>
{
public void Configure(EntityTypeBuilder<TaskInstance> builder)
{
builder.HasKey(e => e.SeqId);
}
}
//public class SCPStudyConfigration : IEntityTypeConfiguration<SCPStudy>
//{
// public void Configure(EntityTypeBuilder<SCPStudy> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
public class SCPStudyConfigration : IEntityTypeConfiguration<SCPStudy>
{
public void Configure(EntityTypeBuilder<SCPStudy> builder)
{
builder.HasKey(e => e.SeqId);
//public class SCPSeriesConfigration : IEntityTypeConfiguration<SCPSeries>
//{
// public void Configure(EntityTypeBuilder<SCPSeries> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
builder.HasMany(s => s.SeriesList).WithOne(se => se.SCPStudy).HasForeignKey(se => se.StudyId).HasPrincipalKey(st => st.Id);
//public class SCPInstanceConfigration : IEntityTypeConfiguration<SCPInstance>
//{
// public void Configure(EntityTypeBuilder<SCPInstance> builder)
// {
// builder.HasKey(e => e.SeqId);
// }
//}
}
}
public class SCPSeriesConfigration : IEntityTypeConfiguration<SCPSeries>
{
public void Configure(EntityTypeBuilder<SCPSeries> builder)
{
builder.HasKey(e => e.SeqId);
builder.HasMany(s => s.SCPInstanceList).WithOne(di => di.SCPSeries).HasForeignKey(t => t.SeriesId).HasPrincipalKey(se => se.Id);
}
}
public class SCPInstanceConfigration : IEntityTypeConfiguration<SCPInstance>
{
public void Configure(EntityTypeBuilder<SCPInstance> builder)
{
builder.HasKey(e => e.SeqId);
}
}

View File

@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
[DbContext(typeof(IRaCISDBContext))]
[Migration("20240926022902_CodeFirst_Init")]
[Migration("20240926034717_CodeFirst_Init")]
partial class CodeFirst_Init
{
/// <inheritdoc />
@ -13688,6 +13688,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.DicomSeries", "DicomSerie")
.WithMany("DicomInstanceList")
.HasForeignKey("SeriesId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -13715,6 +13716,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy")
.WithMany("SeriesList")
.HasForeignKey("StudyId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -15266,6 +15268,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.SCPSeries", "SCPSeries")
.WithMany("SCPInstanceList")
.HasForeignKey("SeriesId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -15326,6 +15329,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.SCPStudy", "SCPStudy")
.WithMany("SeriesList")
.HasForeignKey("StudyId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -15422,20 +15426,21 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy")
.WithMany("DicomStudyMonitorList")
.HasForeignKey("StudyId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy")
.WithMany()
.HasForeignKey("StudyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy")
.WithMany("DicomStudyMonitorList")
.HasForeignKey("StudyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.TaskStudy", "TaskStudy")
.WithMany("DicomStudyMonitorList")
.WithMany()
.HasForeignKey("StudyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -16062,6 +16067,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.TaskSeries", "TaskSeries")
.WithMany("InstanceList")
.HasForeignKey("SeriesId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -16147,6 +16153,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.TaskStudy", "TaskStudy")
.WithMany("SeriesList")
.HasForeignKey("StudyId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -17552,8 +17559,6 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskStudy", b =>
{
b.Navigation("DicomStudyMonitorList");
b.Navigation("InstanceList");
b.Navigation("SeriesList");

View File

@ -537,6 +537,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
constraints: table =>
{
table.PrimaryKey("PK_DicomSeries", x => x.SeqId);
table.UniqueConstraint("AK_DicomSeries_Id", x => x.Id);
},
comment: "归档 - 序列表");
@ -586,6 +587,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
constraints: table =>
{
table.PrimaryKey("PK_DicomStudy", x => x.SeqId);
table.UniqueConstraint("AK_DicomStudy_Id", x => x.Id);
});
migrationBuilder.CreateTable(
@ -5796,6 +5798,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
constraints: table =>
{
table.PrimaryKey("PK_SCPSeries", x => x.SeqId);
table.UniqueConstraint("AK_SCPSeries_Id", x => x.Id);
table.ForeignKey(
name: "FK_SCPSeries_User_CreateUserId",
column: x => x.CreateUserId,
@ -5849,6 +5852,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
constraints: table =>
{
table.PrimaryKey("PK_SCPStudy", x => x.SeqId);
table.UniqueConstraint("AK_SCPStudy_Id", x => x.Id);
table.ForeignKey(
name: "FK_SCPStudy_SCPPatient_PatientId",
column: x => x.PatientId,
@ -5908,7 +5912,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
name: "FK_StudyMonitor_DicomStudy_StudyId",
column: x => x.StudyId,
principalTable: "DicomStudy",
principalColumn: "SeqId",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_StudyMonitor_NoneDicomStudy_StudyId",
@ -6682,6 +6686,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
constraints: table =>
{
table.PrimaryKey("PK_TaskStudy", x => x.SeqId);
table.UniqueConstraint("AK_TaskStudy_Id", x => x.Id);
table.ForeignKey(
name: "FK_TaskStudy_Subject_SubjectId",
column: x => x.SubjectId,
@ -6868,11 +6873,12 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
constraints: table =>
{
table.PrimaryKey("PK_TaskSeries", x => x.SeqId);
table.UniqueConstraint("AK_TaskSeries_Id", x => x.Id);
table.ForeignKey(
name: "FK_TaskSeries_TaskStudy_StudyId",
column: x => x.StudyId,
principalTable: "TaskStudy",
principalColumn: "SeqId",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TaskSeries_User_CreateUserId",
@ -6926,7 +6932,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
name: "FK_TaskInstance_TaskSeries_SeriesId",
column: x => x.SeriesId,
principalTable: "TaskSeries",
principalColumn: "SeqId",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_TaskInstance_TaskStudy_StudyId",
@ -9293,7 +9299,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
table: "DicomInstance",
column: "SeriesId",
principalTable: "DicomSeries",
principalColumn: "SeqId",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
@ -9317,7 +9323,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
table: "DicomSeries",
column: "StudyId",
principalTable: "DicomStudy",
principalColumn: "SeqId",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
@ -9634,7 +9640,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
table: "SCPInstance",
column: "SeriesId",
principalTable: "SCPSeries",
principalColumn: "SeqId",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
@ -9657,7 +9663,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
table: "SCPSeries",
column: "StudyId",
principalTable: "SCPStudy",
principalColumn: "SeqId",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(

View File

@ -13685,6 +13685,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.DicomSeries", "DicomSerie")
.WithMany("DicomInstanceList")
.HasForeignKey("SeriesId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -13712,6 +13713,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy")
.WithMany("SeriesList")
.HasForeignKey("StudyId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -15263,6 +15265,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.SCPSeries", "SCPSeries")
.WithMany("SCPInstanceList")
.HasForeignKey("SeriesId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -15323,6 +15326,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.SCPStudy", "SCPStudy")
.WithMany("SeriesList")
.HasForeignKey("StudyId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -15419,20 +15423,21 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy")
.WithMany("DicomStudyMonitorList")
.HasForeignKey("StudyId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.NoneDicomStudy", "NoneDicomStudy")
.WithMany()
.HasForeignKey("StudyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.DicomStudy", "DicomStudy")
.WithMany("DicomStudyMonitorList")
.HasForeignKey("StudyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("IRaCIS.Core.Domain.Models.TaskStudy", "TaskStudy")
.WithMany("DicomStudyMonitorList")
.WithMany()
.HasForeignKey("StudyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -16059,6 +16064,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.TaskSeries", "TaskSeries")
.WithMany("InstanceList")
.HasForeignKey("SeriesId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -16144,6 +16150,7 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.HasOne("IRaCIS.Core.Domain.Models.TaskStudy", "TaskStudy")
.WithMany("SeriesList")
.HasForeignKey("StudyId")
.HasPrincipalKey("Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -17549,8 +17556,6 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
modelBuilder.Entity("IRaCIS.Core.Domain.Models.TaskStudy", b =>
{
b.Navigation("DicomStudyMonitorList");
b.Navigation("InstanceList");
b.Navigation("SeriesList");