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-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java |  121 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 116 insertions(+), 5 deletions(-)

diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java
index d974fc8..46e44fb 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpWhitelistServiceImpl.java
@@ -2,11 +2,14 @@
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.PhoneUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xiaopeng.api.model.account.SysUser;
 import com.xiaopeng.api.model.operation.XpWhitelist;
 import com.xiaopeng.api.model.operation.XpWhitelistOperlog;
 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.ip.IpUtils;
 import com.xiaopeng.common.core.web.page.PageInfo;
 import com.xiaopeng.operation.constant.I18nKeyConstant;
@@ -15,7 +18,6 @@
 import com.xiaopeng.operation.mapper.XpWhitelistOperlogMapper;
 import com.xiaopeng.operation.query.WhitelistPageListQuery;
 import com.xiaopeng.operation.service.IXpWhitelistService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
 import org.apache.shardingsphere.transaction.core.TransactionType;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +25,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
@@ -49,15 +52,19 @@
     private XpWhitelistOperlogMapper xpWhitelistOperlogMapper;
     @Override
     public PageInfo<XpWhitelist> pageList(WhitelistPageListQuery query) {
+        query.setAccountQueryValues(SensitiveDataCryptoUtil.queryValues(query.getAccount()));
         PageInfo<XpWhitelist> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize());
         List<XpWhitelist> list = this.baseMapper.pageList(pageInfo,query);
+        decryptWhitelistAccounts(list);
         pageInfo.setRecords(list);
         return pageInfo;
     }
 
     @Override
     public List<XpWhitelist> exportList(WhitelistPageListQuery query) {
+        query.setAccountQueryValues(SensitiveDataCryptoUtil.queryValues(query.getAccount()));
         List<XpWhitelist> list = this.baseMapper.exportList(query);
+        decryptWhitelistAccounts(list);
         return list;
     }
 
@@ -96,10 +103,11 @@
         if (CollUtil.isNotEmpty(candidates)) {
             existsAccounts = this.lambdaQuery()
                     .select(XpWhitelist::getAccount)
-                    .in(XpWhitelist::getAccount, candidates)
+                    .in(XpWhitelist::getAccount, buildQueryValues(candidates))
                     .list()
                     .stream()
                     .map(XpWhitelist::getAccount)
+                    .map(SensitiveDataCryptoUtil::decryptIfPossible)
                     .filter(StringUtils::hasLength)
                     .collect(Collectors.toSet());
         }
@@ -231,7 +239,7 @@
             throw new ServiceException("以下帐号格式不正确:", I18nKeyConstant.ACCOUNT_FORMAT_ERROR, new Object[]{dto.getAccount()});
         }
         XpWhitelist old = this.lambdaQuery()
-                .eq(XpWhitelist::getAccount, dto.getAccount())
+                .in(XpWhitelist::getAccount, SensitiveDataCryptoUtil.queryValues(dto.getAccount()))
                 .ne(XpWhitelist::getId, dto.getId())
                 .last("limit 1").one();
         if (old != null) {
@@ -302,7 +310,9 @@
     @Override
     public R deleteByIds(List<Long> ids, SysUser sysUser) {
         List<String> accounts = this.lambdaQuery().in(XpWhitelist::getId, ids).list()
-                .stream().map(XpWhitelist::getAccount).collect(Collectors.toList());
+                .stream().map(XpWhitelist::getAccount)
+                .map(SensitiveDataCryptoUtil::decryptIfPossible)
+                .collect(Collectors.toList());
         this.removeBatchByIds(ids);
         StringBuilder operationContent = new StringBuilder("删除账号:");
         StringBuilder accountBuilder = new StringBuilder();
@@ -347,6 +357,107 @@
     @Override
     public List<String> getAllWhiteList() {
         return lambdaQuery().select(XpWhitelist::getAccount).list()
-                .stream().map(XpWhitelist::getAccount).collect(Collectors.toList());
+                .stream().map(XpWhitelist::getAccount)
+                .map(SensitiveDataCryptoUtil::decryptIfPossible)
+                .collect(Collectors.toList());
+    }
+
+    private static List<String> buildQueryValues(Iterable<String> plainValues) {
+        Set<String> values = new LinkedHashSet<>();
+        if (plainValues == null) {
+            return new ArrayList<>();
+        }
+        for (String plainValue : plainValues) {
+            if (StringUtils.hasLength(plainValue)) {
+                values.addAll(SensitiveDataCryptoUtil.queryValues(plainValue));
+            }
+        }
+        return new ArrayList<>(values);
+    }
+
+    @Override
+    public XpWhitelist getById(Serializable id) {
+        XpWhitelist whitelist = super.getById(id);
+        decryptWhitelistAccount(whitelist);
+        return whitelist;
+    }
+
+    @Override
+    public boolean save(XpWhitelist entity) {
+        encryptWhitelistAccount(entity);
+        try {
+            return super.save(entity);
+        } finally {
+            decryptWhitelistAccount(entity);
+        }
+    }
+
+    @Override
+    public boolean saveBatch(java.util.Collection<XpWhitelist> entityList) {
+        if (entityList != null) {
+            entityList.forEach(this::encryptWhitelistAccount);
+        }
+        try {
+            return super.saveBatch(entityList);
+        } finally {
+            decryptWhitelistAccounts(entityList);
+        }
+    }
+
+    @Override
+    public boolean updateById(XpWhitelist entity) {
+        encryptWhitelistAccount(entity);
+        try {
+            return super.updateById(entity);
+        } finally {
+            decryptWhitelistAccount(entity);
+        }
+    }
+
+    @Override
+    public boolean updateBatchById(java.util.Collection<XpWhitelist> entityList) {
+        if (entityList != null) {
+            entityList.forEach(this::encryptWhitelistAccount);
+        }
+        try {
+            return super.updateBatchById(entityList);
+        } finally {
+            decryptWhitelistAccounts(entityList);
+        }
+    }
+
+    @Override
+    public List<XpWhitelist> list(Wrapper<XpWhitelist> queryWrapper) {
+        List<XpWhitelist> list = super.list(queryWrapper);
+        decryptWhitelistAccounts(list);
+        return list;
+    }
+
+    @Override
+    public List<XpWhitelist> list() {
+        List<XpWhitelist> list = super.list();
+        decryptWhitelistAccounts(list);
+        return list;
+    }
+
+    private void encryptWhitelistAccount(XpWhitelist whitelist) {
+        if (whitelist != null) {
+            whitelist.setAccount(SensitiveDataCryptoUtil.encrypt(whitelist.getAccount()));
+        }
+    }
+
+    private static void decryptWhitelistAccount(XpWhitelist whitelist) {
+        if (whitelist != null) {
+            whitelist.setAccount(SensitiveDataCryptoUtil.decryptIfPossible(whitelist.getAccount()));
+        }
+    }
+
+    private static void decryptWhitelistAccounts(Iterable<XpWhitelist> list) {
+        if (list == null) {
+            return;
+        }
+        for (XpWhitelist item : list) {
+            decryptWhitelistAccount(item);
+        }
     }
 }

--
Gitblit v1.7.1