From d3d65af98906ccc78652c16be7e8a9fbdc03f258 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 12 五月 2026 19:13:27 +0800
Subject: [PATCH] 日志 + 加密

---
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserServiceImpl.java |  117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 110 insertions(+), 7 deletions(-)

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..519f1dd 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
@@ -4,6 +4,7 @@
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.PhoneUtil;
 import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -31,6 +32,7 @@
 import com.xiaopeng.api.vo.account.*;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.exception.ServiceException;
+import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil;
 import com.xiaopeng.common.core.utils.poi.ExcelUtil;
 import com.xiaopeng.common.core.web.page.PageInfo;
 import com.xiaopeng.common.security.utils.SecurityUtils;
@@ -48,6 +50,7 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.Serializable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
@@ -94,17 +97,28 @@
     private AliOssDownloadUtil aliOssDownloadUtil;
 
     @Override
+    public XpOperationsUser getById(Serializable userId) {
+        XpOperationsUser user = super.getById(userId);
+        decryptPhone(user);
+        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();
+        decryptPhones(list);
+        return list;
     }
 
     @Override
     public PageInfo<XpOperationsUserWithRoleVO> selectUserPageByConditions(XpOperationsUserPageQuery query) {
+        query.setPhoneNumberQueryValues(SensitiveDataCryptoUtil.queryValues(query.getPhoneNumber()));
         PageInfo<XpOperationsUserWithRoleVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         Page<XpOperationsUserWithRoleVO> page = baseMapper.selectUserPageByConditions(pageInfo, query);
+        decryptWithRolePhones(page.getRecords());
         pageInfo.setRecords(page.getRecords());
         return pageInfo;
     }
@@ -205,6 +219,7 @@
 
     @Override
     public PageInfo<XpOperationsUserVO> pageList(XpOperationsUserQuery query) {
+        query.setPhoneNumberQueryValues(SensitiveDataCryptoUtil.queryValues(query.getPhoneNumber()));
         PageInfo<XpOperationsUserVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         List<XpOperationsUserVO> list = this.baseMapper.pageList(pageInfo, query);
 
@@ -243,6 +258,7 @@
             }
         }
 
+        decryptVoPhones(list);
         for (XpOperationsUserVO xpOperationsUserVO : list) {
             String avatar = xpOperationsUserVO.getAvatar();
             // 处理空的情况
@@ -269,8 +285,8 @@
 
     @Override
     public R<String> addOperationsUser(XpOperationsUserAddDTO dto) {
-        long userCount = this.count(Wrappers.lambdaQuery(XpOperationsUser.class)
-                .eq(XpOperationsUser::getPhoneNumber, dto.getPhoneNumber()));
+        long userCount = StringUtils.isBlank(dto.getPhoneNumber()) ? 0 : this.count(Wrappers.lambdaQuery(XpOperationsUser.class)
+                .in(XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(dto.getPhoneNumber())));
         if (StringUtils.isNotBlank(dto.getPhoneNumber()) && userCount>0) {
             throw new ServiceException("登录账号重复", I18nKeyConstant.ACCOUNT_DUPLICATE);
         }
@@ -300,8 +316,8 @@
 
     @Override
     public R<String> editOperationsUser(XpOperationsUserAddDTO dto) {
-        XpOperationsUser operationsUser = this.getOne(Wrappers.lambdaQuery(XpOperationsUser.class)
-                .eq(XpOperationsUser::getPhoneNumber, dto.getPhoneNumber())
+        XpOperationsUser operationsUser = StringUtils.isBlank(dto.getPhoneNumber()) ? null : this.getOne(Wrappers.lambdaQuery(XpOperationsUser.class)
+                .in(XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(dto.getPhoneNumber()))
                 .last("LIMIT 1"));
 
         if (StringUtils.isNotBlank(dto.getPhoneNumber()) && (Objects.nonNull(operationsUser) && !dto.getId().equals(operationsUser.getId()) )) {
@@ -368,7 +384,11 @@
      */
     @Override
     public void exportOperationsUser(XpOperationsUserQuery query, HttpServletResponse response) {
+        query.setPhoneNumberQueryValues(SensitiveDataCryptoUtil.queryValues(query.getPhoneNumber()));
         List<ExportOperationsUserVo> list = this.baseMapper.exportOperationsUser(query);
+        for (ExportOperationsUserVo item : list) {
+            item.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(item.getPhoneNumber()));
+        }
         ExcelUtil<ExportOperationsUserVo> util = new ExcelUtil<ExportOperationsUserVo>(ExportOperationsUserVo.class);
         util.exportExcel(response, list, "运维人员管理列表");
     }
@@ -398,7 +418,7 @@
             }
             // 判断账号是否已存在
             long count = this.count(Wrappers.lambdaQuery(XpOperationsUser.class)
-                    .eq(XpOperationsUser::getPhoneNumber, exportOperationsUserVo.getPhoneNumber()));
+                    .in(XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(exportOperationsUserVo.getPhoneNumber())));
             if (count > 0) {
                 throw new ServiceException("以下帐号已存在:", I18nKeyConstant.ACCOUNT_EXIST,new Object[]{exportOperationsUserVo.getPhoneNumber()});
             }
@@ -510,6 +530,7 @@
 
             // 根据你的 VO 字段调整
             XpOperationsUserWithRoleVO vo = BeanUtil.copyProperties(u, XpOperationsUserWithRoleVO.class);
+            vo.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(vo.getPhoneNumber()));
             vo.setRoles(roles);
 
             return vo;
@@ -521,6 +542,88 @@
         if (StringUtils.isBlank(phoneNumber)) {
             return Collections.emptyList();
         }
-        return lambdaQuery().like(XpOperationsUser::getPhoneNumber, phoneNumber).list();
+        List<XpOperationsUser> list = lambdaQuery()
+                .in(XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(phoneNumber))
+                .list();
+        decryptPhones(list);
+        return list;
+    }
+
+    @Override
+    public boolean save(XpOperationsUser entity) {
+        encryptPhone(entity);
+        try {
+            return super.save(entity);
+        } finally {
+            decryptPhone(entity);
+        }
+    }
+
+    @Override
+    public boolean updateById(XpOperationsUser entity) {
+        encryptPhone(entity);
+        try {
+            return super.updateById(entity);
+        } finally {
+            decryptPhone(entity);
+        }
+    }
+
+    @Override
+    public List<XpOperationsUser> list() {
+        List<XpOperationsUser> list = super.list();
+        decryptPhones(list);
+        return list;
+    }
+
+    @Override
+    public List<XpOperationsUser> list(Wrapper<XpOperationsUser> queryWrapper) {
+        List<XpOperationsUser> list = super.list(queryWrapper);
+        decryptPhones(list);
+        return list;
+    }
+
+    @Override
+    public List<XpOperationsUser> listByIds(Collection<? extends Serializable> idList) {
+        List<XpOperationsUser> list = super.listByIds(idList);
+        decryptPhones(list);
+        return list;
+    }
+
+    @Override
+    public XpOperationsUser getOne(Wrapper<XpOperationsUser> queryWrapper) {
+        XpOperationsUser user = super.getOne(queryWrapper);
+        decryptPhone(user);
+        return user;
+    }
+
+    private void encryptPhone(XpOperationsUser user) {
+        if (user != null) {
+            user.setPhoneNumber(SensitiveDataCryptoUtil.encrypt(user.getPhoneNumber()));
+        }
+    }
+
+    private void decryptPhone(XpOperationsUser user) {
+        if (user != null) {
+            user.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(user.getPhoneNumber()));
+        }
+    }
+
+    private void decryptPhones(Collection<XpOperationsUser> users) {
+        if (users != null) {
+            users.forEach(this::decryptPhone);
+        }
+    }
+
+    private void decryptVoPhones(Collection<XpOperationsUserVO> users) {
+        if (users != null) {
+            users.forEach(user -> user.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(user.getPhoneNumber())));
+        }
+    }
+
+    private void decryptWithRolePhones(Collection<XpOperationsUserWithRoleVO> users) {
+        if (users != null) {
+            users.forEach(user -> user.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(user.getPhoneNumber())));
+        }
     }
 }

--
Gitblit v1.7.1