From 3cec6fc5ef6f3c627c65b8b28feae6a8f7b983c4 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Thu, 15 Jun 2023 10:30:44 +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=E3=80=91=E5=AE=9A=E4=B9=89=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E7=9A=84=E4=B8=9A=E5=8A=A1=E5=85=B3=E8=81=94?= =?UTF-8?q?=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/callback/RemoveMenuCallbackApi.java | 21 +++++++++++++++ .../menu/service/impl/SysMenuServiceImpl.java | 26 +++++++++++++++++-- 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/callback/RemoveMenuCallbackApi.java diff --git a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/callback/RemoveMenuCallbackApi.java b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/callback/RemoveMenuCallbackApi.java new file mode 100644 index 000000000..860c7c08a --- /dev/null +++ b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/callback/RemoveMenuCallbackApi.java @@ -0,0 +1,21 @@ +package cn.stylefeng.roses.kernel.sys.api.callback; + +import java.util.Set; + +/** + * 删除菜单的回调 + * + * @author fengshuonan + * @since 2023/6/15 10:27 + */ +public interface RemoveMenuCallbackApi { + + /** + * 删除菜单关联的业务绑定操作 + * + * @author fengshuonan + * @since 2023/6/15 10:27 + */ + void removeMenuAction(Set beRemovedMenuIdList); + +} 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 f8bed6c03..0c5407882 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 @@ -3,9 +3,12 @@ package cn.stylefeng.roses.kernel.sys.modular.menu.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.spring.SpringUtil; +import cn.stylefeng.roses.kernel.db.api.DbOperatorApi; import cn.stylefeng.roses.kernel.rule.constants.SymbolConstant; import cn.stylefeng.roses.kernel.rule.constants.TreeConstants; 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.app.service.SysAppService; import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu; import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuExceptionEnum; @@ -18,10 +21,12 @@ import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.Set; import java.util.stream.Collectors; @@ -37,6 +42,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Resource private SysAppService sysAppService; + @Resource + private DbOperatorApi dbOperatorApi; + @Override public void add(SysMenuRequest sysMenuRequest) { @@ -54,9 +62,23 @@ public class SysMenuServiceImpl extends ServiceImpl impl } @Override + @Transactional(rollbackFor = Exception.class) public void del(SysMenuRequest sysMenuRequest) { - SysMenu sysMenu = this.querySysMenu(sysMenuRequest); - this.removeById(sysMenu.getMenuId()); + + Long menuId = sysMenuRequest.getMenuId(); + + // 获取所有子级的菜单id + Set totalMenuIds = this.dbOperatorApi.findSubListByParentId("sys_menu", "menu_pids", "menu_id", menuId); + totalMenuIds.add(menuId); + + // 删除菜单 + this.removeByIds(totalMenuIds); + + // 删除菜单下面关联的其他业务关联表 + Map removeMenuCallbackApiMap = SpringUtil.getBeansOfType(RemoveMenuCallbackApi.class); + for (RemoveMenuCallbackApi removeMenuCallbackApi : removeMenuCallbackApiMap.values()) { + removeMenuCallbackApi.removeMenuAction(totalMenuIds); + } } @Override