😎清理代码
This commit is contained in:
parent
0f30009f91
commit
21168c280d
@ -5,7 +5,6 @@
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
global using Admin.NET.Core;
|
||||
global using Admin.NET.Core.Utils;
|
||||
global using Furion;
|
||||
global using Furion.DependencyInjection;
|
||||
global using Furion.DynamicApiController;
|
||||
|
||||
@ -25,7 +25,7 @@ public class CaptchaDistributedCache : IDistributedCache
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
private string GetKey(string key)
|
||||
private static string GetKey(string key)
|
||||
{
|
||||
return $"Captcha:{key}";
|
||||
}
|
||||
|
||||
@ -31,9 +31,9 @@ public sealed class RedisEventSourceStorer : IEventSourceStorer, IDisposable
|
||||
/// </summary>
|
||||
private readonly Channel<IEventSource> _channel;
|
||||
|
||||
private IProducerConsumer<ChannelEventSource> _queueSingle;
|
||||
private readonly IProducerConsumer<ChannelEventSource> _queueSingle;
|
||||
|
||||
private RedisStream<string> _queueBroadcast;
|
||||
private readonly RedisStream<string> _queueBroadcast;
|
||||
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
@ -111,8 +111,7 @@ public sealed class RedisEventSourceStorer : IEventSourceStorer, IDisposable
|
||||
public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken)
|
||||
{
|
||||
// 空检查
|
||||
if (eventSource == default)
|
||||
throw new ArgumentNullException(nameof(eventSource));
|
||||
ArgumentNullException.ThrowIfNull(eventSource);
|
||||
|
||||
// 这里判断是否是 ChannelEventSource 或者 自定义的 EventSource
|
||||
if (eventSource is ChannelEventSource source)
|
||||
|
||||
@ -1,43 +0,0 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core;
|
||||
|
||||
public static class LogInfoExtension
|
||||
{
|
||||
/// <summary>
|
||||
/// 添加自定义日志 自动设置当前请求的Action和Controller名称
|
||||
/// </summary>
|
||||
/// <param name="logger"></param>
|
||||
/// <param name="title"></param>
|
||||
/// <param name="logMessage"></param>
|
||||
/// <param name="args"></param>
|
||||
public static void AddLog(this ILogger logger, string title, string logMessage, params object[] args)
|
||||
{
|
||||
var request = App.HttpContext.Request;
|
||||
// 获取当前路由信息
|
||||
var route = request.RouteValues.Values;
|
||||
var scheme = request.Scheme; // 协议(http 或 https)
|
||||
var host = request.Host.Value; // 主机名(包括端口)
|
||||
var path = request.Path.Value; // 路径
|
||||
var queryString = request.QueryString.Value; // 查询字符串
|
||||
// 拼接完整链接
|
||||
var fullUrl = $"{scheme}://{host}{path}{queryString}";
|
||||
|
||||
// 写入上下文
|
||||
using var scope = logger.ScopeContext(ctx => ctx.Set("Title", title)
|
||||
.Set("Action", route.FirstOrDefault()?.ToString())
|
||||
.Set("Controller", route.Count > 1 ? route.Skip(1).FirstOrDefault().ToString() : "")
|
||||
.Set("Url", fullUrl)
|
||||
.Set("Method", request.Method)
|
||||
);
|
||||
// 记录日志
|
||||
logger.LogInformation(logMessage, args);
|
||||
|
||||
// 使用方法 先注入_logger
|
||||
// _logger.AddLog("日志标题", "日志内容");
|
||||
}
|
||||
}
|
||||
@ -68,165 +68,7 @@ public static partial class ObjectExtension
|
||||
public static string ToJson(this object obj)
|
||||
{
|
||||
return JSON.GetJsonSerializer().Serialize(obj);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Json字符串反序列化成对象
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="json"></param>
|
||||
/// <returns></returns>
|
||||
public static T ToObject<T>(this string json)
|
||||
{
|
||||
return JSON.GetJsonSerializer().Deserialize<T>(json);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将object转换为long,若失败则返回0
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
public static long ParseToLong(this object obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
return long.Parse(obj.ToString());
|
||||
}
|
||||
catch
|
||||
{
|
||||
return 0L;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将object转换为long,若失败则返回指定值
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <param name="defaultValue"></param>
|
||||
/// <returns></returns>
|
||||
public static long ParseToLong(this string str, long defaultValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
return long.Parse(str);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将object转换为double,若失败则返回0
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
public static double ParseToDouble(this object obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
return double.Parse(obj.ToString());
|
||||
}
|
||||
catch
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将object转换为double,若失败则返回指定值
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <param name="defaultValue"></param>
|
||||
/// <returns></returns>
|
||||
public static double ParseToDouble(this object str, double defaultValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
return double.Parse(str.ToString());
|
||||
}
|
||||
catch
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将string转换为DateTime,若失败则返回日期最小值
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTime ParseToDateTime(this string str)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(str))
|
||||
{
|
||||
return DateTime.MinValue;
|
||||
}
|
||||
if (str.Contains('-') || str.Contains('/'))
|
||||
{
|
||||
return DateTime.Parse(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
int length = str.Length;
|
||||
return length switch
|
||||
{
|
||||
4 => DateTime.ParseExact(str, "yyyy", System.Globalization.CultureInfo.CurrentCulture),
|
||||
6 => DateTime.ParseExact(str, "yyyyMM", System.Globalization.CultureInfo.CurrentCulture),
|
||||
8 => DateTime.ParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
|
||||
10 => DateTime.ParseExact(str, "yyyyMMddHH", System.Globalization.CultureInfo.CurrentCulture),
|
||||
12 => DateTime.ParseExact(str, "yyyyMMddHHmm", System.Globalization.CultureInfo.CurrentCulture),
|
||||
14 => DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture),
|
||||
_ => DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture),
|
||||
};
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return DateTime.MinValue;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将string转换为DateTime,若失败则返回默认值
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <param name="defaultValue"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTime ParseToDateTime(this string str, DateTime? defaultValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(str))
|
||||
{
|
||||
return defaultValue.GetValueOrDefault();
|
||||
}
|
||||
if (str.Contains('-') || str.Contains('/'))
|
||||
{
|
||||
return DateTime.Parse(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
int length = str.Length;
|
||||
return length switch
|
||||
{
|
||||
4 => DateTime.ParseExact(str, "yyyy", System.Globalization.CultureInfo.CurrentCulture),
|
||||
6 => DateTime.ParseExact(str, "yyyyMM", System.Globalization.CultureInfo.CurrentCulture),
|
||||
8 => DateTime.ParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
|
||||
10 => DateTime.ParseExact(str, "yyyyMMddHH", System.Globalization.CultureInfo.CurrentCulture),
|
||||
12 => DateTime.ParseExact(str, "yyyyMMddHHmm", System.Globalization.CultureInfo.CurrentCulture),
|
||||
14 => DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture),
|
||||
_ => DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture),
|
||||
};
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return defaultValue.GetValueOrDefault();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 string 时间日期格式转换成字符串 如 {yyyy} => 2024
|
||||
|
||||
@ -36,7 +36,7 @@ public static class YitIdHelperExtension
|
||||
// return;
|
||||
//}
|
||||
|
||||
var maxLength = Math.Pow(2, _options.WorkerIdBitLength.ParseToDouble());
|
||||
var maxLength = Math.Pow(2, _options.WorkerIdBitLength.ToLong());
|
||||
for (int i = 0; i < maxLength; i++)
|
||||
{
|
||||
_workIds.Add(i.ToString());
|
||||
@ -54,7 +54,7 @@ public static class YitIdHelperExtension
|
||||
var valueKey = $"{_options.WorkerPrefix}{MainValueKey}";
|
||||
|
||||
var minWorkId = 0;
|
||||
var maxWorkId = Math.Pow(2, _options.WorkerIdBitLength.ParseToDouble());
|
||||
var maxWorkId = Math.Pow(2, _options.WorkerIdBitLength.ToLong());
|
||||
|
||||
var cache = App.GetRequiredService<ICacheProvider>().Cache;
|
||||
var redisLock = cache.AcquireLock(lockName, 10000, 15000, true);
|
||||
@ -85,7 +85,7 @@ public static class YitIdHelperExtension
|
||||
|
||||
Console.WriteLine($"############ 当前应用雪花WorkId:【{workIdStr}】############");
|
||||
|
||||
long workId = workIdStr.ParseToLong();
|
||||
long workId = workIdStr.ToLong();
|
||||
if (workId < minWorkId || workId > maxWorkId)
|
||||
continue;
|
||||
|
||||
|
||||
@ -5,7 +5,6 @@
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
global using Admin.NET.Core.Service;
|
||||
global using Admin.NET.Core.Utils;
|
||||
global using Furion;
|
||||
global using Furion.ConfigurableOptions;
|
||||
global using Furion.DatabaseAccessor;
|
||||
@ -19,7 +18,6 @@ global using Furion.HttpRemote;
|
||||
global using Furion.JsonSerialization;
|
||||
global using Furion.Logging;
|
||||
global using Furion.Schedule;
|
||||
global using Furion.Shapeless;
|
||||
global using Furion.UnifyResult;
|
||||
global using Furion.ViewEngine;
|
||||
global using Magicodes.ExporterAndImporter.Core;
|
||||
|
||||
@ -67,7 +67,7 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
|
||||
Device = device
|
||||
};
|
||||
await _sysOnlineUerRep.InsertAsync(user);
|
||||
_sysCacheService.HashAdd(CacheConst.KeyUserOnline, user.UserId + Context.ConnectionId + loginMode, user);
|
||||
SysCacheService.HashAdd(CacheConst.KeyUserOnline, user.UserId + Context.ConnectionId + loginMode, user);
|
||||
|
||||
// 以租户Id进行分组
|
||||
var groupName = $"{GROUP_ONLINE}{user.TenantId}";
|
||||
@ -96,7 +96,7 @@ public class OnlineUserHub : Hub<IOnlineUserHub>
|
||||
if (user == null) return;
|
||||
|
||||
await _sysOnlineUerRep.DeleteByIdAsync(user.Id);
|
||||
_sysCacheService.HashDel<SysOnlineUser>(CacheConst.KeyUserOnline, user.UserId + Context.ConnectionId + user.LoginMode);
|
||||
SysCacheService.HashDel<SysOnlineUser>(CacheConst.KeyUserOnline, user.UserId + Context.ConnectionId + user.LoginMode);
|
||||
|
||||
// 通知当前组用户变动
|
||||
var userList = await _sysOnlineUerRep.AsQueryable().Filter("", true).Where(u => u.TenantId == user.TenantId).Take(10).ToListAsync();
|
||||
|
||||
@ -17,7 +17,7 @@ public class FuncList
|
||||
/// <param name="a"></param>
|
||||
/// <param name="b"></param>
|
||||
/// <returns></returns>
|
||||
public string Merge(object a, object b)
|
||||
public static string Merge(object a, object b)
|
||||
{
|
||||
return a.ToString() + b.ToString();
|
||||
}
|
||||
@ -28,7 +28,7 @@ public class FuncList
|
||||
/// <param name="a"></param>
|
||||
/// <param name="b"></param>
|
||||
/// <returns></returns>
|
||||
public object MergeObj(object a, object b)
|
||||
public static object MergeObj(object a, object b)
|
||||
{
|
||||
return new { a, b };
|
||||
}
|
||||
@ -39,7 +39,7 @@ public class FuncList
|
||||
/// <param name="a"></param>
|
||||
/// <param name="b"></param>
|
||||
/// <returns></returns>
|
||||
public bool IsContain(object a, object b)
|
||||
public static bool IsContain(object a, object b)
|
||||
{
|
||||
return a.ToString().Split(',').Contains(b);
|
||||
}
|
||||
@ -54,13 +54,13 @@ public class FuncList
|
||||
JTokenType jTokenType = jToken.Type;
|
||||
return jTokenType switch
|
||||
{
|
||||
JTokenType.Integer => jToken.ToObject(typeof(long)),
|
||||
JTokenType.Float => jToken.ToObject(typeof(decimal)),
|
||||
JTokenType.Boolean => jToken.ToObject(typeof(bool)),
|
||||
JTokenType.Date => jToken.ToObject(typeof(DateTime)),
|
||||
JTokenType.Bytes => jToken.ToObject(typeof(byte)),
|
||||
JTokenType.Guid => jToken.ToObject(typeof(Guid)),
|
||||
JTokenType.TimeSpan => jToken.ToObject(typeof(TimeSpan)),
|
||||
JTokenType.Integer => jToken.ToObject<long>(),
|
||||
JTokenType.Float => jToken.ToObject<decimal>(),
|
||||
JTokenType.Boolean => jToken.ToObject<bool>(),
|
||||
JTokenType.Date => jToken.ToObject<DateTime>(),
|
||||
JTokenType.Bytes => jToken.ToObject<byte>(),
|
||||
JTokenType.Guid => jToken.ToObject<Guid>(),
|
||||
JTokenType.TimeSpan => jToken.ToObject<TimeSpan>(),
|
||||
JTokenType.Array => TransJArrayToSugarPara(jToken),
|
||||
_ => jToken
|
||||
};
|
||||
|
||||
@ -132,7 +132,7 @@ public class SelectTable : ISingleton
|
||||
}
|
||||
else if (key.Equals("func"))
|
||||
{
|
||||
ExecFunc(resultObj, item);
|
||||
SelectTable.ExecFunc(resultObj, item);
|
||||
}
|
||||
else if (key.Equals("total@") || key.Equals("total"))
|
||||
{
|
||||
@ -181,7 +181,7 @@ public class SelectTable : ISingleton
|
||||
}
|
||||
else if (key.Equals("func"))
|
||||
{
|
||||
ExecFunc(resultObj, item);
|
||||
SelectTable.ExecFunc(resultObj, item);
|
||||
}
|
||||
else if (key.Equals("total@") || key.Equals("total"))
|
||||
{
|
||||
@ -396,7 +396,7 @@ public class SelectTable : ISingleton
|
||||
}
|
||||
|
||||
// 执行方法
|
||||
private void ExecFunc(JObject resultObj, KeyValuePair<string, JToken> item)
|
||||
private static void ExecFunc(JObject resultObj, KeyValuePair<string, JToken> item)
|
||||
{
|
||||
var jb = JObject.Parse(item.Value.ToString());
|
||||
|
||||
@ -478,7 +478,7 @@ public class SelectTable : ISingleton
|
||||
if (ziduan[1].Length > 20)
|
||||
throw new Exception("别名不能超过20个字符");
|
||||
|
||||
str.Append(ziduan[0] + " as `" + ReplaceSQLChar(ziduan[1]) + "`,");
|
||||
str.Append(ziduan[0] + " as `" + SelectTable.ReplaceSQLChar(ziduan[1]) + "`,");
|
||||
}
|
||||
// 不对函数加``,解决sum(*)、Count(1)等不能使用的问题
|
||||
else if (ziduan[0].Contains('('))
|
||||
@ -835,7 +835,7 @@ public class SelectTable : ISingleton
|
||||
}
|
||||
|
||||
// 处理sql注入
|
||||
private string ReplaceSQLChar(string str)
|
||||
private static string ReplaceSQLChar(string str)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(str))
|
||||
return string.Empty;
|
||||
|
||||
@ -163,7 +163,7 @@ public class SysLdapService : IDynamicApiController, ITransient
|
||||
public async Task<List<SysUserLdap>> SyncUserTenant(long tenantId)
|
||||
{
|
||||
var sysLdap = await _sysLdapRep.GetFirstAsync(c => c.TenantId == tenantId && c.IsDelete == false && c.Status == StatusEnum.Enable) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
|
||||
return await SyncUser(sysLdap);
|
||||
return await SysLdapService.SyncUser(sysLdap);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -175,7 +175,7 @@ public class SysLdapService : IDynamicApiController, ITransient
|
||||
public async Task<List<SysUserLdap>> SyncUser(SyncSysLdapInput input)
|
||||
{
|
||||
var sysLdap = await _sysLdapRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
|
||||
return await SyncUser(sysLdap);
|
||||
return await SysLdapService.SyncUser(sysLdap);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -183,7 +183,7 @@ public class SysLdapService : IDynamicApiController, ITransient
|
||||
/// </summary>
|
||||
/// <param name="sysLdap"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<List<SysUserLdap>> SyncUser(SysLdap sysLdap)
|
||||
private static async Task<List<SysUserLdap>> SyncUser(SysLdap sysLdap)
|
||||
{
|
||||
if (sysLdap == null) throw Oops.Oh(ErrorCodeEnum.D1002);
|
||||
var ldapConn = new LdapConnection();
|
||||
|
||||
@ -154,7 +154,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public TimeSpan GetExpire(string key)
|
||||
public static TimeSpan GetExpire(string key)
|
||||
{
|
||||
return _cacheProvider.Cache.GetExpire(key);
|
||||
}
|
||||
@ -274,7 +274,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public IDictionary<String, T> GetHashMap<T>(string key)
|
||||
public static IDictionary<String, T> GetHashMap<T>(string key)
|
||||
{
|
||||
return _cacheProvider.Cache.GetDictionary<T>(key);
|
||||
}
|
||||
@ -287,7 +287,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="dic"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public bool HashSet<T>(string key, Dictionary<string, T> dic)
|
||||
public static bool HashSet<T>(string key, Dictionary<string, T> dic)
|
||||
{
|
||||
var hash = GetHashMap<T>(key);
|
||||
foreach (var v in dic)
|
||||
@ -305,7 +305,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="hashKey"></param>
|
||||
/// <param name="value"></param>
|
||||
[NonAction]
|
||||
public void HashAdd<T>(string key, string hashKey, T value)
|
||||
public static void HashAdd<T>(string key, string hashKey, T value)
|
||||
{
|
||||
var hash = GetHashMap<T>(key);
|
||||
hash.Add(hashKey, value);
|
||||
@ -319,7 +319,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="hashKey"></param>
|
||||
/// <param name="value"></param>
|
||||
[NonAction]
|
||||
public void HashAddOrUpdate<T>(string key, string hashKey, T value)
|
||||
public static void HashAddOrUpdate<T>(string key, string hashKey, T value)
|
||||
{
|
||||
var hash = GetHashMap<T>(key);
|
||||
if (hash.ContainsKey(hashKey))
|
||||
@ -336,7 +336,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="fields"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public List<T> HashGet<T>(string key, params string[] fields)
|
||||
public static List<T> HashGet<T>(string key, params string[] fields)
|
||||
{
|
||||
var hash = GetHashMap<T>(key);
|
||||
return hash.Where(t => fields.Any(c => t.Key == c)).Select(t => t.Value).ToList();
|
||||
@ -350,7 +350,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="field"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public T HashGetOne<T>(string key, string field)
|
||||
public static T HashGetOne<T>(string key, string field)
|
||||
{
|
||||
var hash = GetHashMap<T>(key);
|
||||
return hash.TryGetValue(field, out T value) ? value : default;
|
||||
@ -363,7 +363,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public IDictionary<string, T> HashGetAll<T>(string key)
|
||||
public static IDictionary<string, T> HashGetAll<T>(string key)
|
||||
{
|
||||
var hash = GetHashMap<T>(key);
|
||||
return hash;
|
||||
@ -377,7 +377,7 @@ public class SysCacheService : IDynamicApiController, ISingleton
|
||||
/// <param name="fields"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public int HashDel<T>(string key, params string[] fields)
|
||||
public static int HashDel<T>(string key, params string[] fields)
|
||||
{
|
||||
var hash = GetHashMap<T>(key);
|
||||
fields.ToList().ForEach(t => hash.Remove(t));
|
||||
|
||||
@ -46,7 +46,7 @@ public class SysMessageService : IDynamicApiController, ITransient
|
||||
[DisplayName("发送消息给除了发送人的其他人")]
|
||||
public async Task SendOtherUser(MessageInput input)
|
||||
{
|
||||
var hashKey = _sysCacheService.HashGetAll<SysOnlineUser>(CacheConst.KeyUserOnline);
|
||||
var hashKey = SysCacheService.HashGetAll<SysOnlineUser>(CacheConst.KeyUserOnline);
|
||||
var exceptReceiveUsers = hashKey.Where(u => u.Value.UserId == input.ReceiveUserId).Select(u => u.Value).ToList();
|
||||
await _chatHubContext.Clients.AllExcept(exceptReceiveUsers.Select(t => t.ConnectionId)).ReceiveMessage(input);
|
||||
}
|
||||
@ -61,7 +61,7 @@ public class SysMessageService : IDynamicApiController, ITransient
|
||||
{
|
||||
var sysLogMsg = await SaveMsgLog(input);
|
||||
|
||||
var hashKey = _sysCacheService.HashGetAll<SysOnlineUser>(CacheConst.KeyUserOnline);
|
||||
var hashKey = SysCacheService.HashGetAll<SysOnlineUser>(CacheConst.KeyUserOnline);
|
||||
var receiveUser = hashKey.Where(u => u.Value.UserId == input.ReceiveUserId).Select(u => u.Value).FirstOrDefault();
|
||||
await _chatHubContext.Clients.Client(receiveUser.ConnectionId ?? "").ReceiveMessage(sysLogMsg);
|
||||
}
|
||||
@ -74,7 +74,7 @@ public class SysMessageService : IDynamicApiController, ITransient
|
||||
[DisplayName("发送消息给某些人")]
|
||||
public async Task SendUsers(MessageInput input)
|
||||
{
|
||||
var hashKey = _sysCacheService.HashGetAll<SysOnlineUser>(CacheConst.KeyUserOnline);
|
||||
var hashKey = SysCacheService.HashGetAll<SysOnlineUser>(CacheConst.KeyUserOnline);
|
||||
var receiveUsers = hashKey.Where(u => input.UserIds.Any(a => a == u.Value.UserId)).Select(u => u.Value).ToList();
|
||||
await receiveUsers.ForEachAsync(u => _chatHubContext.Clients.Client(u.ConnectionId ?? "").ReceiveMessage(input));
|
||||
}
|
||||
@ -86,7 +86,7 @@ public class SysMessageService : IDynamicApiController, ITransient
|
||||
/// <returns></returns>
|
||||
private async Task<SysLogMsg> SaveMsgLog(MessageInput input)
|
||||
{
|
||||
var hashKey = _sysCacheService.HashGetAll<SysOnlineUser>(CacheConst.KeyUserOnline);
|
||||
var hashKey = SysCacheService.HashGetAll<SysOnlineUser>(CacheConst.KeyUserOnline);
|
||||
var receiveUser = hashKey.Where(u => u.Value.UserId == input.ReceiveUserId).Select(u => u.Value).FirstOrDefault();
|
||||
var sendUser = hashKey.Where(u => u.Value.UserId == input.SendUserId).Select(u => u.Value).FirstOrDefault();
|
||||
|
||||
|
||||
@ -263,7 +263,7 @@ public class SysRegionService : IDynamicApiController, ITransient
|
||||
await _sysRegionRep.Context.Fastest<SysRegion>().BulkCopyAsync(regionList);
|
||||
}
|
||||
|
||||
private void GetChildren(List<SysRegion> regionList, List<GDRegionResponse> responses, int level, long pid)
|
||||
private static void GetChildren(List<SysRegion> regionList, List<GDRegionResponse> responses, int level, long pid)
|
||||
{
|
||||
foreach (var region in responses)
|
||||
{
|
||||
|
||||
@ -49,7 +49,7 @@ public class SysServerService : IDynamicApiController, ITransient
|
||||
var programStartTime = Process.GetCurrentProcess().StartTime;
|
||||
var totalMilliseconds = (DateTime.Now - programStartTime).TotalMilliseconds.ToString();
|
||||
var ts = totalMilliseconds.Contains('.') ? totalMilliseconds.Split('.')[0] : totalMilliseconds;
|
||||
var programRunTime = DateTimeUtil.FormatTime(ts.ParseToLong());
|
||||
var programRunTime = DateTimeUtil.FormatTime(ts.ToLong());
|
||||
|
||||
var memoryMetrics = ComputerUtil.GetComputerInfo();
|
||||
return new
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Utils;
|
||||
namespace Admin.NET.Core;
|
||||
|
||||
/// <summary>
|
||||
/// 聚合配置增强版(独立类)
|
||||
|
||||
@ -34,7 +34,7 @@ public static class ComputerUtil
|
||||
var cpuRates = GetCPURates();
|
||||
if (cpuRates != null)
|
||||
{
|
||||
memoryMetrics.CpuRates = cpuRates.Select(u => Math.Ceiling(u.ParseToDouble()) + "%").ToList();
|
||||
memoryMetrics.CpuRates = cpuRates.Select(u => Math.Ceiling(u.ToDouble()) + "%").ToList();
|
||||
}
|
||||
return memoryMetrics;
|
||||
}
|
||||
@ -208,19 +208,19 @@ public static class ComputerUtil
|
||||
// 返回:1705379131
|
||||
// 使用date格式化即可
|
||||
string output = ShellUtil.Bash("date -r $(sysctl -n kern.boottime | awk '{print $4}' | tr -d ',') +\"%Y-%m-%d %H:%M:%S\"").Trim();
|
||||
runTime = DateTimeUtil.FormatTime((DateTime.Now - output.ParseToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ParseToLong());
|
||||
runTime = DateTimeUtil.FormatTime((DateTime.Now - output.ToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ToLong());
|
||||
}
|
||||
else if (IsUnix())
|
||||
{
|
||||
string output = ShellUtil.Bash("date -d \"$(awk -F. '{print $1}' /proc/uptime) second ago\" +\"%Y-%m-%d %H:%M:%S\"").Trim();
|
||||
runTime = DateTimeUtil.FormatTime((DateTime.Now - output.ParseToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ParseToLong());
|
||||
runTime = DateTimeUtil.FormatTime((DateTime.Now - output.ToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ToLong());
|
||||
}
|
||||
else
|
||||
{
|
||||
string output = ShellUtil.Cmd("wmic", "OS get LastBootUpTime/Value");
|
||||
string[] outputArr = output.Split('=', (char)StringSplitOptions.RemoveEmptyEntries);
|
||||
if (outputArr.Length == 2)
|
||||
runTime = DateTimeUtil.FormatTime((DateTime.Now - outputArr[1].Split('.')[0].ParseToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ParseToLong());
|
||||
runTime = DateTimeUtil.FormatTime((DateTime.Now - outputArr[1].Split('.')[0].ToDateTime()).TotalMilliseconds.ToString().Split('.')[0].ToLong());
|
||||
}
|
||||
return runTime;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user