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