diff --git a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs index 36f6654f..5afd5d6f 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs @@ -8,7 +8,7 @@ using Kurisu.Core.Result; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -namespace Dlhis.Canteen.Dishes.Controllers; +namespace Dlhis.Canteen.Order.Controllers; /// /// 订单 diff --git a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs index fc96866f..48923d36 100644 --- a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs @@ -7,10 +7,8 @@ namespace Dlhis.Canteen.Order.Services; public interface IOrderService : IScopeDependency { - Task> AddAsync(OrderAddRequest request); - - + Task ReCalcOfflineAsync(ReCalcOfflineRequest request); Task UpdateOffline(UpdateOfflineRequest outRequest); @@ -23,4 +21,4 @@ public interface IOrderService : IScopeDependency Task> DeviceConsume(OrderAddRequest request); Task> GetOrdersAggregationAsync(PageDto page); -} +} \ No newline at end of file diff --git a/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs b/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs index f9a7afa6..d78c470c 100644 --- a/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs +++ b/Src/Dlhis.Entity/Sys/Entities/RoleEntity.cs @@ -17,5 +17,7 @@ public class RoleEntity public string NormalizedName { get; set; } + public string Description { get; set; } + public Guid ConcurrencyStamp { get; set; } } diff --git a/Src/Dlhis.Sys/Identity/Controllers/RolesController.cs b/Src/Dlhis.Sys/Identity/Controllers/RolesController.cs index cd65a44d..ebd9446a 100644 --- a/Src/Dlhis.Sys/Identity/Controllers/RolesController.cs +++ b/Src/Dlhis.Sys/Identity/Controllers/RolesController.cs @@ -29,7 +29,7 @@ public class RolesController : ControllerBase /// [Authorize(Roles = "admin")] [HttpGet("page")] - public async Task> GetPageAsync([FromQuery] RolePageRequest request) + public async Task> GetPageAsync([FromQuery] RolePageRequest request) { return await _roleService.GetPageAsync(request); } @@ -40,7 +40,7 @@ public class RolesController : ControllerBase /// [Authorize(Roles = "admin")] [HttpGet("list")] - public async Task> GetListAsync() + public async Task> GetListAsync() { return await _roleService.GetListAsync(); } @@ -85,7 +85,7 @@ public class RolesController : ControllerBase /// /// [HttpGet("my")] - public async Task GetMyRoleAsync(int? userId) + public async Task GetMyRoleAsync(int? userId) { return await _roleService.GetMyRoleAsync(userId); } diff --git a/Src/Dlhis.Sys/Identity/Controllers/TenantsController.cs b/Src/Dlhis.Sys/Identity/Controllers/TenantsController.cs index 6015e096..f7c16948 100644 --- a/Src/Dlhis.Sys/Identity/Controllers/TenantsController.cs +++ b/Src/Dlhis.Sys/Identity/Controllers/TenantsController.cs @@ -92,4 +92,4 @@ public class TenantsController : ControllerBase { return await _tenantService.GetMyTenantsAsync(); } -} +} \ 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 c3f4ffa5..d11a2293 100644 --- a/Src/Dlhis.Sys/Identity/Controllers/UsersController.cs +++ b/Src/Dlhis.Sys/Identity/Controllers/UsersController.cs @@ -26,7 +26,7 @@ public class UsersController : ControllerBase /// /// /// - [Authorize(Roles = "admin")] + [Authorize(Roles = "admin,tenant-admin")] [HttpGet("page")] public async Task> GetPageAsync([FromQuery] UserPageRequest request) { @@ -64,7 +64,7 @@ public class UsersController : ControllerBase } /// - /// + /// 创建用户 /// /// /// diff --git a/Src/Dlhis.Sys/Identity/Request/RoleSaveRequest.cs b/Src/Dlhis.Sys/Identity/Request/RoleSaveRequest.cs index 843bc8c5..52f6eda7 100644 --- a/Src/Dlhis.Sys/Identity/Request/RoleSaveRequest.cs +++ b/Src/Dlhis.Sys/Identity/Request/RoleSaveRequest.cs @@ -6,6 +6,9 @@ public class RoleSaveRequest { public int? Id { get; set; } - [Required(ErrorMessage = "角色名不能为空")] + [Required(ErrorMessage = "角色标识不能为空")] public string Name { get; set; } + + [Required(ErrorMessage = "描述不能为空")] + public string Description { get; set; } } diff --git a/Src/Dlhis.Sys/Identity/Request/UserPageRequest.cs b/Src/Dlhis.Sys/Identity/Request/UserPageRequest.cs index 3184123a..02136a5d 100644 --- a/Src/Dlhis.Sys/Identity/Request/UserPageRequest.cs +++ b/Src/Dlhis.Sys/Identity/Request/UserPageRequest.cs @@ -4,4 +4,8 @@ namespace Dlhis.Sys.Identity.Request; public class UserPageRequest : PageDto { -} + /// + /// 操作员 + /// + public bool IsOperator { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Sys/Identity/Response/RoleRespone.cs b/Src/Dlhis.Sys/Identity/Response/RoleResponse.cs similarity index 52% rename from Src/Dlhis.Sys/Identity/Response/RoleRespone.cs rename to Src/Dlhis.Sys/Identity/Response/RoleResponse.cs index 03cd8c23..7c90a410 100644 --- a/Src/Dlhis.Sys/Identity/Response/RoleRespone.cs +++ b/Src/Dlhis.Sys/Identity/Response/RoleResponse.cs @@ -1,13 +1,24 @@ namespace Dlhis.Sys.Identity.Response; -public class RoleRespone +public class RoleResponse { public int Id { get; set; } + /// + /// 名称 + /// public string Name { get; set; } + /// + /// 标准化名称 + /// public string NormalizedName { get; set; } + /// + /// 描述 + /// + public string Description { get; set; } + /// /// 是否可编辑 /// diff --git a/Src/Dlhis.Sys/Identity/Services/IRoleService.cs b/Src/Dlhis.Sys/Identity/Services/IRoleService.cs index 8b02ba23..4cb1dba1 100644 --- a/Src/Dlhis.Sys/Identity/Services/IRoleService.cs +++ b/Src/Dlhis.Sys/Identity/Services/IRoleService.cs @@ -6,13 +6,13 @@ namespace Dlhis.User.Identity.Services; public interface IRoleService : IScopeDependency { - Task> GetPageAsync(RolePageRequest request); + Task> GetPageAsync(RolePageRequest request); - Task> GetListAsync(); + Task> GetListAsync(); Task SaveRoleAsync(RoleSaveRequest request); - Task GetMyRoleAsync(int? userId); + Task GetMyRoleAsync(int? userId); Task RemoveRoleAsync(RoleRemoveRequest request); diff --git a/Src/Dlhis.Sys/Identity/Services/Implements/RoleService.cs b/Src/Dlhis.Sys/Identity/Services/Implements/RoleService.cs index 58909bc5..c8248594 100644 --- a/Src/Dlhis.Sys/Identity/Services/Implements/RoleService.cs +++ b/Src/Dlhis.Sys/Identity/Services/Implements/RoleService.cs @@ -2,8 +2,6 @@ using Dlhis.Sys.Identity.Request; using Dlhis.Sys.Identity.Response; using Dlhis.User.Identity.Services; -using Kurisu.AspNetCore.Scope; -using Kurisu.AspNetCore.UnifyResultAndValidation; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.CustomClass; using Kurisu.Core.DataAccess.Dto; @@ -24,29 +22,24 @@ public class RoleService : IRoleService _dbContext = dbContext.ChangeDb("identity"); } - public async Task> GetPageAsync(RolePageRequest request) + public async Task> GetPageAsync(RolePageRequest request) { return await _dbContext.Queryable() - .WhereIF(request.Search.IsPresent(), x => x.Name.Contains(request.Search) || x.NormalizedName.Contains(request.Search)) - .Where(x => x.Name != "admin") - .Select() - .ToPageListAsync(request); + .WhereIF(request.Search.IsPresent(), x => x.Name.Contains(request.Search) || x.NormalizedName.Contains(request.Search)) + .Where(x => x.Name != "admin") + .Select() + .ToPageListAsync(request); } - public async Task GetMyRoleAsync(int? userId) + public async Task GetMyRoleAsync(int? userId) { userId ??= _currentUser.GetIntSubjectId(); return await _dbContext.Queryable() - .LeftJoin((x, r) => x.RoleId == r.Id) - .Where(x => x.UserId == userId) - .Select((x, r) => new RoleRespone - { - Id = r.Id, - Name = r.Name, - NormalizedName = r.NormalizedName, - }) - .FirstAsync(); + .LeftJoin((x, r) => x.RoleId == r.Id) + .Where(x => x.UserId == userId) + .Select() + .FirstAsync(); } public async Task SaveRoleAsync(RoleSaveRequest request) @@ -59,6 +52,7 @@ public class RoleService : IRoleService { Name = request.Name, NormalizedName = request.Name.ToUpperInvariant(), + Description = request.Description, ConcurrencyStamp = Guid.NewGuid(), }); } @@ -69,6 +63,7 @@ public class RoleService : IRoleService entity.Name = request.Name; entity.NormalizedName = request.Name.ToUpperInvariant(); + entity.Description = request.Description; entity.ConcurrencyStamp = Guid.NewGuid(); await _dbContext.UpdateAsync(entity); @@ -107,9 +102,9 @@ public class RoleService : IRoleService else { await _dbContext.Updateable() - .SetColumns(x => x.RoleId == request.RoleId) - .Where(x => x.UserId == request.UserId) - .ExecuteCommandAsync(); + .SetColumns(x => x.RoleId == request.RoleId) + .Where(x => x.UserId == request.UserId) + .ExecuteCommandAsync(); } } else @@ -127,12 +122,12 @@ public class RoleService : IRoleService await _dbContext.DeleteReallyAsync(role); } - public async Task> GetListAsync() + public async Task> GetListAsync() { return await _dbContext.Queryable() - .Where(x => x.Name != "admin") - .Select() - .ToListAsync(); + .Where(x => x.Name != "admin") + .Select() + .ToListAsync(); } @@ -148,4 +143,4 @@ public class RoleService : IRoleService exists.ThrowIfTrue($"重复角色名称{request.Name}"); } -} +} \ No newline at end of file diff --git a/Src/Dlhis.Sys/Identity/Services/Implements/TenantService.cs b/Src/Dlhis.Sys/Identity/Services/Implements/TenantService.cs index f8e51a11..9cda48e0 100644 --- a/Src/Dlhis.Sys/Identity/Services/Implements/TenantService.cs +++ b/Src/Dlhis.Sys/Identity/Services/Implements/TenantService.cs @@ -23,16 +23,16 @@ public class TenantService : ITenantService public async Task> GetPageAsync(TenantPageRequest request) { return await _dbContext.Queryable() - .WhereIF(request.Search.IsPresent(), (tenant) => tenant.Name.Contains(request.Search)) - .Select() - .ToPageListAsync(request); + .WhereIF(request.Search.IsPresent(), (tenant) => tenant.Name.Contains(request.Search)) + .Select() + .ToPageListAsync(request); } public async Task> GetListAsync() { return await _dbContext.Queryable() - .Select() - .ToListAsync(); + .Select() + .ToListAsync(); } public async Task GetTenantByCode(string code) @@ -73,16 +73,16 @@ public class TenantService : ITenantService var tenantId = _currentUser.GetStringTenantId(); var myTenants = await _dbContext.Queryable() - .LeftJoin((ut, t) => ut.TenantCode == t.Code) - .Where(ut => ut.UserId == userId) - .Select((ut, t) => new TenantResponse - { - Id = t.Id, - PCode = t.PCode, - Code = t.Code, - Name = t.Name, - }) - .ToListAsync(); + .LeftJoin((ut, t) => ut.TenantCode == t.Code) + .Where(ut => ut.UserId == userId) + .Select((ut, t) => new TenantResponse + { + Id = t.Id, + PCode = t.PCode, + Code = t.Code, + Name = t.Name, + }) + .ToListAsync(); var currentTenant = myTenants.FirstOrDefault(x => x.Code == tenantId); var otherTenants = myTenants.Where(x => x.Code != tenantId); @@ -100,17 +100,16 @@ public class TenantService : ITenantService public async Task> GetTreeAsync() { var tenants = await _dbContext.Queryable() - .Select() - .ToListAsync(); + .Select() + .ToListAsync(); var tops = tenants.Where(x => x.PCode.IsEmpty()).ToList(); - foreach (var item in tops) - { - RecursionGetNext(item, tenants); - } + tops.ForEach(item => RecursionGetNext(item, tenants)); + return tops; } + //****************************************************************** help methods ***************************************************************************** private static void RecursionGetNext(TenantTreeResponse current, List data) { @@ -121,4 +120,4 @@ public class TenantService : ITenantService RecursionGetNext(item, data); } } -} +} \ No newline at end of file diff --git a/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs b/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs index 35b2d6fa..3381e7d7 100644 --- a/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs +++ b/Src/Dlhis.Sys/Identity/Services/Implements/UserService.cs @@ -3,40 +3,49 @@ using Dlhis.Sys.Identity.Request; using Dlhis.Sys.Identity.Response; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; +using Kurisu.Core.User.Abstractions; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Microsoft.AspNetCore.Identity; +using SqlSugar; namespace Dlhis.Sys.Identity.Services.Implements; public class UserService : IUserService { + private readonly ICurrentUser _currentUser; private readonly IDbContext _dbContext; - public UserService(IDbContext dbContext) + public UserService(IDbContext dbContext, ICurrentUser currentUser) { + _currentUser = currentUser; _dbContext = dbContext.ChangeDb("identity"); } public async Task> GetPageAsync(UserPageRequest request) { + var tenant = _currentUser.GetStringTenantId(); + var page = await _dbContext.Queryable() .LeftJoin((x, ur) => x.Id == ur.UserId) .LeftJoin((x, ur, r) => ur.RoleId == r.Id) .LeftJoin((x, ur, r, c) => x.Id == c.UserId && c.ClaimType == "preferred_username") + .LeftJoin((x, ur, r, c, cc) => x.Id == c.UserId && c.ClaimType == "tenant") .Where(x => x.UserName != "admin") + .Where((x, ur, r, c, cc) => cc.ClaimValue == tenant) + .WhereIF(request.IsOperator, (x, ur, r, c) => !SqlFunc.IsNullOrEmpty(r.Name)) + .WhereIF(!request.IsOperator, (x, ur, r, c) => SqlFunc.IsNullOrEmpty(r.Name)) .WhereIF(request.Search.IsPresent(), (x, ur, r, c) => x.UserName == request.Search - || x.Email == request.Search - || x.PhoneNumber == request.Search - || c.ClaimValue == request.Search + || x.Email == request.Search + || x.PhoneNumber == request.Search + || c.ClaimValue == request.Search ) - .Select((x, ur, r, c) => new UserResponse + .Select((x, ur, r, c, cc) => new UserResponse { Id = x.Id, RoleId = ur.RoleId, Role = r.Name, OperatorName = c.ClaimValue, - }, true) .ToPageListAsync(request); @@ -74,7 +83,6 @@ public class UserService : IUserService RoleId = ur.RoleId, Role = r.Name, OperatorName = c.ClaimValue, - }, true) .FirstAsync(); @@ -124,4 +132,4 @@ public class UserService : IUserService }); } } -} +} \ No newline at end of file diff --git a/Src/Dlhis.Sys/Identity/Services/Implements/UserTenantService.cs b/Src/Dlhis.Sys/Identity/Services/Implements/UserTenantService.cs index 6dbaffe5..3b10b794 100644 --- a/Src/Dlhis.Sys/Identity/Services/Implements/UserTenantService.cs +++ b/Src/Dlhis.Sys/Identity/Services/Implements/UserTenantService.cs @@ -31,10 +31,9 @@ public class UserTenantService : IUserTenantService await _dbContext.DeleteReallyAsync(userTenants); await _dbContext.InsertAsync(request.TenantCodes.Select(x => new UserTenantEntity - { - UserId = request.UserId, - TenantCode = x - }) - .ToList()); + { + UserId = request.UserId, + TenantCode = x + }).ToList()); } } \ No newline at end of file