//-------------------------------------------------------------------- // 此代码由T4模板自动生成 byzhouhang 20210918 // 生成时间 2022-08-12 14:07:20 // 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 //-------------------------------------------------------------------- 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; using IRaCIS.Core.Domain.Share; namespace IRaCIS.Core.Application.Service { /// /// 器官服务层 /// [ApiExplorerSettings(GroupName = "Reading")] public class OrganInfoService : BaseService, IOrganInfoService { private readonly IRepository _organInfoRepository; private readonly IRepository _dictionaryRepository; private readonly IRepository _organTrialInfoRepository; private readonly IRepository _readingQuestionCriterionTrial; private readonly IRepository _criterionNidusRepository; public OrganInfoService( IRepository organInfoRepository, IRepository dictionaryRepository, IRepository organTrialInfoRepository, IRepository readingQuestionCriterionTrial, IRepository criterionNidusRepository ) { _organInfoRepository = organInfoRepository; this._dictionaryRepository = dictionaryRepository; this._organTrialInfoRepository = organTrialInfoRepository; this._readingQuestionCriterionTrial = readingQuestionCriterionTrial; this._criterionNidusRepository = criterionNidusRepository; } /// /// 获取标准病灶类型 /// /// /// [HttpPost] public async Task> GetCriterionLesionType(GetCriterionLesionTypeInDto inDto) { var dicNums = new List(); dicNums = await _criterionNidusRepository.Where(x => x.CriterionId == inDto.CriterionId).Select(x => ((int)x.LesionType).ToString()).Distinct().ToListAsync(); var dictionaryId = await _dictionaryRepository.Where(x => x.Code == "LesionType").Select(x => x.Id).FirstOrDefaultAsync(); var result = await _dictionaryRepository.Where(x => x.ParentId == dictionaryId && dicNums.Contains(x.Code)).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); return result; } /// /// 获取标准病灶器官关系信息 /// /// /// [HttpPost] public async Task> GetCriterionNidusList(CriterionNidusQuery inQuery) { var criterionNidusQueryable = _criterionNidusRepository .Where(x=>x.CriterionId== inQuery.CriterionId) .ProjectTo(_mapper.ConfigurationProvider); return await criterionNidusQueryable.ToListAsync(); } /// /// 新增修改标准病灶器官关系信息 /// /// /// [HttpPost] public async Task AddOrUpdateCriterionNidus(CriterionNidusAddOrEdit inDto) { if (await _criterionNidusRepository.AnyAsync(x => x.OrganType == inDto.OrganType && x.LesionType == inDto.LesionType && x.CriterionId == inDto.CriterionId && x.Id != inDto.Id)) { throw new BusinessValidationFailedException("存在相同的数据,操作失败"); } var entity = await _criterionNidusRepository.InsertOrUpdateAsync(inDto, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 删除病灶病灶器官关系信息 /// /// /// [HttpDelete("{id:guid}")] public async Task DeleteCriterionNidus(Guid id) { var success = await _criterionNidusRepository.DeleteFromQueryAsync(t => t.Id == id, true); return ResponseOutput.Ok(); } /// /// 获取系统器官信息 /// /// /// [HttpPost] public async Task> GetOrganInfoList(OrganInfoQuery inQuery) { List organs = new List(); if (inQuery.LesionType != null) { organs =await _criterionNidusRepository.Where(x => x.CriterionId == inQuery.SystemCriterionId && x.LesionType == inQuery.LesionType) .Select(x => x.OrganType).ToListAsync(); } var organInfoQueryable = _organInfoRepository .Where(x=>x.SystemCriterionId==inQuery.SystemCriterionId) .WhereIf(inQuery.LesionType != null, x => organs.Contains(x.OrganType)) .WhereIf(inQuery.OrganType != null, x => x.OrganType == inQuery.OrganType) .ProjectTo(_mapper.ConfigurationProvider); return await organInfoQueryable.ToListAsync(); } /// /// 获取系统器官分页信息 /// /// /// [HttpPost] public async Task> GetOrganPageList(OrganInfoQuery inQuery) { List organs = new List(); if (inQuery.LesionType != null) { organs = await _criterionNidusRepository.Where(x => x.CriterionId == inQuery.SystemCriterionId && x.LesionType == inQuery.LesionType) .Select(x => x.OrganType).ToListAsync(); } var organInfoQueryable = _organInfoRepository .Where(x => x.SystemCriterionId == inQuery.SystemCriterionId) .WhereIf(inQuery.LesionType != null, x => organs.Contains(x.OrganType)) .WhereIf(inQuery.OrganType != null, x => x.OrganType == inQuery.OrganType) .ProjectTo(_mapper.ConfigurationProvider); return await organInfoQueryable.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(OrganInfoView.OrganType) : inQuery.SortField, inQuery.Asc); } /// /// 新增或修改系统器官数据 /// /// /// [HttpPost] public async Task AddOrUpdateOrganInfo(OrganInfoAddOrEdit addOrEditOrganInfo) { var entity = await _organInfoRepository.InsertOrUpdateAsync(addOrEditOrganInfo, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 删除系统器官 /// /// /// [HttpDelete("{Id:guid}")] public async Task DeleteOrganInfo(Guid Id) { var success = await _organInfoRepository.DeleteFromQueryAsync(t => t.Id == Id, true); return ResponseOutput.Ok(); } /// /// 批量添加项目器官 /// /// /// public async Task BatchAddTrialOrgan(BatchAddTrialOrganInDto inDto) { //await _organTrialInfoRepository.BatchDeleteNoTrackingAsync(t => t.TrialId==inDto.TrialId&&t.OrganType == inDto.OrganType); List organTrialInfos = inDto.OrganIds.Select(x => new OrganTrialInfo() { OrganInfoId=x, TrialId=inDto.TrialId, //OrganType=inDto.OrganType, }).ToList(); await _organTrialInfoRepository.AddRangeAsync(organTrialInfos); await _organInfoRepository.SaveChangesAsync(); return ResponseOutput.Ok(); } /// /// 删除系统器官 /// /// /// [HttpDelete("{Id:guid}")] public async Task DeleteTrialOrganInfo(Guid Id) { var success = await _organTrialInfoRepository.DeleteFromQueryAsync(t => t.Id == Id, true); return ResponseOutput.Ok(); } /// /// 获取项目器官信息 /// /// /// [HttpPost] public async Task> GetTrialOrganList(GetTrialOrganListInDto inDto) { List organs = new List(); if (inDto.LesionType != null) { var criterion = await _readingQuestionCriterionTrial.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstOrDefaultAsync(); organs = await _criterionNidusRepository.Where(x => x.CriterionId == (criterion==null?default(Guid): criterion.Id) && x.LesionType == inDto.LesionType) .Select(x => x.OrganType).ToListAsync(); } var organInfoQueryable = from data in _organInfoRepository .WhereIf(inDto.OrganType != null, x => x.OrganType == inDto.OrganType) .WhereIf(inDto.IsLymphNodes!=null,x=>x.IsLymphNodes==inDto.IsLymphNodes) .WhereIf(inDto.LesionType != null, x => organs.Contains(x.OrganType)) join trialData in _organTrialInfoRepository.WhereIf(inDto.IsEnable != null, x => x.IsEnable == inDto.IsEnable) .WhereIf(inDto.IsEnable != null, x => x.IsEnable == inDto.IsEnable) .Where(x => x.TrialId == inDto.TrialId) on data.Id equals trialData.OrganInfoId select new GetTrialOrganListOutDto() { Id = trialData.Id, Part = data.Part, TULAT = data.TULAT, TULOC = data.TULOC, Remark= data.Remark, IsLymphNodes = data.IsLymphNodes, IsCanEditPosition=data.IsCanEditPosition, IsEnable = trialData.IsEnable, OrganType = data.OrganType, }; return await organInfoQueryable.ToListAsync(); } #region 注释 ///// ///// 获取项目勾选器官信息 ///// ///// ///// //[HttpPost] //public async Task> GetTrialCheckOrganList(GetTrialOrganListInDto inDto) //{ // var organInfoQueryable = from data in _organInfoRepository.WhereIf(inDto.CriterionNidusId != null, x => x.CriterionNidusId == inDto.CriterionNidusId) // join trialData in _organTrialInfoRepository.WhereIf(inDto.IsEnable != null, x => x.IsEnable == inDto.IsEnable) // .Where(x => x.TrialId == inDto.TrialId) // on data.Id equals trialData.OrganInfoId into jtemp // from leftjoin in jtemp.DefaultIfEmpty() // select new GetTrialCheckOrganList() // { // Id = data.Id, // Part = data.Part, // TULAT = data.TULAT, // TULOC = data.TULOC, // IsCheckd= leftjoin!=null, // Remark = data.Remark, // CriterionNidusId = data.CriterionNidusId, // IsEnable = leftjoin.IsEnable, // }; // return await organInfoQueryable.ToListAsync(); //} #endregion /// /// 同步系统器官到项目 /// /// /// [HttpPost] public async Task SynchronizeSystemOrganToTrial(SynchronizeSystemOrganToTrialInDto inDto) { // 选中的标准进行修改 var readingQuestionCriterionTrial = await _readingQuestionCriterionTrial.Where(x => x.TrialId == inDto.TrialId && x.IsConfirm).FirstOrDefaultAsync(); if (readingQuestionCriterionTrial != null) { Guid trialCriterionId = default(Guid); trialCriterionId = readingQuestionCriterionTrial.Id; if (inDto.SystemCriterionId == null) { inDto.SystemCriterionId = readingQuestionCriterionTrial.ReadingQuestionCriterionSystemId; } await _criterionNidusRepository.BatchDeleteNoTrackingAsync(x => x.CriterionId == trialCriterionId); List criterionNidusList = await _criterionNidusRepository.Where(x => x.CriterionId == inDto.SystemCriterionId).Select(x => new CriterionNidusData() { Id = x.Id, CriterionId = trialCriterionId, LesionType = x.LesionType, OriginalId = x.Id, OrganType=x.OrganType, IsSystemCriterion=false, }).ToListAsync(); criterionNidusList.ForEach(x => x.Id = NewId.NextGuid()); await _criterionNidusRepository.AddRangeAsync(criterionNidusList); await _organTrialInfoRepository.BatchDeleteNoTrackingAsync(x => x.TrialId == inDto.TrialId); var originalIds = criterionNidusList.Select(x => x.OriginalId).Distinct().ToList(); List organTrialInfoList = await _organInfoRepository.Where(x =>x.SystemCriterionId== inDto.SystemCriterionId).Select(x => new OrganTrialInfo() { //OrganType=x.OrganType, Id = x.Id, IsEnable = true, TrialCriterionId= readingQuestionCriterionTrial.Id, OrganInfoId = x.Id, TrialId = inDto.TrialId, }).ToListAsync(); organTrialInfoList.ForEach(x => x.Id = NewId.NextGuid()); await _organTrialInfoRepository.AddRangeAsync(organTrialInfoList); await _readingQuestionCriterionTrial.BatchUpdateNoTrackingAsync(x=>x.Id==trialCriterionId,x=> new ReadingQuestionCriterionTrial() { SynchronizeOriginalTime=DateTime.Now }); await _organTrialInfoRepository.SaveChangesAsync(); } return ResponseOutput.Ok(); } /// /// 设置项目器官是否生效 /// /// /// [HttpPost] public async Task SetOrganIsEnable(SetOrganIsEnableInDto inDto) { await _organTrialInfoRepository.UpdatePartialFromQueryAsync(x => inDto.Ids.Contains(x.Id), x => new OrganTrialInfo() { IsEnable=inDto.IsEnable }); await _organTrialInfoRepository.SaveChangesAsync(); return ResponseOutput.Ok(); } } }