diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/enums/SysMenuExceptionEnum.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/enums/SysMenuExceptionEnum.java index 2aabdd0ec..5a20e9865 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/enums/SysMenuExceptionEnum.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/enums/SysMenuExceptionEnum.java @@ -16,7 +16,12 @@ public enum SysMenuExceptionEnum implements AbstractExceptionEnum { /** * 查询结果不存在 */ - SYS_MENU_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"); + SYS_MENU_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"), + + /** + * 当前应用下菜单编码存在重复,请更换编码 + */ + MENU_CODE_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10002", "当前应用下菜单编码存在重复,请更换编码"); /** * 错误编码 diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuValidateFactory.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuValidateFactory.java new file mode 100644 index 000000000..d1a91ce79 --- /dev/null +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuValidateFactory.java @@ -0,0 +1,46 @@ +package cn.stylefeng.roses.kernel.sys.modular.menu.factory; + +import cn.hutool.extra.spring.SpringUtil; +import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; +import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu; +import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuExceptionEnum; +import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request.SysMenuRequest; +import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 菜单参数校验 + * + * @author fengshuonan + * @since 2023/6/14 23:09 + */ +public class MenuValidateFactory { + + /** + * 校验新增菜单时候的参数合法性 + * + * @author fengshuonan + * @since 2023/6/14 23:10 + */ + public static void validateAddMenuParam(SysMenuRequest sysMenuRequest) { + + SysMenuService sysMenuService = SpringUtil.getBean(SysMenuService.class); + + // 同应用下菜单编码不能重复 + Long menuId = sysMenuRequest.getMenuId(); + + // 如果是新增菜单 + if (menuId == null) { + String menuCode = sysMenuRequest.getMenuCode(); + LambdaQueryWrapper sysMenuLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysMenuLambdaQueryWrapper.eq(SysMenu::getMenuCode, menuCode); + long alreadyCount = sysMenuService.count(sysMenuLambdaQueryWrapper); + if (alreadyCount > 0) { + throw new ServiceException(SysMenuExceptionEnum.MENU_CODE_REPEAT); + } + } + + + } + +} diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/pojo/request/SysMenuRequest.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/pojo/request/SysMenuRequest.java index 2ccc8a8ec..b34387cc8 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/pojo/request/SysMenuRequest.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/pojo/request/SysMenuRequest.java @@ -27,7 +27,7 @@ public class SysMenuRequest extends BaseRequest { private Long menuId; /** - * 父id,顶级节点的父id是-1 + * 父id,如果没有父级,则父级id为-1 */ @NotNull(message = "父id,顶级节点的父id是-1不能为空", groups = {add.class, edit.class}) @ChineseDescription("父id,顶级节点的父id是-1") @@ -71,7 +71,7 @@ public class SysMenuRequest extends BaseRequest { * 状态:1-启用,2-禁用 */ @ChineseDescription("状态:1-启用,2-禁用") - private Integer statusFlag; + private Integer statusFlag = 1; /** * 备注 diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java index d2577bd6f..d43d46d24 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java @@ -8,6 +8,7 @@ import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService; import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu; import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuFactory; +import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuValidateFactory; import cn.stylefeng.roses.kernel.sys.modular.menu.mapper.SysMenuMapper; import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request.SysMenuRequest; import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail; @@ -36,8 +37,15 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public void add(SysMenuRequest sysMenuRequest) { + + // 校验参数合法性 + MenuValidateFactory.validateAddMenuParam(sysMenuRequest); + SysMenu sysMenu = new SysMenu(); BeanUtil.copyProperties(sysMenuRequest, sysMenu); + + // 组装pids集合 + this.save(sysMenu); }