From 8dfdb343364a6d8f87f8095a3fd899f6541c8be3 Mon Sep 17 00:00:00 2001
From: yyy <1083599556@qq.com>
Date: 星期五, 17 四月 2026 21:54:09 +0800
Subject: [PATCH] 1.根据权限组判断手机号是否脱敏

---
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/config/serializer/MobileSerializer.java                       |   31 +++++++
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java                                     |    3 
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpPolicyApplicationServiceImpl.java |   16 +++
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/SysGroup.java                                                |    2 
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java                 |   37 ++++++--
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java                     |    5 +
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupController.java                            |    7 +
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java                                |   12 +++
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java                         |   39 +++++++++
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java             |   11 ++
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java                    |    5 
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/SysGroupMapper.java                                    |    3 
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java                         |    9 ++
 xp-robotaxi-account-boot/src/main/resources/mapper/account/SysGroupMapper.xml                                             |    8 ++
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysGroupService.java                                 |    4 +
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysUserServiceImpl.java                          |   10 ++
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java              |   14 +-
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpQualificationAuditServiceImpl.java             |   10 +-
 18 files changed, 193 insertions(+), 33 deletions(-)

diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/config/serializer/MobileSerializer.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/config/serializer/MobileSerializer.java
new file mode 100644
index 0000000..2a8e812
--- /dev/null
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/config/serializer/MobileSerializer.java
@@ -0,0 +1,31 @@
+package com.xiaopeng.account.config.serializer;
+
+import cn.hutool.core.util.DesensitizedUtil;
+import cn.hutool.core.util.StrUtil;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.xiaopeng.account.service.ISysGroupService;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+
+
+public class MobileSerializer extends JsonSerializer<String> {
+
+    @Resource
+    private ISysGroupService sysGroupService;
+
+    @Override
+    public void serialize(String mobile, JsonGenerator jsonGenerator, SerializerProvider serializers) throws IOException {
+        // 检查手机号是否为null或者是否是有效的手机号
+        if (StrUtil.isNotBlank( mobile)) {
+            // 调用脱敏工具类对手机号进行脱敏处理
+            boolean phoneDesensitization = sysGroupService.getPhoneDesensitization();
+            if(phoneDesensitization){
+                mobile = DesensitizedUtil.mobilePhone(mobile);
+            }
+        }
+        jsonGenerator.writeString(mobile);
+    }
+}
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupController.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupController.java
index 9dcf54e..f891362 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupController.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/SysGroupController.java
@@ -76,4 +76,11 @@
         sysGroupService.deleteById(id);
         return R.ok();
     }
+
+    @GetMapping("/logan/inner/group/getPhoneDesensitization")
+    public R<String> getXpOperationsRoleByRoleId(@RequestParam String phoneNumber) {
+        return R.ok(sysGroupService.getPhoneDesensitization(phoneNumber));
+    }
+
+
 }
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
index 6a6f529..d33279f 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
@@ -2,6 +2,7 @@
 
 
 import com.alibaba.fastjson2.JSONObject;
+import com.xiaopeng.account.constant.I18nKeyConstant;
 import com.xiaopeng.account.mapper.XpOperationsRoleMapper;
 import com.xiaopeng.account.model.dto.EnableDisableDTO;
 import com.xiaopeng.account.model.dto.RePasswordDTO;
@@ -17,11 +18,10 @@
 import com.xiaopeng.api.vo.account.XpOperationsUserProfileVO;
 import com.xiaopeng.api.vo.account.XpOperationsUserVO;
 import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO;
-import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.web.page.PageInfo;
 import com.xiaopeng.common.security.service.TokenService;
-import com.xiaopeng.account.constant.I18nKeyConstant;
 import com.xiaopeng.evi.oss.service.AliOssService;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -81,7 +81,6 @@
 
     /**
      * 根据ID查询运维用户信息
-     *
      * @return 用户列表
      */
     @GetMapping("/logan/inner/xpOperationsUser/queryById")
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/SysGroupMapper.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/SysGroupMapper.java
index 9261e5f..611fbfb 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/SysGroupMapper.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/SysGroupMapper.java
@@ -36,4 +36,7 @@
      * @return 用户列表
      */
     Page<GroupUserVO> queryUserPageList(PageInfo<GroupUserVO> pageInfo, @Param("query") GroupUserPageQuery query);
+
+    int getPhoneDesensitization(Long userId);
+
 }
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysGroupService.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysGroupService.java
index 5da3516..afbc013 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysGroupService.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/ISysGroupService.java
@@ -73,4 +73,8 @@
      * @param id
      */
     void deleteById(Long id);
+
+    String getPhoneDesensitization(String phoneNumber);
+
+    boolean getPhoneDesensitization();
 }
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java
index 0decc24..f21b1de 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpOperationsUserService.java
@@ -17,6 +17,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -28,6 +29,14 @@
  * @since 2026-02-03
  */
 public interface IXpOperationsUserService extends IService<XpOperationsUser> {
+
+    /**
+     * 根据ID查询运维人员信息
+     * @param userId
+     * @return
+    XpOperationsUser getById(Serializable userId);
+     */
+
     /**
      * 根据名称查询运维用户
      * @param nickName 名称
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java
index ee2562c..2cae582 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysGroupServiceImpl.java
@@ -1,6 +1,7 @@
 package com.xiaopeng.account.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.DesensitizedUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -20,12 +21,13 @@
 import com.xiaopeng.api.feignClient.operation.SysMenuClient;
 import com.xiaopeng.api.model.account.SysGroup;
 import com.xiaopeng.api.model.account.SysRole;
+import com.xiaopeng.api.model.account.SysUser;
 import com.xiaopeng.api.model.operation.SysMenu;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.web.page.PageInfo;
-import com.xiaopeng.common.security.utils.SecurityUtils;
+import com.xiaopeng.common.security.service.TokenService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
@@ -36,6 +38,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -54,8 +57,11 @@
 
     private final ISysGroupMenuService groupMenuService;
 
+    @Resource
     private final SysMenuClient sysMenuClient;
     private final ISysRoleService sysRoleService;
+    @Resource
+    private TokenService tokenService;
 
     /**
      * 新增权限组
@@ -314,4 +320,35 @@
         }
         removeById(id);
     }
+
+
+    @Override
+    public String getPhoneDesensitization(String phoneNumber){
+        boolean b = getPhoneDesensitization();
+        if(b){
+            return DesensitizedUtil.mobilePhone(phoneNumber);
+        }
+        return phoneNumber;
+    }
+
+    /**
+     * 获取登录用户的权限组,获取权限组的手机号是否脱敏的字段
+     * true 需要脱敏,false 否
+     * @return
+     */
+    @Override
+    public boolean getPhoneDesensitization(){
+        try {
+            SysUser sysUser = tokenService.getLoginUser().getSysUser();
+            //用户查询角色 角色查询 权限组
+            int count = baseMapper.getPhoneDesensitization(sysUser.getId());
+            return count > 0;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+
+
+
 }
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysUserServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysUserServiceImpl.java
index 3cef6a2..8b7b584 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysUserServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysUserServiceImpl.java
@@ -6,6 +6,7 @@
 import com.xiaopeng.account.mapper.SysUserMapper;
 import com.xiaopeng.account.mapper.SysUserRoleMapper;
 import com.xiaopeng.account.model.query.SysUserListQuery;
+import com.xiaopeng.account.service.ISysGroupService;
 import com.xiaopeng.account.service.ISysUserService;
 import com.xiaopeng.api.model.account.SysUser;
 import com.xiaopeng.api.model.account.SysUserRole;
@@ -18,6 +19,7 @@
 import org.apache.shardingsphere.transaction.core.TransactionType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -42,6 +44,8 @@
 	
 	@Resource
 	private TokenService tokenService;
+	@Autowired
+	private ISysGroupService sysGroupService;
 
 
 	/**
@@ -263,7 +267,11 @@
 
     @Override
     public PageInfo<SysUser> getList(PageInfo<SysUser> pageInfo, SysUserListQuery sysUserListQuery) {
-        return userMapper.getList(pageInfo, sysUserListQuery);
+		PageInfo<SysUser> page = userMapper.getList(pageInfo, sysUserListQuery);
+		for (SysUser user : page.getRecords()) {
+			user.setPhoneNumber(sysGroupService.getPhoneDesensitization(user.getPhoneNumber()));
+		}
+		return page;
     }
 
 	@Override
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
index ad58deb..3705a1d 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.XpOperationsRoleMapper;
@@ -17,16 +18,15 @@
 import com.xiaopeng.account.model.dto.XpOperationsUserDTO;
 import com.xiaopeng.account.model.query.XpOperationsUserPageQuery;
 import com.xiaopeng.account.model.query.XpOperationsUserQuery;
-import com.xiaopeng.account.service.ISysRoleService;
-import com.xiaopeng.account.service.IXpOperationsRoleService;
-import com.xiaopeng.account.service.IXpOperationsUserService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.xiaopeng.account.service.IXpQualificationAuditService;
+import com.xiaopeng.account.service.*;
 import com.xiaopeng.account.util.AliOssDownloadUtil;
 import com.xiaopeng.api.feignClient.maintenance.XpClockInClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient;
-import com.xiaopeng.api.model.account.*;
+import com.xiaopeng.api.model.account.SysRole;
+import com.xiaopeng.api.model.account.XpOperationsRole;
+import com.xiaopeng.api.model.account.XpOperationsUser;
+import com.xiaopeng.api.model.account.XpQualificationAudit;
 import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
 import com.xiaopeng.api.vo.account.*;
 import com.xiaopeng.common.core.domain.R;
@@ -46,10 +46,8 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -92,19 +90,36 @@
     private AliOssService aliOssService;
     @Autowired
     private AliOssDownloadUtil aliOssDownloadUtil;
+    @Autowired
+    private  ISysGroupService sysGroupService;
+
+    @Override
+    public XpOperationsUser getById(Serializable userId){
+        XpOperationsUser user = baseMapper.selectById(userId);
+        //获取登录用户权限信息
+        user.setPhoneNumber(sysGroupService.getPhoneDesensitization(user.getPhoneNumber()));
+        return user;
+    }
 
     @Override
     public List<XpOperationsUser> listByName(String nickName) {
         if (StringUtils.isBlank(nickName)) {
             return Collections.emptyList();
         }
-        return lambdaQuery().like(XpOperationsUser::getNickName, nickName).list();
+        List<XpOperationsUser> list = lambdaQuery().like(XpOperationsUser::getNickName, nickName).list();
+        for (XpOperationsUser obj : list) {
+            obj.setPhoneNumber(sysGroupService.getPhoneDesensitization(obj.getPhoneNumber()));
+        }
+        return list;
     }
 
     @Override
     public PageInfo<XpOperationsUserWithRoleVO> selectUserPageByConditions(XpOperationsUserPageQuery query) {
         PageInfo<XpOperationsUserWithRoleVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         Page<XpOperationsUserWithRoleVO> page = baseMapper.selectUserPageByConditions(pageInfo, query);
+        for (XpOperationsUserWithRoleVO record : page.getRecords()) {
+            record.setPhoneNumber(sysGroupService.getPhoneDesensitization(record.getPhoneNumber()));
+        }
         pageInfo.setRecords(page.getRecords());
         return pageInfo;
     }
@@ -119,6 +134,7 @@
 
         XpOperationsUserProfileVO vo = new XpOperationsUserProfileVO();
         BeanUtils.copyProperties(user, vo);
+        vo.setPhoneNumber(sysGroupService.getPhoneDesensitization(vo.getPhoneNumber()));
         vo.setAvatar(aliOssDownloadUtil.getPictureJSONObject(vo.getAvatar()));
         // 2. 查询关联的车队ID列表(一个运维人员只能关联一个车队)
         R<List<Long>> fleetIdsResult = xpFleetOperationsClient.getFleetIdsByUserId(userId);
@@ -244,6 +260,7 @@
         }
 
         for (XpOperationsUserVO xpOperationsUserVO : list) {
+            xpOperationsUserVO.setPhoneNumber(sysGroupService.getPhoneDesensitization(xpOperationsUserVO.getPhoneNumber()));
             String avatar = xpOperationsUserVO.getAvatar();
             // 处理空的情况
             if (avatar == null) {
diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpQualificationAuditServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpQualificationAuditServiceImpl.java
index f731c40..70324c3 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpQualificationAuditServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpQualificationAuditServiceImpl.java
@@ -2,19 +2,16 @@
 
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xiaopeng.account.mapper.SysRoleMapper;
 import com.xiaopeng.account.mapper.XpOperationsRoleMapper;
-import com.xiaopeng.account.mapper.XpOperationsUserMapper;
 import com.xiaopeng.account.mapper.XpQualificationAuditMapper;
 import com.xiaopeng.account.model.dto.QualificationReviewDTO;
 import com.xiaopeng.account.model.query.XpQualificationAuditQuery;
-import com.xiaopeng.account.service.ISysRoleService;
+import com.xiaopeng.account.service.ISysGroupService;
 import com.xiaopeng.account.service.IXpQualificationAuditService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xiaopeng.api.model.account.SysRole;
 import com.xiaopeng.api.model.account.XpOperationsRole;
-import com.xiaopeng.api.model.account.XpOperationsUser;
 import com.xiaopeng.api.model.account.XpQualificationAudit;
 import com.xiaopeng.api.vo.account.XpQualificationAuditVO;
 import com.xiaopeng.common.core.web.page.PageInfo;
@@ -47,6 +44,8 @@
     private SysRoleMapper sysRoleMapper;
     @Autowired
     private AliOssService aliOssService;
+    @Autowired
+    private ISysGroupService sysGroupService;
 
     @Override
     public PageInfo<XpQualificationAuditVO> pageList(XpQualificationAuditQuery query) throws UnsupportedEncodingException {
@@ -87,6 +86,7 @@
 
 
         for (XpQualificationAuditVO xpQualificationAuditVO : list) {
+            xpQualificationAuditVO.setPhoneNumber(sysGroupService.getPhoneDesensitization(xpQualificationAuditVO.getPhoneNumber()));
             String certificateOfNoCriminalRecord = xpQualificationAuditVO.getCertificateOfNoCriminalRecord();
             if(certificateOfNoCriminalRecord!=null){
                 JSONObject jsonObject = JSONObject.parseObject(certificateOfNoCriminalRecord);
diff --git a/xp-robotaxi-account-boot/src/main/resources/mapper/account/SysGroupMapper.xml b/xp-robotaxi-account-boot/src/main/resources/mapper/account/SysGroupMapper.xml
index cf66ea0..ed9b886 100644
--- a/xp-robotaxi-account-boot/src/main/resources/mapper/account/SysGroupMapper.xml
+++ b/xp-robotaxi-account-boot/src/main/resources/mapper/account/SysGroupMapper.xml
@@ -72,4 +72,12 @@
         </choose>
     </select>
 
+    <select id="getPhoneDesensitization" resultType="integer">
+        SELECT count(a.id) as count
+        FROM sys_group a
+         INNER JOIN sys_role b on b.group_id = a.id
+         INNER JOIN sys_user_role c on c.role_id = b.id
+        WHERE a.phone_desensitization = 1 and c.user_id =#{userId}
+    </select>
+
 </mapper>
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java
index cccd5d7..67b360d 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/SysGroupMenuClientFallbackFactory.java
@@ -26,6 +26,11 @@
                 // 降级策略: 返回空列表
                 return R.ok(Collections.emptyList());
             }
+
+            @Override
+            public R<String> getPhoneDesensitization(String phoneNumber) {
+                return R.fail("查询错误");
+            }
         };
     }
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java
index 50ae011..d647c26 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/SysGroupMenuClient.java
@@ -4,6 +4,8 @@
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
@@ -12,6 +14,7 @@
 /**
  * 权限组菜单关联 Feign 客户端
  */
+@Component
 @FeignClient(
     contextId = "SysGroupMenuClient",
     value = ServiceNameConstantsEnum.XP_ACCOUNT_SERVICE,
@@ -26,4 +29,13 @@
      */
     @PostMapping("/logan/groupMenu/selectMenuIdsByGroupId")
     R<List<Long>> selectMenuIdsByGroupId(@RequestParam("groupId") Long groupId);
+
+
+    /**
+     * 查询是否需要手机号脱敏
+     * @param phoneNumber
+     * @return
+     */
+    @GetMapping("/logan/inner/group/getPhoneDesensitization")
+     R<String> getPhoneDesensitization(@RequestParam String phoneNumber) ;
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/SysGroup.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/SysGroup.java
index f374df7..f03b9b3 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/SysGroup.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/SysGroup.java
@@ -41,4 +41,6 @@
     @ApiModelProperty(value = "分组类型 1=管理端 2=运维app")
     private Integer groupType;
 
+    @ApiModelProperty(value = "手机脱敏(0=否,1=是)")
+    private Integer phoneDesensitization;
 }
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java
index f0e2cb0..d8e65b2 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java
@@ -17,7 +17,7 @@
 import java.util.List;
 
 @Slf4j
-@Api(tags = "车辆检测")
+@Api(tags = "车型")
 @RestController
 @RequestMapping("")
 public class XpVehicleModelController {
@@ -28,13 +28,13 @@
     private XpPricingClient xpPricingClient;
 
 
-    @ApiOperation(value = "列表", tags = "管理后台-列表")
+    @ApiOperation(value = "分页列表", tags = "管理后台-分页列表")
     @PostMapping("/logan/inner/xpVehicleModel/pageList")
     public R<PageInfo<XpVehicleModel>> pageList(@RequestBody XpVehicleModelPageQuery query) {
         PageInfo<XpVehicleModel> pageInfo = xpVehicleModelService.pageList(query);
         return R.ok(pageInfo);
     }
-    @ApiOperation(value = "根据ID查询", tags = "管理后台-根据ID查询")
+    @ApiOperation(value = "根据ID查询", tags = "管理后台-车型根据ID查询")
     @GetMapping("/logan/inner/xpVehicleModel/getById")
     public R<XpVehicleModel> getById(@RequestParam String id) {
         if (id == null || id.isEmpty()) {
@@ -48,7 +48,7 @@
     }
     
     
-    @ApiOperation(value = "新增", tags = "管理后台-新增")
+    @ApiOperation(value = "新增", tags = "管理后台-车型新增")
     @PostMapping("/logan/inner/xpVehicleModel/add")
     public R<String> add(@RequestBody @Valid XpVehicleModel dto) {
         // 根据名称查询车辆型号,验证是否已存在
@@ -63,7 +63,7 @@
         return R.fail("保存失败");
     }
 
-    @ApiOperation(value = "编辑", tags = "管理后台-编辑")
+    @ApiOperation(value = "编辑", tags = "管理后台-车型编辑")
     @PostMapping("/logan/inner/xpVehicleModel/edit")
     public R<String> edit(@RequestBody @Valid XpVehicleModel dto) {
         if(dto.getId() == null){
@@ -86,7 +86,7 @@
         return R.fail("保存失败");
     }
 
-    @ApiOperation(value = "删除", tags = "管理后台-删除")
+    @ApiOperation(value = "删除", tags = "管理后台-车型删除")
     @DeleteMapping("/logan/inner/xpVehicleModel/deleteById")
     public R<String> deleteById(@RequestParam String id) {
         /*
@@ -112,7 +112,7 @@
     }
 
     
-    @ApiOperation(value = "列表查询", tags = "管理后台-列表查询")
+    @ApiOperation(value = "全列表查询", tags = "管理后台-车型全列表查询")
     @PostMapping("/logan/inner/xpVehicleModel/list")
     public R<List<XpVehicleModel>> list() {
         List<XpVehicleModel> list = xpVehicleModelService.queryList();
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java
index effb5ea..2a8a695 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java
@@ -135,6 +135,9 @@
     @ApiModelProperty(value = "车辆vin码")
     private String vehicleVin;
 
+    @ApiModelProperty(value = "车辆编码")
+    private String vehicleCode;
+
     @ApiModelProperty(value = "车辆颜色")
     private String vehicleColor;
     @ApiModelProperty(value = "车牌号")
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java
index cea063f..0ccdc03 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xiaopeng.api.dto.account.XpOperationsUserQueryDTO;
+import com.xiaopeng.api.feignClient.account.SysGroupMenuClient;
 import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
 import com.xiaopeng.api.feignClient.maintenance.XpCheckLocationClient;
 import com.xiaopeng.api.feignClient.operation.XpElectronicClient;
@@ -41,11 +42,13 @@
 import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
 import org.apache.shardingsphere.transaction.core.TransactionType;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -72,6 +75,8 @@
     private final XpElectronicClient xpElectronicClient;
 
     private final XpCheckLocationClient xpCheckLocationClient;
+    @Resource
+    private SysGroupMenuClient sysGroupMenuClient;
 
     @Override
     public List<XpFleet> listByIds(List<Long> ids) {
@@ -295,7 +300,7 @@
             R<XpOperationsUser> userResult = xpOperationUserClient.queryById(fleet.getOperationsUserId());
             if (userResult.getData() != null) {
                 vo.setOperationsUserName(userResult.getData().getNickName());
-                vo.setPhoneNumber(userResult.getData().getPhoneNumber());
+                vo.setPhoneNumber(sysGroupMenuClient.getPhoneDesensitization(userResult.getData().getPhoneNumber()).getData());
             }
         }
 
@@ -397,7 +402,7 @@
                 XpOperationsUser user = userMap.get(fleet.getOperationsUserId());
                 if (user != null) {
                     vo.setOperationsUserName(user.getNickName());
-                    vo.setPhoneNumber(user.getPhoneNumber());
+                    vo.setPhoneNumber(sysGroupMenuClient.getPhoneDesensitization(user.getPhoneNumber()).getData());
                 }
             }
 
@@ -535,7 +540,7 @@
                     FleetUserVO vo = new FleetUserVO();
                     vo.setUserId(user.getId());
                     vo.setNickName(user.getNickName());
-                    vo.setPhoneNumber(user.getPhoneNumber());
+                    vo.setPhoneNumber(sysGroupMenuClient.getPhoneDesensitization(user.getPhoneNumber()).getData());
                     vo.setJobNumber(user.getUniqueNumber());
                     vo.setRoleName(user.getRoles().stream().map(SysRole::getRoleName).collect(Collectors.joining(",")));
                     records.add(vo);
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpPolicyApplicationServiceImpl.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpPolicyApplicationServiceImpl.java
index 81bbc37..bcd3373 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpPolicyApplicationServiceImpl.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpPolicyApplicationServiceImpl.java
@@ -5,10 +5,10 @@
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xiaopeng.api.feignClient.account.SysGroupMenuClient;
 import com.xiaopeng.api.feignClient.account.SysUserClient;
 import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
 import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
@@ -32,12 +32,11 @@
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import javax.annotation.Resource;
 import java.io.UnsupportedEncodingException;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -62,9 +61,17 @@
     private final SysUserClient sysUserClient;
     private final XpVehicleMapper xpVehicleMapper;
     private final AliOssService aliOssService;
+    @Autowired
+    private SysGroupMenuClient sysGroupMenuClient;
     @Override
     public PageInfo<XpPolicyApplicationVO> pageList(XpPolicyApplicationQuery query) {
         PageInfo<XpPolicyApplicationVO> resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize());
+
+
+        for (XpPolicyApplicationVO vo : resultPage.getRecords()) {
+            vo.setPhoneNumber(sysGroupMenuClient.getPhoneDesensitization(vo.getPhoneNumber()).getData());
+        }
+
         // 1. 根据运维人员名称查询运维人员ID列表
         List<Long> operationUserIds = null;
         List<Long> vehicleIds = null;
@@ -114,6 +121,9 @@
         // 6. 返回分页结果
         resultPage.setTotal(page.getTotal());
         resultPage.setRecords(voList);
+        for (XpPolicyApplicationVO vo : resultPage.getRecords()) {
+            vo.setPhoneNumber(sysGroupMenuClient.getPhoneDesensitization(vo.getPhoneNumber()).getData());
+        }
         return resultPage;
     }
 

--
Gitblit v1.7.1