diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs index 57c1f8329..da05ba48e 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/TrialConfigDTO.cs @@ -126,14 +126,14 @@ namespace IRaCIS.Core.Application.Contracts public bool? IsClinicalReading { get; set; } - + public int? DigitPlaces { get; set; } - // ////读片任务显示是否顺序 - //// public bool IsReadingTaskViewInOrder { get; set; } = false; + // ////读片任务显示是否顺序 + //// public bool IsReadingTaskViewInOrder { get; set; } = false; /// @@ -188,7 +188,7 @@ namespace IRaCIS.Core.Application.Contracts /// public bool IsTrialProcessConfirmed { get; set; } = false; - + //阅片方式 public int ReadingMode { get; set; } @@ -205,7 +205,7 @@ namespace IRaCIS.Core.Application.Contracts public ArbitrationRule ArbitrationRule { get; set; } - + } @@ -230,7 +230,7 @@ namespace IRaCIS.Core.Application.Contracts /// /// 阅片是否显示受试者信息 /// - public bool IsReadingShowSubjectInfo { get; set; } + public bool IsReadingShowSubjectInfo { get; set; } /// /// 阅片是否显示既往结果 @@ -269,7 +269,7 @@ namespace IRaCIS.Core.Application.Contracts /// /// 阅片是否显示既往结果 /// - public bool IsReadingShowPreviousResults { get; set; } + public bool IsReadingShowPreviousResults { get; set; } } public class TrialJudgeTaskConfig @@ -302,7 +302,7 @@ namespace IRaCIS.Core.Application.Contracts public bool IsPDProgressView { get; set; } - + } @@ -425,8 +425,10 @@ namespace IRaCIS.Core.Application.Contracts /// public DateTime? ReadingInfoSignTime { get; set; } - public bool IsSign { - get { + public bool IsSign + { + get + { return this.ReadingInfoSignTime != null; } } @@ -479,6 +481,9 @@ namespace IRaCIS.Core.Application.Contracts public bool IsAutoCreate { get; set; } + public List TrialCriterionAdditionalAssessmentTypeList { get; set; } = new List(); + + } @@ -524,7 +529,7 @@ namespace IRaCIS.Core.Application.Contracts public Guid CreateUserId { get; set; } } - public class TrialReadQuestion :ReadingQuestionTrial + public class TrialReadQuestion : ReadingQuestionTrial { /// /// 分页名称 @@ -552,11 +557,11 @@ namespace IRaCIS.Core.Application.Contracts public int? ParentQuestionShowOrder { get; set; } - + } - public class TrialAdditionaQuestion: TrialReadQuestion + public class TrialAdditionaQuestion : TrialReadQuestion { public List Childrens { get; set; } = new List(); public string Answer { get; set; } = string.Empty; @@ -565,7 +570,7 @@ namespace IRaCIS.Core.Application.Contracts public class TrialJudgeQuestion { - + public Guid ReadingQuestionCriterionTrialId { get; set; } public Guid QuestionId { get; set; } @@ -722,7 +727,7 @@ namespace IRaCIS.Core.Application.Contracts public string EvaluationReason { get; set; } = string.Empty; - + } public class GetGlobalReadingOutDto @@ -771,7 +776,7 @@ namespace IRaCIS.Core.Application.Contracts /// /// IsBaseLineUse /// - public bool IsBaseLineUse { get; set; } + public bool IsBaseLineUse { get; set; } /// /// IsBaseUse @@ -793,7 +798,7 @@ namespace IRaCIS.Core.Application.Contracts [NotDefault] public Guid TrialReadingCriterionId { get; set; } - + } public class SetTrialReadingCriterionInDto @@ -801,7 +806,7 @@ namespace IRaCIS.Core.Application.Contracts public Guid TrialReadingCriterionId { get; set; } - + /// /// 表单类型 @@ -905,7 +910,7 @@ namespace IRaCIS.Core.Application.Contracts /// public bool IsReadingShowPreviousResults { get; set; } - + /// /// 仲裁规则/对象 @@ -935,6 +940,8 @@ namespace IRaCIS.Core.Application.Contracts /// public bool IsOncologyReading { get; set; } + public List TrialCriterionAdditionalAssessmentTypeList { get; set; }=new List(); + } public class SignConfirmDTO diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 9259b46b9..e2a0e7997 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -19,6 +19,7 @@ using static IRaCIS.Core.Domain.Share.StaticData; using IRaCIS.Core.Application.Service; using DocumentFormat.OpenXml.Office.CustomUI; using IRaCIS.Core.Application.Service; +using IRaCIS.Core.Domain.Models; namespace IRaCIS.Core.Application { @@ -178,8 +179,6 @@ namespace IRaCIS.Core.Application public async Task GetCriterionReadingInfo(GetTrialReadingInfoInDto inDto) { - - GetTrialReadingInfoOutDto trialInfo = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == inDto.TrialReadingCriterionId).ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); if (trialInfo.ReadingTool == null) @@ -187,6 +186,9 @@ namespace IRaCIS.Core.Application trialInfo.ReadingTool = ReadingTool.Dicom; } + trialInfo.TrialCriterionAdditionalAssessmentTypeList = await _trialCriterionAdditionalAssessmentTypeRepository.Where(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId).ToListAsync(); + + return trialInfo; } @@ -206,6 +208,28 @@ namespace IRaCIS.Core.Application if (trialCriterion.SynchronizeOriginalTime == null) { + + //同步附加评估类型 + + if (!await _trialCriterionAdditionalAssessmentTypeRepository.AnyAsync(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) + { + AdditionalAssessment additional = new AdditionalAssessment(); + var addList = additional.GetSystemDefeaultAdditionalAssessmentList(trialCriterion.CriterionType); + + foreach (var addItem in addList) + { + await _trialCriterionAdditionalAssessmentTypeRepository.AddAsync(new TrialCriterionAdditionalAssessmentType() + { + CriterionType = trialCriterion.CriterionType, + TrialReadingCriterionId = inDto.TrialReadingCriterionId, + AdditionalAssessmentType = addItem.AdditionalAssessmentType + }); + } + } + + + + // 同步器官 await _iOrganInfoService.SynchronizeSystemOrganToTrial(new SynchronizeSystemOrganToTrialInDto() { @@ -304,11 +328,6 @@ namespace IRaCIS.Core.Application public async Task SetGlobalReadingInfo(SetGlobalReadingInfoInDto inDto) { - //await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial() - //{ - // IsGlobalReading = inDto.IsGlobalReading - - //}); await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == inDto.TrialReadingCriterionId && x.ParentCode == ReadingCommon.CriterionDictionary.GlobalAssess); await _readingCriterionDictionaryRepository.AddRangeAsync(inDto.GlobalAssessList.Select(x => new ReadingCriterionDictionary { @@ -506,7 +525,7 @@ namespace IRaCIS.Core.Application if (count == 0) { - //---当前标准下未配置问题 + //---当前标准下未配置问题 throw new BusinessValidationFailedException(_localizer["TrialConfig_StdConfigMissing"]); } } @@ -565,24 +584,68 @@ namespace IRaCIS.Core.Application }); - //判断是否存在附加评估,存在,就将标准对应的附加评估选项加进去 + //判断是否存在附加评估 if (inDto.IsAdditionalAssessment) { - if (!await _trialCriterionAdditionalAssessmentTypeRepository.AnyAsync(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) - { - AdditionalAssessment additional = new AdditionalAssessment(); - var addList = additional.GetSystemDefeaultAdditionalAssessmentList(inDto.CriterionType); + #region 存在,就将标准对应的附加评估选项加进去--废弃 修改到同步标准的地方去了,不管存在附加评估与否,都增加附加评估类型 + //if (!await _trialCriterionAdditionalAssessmentTypeRepository.AnyAsync(t => t.TrialReadingCriterionId == inDto.TrialReadingCriterionId)) + //{ + // AdditionalAssessment additional = new AdditionalAssessment(); + // var addList = additional.GetSystemDefeaultAdditionalAssessmentList(inDto.CriterionType); - foreach (var addItem in addList) + // foreach (var addItem in addList) + // { + // await _trialCriterionAdditionalAssessmentTypeRepository.AddAsync(new TrialCriterionAdditionalAssessmentType() + // { + // CriterionType = inDto.CriterionType, + // TrialReadingCriterionId = inDto.TrialReadingCriterionId, + // AdditionalAssessmentType = addItem.AdditionalAssessmentType + // }); + // } + //} + #endregion + + + if (inDto.TrialCriterionAdditionalAssessmentTypeList.All(t => t.IsSelected != true)) + { + throw new BusinessValidationFailedException("选择了附加评估,必须勾选附加评估类型"); + } + + var trialId = _readingQuestionTrialRepository.Where(t => t.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).Select(t => t.TrialId).FirstOrDefault(); + + + if (inDto.TrialCriterionAdditionalAssessmentTypeList.Count != 0) + { + foreach (var updateItem in inDto.TrialCriterionAdditionalAssessmentTypeList) { - await _trialCriterionAdditionalAssessmentTypeRepository.AddAsync(new TrialCriterionAdditionalAssessmentType() + if (updateItem.IsSelected == true) { - CriterionType = inDto.CriterionType, - TrialReadingCriterionId = inDto.TrialReadingCriterionId, - AdditionalAssessmentType = addItem.AdditionalAssessmentType - }); + //添加默认问题 + AdditionalAssessment additional = new AdditionalAssessment(); + var addTypeList = additional.GetSystemDefeaultAdditionalAssessmentList(updateItem.CriterionType, updateItem.AdditionalAssessmentType); + + foreach (var addType in addTypeList) + { + foreach (var question in addType.AdditionalQuestionList) + { + question.ReadingQuestionCriterionTrialId = updateItem.TrialReadingCriterionId; + question.TrialId = trialId; + + 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 }); } } + } else { @@ -601,6 +664,7 @@ namespace IRaCIS.Core.Application /// /// /// + [Obsolete] public async Task> GetTrialCriterionAdditionalAssessmentOptionList(Guid trialReadingCriterionId) { return await _trialCriterionAdditionalAssessmentTypeRepository.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).ToListAsync(); @@ -612,6 +676,7 @@ namespace IRaCIS.Core.Application /// /// /// + [Obsolete] public async Task SetTrialCriterionAdditionalAssessment(List updateList) { @@ -620,7 +685,8 @@ namespace IRaCIS.Core.Application return ResponseOutput.Ok(); } - var trialId= _readingQuestionTrialRepository.Where(t=>t.ReadingQuestionCriterionTrialId==updateList.First().TrialReadingCriterionId).Select(t=>t.TrialId).FirstOrDefault(); + var trialId = _readingQuestionTrialRepository.Where(t => t.ReadingQuestionCriterionTrialId == updateList.First().TrialReadingCriterionId).Select(t => t.TrialId).FirstOrDefault(); + foreach (var updateItem in updateList) { if (updateItem.IsSelected == true) @@ -716,7 +782,7 @@ namespace IRaCIS.Core.Application { if (showOrderList.Count == 0) { - //---当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。 + //---当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。 throw new BusinessValidationFailedException(_localizer["TrialConfig_NoImageAuditQuestion"]); } } @@ -786,26 +852,26 @@ namespace IRaCIS.Core.Application { if (showOrderList.Count == 0) { - //---当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。 + //---当前未添加影像质控审核问题。请先添加影像质控审核问题,再进行确认。 throw new BusinessValidationFailedException(_localizer["TrialConfig_NoImageAuditQuestion"]); } } if (showOrderList.Count() != showOrderList.Select(t => t.ShowOrder).Distinct().Count()) { - //---影像质控审核问题显示序号不能重复。 + //---影像质控审核问题显示序号不能重复。 throw new BusinessValidationFailedException(_localizer["TrialConfig_DuplicateAuditQuestionId"]); } if (showOrderList.Where(t => t.ParentShowOrder != null).Any(t => t.ParentShowOrder > t.ShowOrder)) { - //---父问题的显示序号要比子问题的显示序号小,请确认。 + //---父问题的显示序号要比子问题的显示序号小,请确认。 throw new BusinessValidationFailedException(_localizer["TrialConfig_InvalidParentQuestionId"]); } if (await _trialRepository.AnyAsync(t => t.Id == signConfirmDTO.TrialId && t.QCQuestionConfirmedUserId != null && t.QCQuestionConfirmedUserId != _userInfo.Id)) { - //---影像质控审核问题已被其他人员确认,不允许再次确认。 + //---影像质控审核问题已被其他人员确认,不允许再次确认。 throw new BusinessValidationFailedException(_localizer["TrialConfig_AuditQuestionConfirmed"]); } @@ -965,7 +1031,7 @@ namespace IRaCIS.Core.Application var canOPt = await _trialRepository.AnyAsync(trial => trial.Id == trialId && trial.IsTrialBasicLogicConfirmed && trial.IsTrialProcessConfirmed && trial.IsTrialUrgentConfirmed && trial.VisitPlanConfirmed); - //---该项目的项目配置(基础配置、流程配置、加急配置) 、访视管理,有配置未确认,不能设置项目状态为启动。 + //---该项目的项目配置(基础配置、流程配置、加急配置) 、访视管理,有配置未确认,不能设置项目状态为启动。 return ResponseOutput.Ok(canOPt, msg: canOPt ? "" : _localizer["TrialConfig_UnconfirmedConfiguration"]); } @@ -993,7 +1059,7 @@ namespace IRaCIS.Core.Application } else { - //---无法变更项目状态。该项目的项目配置、访视管理中,有未确认项 + //---无法变更项目状态。该项目的项目配置、访视管理中,有未确认项 return ResponseOutput.NotOk(_localizer["TrialConfig_UnconfirmedUNACKD"]); } }