🍒 fix(sysSerial): UserManager应该作为参数传递

This commit is contained in:
喵你个汪呀 2025-08-25 22:14:24 +08:00
parent 4558b53891
commit cefe913c85
3 changed files with 18 additions and 24 deletions

View File

@ -11,12 +11,11 @@ namespace Admin.NET.Application;
/// </summary>
public class SerialSlotProvider : ISerialSlotProvider
{
private static Lazy<UserManager> UserManager => new(() => App.GetService<UserManager>());
public Dictionary<string, Func<long, long, DateTime, string>> GetSlotMap()
public Dictionary<string, Func<long, long, DateTime, UserManager, string>> GetSlotMap()
{
return new()
{
{ "{Account}", (seq, max, nowDate) => UserManager.Value?.Account }
{ "{Account}", (seq, max, nowDate, userManager) => userManager.Account[..2] }
};
}
}

View File

@ -11,5 +11,5 @@ namespace Admin.NET.Core.Service;
/// </summary>
public interface ISerialSlotProvider
{
public Dictionary<string, Func<long, long, DateTime, string>> GetSlotMap();
public Dictionary<string, Func<long, long, DateTime, UserManager, string>> GetSlotMap();
}

View File

@ -23,7 +23,7 @@ public class SysSerialService : IDynamicApiController, ITransient
/// <summary>
/// 因为缓存的是代理,无法序列化,所以只能用字典缓存
/// </summary>
private readonly ConcurrentDictionary<string, Dictionary<string, Func<long, long, DateTime, string>>> _slotTempMap = new();
private readonly ConcurrentDictionary<string, Dictionary<string, Func<long, long, DateTime, UserManager, string>>> _slotTempMap = new();
public SysSerialService(SqlSugarRepository<SysSerial> sysSerialRep,
SysCacheService sysCacheService, ISqlSugarClient db,
@ -315,22 +315,22 @@ public class SysSerialService : IDynamicApiController, ITransient
var slotLogic = _slotTempMap.GetOrAdd(CacheConst.KeySysSerialSlot, _ =>
{
// 默认插槽逻辑
var logicMap = new Dictionary<string, Func<long, long, DateTime, string>>
var logicMap = new Dictionary<string, Func<long, long, DateTime, UserManager, string>>
{
// 序号格式化
["{SEQ}"] = (s, m, d) => s.ToString($"D{m.ToString().Length}"),
["{SEQ}"] = (s, m, _, _) => s.ToString($"D{m.ToString().Length}"),
// 时间相关(依赖 nowDate
["{yyyy}"] = (_, _, d) => d.Year.ToString(),
["{yy}"] = (_, _, d) => d.Year.ToString().Substring(2),
["{MM}"] = (_, _, d) => d.Month.ToString("D2"),
["{dd}"] = (_, _, d) => d.Day.ToString("D2"),
["{HH}"] = (_, _, d) => d.Hour.ToString("D2"),
["{mm}"] = (_, _, d) => d.Minute.ToString("D2"),
["{ss}"] = (_, _, d) => d.Second.ToString("D2"),
["{TenantId}"] = (_, _, d) => _userManager?.TenantId.ToString(),
["{UserId}"] = (_, _, d) => _userManager?.UserId.ToString(),
["{OrgId}"] = (_, _, d) => _userManager?.OrgId.ToString(),
["{OrgType}"] = (_, _, d) => _userManager?.OrgType,
["{yyyy}"] = (_, _, d, _) => d.Year.ToString(),
["{yy}"] = (_, _, d, _) => d.Year.ToString().Substring(2),
["{MM}"] = (_, _, d, _) => d.Month.ToString("D2"),
["{dd}"] = (_, _, d, _) => d.Day.ToString("D2"),
["{HH}"] = (_, _, d, _) => d.Hour.ToString("D2"),
["{mm}"] = (_, _, d, _) => d.Minute.ToString("D2"),
["{ss}"] = (_, _, d, _) => d.Second.ToString("D2"),
["{TenantId}"] = (_, _, _, u) => u?.TenantId.ToString(),
["{UserId}"] = (_, _, _, u) => u?.UserId.ToString(),
["{OrgId}"] = (_, _, _, u) => u?.OrgId.ToString(),
["{OrgType}"] = (_, _, _, u) => u?.OrgType,
};
// 扩展插槽提供者
@ -344,17 +344,12 @@ public class SysSerialService : IDynamicApiController, ITransient
foreach (var kv in providerLogic) logicMap[kv.Key] = kv.Value;
}
logicMap.TryAdd("{TenantId}", (_, _, _) => _userManager.TenantId.ToString());
logicMap.TryAdd("{UserId}", (_, _, _) => _userManager.UserId.ToString());
logicMap.TryAdd("{OrgId}", (_, _, _) => _userManager.OrgId.ToString());
logicMap.TryAdd("{OrgType}", (_, _, _) => _userManager.OrgType);
return logicMap;
});
// 将逻辑模板绑定到当前参数,生成最终的 Func<string>
var result = new Dictionary<string, Func<string>>();
foreach (var kv in slotLogic) result.TryAdd(kv.Key, () => kv.Value(seq, max, nowDate));
foreach (var kv in slotLogic) result.TryAdd(kv.Key, () => kv.Value(seq, max, nowDate, _userManager));
return result;
}
}