liujie
2026-05-12 d3d65af98906ccc78652c16be7e8a9fbdc03f258
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -4,6 +4,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Validator;
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.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -35,6 +36,7 @@
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.common.core.utils.DateUtils;
import com.xiaopeng.common.core.utils.GeodesyUtil;
import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.evi.oss.service.AliOssService;
@@ -68,6 +70,7 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -488,7 +491,7 @@
                .ne(excludeId != null, XpVehicle::getId, excludeId)
                .and(w -> w.eq(XpVehicle::getVehicleCode, vehicleCode)
                        .or()
                        .eq(XpVehicle::getVehicleVin, vehicleVin)
                        .in(XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(vehicleVin))
                        .or()
                        .eq(XpVehicle::getPlateNumber, plateNumber))
                .last("limit 3")
@@ -502,7 +505,7 @@
            throw new ServiceException("车辆编码已存在", I18nKeyConstant.VEHICLE_CODE_EXISTS, new Object[]{vehicleCode});
        }
        boolean vehicleVinExists = duplicates.stream().anyMatch(v -> vehicleVin.equals(v.getVehicleVin()));
        boolean vehicleVinExists = duplicates.stream().anyMatch(v -> vehicleVin.equals(SensitiveDataCryptoUtil.decryptIfPossible(v.getVehicleVin())));
        if (vehicleVinExists) {
            throw new ServiceException("车辆VIN码已存在", I18nKeyConstant.VEHICLE_VIN_EXISTS, new Object[]{vehicleVin});
        }
@@ -842,8 +845,10 @@
    @Override
    public PageInfo<XpVehicle> vehiclePageList(VehiclePageQuery query) {
        query.setVehicleVinQueryValues(SensitiveDataCryptoUtil.queryValues(query.getVehicleVin()));
        PageInfo<XpVehicle> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<XpVehicle> list = this.baseMapper.vehiclePageList(pageInfo, query);
        decryptVehicles(list);
        //查询运营区域名称
        List<Long> electronicIds = list.stream()
                .map(XpVehicle::getElectronicId)
@@ -895,7 +900,10 @@
    @Override
    public List<XpVehicle> vehicleExportList(VehicleExportQuery query) {
        return this.baseMapper.vehicleExportList(query);
        query.setVehicleVinQueryValues(SensitiveDataCryptoUtil.queryValues(query.getVehicleVin()));
        List<XpVehicle> list = this.baseMapper.vehicleExportList(query);
        decryptVehicles(list);
        return list;
    }
    @Override
@@ -944,7 +952,7 @@
        LambdaQueryWrapper<XpVehicle> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(XpVehicle::getVehicleType, 2)
                .like(StringUtils.isNotBlank(query.getVehicleCode()), XpVehicle::getVehicleCode, query.getVehicleCode())
                .like(StringUtils.isNotBlank(query.getVehicleVin()), XpVehicle::getVehicleVin, query.getVehicleVin())
                .in(StringUtils.isNotBlank(query.getVehicleVin()), XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(query.getVehicleVin()))
                .like(StringUtils.isNotBlank(query.getPlateNumber()), XpVehicle::getPlateNumber, query.getPlateNumber())
                .eq(Objects.nonNull(query.getOperatingStatus()), XpVehicle::getOperatingStatus, query.getOperatingStatus())
                .eq(Objects.nonNull(query.getElectronicId()), XpVehicle::getElectronicId, query.getElectronicId());
@@ -980,7 +988,7 @@
        LambdaQueryWrapper<XpVehicle> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(XpVehicle::getVehicleType, 2)
                .like(StringUtils.isNotBlank(query.getVehicleCode()), XpVehicle::getVehicleCode, query.getVehicleCode())
                .like(StringUtils.isNotBlank(query.getVehicleVin()), XpVehicle::getVehicleVin, query.getVehicleVin())
                .in(StringUtils.isNotBlank(query.getVehicleVin()), XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(query.getVehicleVin()))
                .like(StringUtils.isNotBlank(query.getPlateNumber()), XpVehicle::getPlateNumber, query.getPlateNumber())
                .eq(Objects.nonNull(query.getOperatingStatus()), XpVehicle::getOperatingStatus, query.getOperatingStatus())
                .eq(Objects.nonNull(query.getElectronicId()), XpVehicle::getElectronicId, query.getOperatingStatus())
@@ -1058,4 +1066,82 @@
            return false;
        }
    }
    @Override
    public XpVehicle getById(Serializable id) {
        XpVehicle vehicle = super.getById(id);
        decryptVehicle(vehicle);
        return vehicle;
    }
    @Override
    public boolean save(XpVehicle entity) {
        encryptVehicle(entity);
        try {
            return super.save(entity);
        } finally {
            decryptVehicle(entity);
        }
    }
    @Override
    public boolean saveBatch(Collection<XpVehicle> entityList) {
        if (entityList != null) {
            entityList.forEach(this::encryptVehicle);
        }
        try {
            return super.saveBatch(entityList);
        } finally {
            decryptVehicles(entityList);
        }
    }
    @Override
    public boolean updateById(XpVehicle entity) {
        encryptVehicle(entity);
        try {
            return super.updateById(entity);
        } finally {
            decryptVehicle(entity);
        }
    }
    @Override
    public List<XpVehicle> list() {
        List<XpVehicle> list = super.list();
        decryptVehicles(list);
        return list;
    }
    @Override
    public List<XpVehicle> list(Wrapper<XpVehicle> queryWrapper) {
        List<XpVehicle> list = super.list(queryWrapper);
        decryptVehicles(list);
        return list;
    }
    @Override
    public XpVehicle getOne(Wrapper<XpVehicle> queryWrapper) {
        XpVehicle vehicle = super.getOne(queryWrapper);
        decryptVehicle(vehicle);
        return vehicle;
    }
    private void encryptVehicle(XpVehicle vehicle) {
        if (vehicle != null) {
            vehicle.setVehicleVin(SensitiveDataCryptoUtil.encrypt(vehicle.getVehicleVin()));
        }
    }
    private void decryptVehicle(XpVehicle vehicle) {
        if (vehicle != null) {
            vehicle.setVehicleVin(SensitiveDataCryptoUtil.decryptIfPossible(vehicle.getVehicleVin()));
        }
    }
    private void decryptVehicles(Collection<? extends XpVehicle> vehicles) {
        if (vehicles != null) {
            vehicles.forEach(this::decryptVehicle);
        }
    }
}