|
|
@@ -0,0 +1,122 @@
|
|
|
+package com.jzg.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.jzg.commons.entity.po.SysMenu;
|
|
|
+import com.jzg.mapper.SysMenuMapper;
|
|
|
+import com.jzg.service.SysMenuService;
|
|
|
+import com.jzg.service.SysUserService;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
|
|
|
+ implements SysMenuService {
|
|
|
+
|
|
|
+ private final SysUserService sysUserService;
|
|
|
+
|
|
|
+ private final SysMenuMapper sysMenuMapper;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysMenu> findTree(String userName, int menuType) {
|
|
|
+ List<SysMenu> sysMenus = new ArrayList<>();
|
|
|
+
|
|
|
+ List<SysMenu> menus = findByUser(userName);
|
|
|
+ for (SysMenu menu : menus) {
|
|
|
+ if (menu.getParentId() == null || menu.getParentId().equalsIgnoreCase("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;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysMenu> findByUser(String userName) {
|
|
|
+ LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper<>();
|
|
|
+ lqw.eq(SysMenu::getDelFlag, 0);
|
|
|
+ lqw.eq(SysMenu::getSysType, 1);
|
|
|
+ return list(lqw);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<String> getAllButtons() {
|
|
|
+ LambdaQueryWrapper<SysMenu> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(SysMenu::getType,"3");
|
|
|
+ List<SysMenu> sysMenus = baseMapper.selectList(lambdaQueryWrapper);
|
|
|
+ List<String> perms = new ArrayList<>();
|
|
|
+ sysMenus.forEach(item->{
|
|
|
+ perms.add(item.getPerms());
|
|
|
+ });
|
|
|
+ return perms;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addParentMenu(List<SysMenu> menus) {
|
|
|
+ List<String> menuIds = menus.stream().map(SysMenu::getId).collect(Collectors.toList()); //menuIds
|
|
|
+ for (String menuId : menuIds) {
|
|
|
+ this.addParentId(menuId,menuIds,menus);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addParentId(String menuId, List<String> menuIds, List<SysMenu> menus) {
|
|
|
+ SysMenu sysMenu = baseMapper.selectById(menuId);
|
|
|
+ if(ObjectUtils.isNotEmpty(sysMenu)){
|
|
|
+ if( !menuIds.contains(sysMenu.getParentId())){
|
|
|
+ menus.add(sysMenu);
|
|
|
+ this.addParentId(sysMenu.getParentId(),menuIds,menus);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|