From 3207399bcdc24d13874e8bd9f27070a928ccc77b Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期四, 02 四月 2026 18:47:45 +0800
Subject: [PATCH] fix(management):管理后台问题修改

---
 xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_zh_CN.properties                                        |    1 
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/exportExcel/XpVehicleExportExcel.java  |    2 
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java |   11 --
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderEvaluateServiceImpl.java                  |   72 ++++++++++-------
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/exportExcel/XpTaskExportExcel.java                |    2 
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAgreementServiceImpl.java              |   17 ++-
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java                 |    4 
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/AliOssDownloadUtil.java                 |   87 +++++++++++++++++++++
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/I18nKeyConstant.java                     |    1 
 xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_en_US.properties                                        |    1 
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/XpAgreementDTO.java                               |    2 
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java          |   13 ++
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAgreement.java                                       |    2 
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java               |    6 +
 xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages.properties                                              |    3 
 15 files changed, 170 insertions(+), 54 deletions(-)

diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java
index aeef453..2849e30 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpOperationsUserNotificationServiceImpl.java
@@ -30,22 +30,15 @@
             XpOperationsUserNotificationPageQuery query) {
 
         // 创建分页对象
-        Page<XpOperationsUserNotification> page = new Page<>(
-            query.getPageNum(),
-            query.getPageSize()
-        );
-
+        PageInfo<XpOperationsUserNotification> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         // 执行分页查询
         Page<XpOperationsUserNotification> resultPage = baseMapper.selectNotificationPageByUserId(
-            page,
+            pageInfo,
             query
         );
 
         // 封装分页结果
-        PageInfo<XpOperationsUserNotification> pageInfo = new PageInfo<>();
         pageInfo.setRecords(resultPage.getRecords());
-        pageInfo.setTotal(resultPage.getTotal());
-
         return pageInfo;
     }
     @Override
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAgreement.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAgreement.java
index a9a3b0d..95ec191 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAgreement.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpAgreement.java
@@ -28,7 +28,7 @@
     @TableId("id")
     private Long id;
 
-    @ApiModelProperty(value = "类型 1=用户服务协议 2=平台隐私政策 3=敏感个人信息处理情况说明 4=向第三方提供个人信息情况的说明 5=乘车须知 6=计费规则说明")
+    @ApiModelProperty(value = "类型 1=小鹏Robotaxi隐私政策 2=个人信息收集清单 3=敏感个人信息处理情况说明 4=向第三方提供个人信息情况的说明 5=乘车须知 6=计费规则说明 7=权限说明 8=运维APP-小鹏Robotaxi自动驾驶出行运维隐私政策 9=运维APP-第三方共享信息清单 10=运维APP-个人信息收集清单 11=运维APP-权限调用")
     @TableField("content_type")
     private Integer contentType;
 
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/I18nKeyConstant.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/I18nKeyConstant.java
index dd3493c..21e31ad 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/I18nKeyConstant.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/I18nKeyConstant.java
@@ -12,4 +12,5 @@
     String REPAIR_MONEY_TOO_LONG = "repair.money.too.long";
     String TASK_SAVE_ERROR = "task.save.error";
     String TASK_VEHICLE_NOT_EXIST = "task.vehicle.not.exist";
+    String ACCIDENT_TYPE_NOT_EXIST = "accident.type.not.exist";
 }
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/exportExcel/XpTaskExportExcel.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/exportExcel/XpTaskExportExcel.java
index c4de55e..2c456c8 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/exportExcel/XpTaskExportExcel.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/exportExcel/XpTaskExportExcel.java
@@ -25,7 +25,7 @@
     @Excel(name = "车牌",width = 20)
     private String plateNumber;
     @ApiModelProperty(value = "任务类别1常规 2事故")
-    @Excel(name = "任务类别",width = 20)
+    @Excel(name = "任务类别",width = 20, replace = {"常规_1","事故_2"})
     private Integer taskCategory;
     @ApiModelProperty(value = "类型")
     @Excel(name = "类型",width = 40)
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
index 90dcb63..1cf6511 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -1852,6 +1852,12 @@
             Map<Long, List<XpErrorType>> errorType = errorTypeMapper.selectList(new LambdaQueryWrapper<XpErrorType>()
                             .in(XpErrorType::getId, Arrays.asList(task.getTaskTypeId().split(","))))
                     .stream().collect(Collectors.groupingBy(XpErrorType::getParentId));
+            if (CollUtil.isEmpty(errorType)) {
+                throw new ServiceException(
+                        "事故类型不存在",
+                        I18nKeyConstant.ACCIDENT_TYPE_NOT_EXIST
+                );
+            }
             List<XpErrorType> xpErrorTypes = errorType.get(0L);
             for (XpErrorType xpErrorType : xpErrorTypes) {
                 xpErrorType.setChild(errorType.get(xpErrorType.getId()));
diff --git a/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages.properties b/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages.properties
index 9c05f19..3526205 100644
--- a/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages.properties
+++ b/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages.properties
@@ -4,4 +4,5 @@
 vehicle.not.exist=车辆不存在
 repair.money.too.long=维修费用不能超过10字符
 task.save.error=获取车辆实时定位信息失败,请稍后重试
-task.vehicle.not.exist=上报失败,未获取到车辆信息
\ No newline at end of file
+task.vehicle.not.exist=上报失败,未获取到车辆信息
+accident.type.not.exist=事故类型不存在
\ No newline at end of file
diff --git a/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_en_US.properties b/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_en_US.properties
index f2aab7b..79609c6 100644
--- a/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_en_US.properties
+++ b/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_en_US.properties
@@ -5,4 +5,5 @@
 repair.money.too.long=The maintenance cost cannot exceed 10 characters
 task.save.error=Failed to obtain the real-time positioning information of the vehicle. Please try again later
 task.vehicle.not.exist=The report failed and no vehicle information was obtained
+accident.type.not.exist=The accident type does not exist.
 task.rule.not.config=The vehicle accident task allocation rules have not been configured
diff --git a/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_zh_CN.properties b/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_zh_CN.properties
index df7c1bf..982097a 100644
--- a/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_zh_CN.properties
+++ b/xp-robotaxi-maintenance-boot/src/main/resources/i18n/messages_zh_CN.properties
@@ -5,4 +5,5 @@
 repair.money.too.long=维修费用不能超过10字符
 task.save.error=获取车辆实时定位信息失败,请稍后重试
 task.vehicle.not.exist=上报失败,未获取到车辆信息
+accident.type.not.exist=事故类型不存在
 task.rule.not.config=未配置车辆事故任务分配规则
\ No newline at end of file
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java
index dd2a86b..a1cf1a4 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAgreementController.java
@@ -44,13 +44,13 @@
 
     @ApiOperation(value = "获取协议/隐私政策",tags = {"运维APP-个人中心"},response = XpAgreementVo.class)
     @GetMapping("/base/v1/privacy/content/{type}")
-    public R<XpAgreementVo> getAppContent(@ApiParam(name = "type", value = "类型 1=用户服务协议 2=平台隐私政策 ") @PathVariable Integer type) {
+    public R<XpAgreementVo> getAppContent(@ApiParam(name = "type", value = "类型 8=运维APP-小鹏Robotaxi自动驾驶出行运维隐私政策 9=运维APP-第三方共享信息清单 10=运维APP-个人信息收集清单 11=运维APP-权限调用") @PathVariable Integer type) {
         return R.ok(xpAgreementService.getContentByType(type));
     }
 
     @ApiOperation(value = "获取协议",tags = {"管理后台-内容中心"})
     @GetMapping("/api/v1/agreement/content/{type}")
-    public R<XpAgreement> getAgreementContent(@ApiParam(name = "type", value = "类型 1=用户服务协议 2=平台隐私政策 3=敏感个人信息处理情况说明 4=向第三方提供个人信息情况的说明 5=乘车须知 6=计费规则说明 7= 法律法规") @PathVariable Integer type) {
+    public R<XpAgreement> getAgreementContent(@ApiParam(name = "type", value = "类型 1=小鹏Robotaxi隐私政策 2=个人信息收集清单 3=敏感个人信息处理情况说明 4=向第三方提供个人信息情况的说明 5=乘车须知 6=计费规则说明 7=权限说明 8=运维APP-小鹏Robotaxi自动驾驶出行运维隐私政策 9=运维APP-第三方共享信息清单 10=运维APP-个人信息收集清单 11=运维APP-权限调用") @PathVariable Integer type) {
         return R.ok(xpAgreementService.getAgreementContent(type));
     }
     @ApiOperation(value = "保存协议",tags = {"管理后台-内容中心"})
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/XpAgreementDTO.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/XpAgreementDTO.java
index 03d498d..082bdad 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/XpAgreementDTO.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/dto/XpAgreementDTO.java
@@ -17,7 +17,7 @@
 @ApiModel("协议数据传输对象")
 public class XpAgreementDTO {
     @NotNull(message = "协议类型不能为空")
-    @ApiModelProperty(value = "类型 1=用户服务协议 2=平台隐私政策 3=敏感个人信息处理情况说明 4=向第三方提供个人信息情况的说明 5=乘车须知 6=计费规则说明")
+    @ApiModelProperty(value = "类型 1=小鹏Robotaxi隐私政策 2=个人信息收集清单 3=敏感个人信息处理情况说明 4=向第三方提供个人信息情况的说明 5=乘车须知 6=计费规则说明 7=权限说明 8=运维APP-小鹏Robotaxi自动驾驶出行运维隐私政策 9=运维APP-第三方共享信息清单 10=运维APP-个人信息收集清单 11=运维APP-权限调用")
     private Integer contentType;
 
     @NotBlank(message = "协议内容不能为空")
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAgreementServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAgreementServiceImpl.java
index 35aec32..3067c03 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAgreementServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpAgreementServiceImpl.java
@@ -106,8 +106,8 @@
             this.save(xpAgreement);
         }
 
-        // 判断是否需要发送通知(用户服务协议=1 或 平台隐私政策=2)
-        if (dto.getContentType() != null && (dto.getContentType() == 1 || dto.getContentType() == 2)) {
+        // 判断是否需要发送通知 8=运维APP-小鹏Robotaxi自动驾驶出行运维隐私政策 9=运维APP-第三方共享信息清单 10=运维APP-个人信息收集清单 11=运维APP-权限调用
+        if (dto.getContentType() != null && (dto.getContentType() == 8 || dto.getContentType() == 9 || dto.getContentType() == 10 || dto.getContentType() == 11)) {
             // 发送协议更新提示通知(type=9)
             sendAgreementUpdateNotification(dto.getContentType());
             // 发送协议授权通知(type=10)
@@ -170,10 +170,15 @@
      * @return 协议类型名称
      */
     private String getAgreementTypeName(Integer contentType) {
-        if (contentType == 1) {
-            return "用户服务协议";
-        } else if (contentType == 2) {
-            return "平台隐私政策";
+        switch (contentType) {
+            case 8:
+                return "小鹏Robotaxi自动驾驶出行运维隐私政策";
+            case 9:
+                return "第三方共享信息清单";
+            case 10:
+                return "个人信息收集清单";
+            case 11:
+                return "权限调用";
         }
         return "协议";
     }
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderEvaluateServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderEvaluateServiceImpl.java
index a433a02..9aabf99 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderEvaluateServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderEvaluateServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xiaopeng.api.dto.account.UcUserInfo;
 import com.xiaopeng.api.feignClient.account.UserResourcesClient;
@@ -54,6 +55,31 @@
 
     @Override
     public PageInfo<OrderEvaluatePageVO> pageList(OrderEvaluatePageQuery query) {
+        List<Long> vehicleIdsFilter = null;
+        if (StringUtils.isNotBlank(query.getPlateNumber())) {
+            R<List<XpVehicle>> vehicleResult = xpVehicleClient.listByPlateNumber(query.getPlateNumber());
+            if (vehicleResult == null || CollectionUtils.isEmpty(vehicleResult.getData())) {
+                return buildEmptyEvaluatePage(query);
+            }
+            vehicleIdsFilter = vehicleResult.getData().stream()
+                    .map(XpVehicle::getId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(vehicleIdsFilter)) {
+                return buildEmptyEvaluatePage(query);
+            }
+        }
+
+        Long appUserIdFilter = null;
+        if (StringUtils.isNotBlank(query.getPhoneNumber())) {
+            UcUserInfo userByMobile = userResourcesClient.getUserByMobile(query.getPhoneNumber());
+            if (userByMobile == null || userByMobile.getUid() == null) {
+                return buildEmptyEvaluatePage(query);
+            }
+            appUserIdFilter = userByMobile.getUid();
+        }
+
         // 1. 构建查询条件
         LambdaQueryWrapper<XpOrderEvaluate> wrapper = new LambdaQueryWrapper<>();
 
@@ -70,19 +96,22 @@
         if (Objects.nonNull(query.getOrderRating())) {
             wrapper.eq(XpOrderEvaluate::getOrderRating, query.getOrderRating());
         }
+        if (!CollectionUtils.isEmpty(vehicleIdsFilter)) {
+            wrapper.in(XpOrderEvaluate::getVehicleId, vehicleIdsFilter);
+        }
+        if (Objects.nonNull(appUserIdFilter)) {
+            wrapper.eq(XpOrderEvaluate::getAppUserId, appUserIdFilter);
+        }
 
         // 排序:按评价时间降序
         wrapper.orderByDesc(XpOrderEvaluate::getEvaluateTime);
 
         // 2. 分页查询
         PageInfo<XpOrderEvaluate> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
-        PageInfo<XpOrderEvaluate> evaluatePage = this.page(pageInfo, wrapper);
+        Page<XpOrderEvaluate> evaluatePage = this.page(pageInfo, wrapper);
 
         if (CollectionUtils.isEmpty(evaluatePage.getRecords())) {
-            PageInfo<OrderEvaluatePageVO> resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize());
-            resultPage.setTotal(0L);
-            resultPage.setRecords(new ArrayList<>());
-            return resultPage;
+            return buildEmptyEvaluatePage(query);
         }
 
         // 3. 收集关联ID
@@ -107,16 +136,22 @@
         Map<Long, XpVehicle> vehicleMap = batchGetVehicles(vehicleIds);
         Map<Long, XpOrder> orderMap = batchGetOrders(orderIds);
 
-        // 5. 根据查询条件过滤(手机号、车牌号)
+        // 5. 组装 VO
         List<OrderEvaluatePageVO> voList = evaluatePage.getRecords().stream()
                 .map(evaluate -> convertToPageVO(evaluate, userInfoMap, vehicleMap, orderMap))
-                .filter(vo -> filterByQuery(vo, query))
                 .collect(Collectors.toList());
 
         // 6. 返回分页结果
         PageInfo<OrderEvaluatePageVO> resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize());
         resultPage.setTotal(evaluatePage.getTotal());
         resultPage.setRecords(voList);
+        return resultPage;
+    }
+
+    private PageInfo<OrderEvaluatePageVO> buildEmptyEvaluatePage(OrderEvaluatePageQuery query) {
+        PageInfo<OrderEvaluatePageVO> resultPage = new PageInfo<>(query.getPageNum(), query.getPageSize());
+        resultPage.setTotal(0L);
+        resultPage.setRecords(new ArrayList<>());
         return resultPage;
     }
 
@@ -225,28 +260,5 @@
         }
 
         return vo;
-    }
-
-    /**
-     * 根据查询条件过滤
-     */
-    private boolean filterByQuery(OrderEvaluatePageVO vo, OrderEvaluatePageQuery query) {
-        // 手机号过滤
-        if (StringUtils.isNotBlank(query.getPhoneNumber())) {
-            if (StringUtils.isBlank(vo.getPhoneNumber()) ||
-                    !vo.getPhoneNumber().contains(query.getPhoneNumber())) {
-                return false;
-            }
-        }
-
-        // 车牌号过滤
-        if (StringUtils.isNotBlank(query.getPlateNumber())) {
-            if (StringUtils.isBlank(vo.getPlateNumber()) ||
-                    !vo.getPlateNumber().contains(query.getPlateNumber())) {
-                return false;
-            }
-        }
-
-        return true;
     }
 }
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 dfeca09..70d0552 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
@@ -42,6 +42,7 @@
 import com.xiaopeng.vehicleConvoy.service.IXpFleetVehicleService;
 import com.xiaopeng.vehicleConvoy.service.IXpVehicleAnnualRecordService;
 import com.xiaopeng.vehicleConvoy.service.IXpVehicleService;
+import com.xiaopeng.vehicleConvoy.util.AliOssDownloadUtil;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -105,6 +106,7 @@
     private final TokenService tokenService;
     private final XpVehicleRepairClient xpVehicleRepairClient;
     private final AliOssService aliOssService;
+    private final AliOssDownloadUtil aliOssDownloadUtil;
     /**
      * 根据ID列表批量查询车辆信息(内部接口)
      *
@@ -685,8 +687,15 @@
         List<XpVehicleExportExcel> exportList = BeanUtil.copyToList(dataList, XpVehicleExportExcel.class);
         for (XpVehicleExportExcel xpVehicleExportExcel : exportList) {
             if (StringUtils.isNotBlank(xpVehicleExportExcel.getVehiclePictures())) {
-                JSONObject jsonObject = JSONObject.parseObject(xpVehicleExportExcel.getVehiclePictures());
-                xpVehicleExportExcel.setVehiclePictures(jsonObject.containsKey("url") ? jsonObject.getString("url") : "");
+
+                String pictureJSONObject = aliOssDownloadUtil.getPictureJSONObject(xpVehicleExportExcel.getVehiclePictures());
+                if (StringUtils.isNotBlank(pictureJSONObject)) {
+                    JSONObject jsonObject = JSONObject.parseObject(pictureJSONObject);
+                    xpVehicleExportExcel.setVehiclePictures(jsonObject.containsKey("url") ? jsonObject.getString("url") : "");
+                }
+            }
+            if (Integer.valueOf(2).equals(xpVehicleExportExcel.getStatus()) && Integer.valueOf(1).equals(xpVehicleExportExcel.getOperatingStatus())) {
+                xpVehicleExportExcel.setStatus(4);
             }
         }
         // 3. 生成Excel
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/exportExcel/XpVehicleExportExcel.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/exportExcel/XpVehicleExportExcel.java
index 82cfdbd..6199c8e 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/exportExcel/XpVehicleExportExcel.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/exportExcel/XpVehicleExportExcel.java
@@ -44,7 +44,7 @@
     private String procurementSource;
 
     @ApiModelProperty(value = "车辆状态")
-    @Excel(name = "车辆状态", width = 15, replace = {"待完善_1", "待运营_2", "保险/年检过期_3"})
+    @Excel(name = "车辆状态", width = 15, replace = {"待完善_1", "待运营_2", "保险/年检过期_3", "运营_4"})
     private Integer status;
 
     @ApiModelProperty(value = "运营状态 1运营中 2维修中 3已收车 4车辆异常")
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/AliOssDownloadUtil.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/AliOssDownloadUtil.java
new file mode 100644
index 0000000..07584ab
--- /dev/null
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/AliOssDownloadUtil.java
@@ -0,0 +1,87 @@
+package com.xiaopeng.vehicleConvoy.util;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.xiaopeng.evi.oss.service.AliOssService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Objects;
+
+/**
+ * @author MiTao
+ * @date 2026-03-25 11:24
+ *
+ */
+@Slf4j
+@Component
+public class AliOssDownloadUtil {
+
+    @Autowired
+    private AliOssService aliOssService;
+
+    public String getPictureJsonArray(String json) {
+        JSONArray res = new JSONArray();
+        if (json == null || json.isEmpty()) {
+            return res.toJSONString();
+        }
+
+        if (json.startsWith("{")) {
+            JSONObject jsonObject = JSONObject.parseObject(json);
+            if (Objects.isNull(jsonObject)) {
+                return res.toJSONString();
+            }
+            String downloadUrl = "";
+            try {
+                downloadUrl = aliOssService.getDownloadUrl(
+                        jsonObject.getString("id"), jsonObject.getString("name"), true);
+            } catch (UnsupportedEncodingException e) {
+                log.error("获取图片下载地址失败", e);
+            }
+            jsonObject.put("url", downloadUrl);
+            res.add(jsonObject);
+
+        } else if (json.startsWith("[")) {
+            JSONArray jsonArray = JSONArray.parseArray(json);
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                if (Objects.isNull(jsonObject)) {
+                    continue;
+                }
+                String downloadUrl = "";
+                try {
+                    downloadUrl = aliOssService.getDownloadUrl(
+                            jsonObject.getString("id"), jsonObject.getString("name"), true);
+                } catch (UnsupportedEncodingException e) {
+                    log.error("获取图片下载地址失败", e);
+                }
+                jsonObject.put("url", downloadUrl);
+            }
+            res = jsonArray;
+        }
+        return res.toJSONString();
+    }
+
+    /**
+     * JSONObject类型图片
+     * @param json
+     * @return
+     */
+    public String getPictureJSONObject(String json){
+        JSONObject jsonObject = JSONObject.parseObject(json);
+        if (Objects.isNull(jsonObject)) {
+            return new JSONObject().toJSONString();
+        }
+        String downloadUrl = jsonObject.getString("url");
+        try {
+            downloadUrl = aliOssService.getDownloadUrl(
+                    jsonObject.getString("id"), jsonObject.getString("name"), true);
+        } catch (UnsupportedEncodingException e) {
+            log.error("获取图片下载地址失败", e);
+        }
+        jsonObject.put("url", downloadUrl);
+        return jsonObject.toJSONString();
+    }
+}

--
Gitblit v1.7.1