从山证v2.3.0拷贝

This commit is contained in:
吴方海
2024-05-09 14:06:26 +08:00
parent 566ff33259
commit f9d8a256a6
4471 changed files with 1203456 additions and 9 deletions
@@ -0,0 +1,135 @@
using YLErp.Enums;
namespace YLErp.Modules.CalculationLogModule
{
internal class CalculationLogger
{
private readonly static object _lock = new object();
/// <summary>
/// 所有日志集合
/// </summary>
private static List<CalculationLog> Options { get; set; } = new List<CalculationLog>();
/// <summary>
/// 配置
/// </summary>
private static CalculationLoggerConfig _config = new CalculationLoggerConfig();
/// <summary>
/// 配置记录日志的场景
/// </summary>
/// <param name="scenarios">日志场景</param>
public static void Setup(CalculationLoggerConfig config)
{
_config.TotalCountMaxLimit = config.TotalCountMaxLimit;
_config.ScenariosOfCalcLog = config.ScenariosOfCalcLog;
}
/// <summary>
/// 返回配置
/// </summary>
/// <returns></returns>
public static CalculationLoggerConfig GetConfig()
{
return _config;
}
/// <summary>
/// 返回所有的日志
/// </summary>
/// <returns></returns>
public static List<CalculationLog> GetAllLogs()
{
return Options.ToList();
}
/// <summary>
/// 查询Log
/// </summary>
/// <param name="logNum">log 编号</param>
/// <returns></returns>
public static CalculationLog GetLog(string logNum)
{
return Options.FirstOrDefault(b=>b.LogNum==logNum);
}
/// <summary>
/// 按场景添加日志
/// </summary>
/// <param name="log">日志对象</param>
/// <param name="scenarioEnum">日志场景</param>
public static void AddLogWithScenario(CalculationLog log, CalcScenarioEnum scenarioEnum)
{
if (_config.ScenariosOfCalcLog.Contains(scenarioEnum))
{
log.Scenario = scenarioEnum;
AddLogWithLimit(log);
}
}
/// <summary>
/// 清除所有的日志
/// </summary>
public static void ClearAll()
{
Options.Clear();
}
/// <summary>
/// 有限制的添加日志
/// </summary>
/// <param name="log">日志对象</param>
private static void AddLogWithLimit(CalculationLog log)
{
var count = GetCurrentTotalCount();
if (count >= _config.TotalCountMaxLimit)
{
// 如果总数量大于限制的数量,先删除头部1000条
// TotalCountMaxLimit可能会有改动,所以需要(count - _config.TotalCountMaxLimit
RemoveLogs(0, count - _config.TotalCountMaxLimit + 1000);
}
AddLog(log);
}
/// <summary>
/// 添加一条log
/// </summary>
/// <param name="log"></param>
private static void AddLog(CalculationLog log)
{
log.LogNum=Guid.NewGuid().ToString();
lock (_lock)
{
Options.Add(log);
}
}
/// <summary>
/// 删除1000条logs
/// </summary>
private static void RemoveThousandLogs()
{
RemoveLogs(0, 1000);
}
/// <summary>
/// 删除logs
/// </summary>
/// <param name="index">起始位置</param>
/// <param name="count">删除数量</param>
private static void RemoveLogs(int index, int count)
{
Options.RemoveRange(index, count - 1);
}
/// <summary>
/// 获取当前Log总数量
/// </summary>
/// <returns></returns>
private static int GetCurrentTotalCount()
{
return Options.Count;
}
}
}