using JwKdsV.Entity; using NLog; using NPoco; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace JwKdsV.Core.Utils { public class SettingApi { private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); /// /// 获取多组设置 /// /// /// public static Dictionary LoadSettingsByGroups(List groupNames) { Dictionary data = null; StringBuilder bs = new StringBuilder("'"); if(groupNames != null && groupNames.Count > 0) { foreach(var name in groupNames) { bs.Append(name).Append("','"); } //去除最后一个逗号 bs = bs.Remove(bs.Length - 2, 2); if (!string.IsNullOrEmpty(bs.ToString())) { string sql = string.Format(SqlConstant.ConfigQueryByGroups, bs.ToString()); try { using (IDatabase db = Global.Instance.OpenDataBase) { var configList = db.Query(sql).ToList(); data = configList.ToDictionary(x => x.Keys, x => x); } } catch (Exception ex) { logger.Error(ex, "保存系统设置异常"); } } } return data; } /// /// 加载设置入口,设置默认项 /// /// /// public static Dictionary LoadSettingsAndSaveDefault(Dictionary defaultDic) { Dictionary result = null; var configList = defaultDic.Values.ToList(); var groupList = configList.ConvertAll(x => x.Group).Distinct().ToList(); Dictionary dbDic = LoadSettingsByGroups(groupList); if(dbDic != null) { var diffDic = defaultDic.Where(x => !dbDic.ContainsKey(x.Key)).ToDictionary(x => x.Key, x => x.Value); if(diffDic != null && diffDic.Count > 0) { //有变化,先保存默认值,再合并 SaveSettings(diffDic.Values.ToList()); result = dbDic.Concat(diffDic).ToDictionary(x => x.Key, x => x.Value); } else { result = dbDic; } } else { SaveSettings(defaultDic.Values.ToList()); result = defaultDic; } return result; } /// /// 保存默认设置 /// /// public static void SaveSettings(List configList) { lock (Global.Instance.SyncLock) { try { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { foreach (var config in configList) { db.Save(config); } trans.Complete(); } } //重新加载缓存 Global.Instance.ReloadConfig(); } catch (Exception ex) { logger.Error(ex, "保存系统设置异常"); } } } /// /// 更新默认设置 /// /// public static void UpdateSettings(List configList) { lock (Global.Instance.SyncLock) { try { ConcurrentQueue sqls = new ConcurrentQueue(); foreach(Config config in configList) { var sql = string.Format(SqlConstant.ConfigSaveOrUpdate, config.Id, config.TenantId, config.Group, config.Name, config.Keys, config.Values, config.CreateUser, config.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), config.ModifyUser, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); sqls.Enqueue(sql); } if(sqls.Count > 0) { SQLiteUtils.ExecuteTransaction(sqls); //重新加载缓存 Global.Instance.ReloadConfig(); } } catch (Exception ex) { logger.Error(ex, "更新系统设置异常"); } } } /// /// 获取设置的值 /// /// /// public static string GetConfigValuesByKey(string keys) { string result = null; try { using (IDatabase db = Global.Instance.OpenDataBase) { string sql = string.Format(SqlConstant.ConfigQueryByKey, keys); var config = db.FirstOrDefault(sql); if(config != null) { result = config.Values; } } } catch (Exception ex) { logger.Error(ex, "获取系统设置["+keys+"]异常"); } return result; } } }