diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java index 6d3f06c1..37a65a2b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java @@ -16,7 +16,9 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author Zheng Jie @@ -90,14 +92,10 @@ public class MenuController { @PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_DELETE')") public ResponseEntity delete(@PathVariable Long id){ List menuList = menuService.findByPid(id); - - // 特殊情况,对级联删除进行处理 - for (Menu menu : menuList) { - roleService.untiedMenu(menu); - menuService.delete(menu.getId()); - } - roleService.untiedMenu(menuService.findOne(id)); - menuService.delete(id); + Set menuSet = new HashSet<>(); + menuSet.add(menuService.findOne(id)); + menuSet = menuService.getDeleteMenus(menuList, menuSet); + menuService.delete(menuSet); return new ResponseEntity(HttpStatus.OK); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java index 057b3755..17eb8205 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java @@ -9,6 +9,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author Zheng Jie @@ -49,11 +50,12 @@ public interface MenuService { void update(Menu resources); /** - * delete - * @param id + * getDeleteMenus + * @param menuList + * @param menuSet + * @return */ - @CacheEvict(allEntries = true) - void delete(Long id); + Set getDeleteMenus(List menuList, Set menuSet); /** * permission tree @@ -92,4 +94,11 @@ public interface MenuService { Object buildMenus(List byRoles); Menu findOne(Long id); + + /** + * delete + * @param menuSet + */ + @CacheEvict(allEntries = true) + void delete(Set menuSet); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java index f997d5a9..01f28eac 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java @@ -10,6 +10,7 @@ import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.EntityExistException; import me.zhengjie.modules.system.repository.MenuRepository; import me.zhengjie.modules.system.service.MenuService; +import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.dto.MenuDTO; import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDTO; @@ -34,6 +35,9 @@ public class MenuServiceImpl implements MenuService { @Autowired private MenuMapper menuMapper; + @Autowired + private RoleService roleService; + @Override public List queryAll(MenuQueryCriteria criteria){ return menuMapper.toDto(menuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); @@ -114,8 +118,25 @@ public class MenuServiceImpl implements MenuService { } @Override - public void delete(Long id) { - menuRepository.deleteById(id); + public Set getDeleteMenus(List menuList, Set menuSet) { + // 递归找出待删除的菜单 + for (Menu menu1 : menuList) { + menuSet.add(menu1); + List menus = menuRepository.findByPid(menu1.getId()); + if(menus!=null && menus.size()!=0){ + getDeleteMenus(menus, menuSet); + } + } + return menuSet; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Set menuSet) { + for (Menu menu : menuSet) { + roleService.untiedMenu(menu); + menuRepository.deleteById(menu.getId()); + } } @Override diff --git a/sql/eladmin.sql b/sql/eladmin.sql index fb7a4a39..2fb7431b 100644 --- a/sql/eladmin.sql +++ b/sql/eladmin.sql @@ -241,7 +241,7 @@ INSERT INTO `menu` VALUES (23, '2019-01-04 16:23:57', b'0', '二级菜单2', 'ne INSERT INTO `menu` VALUES (24, '2019-01-04 16:24:48', b'0', '三级菜单1', 'nested/menu1/menu1-1', 22, 999, 'menu', 'menu1-1', b'0', b'0', NULL); INSERT INTO `menu` VALUES (27, '2019-01-07 17:27:32', b'0', '三级菜单2', 'nested/menu1/menu1-2', 22, 999, 'menu', 'menu1-2', b'0', b'0', NULL); INSERT INTO `menu` VALUES (28, '2019-01-07 20:34:40', b'0', '定时任务', 'system/timing/index', 36, 21, 'timing', 'timing', b'0', b'0', 'Timing'); -INSERT INTO `menu` VALUES (30, '2019-01-11 15:45:55', b'0', '代码生成', 'generator/index', 36, 22, 'dev', 'generator', b'0', b'0', 'Generator'); +INSERT INTO `menu` VALUES (30, '2019-01-11 15:45:55', b'0', '代码生成', 'generator/index', 36, 22, 'dev', 'generator', b'0', b'0', 'GeneratorIndex'); INSERT INTO `menu` VALUES (32, '2019-01-13 13:49:03', b'0', '异常日志', 'monitor/log/errorLog', 6, 12, 'error', 'errorLog', b'0', b'0', 'ErrorLog'); INSERT INTO `menu` VALUES (33, '2019-03-08 13:46:44', b'0', 'Markdown', 'components/MarkDown', 10, 53, 'markdown', 'markdown', b'0', b'0', 'Markdown'); INSERT INTO `menu` VALUES (34, '2019-03-08 15:49:40', b'0', 'Yaml编辑器', 'components/YamlEdit', 10, 54, 'dev', 'yaml', b'0', b'0', 'YamlEdit');