using IRaCIS.Core.Domain.Models; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Application.Interfaces; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Infra.EFCore.Common; namespace IRaCIS.Core.Application.Service { /// /// 医学审核问题 /// [ ApiExplorerSettings(GroupName = "Reading")] public class ReadingMedicineQuestionService: BaseService { private readonly IRepository _readingMedicineTrialQuestionRepository; private readonly IRepository _readingMedicineSystemQuestionRepository; public ReadingMedicineQuestionService( IRepository readingMedicineTrialQuestionRepository, IRepository readingMedicineSystemQuestionRepository ) { this._readingMedicineTrialQuestionRepository = readingMedicineTrialQuestionRepository; this._readingMedicineSystemQuestionRepository = readingMedicineSystemQuestionRepository; } /// /// 获取系统的医学审核问题 /// /// /// [HttpPost] public async Task> GetReadingMedicineSystemQuestionList(ReadingMedicineSystemQuestionQuery inDto) { var query = _readingMedicineSystemQuestionRepository.AsQueryable() .WhereIf(!inDto.TypeValue.IsNullOrEmpty(), x => x.TypeValue.Contains(inDto.TypeValue)) .WhereIf(!inDto.ParentTriggerValue.IsNullOrEmpty(), x => x.ParentTriggerValue.Contains(inDto.ParentTriggerValue)) .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, inDto.SortField.IsNullOrEmpty() ? nameof(ReadingMedicineSystemQuestionView.ShowOrder) : inDto.SortField, inDto.Asc); } /// /// 新增或修改系统医学审核问题 /// /// /// [HttpPost] public async Task AddOrUpdateReadingMedicineSystemQuestion(ReadingMedicineSystemQuestionAddOrEdit addOrEditReadingMedicineSystemQuestion) { var entity = await _readingMedicineSystemQuestionRepository.InsertOrUpdateAsync(addOrEditReadingMedicineSystemQuestion); await _readingMedicineSystemQuestionRepository.SaveChangesAsync(); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 删除系统的医学审核问题 /// /// /// [HttpDelete("{id:guid}")] public async Task DeleteReadingMedicineSystemQuestion(Guid id) { if (await _readingMedicineSystemQuestionRepository.AnyAsync(x => x.ParentId == id)) { return ResponseOutput.NotOk("此问题存在子问题,请先删除子问题"); } var success = await _readingMedicineSystemQuestionRepository.DeleteFromQueryAsync(t => t.Id == id); var result = await _readingMedicineSystemQuestionRepository.SaveChangesAsync(); return ResponseOutput.Result(result); } /// /// 获取项目的医学审核问题 /// /// /// [HttpPost] public async Task> GetReadingMedicineTrialQuestionList(ReadingMedicineTrialQuestionQuery inDto) { var query = _readingMedicineTrialQuestionRepository.AsQueryable() .Where(x=>x.TrialId==inDto.TrialId) .WhereIf(!inDto.TypeValue.IsNullOrEmpty(), x => x.TypeValue.Contains(inDto.TypeValue)) .WhereIf(!inDto.ParentTriggerValue.IsNullOrEmpty(), x => x.ParentTriggerValue.Contains(inDto.ParentTriggerValue)) .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, inDto.SortField.IsNullOrEmpty() ? nameof(ReadingMedicineTrialQuestionView.ShowOrder) : inDto.SortField, inDto.Asc); } /// /// 新增或修改项目医学审核问题 /// /// /// [HttpPost] public async Task AddOrUpdateReadingMedicineTrialQuestion(ReadingMedicineTrialQuestionAddOrEdit addOrEditReadingMedicineTrialQuestion) { var entity = await _readingMedicineTrialQuestionRepository.InsertOrUpdateAsync(addOrEditReadingMedicineTrialQuestion); await _readingMedicineTrialQuestionRepository.SaveChangesAsync(); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 获取项目的其他医学审核问题 /// /// /// [HttpPost] public async Task> GetReadingMedicineTrialOtherQuestion(GetReadingMedicineTrialOtherQuestionInDto inDto) { var types = new List() { "select","radio" }; var questionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId) .Where(x => types.Contains(x.Type)) .WhereIf(inDto.Id != null, x => x.Id != inDto.Id && x.ParentId != inDto.Id) .Select(x => new GetReadingMedicineTrialOtherQuestionOutDto() { Id = x.Id, QuestionName = x.QuestionName, }).ToListAsync(); return questionList; } /// /// 删除项目的医学审核问题 /// /// /// [HttpDelete("{id:guid}")] public async Task DeleteReadingMedicineTrialQuestion(Guid id) { if (await _readingMedicineTrialQuestionRepository.AnyAsync(x => x.ParentId == id)) { return ResponseOutput.NotOk("此问题存在子问题,请先删除子问题"); } var success = await _readingMedicineTrialQuestionRepository.DeleteFromQueryAsync(t => t.Id == id); var result = await _readingMedicineTrialQuestionRepository.SaveChangesAsync(); return ResponseOutput.Result(result); } } }