diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java index 2931dade..7a01eb4b 100644 --- a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java +++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java @@ -47,6 +47,8 @@ public enum ErrorCode implements CodeInfo { ROLE_PRESENT(703, "角色 [{}] 不存在"), + DATA_ALTER(704, "数据发生改变, 请刷新后重试"), + // -------------------- 自定义 - 通用 -------------------- NETWORK_FLUCTUATION(900, "当前环境网路波动"), diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java index 2f055a4b..d836afb9 100644 --- a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java +++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java @@ -17,6 +17,8 @@ public interface ErrorMessage { String INVALID_PARAM = "参数验证失败"; + String DATA_ABSENT = "数据不存在"; + String DATA_PRESENT = "数据已存在"; String NAME_PRESENT = "名称已存在"; @@ -33,16 +35,10 @@ public interface ErrorMessage { String PARENT_MENU_ABSENT = "父菜单不存在"; - String DATA_ABSENT = "数据不存在"; - String USERNAME_PASSWORD_ERROR = "用户名或密码错误"; String MAX_LOGIN_FAILED = "登陆失败次数已上限"; String USER_ABSENT = "用户不存在"; - String USER_DISABLED = "用户已被禁用"; - - String USER_LOCKED = "用户已被锁定"; - } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/Conditions.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/Conditions.java index 398f88ac..d00c9251 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/Conditions.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/Conditions.java @@ -2,6 +2,8 @@ package com.orion.ops.framework.mybatis.core.query; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.support.SFunction; +import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.utils.Valid; import java.util.Collection; @@ -38,16 +40,31 @@ public class Conditions { } /** - * id list + * eq * - * @param idMapping idMapping - * @param ids ids - * @param T - * @param ID + * @param mapping mapping + * @param e e + * @param T + * @param E * @return wrapper */ - public static LambdaQueryWrapper id(SFunction idMapping, Collection ids) { - return new ValidateLambdaWrapper().in(idMapping, ids); + public static LambdaQueryWrapper eq(SFunction mapping, E e) { + Valid.notNull(e, ErrorMessage.INVALID_PARAM); + return new LambdaQueryWrapper().eq(mapping, e); + } + + /** + * in + * + * @param mapping mapping + * @param es es + * @param T + * @param E + * @return wrapper + */ + public static LambdaQueryWrapper in(SFunction mapping, Collection es) { + Valid.notEmpty(es, ErrorMessage.INVALID_PARAM); + return new LambdaQueryWrapper().in(mapping, es); } } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java index a753ef34..0300f304 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/java/com/orion/ops/framework/mybatis/core/query/DataQuery.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.define.wrapper.IPageRequest; import com.orion.lang.define.wrapper.Pager; +import com.orion.lang.utils.Objects1; import com.orion.lang.utils.Valid; import com.orion.lang.utils.collect.Lists; import com.orion.ops.framework.common.constant.Const; @@ -60,7 +61,7 @@ public class DataQuery { } public DataQuery only() { - this.wrapper.last(Const.LIMIT_1); + wrapper.last(Const.LIMIT_1); return this; } @@ -68,29 +69,28 @@ public class DataQuery { return dao.selectOne(wrapper); } - public Optional optional() { - return Optional.ofNullable(dao.selectOne(wrapper)); + public R get(Function mapper) { + Valid.notNull(mapper, "convert function is null"); + return Objects1.map(dao.selectOne(wrapper), mapper); } - public Optional optional(Function mapper) { - Valid.notNull(mapper, "convert function is null"); - return Optional.ofNullable(dao.selectOne(wrapper)) - .map(mapper); + public Optional optional() { + return Optional.ofNullable(dao.selectOne(wrapper)); } public List list() { return dao.selectList(wrapper); } - public Stream stream() { - return dao.selectList(wrapper).stream(); - } - - public List stream(Function mapper) { + public List list(Function mapper) { Valid.notNull(mapper, "convert function is null"); return Lists.map(dao.selectList(wrapper), mapper); } + public Stream stream() { + return dao.selectList(wrapper).stream(); + } + public Long count() { return dao.selectCount(wrapper); } diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.http.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.http.vm index 3a961a88..6d513f3e 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.http.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.http.vm @@ -56,4 +56,6 @@ DELETE {{baseUrl}}/${package.ModuleName}/${typeHyphen}/delete-batch?idList=1,2,3 Authorization: {{token}} +${httpComment} + diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.java.vm b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.java.vm index a0dc8c87..4cad1d28 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.java.vm +++ b/orion-ops-framework/orion-ops-spring-boot-starter-mybatis/src/main/resources/templates/orion-controller.java.vm @@ -1,6 +1,7 @@ package ${package.Controller}; import com.orion.lang.define.wrapper.DataGrid; +import com.orion.ops.framework.common.annotation.IgnoreLog; import com.orion.ops.framework.common.annotation.RestWrapper; import ${package.Service}.*; #foreach($pkg in ${customFilePackages}) @@ -57,6 +58,7 @@ public class ${table.controllerName} { return ${typeLower}Service.update${type}(request); } + @IgnoreLog @GetMapping("/get") @Operation(summary = "${apiComment.get}") @Parameter(name = "id", description = "id", required = true) @@ -65,6 +67,7 @@ public class ${table.controllerName} { return ${typeLower}Service.get${type}(id); } + @IgnoreLog @GetMapping("/list") @Operation(summary = "${apiComment.list}") @Parameter(name = "idList", description = "idList", required = true) @@ -73,6 +76,7 @@ public class ${table.controllerName} { return ${typeLower}Service.get${type}List(idList); } + @IgnoreLog @PostMapping("/query") @Operation(summary = "${apiComment.query}") @PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:query')") @@ -80,7 +84,7 @@ public class ${table.controllerName} { return ${typeLower}Service.get${type}Page(request); } - @PutMapping("/delete") + @DeleteMapping("/delete") @Operation(summary = "${apiComment.delete}") @Parameter(name = "id", description = "id", required = true) @PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:delete')") @@ -88,7 +92,7 @@ public class ${table.controllerName} { return ${typeLower}Service.delete${type}(id); } - @PutMapping("/delete-batch") + @DeleteMapping("/delete-batch") @Operation(summary = "${apiComment.batchDelete}") @Parameter(name = "idList", description = "idList", required = true) @PreAuthorize("@ss.hasPermission('${package.ModuleName}:${typeHyphen}:delete')") diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java b/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java index 38d3971e..346c4048 100644 --- a/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java +++ b/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java @@ -122,7 +122,7 @@ public class GlobalExceptionHandler { IllegalArgumentException.class }) public HttpWrapper invalidArgumentExceptionHandler(Exception ex) { - log.error("invalidArgumentExceptionHandler {}", ex.getMessage()); + log.error("invalidArgumentExceptionHandler {}", ex.getMessage(), ex); return ErrorCode.BAD_REQUEST.wrapper().msg(ex.getMessage()); } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemMenuController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemMenuController.java index de89416b..b8b2e491 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemMenuController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemMenuController.java @@ -2,12 +2,10 @@ package com.orion.ops.module.infra.controller; import com.orion.ops.framework.common.annotation.IgnoreLog; import com.orion.ops.framework.common.annotation.RestWrapper; -import com.orion.ops.module.infra.entity.request.menu.SystemMenuCreateRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemMenuQueryRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemMenuUpdateRequest; -import com.orion.ops.module.infra.entity.request.menu.SystemMenuUpdateStatusRequest; +import com.orion.ops.module.infra.entity.request.menu.*; import com.orion.ops.module.infra.entity.vo.SystemMenuVO; import com.orion.ops.module.infra.service.SystemMenuService; +import com.orion.ops.module.infra.service.SystemRoleMenuService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -38,6 +36,9 @@ public class SystemMenuController { @Resource private SystemMenuService systemMenuService; + @Resource + private SystemRoleMenuService systemRoleMenuService; + @PostMapping("/create") @Operation(summary = "创建菜单") @PreAuthorize("@ss.hasPermission('infra:system-menu:create')") @@ -59,6 +60,14 @@ public class SystemMenuController { return systemMenuService.updateSystemMenuStatus(request); } + @PostMapping("/bind") + @Operation(summary = "绑定角色菜单") + @PreAuthorize("@ss.hasPermission('infra:system-menu:bind')") + public Integer bindRoleMenu(@RequestBody SystemMenuBindRequest request) { + return systemRoleMenuService.bindRoleMenu(request); + } + + @IgnoreLog @GetMapping("/get") @Operation(summary = "通过 id 查询菜单") @Parameter(name = "id", description = "id", required = true) @@ -75,7 +84,7 @@ public class SystemMenuController { return systemMenuService.getSystemMenuList(request); } - @PutMapping("/delete") + @DeleteMapping("/delete") @Operation(summary = "通过 id 级联删除菜单") @Parameter(name = "id", description = "id", required = true) @PreAuthorize("@ss.hasPermission('infra:system-menu:delete')") diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleController.java index 963dda6a..91121a6b 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemRoleController.java @@ -1,6 +1,7 @@ package com.orion.ops.module.infra.controller; import com.orion.lang.define.wrapper.DataGrid; +import com.orion.ops.framework.common.annotation.IgnoreLog; import com.orion.ops.framework.common.annotation.RestWrapper; import com.orion.ops.module.infra.entity.request.role.SystemRoleCreateRequest; import com.orion.ops.module.infra.entity.request.role.SystemRoleQueryRequest; @@ -59,6 +60,7 @@ public class SystemRoleController { return systemRoleService.updateRoleStatus(request); } + @IgnoreLog @GetMapping("/get") @Operation(summary = "通过 id 查询角色") @Parameter(name = "id", description = "id", required = true) @@ -67,6 +69,7 @@ public class SystemRoleController { return systemRoleService.getSystemRole(id); } + @IgnoreLog @GetMapping("/list") @Operation(summary = "查询所有角色") @PreAuthorize("@ss.hasPermission('infra:system-role:query')") @@ -74,6 +77,7 @@ public class SystemRoleController { return systemRoleService.getSystemRoleList(); } + @IgnoreLog @PostMapping("/query") @Operation(summary = "分页查询角色") @PreAuthorize("@ss.hasPermission('infra:system-role:query')") @@ -81,7 +85,7 @@ public class SystemRoleController { return systemRoleService.getSystemRolePage(request); } - @PutMapping("/delete") + @DeleteMapping("/delete") @Operation(summary = "通过 id 删除角色") @Parameter(name = "id", description = "id", required = true) @PreAuthorize("@ss.hasPermission('infra:system-role:delete')") diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java index b6e88ac8..d77ed900 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/controller/SystemUserController.java @@ -3,6 +3,7 @@ package com.orion.ops.module.infra.controller; import com.orion.lang.define.wrapper.DataGrid; import com.orion.lang.define.wrapper.HttpWrapper; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.common.annotation.IgnoreLog; import com.orion.ops.framework.common.annotation.RestWrapper; import com.orion.ops.module.infra.entity.request.user.*; import com.orion.ops.module.infra.entity.vo.SystemUserVO; @@ -85,6 +86,7 @@ public class SystemUserController { return HttpWrapper.ok(); } + @IgnoreLog @GetMapping("/get") @Operation(summary = "通过 id 查询用户") @Parameter(name = "id", description = "id", required = true) @@ -93,6 +95,7 @@ public class SystemUserController { return systemUserService.getSystemUser(id); } + @IgnoreLog @GetMapping("/list") @Operation(summary = "查询所有用户") @PreAuthorize("@ss.hasPermission('infra:system-user:query')") @@ -100,6 +103,7 @@ public class SystemUserController { return systemUserService.getSystemUserList(); } + @IgnoreLog @PostMapping("/query") @Operation(summary = "分页查询用户") @PreAuthorize("@ss.hasPermission('infra:system-user:query')") @@ -107,7 +111,7 @@ public class SystemUserController { return systemUserService.getSystemUserPage(request); } - @PutMapping("/delete") + @DeleteMapping("/delete") @Operation(summary = "通过 id 删除用户") @Parameter(name = "id", description = "id", required = true) @PreAuthorize("@ss.hasPermission('infra:system-user:delete')") diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleMenuDAO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleMenuDAO.java index 4225a8a1..f0176f2c 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleMenuDAO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemRoleMenuDAO.java @@ -5,6 +5,8 @@ import com.orion.ops.framework.mybatis.core.mapper.IMapper; import com.orion.ops.module.infra.entity.domain.SystemRoleMenuDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 角色菜单关联 Mapper 接口 * @@ -34,10 +36,22 @@ public interface SystemRoleMenuDAO extends IMapper { * @param roleId roleId * @return effect */ - default Integer deleteByRoleId(Long roleId) { + default int deleteByRoleId(Long roleId) { LambdaQueryWrapper wrapper = this.wrapper() .eq(SystemRoleMenuDO::getRoleId, roleId); return this.delete(wrapper); } + /** + * 通过 menuId 删除 + * + * @param menuIdList menuIdList + * @return effect + */ + default int deleteByMenuId(List menuIdList) { + LambdaQueryWrapper wrapper = this.wrapper() + .in(SystemRoleMenuDO::getMenuId, menuIdList); + return this.delete(wrapper); + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemUserRoleDAO.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemUserRoleDAO.java index dd8c5e97..b71cb782 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemUserRoleDAO.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/dao/SystemUserRoleDAO.java @@ -67,7 +67,7 @@ public interface SystemUserRoleDAO extends IMapper { * @param userId userId * @return effect */ - default Integer deleteByUserId(Long userId) { + default int deleteByUserId(Long userId) { LambdaQueryWrapper wrapper = this.wrapper() .eq(SystemUserRoleDO::getUserId, userId); return this.delete(wrapper); @@ -79,7 +79,7 @@ public interface SystemUserRoleDAO extends IMapper { * @param roleId roleId * @return effect */ - default Integer deleteByRoleId(Long roleId) { + default int deleteByRoleId(Long roleId) { LambdaQueryWrapper wrapper = this.wrapper() .eq(SystemUserRoleDO::getRoleId, roleId); return this.delete(wrapper); diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemMenuBindRequest.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemMenuBindRequest.java new file mode 100644 index 00000000..389778ea --- /dev/null +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/entity/request/menu/SystemMenuBindRequest.java @@ -0,0 +1,36 @@ +package com.orion.ops.module.infra.entity.request.menu; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +/** + * 菜单 绑定角色请求对象 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023-7-18 10:18 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(name = "SystemMenuBindRequest", description = "菜单 绑定角色请求对象") +public class SystemMenuBindRequest implements Serializable { + + @NotNull + @Schema(description = "roleId") + private Long roleId; + + @NotEmpty + @Schema(description = "菜单id集合") + private List idList; + +} diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleMenuService.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleMenuService.java index c958cff1..fd85c534 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleMenuService.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/SystemRoleMenuService.java @@ -1,5 +1,7 @@ package com.orion.ops.module.infra.service; +import com.orion.ops.module.infra.entity.request.menu.SystemMenuBindRequest; + /** * 角色菜单关联 服务类 * @@ -9,4 +11,12 @@ package com.orion.ops.module.infra.service; */ public interface SystemRoleMenuService { + /** + * 绑定角色菜单 + * + * @param request request + * @return effect + */ + Integer bindRoleMenu(SystemMenuBindRequest request); + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java index 18406906..b62b0c06 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/AuthenticationServiceImpl.java @@ -8,8 +8,8 @@ import com.orion.lang.utils.Exceptions; import com.orion.lang.utils.collect.Lists; import com.orion.lang.utils.crypto.Signatures; import com.orion.ops.framework.common.constant.Const; +import com.orion.ops.framework.common.constant.ErrorCode; import com.orion.ops.framework.common.constant.ErrorMessage; -import com.orion.ops.framework.common.crypto.ValueCrypto; import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.framework.common.utils.CryptoUtils; import com.orion.ops.framework.common.utils.IpUtils; @@ -51,9 +51,6 @@ import java.util.stream.Collectors; @Service public class AuthenticationServiceImpl implements AuthenticationService { - @Resource - private ValueCrypto valueCrypto; - @Resource private SystemUserDAO systemUserDAO; @@ -250,10 +247,10 @@ public class AuthenticationServiceImpl implements AuthenticationService { private void checkUserStatus(Integer status) { if (UserStatusEnum.DISABLED.getStatus().equals(status)) { // 禁用状态 - throw Exceptions.argument(ErrorMessage.USER_DISABLED); + throw ErrorCode.USER_DISABLED.exception(); } else if (UserStatusEnum.LOCKED.getStatus().equals(status)) { // 锁定状态 - throw Exceptions.argument(ErrorMessage.USER_LOCKED); + throw ErrorCode.USER_LOCKED.exception(); } } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PermissionServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PermissionServiceImpl.java index 37040230..5769a84e 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PermissionServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/PermissionServiceImpl.java @@ -1,6 +1,7 @@ package com.orion.ops.module.infra.service.impl; import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.module.infra.convert.SystemMenuConvert; import com.orion.ops.module.infra.convert.SystemUserConvert; @@ -16,6 +17,7 @@ import com.orion.ops.module.infra.entity.vo.SystemMenuVO; import com.orion.ops.module.infra.entity.vo.UserBaseInfoVO; import com.orion.ops.module.infra.entity.vo.UserPermissionVO; import com.orion.ops.module.infra.enums.MenuStatusEnum; +import com.orion.ops.module.infra.enums.MenuTypeEnum; import com.orion.ops.module.infra.enums.RoleStatusEnum; import com.orion.ops.module.infra.service.PermissionService; import com.orion.ops.module.infra.service.SystemMenuService; @@ -156,6 +158,8 @@ public class PermissionServiceImpl implements PermissionService { .filter(Objects::nonNull) .flatMap(Collection::stream) .distinct() + .filter(s -> MenuStatusEnum.ENABLED.getStatus().equals(s.getStatus())) + .filter(s -> !MenuTypeEnum.FUNCTION.getType().equals(s.getType())) .map(SystemMenuConvert.MAPPER::to) .collect(Collectors.toList()); // 构建菜单树 @@ -177,18 +181,18 @@ public class PermissionServiceImpl implements PermissionService { .map(roleMenuCache::get) .filter(Objects::nonNull) .flatMap(Collection::stream) + .filter(s -> MenuStatusEnum.ENABLED.getStatus().equals(s.getStatus())) .map(SystemMenuCacheDTO::getPermission) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); } // 组装数据 - UserPermissionVO vo = new UserPermissionVO().builder() + return UserPermissionVO.builder() .user(user) .roles(roles) .permissions(permissions) .build(); - return vo; } /** @@ -198,7 +202,9 @@ public class PermissionServiceImpl implements PermissionService { */ private List getUserEnabledRoles() { // 获取当前用户角色 - List roles = SecurityUtils.getLoginUser().getRoles(); + List roles = Optional.ofNullable(SecurityUtils.getLoginUser()) + .map(LoginUser::getRoles) + .orElse(Lists.empty()); if (Lists.isEmpty(roles)) { return Lists.empty(); } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java index be48180e..a1296ed7 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemMenuServiceImpl.java @@ -9,6 +9,7 @@ import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.mybatis.core.query.Conditions; import com.orion.ops.module.infra.convert.SystemMenuConvert; import com.orion.ops.module.infra.dao.SystemMenuDAO; +import com.orion.ops.module.infra.dao.SystemRoleMenuDAO; import com.orion.ops.module.infra.entity.domain.SystemMenuDO; import com.orion.ops.module.infra.entity.dto.SystemMenuCacheDTO; import com.orion.ops.module.infra.entity.request.menu.SystemMenuCreateRequest; @@ -23,6 +24,7 @@ import com.orion.ops.module.infra.service.SystemMenuService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; @@ -43,6 +45,9 @@ public class SystemMenuServiceImpl implements SystemMenuService { @Resource private SystemMenuDAO systemMenuDAO; + @Resource + private SystemRoleMenuDAO systemRoleMenuDAO; + @Resource private PermissionService permissionService; @@ -180,19 +185,20 @@ public class SystemMenuServiceImpl implements SystemMenuService { List cache = permissionService.getMenuCache(); // 获取要删除的id List updateIdList = this.getChildrenIdList(id, cache, record.getType()); + // 修改状态 + SystemMenuDO update = new SystemMenuDO(); + update.setStatus(status); + int effect = systemMenuDAO.update(update, Conditions.in(SystemMenuDO::getId, updateIdList)); // 修改引用缓存状态 cache.stream() .filter(s -> updateIdList.contains(s.getId())) .forEach(s -> s.setStatus(status)); - // 修改状态 - SystemMenuDO update = new SystemMenuDO(); - update.setStatus(status); - int effect = systemMenuDAO.update(update, Conditions.id(SystemMenuDO::getId, updateIdList)); log.info("SystemMenuService-updateSystemMenuStatus updateIdList: {}, effect: {}", JSON.toJSONString(updateIdList), effect); return effect; } @Override + @Transactional(rollbackFor = Exception.class) public Integer deleteSystemMenu(Long id) { // 查询 SystemMenuDO record = systemMenuDAO.selectById(id); @@ -201,14 +207,16 @@ public class SystemMenuServiceImpl implements SystemMenuService { List cache = permissionService.getMenuCache(); // 获取要删除的id List deletedIdList = this.getChildrenIdList(id, cache, record.getType()); + // 删除菜单 + int effect = systemMenuDAO.deleteBatchIds(deletedIdList); + // 删除角色菜单关联 + effect += systemRoleMenuDAO.deleteByMenuId(deletedIdList); // 删除菜单缓存 cache.removeIf(s -> deletedIdList.contains(s.getId())); // 删除引用缓存 permissionService.getRoleMenuCache() .values() .forEach(roleMenus -> roleMenus.removeIf(s -> deletedIdList.contains(s.getId()))); - // 删除 - int effect = systemMenuDAO.deleteBatchIds(deletedIdList); log.info("SystemMenuService-deleteSystemMenu deletedIdList: {}, effect: {}", JSON.toJSONString(deletedIdList), effect); return effect; } @@ -222,7 +230,7 @@ public class SystemMenuServiceImpl implements SystemMenuService { * @return childrenId */ private List getChildrenIdList(Long id, List cache, Integer type) { - // 需要移除的菜单id + // 需要更新的菜单id List idList = new ArrayList<>(); idList.add(id); // 级联查询 @@ -251,8 +259,8 @@ public class SystemMenuServiceImpl implements SystemMenuService { /** * 验证创建菜单参数 不进行重复性校验 * - * @param domain domain - * @param record record + * @param domain domain + * @param menuType menuType */ private void validateRequest(SystemMenuDO domain, Integer menuType) { // 父id不能为当前id diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleMenuServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleMenuServiceImpl.java index 92363907..501fbf42 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleMenuServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemRoleMenuServiceImpl.java @@ -1,11 +1,31 @@ package com.orion.ops.module.infra.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.orion.lang.utils.collect.Lists; +import com.orion.ops.framework.common.constant.ErrorCode; +import com.orion.ops.framework.common.constant.ErrorMessage; +import com.orion.ops.framework.common.utils.Valid; +import com.orion.ops.framework.mybatis.core.query.Conditions; +import com.orion.ops.module.infra.convert.SystemMenuConvert; +import com.orion.ops.module.infra.dao.SystemMenuDAO; +import com.orion.ops.module.infra.dao.SystemRoleDAO; import com.orion.ops.module.infra.dao.SystemRoleMenuDAO; +import com.orion.ops.module.infra.entity.domain.SystemMenuDO; +import com.orion.ops.module.infra.entity.domain.SystemRoleDO; +import com.orion.ops.module.infra.entity.domain.SystemRoleMenuDO; +import com.orion.ops.module.infra.entity.dto.SystemMenuCacheDTO; +import com.orion.ops.module.infra.entity.request.menu.SystemMenuBindRequest; +import com.orion.ops.module.infra.service.PermissionService; import com.orion.ops.module.infra.service.SystemRoleMenuService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 角色菜单关联 服务实现类 @@ -18,7 +38,72 @@ import javax.annotation.Resource; @Service public class SystemRoleMenuServiceImpl implements SystemRoleMenuService { + @Resource + private SystemRoleDAO systemRoleDAO; + + @Resource + private SystemMenuDAO systemMenuDAO; + @Resource private SystemRoleMenuDAO systemRoleMenuDAO; + @Resource + private PermissionService permissionService; + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer bindRoleMenu(SystemMenuBindRequest request) { + Long roleId = request.getRoleId(); + List menuIdList = request.getIdList(); + // 检查角色是否存在 + SystemRoleDO role = Valid.notNull(systemRoleDAO.selectById(roleId), ErrorMessage.ROLE_ABSENT); + // 查询菜单列表 + List menuList = systemMenuDAO.selectBatchIds(menuIdList); + if (menuIdList.size() != menuList.size()) { + throw ErrorCode.DATA_ALTER.exception(); + } + // 查询角色菜单 + List beforeMenuIdList = systemRoleMenuDAO.of() + .wrapper(Conditions.eq(SystemRoleMenuDO::getRoleId, roleId)) + .list(SystemRoleMenuDO::getMenuId); + // 计算需要删除的 + List deleteMenuIdList = beforeMenuIdList.stream() + .filter(s -> !menuIdList.contains(s)) + .collect(Collectors.toList()); + // 计算需要新增的 + List insertMenuIdList = menuIdList.stream() + .filter(s -> !beforeMenuIdList.contains(s)) + .collect(Collectors.toList()); + int effect = 0; + // 删除 + if (!deleteMenuIdList.isEmpty()) { + LambdaQueryWrapper deleteWrapper = systemRoleMenuDAO.wrapper() + .eq(SystemRoleMenuDO::getRoleId, roleId) + .in(SystemRoleMenuDO::getMenuId, deleteMenuIdList); + effect += systemRoleMenuDAO.delete(deleteWrapper); + } + // 插入 + if (!insertMenuIdList.isEmpty()) { + List insertRecords = insertMenuIdList.stream() + .map(s -> { + SystemRoleMenuDO record = new SystemRoleMenuDO(); + record.setRoleId(roleId); + record.setMenuId(s); + return record; + }).collect(Collectors.toList()); + systemRoleMenuDAO.insertBatch(insertRecords); + effect += insertMenuIdList.size(); + } + // 更新缓存 + Map> cache = permissionService.getRoleMenuCache(); + List roleCache = cache.get(role.getCode()); + if (Lists.isEmpty(roleCache)) { + roleCache = new ArrayList<>(); + cache.put(role.getCode(), roleCache); + } + roleCache.clear(); + roleCache.addAll(SystemMenuConvert.MAPPER.toCache(menuList)); + return effect; + } + } diff --git a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java index ccb0215a..42d147ce 100644 --- a/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java +++ b/orion-ops-module-infra/orion-ops-module-infra-service/src/main/java/com/orion/ops/module/infra/service/impl/SystemUserRoleServiceImpl.java @@ -50,7 +50,7 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService { public Integer deleteUserRoles(SystemUserUpdateRoleRequest request) { Long userId = request.getId(); // 删除用户关联 - Integer effect = systemUserRoleDAO.deleteByUserId(userId); + int effect = systemUserRoleDAO.deleteByUserId(userId); // 更新缓存中的角色 RedisUtils.processSetJson(UserCacheKeyDefine.USER_INFO, s -> { s.setRoles(Lists.empty()); @@ -82,7 +82,7 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService { } } // 删除用户角色关联 - Integer effect = systemUserRoleDAO.deleteByUserId(userId); + int effect = systemUserRoleDAO.deleteByUserId(userId); // 重新添加用户角色关联 List addUserRoles = userRoles.stream().map(s -> { SystemUserRoleDO ur = new SystemUserRoleDO(); @@ -91,6 +91,7 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService { return ur; }).collect(Collectors.toList()); systemUserRoleDAO.insertBatch(addUserRoles); + effect += addUserRoles.size(); // 更新缓存中的角色 RedisUtils.processSetJson(UserCacheKeyDefine.USER_INFO, s -> { s.setRoles(new ArrayList<>(roleCodeList));