puzhibing
2026-05-12 08cc6d5cf7e93b75cfabe7dcc2aeaa9afa1117eb
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysUserServiceImpl.java
@@ -1,6 +1,7 @@
package com.xiaopeng.account.service.impl;
import cn.hutool.core.util.DesensitizedUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.account.constant.I18nKeyConstant;
@@ -14,6 +15,7 @@
import com.xiaopeng.api.vo.account.LoginUser;
import com.xiaopeng.common.core.constant.UserConstants;
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil;
import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.security.service.TokenService;
@@ -26,7 +28,9 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
@@ -59,7 +63,9 @@
   @Override
   public SysUser selectUserByUserName(String userName)
   {
      return userMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserAccount, userName).last("limit 1"));
      SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserAccount, userName).last("limit 1"));
      decryptPhone(user);
      return user;
   }
   /**
@@ -93,7 +99,9 @@
    */
   @Override
   public SysUser selectUserById(Long userId) {
      return userMapper.selectUserById(userId);
      SysUser user = userMapper.selectUserById(userId);
      decryptPhone(user);
      return user;
   }
   /**
@@ -121,7 +129,10 @@
   @Override
   public boolean checkPhoneUnique(SysUser user) {
      Long userId = StringUtils.isNull(user.getId()) ? -1L : user.getId();
      SysUser info = userMapper.checkPhoneUnique(user.getPhoneNumber());
      SysUser info = lambdaQuery()
            .in(SysUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(user.getPhoneNumber()))
            .last("limit 1")
            .one();
      if (StringUtils.isNotNull(info)) {
         return UserConstants.NOT_UNIQUE;
      }
@@ -176,7 +187,12 @@
//        insertUserRole(user);
      user.setCreateBy(tokenService.getLoginUser().getUsername());
      user.setUpdateBy(tokenService.getLoginUser().getUsername());
      encryptPhone(user);
      try {
      return userMapper.insert(user);
      } finally {
         decryptPhone(user);
      }
   }
   /**
@@ -189,7 +205,12 @@
    @Transactional
    @ShardingSphereTransactionType(TransactionType.BASE)
   public int updateUser(SysUser user) {
      encryptPhone(user);
      try {
      return userMapper.updateUser(user);
      } finally {
         decryptPhone(user);
      }
   }
   /**
@@ -214,7 +235,12 @@
    */
   @Override
   public int updateUserStatus(SysUser user) {
      encryptPhone(user);
      try {
      return userMapper.updateUser(user);
      } finally {
         decryptPhone(user);
      }
   }
   /**
@@ -225,7 +251,12 @@
    */
   @Override
   public int resetPwd(SysUser user) {
      encryptPhone(user);
      try {
      return userMapper.updateUser(user);
      } finally {
         decryptPhone(user);
      }
   }
   /**
@@ -269,7 +300,9 @@
    @Override
    public PageInfo<SysUser> getList(PageInfo<SysUser> pageInfo, SysUserListQuery sysUserListQuery) {
      sysUserListQuery.setPhoneNumberQueryValues(SensitiveDataCryptoUtil.queryValues(sysUserListQuery.getPhoneNumber()));
        PageInfo<SysUser> page = userMapper.getList(pageInfo, sysUserListQuery);
      decryptPhones(page.getRecords());
      return page;
    }
@@ -277,4 +310,77 @@
   public boolean resetUserPwd(Long id, String newPassword) {
      return lambdaUpdate().eq(SysUser::getId, id).set(SysUser::getPassword, newPassword).update();
   }
   @Override
   public boolean save(SysUser entity) {
      encryptPhone(entity);
      try {
         return super.save(entity);
      } finally {
         decryptPhone(entity);
      }
   }
   @Override
   public boolean updateById(SysUser entity) {
      encryptPhone(entity);
      try {
         return super.updateById(entity);
      } finally {
         decryptPhone(entity);
      }
   }
   @Override
   public SysUser getById(Serializable id) {
      SysUser user = super.getById(id);
      decryptPhone(user);
      return user;
   }
   @Override
   public SysUser getOne(Wrapper<SysUser> queryWrapper) {
      SysUser user = super.getOne(queryWrapper);
      decryptPhone(user);
      return user;
   }
   @Override
   public List<SysUser> list() {
      List<SysUser> list = super.list();
      decryptPhones(list);
      return list;
   }
   @Override
   public List<SysUser> list(Wrapper<SysUser> queryWrapper) {
      List<SysUser> list = super.list(queryWrapper);
      decryptPhones(list);
      return list;
   }
   @Override
   public List<SysUser> listByIds(Collection<? extends Serializable> idList) {
      List<SysUser> list = super.listByIds(idList);
      decryptPhones(list);
      return list;
   }
   private void encryptPhone(SysUser user) {
      if (user != null) {
         user.setPhoneNumber(SensitiveDataCryptoUtil.encrypt(user.getPhoneNumber()));
      }
   }
   private void decryptPhone(SysUser user) {
      if (user != null) {
         user.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(user.getPhoneNumber()));
      }
   }
   private void decryptPhones(List<SysUser> users) {
      if (users != null) {
         users.forEach(this::decryptPhone);
      }
   }
}