package com.xjrsoft.module.system.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.github.yulichang.toolkit.MPJWrappers;
import com.xjrsoft.common.constant.GlobalConstant;
import com.xjrsoft.common.enums.AuthorizeType;
import com.xjrsoft.common.enums.EnabledMark;
import com.xjrsoft.common.utils.VoToColumnUtil;
import com.xjrsoft.module.organization.entity.UserRoleRelation;
import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper;
import com.xjrsoft.module.system.dto.MenuTreeDto;
import com.xjrsoft.module.system.dto.RoleMenuServeListDto;
import com.xjrsoft.module.system.entity.Authorize;
import com.xjrsoft.module.system.entity.Menu;
import com.xjrsoft.module.system.entity.Subsystem;
import com.xjrsoft.module.system.entity.XjrMenuQuick;
import com.xjrsoft.module.system.mapper.AuthorizeMapper;
import com.xjrsoft.module.system.mapper.MenuMapper;
import com.xjrsoft.module.system.mapper.XjrMenuDeptRelationMapper;
import com.xjrsoft.module.system.mapper.XjrMenuQuickMapper;
import com.xjrsoft.module.system.service.IMenuService;
import com.xjrsoft.module.system.vo.*;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
*
* 用户 服务实现类
*
*
* @author tzx
* @since 2022-03-16
*/
@Service
@AllArgsConstructor
public class MenuServiceImpl extends MPJBaseServiceImpl implements IMenuService {
private final UserRoleRelationMapper userRoleRelationMapper;
private final AuthorizeMapper authorizeMapper;
private final XjrMenuQuickMapper menuQuickMapper;
private final XjrMenuDeptRelationMapper menuDeptRelationMapper;
@Override
public List getAuthMenuList(MenuTreeDto dto) {
List roleIds = getUserRoleIds();
return getAuthMenuByRoleIds(roleIds, dto);
}
/**
* 查询用户菜单服务
*/
@Override
public List getAuthMenuServe(MenuTreeDto dto) {
List menuVos = getAuthMenuList(dto);
return getSubMenu(menuVos);
}
/*
获取所有菜单 标记 accessibility
*/
@Override
public List getAuthAllMenuServe(MenuTreeDto dto) {
List roleIdList = new ArrayList<>();
roleIdList.add(1L);
List roleMenuList = getSubMenu(getAuthMenuByRoleIds(roleIdList, dto));
List allMenuList = getSubMenu(getAuthMenuList(dto));
Map allMenuMap = allMenuList.stream()
.collect(Collectors.toMap(MenuServeVo::getId, Function.identity()));
List result = roleMenuList.stream()
.map(menu -> convertToMenuAllServeVo(menu, allMenuMap))
.collect(Collectors.toList());
return result;
}
private MenuAllServeVo convertToMenuAllServeVo(MenuServeVo menu, Map allMenuMap) {
MenuAllServeVo menuAllServeVo = new MenuAllServeVo();
menuAllServeVo.setId(menu.getId());
menuAllServeVo.setName(menu.getName());
menuAllServeVo.setMenuVoList(menu.getMenuVoList());
menuAllServeVo.setAccessibility(allMenuMap.containsKey(menu.getId()) ? 1 : 0);
return menuAllServeVo;
}
/**
* 查询角色菜单服务
*/
@Override
public List getRoleMenuServe(RoleMenuServeListDto dto) {
// 获取角色菜单
List menuVos = getAuthMenuByRoleIds(new ArrayList() {{
add(dto.getRoleId());
}}, new MenuTreeDto() {{
setSystemType(dto.getSystemType());
}});
List result = getSubMenu(menuVos);
// 获取角色快捷菜单
List menuQuicks = menuQuickMapper.selectList(Wrappers.lambdaQuery(XjrMenuQuick.class).eq(XjrMenuQuick::getRoleId, dto.getRoleId()));
// 处理数据是否被选中
result.forEach((node) -> {
node.getMenuVoList().forEach((menu) -> {
menuQuicks.stream().filter(x -> x.getMenuId().equals(menu.getId()))
.findAny()
.ifPresent(present -> {
menu.setIsSelect(true);
});
});
});
return result;
}
/**
* 获取用户快捷菜单
*
* @return
*/
@Override
public List