using IRaCIS.Application.Interfaces; using IRaCIS.Application.Contracts; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Domain.Share; namespace IRaCIS.Application.Services { /// /// 数据字典-基础数据维护 /// [ApiExplorerSettings(GroupName = "Common")] public class DictionaryService : BaseService, IDictionaryService { private readonly IRepository _dicRepository; private readonly IRepository _doctorDictionaryRepository; private readonly IRepository _trialDictionaryRepository; private readonly IRepository _doctorRepository; private readonly IRepository _trialRepository; public DictionaryService(IRepository sysDicRepository, IRepository doctorDictionaryRepository, IRepository trialDictionaryRepository, IRepository doctorRepository, IRepository trialRepository) { _dicRepository = sysDicRepository; _doctorDictionaryRepository = doctorDictionaryRepository; _trialDictionaryRepository = trialDictionaryRepository; _doctorRepository = doctorRepository; _trialRepository = trialRepository; } /// /// New 查询条件 IsConfig 代表是字典类型配置项 否就是我们普通的项 和普通项的子项 /// /// /// [HttpPost] public async Task> GetBasicDicList(BasicDicQuery basicDicQuery) { var systemBasicDataQueryable = _dicRepository.Where(t => t.ParentId == null) .WhereIf(!string.IsNullOrEmpty(basicDicQuery.Code), t => t.Code.Contains(basicDicQuery.Code!)) .WhereIf(basicDicQuery.ConfigTypeId != null, t => t.ConfigTypeId == basicDicQuery.ConfigTypeId!) .WhereIf(basicDicQuery.IsConfig != null, t => t.IsConfig == basicDicQuery.IsConfig) .ProjectTo(_mapper.ConfigurationProvider); return await systemBasicDataQueryable.ToPagedListAsync(basicDicQuery.PageIndex, basicDicQuery.PageSize, String.IsNullOrEmpty(basicDicQuery.SortField) ? nameof(BasicDicView.ConfigType) : basicDicQuery.SortField, basicDicQuery.Asc, String.IsNullOrEmpty(basicDicQuery.SortField), new []{ nameof(BasicDicView.ConfigType) ,nameof(BasicDicView.ShowOrder)}); } /// /// 添加和编辑 /// /// /// [HttpPost] public async Task AddOrUpdateBasicDic(AddOrEditBasicDic addOrEditBasic) { var entity = await _dicRepository.InsertOrUpdateAsync(addOrEditBasic, true); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// 获取子项数组 /// /// /// [HttpGet("{parentId:guid}")] public async Task> GetChildList(Guid parentId) { return await _dicRepository.Where(t => t.ParentId == parentId) .OrderBy(t => t.ShowOrder).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); } /// 删除字典数据 [HttpDelete("{id:guid}")] public async Task DeleteDictionary(Guid id) { if ( await _dicRepository.AnyAsync(t => t.ParentId == id)) { return ResponseOutput.NotOk("有子项数据,不允许直接删除!"); } if ((await _doctorDictionaryRepository.AnyAsync(t => t.DictionaryId == id)) || (await _doctorRepository.AnyAsync(t => t.SpecialityId == id || t.PositionId == id || t.DepartmentId == id || t.RankId == id)) ) { return ResponseOutput.NotOk("当前条目已经在阅片人的简历中被引用。"); } if (await _trialDictionaryRepository.AnyAsync(t => t.DictionaryId == id) || await _trialRepository.AnyAsync(t => t.ReviewModeId == id)) { return ResponseOutput.NotOk("当前条目已经在项目信息中被引用。"); } var success = await _dicRepository.BatchDeleteNoTrackingAsync(t => t.Id == id); return ResponseOutput.Result(success); } /// /// 传递父亲 code 字符串 数组 返回多个下拉框数据 /// /// /// [HttpPost] public async Task>> GetBasicDataSelect(string[] searchArray) { var searchList = await _dicRepository.Where(t => searchArray.Contains(t.Parent.Code) && t.ParentId != null && t.IsEnable).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); return searchList.GroupBy(t => t.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t=>t.ShowOrder).ToList()); } /// /// 根据父亲Code 获取单个下拉框数据 /// /// /// public async Task> GetBasicDataSelect(string searchKey) { var searchList = await _dicRepository.Where(t => t.Parent.Code== searchKey && t.ParentId != null && t.IsEnable).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); return searchList; } /// /// 获取所有下拉框 枚举 bool 数据 /// /// [AllowAnonymous] public async Task>> GetBasicDataAllSelect() { var searchList = await _dicRepository.Where(t => t.ParentId != null && t.IsEnable).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); return searchList.GroupBy(t => t.ParentCode).ToDictionary(g => g.Key, g => g.OrderBy(t => t.ShowOrder).ToList()); } #region 稽查相关 /// /// 获取是和否 /// /// /// public async Task GetBoolValueState(bool value) { return await _dicRepository.Where(t => t.Parent.Code == "YesOrNo" && t.Code == value.ToString()).Select(x => x.ValueCN).FirstOrDefaultAsync() ?? string.Empty; } /// /// 获取审核状态 /// /// /// /// /// public async Task GetAuditState(Guid trial, T childCode) { var QCProcessEnum = _trialRepository.Where(x => x.Id == trial).Select(x => x.QCProcessEnum).FirstOrDefault(); switch (QCProcessEnum) { case TrialQCProcess.SingleAudit: return await _dicRepository.Where(t => t.Parent.Code == "AuditStatePE" && t.Code == Convert.ToInt32(childCode).ToString()).Select(x => x.ValueCN).FirstOrDefaultAsync() ?? string.Empty; case TrialQCProcess.DoubleAudit: return await _dicRepository.Where(t => t.Parent.Code == "AuditStateRC" && t.Code == Convert.ToInt32(childCode).ToString()).Select(x => x.ValueCN).FirstOrDefaultAsync() ?? string.Empty; default: return string.Empty; } } public async Task GetBasicDataTranslateItem(string parentCode, T childCode) { return await _dicRepository.Where(t => t.Parent.Code == parentCode && t.Code == Convert.ToInt32(childCode).ToString()).Select(x => x.ValueCN).FirstOrDefaultAsync() ?? string.Empty; } #endregion } }