Files
jinko.yikatong/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlacePermissionsService.cs
2025-04-02 15:01:09 +08:00

117 lines
4.2 KiB
C#

using Dlhis.Basic.Places.Dto;
using Dlhis.Basic.Places.Request;
using Dlhis.Basic.Places.Response;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Sys.Api;
using Dlhis.Sys.Api.Request;
using Kurisu.AspNetCore.Authentication.Abstractions;
using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
namespace Dlhis.Basic.Places.Services.Implements;
public class BusinessPlacePermissionsService : IBusinessPlacePermissionsService
{
private readonly IDbContext _dbContext;
private readonly ICurrentUser _currentUser;
private readonly IUserApi _userApi;
public BusinessPlacePermissionsService(IDbContext dbContext, ICurrentUser currentUser, IUserApi userApi)
{
_dbContext = dbContext;
_currentUser = currentUser;
_userApi = userApi;
}
public async Task<Pagination<BusinessPlacePermissionPageResponse>> GetPageAsync(BusinessPlacePermissionPageRequest request)
{
var page = await _dbContext.Queryable<BusinessPlaceManagerRelationshipEntity>()
.LeftJoin<BusinessPlaceEntity>((x, bplace) => x.BusinessPlaceCode == bplace.Code)
.Select((x, bplace) => new BusinessPlacePermissionPageResponse
{
UserId = x.ManagerUserId,
BusinessPlaceCode = x.BusinessPlaceCode,
BusinessPlaceName = bplace.Name,
})
.ToPageListAsync(request);
try
{
var users = await _userApi.GetUserByIdsAsync(new IdsRequest { Ids = page.Data.Select(x => x.UserId).Distinct().ToList() });
page.Data.ForEach(item => { item.UserName = users.FirstOrDefault(x => x.Id == item.UserId)?.UserName; });
}
catch (Exception)
{
//ignore
}
return page;
}
public async Task<List<BusinessPlaceDto>> GetMyAsync()
{
var userId = _currentUser.GetIntSubjectId();
var role = _currentUser.GetRole();
var isAdmin = role is "admin" or "tenant-admin";
List<Guid> codes;
if (isAdmin)
{
codes = await _dbContext.Queryable<BusinessPlaceEntity>()
.Select(x => x.Code)
.ToListAsync();
}
else
{
codes = await _dbContext.Queryable<BusinessPlaceManagerRelationshipEntity>()
.Where(x => x.ManagerUserId == userId)
.Select(x => x.BusinessPlaceCode)
.Distinct()
.ToListAsync();
}
return await _dbContext.Queryable<BusinessPlaceEntity>()
.Where(x => codes.Contains(x.Code))
.Select<BusinessPlaceDto>()
.ToListAsync();
}
public async Task SaveBusinessPlacePermissionAsync(BusinessPlacePermissionSaveRequest request)
{
var p = await _dbContext.Queryable<BusinessPlaceManagerRelationshipEntity>()
.Where(x => x.ManagerUserId == request.UserId).ToListAsync();
await _dbContext.DeleteReallyAsync(p);
await _dbContext.InsertAsync(request.BusinessPlaceCodes.Select(x => new BusinessPlaceManagerRelationshipEntity
{
BusinessPlaceCode = x,
ManagerUserId = request.UserId
}).ToList());
}
public async Task<List<BusinessPlacePermissionPageResponse>> GetBusinessPlacePermissionByUserIdAsync(int id)
{
var infos = await _dbContext.Queryable<BusinessPlaceManagerRelationshipEntity>()
.LeftJoin<BusinessPlaceEntity>((x, bPlace) => x.BusinessPlaceCode == bPlace.Code)
.Where(x => x.ManagerUserId == id)
.Select((x, bPlace) => new BusinessPlacePermissionPageResponse
{
UserId = x.ManagerUserId,
BusinessPlaceCode = x.BusinessPlaceCode,
BusinessPlaceName = bPlace.Name,
})
.ToListAsync();
var user = await _userApi.GetUserByIdAsync(id);
infos.ForEach(item => { item.UserName = user?.UserName; });
return infos;
}
public async Task DeleteAssignmentAsync(int id)
{
await _dbContext.Deleteable<BusinessPlaceManagerRelationshipEntity>().Where(x => x.Id == id).ExecuteCommandAsync();
}
}