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; using MassTransit; 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).OrderBy(x=>x.ShowOrder); return await query.ToListAsync(); } /// /// 新增或修改系统医学审核问题 /// /// /// [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).OrderBy(x=>x.ShowOrder); return await query.ToListAsync(); } /// /// 新增或修改项目医学审核问题 /// /// /// [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) .WhereIf(inDto.ShowOrder != null, x => x.ShowOrder new GetReadingMedicineTrialOtherQuestionOutDto() { Id = x.Id, QuestionName = x.QuestionName, }).ToListAsync(); return questionList; } /// /// 从系统里面选择问题添加到项目里面 /// /// /// [HttpPost] public async Task AddTrialDataFromSystem(AddTrialDataFromSystemInDto inDto) { var needList = _readingMedicineSystemQuestionRepository.Where(x => inDto.SystemQuestionIds.Contains(x.Id)) .Select(x => new ReadingMedicineTrialQuestion() { Id = NewId.NextGuid(), ShowOrder = x.ShowOrder, IsEnable = x.IsEnable, IsRequired = x.IsRequired, QuestionName = x.QuestionName, Type = x.Type, TypeValue = x.TypeValue, TrialId=inDto.TrialId, }); await _readingMedicineTrialQuestionRepository.AddRangeAsync(needList); var result = await _readingMedicineTrialQuestionRepository.SaveChangesAsync(); return ResponseOutput.Result(result); } /// /// 删除项目的医学审核问题 /// /// /// [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); } ///// ///// 确认医学审核问题 ///// ///// //public async Task ConfirmReadingMedicineQuestion() //{ //} } }