From 7c85d669863d58640559259eca18e414e2af5e6b Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Thu, 15 Jun 2023 23:31:06 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.6.0=E3=80=91=E3=80=90sys=E3=80=91?= =?UTF-8?q?=E3=80=90menu=20options=E3=80=91=E6=9B=B4=E6=96=B0=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=8F=9C=E5=8D=95=E5=8A=9F=E8=83=BD=E7=9A=84=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/SysMenuOptionsExceptionEnum.java | 12 +++- .../factory/MenuOptionsValidateFactory.java | 62 +++++++++++++++++++ .../impl/SysMenuOptionsServiceImpl.java | 7 +++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuOptionsValidateFactory.java diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/enums/SysMenuOptionsExceptionEnum.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/enums/SysMenuOptionsExceptionEnum.java index 47dea158d..556cfb691 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/enums/SysMenuOptionsExceptionEnum.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/enums/SysMenuOptionsExceptionEnum.java @@ -16,7 +16,17 @@ public enum SysMenuOptionsExceptionEnum implements AbstractExceptionEnum { /** * 查询结果不存在 */ - SYS_MENU_OPTIONS_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"); + SYS_MENU_OPTIONS_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"), + + /** + * 同菜单下功能编码不能重复 + */ + OPTIONS_CODE_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10002", "同菜单下功能编码不能重复"), + + /** + * 同菜单下功能名称不能重复 + */ + OPTIONS_NAME_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10003", "同菜单下功能名称不能重复"); /** * 错误编码 diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuOptionsValidateFactory.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuOptionsValidateFactory.java new file mode 100644 index 000000000..d271c7fcb --- /dev/null +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/factory/MenuOptionsValidateFactory.java @@ -0,0 +1,62 @@ +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.SysMenuOptions; +import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuOptionsExceptionEnum; +import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request.SysMenuOptionsRequest; +import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +/** + * 参数功能的校验 + * + * @author fengshuonan + * @since 2023/6/15 23:21 + */ +public class MenuOptionsValidateFactory { + + /** + * 校验同菜单下功能名称和编码不能重复 + * + * @author fengshuonan + * @since 2023/6/15 23:21 + */ + public static void validateMenuOptionsParam(SysMenuOptionsRequest sysMenuOptionsRequest) { + + SysMenuOptionsService sysMenuOptionsService = SpringUtil.getBean(SysMenuOptionsService.class); + + // 1. 校验同菜单下不能编码重复 + Long menuId = sysMenuOptionsRequest.getMenuId(); + + LambdaQueryWrapper codeWrapper = new LambdaQueryWrapper<>(); + codeWrapper.eq(SysMenuOptions::getMenuId, menuId); + codeWrapper.eq(SysMenuOptions::getOptionCode, sysMenuOptionsRequest.getOptionCode()); + + // 如果是编辑菜单,则排除当前这个菜单的查询 + if (sysMenuOptionsRequest.getMenuOptionId() != null) { + codeWrapper.ne(SysMenuOptions::getMenuOptionId, sysMenuOptionsRequest.getMenuOptionId()); + } + + long alreadyCodeCount = sysMenuOptionsService.count(codeWrapper); + if (alreadyCodeCount > 0) { + throw new ServiceException(SysMenuOptionsExceptionEnum.OPTIONS_CODE_REPEAT); + } + + // 2. 校验同菜单下名称不能重复 + LambdaQueryWrapper nameWrapper = new LambdaQueryWrapper<>(); + nameWrapper.eq(SysMenuOptions::getMenuId, menuId); + nameWrapper.eq(SysMenuOptions::getOptionName, sysMenuOptionsRequest.getOptionName()); + + // 如果是编辑菜单,则排除当前这个菜单的查询 + if (sysMenuOptionsRequest.getMenuOptionId() != null) { + nameWrapper.ne(SysMenuOptions::getMenuOptionId, sysMenuOptionsRequest.getMenuOptionId()); + } + + long alreadyNameCount = sysMenuOptionsService.count(nameWrapper); + if (alreadyNameCount > 0) { + throw new ServiceException(SysMenuOptionsExceptionEnum.OPTIONS_NAME_REPEAT); + } + } + +} diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java index 78bf2e241..76cf9e65a 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java @@ -9,6 +9,7 @@ import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveMenuCallbackApi; import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenuOptions; import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuOptionsExceptionEnum; +import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuOptionsValidateFactory; import cn.stylefeng.roses.kernel.sys.modular.menu.mapper.SysMenuOptionsMapper; import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request.SysMenuOptionsRequest; import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService; @@ -32,6 +33,12 @@ public class SysMenuOptionsServiceImpl extends ServiceImpl