添加阅片期计划
continuous-integration/drone/push Build is passing Details

Test_IRC_Net8
he 2025-11-03 14:22:41 +08:00
parent 9b59a55423
commit 510dfcac30
7 changed files with 21341 additions and 170 deletions

View File

@ -14011,6 +14011,13 @@
<param name="indto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.AddReadModule(IRaCIS.Core.Application.Service.Reading.Dto.AddReadModuleInDto)">
<summary>
生效或者新增访视的时候添加阅片期
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.GetPreviewTheReadingPlanList(IRaCIS.Core.Application.Service.Reading.Dto.PreviewTheReadingListDto)">
<summary>
获取选中的计划 (增加标准不影响 因为阅片期设置关联了标准)
@ -14052,6 +14059,13 @@
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.AddReadingPlanAndGenerateReadModule(IRaCIS.Core.Application.Service.Reading.Dto.AddReadingPlanAndGenerateReadModuleInDto)">
<summary>
添加阅片计划并生成阅片期(在阅片期已经生效的情况下添加)
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingPeriodSetService.SetBatchAddOrRemoveReadingPlan(IRaCIS.Core.Application.Service.Reading.Dto.SetBatchAddOrRemoveReadingPlanInDto)">
<summary>
设置加入或者移除阅片计划

View File

@ -127,6 +127,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public Guid? TrialReadingCriterionId { get; set; }
}
public class AddReadingPlanAndGenerateReadModuleInDto
{
public Guid ReadingPeriodSetId { get; set; }
public List<Guid> SubjectVisitIdList { get; set; } = new List<Guid>();
}
public class SetBatchAddOrRemoveReadingPlanInDto
{
public List<Guid> SubjectVisitIdList { get; set; } = new List<Guid>();
@ -404,6 +411,31 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public ReadingPeriodStatus IsTakeEffect { get; set; }
}
public class AddReadModuleInDto
{
public Guid TrialReadingCriterionId { get; set; }
public Guid ReadingPeriodSetId { get; set; }
public Guid TrialId { get; set; }
public string ReadingPeriodName { get; set; }
public ReadingSetType ReadingSetType { get; set; }
public List<AddReadModuleVisitInfo> VisitInfoList { get; set; } = new List<AddReadModuleVisitInfo>();
}
public class AddReadModuleVisitInfo
{
public Guid SubjectId { get; set; }
public bool IsUrgent { get; set; }
public Guid SubjectVisitId { get; set; }
}
public class ReadingPeriodSetQuery : PageInput
{

View File

@ -2,10 +2,12 @@
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using MassTransit;
using Microsoft.AspNetCore.Mvc;
using NPOI.Util;
namespace IRaCIS.Core.Application.Service
{
@ -74,53 +76,67 @@ namespace IRaCIS.Core.Application.Service
else
{
var entity = (await _readingPeriodSetRepository.Where(t => t.Id == addOrEditReadingPeriodSet.Id, true).Include(t => t.ReadingPeriodSites).Include(x => x.ReadingPeriodPlanList).FirstOrDefaultAsync()).IfNullThrowException();
_mapper.Map(addOrEditReadingPeriodSet, entity);
entity.ReadingPeriodSites = addOrEditReadingPeriodSet.SiteIds.Select(x => new ReadingPeriodSite()
// 已生效的时候就不可能修改 只能是添加计划和生成模块
if (entity.IsTakeEffect == ReadingPeriodStatus.TakeEffect)
{
ReadingPeriodSetId = entity.Id,
TrialId = entity.TrialId,
TrialSiteId = x,
}).ToList();
// 修改了就是重新生成计划
if (await IsChangeReadingPlan(new IsChangeReadingPlanInDto()
{
Id = addOrEditReadingPeriodSet.Id,
ExpirationDate = addOrEditReadingPeriodSet.ExpirationDate,
ReadingScope = addOrEditReadingPeriodSet.ReadingScope.Value,
TrialId = addOrEditReadingPeriodSet.TrialId,
ExpirationVisitNum = addOrEditReadingPeriodSet.ExpirationVisitNum,
VisitStageId = addOrEditReadingPeriodSet.VisitStageId,
ReadingSetType = addOrEditReadingPeriodSet.ReadingSetType,
TrialReadingCriterionId = addOrEditReadingPeriodSet.TrialReadingCriterionId,
SiteIds = addOrEditReadingPeriodSet.SiteIds,
}))
{
entity.ReadingPeriodPlanList = addOrEditReadingPeriodSet.SubjectVisitIds.Select(x => new ReadingPeriodPlan
await AddReadingPlanAndGenerateReadModule(new AddReadingPlanAndGenerateReadModuleInDto()
{
ReadingPeriodSetId = entity.Id,
SubjectVisitId = x,
}).ToList();
ReadingPeriodSetId = addOrEditReadingPeriodSet.Id.Value,
SubjectVisitIdList = addOrEditReadingPeriodSet.SubjectVisitIds
});
}
else
{
var existsVisitIds = await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == addOrEditReadingPeriodSet.Id).Select(x => x.SubjectVisitId).ToListAsync();
_mapper.Map(addOrEditReadingPeriodSet, entity);
var needaddIds = addOrEditReadingPeriodSet.SubjectVisitIds.Where(x => !existsVisitIds.Contains(x)).ToList();
entity.ReadingPeriodPlanList.AddRange(needaddIds.Select(x => new ReadingPeriodPlan()
entity.ReadingPeriodSites = addOrEditReadingPeriodSet.SiteIds.Select(x => new ReadingPeriodSite()
{
ReadingPeriodSetId = entity.Id,
SubjectVisitId = x,
}));
TrialId = entity.TrialId,
TrialSiteId = x,
}).ToList();
// 修改了就是重新生成计划
if (await IsChangeReadingPlan(new IsChangeReadingPlanInDto()
{
Id = addOrEditReadingPeriodSet.Id,
ExpirationDate = addOrEditReadingPeriodSet.ExpirationDate,
ReadingScope = addOrEditReadingPeriodSet.ReadingScope.Value,
TrialId = addOrEditReadingPeriodSet.TrialId,
ExpirationVisitNum = addOrEditReadingPeriodSet.ExpirationVisitNum,
VisitStageId = addOrEditReadingPeriodSet.VisitStageId,
ReadingSetType = addOrEditReadingPeriodSet.ReadingSetType,
TrialReadingCriterionId = addOrEditReadingPeriodSet.TrialReadingCriterionId,
SiteIds = addOrEditReadingPeriodSet.SiteIds,
}))
{
entity.ReadingPeriodPlanList = addOrEditReadingPeriodSet.SubjectVisitIds.Select(x => new ReadingPeriodPlan
{
ReadingPeriodSetId = entity.Id,
SubjectVisitId = x,
}).ToList();
}
else
{
var existsVisitIds = await _readingPeriodPlanRepository.Where(x => x.ReadingPeriodSetId == addOrEditReadingPeriodSet.Id).Select(x => x.SubjectVisitId).ToListAsync();
var needaddIds = addOrEditReadingPeriodSet.SubjectVisitIds.Where(x => !existsVisitIds.Contains(x)).ToList();
entity.ReadingPeriodPlanList.AddRange(needaddIds.Select(x => new ReadingPeriodPlan()
{
ReadingPeriodSetId = entity.Id,
SubjectVisitId = x,
}));
}
var success = await _readingPeriodSetRepository.SaveChangesAsync();
}
var success = await _readingPeriodSetRepository.SaveChangesAsync();
return ResponseOutput.Ok(entity.Id);
}
@ -178,146 +194,26 @@ namespace IRaCIS.Core.Application.Service
List<ReadModule> readModules = new List<ReadModule>();
foreach (var item in plans)
await AddReadModule(new AddReadModuleInDto()
{
readModules.Add(new ReadModule()
ReadingPeriodName = readingPeriodSet.ReadingPeriodName,
ReadingSetType = readingPeriodSet.ReadingSetType,
TrialId = readingPeriodSet.TrialId,
ReadingPeriodSetId= readingPeriodSet.Id,
TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId,
VisitInfoList = plans.Select(x => new AddReadModuleVisitInfo()
{
Id = NewId.NextGuid(),
SubjectId = item.SubjectVisit.SubjectId,
ModuleType = item.ReadingPeriodSet.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Global : ModuleTypeEnum.Oncology,
IsUrgent = item.SubjectVisit.IsUrgent,
ReadModuleAddTypeEnum = ReadModuleAddType.ReadingPlan,
ModuleName = item.ReadingPeriodSet.ReadingPeriodName,
SubjectVisitId = item.SubjectVisitId,
ReadingSetType = item.ReadingPeriodSet.ReadingSetType,
ReadingPeriodSetId = item.ReadingPeriodSet.Id,
ReadingStatus = ReadingStatusEnum.TaskAllocate,
TrialId = readingPeriodSet.TrialId,
//VisitNum = item.SubjectVisit.VisitNum,
SubjectId = x.SubjectVisit.SubjectId,
SubjectVisitId = x.SubjectVisitId,
IsUrgent = false
}).ToList()
//增加标准
TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId
});
};
await _readModuleRepository.AddRangeAsync(readModules);
await _readModuleRepository.SaveChangesAsync();
// 判断是否要添加肿瘤学或者全局阅片任务
var subjectVisitIds = readModules.Select(x => x.SubjectVisitId).ToList();
switch (readingPeriodSet.ReadingSetType)
{
case ReadingSetType.ImageReading:
//增加标准
var taskInfoList = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) &&
x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId &&
x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).ToListAsync();
foreach (var item in taskInfoList)
{
var readModule = readModules.Where(x => x.SubjectVisitId == item.SourceSubjectVisitId).FirstOrDefault();
if (readModule != null)
{
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{
OriginalVisitId = item.Id,
ReadingCategory = GenerateTaskCategory.Global,
TrialId = item.TrialId,
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
new ReadingGenerataTaskDTO()
{
IsUrgent = readModule.IsUrgent??false,
SubjectId = readModule.SubjectId,
ReadingName = readModule.ModuleName,
ReadModuleId =readModule.Id,
ReadingCategory = ReadingCategory.Global,
}
}
});
}
}
// 根据SourceSubjectVisitId 分组
var visitTaskid = taskInfoList.GroupBy(x => x.SourceSubjectVisitId).Select(x => x.Max(y => y.Id)).ToList();
// 生成裁判任务 是否需要生成函数里面有逻辑判断
foreach (var item in visitTaskid)
{
await _readingImageTaskService.TriggerJudgeQuestion(item);
}
break;
case ReadingSetType.TumorReading:
});
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == readingPeriodSet.TrialReadingCriterionId).Select(x => new
{
x.ReadingType,
}).FirstNotNullAsync();
//增加标准
var globalModuleIds = await _readModuleRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && subjectVisitIds.Contains(x.SubjectVisitId) && x.ModuleType == ModuleTypeEnum.Global).Select(x => x.Id).ToListAsync();
//增加标准
var globalTaskInfo = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == readingPeriodSet.TrialReadingCriterionId && globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid))
&& x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).GroupBy(x => new { x.SouceReadModuleId }).Select(x =>
new
{
SouceReadModuleId = x.Key.SouceReadModuleId,
Count = x.ToList().Count,
TaskId = x.Select(x => x.Id).FirstOrDefault(),
ReadModuleId = x.Select(x => x.SouceReadModuleId).FirstOrDefault(),
JudgeTaskId = x.Select(x => x.JudgeVisitTaskId).FirstOrDefault(),
JudgeTaskResultId = x.Select(x => x.JudgeVisitTask.JudgeResultTaskId).FirstOrDefault(),
}).ToListAsync();
foreach (var item in globalTaskInfo)
{
if (item.Count == (int)criterionInfo.ReadingType)
{
//没有裁判 或者有裁判,并且裁判任务做完了
if (item.JudgeTaskId == null || item.JudgeTaskResultId != null)
{
var readModule = readModules.Where(x => x.Id == item.ReadModuleId).FirstOrDefault();
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{
OriginalVisitId = item.TaskId,
ReadingCategory = GenerateTaskCategory.Oncology,
TrialId = readingPeriodSet.TrialId,
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
new ReadingGenerataTaskDTO()
{
IsUrgent = readModule.IsUrgent ?? false,
SubjectId = readModule.SubjectId,
ReadingName = readModule.ModuleName,
ReadModuleId =readModule.Id,
ReadingCategory = ReadingCategory.Oncology,
}
}
});
}
}
}
break;
}
}
@ -353,12 +249,167 @@ namespace IRaCIS.Core.Application.Service
EffectOfTime = indto.IsTakeEffect == ReadingPeriodStatus.TakeEffect ? DateTime.Now : null,
});
if (indto.IsTakeEffect == ReadingPeriodStatus.TakeEffect)
{
await _readingPeriodPlanRepository.UpdatePartialFromQueryAsync(x => x.ReadingPeriodSetId == indto.Id, x => new ReadingPeriodPlan()
{
IsGenerate = true,
GeneratedTime = DateTime.Now
});
}
var result = await _readingPeriodSetRepository.SaveChangesAsync();
return ResponseOutput.Result(result);
}
/// <summary>
/// 生效或者新增访视的时候添加阅片期
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task AddReadModule(AddReadModuleInDto inDto)
{
List<ReadModule> readModules = new List<ReadModule>();
foreach (var item in inDto.VisitInfoList)
{
readModules.Add(new ReadModule()
{
Id = NewId.NextGuid(),
SubjectId = item.SubjectId,
ModuleType = inDto.ReadingSetType == ReadingSetType.ImageReading ? ModuleTypeEnum.Global : ModuleTypeEnum.Oncology,
IsUrgent = item.IsUrgent,
ReadModuleAddTypeEnum = ReadModuleAddType.ReadingPlan,
ModuleName = inDto.ReadingPeriodName,
SubjectVisitId = item.SubjectVisitId,
ReadingSetType = inDto.ReadingSetType,
ReadingPeriodSetId = inDto.ReadingPeriodSetId,
ReadingStatus = ReadingStatusEnum.TaskAllocate,
TrialId = inDto.TrialId,
//VisitNum = item.SubjectVisit.VisitNum,
//增加标准
TrialReadingCriterionId = inDto.TrialReadingCriterionId
});
}
;
await _readModuleRepository.AddRangeAsync(readModules);
await _readModuleRepository.SaveChangesAsync();
// 判断是否要添加肿瘤学或者全局阅片任务
var subjectVisitIds = readModules.Select(x => x.SubjectVisitId).ToList();
switch (inDto.ReadingSetType)
{
case ReadingSetType.ImageReading:
//增加标准
var taskInfoList = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId && subjectVisitIds.Contains(x.SourceSubjectVisitId ?? default(Guid)) &&
x.TrialReadingCriterionId == inDto.TrialReadingCriterionId &&
x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).ToListAsync();
foreach (var item in taskInfoList)
{
var readModule = readModules.Where(x => x.SubjectVisitId == item.SourceSubjectVisitId).FirstOrDefault();
if (readModule != null)
{
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{
OriginalVisitId = item.Id,
ReadingCategory = GenerateTaskCategory.Global,
TrialId = item.TrialId,
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
new ReadingGenerataTaskDTO()
{
IsUrgent = readModule.IsUrgent??false,
SubjectId = readModule.SubjectId,
ReadingName = readModule.ModuleName,
ReadModuleId =readModule.Id,
ReadingCategory = ReadingCategory.Global,
}
}
});
}
}
// 根据SourceSubjectVisitId 分组
var visitTaskid = taskInfoList.GroupBy(x => x.SourceSubjectVisitId).Select(x => x.Max(y => y.Id)).ToList();
// 生成裁判任务 是否需要生成函数里面有逻辑判断
foreach (var item in visitTaskid)
{
await _readingImageTaskService.TriggerJudgeQuestion(item);
}
break;
case ReadingSetType.TumorReading:
var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).Select(x => new
{
x.ReadingType,
}).FirstNotNullAsync();
//增加标准
var globalModuleIds = await _readModuleRepository.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId && subjectVisitIds.Contains(x.SubjectVisitId) && x.ModuleType == ModuleTypeEnum.Global).Select(x => x.Id).ToListAsync();
//增加标准
var globalTaskInfo = await _visitTaskRepository.Where(x => x.TrialReadingCriterionId == inDto.TrialReadingCriterionId && globalModuleIds.Contains(x.SouceReadModuleId ?? default(Guid))
&& x.TaskState == TaskState.Effect && x.ReadingTaskState == ReadingTaskState.HaveSigned && !x.IsAnalysisCreate).GroupBy(x => new { x.SouceReadModuleId }).Select(x =>
new
{
SouceReadModuleId = x.Key.SouceReadModuleId,
Count = x.ToList().Count,
TaskId = x.Select(x => x.Id).FirstOrDefault(),
ReadModuleId = x.Select(x => x.SouceReadModuleId).FirstOrDefault(),
JudgeTaskId = x.Select(x => x.JudgeVisitTaskId).FirstOrDefault(),
JudgeTaskResultId = x.Select(x => x.JudgeVisitTask.JudgeResultTaskId).FirstOrDefault(),
}).ToListAsync();
foreach (var item in globalTaskInfo)
{
if (item.Count == (int)criterionInfo.ReadingType)
{
//没有裁判 或者有裁判,并且裁判任务做完了
if (item.JudgeTaskId == null || item.JudgeTaskResultId != null)
{
var readModule = readModules.Where(x => x.Id == item.ReadModuleId).FirstOrDefault();
await _visitTaskHelpeService.AddTaskAsync(new GenerateTaskCommand()
{
OriginalVisitId = item.TaskId,
ReadingCategory = GenerateTaskCategory.Oncology,
TrialId = inDto.TrialId,
ReadingGenerataTaskList = new List<ReadingGenerataTaskDTO>() {
new ReadingGenerataTaskDTO()
{
IsUrgent = readModule.IsUrgent ?? false,
SubjectId = readModule.SubjectId,
ReadingName = readModule.ModuleName,
ReadModuleId =readModule.Id,
ReadingCategory = ReadingCategory.Oncology,
}
}
});
}
}
}
break;
}
}
#endregion
@ -532,6 +583,51 @@ namespace IRaCIS.Core.Application.Service
}
}
/// <summary>
/// 添加阅片计划并生成阅片期(在阅片期已经生效的情况下添加)
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<IResponseOutput> AddReadingPlanAndGenerateReadModule(AddReadingPlanAndGenerateReadModuleInDto inDto)
{
var readingPeriodSet = await _readingPeriodSetRepository.Where(x => x.Id == inDto.ReadingPeriodSetId).FirstNotNullAsync();
List<ReadingPeriodPlan> plans = inDto.SubjectVisitIdList.Select(x => new ReadingPeriodPlan()
{
Id = NewId.NextGuid(),
SubjectVisitId = x,
ReadingPeriodSetId = inDto.ReadingPeriodSetId,
IsGenerate=true,
GeneratedTime=DateTime.Now
}).ToList();
await _readingPeriodPlanRepository.AddRangeAsync(plans);
await _readingPeriodPlanRepository.SaveChangesAsync();
var subejctVisits = await _subjectVisitRepository.Where(x => inDto.SubjectVisitIdList.Contains(x.Id)).ToListAsync();
await AddReadModule(new AddReadModuleInDto()
{
ReadingPeriodName = readingPeriodSet.ReadingPeriodName,
ReadingSetType = readingPeriodSet.ReadingSetType,
TrialId = readingPeriodSet.TrialId,
ReadingPeriodSetId = readingPeriodSet.Id,
TrialReadingCriterionId = readingPeriodSet.TrialReadingCriterionId,
VisitInfoList = subejctVisits.Select(x => new AddReadModuleVisitInfo()
{
SubjectId = x.SubjectId,
SubjectVisitId = x.Id,
IsUrgent = x.IsUrgent,
}).ToList()
});
return ResponseOutput.Ok();
}
/// <summary>
/// 设置加入或者移除阅片计划
/// </summary>

View File

@ -19,4 +19,14 @@ public class ReadingPeriodPlan : BaseFullDeleteAuditEntity
[Comment("访视")]
public Guid SubjectVisitId { get; set; }
/// <summary>
/// 是否生成
/// </summary>
public bool IsGenerate { get; set; } = false;
/// <summary>
/// 生效时间
/// </summary>
public DateTime? GeneratedTime { get; set; }
}

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -5948,9 +5948,15 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
b.Property<DateTime?>("DeletedTime")
.HasColumnType("datetime2");
b.Property<DateTime?>("GeneratedTime")
.HasColumnType("datetime2");
b.Property<bool>("IsDeleted")
.HasColumnType("bit");
b.Property<bool>("IsGenerate")
.HasColumnType("bit");
b.Property<Guid>("ReadingPeriodSetId")
.HasColumnType("uniqueidentifier")
.HasComment("阅片期配置ID");