From 5c66a7f02f62ce8f5293a59b467461b0468c4e51 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期六, 18 四月 2026 17:40:18 +0800
Subject: [PATCH] merge
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java | 20 ++
xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/vehicleConvoy/ServiceVehicleListDto.java | 22 ++
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/dto/UserOrderListDto.java | 26 ++
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 46 +++++
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpVehicleClient.java | 10 +
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/CustomerServiceController.java | 144 ++++++++++++++++
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java | 20 ++
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java | 7
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpVehicleService.java | 11 +
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpVehicleClientFallbackFactory.java | 11 +
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/ServiceOrderVo.java | 26 ++
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/UserOrderListVo.java | 27 +++
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java | 13 +
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignVo.java | 15 +
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java | 8
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java | 16
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/ServiceVehicleListVo.java | 15 +
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/OrderInfoVo.java | 51 +++++
18 files changed, 470 insertions(+), 18 deletions(-)
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/vehicleConvoy/ServiceVehicleListDto.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/vehicleConvoy/ServiceVehicleListDto.java
new file mode 100644
index 0000000..f12e025
--- /dev/null
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/vehicleConvoy/ServiceVehicleListDto.java
@@ -0,0 +1,22 @@
+package com.xiaopeng.api.dto.vehicleConvoy;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel
+public class ServiceVehicleListDto {
+ @ApiModelProperty("车牌号")
+ private String plateNumber;
+ @ApiModelProperty("vim码")
+ private String vim;
+ @ApiModelProperty("页码")
+ @NotNull(message = "页码不能为空")
+ private Integer pageNo;
+ @ApiModelProperty("每页数量")
+ @NotNull(message = "每页数量不能为空")
+ private Integer pageSize;
+}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpVehicleClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpVehicleClientFallbackFactory.java
index 845ed86..6eb47e0 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpVehicleClientFallbackFactory.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpVehicleClientFallbackFactory.java
@@ -1,6 +1,7 @@
package com.xiaopeng.api.factory.vehicleConvoy;
import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto;
+import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto;
import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
@@ -12,6 +13,7 @@
import org.springframework.stereotype.Component;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/**
@@ -105,6 +107,13 @@
public R<Boolean> getVehicleTrunkOpenStatus(Long uid, Long id) {
log.error("获取车辆后备箱开关状态失败,原因: {}", cause.getMessage());
return R.fail("获取车辆后备箱开关状态失败:" + cause.getMessage());
- }};
+ }
+
+ @Override
+ public R<List<XpVehicle>> getServiceVehicleList(ServiceVehicleListDto dto) {
+ log.error("获取服务车辆列表失败,原因: {}", cause.getMessage());
+ return R.fail("获取服务车辆列表失败:" + cause.getMessage());
+ }
+ };
}
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpVehicleClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpVehicleClient.java
index fcc42a6..4fddad9 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpVehicleClient.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpVehicleClient.java
@@ -1,6 +1,7 @@
package com.xiaopeng.api.feignClient.vehicleConvoy;
import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto;
+import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto;
import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto;
import com.xiaopeng.api.factory.vehicleConvoy.XpVehicleClientFallbackFactory;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
@@ -134,4 +135,13 @@
@PostMapping("/logan/inner/vi/vehicle/getVehicleTrunkOpenStatus")
R<Boolean> getVehicleTrunkOpenStatus(@RequestParam("uid") Long uid, @RequestParam("id") Long id);
+
+ /**
+ * 分页获取运营车辆列表
+ * @param dto
+ * @return
+ */
+ @PostMapping("/logan/inner/vehicle/getServiceVehicleList")
+ R<List<XpVehicle>> getServiceVehicleList(@RequestBody ServiceVehicleListDto dto);
+
}
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
index 3dca308..c0c942f 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -30,6 +30,7 @@
import com.xiaopeng.maintenance.service.XpTaskService;
import com.xiaopeng.maintenance.vo.TaskCleanDetailVO;
import com.xiaopeng.maintenance.vo.TaskDetectionDetailVO;
+import com.xiaopeng.maintenance.vo.TaskReassignVo;
import com.xiaopeng.maintenance.vo.VehicleListVO;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -50,6 +51,8 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+
+import static net.sf.jsqlparser.parser.feature.Feature.comment;
/**
* <p>
@@ -108,8 +111,8 @@
@ApiOperation(value = "工单改派", tags = "运维APP-任务中心")
@PostMapping("/maintenance-app/api/v1/task/reassign")
- public R<?> reassign(@RequestParam("taskId") Long taskId, @RequestParam("comment") String comment) {
- xpTaskService.reassign(taskId, comment);
+ public R<?> reassign(@RequestBody TaskReassignVo vo) {
+ xpTaskService.reassign(vo.getTaskId(), vo.getComment());
return R.ok();
}
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
index 2f90dbf..91a7c34 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
@@ -92,7 +92,7 @@
.eq(XpCruiseCheckInRecord::getDeleted, 0)
.eq(XpCruiseCheckInRecord::getCruiseCheckInRuleId, ruleId)
.eq(XpCruiseCheckInRecord::getOperationsUserId, uid)
- .last(" and DATE_FORMAT(check_in_time, '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d"));
+ .last(" and DATE(check_in_time) = DATE(NOW())"));
//构建返回结果
for (XpCruiseCheckInRuleLocation xpCruiseCheckInRuleLocation : list) {
XpCruiseCheckInRecord xpCruiseCheckInRecord = list1.stream().filter(x -> x.getCheckLocationId().equals(xpCruiseCheckInRuleLocation.getCheckLocationId())).findFirst().orElse(null);
@@ -132,7 +132,7 @@
.eq(XpCruiseCheckInRecord::getDeleted, 0)
.eq(XpCruiseCheckInRecord::getCheckLocationId, checkLocationId)
.eq(XpCruiseCheckInRecord::getOperationsUserId, dto.getOperationsUserId())
- .last(" and DATE_FORMAT(check_in_time, '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d')"));
+ .last(" and DATE(check_in_time) = DATE(NOW())"));
if(null != cruiseCheckInRecord){
throw new ServiceException("不能重复打卡", I18nKeyConstant.CANNOT_REPEAT_CLOCKING_IN);
}
@@ -169,7 +169,7 @@
.eq(XpCruiseCheckInRecord::getCruiseCheckInRuleId, dto.getId())
.eq(XpCruiseCheckInRecord::getDeleted, 0)
.eq(XpCruiseCheckInRecord::getOperationsUserId, uid)
- .last(" and DATE_FORMAT(check_in_time, '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d') order by check_in_time desc limit 1"));
+ .last(" and DATE(check_in_time) = DATE(NOW()) order by check_in_time desc limit 1"));
XpCruiseCheckInRuleLocation cruiseCheckInRuleLocation = null;
//没有打卡的情况,用第一个打卡点位
if(null == cruiseCheckInRecord){
@@ -232,6 +232,6 @@
.eq(XpCruiseCheckInRecord::getCheckLocationId, locationId)
.eq(XpCruiseCheckInRecord::getDeleted, 0)
.eq(XpCruiseCheckInRecord::getOperationsUserId, uid)
- .last(" and DATE_FORMAT(check_in_time, '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d')"));
+ .last(" and DATE(check_in_time) = DATE(NOW())"));
}
}
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 b2650fd..2416bfe 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
@@ -68,6 +68,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
@@ -1392,7 +1393,7 @@
throw new ServiceException("未配置车辆事故任务分配规则");
}
List<Long> excludedUserIds = Optional.ofNullable(task.getExcluded()).orElse(new ArrayList<>());
- excludedUserIds.add(Long.valueOf(task.getHandleUserId()));
+ excludedUserIds.addAll(Arrays.asList(task.getHandleUserId().split(",")).stream().map(Long::parseLong).collect(Collectors.toList()));
task.setExcluded(excludedUserIds);
Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData();
List<Long> roleIds = taskRuleRole.stream().map(XpTaskRuleRole::getRoleId).collect(Collectors.toList());
@@ -1402,7 +1403,9 @@
.filter(ids::contains)
.filter(id -> !excludedUserIds.contains(id))
.map(String::valueOf).collect(Collectors.joining(","));
- VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class);
+// VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class);
+ VehiclePosition vehiclePosition = new VehiclePosition();
+ vehiclePosition.setPoint(new GeoJsonPoint(103.12615621, 30.264561));
String handlerUser = chooseNearestAvailableOperationsUser(belongUserIds, vehiclePosition);
task.setHandleUserId(handlerUser);
if(handlerUser == null) {
@@ -1410,12 +1413,9 @@
noticeAdministrator(task);//TODO 需要通知管理员手动处理,考虑再AliPushUtil 中给管理员发送消息
}
updateById(task);
- // 存储事故处理日志
- XpTaskHandleDetail xpTaskHandleDetail = new XpTaskHandleDetail();
- xpTaskHandleDetail.setTaskId(task.getId());
- xpTaskHandleDetail.setResponsibleDescription(msg);
- xpTaskHandleDetailMapper.insert(xpTaskHandleDetail);
- sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit());
+ if(StringUtils.isNotBlank(task.getHandleUserId())){
+ sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit());
+ }
}
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignVo.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignVo.java
new file mode 100644
index 0000000..50218fa
--- /dev/null
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskReassignVo.java
@@ -0,0 +1,15 @@
+package com.xiaopeng.maintenance.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class TaskReassignVo {
+ @ApiModelProperty("任务id")
+ private Long taskId;
+
+ @ApiModelProperty("说明")
+ private String comment;
+}
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/CustomerServiceController.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/CustomerServiceController.java
new file mode 100644
index 0000000..ad80371
--- /dev/null
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/CustomerServiceController.java
@@ -0,0 +1,144 @@
+package com.xiaopeng.order.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xiaopeng.api.dto.account.UcUserInfo;
+import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto;
+import com.xiaopeng.api.feignClient.account.UserResourcesClient;
+import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
+import com.xiaopeng.api.model.order.XpOrder;
+import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
+import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.utils.StringUtils;
+import com.xiaopeng.order.dto.UserOrderListDto;
+import com.xiaopeng.order.service.IXpOrderService;
+import com.xiaopeng.order.vo.OrderInfoVo;
+import com.xiaopeng.order.vo.ServiceOrderVo;
+import com.xiaopeng.order.vo.ServiceVehicleListVo;
+import com.xiaopeng.order.vo.UserOrderListVo;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 提供三方客服系统接口
+ */
+@RestController
+@RequestMapping("/logan/rt/customerService")
+public class CustomerServiceController {
+
+ @Resource
+ private XpVehicleClient xpVehicleClient;
+
+ @Resource
+ private IXpOrderService xpOrderService;
+
+ @Resource
+ private UserResourcesClient userResourcesClient;
+
+
+ /**
+ * 1. 判断 VIN 是否为 robotaxi 车辆
+ * @param vim
+ * @return
+ */
+ @GetMapping("/isRobotaxi/{vim}")
+ @ApiOperation(value = "判断 VIN 是否为 robotaxi 车辆", notes = "客服系统对接")
+ @ApiImplicitParam(name = "vim", value = "VIN码", required = true, dataType = "string", paramType = "path")
+ public R<Boolean> isRobotaxi(@PathVariable String vim){
+ if(StringUtils.isEmpty(vim)){
+ return R.fail("VIM码不能为空");
+ }
+ XpVehicle xpVehicle = xpVehicleClient.findByVehicleVin(vim).getData();
+ if(null != xpVehicle){
+ return R.ok(true);
+ }
+ return R.ok(false);
+ }
+
+
+ /**
+ * 2. 根据 VIN 查询在途/最近订单客户手机号
+ * @param vim
+ * @return
+ */
+ @GetMapping("/getServiceOrder/{vim}")
+ @ApiOperation(value = "根据 VIN 查询在途/最近订单客户手机号", notes = "客服系统对接")
+ @ApiImplicitParam(name = "vim", value = "VIN码", required = true, dataType = "string", paramType = "path")
+ public R<ServiceOrderVo> getServiceOrder(@PathVariable String vim){
+ if(StringUtils.isEmpty(vim)){
+ return R.fail("VIM码不能为空");
+ }
+ XpVehicle xpVehicle = xpVehicleClient.findByVehicleVin(vim).getData();
+ if(null == xpVehicle){
+ return R.fail("VIM码不存在");
+ }
+ XpOrder one = xpOrderService.getOne(new QueryWrapper<XpOrder>().eq("vehicle_id", xpVehicle.getId())
+ .eq("is_deleted", 0).last(" order by create_time desc limit 1"));
+ if(null == one){
+ return R.ok(new ServiceOrderVo());
+ }
+ ServiceOrderVo vo = new ServiceOrderVo();
+ vo.setOrderId(one.getId());
+ UcUserInfo ucUserInfo = userResourcesClient.getBaseUserByUid(one.getAppUserId().toString());
+ vo.setCustomerPhone(null != ucUserInfo ? ucUserInfo.getMobile() : null);
+ vo.setHasActiveOrder(!Arrays.asList(0, 8, 9, 10).contains(one.getStatus()));
+ return R.ok(vo);
+ }
+
+
+ /**
+ * 3. 获取当前在运营车辆列表
+ * @param dto
+ * @return
+ */
+ @PostMapping("/getServiceVehicleList")
+ @ApiOperation(value = "获取当前在运营车辆列表", notes = "客服系统对接")
+ public R<List<ServiceVehicleListVo>> getServiceVehicleList(@RequestBody ServiceVehicleListDto dto){
+ R<List<XpVehicle>> serviceVehicleList = xpVehicleClient.getServiceVehicleList(dto);
+ if(serviceVehicleList.getCode() != 200){
+ return R.fail(serviceVehicleList.getMsg());
+ }
+ List<ServiceVehicleListVo> collect = serviceVehicleList.getData().stream().map(xpVehicle -> {
+ ServiceVehicleListVo vo = new ServiceVehicleListVo();
+ vo.setVim(xpVehicle.getVehicleVin());
+ vo.setPlateNumber(xpVehicle.getPlateNumber());
+ return vo;
+ }).collect(Collectors.toList());
+ return R.ok(collect);
+ }
+
+
+ /**
+ * 4. 根据 UID 查询用户是否有 RT 订单 & 订单列表
+ * @param dto
+ * @return
+ */
+ @PostMapping("/getUserOrderList")
+ @ApiOperation(value = "根据 UID 查询用户是否有 RT 订单 & 订单列表", notes = "客服系统对接")
+ public R<List<UserOrderListVo>> getUserOrderList(@RequestBody UserOrderListDto dto){
+ List<UserOrderListVo> userOrderList = xpOrderService.getUserOrderList(dto);
+ return R.ok(userOrderList);
+ }
+
+
+ /**
+ * 5. 根据订单号查询订单详情
+ * @param orderId
+ * @return
+ */
+ @GetMapping("/getOrderDetail/{orderId}")
+ @ApiOperation(value = "根据订单号查询订单详情", notes = "客服系统对接")
+ @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataType = "Long", paramType = "path")
+ public R<OrderInfoVo> getOrderDetail(@PathVariable Long orderId){
+ if(null == orderId){
+ return R.fail("订单ID不能为空");
+ }
+ return R.ok(xpOrderService.getOrderInfo(orderId));
+ }
+}
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/dto/UserOrderListDto.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/dto/UserOrderListDto.java
new file mode 100644
index 0000000..83615b3
--- /dev/null
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/dto/UserOrderListDto.java
@@ -0,0 +1,26 @@
+package com.xiaopeng.order.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel
+public class UserOrderListDto {
+ @ApiModelProperty("用户id")
+ @NotNull(message = "用户id不能为空")
+ private Long uid;
+ @ApiModelProperty("订单id")
+ private Long orderId;
+ @ApiModelProperty("订单状态")
+ private Integer orderStatus;
+ @ApiModelProperty("页码")
+ @NotNull(message = "页码不能为空")
+ private Integer pageNo;
+ @ApiModelProperty("每页数量")
+ @NotNull(message = "每页数量不能为空")
+ private Integer pageSize;
+}
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java
index cb4ebe7..0d80091 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java
@@ -14,6 +14,7 @@
import com.xiaopeng.api.vo.order.XpPointInfoVo;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
+import com.xiaopeng.order.dto.UserOrderListDto;
import com.xiaopeng.order.mangodb.model.OrderTrajectory;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
import com.xiaopeng.order.model.dto.XpOrderPayDto;
@@ -24,6 +25,10 @@
import com.xiaopeng.order.model.vo.XpOrderHistoryVO;
import com.xiaopeng.order.model.vo.XpOrderPageVO;
import com.xiaopeng.order.vo.OrderDetailVo;
+import com.xiaopeng.order.vo.OrderInfoVo;
+import com.xiaopeng.order.vo.UserOrderListVo;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
import java.math.BigDecimal;
import java.util.List;
@@ -242,4 +247,19 @@
*/
Integer getWaitPayOrderNum(String uid);
+
+ /**
+ * 根据 UID 查询用户是否有 RT 订单 & 订单列表
+ * @param dto
+ * @return
+ */
+ List<UserOrderListVo> getUserOrderList(UserOrderListDto dto);
+
+
+ /**
+ * 获取订单信息
+ * @param orderId
+ * @return
+ */
+ OrderInfoVo getOrderInfo(Long orderId);
}
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index 381eda9..0cbcea9 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -7,6 +7,7 @@
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.ImmutableMap;
@@ -69,6 +70,7 @@
import com.xiaopeng.common.security.utils.SecurityUtils;
import com.xiaopeng.order.constant.I18nKeyConstant;
import com.xiaopeng.order.dto.MileageDto;
+import com.xiaopeng.order.dto.UserOrderListDto;
import com.xiaopeng.order.job.base.QuartzManager;
import com.xiaopeng.order.job.base.TimeJobType;
import com.xiaopeng.order.job.jobs.*;
@@ -87,6 +89,8 @@
import com.xiaopeng.order.utils.*;
import com.xiaopeng.order.utils.holiday.HolidayUtil;
import com.xiaopeng.order.vo.OrderDetailVo;
+import com.xiaopeng.order.vo.OrderInfoVo;
+import com.xiaopeng.order.vo.UserOrderListVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
@@ -109,6 +113,7 @@
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.*;
+import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
@@ -3803,4 +3808,45 @@
);
return num.intValue();
}
+
+
+ /**
+ * 根据 UID 查询用户是否有 RT 订单 & 订单列表
+ * @param dto
+ * @return
+ */
+ @Override
+ public List<UserOrderListVo> getUserOrderList(UserOrderListDto dto) {
+ List<XpOrder> list = this.list(new QueryWrapper<XpOrder>().eq("app_user_id", dto.getUid())
+ .eq("is_deleted", 0)
+ .eq(dto.getOrderStatus() != null, "status", dto.getOrderStatus())
+ .eq(dto.getOrderId() != null, "id", dto.getOrderId())
+ .last(" order by create_time desc limit " + dto.getPageNo() + "," + dto.getPageSize())
+ );
+ List<UserOrderListVo> collect = list.stream().map(order -> {
+ UserOrderListVo vo = new UserOrderListVo();
+ vo.setOrderId(order.getId());
+ vo.setOrderStatus(order.getStatus());
+ vo.setOrderCreatedAt(order.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+
+ XpPoint startPoint = xpPointClient.queryById(order.getStartPointId()).getData();
+ vo.setPickupAddress(null != startPoint ? startPoint.getPointAddress() : null);
+ XpPoint endPoint = xpPointClient.queryById(order.getEndPointId()).getData();
+ vo.setDestAddress(null != endPoint ? endPoint.getPointAddress() : null);
+ vo.setTotalPrice(order.getOrderMoney());
+ return vo;
+ }).collect(Collectors.toList());
+ return collect;
+ }
+
+
+ /**
+ * 获取订单详情
+ * @param orderId
+ * @return
+ */
+ @Override
+ public OrderInfoVo getOrderInfo(Long orderId) {
+ return null;
+ }
}
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/OrderInfoVo.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/OrderInfoVo.java
new file mode 100644
index 0000000..80af97a
--- /dev/null
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/OrderInfoVo.java
@@ -0,0 +1,51 @@
+package com.xiaopeng.order.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel
+public class OrderInfoVo {
+ @ApiModelProperty("订单id")
+ private Long orderId;
+ @ApiModelProperty("订单状态(0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成)")
+ private Integer orderStatus;
+ @ApiModelProperty("预约上车点")
+ private String pickupAddress;
+ @ApiModelProperty("预约目的地")
+ private String destAddress;
+ @ApiModelProperty("靠边停车点")
+ private String pullOverAddress;
+ @ApiModelProperty("预计到达时间")
+ private String estimatedArrivalTime;
+ @ApiModelProperty("实际到达时间")
+ private String actualArrivalTime;
+ @ApiModelProperty("实际行驶里程(浮点数,如 21.1)")
+ private BigDecimal actualMileage;
+ @ApiModelProperty("订单总价")
+ private BigDecimal totalPrice;
+ @ApiModelProperty("起步价")
+ private BigDecimal startPrice;
+ @ApiModelProperty("等待费")
+ private BigDecimal waitFee;
+ @ApiModelProperty("里程费")
+ private BigDecimal mileageFee;
+ @ApiModelProperty("时长费")
+ private BigDecimal durationFee;
+ @ApiModelProperty("远途费")
+ private BigDecimal longDistanceFee;
+ @ApiModelProperty("优惠券使用金额")
+ private BigDecimal couponDiscount;
+ @ApiModelProperty("实际支付费用")
+ private BigDecimal actualPayment;
+ @ApiModelProperty("接单车辆 VIN")
+ private String vin;
+ @ApiModelProperty("接单车辆车牌号")
+ private String plateNumber;
+ @ApiModelProperty("取消原因类型(用户取消/系统取消/超时取消,仅已取消订单)")
+ private String cancelReasonType;
+
+}
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/ServiceOrderVo.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/ServiceOrderVo.java
new file mode 100644
index 0000000..8678116
--- /dev/null
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/ServiceOrderVo.java
@@ -0,0 +1,26 @@
+package com.xiaopeng.order.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class ServiceOrderVo {
+ /**
+ * 订单id
+ */
+ @ApiModelProperty("订单id")
+ private Long orderId;
+ /**
+ * 客户手机号
+ */
+ @ApiModelProperty("客户手机号")
+ private String customerPhone;
+ /**
+ * 是否有在途订单(布尔值)
+ */
+ @ApiModelProperty("是否有在途订单(布尔值)")
+ private Boolean hasActiveOrder;
+}
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/ServiceVehicleListVo.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/ServiceVehicleListVo.java
new file mode 100644
index 0000000..0b7df7e
--- /dev/null
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/ServiceVehicleListVo.java
@@ -0,0 +1,15 @@
+package com.xiaopeng.order.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class ServiceVehicleListVo {
+ @ApiModelProperty("vim码")
+ private String vim;
+ @ApiModelProperty("车牌号")
+ private String plateNumber;
+}
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/UserOrderListVo.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/UserOrderListVo.java
new file mode 100644
index 0000000..8220e67
--- /dev/null
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/UserOrderListVo.java
@@ -0,0 +1,27 @@
+package com.xiaopeng.order.vo;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel
+public class UserOrderListVo {
+ @ApiModelProperty("订单id")
+ private Long orderId;
+ @ApiModelProperty("订单状态(0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成)")
+ private Integer orderStatus;
+ @ApiModelProperty("下单时间")
+ private String orderCreatedAt;
+ @ApiModelProperty("预约上车点")
+ private String pickupAddress;
+ @ApiModelProperty("预约目的地")
+ private String destAddress;
+ @ApiModelProperty("到达目的地时间")
+ private String arrivedDestinationAt;
+ @ApiModelProperty("支付金额")
+ private BigDecimal totalPrice;
+}
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 ef7a9b2..16352b9 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
@@ -11,8 +11,10 @@
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mongodb.client.MongoCollection;
import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto;
+import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto;
import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto;
import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto;
import com.xiaopeng.api.feignClient.maintenance.*;
@@ -1097,8 +1099,13 @@
- public R<String> generateBluetoothUnlockToken(){
-
- return null;
+ /**
+ * 分页获取运营车辆列表
+ * @param dto
+ * @return
+ */
+ @PostMapping("/logan/inner/vehicle/getServiceVehicleList")
+ public R<List<XpVehicle>> getServiceVehicleList(@RequestBody ServiceVehicleListDto dto){
+ return R.ok(xpVehicleService.getServiceVehicleList(dto));
}
}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpVehicleService.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpVehicleService.java
index db51536..ee7be12 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpVehicleService.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpVehicleService.java
@@ -1,6 +1,8 @@
package com.xiaopeng.vehicleConvoy.service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto;
import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.common.core.web.page.PageInfo;
@@ -8,6 +10,7 @@
import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel;
import com.xiaopeng.vehicleConvoy.model.query.*;
import com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@@ -198,4 +201,12 @@
* @return
*/
Boolean getVehicleTrunkOpenStatus(String uid, Long id);
+
+
+ /**
+ * 分页获取运营车辆列表
+ * @param dto
+ * @return
+ */
+ List<XpVehicle> getServiceVehicleList(ServiceVehicleListDto dto);
}
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
index 739518c..49d193f 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -5,12 +5,14 @@
import cn.hutool.core.lang.Validator;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.ImmutableMap;
import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
+import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto;
import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto;
import com.xiaopeng.api.feignClient.automaticPilot.XpuVinClient;
import com.xiaopeng.api.feignClient.map.AdcFencePushClient;
@@ -1114,4 +1116,22 @@
return false;
}
}
+
+
+ /**
+ * 获取服务车辆列表
+ * @param dto
+ * @return
+ */
+ @Override
+ public List<XpVehicle> getServiceVehicleList(ServiceVehicleListDto dto) {
+ List<XpVehicle> list = this.list(new QueryWrapper<XpVehicle>().eq("vehicle_type", 2)
+ .eq("status", 2).eq("operating_status", 1)
+ .eq("is_deleted", 0).like(StringUtils.isNotBlank(dto.getPlateNumber()), "plate_number", dto.getPlateNumber())
+ .like(StringUtils.isNotBlank(dto.getVim()), "vehicle_vin", dto.getVim())
+ .last(" order by create_time desc limit " + dto.getPageNo() + "," + dto.getPageSize())
+ );
+
+ return list;
+ }
}
--
Gitblit v1.7.1