diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs index c6aea52ea..aa3c5ff28 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingClinicalDataService.cs @@ -335,7 +335,8 @@ namespace IRaCIS.Application.Services var result = await resultQuery.ToListAsync(); - result = result.Where(x => !(x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList(); + result = result.Where(x => !(x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList(); + var previousHistoryList = await _previousHistoryRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); var previousOtherList = await _previousOtherRepository.Where(x => x.SubjectVisitId == inDto.ReadingId).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingMedicalReviewService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingMedicalReviewService.cs new file mode 100644 index 000000000..c43cab5f1 --- /dev/null +++ b/IRaCIS.Core.Application/Service/Reading/ReadingMedicalReviewService.cs @@ -0,0 +1,295 @@ + +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; +using IRaCIS.Core.Infrastructure; + +namespace IRaCIS.Core.Application.Service +{ + /// + /// 阅片医学审核 + /// + [ ApiExplorerSettings(GroupName = "Reading")] + public class ReadingMedicalReviewService : BaseService + { + + private readonly IRepository _readingMedicineTrialQuestionRepository; + private readonly IRepository _trialRepository; + private readonly IRepository _readingMedicineSystemQuestionRepository; + + public ReadingMedicalReviewService( + IRepository readingMedicineTrialQuestionRepository, + IRepository trialRepository, + IRepository readingMedicineSystemQuestionRepository + ) + { + this._readingMedicineTrialQuestionRepository = readingMedicineTrialQuestionRepository; + this._trialRepository = trialRepository; + 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 inDto) + { + var existsQuery = _readingMedicineSystemQuestionRepository + .WhereIf(inDto.Id != null, x => x.Id != inDto.Id) + .Where(x => x.QuestionName == inDto.QuestionName ||x.ShowOrder == inDto.ShowOrder); + + if (await existsQuery.AnyAsync()) + { + return ResponseOutput.NotOk("当前问题名称或序号存在重复"); + } + var entity = await _readingMedicineSystemQuestionRepository.InsertOrUpdateAsync(inDto); + 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<(List,object)> 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); + + + var isConfirmMedicineQuestion = await _trialRepository.Where(x => x.Id == inDto.TrialId).Select(x => x.IsConfirmMedicineQuestion).FirstOrDefaultAsync(); + var questionList = await query.ToListAsync(); + return (questionList, new { + IsConfirmMedicineQuestion= isConfirmMedicineQuestion, + QuestionCount= questionList.Count(), + }); + } + + /// + /// 获取预览问题信息 + /// + /// + /// + [HttpPost] + public async Task> GetMedicineQuestionPreview(GetMedicineQuestionPreviewInDto inDto) + { + var trialQuestionList = await _readingMedicineTrialQuestionRepository.Where(x=>x.TrialId==inDto.TrialId) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x=>x.ShowOrder).ToListAsync(); + + List readingQuestionList = trialQuestionList.Where(x => x.ParentId == null).ToList(); + readingQuestionList.ForEach(x => + { + FindChildQuestion(x, trialQuestionList); + }); + + return readingQuestionList; + } + + private void FindChildQuestion(GetMedicineQuestionPreviewOutDto trialReadingQuestion, List questionlists) + { + trialReadingQuestion.Childrens = questionlists.Where(x => x.ParentId == trialReadingQuestion.Id).ToList(); + if (trialReadingQuestion.Childrens != null && trialReadingQuestion.Childrens.Count != 0) + { + trialReadingQuestion.Childrens.ForEach(x => + { + this.FindChildQuestion(x, questionlists); + }); + } + } + + /// + /// 新增或修改项目医学审核问题 + /// + /// + /// + [HttpPost] + public async Task AddOrUpdateReadingMedicineTrialQuestion(ReadingMedicineTrialQuestionAddOrEdit inDto) + { + var existsQuery = _readingMedicineTrialQuestionRepository + .WhereIf(inDto.Id != null, x => x.Id != inDto.Id) + .Where(x => x.TrialId==inDto.TrialId) + .Where(x => x.QuestionName == inDto.QuestionName || x.ShowOrder == inDto.ShowOrder); + + if (await existsQuery.AnyAsync()) + { + return ResponseOutput.NotOk("当前问题名称或序号存在重复"); + } + var entity = await _readingMedicineTrialQuestionRepository.InsertOrUpdateAsync(inDto); + 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, + TypeValue=x.TypeValue, + + }).ToListAsync(); + + return questionList; + } + + /// + /// 从系统里面选择问题添加到项目里面 + /// + /// + /// + [HttpPost] + public async Task AddTrialDataFromSystem(AddTrialDataFromSystemInDto inDto) + { + // 直接写?? + var systemList = await _readingMedicineSystemQuestionRepository.Where(x => inDto.SystemQuestionIds.Contains(x.Id)).ToListAsync(); + var needList= systemList.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, + }).ToList(); + + await _readingMedicineTrialQuestionRepository.AddRangeAsync(needList); + var result = await _readingMedicineTrialQuestionRepository.SaveChangesAsync(); + return ResponseOutput.Result(result); + } + + /// + /// 删除项目的医学审核问题 + /// + /// + /// + [HttpPost] + public async Task DeleteReadingMedicineTrialQuestion(DeleteReadingMedicineTrialQuestion inDto) + { + if (await _readingMedicineTrialQuestionRepository.AnyAsync(x => x.ParentId == inDto.Id)) + { + return ResponseOutput.NotOk("此问题存在子问题,请先删除子问题"); + } + var success = await _readingMedicineTrialQuestionRepository.DeleteFromQueryAsync(t => t.Id == inDto.Id); + var result = await _readingMedicineTrialQuestionRepository.SaveChangesAsync(); + return ResponseOutput.Result(result); + } + + + /// + /// 确认医学审核问题 + /// + /// + public async Task ConfirmReadingMedicineQuestion(ConfirmReadingMedicineQuestionInDto inDto) + { + var readingMedicineQuestionList = await _readingMedicineTrialQuestionRepository.Where(x => x.TrialId == inDto.TrialId) + .Select(x => new TrialQuestion() { + Id = x.Id, + ParentShowOrder = (int?)x.ParentQuestion.ShowOrder, + + }).ToListAsync(); + if (readingMedicineQuestionList.Count == 0) + { + throw new BusinessValidationFailedException("当前未添加医学审核问题。请先添加医学审核问题,再进行确认。"); + } + + if (readingMedicineQuestionList.Count() != readingMedicineQuestionList.Select(t => t.ShowOrder).Distinct().Count()) + { + throw new BusinessValidationFailedException("影像医学审核问题显示序号不能重复。"); + } + + + if (readingMedicineQuestionList.Where(t => t.ParentShowOrder != null).Any(t => t.ParentShowOrder > t.ShowOrder)) + { + throw new BusinessValidationFailedException("父问题的显示序号要比子问题的显示序号小,请确认。"); + } + + + await _readingMedicineTrialQuestionRepository.BatchUpdateNoTrackingAsync(x => x.TrialId == inDto.TrialId, x => new ReadingMedicineTrialQuestion() + { + IsConfirm = true + }); + + await _trialRepository.UpdatePartialFromQueryAsync(inDto.TrialId, x => new Trial() + { + IsConfirmMedicineQuestion = true + }); + + var result = await _trialRepository.SaveChangesAsync(); + return ResponseOutput.Result(result); + + + + } + + + + } +} diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs index 37dba7854..e721876fd 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingQuestionService.cs @@ -658,7 +658,7 @@ namespace IRaCIS.Application.Services } } - if (await _readingQuestionTrialRepository.AnyAsync(x => x.Id != indto.Id && x.ShowOrder == indto.ShowOrder)) + if (await _readingQuestionTrialRepository.AnyAsync(x => x.Id != indto.Id && x.ShowOrder == indto.ShowOrder&&x.TrialId==indto.TrialId)) { throw new BusinessValidationFailedException("问题编号重复"); }