diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 796ff7bf5..e4064895b 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -8783,6 +8783,20 @@
+
+
+ 获取附加评估选项列表
+
+
+
+
+
+
+ 保存附加评估设置 (自动添加 或者删除附加评估问题)
+
+
+
+
获取签名文本
diff --git a/IRaCIS.Core.Application/Service/Fixed/CriterionAdditionalAssessment.cs b/IRaCIS.Core.Application/Service/Fixed/CriterionAdditionalAssessment.cs
new file mode 100644
index 000000000..27ccafcf3
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/Fixed/CriterionAdditionalAssessment.cs
@@ -0,0 +1,45 @@
+using IRaCIS.Core.Domain.Share;
+using IRaCIS.Core.Domain.Share.Reading;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IRaCIS.Core.Application.Service
+{
+
+
+ public class CriterionAdditionalAssessment
+ {
+ public CriterionType CriterionType { get; set; }
+
+ public AdditionalAssessmentType AdditionalAssessmentType { get; set; }
+
+ //附加评估问题
+ public List AdditionalQuestionList { get; set; }
+
+ }
+
+
+ public static class AdditionalAssessment
+ {
+
+ public static List SystemDefeaultAdditionalAssessmentList { get; set; } = new List();
+ static AdditionalAssessment()
+ {
+ //Resist1.1 脑转移 默认评估问题
+ SystemDefeaultAdditionalAssessmentList.Add(new CriterionAdditionalAssessment() { CriterionType = CriterionType.RECIST1Point1, AdditionalAssessmentType = AdditionalAssessmentType.BrainMetastasis });
+ }
+
+
+ public static List GetSystemDefeaultAdditionalAssessmentList(CriterionType criterionType, AdditionalAssessmentType? additionalAssessmentType=null)
+ {
+
+ return SystemDefeaultAdditionalAssessmentList.Where(t => t.CriterionType == criterionType)
+ .WhereIf(additionalAssessmentType!=null,t=>t.AdditionalAssessmentType==additionalAssessmentType).ToList();
+ }
+ }
+
+
+}
diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs
index a511edc47..ae71c012e 100644
--- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs
+++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs
@@ -1711,8 +1711,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
///
public Guid? Id { get; set; }
-
- public Guid TrialId { get; set; }
+ public bool IsAdditional { get; set; }
+ public Guid TrialId { get; set; }
///
/// 是否复制病灶
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs
index d38885b24..fe0c4589b 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs
@@ -1,5 +1,6 @@
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Domain.Share;
+using IRaCIS.Core.Domain.Share.Reading;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@@ -337,6 +338,8 @@ namespace IRaCIS.Core.Application.Contracts
///
public Guid TrialId { get; set; }
+
+ public CriterionType CriterionType { get; set; }
///
/// 是否有阅片期
///
@@ -806,12 +809,29 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsSignSave { get; set; } = false;
}
+
+ public class AddOrUpdateTrialCriterionAdditional
+ {
+ public Guid Id { get; set; }
+ public Guid TrialReadingCriterionId { get; set; }
+
+
+ public CriterionType CriterionType { get; set; }
+
+
+ public AdditionalAssessmentType AdditionalAssessmentType { get; set; }
+
+ public bool? IsSelected { get; set; }
+ }
+
+
public class SetCriterionReadingInfoInDto
{
//是否附加评估
public bool IsAdditionalAssessment { get; set; }
+ public CriterionType CriterionType { get; set; }
//自动 手动生成任务
public bool IsAutoCreate { get; set; }
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
index 8e95155c4..6a3d1ba64 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs
@@ -16,6 +16,9 @@ using IRaCIS.Core.Application.ViewModel;
using MassTransit;
using IRaCIS.Core.Application.Filter;
using static IRaCIS.Core.Domain.Share.StaticData;
+using IRaCIS.Core.Application.Service;
+using DocumentFormat.OpenXml.Office.CustomUI;
+using IRaCIS.Core.Application.Service;
namespace IRaCIS.Core.Application
{
@@ -36,7 +39,7 @@ namespace IRaCIS.Core.Application
private readonly IRepository _taskAllocationRuleRepository;
private readonly IRepository _readingCriterionDictionaryRepository;
private readonly IReadingQuestionService iReadingQuestionService;
-
+ private readonly IRepository _trialCriterionAdditionalAssessmentTypeRepository;
private readonly IRepository _readingTaskQuestionAnswer;
@@ -60,7 +63,7 @@ namespace IRaCIS.Core.Application
IReadingQuestionService iReadingQuestionService,
IEasyCachingProvider provider,
IOrganInfoService iOrganInfoService,
-
+ IRepository trialCriterionAdditionalAssessmentTypeRepository,
IRepository visitTaskRepository,
IRepository readingTableQuestionTrialRepository,
IRepository readingTableQuestionAnswerRepository,
@@ -69,6 +72,7 @@ namespace IRaCIS.Core.Application
)
{
+ _trialCriterionAdditionalAssessmentTypeRepository = trialCriterionAdditionalAssessmentTypeRepository;
_trialRepository = trialRepository;
_taskAllocationRuleRepository = taskAllocationRuleRepository;
this._readingCriterionDictionaryRepository = readingCriterionDictionaryRepository;
@@ -154,7 +158,7 @@ namespace IRaCIS.Core.Application
await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
{
- IsSigned=true,
+ IsSigned = true,
ReadingInfoSignTime = DateTime.Now
});
@@ -196,7 +200,7 @@ namespace IRaCIS.Core.Application
if (trialCriterion.ReadingQuestionCriterionSystemId != null)
{
-
+
if (trialCriterion.SynchronizeOriginalTime == null)
{
@@ -222,10 +226,11 @@ namespace IRaCIS.Core.Application
await _trialCriterionDictionaryCode.BatchDeleteNoTrackingAsync(x => x.TrialCriterionId == trialCriterion.Id);
await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == trialCriterion.Id);
- var criterionDictionaryCodeList=await _systemCriterionDictionaryCode.Where(x => x.SystemCriterionId == trialCriterion.ReadingQuestionCriterionSystemId.Value)
- .Select(x=>new TrialCriterionDictionaryCode() {
- Code=x.Code,
- TrialCriterionId= trialCriterion.Id,
+ var criterionDictionaryCodeList = await _systemCriterionDictionaryCode.Where(x => x.SystemCriterionId == trialCriterion.ReadingQuestionCriterionSystemId.Value)
+ .Select(x => new TrialCriterionDictionaryCode()
+ {
+ Code = x.Code,
+ TrialCriterionId = trialCriterion.Id,
}).ToListAsync();
criterionDictionaryCodeList.ForEach(x =>
@@ -265,13 +270,13 @@ namespace IRaCIS.Core.Application
var tableQuestionQuery = _readingTableQuestionTrialRepository.Where(x => x.TrialCriterionId == inDto.TrialReadingCriterionId).AsQueryable();
- await _readingTaskQuestionAnswer.BatchDeleteNoTrackingAsync(x => x.VisitTask.TrialReadingCriterionId == inDto.TrialReadingCriterionId&&x.ReadingQuestionTrial.ReadingQuestionCriterionTrialId== inDto.TrialReadingCriterionId && questionQuery.Count(y => y.Id == x.ReadingQuestionTrialId) == 0);
- await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.VisitTask.TrialReadingCriterionId == inDto.TrialReadingCriterionId && x.ReadingQuestionTrial.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && questionQuery.Count(y => y.Id == x.QuestionId) == 0);
- await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTask.TrialReadingCriterionId == inDto.TrialReadingCriterionId && x.ReadingQuestionTrial.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId &&x.ReadingTableQuestionTrial.TrialCriterionId== inDto.TrialReadingCriterionId && tableQuestionQuery.Count(y => y.Id == x.TableQuestionId) == 0);
+ await _readingTaskQuestionAnswer.BatchDeleteNoTrackingAsync(x => x.VisitTask.TrialReadingCriterionId == inDto.TrialReadingCriterionId && x.ReadingQuestionTrial.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && questionQuery.Count(y => y.Id == x.ReadingQuestionTrialId) == 0);
+ await _readingTableAnswerRowInfoRepository.BatchDeleteNoTrackingAsync(x => x.VisitTask.TrialReadingCriterionId == inDto.TrialReadingCriterionId && x.ReadingQuestionTrial.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && questionQuery.Count(y => y.Id == x.QuestionId) == 0);
+ await _readingTableQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTask.TrialReadingCriterionId == inDto.TrialReadingCriterionId && x.ReadingQuestionTrial.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.ReadingTableQuestionTrial.TrialCriterionId == inDto.TrialReadingCriterionId && tableQuestionQuery.Count(y => y.Id == x.TableQuestionId) == 0);
}
-
+
await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.Id == inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial()
{
@@ -281,7 +286,7 @@ namespace IRaCIS.Core.Application
await _readingCriterionDictionaryRepository.SaveChangesAsync();
-
+
}
return ResponseOutput.Ok(true);
@@ -458,7 +463,7 @@ namespace IRaCIS.Core.Application
///
///
[HttpPost]
- public async Task<(GetTrialReadingCriterionInfoOutDto,bool)> GetTrialReadingCriterionInfo(GetTrialReadingInfoInDto inDto)
+ public async Task<(GetTrialReadingCriterionInfoOutDto, bool)> GetTrialReadingCriterionInfo(GetTrialReadingInfoInDto inDto)
{
GetTrialReadingCriterionInfoOutDto result = new GetTrialReadingCriterionInfoOutDto();
result.ReadingCriterionPageList = await _readingCriterionPageRepository.Where(x => x.TrialId == inDto.TrialId).ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync();
@@ -477,7 +482,7 @@ namespace IRaCIS.Core.Application
&& x.ReadingCriterionPageId == null)
.ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder).ToListAsync();
- return (result,true);
+ return (result, true);
}
@@ -552,12 +557,34 @@ namespace IRaCIS.Core.Application
IsGlobalReading = inDto.IsGlobalReading,
IsArbitrationReading = inDto.IsArbitrationReading,
IsOncologyReading = inDto.IsOncologyReading,
- IsAdditionalAssessment=inDto.IsAdditionalAssessment,
- IsAutoCreate=inDto.IsAutoCreate
+ IsAdditionalAssessment = inDto.IsAdditionalAssessment,
+ IsAutoCreate = inDto.IsAutoCreate
});
+ //判断是否存在附加评估,存在,就将标准对应的附加评估选项加进去
+ if (inDto.IsAdditionalAssessment)
+ {
+ if (!await _trialCriterionAdditionalAssessmentTypeRepository.AnyAsync(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId))
+ {
+ var addList = AdditionalAssessment.GetSystemDefeaultAdditionalAssessmentList(inDto.CriterionType);
+ foreach (var addItem in addList)
+ {
+ await _trialCriterionAdditionalAssessmentTypeRepository.AddAsync(new TrialCriterionAdditionalAssessmentType()
+ {
+ CriterionType = inDto.CriterionType,
+ TrialReadingCriterionId = inDto.TrialReadingCriterionId,
+ AdditionalAssessmentType = addItem.AdditionalAssessmentType
+ });
+ }
+ }
+ }
+ else
+ {
+ //删除附加问题
+ await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(t => t.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && t.IsAdditional == true);
+ }
var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync();
@@ -565,6 +592,54 @@ namespace IRaCIS.Core.Application
return ResponseOutput.Ok(result);
}
+ ///
+ /// 获取附加评估选项列表
+ ///
+ ///
+ ///
+ public async Task> GetTrialCriterionAdditionalAssessmentOptionList(Guid trialReadingCriterionId)
+ {
+ return await _trialCriterionAdditionalAssessmentTypeRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).ToListAsync();
+ }
+
+
+ ///
+ /// 保存附加评估设置 (自动添加 或者删除附加评估问题)
+ ///
+ ///
+ ///
+ public async Task SetTrialCriterionAdditionalAssessment(List updateList)
+ {
+ foreach (var updateItem in updateList)
+ {
+ if (updateItem.IsSelected == true)
+ {
+ //添加默认问题
+
+ var addTypeList = AdditionalAssessment.GetSystemDefeaultAdditionalAssessmentList(updateItem.CriterionType, updateItem.AdditionalAssessmentType);
+
+ foreach (var addType in addTypeList)
+ {
+ foreach (var question in addType.AdditionalQuestionList)
+ {
+ await _readingQuestionTrialRepository.AddAsync(question);
+ }
+ }
+ }
+ else
+ {
+ //删除附加问题
+
+ await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(t => t.ReadingQuestionCriterionTrialId == updateItem.TrialReadingCriterionId && t.IsAdditional == true);
+ }
+
+ await _trialCriterionAdditionalAssessmentTypeRepository.UpdatePartialFromQueryAsync(updateItem.Id, t => new TrialCriterionAdditionalAssessmentType() { IsSelected = updateItem.IsSelected });
+ }
+
+ return ResponseOutput.Ok();
+ }
+
+
///
/// 获取签名文本
///
diff --git a/IRaCIS.Core.Domain.Share/Reading/UrgentType.cs b/IRaCIS.Core.Domain.Share/Reading/UrgentType.cs
index 270e3b869..7c4515320 100644
--- a/IRaCIS.Core.Domain.Share/Reading/UrgentType.cs
+++ b/IRaCIS.Core.Domain.Share/Reading/UrgentType.cs
@@ -24,5 +24,16 @@ namespace IRaCIS.Core.Domain.Share.Reading
+ }
+
+ public enum AdditionalAssessmentType
+ {
+ //脑转移
+ BrainMetastasis = 1,
+
+ //TNM分期
+
+ TNM = 2
+
}
}
diff --git a/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionAdditionalAssessmentType.cs b/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionAdditionalAssessmentType.cs
new file mode 100644
index 000000000..3f385cdde
--- /dev/null
+++ b/IRaCIS.Core.Domain/Reading/ReadingCriterion/TrialCriterionAdditionalAssessmentType.cs
@@ -0,0 +1,69 @@
+
+//--------------------------------------------------------------------
+// 此代码由T4模板自动生成 byzhouhang 20210918
+// 生成时间 2023-03-16 13:21:14
+// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
+using System;
+using IRaCIS.Core.Domain.Share;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using IRaCIS.Core.Domain.Share.Reading;
+
+namespace IRaCIS.Core.Domain.Models
+{
+ ///
+ ///TrialCriterionAdditionalAssessmentType
+ ///
+ [Table("TrialCriterionAdditionalAssessmentType")]
+ public class TrialCriterionAdditionalAssessmentType : Entity, IAuditUpdate, IAuditAdd
+ {
+
+
+ ///
+ /// TrialReadingCriterionId
+ ///
+ [Required]
+ public Guid TrialReadingCriterionId { get; set; }
+
+ ///
+ /// CriterionType
+ ///
+
+ public CriterionType CriterionType { get; set; }
+
+
+ public AdditionalAssessmentType AdditionalAssessmentType { get; set; }
+
+ ///
+ /// IsSelected
+ ///
+ public bool? IsSelected { get; set; }
+
+ ///
+ /// CreateTime
+ ///
+ [Required]
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// CreateUserId
+ ///
+ [Required]
+ public Guid CreateUserId { get; set; }
+
+ ///
+ /// UpdateTime
+ ///
+ [Required]
+ public DateTime UpdateTime { get; set; }
+
+ ///
+ /// UpdateUserId
+ ///
+ [Required]
+ public Guid UpdateUserId { get; set; }
+
+
+ }
+
+}
diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
index c69be1f41..f0c107a80 100644
--- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
+++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs
@@ -268,6 +268,9 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet TrialClinicalDataSetCriterion { get; set; }
+ public virtual DbSet TrialCriterionAdditionalAssessmentType { get; set; }
+
+
//public virtual DbSet TrialClinicalDataCriterion { get; set; }
//public virtual DbSet SystemClinicalDataCriterion { get; set; }
diff --git a/IRaCIS.Core.Test/DbHelper.ttinclude b/IRaCIS.Core.Test/DbHelper.ttinclude
index 956e4eb0c..cc63dbf70 100644
--- a/IRaCIS.Core.Test/DbHelper.ttinclude
+++ b/IRaCIS.Core.Test/DbHelper.ttinclude
@@ -4,7 +4,7 @@
public static readonly string ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_New_Tet;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true";
public static readonly string DbDatabase = "IRaCIS_New_Tet";
//ַ,ƴ
- public static readonly string TableName = "DefaultShortcutKey";
+ public static readonly string TableName = "TrialCriterionAdditionalAssessmentType";
//ļ service Ƿҳ
}
#>