fix 餐补人员显示离职人员,分配权限增加锁

This commit is contained in:
2024-06-07 12:11:32 +08:00
parent c978e773b2
commit 9d1d069450
3 changed files with 53 additions and 46 deletions

View File

@@ -33,11 +33,43 @@ public class DevicePermissionService : IDevicePermissionService
public async Task AssignAsync(DevicePermissionSaveRequest request) public async Task AssignAsync(DevicePermissionSaveRequest request)
{ {
// var currentTenantId = _currentUser.GetStringTenantId(); var currentTenantId = _currentUser.GetStringTenantId();
//
// await using var handler = await _redisCache.LockAsync($"permission:generate:{currentTenantId}"); using (var handler = await _redisCache.LockAsync($"permission:generate:{currentTenantId}"))
// handler.Acquired.ThrowIfFalse("请勿频繁分配设备权限"); {
// 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(); // var tenantId = request.AssignType == AssignTypeEnumType.Department ? request.TenantId : _currentUser.GetStringTenantId();
// request.TenantId = tenantId; // request.TenantId = tenantId;
// //
@@ -54,36 +86,6 @@ public class DevicePermissionService : IDevicePermissionService
// { // {
// Id = id // 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) public async Task GeneratePermissionsAsync(long id)

View File

@@ -36,7 +36,7 @@ public class GainfoMealController : ControllerBase
/// <summary> /// <summary>
/// 迁移 /// 迁移
/// </summary> /// </summary>
/// <param name="request"></param> [Authorize(Roles = "admin")]
[HttpPost("migration")] [HttpPost("migration")]
public async Task MigrationAsync(GainfoBalanceMigrationRequest request) public async Task MigrationAsync(GainfoBalanceMigrationRequest request)
{ {

View File

@@ -9,6 +9,7 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils; using Kurisu.AspNetCore.Utils;
using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.AspNetCore.Utils.Extensions;
using SqlSugar;
namespace Dlhis.Basic.Organization.Services.Implements; namespace Dlhis.Basic.Organization.Services.Implements;
@@ -27,20 +28,24 @@ public class MealUserService : IMealUserService
{ {
var tenantId = _currentUser.GetStringTenantId(); var tenantId = _currentUser.GetStringTenantId();
var page = await _dbContext.Queryable<GainfoEntity>() var page = await _dbContext.Queryable<GainfoMealEntity>()
.LeftJoin<GainfoMealEntity>((x, meal) => x.Code == meal.UserCode) .LeftJoin<GainfoEntity>((meal, gainfo) => meal.UserCode == gainfo.Code)
.LeftJoin<DepartmentEntity>((x, meal, dept) => dept.No == x.DepartmentNo) .LeftJoin<GainfoLeaveEntity>((meal, gainfo, gainfoLeave) => meal.UserCode == gainfoLeave.Code)
.WhereIF(request.Search.IsPresent(), (x, meal) => x.Code == request.Search || x.Name == request.Search) .LeftJoin<DepartmentEntity>((meal, gainfo, gainfoLeave, dept1) => dept1.No == gainfo.DepartmentNo)
.Where(x => x.Factory == tenantId) .LeftJoin<DepartmentEntity>((meal, gainfo, gainfoLeave, dept1, dept2) => dept2.No == gainfo.DepartmentNo)
.Select((x, meal, dept) => new MealUserResponse .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, Balance = meal.Balance,
BalanceOfRecharge = meal.BalanceOfRecharge, BalanceOfRecharge = meal.BalanceOfRecharge,
BalanceOfSubsidies = meal.BalanceOfSubsidies, BalanceOfSubsidies = meal.BalanceOfSubsidies,
UserCode = x.Code, UserCode = meal.UserCode,
UserName = x.Name, UserName = SqlFunc.IsNull(gainfo.Name, gainfoLeave.Name),
UserNo = x.No, UserNo = SqlFunc.IsNull(gainfo.No, gainfoLeave.No),
DepartmentName = dept.Name, DepartmentName = SqlFunc.IsNull(dept1.Name, dept2.Name)
}) })
.ToPageListAsync(request); .ToPageListAsync(request);