using IRaCIS.Application.Interfaces; using IRaCIS.Application.Contracts; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Application.Contracts; 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; private readonly IReadingQuestionService _readingQuestionService; public DictionaryService(IRepository sysDicRepository, IRepository doctorDictionaryRepository, IRepository trialDictionaryRepository, IRepository doctorRepository, IRepository trialRepository, IReadingQuestionService readingQuestionService ) { _dicRepository = sysDicRepository; _doctorDictionaryRepository = doctorDictionaryRepository; _trialDictionaryRepository = trialDictionaryRepository; _doctorRepository = doctorRepository; _trialRepository = trialRepository; this._readingQuestionService = readingQuestionService; } /// /// 添加bool /// /// /// [HttpPost] public async Task AddBoolDic(AddOrEditBasicDic addOrEditBasic) { var entity = await _dicRepository.InsertFromDTOAsync(addOrEditBasic); var child1 = entity.Clone(); child1.Id = Guid.Empty; child1.Code = "true"; child1.ParentId = entity.Id; entity.ChildList.Add(child1); var child2 = entity.Clone(); child2.Id = Guid.Empty; child2.Code = "false"; child2.ParentId = entity.Id; entity.ChildList.Add(child2); await _dicRepository.SaveChangesAsync(); return ResponseOutput.Ok(entity.Id.ToString()); } /// /// New 查询条件 /// /// /// [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(!string.IsNullOrEmpty(basicDicQuery.keyInfo), t => t.Description.Contains(basicDicQuery.keyInfo!) || t.Code.Contains(basicDicQuery.keyInfo!) || t.ChildList.Any(u => u.ValueCN.Contains(basicDicQuery.keyInfo!)) || t.ChildList.Any(u => u.Description.Contains(basicDicQuery.keyInfo!)) || t.ChildList.Any(u => u.Value.Contains(basicDicQuery.keyInfo!))) .WhereIf(basicDicQuery.ConfigTypeId != null, t => t.ConfigTypeId == basicDicQuery.ConfigTypeId!) .WhereIf(basicDicQuery.DataTypeEnum != null, t => t.DataTypeEnum == basicDicQuery.DataTypeEnum) .WhereIf(basicDicQuery.DataTypeEnum == null, t => t.DataTypeEnum != DicDataTypeEnum.Config) .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 verifyExp1 = new EntityVerifyExp() { VerifyExp = t => t.Code == addOrEditBasic.Code&&t.ParentId== addOrEditBasic.ParentId, VerifyMsg = $"已有{addOrEditBasic.Code}名称的字典", IsVerify= addOrEditBasic.ParentId ==null }; //// 验证阅片标准是否可禁用 //if (!addOrEditBasic.IsEnable&&addOrEditBasic.Id!=null) //{ // var result = await _readingQuestionService.SetSystemCriterionDisable(addOrEditBasic.Id.Value,addOrEditBasic.ParentId); // if (!result.IsSuccess) // { // return result; // } //} if (addOrEditBasic.Id != null && addOrEditBasic.ParentId!=null) { await _dicRepository.UpdatePartialFromQueryAsync(t => t.ParentId == addOrEditBasic.Id, c => new Dictionary() { DataTypeEnum = addOrEditBasic.DataTypeEnum }); } var entity = await _dicRepository.InsertOrUpdateAsync(addOrEditBasic, true, verifyExp1); await _dicRepository.SaveChangesAsync(); 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; } /// /// 根据父亲字典分组 获取子项 /// /// /// public async Task> GetBasicConfigSelect(string searchKey) { var searchList = await _dicRepository.Where(t => t.ConfigDictionary.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 } }