You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
6.3 KiB
C#

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();
/// <summary>
/// 获取多组设置
/// </summary>
/// <param name="groupName"></param>
/// <returns></returns>
public static Dictionary<string, Config> LoadSettingsByGroups(List<string> groupNames)
{
Dictionary<string, Config> 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<Config>(sql).ToList();
data = configList.ToDictionary(x => x.Keys, x => x);
}
}
catch (Exception ex)
{
logger.Error(ex, "保存系统设置异常");
}
}
}
return data;
}
/// <summary>
/// 加载设置入口,设置默认项
/// </summary>
/// <param name="defaultDic"></param>
/// <returns></returns>
public static Dictionary<string, Config> LoadSettingsAndSaveDefault(Dictionary<string, Config> defaultDic)
{
Dictionary<string, Config> result = null;
var configList = defaultDic.Values.ToList();
var groupList = configList.ConvertAll(x => x.Group).Distinct().ToList();
Dictionary<string, Config> 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;
}
/// <summary>
/// 保存默认设置
/// </summary>
/// <param name="configList"></param>
public static void SaveSettings(List<Config> 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, "保存系统设置异常");
}
}
}
/// <summary>
/// 更新默认设置
/// </summary>
/// <param name="configList"></param>
public static void UpdateSettings(List<Config> configList)
{
lock (Global.Instance.SyncLock)
{
try
{
ConcurrentQueue<string> sqls = new ConcurrentQueue<string>();
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, "更新系统设置异常");
}
}
}
/// <summary>
/// 获取设置的值
/// </summary>
/// <param name="keys"></param>
/// <returns></returns>
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<Config>(sql);
if(config != null)
{
result = config.Values;
}
}
}
catch (Exception ex)
{
logger.Error(ex, "获取系统设置["+keys+"]异常");
}
return result;
}
}
}