洞察探讨小游戏SDK接入的最佳实践以及对企业跨平台开发的优势
624
2022-11-25
二、删除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
发表评论
暂时没有评论,来抢沙发吧~