Files
jinko.yikatong/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlacePermissionsService.cs
2024-03-20 15:52:46 +08:00

111 lines
3.8 KiB
C#

using Dlhis.Basic.Places.Request;
using Dlhis.Basic.BusinessPlace.Response;
using Dlhis.Entity.Basic.Entity;
using Kurisu.Core.DataAccess.Dto;
using Kurisu.Core.User.Abstractions;
using Kurisu.SqlSugar.Services;
using Mapster;
using Dlhis.Basic.Places.Dtos;
using Kurisu.SqlSugar.Extensions;
using Dlhis.Sys.Api;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Basic.BusinessPlace.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);
var usersResult = await _userApi.GetUserByIdsAsync(page.Data.Select(x => x.UserId).Distinct().ToList());
var users = usersResult.Data;
page.Data.ForEach(item =>
{
item.UserName = users.FirstOrDefault(x => x.Id == item.UserId)?.UserName;
});
return page;
}
public async Task<List<BusinessPlaceDto>> GetMyAsync()
{
var userId = _currentUser.GetIntSubjectId();
var guids = await _dbContext.Queryable<BusinessPlaceManagerRelationshipEntity>()
.Where(x => x.ManagerUserId == userId)
.Select(x => x.BusinessPlaceCode)
.Distinct()
.ToListAsync();
return await _dbContext.Queryable<BusinessPlaceEntity>()
.Where(x => guids.Contains(x.Code))
.Select<BusinessPlaceDto>()
.ToListAsync();
}
public async Task SaveBusinessPlacePermissionAsync(BusinessPlacePermissionSaveRequest request)
{
var userId = _currentUser.GetIntSubjectId();
await _dbContext.Client.Deleteable<BusinessPlaceManagerRelationshipEntity>()
.Where(x => x.ManagerUserId == request.UserId)
.ExecuteCommandAsync();
await _dbContext.InsertAsync(request.BusinessPlaceCodes.Select(x => new BusinessPlaceManagerRelationshipEntity
{
BusinessPlaceCode = x,
ManagerUserId = request.UserId
}).ToList());
}
public async Task<List<BusinessPlacePermissionPageResponse>> GetBusinessPlacePermissionByUserIdAsyc(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 userResult = await _userApi.GetUserByIdAsync(id);
var user = userResult.Data;
infos.ForEach(item =>
{
item.UserName = user?.UserName;
});
return infos;
}
public async Task DeleteAssignmentAsync(int id)
{
await _dbContext.Client.Deleteable<BusinessPlaceManagerRelationshipEntity>().Where(x => x.Id == id).ExecuteCommandAsync();
}
}