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;
/**
*
* 菜单管理 前端控制器
*
*
* @author hyy
* @since 2023-01-09
*/
@Service
public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService {
@Autowired
private SysMenuMapper sysMenuMapper;
@Override
public List queryByHeadId(String headId) {
QueryWrapper q = new QueryWrapper<>();
q.eq("head_id" , headId);
return sysMenuMapper.selectList(q);
}
@Override
public List findTree(String userName, int menuType) {
List sysMenus = new ArrayList<>();
List 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 SysMenus, List menus, int menuType) {
for (SysMenu SysMenu : SysMenus) {
List 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 sysMenus, SysMenu sysMenu) {
boolean exist = false;
for(SysMenu menu:sysMenus) {
if(menu.getId().equals(sysMenu.getId())) {
exist = true;
}
}
return exist;
}
}