diff --git a/IRaCIS.Core.Application/Resources/en-US.json b/IRaCIS.Core.Application/Resources/en-US.json index 829a4985c..ddbb461e4 100644 --- a/IRaCIS.Core.Application/Resources/en-US.json +++ b/IRaCIS.Core.Application/Resources/en-US.json @@ -39,7 +39,10 @@ //-------------------------------------------------------------------------------------Reading----------------------------------------------------------------- //ClinicalDataSetService + "ClinicalDataSet_Apply": "", "ClinicalDataSet_DupTypeFail": "The same type of clinical data exists. The operation failed.", + //ClinicalQuestionService + "ClinicalQuestion_Repeat": "", //ReadingClinicalDataService "ReadingClinicalData_DupTypeFail": "The same type of clinical data exists. The operation failed.", "ReadingClinicalData_Unchecked": "The current clinical data status is not verified and signing is not allowed!", diff --git a/IRaCIS.Core.Application/Resources/zh-CN.json b/IRaCIS.Core.Application/Resources/zh-CN.json index 30eabe946..1e44d8da2 100644 --- a/IRaCIS.Core.Application/Resources/zh-CN.json +++ b/IRaCIS.Core.Application/Resources/zh-CN.json @@ -39,7 +39,10 @@ // ------------------------------------------------------------Reading-------------------------------------------------------------------- //ClinicalDataSetService + "ClinicalDataSet_Apply": "当前临床数据需要配置一个检查日期才能应用", "ClinicalDataSet_DupTypeFail": "存在同类型的临床数据,操作失败", + //ClinicalQuestionService + "ClinicalQuestion_Repeat": "存在相同的问题名称!", //ReadingClinicalDataService "ReadingClinicalData_DupTypeFail": "存在同类型的临床数据,操作失败", "ReadingClinicalData_Unchecked": "当前临床数据状态不是已核查状态,不允许签名!", diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs index b1bc46252..726d5388f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalDataSetService.cs @@ -2,6 +2,9 @@ using IRaCIS.Core.Application.Service.Reading.Dto; using MassTransit; using IRaCIS.Core.Domain.Models; +using IRaCIS.Core.Application.Interfaces; +using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infrastructure; namespace IRaCIS.Application.Services { @@ -11,7 +14,7 @@ namespace IRaCIS.Application.Services [ApiExplorerSettings(GroupName = "Reading")] public class ClinicalDataSetService : BaseService { - + public IClinicalQuestionService _iClinicalQuestionService; public IRepository _subjectVisitRepository; private readonly IRepository _clinicalDataTrialSetRepository; @@ -19,22 +22,28 @@ namespace IRaCIS.Application.Services private readonly IRepository _previousPDFRepository; private readonly IRepository _dictionaryRepository; private readonly IRepository _trialRepository; - + private readonly IRepository _trialClinicalQuestionRepository; + + private readonly IRepository _systemClinicalQuestionRepository; public ClinicalDataSetService(IRepository subjectVisitRepository, - + IClinicalQuestionService iClinicalQuestionService, IRepository ClinicalDataTrialSetRepository, IRepository ClinicalDataSystemSetRepository, IRepository previousPDFRepository, IRepository dictionaryRepository, - IRepository trialRepository + IRepository trialClinicalQuestionRepository, + IRepository systemClinicalQuestionRepository, + + IRepository trialRepository ) { - + _iClinicalQuestionService = iClinicalQuestionService; _subjectVisitRepository = subjectVisitRepository; - + _trialClinicalQuestionRepository = trialClinicalQuestionRepository; + _systemClinicalQuestionRepository = systemClinicalQuestionRepository; _clinicalDataTrialSetRepository = ClinicalDataTrialSetRepository; _clinicalDataSystemSetRepository = ClinicalDataSystemSetRepository; this._previousPDFRepository = previousPDFRepository; @@ -43,6 +52,58 @@ namespace IRaCIS.Application.Services } + /// + /// 应用系统临床数据 + /// + /// + /// + /// + [HttpPost] + public async Task ApplySystemClinical(ApplySystemClinicalInDto inDto) + { + if (_systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId && x.IsCheckDate).Count() != 1) + { + throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]); + + } + + await _clinicalDataSystemSetRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.SystemClinicalId, x => new ClinicalDataSystemSet() + { + IsApply = true + }); + + + await _clinicalDataSystemSetRepository.SaveChangesAsync(); + + return ResponseOutput.Ok(true); + } + + /// + /// 应用项目临床数据 + /// + /// + /// + /// + [HttpPost] + public async Task ApplyTrialClinical(ApplyTrialClinicalInDto inDto) + { + if (_trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId && x.IsCheckDate).Count() != 1) + { + throw new BusinessValidationFailedException(_localizer["ClinicalDataSet_Apply"]); + + } + + await _clinicalDataTrialSetRepository.UpdatePartialFromQueryAsync(x => x.Id == inDto.TrialClinicalId, x => new ClinicalDataTrialSet() + { + IsApply = true + }); + + + await _clinicalDataTrialSetRepository.SaveChangesAsync(); + + return ResponseOutput.Ok(true); + } + #region 系统 /// @@ -53,7 +114,10 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task AddOrUpdateClinicalDataSystemSet(ClinicalDataSystemSetAddOrEdit indto) { - + if (indto.ClinicalUploadType == ClinicalUploadType.Table || indto.ClinicalUploadType == ClinicalUploadType.PDF) + { + indto.IsApply = true; + } var dictionary = await _dictionaryRepository.Where(x => x.Parent.Code == "ClinicalDataType" && x.Code == indto.ClinicalDataSetEnum.ToString()).FirstNotNullAsync(); indto.ClinicalDataSetName = dictionary.ValueCN; indto.ClinicalDataSetEnName = dictionary.Value; @@ -129,6 +193,12 @@ namespace IRaCIS.Application.Services [HttpPost] public async Task AddOrUpdateClinicalDataTrialSet(ClinicalDataTrialSetAddOrEdit indto) { + + if (indto.ClinicalUploadType == ClinicalUploadType.Table || indto.ClinicalUploadType == ClinicalUploadType.PDF) + { + indto.IsApply = true; + } + var existsQuery = _clinicalDataTrialSetRepository .WhereIf(indto.Id != null, x => x.Id != indto.Id) .Where(x => (x.ClinicalDataSetName == indto.ClinicalDataSetName||x.ClinicalDataSetEnName==indto.ClinicalDataSetEnName) && x.TrialId == indto.TrialId); @@ -260,7 +330,7 @@ namespace IRaCIS.Application.Services //不存在的时候,就将系统数据同步到项目临床数据配置 if (!await _clinicalDataTrialSetRepository.AnyAsync(x => x.TrialId == trialId && x.SystemClinicalDataSetId != null)) { - var systemClinicalDataList = await _clinicalDataSystemSetRepository.AsQueryable().ToListAsync(); + var systemClinicalDataList = await _clinicalDataSystemSetRepository.Where(x=>x.IsApply).AsQueryable().ToListAsync(); var systemIds = systemClinicalDataList.Select(x => x.Id).ToList(); var trialSystemClinicalDataSetIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == trialId && x.SystemClinicalDataSetId != null).Select(x => x.SystemClinicalDataSetId.Value).ToListAsync(); @@ -285,6 +355,7 @@ namespace IRaCIS.Application.Services FileName = x.FileName, Path = x.Path, TrialId = trialId, + IsApply = x.IsApply, //项目不采用 标准枚举字符串的方式 //CriterionEnumListStr=x.CriterionEnumListStr @@ -299,6 +370,13 @@ namespace IRaCIS.Application.Services var result = await _clinicalDataTrialSetRepository.SaveChangesAsync(); + + await _iClinicalQuestionService.SynchronizationQuestion(dataSets.Select(x => new SynchronizationQuestionDto() + { + SystemClinicalId = x.SystemClinicalDataSetId.Value, + TrialClinicalId = x.Id, + + }).ToList()); } #endregion diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs index 316b1c952..6d593a1ed 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ClinicalQuestionService.cs @@ -9,17 +9,19 @@ using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Application.Service.Reading.Dto; using IRaCIS.Core.Infra.EFCore.Common; +using IRaCIS.Core.Domain.Share; +using MassTransit; namespace IRaCIS.Core.Application.Service { /// /// 临床数据问题 /// - [ ApiExplorerSettings(GroupName = "Reading")] - public class ClinicalQuestionService: BaseService + [ApiExplorerSettings(GroupName = "Reading")] + public class ClinicalQuestionService : BaseService, IClinicalQuestionService { - private readonly IRepository _trialClinicalQuestionRepository; + private readonly IRepository _trialClinicalQuestionRepository; private readonly IRepository _systemClinicalQuestionRepository; @@ -33,11 +35,11 @@ namespace IRaCIS.Core.Application.Service IRepository trialClinicalTableQuestionRepository, IRepository systemClinicalQuestionRepository ) - { + { _systemClinicalTableQuestionRepository = systemClinicalTableQuestionRepository; _trialClinicalQuestionRepository = trialClinicalQuestionRepository; _trialClinicalTableQuestionRepository = trialClinicalTableQuestionRepository; - _systemClinicalQuestionRepository = systemClinicalQuestionRepository; + _systemClinicalQuestionRepository = systemClinicalQuestionRepository; } @@ -52,8 +54,8 @@ namespace IRaCIS.Core.Application.Service public async Task> GetTrialClinicalQuestionList(TrialClinicalQuestionQuery inQuery) { - var trialClinicalQuestionQueryable =_trialClinicalQuestionRepository - .WhereIf(!inQuery.QuestionName.IsNullOrEmpty(),x=>x.QuestionName.Contains(inQuery.QuestionName)||x.QuestionEnName.Contains(inQuery.QuestionName)) + var trialClinicalQuestionQueryable = _trialClinicalQuestionRepository + .WhereIf(!inQuery.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inQuery.QuestionName) || x.QuestionEnName.Contains(inQuery.QuestionName)) .ProjectTo(_mapper.ConfigurationProvider); var pageList = await trialClinicalQuestionQueryable .ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(TrialClinicalQuestion.ShowOrder) : inQuery.SortField, @@ -70,6 +72,11 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task AddOrUpdateTrialClinicalQuestion(TrialClinicalQuestionDto inDto) { + if (await _trialClinicalQuestionRepository.AnyAsync(x =>x.TrialClinicalId==inDto.TrialClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName)) + { + return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]); + } + var entity = await _trialClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); @@ -95,10 +102,26 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task> GetTrialClinicalGroupQuestionList(GetTrialGroupDto inDto) { - return await this._trialClinicalQuestionRepository.Where(x=>x.TrialClinicalId== inDto.TrialClinicalId) + return await this._trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId&&x.ClinicalQuestionType== "group") .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); } + /// + /// 获取项目标准其他问题 + /// + /// + /// + [HttpPost] + public async Task> GetTrialClinicalOtherQuestionList(GetTrialGroupDto inDto) + { + var types = new List() + { + "select","radio" + }; + return await this._trialClinicalQuestionRepository.Where(x => x.TrialClinicalId == inDto.TrialClinicalId && types.Contains( x.ClinicalQuestionType)) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + } + #endregion @@ -131,6 +154,11 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task AddOrUpdateSystemClinicalQuestion(SystemClinicalQuestionDto inDto) { + + if (await _systemClinicalQuestionRepository.AnyAsync(x => x.SystemClinicalId == inDto.SystemClinicalId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName)) + { + return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]); + } var entity = await _systemClinicalQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); @@ -158,9 +186,28 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task> GetSystemClinicalGroupQuestionList(GetSystemGroupDto inDto) { - return await this._systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId) + return await this._systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId && x.ClinicalQuestionType =="group") .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); } + + + /// + /// 获取系统其他问题 + /// + /// + /// + [HttpPost] + public async Task> GetSystemClinicalOtherQuestionList(GetSystemGroupDto inDto) + { + var types = new List() + { + "select","radio" + }; + return await this._systemClinicalQuestionRepository.Where(x => x.SystemClinicalId == inDto.SystemClinicalId && types.Contains(x.ClinicalQuestionType)) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + } + + #endregion #region 系统表格问题 @@ -175,7 +222,7 @@ namespace IRaCIS.Core.Application.Service { var systemClinicalTableQuestionQueryable = this._systemClinicalTableQuestionRepository - .Where(x=>x.QuestionId==inQuery.QuestionId) + .Where(x => x.QuestionId == inQuery.QuestionId) .ProjectTo(_mapper.ConfigurationProvider); var pageList = await systemClinicalTableQuestionQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(SystemClinicalTableQuestion.ShowOrder) : inQuery.SortField, @@ -193,7 +240,11 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task AddOrUpdateSystemClinicalTableQuestion(SystemClinicalTableQuestionDto inDto) { - + if (await _systemClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName)) + { + return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]); + } + var entity = await _systemClinicalTableQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); @@ -205,7 +256,7 @@ namespace IRaCIS.Core.Application.Service /// /// /// - [HttpDelete("{id:guid}")] + [HttpPost("{id:guid}")] public async Task DeleteSystemClinicalTableQuestion(Guid id) { var success = await _systemClinicalTableQuestionRepository.DeleteFromQueryAsync(t => t.Id == id, true); @@ -244,7 +295,10 @@ namespace IRaCIS.Core.Application.Service [HttpPost] public async Task AddOrUpdateTrialClinicalTableQuestion(TrialClinicalTableQuestionDto inDto) { - + if (await _trialClinicalTableQuestionRepository.AnyAsync(x => x.QuestionId == inDto.QuestionId && x.Id != inDto.Id && x.QuestionName == inDto.QuestionName)) + { + return ResponseOutput.NotOk(_localizer["ClinicalQuestion_Repeat"]); + } var entity = await _trialClinicalTableQuestionRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); @@ -256,7 +310,7 @@ namespace IRaCIS.Core.Application.Service /// /// /// - [HttpDelete("{id:guid}")] + [HttpPost("{id:guid}")] public async Task DeleteTrialClinicalTableQuestion(Guid id) { var success = await _trialClinicalTableQuestionRepository.DeleteFromQueryAsync(t => t.Id == id, true); @@ -264,5 +318,127 @@ namespace IRaCIS.Core.Application.Service } #endregion + + #region 同步系统问题 + + /// + /// 同步系统问题 + /// + /// + /// + public async Task SynchronizationQuestion(List inDto) + { + var trialClinicalId = inDto.Select(x => x.TrialClinicalId).ToList(); + + var systemClinicalId = inDto.Select(x => x.SystemClinicalId).ToList(); + var questionRelationList =await _trialClinicalQuestionRepository.Where(x => trialClinicalId.Contains(x.TrialClinicalId)).Select(x => new QuestionDic() + { + SystemQuestionId=x.SystemClinicalQuestionId?? default(Guid), + TrialQuestionId=x.Id, + TrialClinicalId=x.TrialClinicalId, + }).ToListAsync(); + + var tableQuestionRelationList = await _trialClinicalTableQuestionRepository.Where(x => trialClinicalId.Contains(x.TrialClinicalId)).Select(x => new QuestionDic() + { + SystemQuestionId = x.SystemTableQuestionId ?? default(Guid), + TrialQuestionId = x.Id, + TrialClinicalId = x.TrialClinicalId, + }).ToListAsync(); + + var newTrialQuestionAll = await _systemClinicalQuestionRepository.Where(x => systemClinicalId.Contains(x.SystemClinicalId)) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + var newTrialTableQuestionAll = await _systemClinicalTableQuestionRepository.Where(x => systemClinicalId.Contains(x.SystemClinicalId)) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + + + List addTrialDataList = new List(); + List addTrialTableList = new List(); + foreach (var item in inDto) + { + var questionRelation = questionRelationList.Where(x=>x.TrialClinicalId==item.TrialClinicalId).ToDictionary( + x => x.SystemQuestionId, + x => x.TrialQuestionId + ); + + var newTrialQuestionList = newTrialQuestionAll.Where(x => x.SystemClinicalQuestionId == item.SystemClinicalId).ToList(); + newTrialQuestionList.ForEach(x => + { + if (questionRelation.ContainsKey(x.Id)) + { + x.Id = questionRelation[x.Id]; + } + else + { + var newid = NewId.NextGuid(); + questionRelation.Add(x.Id, newid); + x.Id = newid; + } + + x.TrialClinicalId = item.TrialClinicalId; + }); + + var copyNewQuestionList = newTrialQuestionList.Clone(); + foreach (var x in newTrialQuestionList) + { + var question = x.Clone(); + if (question.ParentId != null) + { + question.ParentId = questionRelation[question.ParentId ?? default(Guid)]; + } + if (question.GroupId != null) + { + question.GroupId = questionRelation[question.GroupId ?? default(Guid)]; + } + addTrialDataList.Add(question); + }; + + + + var tableQuestionRelation = tableQuestionRelationList.Where(x => x.TrialClinicalId == item.TrialClinicalId).ToDictionary( + x => x.SystemQuestionId, + x => x.TrialQuestionId + ); + + var newTrialTableQuestionList = newTrialTableQuestionAll.Where(x => x.TrialClinicalId == item.TrialClinicalId) + .ToList(); + + + newTrialTableQuestionList.ForEach(x => + { + if (tableQuestionRelation.ContainsKey(x.Id)) + { + x.Id = tableQuestionRelation[x.Id]; + } + else + { + var newid = NewId.NextGuid(); + tableQuestionRelation.Add(x.Id, newid); + x.Id = newid; + } + }); + + foreach (var x in newTrialTableQuestionList) + { + var tableQuestion = x.Clone(); + tableQuestion.TrialClinicalId = item.TrialClinicalId; + + tableQuestion.QuestionId = copyNewQuestionList.Where(y => y.SystemClinicalQuestionId == x.QuestionId).Select(y => y.Id).FirstOrDefault(); + + + addTrialTableList.Add(tableQuestion); + } + } + + + await _trialClinicalQuestionRepository.BatchDeleteNoTrackingAsync(x => trialClinicalId.Contains(x.TrialClinicalId)); + await _trialClinicalQuestionRepository.AddRangeAsync(addTrialDataList); + await _trialClinicalTableQuestionRepository.BatchDeleteNoTrackingAsync(x => trialClinicalId.Contains(x.TrialClinicalId) ); + await _trialClinicalTableQuestionRepository.AddRangeAsync(addTrialTableList); + } + + + #endregion + } -} +} diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs index 672467388..8e0dd533f 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalDataServiceViewModel.cs @@ -13,6 +13,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public Guid? Id { get; set; } + /// + /// 是否应用 + /// + public bool IsApply { get; set; } = false; /// /// 名称 @@ -73,10 +77,23 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto //public List CriterionEnumList { get; set; } } + public class ApplySystemClinicalInDto + { + public Guid SystemClinicalId { get; set; } + } + + public class ApplyTrialClinicalInDto + { + public Guid TrialClinicalId { get; set; } + } public class ClinicalDataSystemSetAddOrEdit { public Guid? Id { get; set; } + /// + /// 是否应用 + /// + public bool IsApply { get; set; } = false; /// /// 枚举 diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs index bc469e571..d6bce9130 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ClinicalQuestionDto.cs @@ -32,7 +32,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 临床问题类型(分组,单选。) /// - public ClinicalQuestionType ClinicalQuestionTypeEnum { get; set; } + public string ClinicalQuestionType { get; set; } /// /// 问题标识 @@ -88,6 +88,21 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// 显示类型 /// public ClinicalQuestionShow ClinicalQuestionShowEnum { get; set; } = ClinicalQuestionShow.Show; + + /// + /// 是否是检查日期 + /// + public bool IsCheckDate { get; set; } + + /// + /// 小数点位数 + /// + public int? DigitPlaces { get; set; } + + /// + /// 单位 + /// + public string Unit { get; set; } = string.Empty; } /// @@ -192,7 +207,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// /// 临床问题类型(分组,单选。) /// - public ClinicalTableQuestionType ClinicalTableQuestionTypeEnum { get; set; } + public string ClinicalTableQuestionType { get; set; } /// /// 问题标识 @@ -243,6 +258,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto /// 外层问题Id /// public Guid QuestionId { get; set; } + + /// + /// 小数点位数 + /// + public int? DigitPlaces { get; set; } + + /// + /// 单位 + /// + public string Unit { get; set; } = string.Empty; } @@ -314,8 +339,38 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { } - - #endregion + + #region 同步临床数据 + + public class SynchronizationQuestionDto + { + /// + /// 系统临床数据Id + /// + public Guid SystemClinicalId { get; set; } + + + + /// + /// 项目临床数据Id + /// + public Guid TrialClinicalId { get; set; } + } + + + public class QuestionDic + { + public Guid SystemQuestionId { get; set; } + + public Guid TrialQuestionId { get; set; } + + /// + /// 项目临床数据Id + /// + public Guid TrialClinicalId { get; set; } + } + + #endregion } diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalQuestionService.cs new file mode 100644 index 000000000..f61454573 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IClinicalQuestionService.cs @@ -0,0 +1,25 @@ +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 byzhouhang 20210918 +// 生成时间 2022-08-12 14:07:43 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- + +using IRaCIS.Core.Application.Service.Reading.Dto; +using IRaCIS.Core.Application.ViewModel; +namespace IRaCIS.Core.Application.Interfaces +{ + /// + /// IClinicalQuestionService + /// + public interface IClinicalQuestionService + { + + + Task SynchronizationQuestion(List inDto); + + + + + + } +} diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs index 0c940d0b3..4e227fb40 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingCriterion/ReadingQuestionService.cs @@ -980,7 +980,7 @@ namespace IRaCIS.Application.Services x.TrialId = trialCriterion.TrialId; }); var copyNewQuestionList = newTrialQuestionList.Clone(); - var trialQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id).ToListAsync(); + // var trialQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id).ToListAsync(); var needAddDatas = new List(); foreach (var x in newTrialQuestionList) diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingTaskQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingTaskQuestionService.cs index cb7a3935e..874a2545f 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingTaskQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingTaskQuestionService.cs @@ -107,7 +107,7 @@ namespace IRaCIS.Application.Services { qusetionList = qusetionList.Where(x => x.ReadingCriterionPageId == null).ToList(); - groupList = qusetionList.Where(x => x.Type == ReadingQestionType.Group || (x.ParentId == null && x.GroupName.IsNullOrEmpty())).ToList(); + groupList = qusetionList.Where(x => x.Type == ReadingQestionType.Group || (x.ParentId == null && x.GroupId==null)).ToList(); groupList.ForEach(x => { this.FindChildQuestion(x, qusetionList, tableQuestionList); @@ -152,7 +152,7 @@ namespace IRaCIS.Application.Services TrialId = data.TrialId, Type = data.Type, ParentTriggerValue = data.ParentTriggerValue, - GroupName = data.GroupName, + GroupName = data.GroupName.LanguageName(data.GroupEnName, _userInfo.IsEn_Us), QuestionName = data.QuestionName.LanguageName(data.QuestionEnName, _userInfo.IsEn_Us), IsRequired = data.IsRequired, ShowQuestion = data.ShowQuestion, @@ -196,7 +196,7 @@ namespace IRaCIS.Application.Services [NonDynamicMethod] public void FindChildQuestion(GetTrialReadingQuestionOutDto item, List questionlists, List tableQuestions) { - item.Childrens = questionlists.Where(x => x.ParentId == item.Id || (item.Type == ReadingQestionType.Group && x.Type != ReadingQestionType.Group && x.ParentId == null && x.GroupName == item.GroupName)).ToList(); + item.Childrens = questionlists.Where(x => x.ParentId == item.Id || (item.Type == ReadingQestionType.Group && x.Type != ReadingQestionType.Group && x.ParentId == null && x.GroupId == item.Id)).ToList(); item.Childrens.AddRange(tableQuestions.Where(x => x.ReadingQuestionId == item.Id).Select(x => new GetTrialReadingQuestionOutDto diff --git a/IRaCIS.Core.Application/Service/Reading/ShortcutKey/ShortcutKeyService.cs b/IRaCIS.Core.Application/Service/Reading/ShortcutKey/ShortcutKeyService.cs index dc1592d23..6b484c41e 100644 --- a/IRaCIS.Core.Application/Service/Reading/ShortcutKey/ShortcutKeyService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ShortcutKey/ShortcutKeyService.cs @@ -64,7 +64,7 @@ namespace IRaCIS.Core.Application.Service AltKey = isnull ? false : key.AltKey, CtrlKey = isnull ? false : key.CtrlKey, MetaKey = isnull ? false : key.MetaKey, - ShiftKey = isnull ? false : key.ShiftKey, + ShiftKey = isnull && int.Parse(x.Code) == 11 ? true : isnull ? false : key.ShiftKey, Text = isnull ? defaultkey.Text : key.Text, Code = isnull ? defaultkey.Code : key.Code, }); diff --git a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs index d1c6e3868..2ea05fb7c 100644 --- a/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/Reading/_MapConfig.cs @@ -29,6 +29,13 @@ namespace IRaCIS.Core.Application.Service CreateMap(); CreateMap(); + + CreateMap() + .ForMember(d => d.SystemClinicalQuestionId, u => u.MapFrom(s => s.Id)); + + CreateMap() + .ForMember(d => d.SystemTableQuestionId, u => u.MapFrom(s => s.Id)); + #endregion CreateMap(); diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 975ff7279..64b2ce88a 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -21,6 +21,7 @@ namespace IRaCIS.Core.Domain.Share /// public enum ClinicalTableQuestionMark { + Test=1, } /// diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataSystemSet.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataSystemSet.cs index 2bbf6687e..12bf5729d 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataSystemSet.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataSystemSet.cs @@ -26,10 +26,15 @@ namespace IRaCIS.Core.Domain.Models /// public string ClinicalDataSetName { get; set; } - /// - /// 英文名称 - /// - public string ClinicalDataSetEnName { get; set; } = string.Empty; + /// + /// 是否应用 + /// + public bool IsApply { get; set; } = false; + + /// + /// 英文名称 + /// + public string ClinicalDataSetEnName { get; set; } = string.Empty; /// /// 临床级别 diff --git a/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs b/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs index 882aec273..fef381af9 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalData/ClinicalDataTrialSet.cs @@ -63,6 +63,12 @@ namespace IRaCIS.Core.Domain.Models /// public bool IsConfirm { get; set; } + + /// + /// 是否应用 + /// + public bool IsApply { get; set; } = false; + /// /// 上传角色 /// diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs index 50e7e5fce..43ea5b35f 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalQuestion.cs @@ -35,7 +35,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 临床问题类型(分组,单选。) /// - public ClinicalQuestionType ClinicalQuestionTypeEnum { get; set; } + public string ClinicalQuestionType { get; set; } /// /// 问题标识 @@ -102,6 +102,20 @@ namespace IRaCIS.Core.Domain.Models /// public ClinicalQuestionShow ClinicalQuestionShowEnum { get; set; } = ClinicalQuestionShow.Show; + /// + /// 是否是检查日期 + /// + public bool IsCheckDate { get; set; } + + /// + /// 小数点位数 + /// + public int? DigitPlaces { get; set; } + + /// + /// 单位 + /// + public string Unit { get; set; } = string.Empty; } diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalTableQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalTableQuestion.cs index 8a7eccaed..97b019d28 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalTableQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/SystemClinicalTableQuestion.cs @@ -33,7 +33,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 临床问题类型(分组,单选。) /// - public ClinicalTableQuestionType ClinicalTableQuestionTypeEnum { get; set; } + public string ClinicalTableQuestionType { get; set; } /// /// 问题标识 @@ -84,8 +84,18 @@ namespace IRaCIS.Core.Domain.Models /// 外层问题Id /// public Guid QuestionId { get; set; } - - } + + /// + /// 小数点位数 + /// + public int? DigitPlaces { get; set; } + + /// + /// 单位 + /// + public string Unit { get; set; } = string.Empty; + + } } diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs index 81f1e4da6..994c4ac14 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalQuestion.cs @@ -35,7 +35,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 临床问题类型(分组,单选。) /// - public ClinicalQuestionType ClinicalQuestionTypeEnum { get; set; } + public string ClinicalQuestionType { get; set; } /// /// 问题标识 @@ -107,6 +107,11 @@ namespace IRaCIS.Core.Domain.Models /// public ClinicalQuestionShow ClinicalQuestionShowEnum { get; set; } = ClinicalQuestionShow.Show; + /// + /// 是否是检查日期 + /// + public bool IsCheckDate { get; set; } + /// /// 自定义计算标记 /// @@ -116,6 +121,16 @@ namespace IRaCIS.Core.Domain.Models /// 自定义计算问题 /// public string CalculateQuestions { get; set; } = "[]"; + + /// + /// 小数点位数 + /// + public int? DigitPlaces { get; set; } + + /// + /// 单位 + /// + public string Unit { get; set; } = string.Empty; } diff --git a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalTableQuestion.cs b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalTableQuestion.cs index 129dc32a5..0cf0e675e 100644 --- a/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalTableQuestion.cs +++ b/IRaCIS.Core.Domain/Reading/ClinicalQuestion/TrialClinicalTableQuestion.cs @@ -33,7 +33,7 @@ namespace IRaCIS.Core.Domain.Models /// /// 临床问题类型(分组,单选。) /// - public ClinicalTableQuestionType ClinicalTableQuestionTypeEnum { get; set; } + public string ClinicalTableQuestionType { get; set; } /// /// 问题标识 @@ -85,6 +85,11 @@ namespace IRaCIS.Core.Domain.Models /// public Guid QuestionId { get; set; } + /// + /// 系统表格问题Id + /// + public Guid? SystemTableQuestionId { get; set; } + /// /// 自定义计算标记 /// @@ -95,6 +100,16 @@ namespace IRaCIS.Core.Domain.Models /// public string CalculateQuestions { get; set; } = "[]"; + /// + /// 小数点位数 + /// + public int? DigitPlaces { get; set; } + + /// + /// 单位 + /// + public string Unit { get; set; } = string.Empty; + }