using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; 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; 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; using WIDESEAWCS_Model.Models.System; namespace WIDESEAWCS_SystemServices { public class Sys_DictionaryService : ServiceBase, ISys_DictionaryService { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly ICacheService _cacheService; private readonly ISys_RoleService _sys_RoleService; public Sys_DictionaryService(ISys_DictionaryRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_RoleService sys_RoleService) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _cacheService = cacheService; _sys_RoleService = sys_RoleService; } public List GetVueDictionary(string[] dicNos) { if (dicNos == null || dicNos.Count() == 0) return new List(); List vueDictionaryDTOs = new List(); List cacheDicNos = new List(); if (dicNos.Where(x => !cacheDicNos.Contains(x)).Count() > 0) { var selectDics = BaseDal.GetDictionaries(dicNos.Where(x => !cacheDicNos.Contains(x)), _sys_RoleService.GetAllChildren(App.User.RoleId)); foreach (var item in selectDics) { if (!_cacheService.Exists(item.DicNo)) { vueDictionaryDTOs.Add(item); _cacheService.Add(item.DicNo, item.Serialize()); } else { VueDictionaryDTO? vueDictionary = JsonConvert.DeserializeObject(_cacheService.Get(item.DicNo)); if (vueDictionary != null && vueDictionary.Data.ToJson() != item.Data.ToJson()) { vueDictionaryDTOs.Add(item); _cacheService.AddOrUpdate(item.DicNo, item.Serialize()); } } } } return vueDictionaryDTOs; } } }