diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index becbece6..23c31152 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -602,7 +602,7 @@ - + 测试邮件 带附件 填充word --前端不需要用 @@ -8656,6 +8656,12 @@ + + + 获取标准字典 + + + 获取标准指定字典 diff --git a/IRaCIS.Core.Application/Service/Common/DTO/DictionaryModel.cs b/IRaCIS.Core.Application/Service/Common/DTO/DictionaryModel.cs index b4932a69..39549319 100644 --- a/IRaCIS.Core.Application/Service/Common/DTO/DictionaryModel.cs +++ b/IRaCIS.Core.Application/Service/Common/DTO/DictionaryModel.cs @@ -90,6 +90,12 @@ namespace IRaCIS.Application.Contracts public Guid? TrialReadingCriterionId { get; set; } } + + public class GetTrialCriterionDictionaryListInDto + { + [NotDefault] + public Guid TrialCriterionId { get; set; } + } public class GetCriterionDictionaryListInDto { [NotDefault] diff --git a/IRaCIS.Core.Application/Service/Common/DictionaryService.cs b/IRaCIS.Core.Application/Service/Common/DictionaryService.cs index fd536c00..11e02a51 100644 --- a/IRaCIS.Core.Application/Service/Common/DictionaryService.cs +++ b/IRaCIS.Core.Application/Service/Common/DictionaryService.cs @@ -21,7 +21,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _doctorRepository; private readonly IRepository _trialRepository; private readonly IRepository _systemCriterionDictionaryCodeRepository; - private readonly IRepository _trialCriterionDictionaryCode; + private readonly IRepository _trialCriterionDictionaryCodeRepository; private readonly IRepository _readingCriterionDictionaryRepository; private readonly IRepository _readingQuestionCriterionSystem; private readonly IRepository _readingQuestionCriterionTrial; @@ -31,7 +31,7 @@ namespace IRaCIS.Application.Services IRepository doctorRepository, IRepository trialRepository, IRepository systemCriterionDictionaryCodeRepository, - IRepository trialCriterionDictionaryCode, + IRepository trialCriterionDictionaryCodeRepository, IRepository readingCriterionDictionaryRepository, IRepository readingQuestionCriterionSystem, IRepository readingQuestionCriterionTrial, @@ -46,7 +46,7 @@ namespace IRaCIS.Application.Services _doctorRepository = doctorRepository; _trialRepository = trialRepository; this._systemCriterionDictionaryCodeRepository = systemCriterionDictionaryCodeRepository; - this._trialCriterionDictionaryCode = trialCriterionDictionaryCode; + this._trialCriterionDictionaryCodeRepository = trialCriterionDictionaryCodeRepository; this._readingCriterionDictionaryRepository = readingCriterionDictionaryRepository; this._readingQuestionCriterionSystem = readingQuestionCriterionSystem; this._readingQuestionCriterionTrial = readingQuestionCriterionTrial; @@ -270,6 +270,36 @@ namespace IRaCIS.Application.Services return dictionaryList; } + + /// + /// 获取标准字典 + /// + /// + public async Task> GetTrialCriterionDictionaryList(GetTrialCriterionDictionaryListInDto inDto) + { + var criterionCodes = await _trialCriterionDictionaryCodeRepository.Where(x => x.TrialCriterionId == inDto.TrialCriterionId).ToListAsync(); + + var parentCodes = await _readingCriterionDictionaryRepository.Where(x => x.CriterionId == inDto.TrialCriterionId).Select(x => x.ParentCode).ToListAsync(); + + + var codes = criterionCodes.Select(x => x.Code).ToList(); + + var dictionaryList = await _dicRepository.Where(x => codes.Contains(x.Code) && x.ParentId == null) + .OrderBy(x => x.ShowOrder).Select(x => new GetCriterionDictionaryListOutDto() + { + Code = x.Code, + ShowOrder = x.ShowOrder, + Description = x.Description + }).ToListAsync(); + + dictionaryList.ForEach(x => { + x.Count = parentCodes.Count(y => y == x.Code); + x.Id = criterionCodes.Where(y => y.Code == x.Code).Select(x => x.Id).FirstOrDefault(); + }); + + return dictionaryList; + } + /// /// 获取标准指定字典 /// @@ -299,7 +329,7 @@ namespace IRaCIS.Application.Services } else { - selectCode = await _trialCriterionDictionaryCode.Where(x => x.TrialCriterionId == inDto.ReadingCriterionId).Select(x => x.Code).ToListAsync(); + selectCode = await _trialCriterionDictionaryCodeRepository.Where(x => x.TrialCriterionId == inDto.ReadingCriterionId).Select(x => x.Code).ToListAsync(); } @@ -367,7 +397,7 @@ namespace IRaCIS.Application.Services } else { - List selectCode = await _trialCriterionDictionaryCode.Where(x => x.TrialCriterionId == inDto.TrialReadingCriterionId).Select(x => x.Code).ToListAsync(); + List selectCode = await _trialCriterionDictionaryCodeRepository.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(); diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index 3e2a6f83..c3dd14ba 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -1720,17 +1720,19 @@ namespace IRaCIS.Application.Services public async Task VerifyDefaultQuestionBeAnswer(VerifyVisitTaskQuestionsInDto inDto) { - var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); + var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x=>x.TrialReadingCriterion).Include(x=>x.SourceSubjectVisit).FirstNotNullAsync(); var criterion = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).FirstNotNullAsync(); - var readingQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId - && (x.IsJudgeQuestion || (x.IsRequired == IsRequired.Required && x.ShowQuestion == ShowQuestion.Show)) - - ) - .WhereIf(!criterion.IseCRFShowInDicomReading,x=>x.IsShowInDicom).ToListAsync(); + var readingQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId) + .WhereIf(taskInfo.SourceSubjectVisit.IsBaseLine,x=> ((x.IsRequired == IsRequired.Required && x.ShowQuestion == ShowQuestion.Show)&&(x.LimitEdit==LimitEdit.None||x.LimitEdit==LimitEdit.OnlyBaseLine))) + .WhereIf(!taskInfo.SourceSubjectVisit.IsBaseLine, x => ((x.IsRequired == IsRequired.Required && x.ShowQuestion == ShowQuestion.Show) && (x.LimitEdit == LimitEdit.None || x.LimitEdit == LimitEdit.OnlyVisit))) + .WhereIf(taskInfo.TrialReadingCriterion.CriterionType==CriterionType.PCWG3, x => x.QuestionType != QuestionType.SiteVisitForTumorEvaluation) - var answerQuestionIds = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).Select(x => x.ReadingQuestionTrialId).ToListAsync(); + //.WhereIf(!criterion.IseCRFShowInDicomReading,x=>x.IsShowInDicom) + .ToListAsync(); + + var answerQuestionIds = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId&&x.Answer!=string.Empty).Select(x => x.ReadingQuestionTrialId).ToListAsync(); readingQuestionList = readingQuestionList.Where(x => !answerQuestionIds.Contains(x.Id)).ToList(); @@ -1751,6 +1753,7 @@ namespace IRaCIS.Application.Services public async Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto) { await VerifyTaskIsSign(inDto.VisitTaskId); + await VerifyDefaultQuestionBeAnswer(inDto); var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync(); var isBaseline = await _subjectVisitRepository.Where(x => x.Id == taskInfo.SourceSubjectVisitId).Select(x => x.IsBaseLine).FirstOrDefaultAsync(); var readingQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs index 2107d281..de7e6549 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/PCWG3CalculateService.cs @@ -777,15 +777,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate } else { - var twoindex = taskList.OrderBy(x => x.VisitTaskNum).ToList()[3]; + var twoindex = taskList.OrderBy(x => x.VisitTaskNum).ToList()[2]; result = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.AlwaysNewLesions).SelectMany(x => x.TableRowInfoList) - .Where(x => x.FristAddTaskNum >= twoindex.VisitTaskNum && x.TableQuestionList.Any(y => y.QuestionMark == QuestionMark.State && y.Answer == EvaluationOfState.Exists.GetEnumInt())).Count() + .Where(x => x.FristAddTaskNum >= twoindex.VisitTaskNum && x.TableQuestionList.Any(y => y.QuestionMark == QuestionMark.State && y.Answer == EvaluationOfState.Exists.GetEnumInt())).Count(); - + inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewLesions).SelectMany(x => x.TableRowInfoList) - .Where(x => x.TableQuestionList.Any(y => y.QuestionMark == QuestionMark.State && y.Answer == EvaluationOfState.Exists.GetEnumInt())) - .Count(); + //+ inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewLesions).SelectMany(x => x.TableRowInfoList) + // .Where(x => x.TableQuestionList.Any(y => y.QuestionMark == QuestionMark.State && y.Answer == EvaluationOfState.Exists.GetEnumInt())) + // .Count(); } @@ -1086,7 +1086,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate if (errorMassage != string.Empty) { - errorMassage = _localizer["ReadingCalculate_Questionable"] + errorMassage; + errorMassage = _localizer["ReadingCalculate_questionable"] + errorMassage; throw new BusinessValidationFailedException(errorMassage); } }