using IRaCIS.Application.Interfaces; using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.Filter; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Application.Service.WorkLoad.DTO; using Microsoft.AspNetCore.Authorization; using IRaCIS.Core.Application.Auth; using IRaCIS.Core.Application.Service.Reading.Dto; using MassTransit; using IRaCIS.Core.Application.Service.Reading; using IRaCIS.Core.Infra.EFCore.Common; using Panda.DynamicWebApi.Attributes; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Infrastructure; namespace IRaCIS.Application.Services { /// /// 阅片问题.标准 /// [ApiExplorerSettings(GroupName = "Reading")] public class ReadingQuestionService : BaseService, IReadingQuestionService { private readonly IRepository _subjectVisitRepository; private readonly IRepository _readingQuestionCriterionSystemRepository; private readonly IRepository _readingQuestionCriterionTrialRepository; private readonly IRepository _readingQuestionSystemRepository; private readonly IRepository _readingQuestionTrialRepository; private readonly IRepository _clinicalDataTrialSetRepository; private readonly IRepository _clinicalDataSystemSetRepository; private readonly IRepository _dictionaryRepository; private readonly IRepository _readingTableQuestionTrialRepository; private readonly IRepository _readingCriterionPageRepository; private readonly IRepository _trialRepository; private readonly IRepository _tumorAssessmentRepository; private readonly IRepository _organInfoRepository; private readonly IRepository _readingTableQuestionSystemRepository; private readonly IRepository _readingTaskQuestionAnswer; private readonly IRepository _previousPDFRepository; public ReadingQuestionService( IRepository subjectVisitRepository, IRepository readingQuestionCriterionSystemRepository, IRepository readingQuestionCriterionTrialRepository, IRepository readingQuestionSystemRepository, IRepository readingQuestionTrialRepository, IRepository ClinicalDataTrialSetRepository, IRepository ClinicalDataSystemSetRepository, IRepository dictionaryRepository, IRepository readingTableQuestionTrialRepository, IRepository readingCriterionPageRepository, IRepository trialRepository, IRepository tumorAssessmentRepository, IRepository organInfoRepository, IRepository readingTableQuestionSystemRepository, IRepository readingTaskQuestionAnswer, IRepository previousPDFRepository ) { this._subjectVisitRepository = subjectVisitRepository; this._readingQuestionCriterionSystemRepository = readingQuestionCriterionSystemRepository; this._readingQuestionCriterionTrialRepository = readingQuestionCriterionTrialRepository; this._readingQuestionSystemRepository = readingQuestionSystemRepository; this._readingQuestionTrialRepository = readingQuestionTrialRepository; this._clinicalDataTrialSetRepository = ClinicalDataTrialSetRepository; this._clinicalDataSystemSetRepository = ClinicalDataSystemSetRepository; this._dictionaryRepository = dictionaryRepository; this._readingTableQuestionTrialRepository = readingTableQuestionTrialRepository; this._readingCriterionPageRepository = readingCriterionPageRepository; this._trialRepository = trialRepository; this._tumorAssessmentRepository = tumorAssessmentRepository; this._organInfoRepository = organInfoRepository; this._readingTableQuestionSystemRepository = readingTableQuestionSystemRepository; this._readingTaskQuestionAnswer = readingTaskQuestionAnswer; this._previousPDFRepository = previousPDFRepository; } #region 疗效对照表 /// /// 获取疗效对照 /// /// [HttpPost] public async Task> GetTumorAssessmentList(GetTumorAssessmentListInDto inDto) { var result = await _tumorAssessmentRepository .Where(x => x.CriterionId == inDto.CriterionId) .WhereIf(inDto.OverallEfficacy != null, x => x.OverallEfficacy == inDto.OverallEfficacy) .WhereIf(inDto.TargetLesion != null, x => x.TargetLesion == inDto.TargetLesion) .WhereIf(inDto.NonTargetLesions != null, x => x.NonTargetLesions == inDto.NonTargetLesions) .WhereIf(inDto.NewLesion != null, x => x.NewLesion == inDto.NewLesion) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); return result; } /// /// 获取疗效对照 /// /// [HttpPost] public async Task> GetTumorAssessmentPageList(GetTumorAssessmentListInDto inQuery) { var query = _tumorAssessmentRepository .Where(x => x.CriterionId == inQuery.CriterionId) .WhereIf(inQuery.OverallEfficacy != null, x => x.OverallEfficacy == inQuery.OverallEfficacy) .WhereIf(inQuery.TargetLesion != null, x => x.TargetLesion == inQuery.TargetLesion) .WhereIf(inQuery.NonTargetLesions != null, x => x.NonTargetLesions == inQuery.NonTargetLesions) .WhereIf(inQuery.NewLesion != null, x => x.NewLesion == inQuery.NewLesion) .ProjectTo(_mapper.ConfigurationProvider); return await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(TumorAssessmentView.Id) : inQuery.SortField, inQuery.Asc); } /// /// 新增修改疗效对照 /// /// /// [HttpPost] public async Task AddOrUpdateTumorAssessment(AddOrUpdateTumorAssessmentInDto indto) { var entity = await _tumorAssessmentRepository.InsertOrUpdateAsync(indto, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 删除疗效对照 /// /// /// [HttpDelete("{Id:guid}")] public async Task DeleteTumorAssessment(Guid Id) { await _tumorAssessmentRepository.DeleteFromQueryAsync(t => t.Id == Id); var success = await _tumorAssessmentRepository.SaveChangesAsync(); return ResponseOutput.Result(success); } #endregion /// /// 复制一个系统标准到另一系统标准 /// /// /// [HttpPost] public async Task CopySystemCriterionData(CopySystemCriterionDataInDto inDto) { if (inDto.IsCopyQuestion) { var newSystemQuestionList = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == inDto.SourceSystemCriterionId) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); newSystemQuestionList.ForEach(x => { x.Id = NewId.NextGuid(); x.ReadingQuestionCriterionSystemId = inDto.NewSystemCriterionId; }); var copyNewQuestionList = newSystemQuestionList.Clone(); var needAddDatas = new List(); foreach (var x in newSystemQuestionList) { var question = x.Clone(); if (question.ParentId != null) { question.ParentId = copyNewQuestionList.Where(y => x.ParentId == y.OriginalId).Select(y => y.Id).FirstOrDefault(); } if (question.RelevanceId != null) { question.RelevanceId = copyNewQuestionList.Where(y => x.RelevanceId == y.OriginalId).Select(y => y.Id).FirstOrDefault(); } needAddDatas.Add(question); }; await _readingQuestionSystemRepository.BatchDeleteNoTrackingAsync(x => x.ReadingQuestionCriterionSystemId == inDto.NewSystemCriterionId); await _readingQuestionSystemRepository.AddRangeAsync(needAddDatas); #region 表格问题 var newSystemTableQuestionList = await _readingTableQuestionSystemRepository.Where(x => x.SystemCriterionId == inDto.SourceSystemCriterionId) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); var copeNewSystemTableQuestionList = newSystemTableQuestionList.Clone(); var needAddTableDatas = new List(); foreach (var x in newSystemTableQuestionList) { var tableQuestion = x.Clone(); tableQuestion.SystemCriterionId = inDto.NewSystemCriterionId; tableQuestion.Id = NewId.NextGuid(); if (tableQuestion.ParentId != null) { tableQuestion.ParentId = copeNewSystemTableQuestionList.Where(y => x.ParentId == y.OriginalId).Select(y => y.Id).FirstOrDefault(); } if (tableQuestion.RelevanceId != null) { tableQuestion.RelevanceId = copeNewSystemTableQuestionList.Where(y => x.RelevanceId == y.OriginalId).Select(y => y.Id).FirstOrDefault(); } if (tableQuestion.DependParentId != null) { tableQuestion.DependParentId = copeNewSystemTableQuestionList.Where(y => x.DependParentId == y.OriginalId).Select(y => y.Id).FirstOrDefault(); } needAddTableDatas.Add(tableQuestion); } await _readingTableQuestionSystemRepository.BatchDeleteNoTrackingAsync(x => x.SystemCriterionId == inDto.NewSystemCriterionId); await _readingTableQuestionSystemRepository.AddRangeAsync(needAddTableDatas); #endregion } else { var organData = await _organInfoRepository.Where(x => x.SystemCriterionId == inDto.SourceSystemCriterionId).ToListAsync(); organData.ForEach(x => { x.Id = NewId.NextGuid(); x.SystemCriterionId = inDto.NewSystemCriterionId; }); await _organInfoRepository.BatchDeleteNoTrackingAsync(x => x.SystemCriterionId == inDto.NewSystemCriterionId); await _organInfoRepository.AddRangeAsync(organData); } await _readingTableQuestionSystemRepository.SaveChangesAsync(); return ResponseOutput.Ok(); } /// /// 获取获取系统阅片标准下拉 /// /// [HttpPost] public async Task> GetSystemCriterionList() { List result = await _readingQuestionCriterionSystemRepository.Select(x => new GetSystemCriterionListOutDto() { CriterionId = x.Id, CriterionName = x.CriterionName, }).ToListAsync(); return result; } /// /// 获取系统的表格问题 /// /// /// [HttpPost] public async Task> GetReadingTableQuestionSystemList(ReadingTableQuestionSystemQuery inDto) { var readingTableQuestionSystemQueryable = _readingTableQuestionSystemRepository .WhereIf(inDto.TableQuestionType != null, x => x.TableQuestionType == inDto.TableQuestionType!) .Where(x => x.ReadingQuestionId == inDto.ReadingQuestionId).ProjectTo(_mapper.ConfigurationProvider); var result = await readingTableQuestionSystemQueryable.OrderBy(x => x.ShowOrder).ToListAsync(); return result; } /// /// 获取项目的表格问题 /// /// /// [HttpPost] public async Task> GetReadingTableQuestionTrialList(ReadingTableQuestionSystemQuery inDto) { var readingTableQuestionSystemQueryable = _readingTableQuestionTrialRepository .WhereIf(inDto.TableQuestionType != null, x => x.TableQuestionType == inDto.TableQuestionType!) .Where(x => x.ReadingQuestionId == inDto.ReadingQuestionId).ProjectTo(_mapper.ConfigurationProvider); var result = await readingTableQuestionSystemQueryable.OrderBy(x => x.ShowOrder).ToListAsync(); return result; } /// /// 新增修改系统表格问题 /// /// /// [HttpPost] public async Task AddOrUpdateReadingTableQuestionSystem(ReadingTableQuestionSystemAddOrEdit addOrEditReadingTableQuestionSystem) { var entity = await _readingTableQuestionSystemRepository.InsertOrUpdateAsync(addOrEditReadingTableQuestionSystem, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 新增修改想想项目表格问题 /// /// /// [HttpPost] public async Task AddOrUpdateReadingTableQuestionTrial(ReadingTableQuestionTrialAddOrEdit addOrEditReadingTableQuestionTrial) { var entity = await _readingTableQuestionTrialRepository.InsertOrUpdateAsync(addOrEditReadingTableQuestionTrial, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 删除项目表格问题 /// /// /// [HttpDelete("{Id:guid}")] public async Task DeleteReadingTableQuestionTrial(Guid Id) { if (await _readingTableQuestionTrialRepository.AnyAsync(x => x.ParentId == Id || x.RelevanceId == Id)) { return ResponseOutput.NotOk("当前问题存在子问题 删除失败"); } await _readingTableQuestionTrialRepository.DeleteFromQueryAsync(t => t.Id == Id); var success = await _readingTableQuestionTrialRepository.SaveChangesAsync(); return ResponseOutput.Result(success); } /// /// 删除系统表格问题 /// /// /// [HttpDelete("{Id:guid}")] public async Task DeleteReadingTableQuestionSystem(Guid Id) { if (await _readingTableQuestionSystemRepository.AnyAsync(x => x.ParentId == Id || x.RelevanceId == Id)) { return ResponseOutput.NotOk("当前问题存在子问题 删除失败"); } await _readingTableQuestionSystemRepository.DeleteFromQueryAsync(t => t.Id == Id); var success = await _readingTableQuestionSystemRepository.SaveChangesAsync(); return ResponseOutput.Result(success); } /// /// 获取项目表格其他问题 /// /// /// [HttpPost] public async Task> GetReadingTableOtherQuestionTrial(GetReadingTableOtherQuestionSystemInDto inDto) { var types = new List() { "select","radio" }; var questionList = await _readingTableQuestionTrialRepository.Where(x => x.ReadingQuestionId == inDto.ReadingQuestionId) .Where(x => types.Contains(x.Type)) .WhereIf(inDto.Id != null, x => x.Id != inDto.Id && x.ParentId != inDto.Id) .Select(x => new CriterionOtherQuestionOutDto() { QuestionId = x.Id, QuestionName = x.QuestionName, TypeValue = x.TypeValue, }).ToListAsync(); return questionList; } /// /// 获取系统表格其他问题 /// /// /// [HttpPost] public async Task> GetReadingTableOtherQuestionSystem(GetReadingTableOtherQuestionSystemInDto inDto) { var types = new List() { "select","radio" }; var questionList = await _readingTableQuestionSystemRepository.Where(x => x.ReadingQuestionId == inDto.ReadingQuestionId) .Where(x => types.Contains(x.Type)) .WhereIf(inDto.Id != null, x => x.Id != inDto.Id && x.ParentId != inDto.Id) .Select(x => new CriterionOtherQuestionOutDto() { QuestionId = x.Id, QuestionName = x.QuestionName, TypeValue = x.TypeValue, }).ToListAsync(); return questionList; } /// /// 设置项目裁判信息 /// /// /// [HttpPost] public async Task SetTrialJudgyInfo(SetTrialJudgyInfoInDto inDto) { var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstOrDefaultAsync(); var judgeCount = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id && x.IsJudgeQuestion) .WhereIf(trialCriterion.FormType == FormType.SinglePage, x => x.ReadingCriterionPageId == null) .WhereIf(trialCriterion.FormType == FormType.MultiplePage, x => x.ReadingCriterionPageId != null).CountAsync(); if (judgeCount == 0 && (inDto.ArbitrationRule == ArbitrationRule.Visit || inDto.ArbitrationRule == ArbitrationRule.Reading)) { throw new BusinessValidationFailedException("无裁判问题却有仲裁对象,操作失败"); } await _trialRepository.UpdatePartialFromQueryAsync(inDto.TrialId, x => new Trial() { ArbitrationRule = inDto.ArbitrationRule, //IsArbitrationReading = inDto.IsArbitrationReading, }); var result = await _trialRepository.SaveChangesAsync(); return ResponseOutput.Ok(result); } /// /// 验证是否要同步标准 /// /// /// [HttpPost] public async Task VerifyeCriterionNeedSynchronize(VerifyeCriterionNeedSynchronizeInDto inDto) { var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstOrDefaultAsync(); if (trialCriterion == null) { return NeedSynchronize.NotNeed; } if (trialCriterion.ReadingQuestionCriterionSystemId != null) { var systemCriterion = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == trialCriterion.ReadingQuestionCriterionSystemId).FirstNotNullAsync(); if (systemCriterion.ConfirmTime > trialCriterion.SynchronizeTime) { 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 NeedSynchronize.NotNeed; } } else { return NeedSynchronize.NotNeed; } } /// /// 同步标准到项目新(2022-08-10) /// /// /// public async Task SynchronizeCriterion(SynchronizeCriterionInDto inDto) { var trialCriterion = await _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).AsNoTracking().FirstOrDefaultAsync(); if (trialCriterion != null) { if (trialCriterion.ReadingQuestionCriterionSystemId != 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 copyNewQuestionList = newTrialQuestionList.Clone(); var trialQuestionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialCriterion.Id).ToListAsync(); var needAddDatas = new List(); foreach (var x in newTrialQuestionList) { var question = x.Clone(); var firstQuestion = trialQuestionList.Where(y => y.ReadingQuestionSystemId == x.ReadingQuestionSystemId).FirstOrDefault(); if (firstQuestion != null) { var systemData = _mapper.Map(x); if (firstQuestion.IsJudgeQuestion) { if (firstQuestion.TypeValue != x.TypeValue) { firstQuestion.AnswerCombination = string.Empty; firstQuestion.AnswerGroup = string.Empty; firstQuestion.JudgeType = JudgeTypeEnum.None; } } var newData = _mapper.Map(systemData, firstQuestion); newData.Id = x.Id; newData.ReadingQuestionSystemId = x.ReadingQuestionSystemId; question = newData.Clone(); } // 最大问题数 question.MaxQuestionCount = x.MaxQuestionCount; if (question.ParentId != null) { question.ParentId = copyNewQuestionList.Where(y => x.ParentId == y.ReadingQuestionSystemId).Select(y => y.Id).FirstOrDefault(); } if (question.RelevanceId != null) { question.RelevanceId = copyNewQuestionList.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.BatchUpdateNoTrackingAsync(x => x.Id == trialCriterion.Id, x => new ReadingQuestionCriterionTrial() { SynchronizeTime = DateTime.Now }); #region 表格问题 var newTrialTableQuestionList = await _readingTableQuestionSystemRepository.Where(x => x.SystemCriterionId == trialCriterion.ReadingQuestionCriterionSystemId) .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); newTrialTableQuestionList.ForEach(x => { x.Id = NewId.NextGuid(); }); var copyNewTrialTableQuestionList = newTrialTableQuestionList.Clone(); var needAddTableDatas = new List(); foreach (var x in newTrialTableQuestionList) { var tableQuestion = x.Clone(); tableQuestion.TrialId = inDto.TrialId; tableQuestion.TrialCriterionId = trialCriterion.Id; tableQuestion.ReadingQuestionId = copyNewQuestionList.Where(y => y.ReadingQuestionSystemId == x.ReadingQuestionId).Select(y => y.Id).FirstOrDefault(); if (tableQuestion.ParentId != null) { tableQuestion.ParentId = copyNewTrialTableQuestionList.Where(y => x.ParentId == y.OriginalId).Select(y => y.Id).FirstOrDefault(); } if (tableQuestion.RelevanceId != null) { tableQuestion.RelevanceId = copyNewTrialTableQuestionList.Where(y => x.RelevanceId == y.OriginalId).Select(y => y.Id).FirstOrDefault(); } if (tableQuestion.DependParentId != null) { tableQuestion.DependParentId = copyNewTrialTableQuestionList.Where(y => x.DependParentId == y.OriginalId).Select(y => y.Id).FirstOrDefault(); } needAddTableDatas.Add(tableQuestion); } await _readingTableQuestionTrialRepository.BatchDeleteNoTrackingAsync(x => x.TrialCriterionId == trialCriterion.Id); await _readingTableQuestionTrialRepository.AddRangeAsync(needAddTableDatas); #endregion await _readingQuestionTrialRepository.SaveChangesAsync(); } } } /// /// 获取项目裁判信息 /// /// /// [HttpPost] public async Task GetTrialJudgyInfo(GetTrialJudgyInfoInDto inDto) { GetTrialJudgyInfoOutDto result = await _trialRepository.Where(x => x.Id == inDto.TrialId).Select(x => new GetTrialJudgyInfoOutDto { TrialId = x.Id, IsReadingTaskViewInOrder = x.IsReadingTaskViewInOrder, ArbitrationRule = x.ArbitrationRule, IsArbitrationReading = x.IsArbitrationReading }).FirstNotNullAsync(); return result; } /// /// 新增修改项目标准分页 /// /// /// [HttpPost] public async Task AddOrUpdateReadingCriterionPage(ReadingCriterionPageAddOrEdit addOrEditReadingCriterionPage) { var entity = await _readingCriterionPageRepository.InsertOrUpdateAsync(addOrEditReadingCriterionPage, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 删除标准分页 /// /// /// [HttpDelete("{Id:guid}")] public async Task DeleteReadingCriterionPage(Guid Id) { var success = await _readingCriterionPageRepository.DeleteFromQueryAsync(t => t.Id == Id, true); return ResponseOutput.Ok(); } ///// ///// 新增修改系统问题标准 ///// ///// ///// //[HttpPost] //public async Task AddOrUpdateReadingQuestionCriterionSystem(AddOrUpdateReadingQuestionCriterionSystemInDto indto) //{ // var entity = await _readingQuestionCriterionSystemRepository.InsertOrUpdateAsync(indto, true); // return ResponseOutput.Ok(entity.Id.ToString()); //} /// /// 获取系统问题标准 /// /// [HttpPost] public async Task> GetReadingQuestionCriterionSystemList(ReadingQuestionCriterionSystemViewInDto inDto) { //await AddSystemQuestionCriterion(); var query = _readingQuestionCriterionSystemRepository.AsQueryable() .WhereIf(!inDto.CriterionName.IsNullOrEmpty(), x => x.CriterionName.Contains(inDto.CriterionName)) .ProjectTo(_mapper.ConfigurationProvider); return await query.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, inDto.SortField.IsNullOrEmpty() ? nameof(ReadingQuestionCriterionSystemView.ShowOrder) : inDto.SortField, inDto.Asc); } /// /// 获取系统问题标准下拉 /// /// [HttpPost] public async Task> GetSystemCriterionSelectList() { var criterionList = await _readingQuestionCriterionSystemRepository.AsQueryable() .OrderBy(x => x.ShowOrder) .Select(x => new GetSystemCriterionSelectDto() { Id = x.Id, CriterionName = x.CriterionName, }).ToListAsync(); return criterionList; } ///// ///// 设置系统标准被禁用 ///// ///// //[NonDynamicMethod] //public async Task SetSystemCriterionDisable(Guid dictionaryId, Guid? parentId) //{ // // 判断是否是阅片 // if (await _dictionaryRepository.AnyAsync(x => x.Id == parentId && x.Code == "ReadingStandard")) // { // // 判断当前阅片是否在项目里面存在 // var systemCriterion = await _readingQuestionCriterionSystemRepository.FirstOrDefaultAsync(x => x.CriterionId == dictionaryId); // if (systemCriterion != null) // { // var trialCriterionIds = await _readingQuestionCriterionTrialRepository.Where(x => x.ReadingQuestionCriterionSystemId == systemCriterion.Id).Select(x=>x.ReadingQuestionCriterionSystemId).ToListAsync(); // await _readingQuestionCriterionTrialRepository.BatchDeleteNoTrackingAsync(x => x.ReadingQuestionCriterionSystemId == systemCriterion.Id); // await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(x => trialCriterionIds.Contains(x.ReadingQuestionCriterionTrialId)); // return ResponseOutput.Ok(); // } // } // return ResponseOutput.Ok(); //} /// /// 设置系统问题标准是否完成配置 /// /// /// public async Task SetSystemReadingQuestionCriterionIsCompleteConfig(SetSystemReadingQuestionCriterionIsIsCompleteConfig inDto) { if (!inDto.IsCompleteConfig) { var trialCriterionIds = await _readingQuestionCriterionTrialRepository.Where(x => x.ReadingQuestionCriterionSystemId == inDto.Id).Select(x => x.Id).ToListAsync(); if (await _readingTaskQuestionAnswer.AnyAsync(x => trialCriterionIds.Contains(x.ReadingQuestionCriterionTrialId))) { return ResponseOutput.NotOk("此标准在项目里面已被使用,操作失败"); } } var systemCriterion = await _readingQuestionCriterionSystemRepository.Where(x => x.Id == inDto.Id).AsNoTracking().FirstOrDefaultAsync(); var confirmTime = systemCriterion.ConfirmTime; if (inDto.IsCompleteConfig) { confirmTime = DateTime.Now; } await _readingQuestionCriterionSystemRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new ReadingQuestionCriterionSystem() { IsCompleteConfig = inDto.IsCompleteConfig, ConfirmTime = confirmTime, }); if (inDto.IsCompleteConfig) { //await SynchronizeSystemCriterion(inDto.Id); } else { await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.ReadingQuestionCriterionSystemId == inDto.Id, x => new ReadingQuestionCriterionTrial() { IsCompleteConfig = inDto.IsCompleteConfig }); } var result = await _readingQuestionCriterionSystemRepository.SaveChangesAsync(); return ResponseOutput.Ok(result); } /// /// 更改项目标准(老) /// /// /// private async Task UpdateTrialCriterion(Guid systemCriterionId) { await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.ReadingQuestionCriterionSystemId == systemCriterionId, x => new ReadingQuestionCriterionTrial() { IsCompleteConfig = true, }); var systemCriterionQuestionList = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == systemCriterionId).ToListAsync(); var trialCriterionList = await _readingQuestionCriterionTrialRepository.Where(x => x.ReadingQuestionCriterionSystemId == systemCriterionId).Select(x => new { x.Id, x.TrialId, }).ToListAsync(); var trialCriterionIdList = trialCriterionList.Select(x => x.Id).ToList(); List needAddQuestionList = new List(); foreach (var item in trialCriterionList) { await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(x => trialCriterionIdList.Contains(x.ReadingQuestionCriterionTrialId)); List trialQuestionList = new List(); SetChildParentQuestion(item.Id, item.TrialId, systemCriterionQuestionList, trialQuestionList); needAddQuestionList.AddRange(trialQuestionList); } await _readingQuestionTrialRepository.AddRangeAsync(needAddQuestionList); } /// /// 更改项目标准(新) /// /// /// private async Task SynchronizeSystemCriterion(Guid systemCriterionId) { var systemCriterion = await _readingQuestionCriterionSystemRepository.FirstOrDefaultAsync(x => x.Id == systemCriterionId); var trialCriterionList = await _readingQuestionCriterionTrialRepository.Where(x => x.ReadingQuestionCriterionSystemId == systemCriterionId).Select(x => new { x.Id, x.TrialId, }).ToListAsync(); var trialCriterionIds = trialCriterionList.Select(x => x.Id).ToList(); var systemQuestionList = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == systemCriterionId).ToListAsync(); var trialQuestions = await _readingQuestionTrialRepository.Where(x => trialCriterionIds.Contains(x.ReadingQuestionCriterionTrialId)).Select(x => new TrialQuestion { AnswerCombination = x.AnswerCombination, AnswerGroup = x.AnswerGroup, Id = x.Id, JudgeType = x.JudgeType, ReadingCriterionPageId = x.ReadingCriterionPageId, RelevanceId = x.RelevanceId, RelevanceValue = x.RelevanceValue, ImageCount = x.ImageCount, ParentId = x.ParentId, ReadingQuestionCriterionTrialId = x.ReadingQuestionCriterionTrialId, ReadingQuestionSystemId = x.ReadingQuestionSystemId, SystemParentId = x.SystemParentId }).ToListAsync(); List trialQuestionList = new List(); foreach (var item in trialCriterionList) { var thisTrialQuestions = trialQuestions.Where(x => x.ReadingQuestionCriterionTrialId == item.Id).ToList(); var query = systemQuestionList.GroupJoin(thisTrialQuestions, a => a.Id, b => b.ReadingQuestionSystemId, (a, b) => new { a, trialQuestion = b }).SelectMany(a => a.trialQuestion, (m, n) => new ReadingQuestionTrial { Id = n.Id, }); var needAddQuestionList = systemQuestionList.GroupJoin(thisTrialQuestions, a => a.Id, b => b.ReadingQuestionSystemId, (x, y) => new { system = x, trial = y }) .SelectMany( a => a.trial.DefaultIfEmpty(), (c, d) => new ReadingQuestionTrial { Id = (c.trial.FirstOrDefault()?.Id) ?? NewId.NextGuid(), ShowOrder = c.system.ShowOrder, SystemParentId = c.system.ParentId, ReadingQuestionSystemId = c.system.Id, AnswerCombination = (c.trial.FirstOrDefault()?.AnswerCombination) ?? string.Empty, AnswerGroup = (c.trial.FirstOrDefault()?.AnswerGroup) ?? string.Empty, GroupName = c.system.GroupName, IsEnable = c.system.IsEnable, ShowQuestion = c.system.ShowQuestion, IsJudgeQuestion = c.system.IsJudgeQuestion, IsRequired = c.system.IsRequired, JudgeType = (c.trial.FirstOrDefault()?.JudgeType) ?? JudgeTypeEnum.None, ParentId = c.trial.FirstOrDefault()?.ParentId, ParentTriggerValue = c.system.ParentTriggerValue, QuestionName = c.system.QuestionName, ReadingCriterionPageId = c.trial.FirstOrDefault()?.ReadingCriterionPageId, RelevanceId = c.trial.FirstOrDefault()?.RelevanceId, ImageCount = c.trial.FirstOrDefault()?.ImageCount ?? 0, RelevanceValue = c.trial.FirstOrDefault()?.RelevanceValue, ReadingQuestionCriterionTrialId = item.Id, Remark = c.system.Remark, TrialId = item.TrialId, Type = c.system.Type, TypeValue = c.system.TypeValue, }).ToList(); var copydata = needAddQuestionList.Clone(); needAddQuestionList.ForEach(x => { if (x.SystemParentId == null) { x.ParentId = null; } else { x.ParentId = copydata.FirstOrDefault(y => y.ReadingQuestionSystemId == x.SystemParentId).Id; } }); trialQuestionList.AddRange(needAddQuestionList); } await _readingQuestionTrialRepository.BatchDeleteNoTrackingAsync(x => trialCriterionIds.Contains(x.ReadingQuestionCriterionTrialId)); await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => trialCriterionIds.Contains(x.Id), x => new ReadingQuestionCriterionTrial() { IsEnable = systemCriterion.IsEnable, CriterionName = systemCriterion.CriterionName, ShowOrder = systemCriterion.ShowOrder, IsCompleteConfig = systemCriterion.IsCompleteConfig, }); await _readingQuestionTrialRepository.AddRangeAsync(trialQuestionList); await _readingQuestionTrialRepository.SaveChangesAsync(); } /// /// 新增修改系统问题标准 /// /// /// [HttpPost] public async Task AddOrUpdateReadingQuestionCriterionSystem(AddOrUpdateReadingQuestionCriterionSystemInDto indto) { var entity = await _readingQuestionCriterionSystemRepository.InsertOrUpdateAsync(indto, true); if (indto.Id != null) { await _readingQuestionCriterionTrialRepository.BatchUpdateNoTrackingAsync(x => x.ReadingQuestionCriterionSystemId == indto.Id, x => new ReadingQuestionCriterionTrial() { CriterionName = indto.CriterionName }); } return ResponseOutput.Ok(entity.Id.ToString()); } ///// ///// 添加系统问题标准 ///// ///// //[NonDynamicMethod] //private async Task AddSystemQuestionCriterion() //{ // var useSystemQuestionCriterionIds = _readingQuestionCriterionSystemRepository.Select(x => x.CriterionId); // var dictionaryParentId =await _dictionaryRepository.Where(x => x.Code == "ReadingStandard").Select(x => x.Id).FirstOrDefaultAsync(); // var criterionList = await _dictionaryRepository.Where(x => x.ParentId == dictionaryParentId && !useSystemQuestionCriterionIds.Contains(x.Id)) // .Select(x => new CriterionList() // { // Id = x.Id, // Value = x.Value, // ShowOrder=x.ShowOrder, // }).ToListAsync(); // List needAddCriterionList = new List(); // criterionList.ForEach(x => // { // needAddCriterionList.Add(new ReadingQuestionCriterionSystem() // { // CriterionId = x.Id, // ShowOrder=x.ShowOrder, // CriterionName = x.Value, // IsEnable = false, // }); // }); // await _readingQuestionCriterionSystemRepository.AddRangeAsync(needAddCriterionList); // await _readingQuestionCriterionSystemRepository.SaveChangesAsync(); //} /// /// 删除系统问题标准 /// /// /// [HttpDelete("{id:guid}")] public async Task DeleteReadingQuestionCriterionSystem(Guid id) { if (await _readingQuestionCriterionTrialRepository.AnyAsync(x => x.IsConfirm && x.ReadingQuestionCriterionSystemId == id)) { throw new BusinessValidationFailedException("当前标准被引用过了,不可以删除"); } await _readingQuestionCriterionSystemRepository.DeleteFromQueryAsync(t => t.Id == id); var success = await _readingQuestionCriterionSystemRepository.SaveChangesAsync(); return ResponseOutput.Result(success); } /// /// 新增修改系统问题 /// /// /// [HttpPost] public async Task AddOrUpdateReadingQuestionSystem(AddOrUpdateReadingQuestionSystemInDto indto) { if (indto.Id != null) { var trialIdList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionSystemId == indto.Id && x.IsJudgeQuestion && x.JudgeType != JudgeTypeEnum.None) .Select(x => x.TrialId).ToListAsync(); //if (trialIdList.Count>0) //{ // var trialNames = await _trialRepository.Where(x => trialIdList.Contains(x.Id)).Select(x => x.ExperimentName).ToListAsync(); // throw new BusinessValidationFailedException("当前问题在项目"+ string.Join(',', trialNames) + "设置了裁判标准了,修改失败"); //} } if (await _readingQuestionSystemRepository.AnyAsync(x => x.Id != indto.Id && x.ShowOrder == indto.ShowOrder && x.ReadingQuestionCriterionSystemId == indto.ReadingQuestionCriterionSystemId)) { throw new BusinessValidationFailedException("问题编号重复"); } var entity = await _readingQuestionSystemRepository.InsertOrUpdateAsync(indto, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 获取系统问题 /// /// [HttpPost] public async Task> GetReadingQuestionSystemList(ReadingQuestionSystemViewInDto inDto) { var query = _readingQuestionSystemRepository.AsQueryable() .Where(x => x.ReadingQuestionCriterionSystemId == inDto.ReadingQuestionCriterionSystemId) .WhereIf(!inDto.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inDto.QuestionName)) .WhereIf(!inDto.Type.IsNullOrEmpty(), x => x.Type.Contains(inDto.Type)) .ProjectTo(_mapper.ConfigurationProvider); return await query.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, nameof(ReadingQuestionSystemView.ShowOrder), inDto.Asc); } /// /// 获取系统标准的其他问题 /// /// /// [HttpPost] public async Task> GetSystemCriterionOtherQuestion(GetSystemCriterionOtherQuestionInDto inDto) { var types = new List() { "select","radio" }; var questionList = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == inDto.ReadingQuestionCriterionSystemId) .Where(x => types.Contains(x.Type)) .WhereIf(inDto.Id != null, x => x.Id != inDto.Id && x.ParentId != inDto.Id) .Select(x => new CriterionOtherQuestionOutDto() { QuestionId = x.Id, QuestionName = x.QuestionName, TypeValue = x.TypeValue, GroupName = x.GroupName, }).ToListAsync(); return questionList; } /// /// 删除系统问题 /// /// /// [HttpDelete("{id:guid}")] public async Task DeleteReadingQuestionSystem(Guid id) { if (await _readingQuestionSystemRepository.AnyAsync(x => x.ParentId == id)) { return ResponseOutput.NotOk("此问题存在子问题,请先删除子问题"); } await _readingQuestionSystemRepository.DeleteFromQueryAsync(t => t.Id == id); var success = await _readingQuestionSystemRepository.SaveChangesAsync(); return ResponseOutput.Result(success); } /// /// 添加系统数据到项目里面 /// /// [NonDynamicMethod] private async Task AddSystemDataToTrila(Guid trialId) { var trialUsrSystemIds = _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == trialId && x.ReadingQuestionCriterionSystemId != null) .Select(x => x.ReadingQuestionCriterionSystemId); var trialCriterionNames = _readingQuestionCriterionTrialRepository.Where(x => x.TrialId == trialId) .Select(x => x.CriterionName); List needAddCriterionList = await _readingQuestionCriterionSystemRepository.Where(x => !trialUsrSystemIds.Contains(x.Id) && x.IsEnable && !trialCriterionNames.Contains(x.CriterionName)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); List needAddQuestionList = new List(); needAddCriterionList.ForEach(x => { x.IsEnable = false; x.TrialId = trialId; x.ReadingQuestionCriterionSystemId = x.Id; x.Id = NewId.NextGuid(); // 同步问题暂时注释 //List readingQuestionTrialList = new List(); //SetChildParentQuestion(criterion.Id, trialId, systemQuestionList, readingQuestionTrialList); //needAddQuestionList.AddRange(readingQuestionTrialList); }); await _readingQuestionCriterionTrialRepository.AddRangeAsync(needAddCriterionList); await _readingQuestionTrialRepository.AddRangeAsync(needAddQuestionList); await _readingQuestionTrialRepository.SaveChangesAsync(); } /// /// 设置父子关系 /// /// 项目标准ID /// 项目Id /// 系统问题 /// 需要添加list private void SetChildParentQuestion(Guid ReadingQuestionCriterionTrialId, Guid trialId, List systemQuesitonList, List needQuestionList) { var parentIdIsNullList = systemQuesitonList.Where(x => x.ParentId == null).ToList(); parentIdIsNullList.ForEach(x => { var quesiton = x.Clone(); var oldId = quesiton.Id; var newId = NewId.NextGuid(); needQuestionList.Add(new ReadingQuestionTrial() { Id = newId, ShowOrder = quesiton.ShowOrder, IsEnable = quesiton.IsEnable, IsRequired = quesiton.IsRequired, ParentTriggerValue = quesiton.ParentTriggerValue, QuestionName = quesiton.QuestionName, ReadingQuestionCriterionTrialId = ReadingQuestionCriterionTrialId, ReadingQuestionSystemId = quesiton.Id, SystemParentId = quesiton.ParentId, TrialId = trialId, AnswerGroup = string.Empty, Type = quesiton.Type, GroupName = quesiton.GroupName, IsJudgeQuestion = quesiton.IsJudgeQuestion, Remark = quesiton.Remark, TypeValue = quesiton.TypeValue, }); CreateQuestionRelation(ReadingQuestionCriterionTrialId, trialId, oldId, newId, systemQuesitonList, needQuestionList); }); } /// /// 递归处理父子关系 /// /// /// /// /// /// /// private void CreateQuestionRelation(Guid ReadingQuestionCriterionTrialId, Guid trialId, Guid oldParentId, Guid newParentId, List systemQuesitonList, List needQuestionList) { var childList = systemQuesitonList.Where(x => x.ParentId == oldParentId).ToList(); childList.ForEach(x => { var quesiton = x.Clone(); var oldId = quesiton.Id; var newId = NewId.NextGuid(); needQuestionList.Add(new ReadingQuestionTrial() { Id = newId, ShowOrder = quesiton.ShowOrder, IsEnable = quesiton.IsEnable, IsRequired = quesiton.IsRequired, ParentId = newParentId, SystemParentId = quesiton.ParentId, ReadingQuestionSystemId = x.Id, AnswerGroup = string.Empty, ParentTriggerValue = quesiton.ParentTriggerValue, QuestionName = quesiton.QuestionName, ReadingQuestionCriterionTrialId = ReadingQuestionCriterionTrialId, TrialId = trialId, GroupName = quesiton.GroupName, Type = quesiton.Type, IsJudgeQuestion = quesiton.IsJudgeQuestion, Remark = quesiton.Remark, TypeValue = quesiton.TypeValue, }); CreateQuestionRelation(ReadingQuestionCriterionTrialId, trialId, oldId, newId, systemQuesitonList, needQuestionList); }); } /// /// 新增修改项目问题标准(项目) /// /// /// [HttpPost] public async Task AddOrUpdateReadingQuestionCriterionTrial(AddOrUpdateReadingQuestionCriterionTrialInDto indto) { var entity = await _readingQuestionCriterionTrialRepository.InsertOrUpdateAsync(indto, true); return ResponseOutput.Ok(entity.Id.ToString()); } ///// ///// 获取预览问题信息 ///// ///// ///// //[HttpPost] //public async Task> GetPreviewTheQuestion(GetPreviewTheQuestionInDto inDto) //{ // var trialQuestionQuery = from trialQuestion in _readingQuestionTrialRepository.Where(x=>x.ReadingQuestionCriterionTrialId== inDto.Id) // select new GetTrialReadingQuestionOutDto() // { // ReadingQuestionTrialId = trialQuestion.Id, // ReadingQuestionCriterionTrialId = trialQuestion.ReadingQuestionCriterionTrialId, // TrialId = trialQuestion.TrialId, // Type = trialQuestion.Type, // ParentTriggerValue = trialQuestion.ParentTriggerValue, // GroupName = trialQuestion.GroupName, // QuestionName = trialQuestion.QuestionName, // IsRequired = trialQuestion.IsRequired, // ShowOrder = trialQuestion.ShowOrder, // ParentId = trialQuestion.ParentId, // TypeValue = trialQuestion.TypeValue, // Answer = string.Empty // }; // var qusetionList = await trialQuestionQuery.OrderBy(x => x.ShowOrder).ToListAsync(); // List readingQuestionList = qusetionList.Where(x => x.ParentId == null).ToList(); // readingQuestionList.ForEach(x => // { // _readingImageTaskService.FindChildQuestion(x, qusetionList); // }); // return readingQuestionList; //} ///// ///// 设置项目标准是否生效 ///// ///// ///// //public async Task SetTrialReadingQuestionCriterionIsIsEnable(SetSystemReadingQuestionCriterionIsIsEnable inDto) //{ // await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new ReadingQuestionCriterionTrial() // { // IsEnable = inDto.IsEnable // }); // var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync(); // return ResponseOutput.Ok(result); //} /// /// 设置项目标准是否完成配置 /// /// /// public async Task SetTrialReadingQuestionCriterionIsIsCompleteConfig(SetSystemReadingQuestionCriterionIsIsCompleteConfig inDto) { await _readingQuestionCriterionTrialRepository.UpdatePartialFromQueryAsync(inDto.Id, x => new ReadingQuestionCriterionTrial() { IsCompleteConfig = inDto.IsCompleteConfig }); var result = await _readingQuestionCriterionTrialRepository.SaveChangesAsync(); return ResponseOutput.Ok(result); } /// /// 获取项目问题标准(项目) /// /// [HttpPost] public async Task> GetReadingQuestionCriterionTrialList(ReadingQuestionCriterionTrialViewInDto inDto) { await AddSystemDataToTrila(inDto.TrialId); var query = _readingQuestionCriterionTrialRepository.AsQueryable() .Where(x => x.TrialId == inDto.TrialId) .WhereIf(!inDto.CriterionName.IsNullOrEmpty(), x => x.CriterionName.Contains(inDto.CriterionName)) .ProjectTo(_mapper.ConfigurationProvider); return await query.ToPagedListAsync(inDto.PageIndex, inDto.PageSize, inDto.SortField.IsNullOrEmpty() ? nameof(ReadingQuestionCriterionTrialView.ShowOrder) : inDto.SortField, inDto.Asc); } /// /// 删除项目问题标准(项目) /// /// /// [HttpDelete("{id:guid}")] public async Task DeleteReadingQuestionCriterionTrial(Guid id) { await _readingQuestionCriterionTrialRepository.DeleteFromQueryAsync(t => t.Id == id); var success = await _readingQuestionCriterionTrialRepository.SaveChangesAsync(); return ResponseOutput.Result(success); } /// /// 新增修改项目问题(项目) /// /// /// [HttpPost] public async Task AddOrUpdateReadingQuestionTrial(AddOrUpdateReadingQuestionTrialInDto indto) { if (indto.Id != null) { if (await _readingQuestionTrialRepository.AnyAsync(x => x.Id == indto.Id && x.IsJudgeQuestion && x.JudgeType != JudgeTypeEnum.None)) { throw new BusinessValidationFailedException("当前问题已经设置了裁判标准了,修改失败"); } } if (indto.ParentId == indto.RelevanceId && indto.ParentId != null && indto.ParentTriggerValue != indto.RelevanceValue) { throw new BusinessValidationFailedException("显示依赖父问题和必填依赖的问题为同一个,但答案互斥,操作失败"); } if (await _readingQuestionTrialRepository.AnyAsync(x => x.Id != indto.Id && x.ShowOrder == indto.ShowOrder && x.TrialId == indto.TrialId && x.ReadingQuestionCriterionTrialId == indto.ReadingQuestionCriterionTrialId && x.ReadingCriterionPageId == indto.ReadingCriterionPageId)) { throw new BusinessValidationFailedException("问题编号重复"); } var entity = await _readingQuestionTrialRepository.InsertOrUpdateAsync(indto, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 获取项目问题(项目) /// /// [HttpPost] public async Task> GetReadingQuestionTrialList(ReadingQuestionTrialViewInDto inDto) { var query = _readingQuestionTrialRepository.AsQueryable() .Where(x => x.ReadingQuestionCriterionTrialId == inDto.ReadingQuestionCriterionTrialId) .WhereIf(!inDto.QuestionName.IsNullOrEmpty(), x => x.QuestionName.Contains(inDto.QuestionName)) .WhereIf(!inDto.Type.IsNullOrEmpty(), x => x.Type.Contains(inDto.Type)) .Where(x => x.ReadingCriterionPageId == inDto.ReadingCriterionPageId) .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.ShowOrder); return await query.ToListAsync(); } /// /// 获取项目标准的其他问题(项目) /// /// /// [HttpPost] public async Task> GetTrialCriterionOtherQuestion(GetTrialCriterionOtherQuestionInDto inDto) { var types = new List() { "select","radio" }; var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.ReadingQuestionCriterionTrialId) .Where(x => types.Contains(x.Type)) .WhereIf(inDto.Id != null, x => x.Id != inDto.Id && x.ParentId != inDto.Id) .Where(x => x.ReadingCriterionPageId == inDto.ReadingCriterionPageId) .Select(x => new CriterionOtherQuestionOutDto() { QuestionId = x.Id, QuestionName = x.QuestionName, TypeValue = x.TypeValue, GroupName = x.GroupName, }).ToListAsync(); return questionList; } /// /// 删除项目问题(项目) /// /// /// [HttpDelete("{id:guid}")] public async Task DeleteReadingQuestionTrial(Guid id) { if (await _readingQuestionTrialRepository.AnyAsync(x => x.ParentId == id)) { return ResponseOutput.NotOk("此问题存在子问题,请先删除子问题"); } await _readingQuestionTrialRepository.DeleteFromQueryAsync(t => t.Id == id); var success = await _readingQuestionTrialRepository.SaveChangesAsync(); return ResponseOutput.Result(success); } /// /// 获取项目问题分组 /// /// /// [HttpPost] public async Task> GetTrialGroupNameList(GetTrialGroupNameListInDto inDto) { var result = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == inDto.CriterionId && x.Type == ReadingQestionType.Group) .Where(x => x.ReadingCriterionPageId == inDto.ReadingCriterionPageId) .Select(x => x.GroupName).ToListAsync(); return result; } /// /// 获取系统问题分组 /// /// /// [HttpPost] public async Task> GetSystemGroupNameList(GetTrialGroupNameListInDto inDto) { var result = await _readingQuestionSystemRepository.Where(x => x.ReadingQuestionCriterionSystemId == inDto.CriterionId && x.Type == ReadingQestionType.Group) .Select(x => x.GroupName).ToListAsync(); return result; } } }