feat 例外人员权限增加到期时间,厂区配置增加生日券,外包自动离场报名单

This commit is contained in:
2025-12-09 11:24:09 +08:00
parent 726e62d032
commit 4c125e92f4
38 changed files with 406 additions and 58 deletions

View File

@@ -0,0 +1,21 @@
// using System.Net.Http.Headers;
// using System.Text;
// using Kurisu.AspNetCore.Startup;
//
// namespace Dlhis.Basic;
//
// public class JinkoSapHttpClientPack : BaseAppPack
// {
// public override void ConfigureServices(IServiceCollection services)
// {
// services.AddHttpClient("jinko:sap", (_, httpClient) =>
// {
// httpClient.BaseAddress = new Uri("http://sappipap02.jinkosolar.cn:50200");
// httpClient.Timeout = TimeSpan.FromMinutes(10);
//
// const string credentials = "EHS_USER:y3R1hd2h*RICAC";
// var headerValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials));
// httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", headerValue);
// });
// }
// }

View File

@@ -0,0 +1,93 @@
using System.Security.Claims;
using Kurisu.AspNetCore;
using Kurisu.AspNetCore.Authentication.Abstractions;
using Kurisu.AspNetCore.Cache;
using Kurisu.AspNetCore.Utils.Converters;
using Newtonsoft.Json;
namespace Dlhis.Basic.Utils;
public class ObfuscateProviderJsonConverter : ObfuscateJsonConverter
{
private readonly int _last;
/// <inheritdoc />
public ObfuscateProviderJsonConverter(int last) : base(last)
{
_last = last;
}
/// <inheritdoc />
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var sp = App.GetServiceProvider(true);
var cache = sp.GetService<RedisCache>();
var currentUser = sp.GetService<ICurrentUser>();
var range = cache.ListRange("datapermission:role");
if (range.Contains(currentUser.GetUserClaim(ClaimTypes.Role)))
{
writer.WriteValue(value);
}
else
{
var v = value?.ToString() ?? string.Empty;
var vc = v.ToCharArray().Reverse().ToList();
for (int i = 0; i < vc.Count; i++)
{
if (i + 1 > _last)
{
vc[i] = '*';
}
}
vc.Reverse();
v = string.Join("", vc);
writer.WriteValue(v);
}
}
}
public class ObfuscateProviderOnlyAdminJsonConverter : ObfuscateJsonConverter
{
private readonly int _last;
/// <inheritdoc />
public ObfuscateProviderOnlyAdminJsonConverter(int last) : base(last)
{
_last = last;
}
/// <inheritdoc />
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var sp = App.GetServiceProvider(true);
var currentUser = sp.GetService<ICurrentUser>();
var role = currentUser.GetRole();
if (role is "admin" or "tenant-admin")
{
writer.WriteValue(value);
}
else
{
var v = value?.ToString() ?? string.Empty;
var vc = v.ToCharArray().Reverse().ToList();
for (int i = 0; i < vc.Count; i++)
{
if (i + 1 > _last)
{
vc[i] = '*';
}
}
vc.Reverse();
v = string.Join("", vc);
writer.WriteValue(v);
}
}
}

View File

@@ -0,0 +1,16 @@
namespace Dlhis.Basic.Utils;
public static class ParallelExtensions
{
public static void ParallelForEach<T>(this IEnumerable<T> source, Action<T> action)
{
#if DEBUG
foreach (var item in source)
{
action.Invoke(item);
}
#else
Parallel.ForEach(source, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, action);
#endif
}
}

View File

@@ -0,0 +1,131 @@
using Dlhis.Basic.Organization.Dto;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.Basic.Utils;
public static class RecursionHelper
{
public static List<Guid> HandlerGainfoGroupNextCodes(Guid current, List<GainfoGroupEntity> data)
{
var result = new List<Guid> { current };
InternalHandlerCodes(current, data, result);
return result;
static void InternalHandlerCodes(Guid internalCurrent, List<GainfoGroupEntity> internalData, List<Guid> internalResult)
{
var next = internalData.Where(x => x.PCode == internalCurrent);
foreach (var item in next)
{
internalResult.Add(item.Code);
InternalHandlerCodes(item.Code, internalData, internalResult);
}
}
}
public static List<Guid> HandlerGainfoGroupPreviousCodes(Guid current, List<GainfoGroupEntity> data)
{
var result = new List<Guid> { current };
InternalHandlerCodes(current, data, result);
return result;
static void InternalHandlerCodes(Guid internalCurrent, List<GainfoGroupEntity> internalData, List<Guid> internalResult)
{
var pno = internalData.FirstOrDefault(x => x.Code == internalCurrent)?.PCode;
if (!pno.HasValue)
{
return;
}
internalResult.Add(pno.Value);
InternalHandlerCodes(pno.Value, internalData, internalResult);
}
}
public static List<string> HandlerDepartmentNextCodes(string current, List<DepartmentDto> data)
{
var result = new List<string> { current };
InternalHandlerCodes(current, data, result);
return result;
static void InternalHandlerCodes(string internalCurrent, List<DepartmentDto> internalData, List<string> internalResult)
{
var next = internalData.Where(x => x.PNo == internalCurrent);
foreach (var item in next)
{
internalResult.Add(item.No);
InternalHandlerCodes(item.No, internalData, internalResult);
}
}
}
public static List<string> HandlerDepartmentPreviousCodes(string current, List<DepartmentDto> data)
{
var result = new List<string> { current };
InternalHandlerCodes(current, data, result);
return result;
static void InternalHandlerCodes(string internalCurrent, List<DepartmentDto> internalData, List<string> internalResult)
{
var pno = internalData.FirstOrDefault(x => x.No == internalCurrent)?.PNo;
if (pno.IsEmpty())
{
return;
}
internalResult.Add(pno);
InternalHandlerCodes(pno, internalData, internalResult);
}
}
public static List<Guid> HandlerDeviceGroupNextCodes(Guid current, List<DeviceGroupEntity> data)
{
var result = new List<Guid> { current };
InternalHandlerCodes(current, data, result);
return result;
static void InternalHandlerCodes(Guid internalCurrent, List<DeviceGroupEntity> internalData, List<Guid> internalResult)
{
var next = internalData.Where(x => x.PCode == internalCurrent);
foreach (var item in next)
{
internalResult.Add(item.Code);
InternalHandlerCodes(item.Code, internalData, internalResult);
}
}
}
public static List<Guid> HandlerDeviceGroupPreviousCodes(Guid current, List<DeviceGroupEntity> data)
{
var result = new List<Guid> { current };
InternalHandlerCodes(current, data, result);
return result;
static void InternalHandlerCodes(Guid internalCurrent, List<DeviceGroupEntity> internalData, List<Guid> internalResult)
{
var pno = internalData.FirstOrDefault(x => x.Code == internalCurrent)?.PCode;
if (!pno.HasValue)
{
return;
}
internalResult.Add(pno.Value);
InternalHandlerCodes(pno.Value, internalData, internalResult);
}
}
}