using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using WIDESEA_Core.CacheManager; using WIDESEA_Core.DBManager; using WIDESEA_Core.Extensions.AutofacManager; using WIDESEA_Core.Services; using WIDESEA_Entity.DomainModels; namespace WIDESEA_Core.Infrastructure { public static class DictionaryManager { private static List<Sys_Dictionary> _dictionaries { get; set; } private static object _dicObj = new object(); private static string _dicVersionn = ""; public const string Key = "inernalDic"; public static List<Sys_Dictionary> Dictionaries { get { return GetAllDictionary(); } } public static Sys_Dictionary GetDictionary(string dicNo) { return GetDictionaries(new string[] { dicNo }).FirstOrDefault(); } /// <summary> /// /// </summary> /// <param name="dicNos"></param> /// <param name="executeSql">æ˜¯å¦æ‰§è¡Œè‡ªå®šä¹‰sql</param> /// <returns></returns> public static IEnumerable<Sys_Dictionary> GetDictionaries(IEnumerable<string> dicNos, bool executeSql = true) { static List<Sys_DictionaryList> query(string sql) { try { return DBServerProvider.SqlDapper.QueryList<SourceKeyVaule>(sql, null).Select(s => new Sys_DictionaryList() { DicName = s.Value, DicValue = s.Key.ToString() }).ToList(); } catch (Exception ex) { Logger.Error($"å—典执行sql异常,sql:{sql},异常信æ¯ï¼š{ex.Message + ex.StackTrace}"); throw ex; // Console.WriteLine(ex.Message); // return null; } } foreach (var item in Dictionaries.Where(x => dicNos.Contains(x.DicNo))) { if (executeSql) { // 2020.05.01å¢žåŠ æ ¹æ®ç”¨æˆ·ä¿¡æ¯åŠ è½½å—å…¸æ•°æ®æºsql string sql = DictionaryHandler.GetCustomDBSql(item.DicNo, item.DbSql); if (!string.IsNullOrEmpty(item.DbSql)) { item.Sys_DictionaryList = query(sql); } } yield return item; } } /// <summary> /// æ¯æ¬¡å˜æ›´å—å…¸é…ç½®çš„æ—¶å€™ä¼šé‡æ–°æ‹‰å–所有é…置进行缓å˜(è‡ªè¡Œæ ¹æ®å®žé™…处ç†) /// </summary> /// <returns></returns> private static List<Sys_Dictionary> GetAllDictionary() { ICacheService cacheService = AutofacContainerModule.GetService<ICacheService>(); //æ¯æ¬¡æ¯”è¾ƒç¼“å˜æ˜¯å¦æ›´æ–°è¿‡ï¼Œå¦‚æžœæ›´æ–°åˆ™é‡æ–°èŽ·å–æ•°æ® if (_dictionaries != null && _dicVersionn == cacheService.Get(Key)) { return _dictionaries; } lock (_dicObj) { if (_dicVersionn != "" && _dictionaries != null && _dicVersionn == cacheService.Get(Key)) return _dictionaries; _dictionaries = DBServerProvider.DbContext .Set<Sys_Dictionary>() .Where(x => x.Enable == 1) .Include(c => c.Sys_DictionaryList).ToList(); string cacheVersion = cacheService.Get(Key); if (string.IsNullOrEmpty(cacheVersion)) { cacheVersion = DateTime.Now.ToString("yyyyMMddHHMMssfff"); cacheService.Add(Key, cacheVersion); } else { _dicVersionn = cacheVersion; } } return _dictionaries; } } public class SourceKeyVaule { public object Key { get; set; } public string Value { get; set; } } }