From bf5c9370371bedda96342347dd64283a2f98e576 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 20 Mar 2024 15:12:30 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E8=A1=A5=E5=85=85=E8=90=A5=E4=B8=9A?= =?UTF-8?q?=E7=82=B9=E5=88=86=E9=85=8D=E6=9D=83=E9=99=90=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implements/DishesCategoryService.cs | 35 ++++++++++- .../BusinessPlacePermissionsController.cs | 26 ++++++++- .../BusinessPlacePermissionPageResponse.cs | 2 +- .../IBusinessPlacePermissionsService.cs | 4 ++ .../BusinessPlacePermissionsService.cs | 58 ++++++++++++++++++- Src/Dlhis.Sys.Api/IUserApi.cs | 4 ++ .../Identity/Controllers/UsersController.cs | 7 +++ .../Identity/Services/IUserService.cs | 3 + .../Services/Implements/UserService.cs | 6 ++ 9 files changed, 138 insertions(+), 7 deletions(-) diff --git a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesCategoryService.cs b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesCategoryService.cs index 18f1f8e9..58e2b6b2 100644 --- a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesCategoryService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesCategoryService.cs @@ -1,4 +1,5 @@ -using Dlhis.Basic.Dishes.Request; +using Dlhis.Basic.BusinessPlace.Services; +using Dlhis.Basic.Dishes.Request; using Dlhis.Basic.Dishes.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; @@ -11,16 +12,21 @@ namespace Dlhis.Basic.Dishes.Services.Implements; public class DishesCategoryService : IDishesCategoryService { private readonly IDbContext _dbContext; + private readonly IBusinessPlacePermissionsService _businessPlacePermissionsService; - public DishesCategoryService(IDbContext dbContext) + public DishesCategoryService(IDbContext dbContext, IBusinessPlacePermissionsService businessPlacePermissionsService) { _dbContext = dbContext; + _businessPlacePermissionsService = businessPlacePermissionsService; } public async Task> TreeAsync() { + var mybCodes = await GetMyBusinessPlaceCodesAsync(); + var categories = await _dbContext.Queryable() .LeftJoin((x, bplace) => x.BusinessPlaceCode == bplace.Code) + .Where(x => mybCodes.Contains(x.BusinessPlaceCode)) .Select((x, bplace) => new DishesCategoryTreeResponse { BusinessPlaceCode = bplace.Code, @@ -42,6 +48,8 @@ public class DishesCategoryService : IDishesCategoryService public async Task SaveAsync(DishesCategorySaveRequest request) { + await CheckBusinessPlacePermissionAsync(request.BusinessPlaceCode); + if (!request.Id.HasValue) { var entity = request.Adapt(); @@ -73,4 +81,27 @@ public class DishesCategoryService : IDishesCategoryService } } } + + /// + /// 检查营业点权限 + /// + /// + /// + private async Task CheckBusinessPlacePermissionAsync(Guid businessPlaceCode) + { + var codes = await GetMyBusinessPlaceCodesAsync(); + codes.Contains(businessPlaceCode).ThrowIfFalse("无权操作当前营业点"); + } + + + /// + /// 获取我管理的营业点 + /// + /// + private async Task> GetMyBusinessPlaceCodesAsync() + { + var mybCodes = (await _businessPlacePermissionsService.GetMyAsync()).Select(x => x.Code).ToList(); + + return mybCodes; + } } diff --git a/Src/Dlhis.Basic/Places/Controllers/BusinessPlacePermissionsController.cs b/Src/Dlhis.Basic/Places/Controllers/BusinessPlacePermissionsController.cs index 84eb4142..e5e7e0c0 100644 --- a/Src/Dlhis.Basic/Places/Controllers/BusinessPlacePermissionsController.cs +++ b/Src/Dlhis.Basic/Places/Controllers/BusinessPlacePermissionsController.cs @@ -28,7 +28,7 @@ public class BusinessPlacePermissionsController /// /// /// - [Authorize(Roles = "admin,tenant-admin")] + [Authorize(Roles = "admin,tenant-admin,businessplace-manager")] [HttpGet("page")] public async Task> GetPageAsync([FromQuery] BusinessPlacePermissionPageRequest request) { @@ -57,4 +57,28 @@ public class BusinessPlacePermissionsController { await _businessPlacePermissionsService.SaveBusinessPlacePermissionAsync(request); } + + /// + /// 通过userid获取分配的营业点信息 + /// + /// + /// + [Authorize(Roles = "admin,tenant-admin")] + [HttpGet("assignments/{userId}")] + public async Task> GetBusinessPlacePermissionByUserIdAsyc(int userId) + { + return await _businessPlacePermissionsService.GetBusinessPlacePermissionByUserIdAsyc(userId); + } + + /// + /// 删除记录 + /// + /// + /// + [Authorize(Roles = "admin,tenant-admin")] + [HttpDelete("{id}")] + public async Task DeleteAssignmentAsync(int id) + { + await _businessPlacePermissionsService.DeleteAssignmentAsync(id); + } } diff --git a/Src/Dlhis.Basic/Places/Response/BusinessPlacePermissionPageResponse.cs b/Src/Dlhis.Basic/Places/Response/BusinessPlacePermissionPageResponse.cs index cac2e41e..9a1273e2 100644 --- a/Src/Dlhis.Basic/Places/Response/BusinessPlacePermissionPageResponse.cs +++ b/Src/Dlhis.Basic/Places/Response/BusinessPlacePermissionPageResponse.cs @@ -7,7 +7,7 @@ public class BusinessPlacePermissionPageResponse /// /// 用户id /// - public string UserId { get; set; } + public int UserId { get; set; } /// /// 用户name diff --git a/Src/Dlhis.Basic/Places/Services/IBusinessPlacePermissionsService.cs b/Src/Dlhis.Basic/Places/Services/IBusinessPlacePermissionsService.cs index a7589141..5d069b56 100644 --- a/Src/Dlhis.Basic/Places/Services/IBusinessPlacePermissionsService.cs +++ b/Src/Dlhis.Basic/Places/Services/IBusinessPlacePermissionsService.cs @@ -12,4 +12,8 @@ public interface IBusinessPlacePermissionsService : IScopeDependency Task SaveBusinessPlacePermissionAsync(BusinessPlacePermissionSaveRequest request); Task> GetMyAsync(); + + Task> GetBusinessPlacePermissionByUserIdAsyc(int id); + + Task DeleteAssignmentAsync(int id); } diff --git a/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlacePermissionsService.cs b/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlacePermissionsService.cs index 8a9d175e..1143a99b 100644 --- a/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlacePermissionsService.cs +++ b/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlacePermissionsService.cs @@ -6,6 +6,9 @@ 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; @@ -13,16 +16,36 @@ public class BusinessPlacePermissionsService : IBusinessPlacePermissionsService { private readonly IDbContext _dbContext; private readonly ICurrentUser _currentUser; + private readonly IUserApi _userApi; - public BusinessPlacePermissionsService(IDbContext dbContext, ICurrentUser currentUser) + public BusinessPlacePermissionsService(IDbContext dbContext, ICurrentUser currentUser, IUserApi userApi) { _dbContext = dbContext; _currentUser = currentUser; + _userApi = userApi; } public async Task> GetPageAsync(BusinessPlacePermissionPageRequest request) { - throw new NotImplementedException(); + var page = await _dbContext.Queryable() + .LeftJoin((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> GetMyAsync() @@ -38,7 +61,7 @@ public class BusinessPlacePermissionsService : IBusinessPlacePermissionsService return await _dbContext.Queryable() .Where(x => guids.Contains(x.Code)) .Select() - .ToListAsync(); + .ToListAsync(); } public async Task SaveBusinessPlacePermissionAsync(BusinessPlacePermissionSaveRequest request) @@ -59,4 +82,33 @@ public class BusinessPlacePermissionsService : IBusinessPlacePermissionsService await _dbContext.InsertAsync(entity); } } + + public async Task> GetBusinessPlacePermissionByUserIdAsyc(int id) + { + var infos = await _dbContext.Queryable() + .LeftJoin((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().Where(x => x.Id == id).ExecuteCommandAsync(); + } } diff --git a/Src/Dlhis.Sys.Api/IUserApi.cs b/Src/Dlhis.Sys.Api/IUserApi.cs index 643fce04..fba7db5f 100644 --- a/Src/Dlhis.Sys.Api/IUserApi.cs +++ b/Src/Dlhis.Sys.Api/IUserApi.cs @@ -10,4 +10,8 @@ public interface IUserApi [Auth] [Get("/api/users")] Task> GetUserByIdAsync(int id); + + [Auth] + [Post("/api/users/by-ids")] + Task>> GetUserByIdsAsync(List ids); } \ No newline at end of file diff --git a/Src/Dlhis.Sys/Identity/Controllers/UsersController.cs b/Src/Dlhis.Sys/Identity/Controllers/UsersController.cs index 229708bc..2a87166e 100644 --- a/Src/Dlhis.Sys/Identity/Controllers/UsersController.cs +++ b/Src/Dlhis.Sys/Identity/Controllers/UsersController.cs @@ -56,6 +56,13 @@ public class UsersController : ControllerBase return await _userService.GetUserByIdAsync(id); } + [Authorize] + [HttpPost("by-ids")] + public async Task> GetUserByIdsAsync(List ids) + { + return await _userService.GetUserByIdsAsync(ids); + } + /// /// 上传头像 /// diff --git a/Src/Dlhis.Sys/Identity/Services/IUserService.cs b/Src/Dlhis.Sys/Identity/Services/IUserService.cs index 98932a32..619f6e78 100644 --- a/Src/Dlhis.Sys/Identity/Services/IUserService.cs +++ b/Src/Dlhis.Sys/Identity/Services/IUserService.cs @@ -15,4 +15,7 @@ public interface IUserService : IScopeDependency Task GetUserByIdAsync(int id); Task UploadUserAvatarAsync(UserAvatarUploadRequest request); + + + Task> GetUserByIdsAsync(List ids); } diff --git a/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs b/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs index 3b79a260..1f61bff3 100644 --- a/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs +++ b/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs @@ -61,4 +61,10 @@ public class UserService : IUserService { var user = await _dbContext.Queryable().Where(x => x.Id == request.UserNo).Select().FirstAsync(); } + + public async Task> GetUserByIdsAsync(List ids) + { + var users = await _dbContext.Queryable().Where(x => ids.Contains(x.Id)).Select().ToListAsync(); + return users; + } }