fix 餐补人员显示离职人员,分配权限增加锁
This commit is contained in:
@@ -33,11 +33,43 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
|
||||
public async Task AssignAsync(DevicePermissionSaveRequest request)
|
||||
{
|
||||
// var currentTenantId = _currentUser.GetStringTenantId();
|
||||
//
|
||||
// await using var handler = await _redisCache.LockAsync($"permission:generate:{currentTenantId}");
|
||||
// handler.Acquired.ThrowIfFalse("请勿频繁分配设备权限");
|
||||
//
|
||||
var currentTenantId = _currentUser.GetStringTenantId();
|
||||
|
||||
using (var handler = await _redisCache.LockAsync($"permission:generate:{currentTenantId}"))
|
||||
{
|
||||
handler.Acquired.ThrowIfFalse("请勿频繁分配设备权限");
|
||||
|
||||
var tenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId();
|
||||
|
||||
await GenerateDeviceTasksAsync(async () =>
|
||||
{
|
||||
//删除当前匹配的基地权限
|
||||
var p = await _dbContext.Queryable<DevicePermissionEntity>()
|
||||
.Where(x => x.AssignType == request.AssignType)
|
||||
.Where(x => x.AssignValue == request.AssignValue)
|
||||
.Where(x => x.UniqueType == request.UniqueType)
|
||||
.Where(x => x.TenantId == tenantId)
|
||||
.ToListAsync();
|
||||
|
||||
await _dbContext.DeleteReallyAsync(p);
|
||||
|
||||
//保存配置的权限
|
||||
if (request.Codes.IsPresent())
|
||||
{
|
||||
var devicePermissions = request.Codes.Select(code => new DevicePermissionEntity
|
||||
{
|
||||
AssignType = request.AssignType,
|
||||
AssignValue = request.AssignValue,
|
||||
UniqueType = request.UniqueType,
|
||||
UniqueValue = code,
|
||||
TenantId = tenantId
|
||||
}).ToList();
|
||||
|
||||
await _dbContext.InsertAsync(devicePermissions);
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
|
||||
// var tenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId();
|
||||
// request.TenantId = tenantId;
|
||||
//
|
||||
@@ -54,36 +86,6 @@ public class DevicePermissionService : IDevicePermissionService
|
||||
// {
|
||||
// Id = id
|
||||
// });
|
||||
|
||||
var tenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId();
|
||||
|
||||
await GenerateDeviceTasksAsync(async () =>
|
||||
{
|
||||
//删除当前匹配的基地权限
|
||||
var p = await _dbContext.Queryable<DevicePermissionEntity>()
|
||||
.Where(x => x.AssignType == request.AssignType)
|
||||
.Where(x => x.AssignValue == request.AssignValue)
|
||||
.Where(x => x.UniqueType == request.UniqueType)
|
||||
.Where(x => x.TenantId == tenantId)
|
||||
.ToListAsync();
|
||||
|
||||
await _dbContext.DeleteReallyAsync(p);
|
||||
|
||||
//保存配置的权限
|
||||
if (request.Codes.IsPresent())
|
||||
{
|
||||
var devicePermissions = request.Codes.Select(code => new DevicePermissionEntity
|
||||
{
|
||||
AssignType = request.AssignType,
|
||||
AssignValue = request.AssignValue,
|
||||
UniqueType = request.UniqueType,
|
||||
UniqueValue = code,
|
||||
TenantId = tenantId
|
||||
}).ToList();
|
||||
|
||||
await _dbContext.InsertAsync(devicePermissions);
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
|
||||
public async Task GeneratePermissionsAsync(long id)
|
||||
|
||||
@@ -36,7 +36,7 @@ public class GainfoMealController : ControllerBase
|
||||
/// <summary>
|
||||
/// 迁移
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
[Authorize(Roles = "admin")]
|
||||
[HttpPost("migration")]
|
||||
public async Task MigrationAsync(GainfoBalanceMigrationRequest request)
|
||||
{
|
||||
|
||||
@@ -9,6 +9,7 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||
using Kurisu.AspNetCore.Utils;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Dlhis.Basic.Organization.Services.Implements;
|
||||
|
||||
@@ -27,20 +28,24 @@ public class MealUserService : IMealUserService
|
||||
{
|
||||
var tenantId = _currentUser.GetStringTenantId();
|
||||
|
||||
var page = await _dbContext.Queryable<GainfoEntity>()
|
||||
.LeftJoin<GainfoMealEntity>((x, meal) => x.Code == meal.UserCode)
|
||||
.LeftJoin<DepartmentEntity>((x, meal, dept) => dept.No == x.DepartmentNo)
|
||||
.WhereIF(request.Search.IsPresent(), (x, meal) => x.Code == request.Search || x.Name == request.Search)
|
||||
.Where(x => x.Factory == tenantId)
|
||||
.Select((x, meal, dept) => new MealUserResponse
|
||||
var page = await _dbContext.Queryable<GainfoMealEntity>()
|
||||
.LeftJoin<GainfoEntity>((meal, gainfo) => meal.UserCode == gainfo.Code)
|
||||
.LeftJoin<GainfoLeaveEntity>((meal, gainfo, gainfoLeave) => meal.UserCode == gainfoLeave.Code)
|
||||
.LeftJoin<DepartmentEntity>((meal, gainfo, gainfoLeave, dept1) => dept1.No == gainfo.DepartmentNo)
|
||||
.LeftJoin<DepartmentEntity>((meal, gainfo, gainfoLeave, dept1, dept2) => dept2.No == gainfo.DepartmentNo)
|
||||
.WhereIF(request.Search.IsPresent(), (meal, gainfo, gainfoLeave, dept1, dept2) => meal.UserCode == request.Search
|
||||
|| gainfo.Name.Contains(request.Search)
|
||||
|| gainfoLeave.Name.Contains(request.Search))
|
||||
.Where((meal, gainfo, gainfoLeave) => gainfo.Factory == tenantId || gainfoLeave.Factory == tenantId)
|
||||
.Select((meal, gainfo, gainfoLeave, dept1, dept2) => new MealUserResponse
|
||||
{
|
||||
Balance = meal.Balance,
|
||||
BalanceOfRecharge = meal.BalanceOfRecharge,
|
||||
BalanceOfSubsidies = meal.BalanceOfSubsidies,
|
||||
UserCode = x.Code,
|
||||
UserName = x.Name,
|
||||
UserNo = x.No,
|
||||
DepartmentName = dept.Name,
|
||||
UserCode = meal.UserCode,
|
||||
UserName = SqlFunc.IsNull(gainfo.Name, gainfoLeave.Name),
|
||||
UserNo = SqlFunc.IsNull(gainfo.No, gainfoLeave.No),
|
||||
DepartmentName = SqlFunc.IsNull(dept1.Name, dept2.Name)
|
||||
})
|
||||
.ToPageListAsync(request);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user