From 76b3532393aa98c2daaeb67caeefa2ab9556e866 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 12 五月 2026 09:26:48 +0800
Subject: [PATCH] 日志

---
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java |  116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 109 insertions(+), 7 deletions(-)

diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
index 791d304..f7e8169 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
@@ -32,8 +32,12 @@
 import com.xiaopeng.api.vo.vehicleConvoy.VehiclesCommandCallbackVo;
 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.WebUtils;
 import com.xiaopeng.common.core.web.page.PageInfo;
+import com.xiaopeng.common.log.annotation.AdminOperationLog;
+import com.xiaopeng.common.log.enums.AdminBusinessType;
+import com.xiaopeng.common.log.enums.AdminOperationType;
 import com.xiaopeng.common.security.service.TokenService;
 import com.xiaopeng.evi.oss.service.AliOssService;
 import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
@@ -190,6 +194,12 @@
      */
     @ApiOperation(value = "新增车辆", tags = {"管理后台-车辆管理-在库车辆管理"})
     @PostMapping("/api/v1/vehicle/add")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.ADD,
+            content = "新增车辆",
+            appendRequestData = true
+    )
     public R<?> addVehicle(@Valid @RequestBody VehicleAddDTO dto) {
         xpVehicleService.addVehicle(dto, null);
         return R.ok();
@@ -203,6 +213,12 @@
      */
     @ApiOperation(value = "编辑车辆", tags = {"管理后台-车辆管理-在库车辆管理"})
     @PostMapping("/api/v1/vehicle/edit")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.EDIT,
+            content = "编辑车辆",
+            appendRequestData = true
+    )
     public R<?> editVehicle(@Valid @RequestBody VehicleEditDTO dto) {
         xpVehicleService.editVehicle(dto, null);
         return R.ok();
@@ -216,6 +232,12 @@
      */
     @ApiOperation(value = "完善/更新车辆信息", tags = {"管理后台-车辆管理-在库车辆管理"})
     @PostMapping("/api/v1/vehicle/improveInfo")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.EDIT,
+            content = "完善/更新车辆信息",
+            appendRequestData = true
+    )
     public R<?> improveInfo(@RequestBody VehicleImproveInfoDTO dto) {
         xpVehicleService.improveInfo(dto);
         return R.ok();
@@ -230,6 +252,12 @@
     @ApiOperation(value = "批量运营", tags = {"管理后台-车辆管理-在库车辆管理"})
     @PostMapping("/api/v1/vehicle/batchOperation")
     @ApiImplicitParam(name = "idStr", value = "车辆ID字符串列表,逗号分隔", required = true, dataTypeClass = String.class)
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.EDIT,
+            contentExpression = "'批量运营车辆,ids=' + #p0",
+            appendRequestData = false
+    )
     public R<?> batchOperation(@RequestParam String idStr) {
         xpVehicleService.batchOperation(idStr);
         return R.ok();
@@ -243,6 +271,12 @@
      */
     @ApiOperation(value = "批量设置运营区域", tags = {"管理后台-车辆管理-在库车辆管理"})
     @PostMapping("/api/v1/vehicle/batchSetElectronic")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.EDIT,
+            content = "批量设置运营区域",
+            appendRequestData = true
+    )
     public R<?> batchSetElectronic(@Valid @RequestBody VehicleBatchSetElectronicDTO dto) {
         xpVehicleService.batchSetElectronic(dto.getIds(), dto.getElectronicId());
         return R.ok();
@@ -266,6 +300,12 @@
      */
     @ApiOperation(value = "下载导入模板", tags = {"管理后台-车辆管理-在库车辆管理"})
     @PostMapping("/api/v1/vehicle/importTemplate")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.EXPORT,
+            content = "下载车辆导入模板",
+            appendRequestData = false
+    )
     public void importTemplate() {
         // 1. 查询导出数据
         Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpVehicleImportExcel.class, new ArrayList<>());
@@ -301,6 +341,12 @@
      */
     @ApiOperation(value = "导入", tags = {"管理后台-车辆管理-在库车辆管理"})
     @PostMapping("/api/v1/vehicle/importExcel")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.IMPORT,
+            content = "导入车辆",
+            appendRequestData = false
+    )
     public R<?> importExcel(@RequestParam("file") MultipartFile file) {
         ImportParams params = new ImportParams();
         params.setHeadRows(1);
@@ -467,12 +513,16 @@
         }
         Set<String> existsVins = Collections.emptySet();
         if (!vinSet.isEmpty()) {
+            Set<String> vinQueryValues = vinSet.stream()
+                    .flatMap(vin -> SensitiveDataCryptoUtil.queryValues(vin).stream())
+                    .collect(java.util.stream.Collectors.toSet());
             existsVins = xpVehicleService.lambdaQuery()
                     .select(XpVehicle::getVehicleVin)
-                    .in(XpVehicle::getVehicleVin, vinSet)
+                    .in(XpVehicle::getVehicleVin, vinQueryValues)
                     .list()
                     .stream()
                     .map(XpVehicle::getVehicleVin)
+                    .map(SensitiveDataCryptoUtil::decryptIfPossible)
                     .filter(org.apache.commons.lang3.StringUtils::isNotBlank)
                     .collect(java.util.stream.Collectors.toSet());
         }
@@ -574,6 +624,12 @@
      */
     @ApiOperation(value = "导出", tags = {"管理后台-车辆管理-在库车辆管理"})
     @PostMapping("/api/v1/vehicle/exportExcel")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.EXPORT,
+            content = "导出在库车辆",
+            appendRequestData = true
+    )
     public void exportExcel(@RequestBody VehicleExportQuery query) {
         // 1. 查询导出数据
         List<XpVehicle> dataList = xpVehicleService.vehicleExportList(query);
@@ -621,6 +677,12 @@
     @ApiOperation(value = "批量在库", tags = {"管理后台-车辆管理-运营车辆管理"})
     @ApiImplicitParam(name = "idStr", value = "车辆ID字符串列表,逗号分隔", required = true, dataTypeClass = String.class)
     @PostMapping("/api/v1/vehicle/batchStock")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.OPERATION_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.EDIT,
+            contentExpression = "'批量在库车辆,ids=' + #p0",
+            appendRequestData = false
+    )
     public R<?> batchStock(@RequestParam String idStr) {
         xpVehicleService.batchStock(idStr);
         return R.ok();
@@ -654,6 +716,12 @@
      */
     @ApiOperation(value = "删除在库车辆", tags = {"管理后台-车辆管理-在库车辆管理"})
     @DeleteMapping("/api/v1/vehicle/delete/{id}")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.STOCK_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.DELETE,
+            contentExpression = "'删除在库车辆,id=' + #p0",
+            appendRequestData = false
+    )
     public R<?> delete(@ApiParam(name = "id", value = "车辆ID") @PathVariable Long id) {
         XpFleetVehicle binding = vehicleService.lambdaQuery()
                 .eq(XpFleetVehicle::getVehicleId, id)
@@ -695,6 +763,12 @@
      */
     @ApiOperation(value = "运营车辆管理列表导出", tags = {"管理后台-车辆管理-运营车辆管理"})
     @PostMapping("/api/v1/vehicle/operationExportExcel")
+    @AdminOperationLog(
+            businessType = AdminBusinessType.OPERATION_VEHICLE_MANAGEMENT,
+            operationType = AdminOperationType.EXPORT,
+            content = "导出运营车辆",
+            appendRequestData = true
+    )
     public void exportExcel(@RequestBody OperationVehicleExportQuery query) {
         // 1. 查询导出数据
         List<XpVehicle> dataList = xpVehicleService.operationVehicleExportList(query);
@@ -772,9 +846,15 @@
      */
     @PostMapping("/logan/inner/vehicle/queryVehiclePositionByVin")
     public R<List<String>> queryVehiclePositionByVin(@RequestBody VehiclePositionByVinDto dto){
+        if (dto == null) {
+            return R.ok(new ArrayList<>());
+        }
+        List<String> vinQueryValues = buildVinQueryValues(dto.getVinList());
+        if (vinQueryValues.isEmpty()) {
+            return R.ok(new ArrayList<>());
+        }
         List<XpVehicle> list = xpVehicleService.list(new LambdaQueryWrapper<XpVehicle>().eq(XpVehicle::getState, Optional.ofNullable(dto.getStatus()).orElse(0))
-                .eq(XpVehicle::getOperatingStatus, 1).eq(XpVehicle::getElectronicId, dto.getFenceId()).in(XpVehicle::getVehicleVin,
-                dto.getVinList()));
+                .eq(XpVehicle::getOperatingStatus, 1).eq(XpVehicle::getElectronicId, dto.getFenceId()).in(XpVehicle::getVehicleVin, vinQueryValues));
         if (list.isEmpty()) {
             return R.ok(new ArrayList<>());
         } else {
@@ -796,7 +876,13 @@
      */
     @GetMapping("/logan/inner/vehicle/findByVehicleVin")
     public R<XpVehicle> findByVehicleVin(@RequestParam("vehicleVin") String vehicleVin) {
-        XpVehicle xpVehicle = xpVehicleService.getOne(new LambdaQueryWrapper<XpVehicle>().eq(XpVehicle::getVehicleVin, vehicleVin));
+        if (StringUtils.isBlank(vehicleVin)) {
+            return R.ok();
+        }
+        XpVehicle xpVehicle = xpVehicleService.getOne(new LambdaQueryWrapper<XpVehicle>().in(XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(vehicleVin)));
+        if (xpVehicle == null) {
+            return R.ok();
+        }
 
         // 获取车队
         XpFleetVehicle xpFleetVehicle = vehicleService.getOne(new LambdaQueryWrapper<XpFleetVehicle>().eq(XpFleetVehicle::getVehicleId, xpVehicle.getId()));
@@ -828,7 +914,10 @@
      */
     @PostMapping("/logan/inner/vehicle/updateVehicleStatus")
     public R<?> updateVehicleStatus(@RequestBody UpdateVehicleStateDto updateVehicleStateDto) {
-        xpVehicleService.update(new LambdaUpdateWrapper<XpVehicle>().eq(XpVehicle::getVehicleVin, updateVehicleStateDto.getVin()).set(XpVehicle::getState, updateVehicleStateDto.getState()));
+        if (StringUtils.isBlank(updateVehicleStateDto.getVin())) {
+            return R.ok();
+        }
+        xpVehicleService.update(new LambdaUpdateWrapper<XpVehicle>().in(XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(updateVehicleStateDto.getVin())).set(XpVehicle::getState, updateVehicleStateDto.getState()));
         return R.ok();
     }
 
@@ -1058,7 +1147,10 @@
      */
     @PostMapping("/base/vi/vehicle/updateVehicleStatus")
     public R<?> testUpdateVehicleStatus(@RequestBody UpdateVehicleStateDto updateVehicleStateDto) {
-        xpVehicleService.update(new LambdaUpdateWrapper<XpVehicle>().eq(XpVehicle::getVehicleVin, updateVehicleStateDto.getVin()).set(XpVehicle::getState, updateVehicleStateDto.getState()));
+        if (StringUtils.isBlank(updateVehicleStateDto.getVin())) {
+            return R.ok();
+        }
+        xpVehicleService.update(new LambdaUpdateWrapper<XpVehicle>().in(XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(updateVehicleStateDto.getVin())).set(XpVehicle::getState, updateVehicleStateDto.getState()));
         return R.ok();
     }
 
@@ -1172,7 +1264,7 @@
         List<XpVehicleVO> xpVehicleList = vehiclePositions.stream()
                 .sorted(Comparator.comparingDouble(VehiclePositionVo::getDistance))
                 .map(vp -> {
-                    XpVehicle xpVehicle = xpVehicleService.getOne(new LambdaQueryWrapper<XpVehicle>().eq(XpVehicle::getVehicleVin, vp.getVin()));
+                    XpVehicle xpVehicle = xpVehicleService.getOne(new LambdaQueryWrapper<XpVehicle>().in(XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(vp.getVin())));
                     if (xpVehicle == null) {
                         return null;
                     }
@@ -1245,4 +1337,14 @@
         XpVehicle vehicle = xpVehicleService.getOne(new LambdaQueryWrapper<XpVehicle>().eq(XpVehicle::getPlateNumber, plateNumber).eq(XpVehicle::getOfficialPartnerId, officialPartnerId));
         return R.ok(vehicle);
     }
+
+    private List<String> buildVinQueryValues(List<String> vinList) {
+        if (vinList == null || vinList.isEmpty()) {
+            return java.util.Collections.emptyList();
+        }
+        return vinList.stream()
+                .flatMap(vin -> SensitiveDataCryptoUtil.queryValues(vin).stream())
+                .distinct()
+                .collect(Collectors.toList());
+    }
 }

--
Gitblit v1.7.1