Files
ThingsGateway/src/Admin/ThingsGateway.Admin.Application/Services/VerificatInfo/VerificatInfoService.cs

185 lines
5.6 KiB
C#
Raw Normal View History

2025-01-24 22:42:26 +08:00
//------------------------------------------------------------------------------
// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
// 此代码版权除特别声明外的代码归作者本人Diego所有
// 源代码使用协议遵循本仓库的开源协议及附加协议
// Gitee源代码仓库https://gitee.com/diego2098/ThingsGateway
// Github源代码仓库https://github.com/kimdiego2098/ThingsGateway
// 使用文档https://thingsgateway.cn/
// QQ群605534569
//------------------------------------------------------------------------------
namespace ThingsGateway.Admin.Application;
/// <summary>
/// 操作内存,只在程序停止/启动时设置/获取持久化数据
/// </summary>
internal sealed class VerificatInfoService : BaseService<VerificatInfo>, IVerificatInfoService
{
#region
public VerificatInfo GetOne(long id, bool delete = true)
2025-01-24 22:42:26 +08:00
{
//先从Cache拿
var verificatInfo = App.CacheService.HashGetOne<VerificatInfo>(CacheConst.Cache_Token, id.ToString());
verificatInfo ??= GetFromDb(id);
if (verificatInfo != null && delete)
{
2025-01-24 22:42:26 +08:00
if (verificatInfo.VerificatTimeout.AddSeconds(30) < DateTime.Now)
{
Delete(verificatInfo.Id);
return null;
}
}
2025-01-24 22:42:26 +08:00
return verificatInfo;
}
private VerificatInfo? GetFromDb(long id)
{
if (id == 0)
return null;
2025-01-24 22:42:26 +08:00
using var db = GetDB();
var verificatInfo = db.Queryable<VerificatInfo>().First(u => u.Id == id);
if (verificatInfo != null)
VerificatInfoService.SetCahce(verificatInfo);
return verificatInfo;
}
private static void SetCahce(VerificatInfo verificatInfo)
{
App.CacheService.HashAdd<VerificatInfo>(CacheConst.Cache_Token, verificatInfo.Id.ToString(), verificatInfo);
}
public List<VerificatInfo>? GetListByUserId(long userId)
{
using var db = GetDB();
var verificatInfo = db.Queryable<VerificatInfo>().Where(u => u.UserId == userId).ToList();
return verificatInfo;
}
public List<VerificatInfo>? GetListByIds(List<long> ids)
{
using var db = GetDB();
var verificatInfos = db.Queryable<VerificatInfo>().Where(u => ids.Contains(u.Id)).ToList();
var ids1 = new List<long>();
foreach (var verificatInfo in verificatInfos)
{
if (verificatInfo.VerificatTimeout.AddSeconds(30) < DateTime.Now)
{
ids1.Add(verificatInfo.Id);
}
}
if (ids1.Count > 0)
{
Delete(ids1);
}
return verificatInfos;
}
public List<VerificatInfo>? GetListByUserIds(List<long> userIds)
{
using var db = GetDB();
var verificatInfos = db.Queryable<VerificatInfo>().Where(u => userIds.Contains(u.UserId)).ToList();
List<long> ids = new List<long>();
foreach (var verificatInfo in verificatInfos)
{
if (verificatInfo.VerificatTimeout.AddSeconds(30) < DateTime.Now)
{
ids.Add(verificatInfo.Id);
}
}
if (ids.Count > 0)
{
Delete(ids);
}
return verificatInfos;
}
public List<long>? GetIdListByUserId(long userId)
{
using var db = GetDB();
var verificatInfo = db.Queryable<VerificatInfo>().Where(u => u.UserId == userId).Select(a => a.Id).ToList();
return verificatInfo;
}
2025-03-10 11:48:52 +08:00
public List<string>? GetClientIdListByUserId(long userId)
2025-01-24 22:42:26 +08:00
{
using var db = GetDB();
var verificatInfo = db.Queryable<VerificatInfo>().Where(u => u.UserId == userId).Select(a => a.ClientIds).ToList().SelectMany(a => a).ToList();
return verificatInfo;
}
#endregion
#region
public void Add(VerificatInfo verificatInfo)
{
using var db = GetDB();
db.Insertable<VerificatInfo>(verificatInfo).ExecuteCommand();
VerificatInfoService.RemoveCache(verificatInfo.Id);
if (verificatInfo != null)
VerificatInfoService.SetCahce(verificatInfo);
}
#endregion
#region
public void Update(VerificatInfo verificatInfo)
{
using var db = GetDB();
db.Updateable<VerificatInfo>(verificatInfo).ExecuteCommand();
VerificatInfoService.RemoveCache(verificatInfo.Id);
if (verificatInfo != null)
VerificatInfoService.SetCahce(verificatInfo);
}
#endregion
#region
public void Delete(long id)
{
using var db = GetDB();
2025-07-30 04:32:14 +08:00
db.Deleteable<VerificatInfo>(a => a.Id == id).ExecuteCommand();
2025-01-24 22:42:26 +08:00
VerificatInfoService.RemoveCache(id);
}
public void Delete(List<long> ids)
{
using var db = GetDB();
db.Deleteable<VerificatInfo>().Where(it => ids.Contains(it.Id)).ExecuteCommand();
foreach (var id in ids)
{
VerificatInfoService.RemoveCache(id);
}
}
#endregion
#region 线Id
public void RemoveAllClientId()
{
using var db = GetDB();
2025-05-19 12:10:11 +08:00
db.Updateable<VerificatInfo>().SetColumns(a => a.ClientIds == null).Where(a => a.Id > 0).ExecuteCommand();
2025-01-24 22:42:26 +08:00
VerificatInfoService.RemoveCache();
}
#endregion 线Id
private static void RemoveCache()
{
App.CacheService.Remove(CacheConst.Cache_Token);
}
private static void RemoveCache(long id)
{
App.CacheService.HashDel<VerificatInfo>(CacheConst.Cache_Token, id.ToString());
}
}