package org.jeecg.modules.arj.service.impl;
|
|
import org.jeecg.modules.arj.entity.SysMenu;
|
import org.jeecg.modules.arj.service.SysMenuService;
|
import org.jeecg.modules.arj.mapper.SysMenuMapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import org.springframework.stereotype.Service;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
/**
|
* <p>
|
* 菜单管理 前端控制器
|
* </p>
|
*
|
* @author hyy
|
* @since 2023-01-09
|
*/
|
@Service
|
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
|
|
@Autowired
|
private SysMenuMapper sysMenuMapper;
|
|
@Override
|
public List<SysMenu> queryByHeadId(String headId) {
|
QueryWrapper<SysMenu> q = new QueryWrapper<>();
|
q.eq("head_id" , headId);
|
|
return sysMenuMapper.selectList(q);
|
|
}
|
|
@Override
|
public List<SysMenu> findTree(String userName, int menuType) {
|
List<SysMenu> sysMenus = new ArrayList<>();
|
List<SysMenu> menus = sysMenuMapper.selectList(null);
|
for (SysMenu menu : menus) {
|
if (menu.getParentId() == null || menu.getParentId() == 0) {
|
menu.setLevel(0);
|
if (!exists(sysMenus, menu)) {
|
sysMenus.add(menu);
|
}
|
}
|
}
|
sysMenus.sort((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()));
|
findChildren(sysMenus, menus, menuType);
|
return sysMenus;
|
}
|
|
|
|
private void findChildren(List<SysMenu> SysMenus, List<SysMenu> menus, int menuType) {
|
for (SysMenu SysMenu : SysMenus) {
|
List<SysMenu> children = new ArrayList<>();
|
for (SysMenu menu : menus) {
|
if (menuType == 1 && menu.getType() == 2) {
|
// 如果是获取类型不需要按钮,且菜单类型是按钮的,直接过滤掉
|
continue;
|
}
|
if (SysMenu.getId() != null && SysMenu.getId().equals(menu.getParentId())) {
|
menu.setParentName(SysMenu.getName());
|
menu.setLevel(SysMenu.getLevel() + 1);
|
if (!exists(children, menu)) {
|
children.add(menu);
|
}
|
}
|
}
|
SysMenu.setChildren(children);
|
children.sort((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()));
|
findChildren(children, menus, menuType);
|
}
|
}
|
private boolean exists(List<SysMenu> sysMenus, SysMenu sysMenu) {
|
boolean exist = false;
|
for(SysMenu menu:sysMenus) {
|
if(menu.getId().equals(sysMenu.getId())) {
|
exist = true;
|
}
|
}
|
return exist;
|
}
|
|
}
|