diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs index d1b7790d6..8e12973fc 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingQuestionViewModel.cs @@ -49,6 +49,31 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public ArbitrationRule ArbitrationRule { get; set; } } + public enum NeedSynchronize + { + /// + /// 需要 + /// + Need=0, + + /// + /// 不需要 + /// + NotNeed = 1, + + /// + /// 裁判不相等 + /// + JudgeNotEqual=2, + + } + + public class SynchronizeCriterionInDto + { + [NotDefault] + public Guid TrialId { get; set; } + } + public class VerifyeCriterionNeedSynchronizeInDto { [NotDefault] diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs index c1751902e..fbf124f95 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs @@ -104,92 +104,121 @@ namespace IRaCIS.Application.Services /// /// [HttpPost] - public async Task VerifyeCriterionNeedSynchronize(VerifyeCriterionNeedSynchronizeInDto inDto) + public async Task VerifyeCriterionNeedSynchronize(VerifyeCriterionNeedSynchronizeInDto inDto) { var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId&&x.IsConfirm).FirstOrDefaultAsync(); if (trialCriterion == null) { - return false; + return NeedSynchronize.NotNeed; } if (trialCriterion.ReadingQuestionCriterionSystemId != null) { var systemCriterion = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == trialCriterion.ReadingQuestionCriterionSystemId).FirstNotNullAsync(); if (systemCriterion.ConfirmTime > trialCriterion.SynchronizeTime) { - await SynchronizeCriterion(trialCriterion.Id); - return true; - + + var systemQuestionList = await _readingQuestionSystemRepository.Where(x => x.IsJudgeQuestion && x.ReadingQuestionCriterionSystemId == trialCriterion.ReadingQuestionCriterionSystemId).ToListAsync(); + var trialQuestionList = await _readingQuestionTrialRepository.Where(x => x.IsJudgeQuestion && x.ReadingQuestionCriterionTrialId == trialCriterion.Id).ToListAsync(); + if (systemQuestionList.Count() != trialQuestionList.Count()) + { + return NeedSynchronize.JudgeNotEqual; + } + + + foreach (var item in trialQuestionList) + { + var systemQuestion= systemQuestionList.Where(x=>x.Id== (item.ReadingQuestionSystemId??default(Guid))).FirstOrDefault(); + if (systemQuestion == null) + { + return NeedSynchronize.JudgeNotEqual; + } + + + if (systemQuestion.TypeValue != item.TypeValue) + { + return NeedSynchronize.JudgeNotEqual; + } + } + + + return NeedSynchronize.Need; + } else { - return false; + return NeedSynchronize.NotNeed; } } else { - return false; + return NeedSynchronize.NotNeed; } } /// /// 同步标准到项目新(2022-08-10) /// - /// + /// /// - public async Task SynchronizeCriterion(Guid trialCriterionId) + public async Task SynchronizeCriterion(SynchronizeCriterionInDto inDto) { - var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == trialCriterionId).FirstNotNullAsync(); - if(trialCriterion.ReadingQuestionCriterionSystemId!=null) + var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId&&x.IsConfirm).AsNoTracking().FirstOrDefaultAsync(); + + if (trialCriterion != null) { - - // 将系统里面的问题转为项目问题 - var newTrialQuestionList = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == trialCriterion.ReadingQuestionCriterionSystemId) - .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - newTrialQuestionList.ForEach(x => { - x.Id = NewId.NextGuid(); - x.ReadingQuestionCriterionTrialId = trialCriterionId; - x.TrialId = trialCriterion.TrialId; - }); - var copeNewQuestionList = newTrialQuestionList.Clone(); - var trialQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterionId).ToListAsync(); - - var needAddDatas = new List(); - - foreach (var x in newTrialQuestionList) + if (trialCriterion.ReadingQuestionCriterionSystemId != null) { - var question = x.Clone(); - var firstQuestion = trialQuestionList.Where(y => y.ReadingQuestionSystemId == x.ReadingQuestionSystemId).FirstOrDefault(); - if (firstQuestion != null) + // 将系统里面的问题转为项目问题 + var newTrialQuestionList = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == trialCriterion.ReadingQuestionCriterionSystemId) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + newTrialQuestionList.ForEach(x => { + x.Id = NewId.NextGuid(); + x.ReadingQuestionCriterionTrialId = trialCriterion.Id; + x.TrialId = trialCriterion.TrialId; + }); + var copeNewQuestionList = newTrialQuestionList.Clone(); + var trialQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id).ToListAsync(); + + var needAddDatas = new List(); + + foreach (var x in newTrialQuestionList) { - var systemData = _mapper.Map(x); - var newData = _mapper.Map(systemData, firstQuestion); - newData.Id = x.Id; - newData.ReadingQuestionSystemId= x.ReadingQuestionSystemId; - question = newData.Clone(); - } + var question = x.Clone(); - if (question.ParentId != null) + var firstQuestion = trialQuestionList.Where(y => y.ReadingQuestionSystemId == x.ReadingQuestionSystemId).FirstOrDefault(); + if (firstQuestion != null) + { + var systemData = _mapper.Map(x); + var newData = _mapper.Map(systemData, firstQuestion); + newData.Id = x.Id; + newData.ReadingQuestionSystemId = x.ReadingQuestionSystemId; + question = newData.Clone(); + } + + if (question.ParentId != null) + { + question.ParentId = copeNewQuestionList.Where(y => x.ParentId == y.ReadingQuestionSystemId).Select(y => y.Id).FirstOrDefault(); + } + if (question.RelevanceId != null) + { + question.RelevanceId = copeNewQuestionList.Where(y => x.RelevanceId == y.ReadingQuestionSystemId).Select(y => y.Id).FirstOrDefault(); + } + + needAddDatas.Add(question); + }; + + await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id); + await _readingQuestionTrialRepository.AddRangeAsync(needAddDatas); + await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(trialCriterion.Id, x => new ReadingQuestionCriterionTrial() { - question.ParentId = copeNewQuestionList.Where(y =>x.ParentId==y.ReadingQuestionSystemId ).Select(y => y.Id).FirstOrDefault(); - } - if (question.RelevanceId != null) - { - question.RelevanceId = copeNewQuestionList.Where(y => x.RelevanceId == y.ReadingQuestionSystemId).Select(y => y.Id).FirstOrDefault(); - } - - needAddDatas.Add(question); - }; - - await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(x => x.ReadingQuestionCriterionTrialId == trialCriterionId); - await _readingQuestionTrialRepository.AddRangeAsync(needAddDatas); - await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(trialCriterionId, x => new ReadingQuestionCriterionTrial() - { - SynchronizeTime = DateTime.Now - }); - await _readingQuestionTrialRepository.SaveChangesAsync(); + SynchronizeTime = DateTime.Now + }); + await _readingQuestionTrialRepository.SaveChangesAsync(); + } } + }