From 707e55fe31da0756166d6413ffc89a4aa84bf82f Mon Sep 17 00:00:00 2001 From: he <10978375@qq.com> Date: Tue, 7 Feb 2023 10:45:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=97=E5=85=B8=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/DictionaryService.cs | 55 +++++++++++++++++++ .../TrialSiteUser/TrialConfigService.cs | 55 +++++++++++++++---- 2 files changed, 99 insertions(+), 11 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Common/DictionaryService.cs b/IRaCIS.Core.Application/Service/Common/DictionaryService.cs index f1ae431fe..553e0f356 100644 --- a/IRaCIS.Core.Application/Service/Common/DictionaryService.cs +++ b/IRaCIS.Core.Application/Service/Common/DictionaryService.cs @@ -21,14 +21,20 @@ namespace IRaCIS.Application.Services private readonly IRepository _doctorRepository; private readonly IRepository _trialRepository; private readonly IRepository _systemCriterionDictionaryCodeRepository; + private readonly IRepository _trialCriterionDictionaryCode; private readonly IRepository _readingCriterionDictionaryRepository; + private readonly IRepository _readingQuestionCriterionSystem; + private readonly IRepository _readingQuestionCriterionTrial; private readonly IReadingQuestionService _readingQuestionService; public DictionaryService(IRepository sysDicRepository, IRepository doctorDictionaryRepository, IRepository trialDictionaryRepository, IRepository doctorRepository, IRepository trialRepository, IRepository systemCriterionDictionaryCodeRepository, + IRepository trialCriterionDictionaryCode, IRepository readingCriterionDictionaryRepository, + IRepository readingQuestionCriterionSystem, + IRepository readingQuestionCriterionTrial, IReadingQuestionService readingQuestionService @@ -40,7 +46,10 @@ namespace IRaCIS.Application.Services _doctorRepository = doctorRepository; _trialRepository = trialRepository; this._systemCriterionDictionaryCodeRepository = systemCriterionDictionaryCodeRepository; + this._trialCriterionDictionaryCode = trialCriterionDictionaryCode; this._readingCriterionDictionaryRepository = readingCriterionDictionaryRepository; + this._readingQuestionCriterionSystem = readingQuestionCriterionSystem; + this._readingQuestionCriterionTrial = readingQuestionCriterionTrial; this._readingQuestionService = readingQuestionService; } @@ -276,6 +285,31 @@ namespace IRaCIS.Application.Services } else { + List selectCode = new List(); + + var isSystemCriterion = await _readingQuestionCriterionSystem.AnyAsync(x => x.Id == inDto.ReadingCriterionId); + if (isSystemCriterion) + { + selectCode = await _systemCriterionDictionaryCodeRepository.Where(x => x.SystemCriterionId == inDto.ReadingCriterionId).Select(x => x.Code).ToListAsync(); + } + else + { + selectCode = await _trialCriterionDictionaryCode.Where(x => x.TrialCriterionId == inDto.ReadingCriterionId).Select(x => x.Code).ToListAsync(); + } + + + var criterionCode = await _dicRepository.Where(x => x.ConfigDictionary.Code == "Reading_eCRF_Criterion").Select(x => x.Code).ToListAsync(); + + + foreach (var item in criterionCode) + { + if (result.ContainsKey(item)) + { + result[item] = new List (); + } + } + + var criterionDictionList = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.ReadingCriterionId).Select(x => new BasicDicSelect() { ChildGroup = x.Dictionary.ChildGroup, @@ -291,6 +325,8 @@ namespace IRaCIS.Application.Services }).ToListAsync(); + criterionDictionList = criterionDictionList.Where(x => selectCode.Contains(x.ParentCode)).ToList(); + var criterionDic = criterionDictionList.GroupBy(x => x.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList()); foreach (var item in criterionDic) @@ -326,6 +362,23 @@ namespace IRaCIS.Application.Services } else { + List selectCode = await _trialCriterionDictionaryCode.Where(x => x.TrialCriterionId == inDto.TrialReadingCriterionId).Select(x => x.Code).ToListAsync(); + + + var criterionCode = await _dicRepository.Where(x => x.ConfigDictionary.Code == "Reading_eCRF_Criterion").Select(x => x.Code).ToListAsync(); + + + foreach (var item in criterionCode) + { + if (result.ContainsKey(item)) + { + result[item] = new List(); + } + } + + + + var criterionDictionList = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialReadingCriterionId).Select(x => new BasicDicSelect() { ChildGroup = x.Dictionary.ChildGroup, @@ -342,6 +395,8 @@ namespace IRaCIS.Application.Services }).ToListAsync(); + criterionDictionList = criterionDictionList.Where(x => selectCode.Contains(x.ParentCode)).ToList(); + var criterionDic = criterionDictionList.GroupBy(x => x.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList()); foreach (var item in criterionDic) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs index 4b5b4c763..79a502e59 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialConfigService.cs @@ -26,6 +26,8 @@ namespace IRaCIS.Core.Application private readonly IRepository _trialQCQuestionRepository; private readonly IRepository _readingQuestionCriterionTrialRepository; private readonly IRepository _readingQuestionTrialRepository; + private readonly IRepository _trialCriterionDictionaryCode; + private readonly IRepository _systemCriterionDictionaryCode; private readonly IRepository _readingQuestionCriterionSystemRepository; private readonly IRepository _clinicalDataTrialSetRepository; private readonly IRepository _readingCriterionPageRepository; @@ -48,6 +50,8 @@ namespace IRaCIS.Core.Application IRepository trialQCQuestionRepository, IRepository readingQuestionCriterionTrialRepository, IRepository readingQuestionTrialRepository, + IRepository trialCriterionDictionaryCode, + IRepository systemCriterionDictionaryCode, IRepository readingQuestionCriterionSystemRepository, IRepository clinicalDataTrialSetRepository, IRepository readingCriterionPageRepository, @@ -72,6 +76,8 @@ namespace IRaCIS.Core.Application this._trialQCQuestionRepository = trialQCQuestionRepository; this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; this._readingQuestionTrialRepository = readingQuestionTrialRepository; + this._trialCriterionDictionaryCode = trialCriterionDictionaryCode; + this._systemCriterionDictionaryCode = systemCriterionDictionaryCode; this._readingQuestionCriterionSystemRepository = readingQuestionCriterionSystemRepository; this._clinicalDataTrialSetRepository = clinicalDataTrialSetRepository; this._provider = provider; @@ -190,16 +196,7 @@ namespace IRaCIS.Core.Application if (trialCriterion.ReadingQuestionCriterionSystemId != null) { - await _readingCriterionDictionaryRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == trialCriterion.Id); - var criterionDictionaryList = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == trialCriterion.ReadingQuestionCriterionSystemId.Value) - .ToListAsync(); - criterionDictionaryList.ForEach(x => - { - x.Id = NewId.NextGuid(); - x.Dictionary = null; - x.IsSystemCriterion = false; - x.CriterionId = inDto.TrialReadingCriterionId; - }); + if (trialCriterion.SynchronizeOriginalTime == null) { @@ -217,6 +214,40 @@ namespace IRaCIS.Core.Application TrialReadingCriterionId = inDto.TrialReadingCriterionId, }); + // 同步字典 + #region 同步字典 + + + + 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, + }).ToListAsync(); + + criterionDictionaryCodeList.ForEach(x => + { + x.Id = NewId.NextGuid(); + }); + + + var criterionDictionaryList = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == trialCriterion.ReadingQuestionCriterionSystemId.Value) + .ToListAsync(); + criterionDictionaryList.ForEach(x => + { + x.Id = NewId.NextGuid(); + x.Dictionary = null; + x.IsSystemCriterion = false; + x.CriterionId = inDto.TrialReadingCriterionId; + }); + await _readingCriterionDictionaryRepository.AddRangeAsync(criterionDictionaryList); + + await _trialCriterionDictionaryCode.AddRangeAsync(criterionDictionaryCodeList); + #endregion + var systemCriterion = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == trialCriterion.ReadingQuestionCriterionSystemId).FirstNotNullAsync(); @@ -226,6 +257,8 @@ namespace IRaCIS.Core.Application IsOncologyReading = systemCriterion.IsOncologyReading, IseCRFShowInDicomReading = systemCriterion.IseCRFShowInDicomReading, }); + + await _readingCriterionDictionaryRepository.SaveChangesAsync(); // 清除多余答案 -- var questionQuery = _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId).AsQueryable(); @@ -238,7 +271,7 @@ namespace IRaCIS.Core.Application } - await _readingCriterionDictionaryRepository.AddRangeAsync(criterionDictionaryList); + await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.Id == inDto.TrialReadingCriterionId, x => new ReadingQuestionCriterionTrial() {