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