| using Newtonsoft.Json; | 
| using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.ComponentModel; | 
| using System.Linq; | 
| using System.Reflection; | 
| using System.Text; | 
| using System.Threading.Tasks; | 
| using WIDESEAWCS_Common.TaskEnum; | 
| using WIDESEAWCS_Core.BaseRepository; | 
| using WIDESEAWCS_Core.BaseServices; | 
| using WIDESEAWCS_Core.Caches; | 
| using WIDESEAWCS_Core.DB; | 
| using WIDESEAWCS_Core.Enums; | 
| using WIDESEAWCS_Core.Helper; | 
| using WIDESEAWCS_DTO.System; | 
| using WIDESEAWCS_ISystemRepository; | 
| using WIDESEAWCS_ISystemServices; | 
| using WIDESEAWCS_Model.Models; | 
|   | 
| namespace WIDESEAWCS_SystemServices | 
| { | 
|     public class Sys_DictionaryService : ServiceBase<Sys_Dictionary, ISys_DictionaryRepository>, ISys_DictionaryService | 
|     { | 
|         private readonly IUnitOfWorkManage _unitOfWorkManage; | 
|         private readonly ICacheService _cacheService; | 
|   | 
|         public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService) : base(BaseDal) | 
|         { | 
|             _unitOfWorkManage = unitOfWorkManage; | 
|             _cacheService = cacheService; | 
|         } | 
|   | 
|         public List<VueDictionaryDTO> GetVueDictionary(string[] dicNos) | 
|         { | 
|             if (dicNos == null || dicNos.Count() == 0) return new List<VueDictionaryDTO>(); | 
|             List<VueDictionaryDTO> vueDictionaryDTOs = new List<VueDictionaryDTO>(); | 
|   | 
|             List<string> cacheDicNos = new List<string>(); | 
|             foreach (string n in dicNos) | 
|             { | 
|                 string? str = _cacheService.Get(n); | 
|                 if (!string.IsNullOrEmpty(str)) | 
|                 { | 
|                     VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject<VueDictionaryDTO>(str); | 
|   | 
|                     if (vueDictionary != null) | 
|                     { | 
|                         vueDictionaryDTOs.Add(vueDictionary); | 
|                         cacheDicNos.Add(n); | 
|                     } | 
|                 } | 
|             } | 
|             if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0) | 
|             { | 
|                 List<string> list = dicNos.Where(x => !cacheDicNos.Contains(x)).ToList(); | 
|                 List<Sys_Dictionary> dictionaries = BaseDal.GetDictionaries(list).ToList(); | 
|   | 
|                 List<VueDictionaryDTO> selectDics = dictionaries.Select(s => new VueDictionaryDTO | 
|                 { | 
|                     DicNo = s.DicNo, | 
|                     Config = s.Config, | 
|                     //dbSql = s.Sql, | 
|                     Data = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName }) | 
|                 }).ToList(); | 
|   | 
|                 foreach (var v in dictionaries) | 
|                 { | 
|                     if (!string.IsNullOrEmpty(v.DBSql)) | 
|                     { | 
|                         VueDictionaryDTO? temp = selectDics.FirstOrDefault(x => x.DicNo == v.DicNo); | 
|                         if (temp != null) | 
|                             selectDics.Remove(temp); | 
|                         selectDics.Add(new VueDictionaryDTO | 
|                         { | 
|                             Config = v.Config, | 
|                             DicNo = v.DicNo, | 
|                             Data = BaseDal.QueryDynamicDataBySql(v.DBSql), | 
|                             SaveCache = false, | 
|                         }); | 
|                     } | 
|                 } | 
|   | 
|                 foreach (var item in selectDics) | 
|                 { | 
|                     if (!_cacheService.Exists(item.DicNo) && item.SaveCache) | 
|                     { | 
|                         _cacheService.Add(item.DicNo, item.Serialize()); | 
|                     } | 
|                 } | 
|                 vueDictionaryDTOs.AddRange(selectDics); | 
|             } | 
|   | 
|             return vueDictionaryDTOs; | 
|         } | 
|     } | 
| } |