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;
}
}
}