using Autofac.Core; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Information; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Caches; using WIDESEA_Core.DB; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO.System; using WIDESEA_IRepository; using WIDESEA_IServices; using WIDESEA_Model.Models; namespace WIDESEA_Services { 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 object GetVueDictionary(string[] dicNos) //{ // if (dicNos == null || dicNos.Count() == 0) return new string[] { }; // var dicConfig = BaseDal.GetDictionaries(dicNos, false).Select(s => new // { // dicNo = s.DicNo, // config = s.Config, // dbSql = s.DBSql, // list = s.DicList.OrderByDescending(o => o.OrderNo).Select(list => new { key = list.DicValue, value = list.DicName }) // }).ToList(); // object GetSourceData(string dicNo, string dbSql, object data) // { // if (string.IsNullOrEmpty(dbSql)) // { // return data as object; // } // return BaseDal.QueryObjectDataBySql(dbSql, null); // } // return dicConfig.Select(item => new // { // item.dicNo, // item.config, // data = GetSourceData(item.dicNo, item.dbSql, item.list) // }).ToList(); //} 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; } } }