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, 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 GetVueDictionary(string[] dicNos) { if (dicNos == null || dicNos.Count() == 0) return new List(); List vueDictionaryDTOs = new List(); List cacheDicNos = new List(); foreach (string n in dicNos) { string? str = _cacheService.Get(n); if (!string.IsNullOrEmpty(str)) { VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject(str); if (vueDictionary != null) { vueDictionaryDTOs.Add(vueDictionary); cacheDicNos.Add(n); } } } if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0) { List list = dicNos.Where(x => !cacheDicNos.Contains(x)).ToList(); List dictionaries = BaseDal.GetDictionaries(list).ToList(); List 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; } } }