xuhy
2026-03-05 7ab8a97b549937727833e254b3092282265326bf
运维角色返回
7个文件已修改
137 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpOperationsRoleMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysPermissionService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysRoleService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysLoginService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysPermissionServiceImpl.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysRoleServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsRoleMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpOperationsRoleMapper.java
@@ -38,4 +38,12 @@
            @Param("phoneNumber") String phoneNumber,
            @Param("roleId") Long roleId
    );
    /**
     * 根据用户ID查询用户及角色信息
     *
     * @param userId 用户ID
     * @return 用户及角色信息列表
     */
    List<XpOperationsRole> selectSysUserRoleByOperationUserId(@Param("userId")Long userId);
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysPermissionService.java
@@ -1,6 +1,7 @@
package com.xiaopeng.account.service;
import com.xiaopeng.api.model.account.SysUser;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.model.operation.SysMenu;
import java.util.List;
@@ -20,6 +21,12 @@
     * @return 角色权限信息
     */
    Set<String> getRolePermission(SysUser user);
    /**
     * 获取运维角色数据权限
     *
     * @return 角色权限信息
     */
    Set<String> getRolePermission(XpOperationsUser user);
    /**
     * 获取菜单数据权限
@@ -27,4 +34,10 @@
     * @return 菜单权限信息
     */
    Set<String> getMenuPermission(SysUser user);
    /**
     * 获取运维菜单数据权限
     *
     * @return 菜单权限信息
     */
    Set<String> getMenuPermission(XpOperationsUser user);
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysRoleService.java
@@ -9,6 +9,7 @@
import com.xiaopeng.api.model.account.SysRole;
import com.xiaopeng.common.core.web.page.PageInfo;
import java.util.Collection;
import java.util.Set;
/**
@@ -90,4 +91,11 @@
     * @return
     */
    Boolean checkMenuExistRole(Long menuId);
    /**
     * 根据操作用户ID查询权限
     * @param id
     * @return
     */
    Set<String> selectRolePermissionByOperationUserId(Long id);
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysLoginService.java
@@ -166,6 +166,13 @@
        }
        passwordService.validateOperationsUser(operationsUser, password, request);
        loginOperationUser.setXpOperationsUser(operationsUser);
        // 查询用户角色
        // 角色集合
        Set<String> roles = permissionService.getRolePermission(operationsUser);
        // 权限集合
        Set<String> menuPermission = permissionService.getMenuPermission(operationsUser);
        loginOperationUser.setRoles(roles);
        loginOperationUser.setPermissions(menuPermission);
        //更新用户登录设备类型
        operationsUser.setDeviceType(deviceType);
        operationsUserService.updateById(operationsUser);
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysPermissionServiceImpl.java
@@ -6,19 +6,21 @@
import java.util.Set;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xiaopeng.account.mapper.XpOperationsRoleMapper;
import com.xiaopeng.account.service.ISysGroupMenuService;
import com.xiaopeng.account.service.ISysPermissionService;
import com.xiaopeng.account.service.ISysRoleService;
import com.xiaopeng.account.service.ISysUserRoleService;
import com.xiaopeng.api.feignClient.operation.SysMenuClient;
import com.xiaopeng.api.model.account.SysUser;
import com.xiaopeng.api.model.account.SysUserRole;
import com.xiaopeng.api.model.account.*;
import com.xiaopeng.api.model.operation.SysMenu;
import com.xiaopeng.common.core.domain.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
/**
 * 用户权限处理
@@ -41,7 +43,8 @@
    @Autowired
    private SysMenuClient sysMenuClient;
    @Autowired
    private XpOperationsRoleMapper xpOperationsRoleMapper;
    /**
     * 获取角色数据权限
     *
@@ -61,6 +64,14 @@
        {
            roles.addAll(roleService.selectRolePermissionByUserId(user.getId()));
        }
        return roles;
    }
    @Override
    public Set<String> getRolePermission(XpOperationsUser user) {
        Set<String> roles = new HashSet<String>();
        // 管理员拥有所有权限
        roles.addAll(roleService.selectRolePermissionByOperationUserId(user.getId()));
        return roles;
    }
@@ -121,4 +132,48 @@
        return perms;
    }
    @Override
    public Set<String> getMenuPermission(XpOperationsUser user) {
        Set<String> perms = new HashSet<>();
        try {
            // 1. 根据 userId 查询 sys_user_role 获取 roleId
            List<XpOperationsRole> xpOperationsRoles = xpOperationsRoleMapper.selectSysUserRoleByOperationUserId(user.getId());
            if (CollectionUtils.isEmpty(xpOperationsRoles)) {
                log.warn("用户[{}]未分配角色", user.getId());
                return perms;
            }
            List<Long> roleIds = xpOperationsRoles.stream().map(XpOperationsRole::getRoleId).collect(Collectors.toList());
            // 2. 根据 roleId 查询 sys_role 获取 groupId
            List<SysRole> sysRoles = roleService.list(Wrappers.lambdaQuery(SysRole.class)
                    .in(SysRole::getId, roleIds));
            List<Long> groupIds = sysRoles.stream().map(SysRole::getGroupId).collect(Collectors.toList());
            if (CollectionUtils.isEmpty(groupIds)) {
                log.warn("角色[{}]未关联权限组", groupIds);
                return perms;
            }
            // 3. 根据 groupId 查询 sys_group_menu 获取 menuId 列表
            List<SysGroupMenu> sysGroupMenus = groupMenuService.list(Wrappers.lambdaQuery(SysGroupMenu.class)
                    .in(SysGroupMenu::getGroupId, groupIds));
            List<Long> menuIds = sysGroupMenus.stream().map(SysGroupMenu::getMenuId).collect(Collectors.toList());
            if (CollectionUtils.isEmpty(menuIds)) {
                log.warn("权限组[{}]未配置菜单权限", menuIds);
                return perms;
            }
            // 4. 通过 Feign 调用 operation 服务,根据 menuId 列表获取菜单列表
            R<List<SysMenu>> result = sysMenuClient.getMenusByMenuIds(menuIds);
            if (R.isSuccess(result) && result.getData() != null) {
                perms = result.getData().stream().map(item -> item.getId().toString()).collect(Collectors.toSet());
            } else {
                log.error("调用菜单服务获取菜单列表失败: {}", result != null ? result.getMsg() : "返回结果为空");
            }
        } catch (Exception e) {
            log.error("获取用户[{}]菜单权限异常", user.getId(), e);
        }
        return perms;
    }
}
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysRoleServiceImpl.java
@@ -2,10 +2,12 @@
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.account.constant.I18nKeyConstant;
import com.xiaopeng.account.mapper.SysRoleMapper;
import com.xiaopeng.account.mapper.SysRoleMenuMapper;
import com.xiaopeng.account.mapper.XpOperationsRoleMapper;
import com.xiaopeng.account.model.dto.SysRoleAddDTO;
import com.xiaopeng.account.model.dto.SysRoleEditDTO;
import com.xiaopeng.account.model.query.SysRolePageQuery;
@@ -18,6 +20,7 @@
import com.xiaopeng.api.feignClient.operation.SysMenuClient;
import com.xiaopeng.api.model.account.SysRole;
import com.xiaopeng.api.model.account.SysUserRole;
import com.xiaopeng.api.model.account.XpOperationsRole;
import com.xiaopeng.api.model.operation.SysMenu;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.exception.ServiceException;
@@ -53,6 +56,7 @@
    private final SysMenuClient sysMenuClient;
    private final SysRoleMenuMapper sysRoleMenuMapper;
    private final XpOperationsRoleMapper xpOperationsRoleMapper;
    /**
     * 根据角色ID查询权限组ID
@@ -342,4 +346,32 @@
    public Boolean checkMenuExistRole(Long menuId) {
        return sysRoleMenuMapper.checkMenuExistRole(menuId) > 0;
    }
    @Override
    public Set<String> selectRolePermissionByOperationUserId(Long userId) {
        Set<String> roles = new HashSet<>();
        if (userId == null) {
            return roles;
        }
        // 查询用户关联的角色
        List<XpOperationsRole> xpOperationsRoles = xpOperationsRoleMapper.selectSysUserRoleByOperationUserId(userId);
        if (CollectionUtils.isEmpty(xpOperationsRoles)) {
            return roles;
        }
        // 查询角色信息
        List<Long> roleIds = xpOperationsRoles.stream().map(XpOperationsRole::getRoleId).collect(Collectors.toList());
        List<SysRole> roleList= this.list(Wrappers.lambdaQuery(SysRole.class)
                .in(SysRole::getId, roleIds));
        if (!CollectionUtils.isEmpty(roleList)) {
            roleList.forEach(role -> {
                if (role != null) {
                    roles.add(role.getRoleName());
                }
            });
        }
        return roles;
    }
}
xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsRoleMapper.xml
@@ -42,5 +42,13 @@
            AND r.id = #{roleId}
        </if>
    </select>
    <select id="selectSysUserRoleByOperationUserId"
            resultType="com.xiaopeng.api.model.account.XpOperationsRole">
        SELECT
            ur.operations_user_id AS operationsUserId,
            ur.role_id AS roleId
        FROM xp_operations_role ur
        WHERE ur.operations_user_id = #{operationsUserId}
    </select>
</mapper>