package com.gkhy.labRiskManage.application.account.service.impl; import com.gkhy.labRiskManage.application.account.service.AccountMenuAppService; import com.gkhy.labRiskManage.application.sysAdmin.convert.MenuItemAppConvert; import com.gkhy.labRiskManage.application.sysAdmin.model.dto.resp.MenuItemAppDTO; import com.gkhy.labRiskManage.application.sysAdmin.service.MenuAppService; import com.gkhy.labRiskManage.commons.domain.SearchResult; import com.gkhy.labRiskManage.commons.enums.ResultCode; import com.gkhy.labRiskManage.domain.account.model.dto.SysUserRoleBindDomainDTO; import com.gkhy.labRiskManage.domain.account.model.dto.UserInfoDomainDTO; import com.gkhy.labRiskManage.domain.account.service.RoleMenuDomainService; import com.gkhy.labRiskManage.domain.account.service.UserDomainService; import com.gkhy.labRiskManage.domain.sysAdmin.model.dto.MenuItemDomainDTO; import com.gkhy.labRiskManage.domain.sysAdmin.service.MenuDomainService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service public class AccountMenuAppServiceImpl implements AccountMenuAppService { @Autowired private UserDomainService userDomainService; @Autowired private MenuDomainService menuDomainService; @Autowired private RoleMenuDomainService roleMenuDomainService; @Autowired private MenuItemAppConvert menuItemAppConvert; //@Override /*public SearchResult findAllMenuItemByUserId1(Long userId) { SearchResult result = new SearchResult<>(); UserInfoDomainDTO userInfo = userDomainService.getUserInfoById(userId); if(userInfo == null){ result.setCode(ResultCode.BUSINESS_ERROR_ACCOUNT_NOT_EXIST); result.setMsg("用户不存在"); return result; } if(userInfo.getRoles() == null || userInfo.getRoles().size() == 0){ result.setCode(ResultCode.BUSINESS_ERROR_NOT_ALLOWED); result.setMsg("用户未绑定角色"); return result; } //获取用户角色id List roleIds = userInfo.getRoles().stream().map(SysUserRoleBindDomainDTO::getRoleId).collect(Collectors.toList()); List menuList = roleMenuDomainService.getMenuInfoByRole(roleIds); List appDTOList = menuItemAppConvert.toAppDtoList(menuList); if(appDTOList != null && !appDTOList.isEmpty()){ result.setData(appDTOList); result.setCount(appDTOList.size()); } result.setSuccess(); return result; }*/ @Override public SearchResult findAllMenuItemByUserId(Long userId) { SearchResult result = new SearchResult<>(); UserInfoDomainDTO userInfo = userDomainService.getUserInfoById(userId); if(userInfo == null){ result.setCode(ResultCode.BUSINESS_ERROR_ACCOUNT_NOT_EXIST); result.setMsg("用户不存在"); return result; } //获取用户角色 List roles = userInfo.getRoles(); if(roles == null || roles.size() == 0){ result.setCode(ResultCode.BUSINESS_ERROR_NOT_ALLOWED); result.setMsg("用户未绑定角色"); return result; } Boolean flag = false; for(SysUserRoleBindDomainDTO role : roles){ if ("超级管理员".equals(role.getRoleName()) || "管理员".equals(role.getRoleName())){ flag = true; } } List menuList = new ArrayList<>(); if(flag){ //管理员 menuList = menuDomainService.getAllActiveMenuItems(); }else { //非管理员 //获取用户角色id List roleIds = roles.stream().map(SysUserRoleBindDomainDTO::getRoleId).collect(Collectors.toList()); menuList = roleMenuDomainService.getMenuInfoByRole(roleIds); } List appDTOList = convertToMenuItemAppDtos(menuList); if(appDTOList != null && !appDTOList.isEmpty()){ result.setData(appDTOList); result.setCount(appDTOList.size()); } result.setSuccess(); return result; } private List convertToMenuItemAppDtos(List orignList){ if(orignList == null || orignList.isEmpty()) return null; List targetList = new ArrayList<>(); orignList.forEach(o -> { MenuItemAppDTO appDTO = menuItemAppConvert.toAppDto(o); List bindRoles = roleMenuDomainService.getBindRolesByMenuItemId(o.getId()); appDTO.setRoles(bindRoles); if(o.getSubMenuItemList() != null && !o.getSubMenuItemList().isEmpty()){ appDTO.setSubMenuItemList(convertToMenuItemAppDtos(o.getSubMenuItemList())); } targetList.add(appDTO); }); return targetList; } }