mirror of https://github.com/elunez/eladmin
				
				
				
			修复3级菜单删除不了的BUG
							parent
							
								
									2371fab065
								
							
						
					
					
						commit
						3595f182d1
					
				| 
						 | 
				
			
			@ -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<Menu> menuList = menuService.findByPid(id);
 | 
			
		||||
 | 
			
		||||
        // 特殊情况,对级联删除进行处理
 | 
			
		||||
        for (Menu menu : menuList) {
 | 
			
		||||
            roleService.untiedMenu(menu);
 | 
			
		||||
            menuService.delete(menu.getId());
 | 
			
		||||
        }
 | 
			
		||||
        roleService.untiedMenu(menuService.findOne(id));
 | 
			
		||||
        menuService.delete(id);
 | 
			
		||||
        Set<Menu> menuSet = new HashSet<>();
 | 
			
		||||
        menuSet.add(menuService.findOne(id));
 | 
			
		||||
        menuSet = menuService.getDeleteMenus(menuList, menuSet);
 | 
			
		||||
        menuService.delete(menuSet);
 | 
			
		||||
        return new ResponseEntity(HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<Menu> getDeleteMenus(List<Menu> menuList, Set<Menu> menuSet);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * permission tree
 | 
			
		||||
| 
						 | 
				
			
			@ -92,4 +94,11 @@ public interface MenuService {
 | 
			
		|||
    Object buildMenus(List<MenuDTO> byRoles);
 | 
			
		||||
 | 
			
		||||
    Menu findOne(Long id);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * delete
 | 
			
		||||
     * @param menuSet
 | 
			
		||||
     */
 | 
			
		||||
    @CacheEvict(allEntries = true)
 | 
			
		||||
    void delete(Set<Menu> menuSet);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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<Menu> getDeleteMenus(List<Menu> menuList, Set<Menu> menuSet) {
 | 
			
		||||
        // 递归找出待删除的菜单
 | 
			
		||||
        for (Menu menu1 : menuList) {
 | 
			
		||||
            menuSet.add(menu1);
 | 
			
		||||
            List<Menu> 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<Menu> menuSet) {
 | 
			
		||||
        for (Menu menu : menuSet) {
 | 
			
		||||
            roleService.untiedMenu(menu);
 | 
			
		||||
            menuRepository.deleteById(menu.getId());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue