二、删除ZTree中的所有父节点与用户组的关联关系(删除多重复杂关系)

网友投稿 608 2022-11-25

二、删除ZTree中的所有父节点与用户组的关联关系(删除多重复杂关系)

二、删除ZTree中的所有父节点与用户组的关联关系(删除多重复杂关系)

(二)问题分析   因为“用户组”是和Action节点是相关联的,所以:   第一步:得先删除“用户组”和Action节点的关联关系;   第二步:再删除Action节点;   第三步:若Action节点删除以后,其父节点菜单及其父节点菜单的父节点菜单下若再无下辖的Action节点,则需要删除“用户组”和Menu节点的关联关系。

(三)解决办法   解决的核心思想就是:迭代!!具体见代码

@Override public ResultDto removeActionWithId(Integer id) { Action action = new Action(); action.setId(id); action = getAction(action); if (action == null){ return new ResultDto(PageCodeEnum.ACTION_NOT_EXISTS); } //删除Action的关联关系与Action removeRelationshipWithAction(action); return new ResultDto(PageCodeEnum.DELETE_SUCCESS); }/** * 删除Action节点的关联关系(group/action) * 重难点: * 若菜单及其所有子菜单均无下辖的Action节点,则清除该父节点与用户组之间的关联关系(group/menu), * 若父菜单及其所下辖的其他子菜单均无下辖的Action节点,则清除该父菜单与用户组之间的关联关系(group/menu) */ private void removeRelationshipWithAction(Action action){ //删除Action节点的关联关系(group/action) groupActionService.deleteGroupActionByActionId(action.getId()); //留着 Integer menuId = action.getMenuId(); //删除Action deleteAction(action); //若删除该action以后,父节点菜单及其所有子节点菜单均无其他下辖的Action节点,则清除该父节点与用户组之间的关联关系(group/menu) removeGroupMenuIfMenuEmpty(menuId); }/** * 若菜单及其所有子菜单均无下辖的Action节点,则清除该父节点与用户组之间的关联关系(group/menu), * 若父菜单及其所下辖的其他子菜单均无下辖的Action节点,则清除该父菜单与用户组之间的关联关系(group/menu) * @param menuId 菜单id */ private void removeGroupMenuIfMenuEmpty(Integer menuId) { Menu menu = new Menu(); menu.setId(menuId); if (CollectionUtils.isNotEmpty(menuService.getMenu(menu))){ menu = menuService.getMenu(menu).get(0); //若菜单及其所有子菜单均无下辖的Action节点,则清除该父节点与用户组之间的关联关系(group/menu) removeGroupMenuIfSelfEmpty(menu); //清除父节点 Menu parentMenu = new Menu(); parentMenu.setId(menu.getParentId()); if (CollectionUtils.isNotEmpty(menuService.getMenu(parentMenu))){ //若父菜单及其所下辖的其他子菜单均无下辖的Action节点,则清除该父菜单与用户组之间的关联关系(group/menu) removeGroupMenuIfMenuEmpty(menuService.getMenu(parentMenu).get(0).getId()); } } } /** * 若删除该action以后,父节点菜单无其他下辖的Action节点或下辖的所有子菜单,无Action节点,则清除该父节点与用户组 * 之间的关联关系(group/menu) * @param menu Action节点所属的菜单节点 * 重难点:所有子菜单无Action节点 */ private void removeGroupMenuIfSelfEmpty(Menu menu) { //自身及所有子菜单均无Action节点 if (isAllActionListEmpty(menu)){ //删除与用户组之间的关联关系(group/menu) groupMenuService.deleteGroupMenuByMenuId(menu.getId()); } } /** * 菜单节点本身及其所下辖的所有子菜单节均无Action * @param menu 菜单节点 * @return true:无 false:有 */ private boolean isAllActionListEmpty(Menu menu) { //下辖actionList不为空 if (CollectionUtils.isNotEmpty(menu.getActionList())){ return false; } //以该菜单节点为父节点的菜单节点actionList不为空 Menu childMenu = new Menu(); childMenu.setParentId(menu.getId()); List

childMenuList = menuService.getMenu(childMenu); if (CollectionUtils.isNotEmpty(childMenuList)){ for (Menu tempMenu : childMenuList){ isAllActionListEmpty(tempMenu); } } return true; }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:四、常用工具之Guava Cache
下一篇:四、MySql+Mybatis+Druid:报sql injection violation, multi-statement not allow异常
相关文章

 发表评论

暂时没有评论,来抢沙发吧~