From fa93c9eefcbfcb7ba8b7a9d0b41ba2b4e3523ae5 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 22 四月 2026 11:07:23 +0800
Subject: [PATCH] [fix] 胶囊改进
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java | 100 +++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 78 insertions(+), 22 deletions(-)
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
index b399139..7c1f36f 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -16,13 +16,16 @@
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
+import com.xiaopeng.api.vo.operation.NearestNextVo;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.order.*;
import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.utils.StringUtils;
import com.xiaopeng.common.core.utils.WebUtils;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.order.mangodb.model.OrderTrajectory;
+import com.xiaopeng.order.mangodb.service.OrderTrajectoryService;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
import com.xiaopeng.order.model.dto.XpOrderOperateDTO;
import com.xiaopeng.order.model.dto.XpOrderPayDto;
@@ -51,6 +54,7 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -61,6 +65,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
/**
* <p>
@@ -79,8 +84,9 @@
private final RedisService redisService;
@Autowired
private MongoTemplate mongoTemplate;
- @Autowired
+ @Resource
private XpVehicleClient xpVehicleClient;
+ private OrderTrajectoryService orderTrajectoryService;
/**
* 获取订单统计数据(内部接口)
@@ -106,7 +112,7 @@
if (!list.isEmpty()) {
return R.ok(list.get(0).getId());
}
- return R.ok(0l);
+ return R.ok(0L);
}
@@ -205,7 +211,7 @@
*/
@ApiOperation(value = "订单分页列表", tags = {"管理后台-交易管理-订单管理"})
@PostMapping("/api/v1/order/pageList")
- public R<PageInfo<XpOrderPageVO>> pageList(@Validated @RequestBody XpOrderPageQuery query) {
+ public R<PageInfo<XpOrderPageVO>> pageList( @RequestBody XpOrderPageQuery query) {
PageInfo<XpOrderPageVO> pageInfo = xpOrderService.pageList(query);
return R.ok(pageInfo);
}
@@ -285,7 +291,7 @@
@ApiOperation(value = "取消/关闭订单", tags = {"管理后台-交易管理-订单管理"})
@PostMapping("/api/v1/order/cancelAndCloseById")
public R<?> cancelAndCloseById(@Validated @RequestBody XpOrderOperateDTO dto) {
- xpOrderService.cancelOrCloseOrder(dto.getOrderId(), dto.getType());
+ xpOrderService.cancelOrCloseOrder(dto.getOrderId(), dto.getType(),dto.getIsFree());
return R.ok();
}
@@ -295,7 +301,7 @@
* @param dto 改派请求参数
* @return 操作结果
*/
- @ApiOperation(value = "改派订单", tags = {"管理后台-交易管理-订单管理"}, notes = "车辆列表在vehicleConvoy服务")
+ @ApiOperation(value = "改派订单", tags = {"管理后台-交易管理-订单管理"}, notes = "车辆列表在 vehicleConvoy.availableList 服务")
@PostMapping("/api/v1/order/reassignById")
public R<?> reassignById(@Validated @RequestBody XpOrderReassignDTO dto) {
xpOrderService.reassignOrder(
@@ -335,6 +341,21 @@
}
/**
+ * 获取用户快捷胶囊 历史 时段 终点高点
+ */
+ @ApiOperation(value = "获取首页快捷胶囊推荐站点", notes = "根据当前起点和用户近30天有效订单,按场景优先推荐目的地;无匹配时返回空数据", tags = {"小程序-首页快捷胶囊"}, response = XpPointInfoVo.class)
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "startPointId", value = "当前首页起点站点ID", required = true, dataType = "Long", paramType = "query")
+ })
+ @GetMapping("/api/v1/mini-program/order/quick-capsule")
+ @XpClientCheck(checkToken = false, checkOtpToken = true)
+ public R<NearestNextVo> quickCapsule(@RequestParam Long startPointId,HttpServletRequest request) {
+ String uid = request.getHeader("XP-Uid");
+ return R.ok(xpOrderService.quickCapsule(uid,startPointId));
+
+ }
+
+ /**
* 获取订单详情
*/
@PutMapping("/api/v1/mini-program/order/orderDetail/{orderId}")
@@ -345,9 +366,9 @@
String uid = request.getHeader("XP-Uid");
OrderDetailVo orderDetailVo = xpOrderService.orderDetail(orderId, uid);
BigDecimal orderMoney = orderDetailVo.getOrderMoney();
- if(orderMoney==null){
+ if (orderMoney == null) {
orderDetailVo.setOrderMoneyStr("0.00");
- }else {
+ } else {
orderDetailVo.setOrderMoneyStr(orderMoney.setScale(2, RoundingMode.HALF_UP).toString());
}
return R.ok(orderDetailVo);
@@ -360,10 +381,10 @@
@ApiOperation(value = "获取历史下单成功起点10条数据列表", tags = {"小程序-获取历史下单成功起点10条数据列表"})
@GetMapping("/base/v1/mini-program/history/startPoints")
@XpClientCheck(checkToken = false, checkOtpToken = true)
- public R<List<XpHistoryStartPointsVo>> getHistoryStartPoints(double lon, double lat,Long electronicAreaId, HttpServletRequest request) {
+ public R<List<XpHistoryStartPointsVo>> getHistoryStartPoints(double lon, double lat, Long electronicAreaId, HttpServletRequest request) {
// uid已通过拦截器otp校验,可以直接使用
String uid = request.getHeader("XP-Uid");
- return R.ok(xpOrderService.getHistoryStartPoints(uid, lon, lat,electronicAreaId));
+ return R.ok(xpOrderService.getHistoryStartPoints(uid, lon, lat, electronicAreaId));
}
/**
@@ -372,10 +393,10 @@
@ApiOperation(value = "获取历史下单成功终点10条数据列表", tags = {"小程序-获取历史下单成功终点10条数据列表"})
@GetMapping("/base/v1/mini-program/history/endPoints")
@XpClientCheck(checkToken = false, checkOtpToken = true)
- public R<List<XpHistoryEndPointsVo>> getHistoryEndPoints(double lon, double lat,Long electronicAreaId, HttpServletRequest request) {
+ public R<List<XpHistoryEndPointsVo>> getHistoryEndPoints(double lon, double lat, Long electronicAreaId, HttpServletRequest request) {
// uid已通过拦截器otp校验,可以直接使用
String uid = request.getHeader("XP-Uid");
- return R.ok(xpOrderService.getHistoryEndPoints(uid, lon, lat,electronicAreaId));
+ return R.ok(xpOrderService.getHistoryEndPoints(uid, lon, lat, electronicAreaId));
}
@@ -391,6 +412,17 @@
return R.ok(xpOrderService.getActiveOrder(uid));
}
+ /**
+ * 获取正在进行中的订单_行程管理
+ */
+ @ApiOperation(value = "获取正在进行中的订单_行程管理", tags = {"小程序-获取正在进行中的订单_行程管理"})
+ @GetMapping("/api/v1/mini-program/order/active_itineraryManage")
+ @XpClientCheck(checkToken = false, checkOtpToken = true)
+ public R<XpOrderDetailVO> getActiveOrder_itineraryManage(HttpServletRequest request) {
+ // uid已通过拦截器otp校验,可以直接使用
+ String uid = request.getHeader("XP-Uid");
+ return R.ok(xpOrderService.getActiveOrder_itineraryManage(uid));
+ }
/**
* 查询历史订单列表
@@ -421,7 +453,6 @@
* +
* 取消订单
*/
-
@PutMapping("/api/v1/mini-program/order/cancel/{orderId}")
@ApiOperation(value = "取消订单", tags = {"小程序-取消订单"})
@XpClientCheck(checkToken = false, checkOtpToken = true)
@@ -451,7 +482,6 @@
return R.ok();
}
}
-
/**
@@ -511,8 +541,9 @@
@ApiOperation(value = "订单状态推送修改")
@PostMapping("/logan/inner/v1/order/updateOrderStatus")
public R<String> updateOrderStatus(@RequestParam Long orderId,
- @RequestParam Integer status) {
- return xpOrderService.updateOrderStatus(orderId, status);
+ @RequestParam Integer status,
+ @RequestParam Boolean orderException) {
+ return xpOrderService.updateOrderStatus(orderId, status, orderException);
}
/**
@@ -520,7 +551,7 @@
*/
@ApiOperation(value = "行驶中车辆异常,订单状态修改- 修改状态=7 再修改 金额-再将状态修改成8")
@PostMapping("/logan/inner/v1/order/carAbnormalUpdateOrderStatus")
- public R<String> carAbnormalUpdateOrderStatus(@RequestParam Long orderId ) {
+ public R<String> carAbnormalUpdateOrderStatus(@RequestParam Long orderId) {
// Integer status = OrderStatusEnum.SEE_OFF_GUESTS.getCode();
return xpOrderService.carAbnormalUpdateOrderStatus(orderId);
}
@@ -555,6 +586,9 @@
@PostMapping("/api/v1/mini-program/order/queryOrderRoute")
@XpClientCheck(checkToken = false, checkOtpToken = true)
public R<RouteVo> queryOrderRoute(@Validated @RequestBody QueryOrderRouteDTO dto, HttpServletRequest request) {
+ if (dto.getOrderId() == null) {
+ return R.fail("参数不能为空");
+ }
String uid = request.getHeader("XP-Uid");
// 查询订单信息
XpOrder xpOrder = xpOrderService.getById(dto.getOrderId());
@@ -577,6 +611,7 @@
routeVo.setDirection(null != vehiclePosition ? vehiclePosition.getCourse() : 90);
return R.ok(routeVo);
}
+
/**
* 订单查询轨迹路线
*/
@@ -584,7 +619,9 @@
@GetMapping("/api/v1/mini-program/order/queryOrderTrajectory")
@XpClientCheck(checkToken = false, checkOtpToken = true)
public R<RouteVo> queryOrderTrajectory(@RequestParam String orderId, HttpServletRequest request) {
- String uid = request.getHeader("XP-Uid");
+ if (orderId == null) {
+ return R.fail("参数不能为空");
+ }
List<OrderTrajectory> trajectories = mongoTemplate.find(
new Query(Criteria.where("orderId").is(Long.valueOf(orderId)))
.with(Sort.by(Sort.Direction.ASC, "locatetime")),
@@ -593,7 +630,7 @@
// 封装信息
RouteVo routeVo = new RouteVo();
List<LonLatDto> polyline = new ArrayList<>();
- if(!CollectionUtils.isEmpty(trajectories)){
+ if (!CollectionUtils.isEmpty(trajectories)) {
for (OrderTrajectory trajectory : trajectories) {
LonLatDto lonLatDto = new LonLatDto();
String[] split = trajectory.getLocation().split(",");
@@ -607,7 +644,6 @@
}
-
/**
* 当日取消订单次数
*
@@ -615,10 +651,30 @@
* @return 订单数量
*/
@PostMapping("/inner/order/todayCancellationCount")
- public R<Integer> todayCancellationCount(@RequestParam Long userId){
+ public R<Integer> todayCancellationCount(@RequestParam Long userId) {
long count = xpOrderService.count(new QueryWrapper<XpOrder>().eq("app_user_id", userId).eq("status", 0)
.eq("is_deleted", 0).last(" and DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d')"));
- return R.ok((int)count);
+ return R.ok((int) count);
}
-}
+
+
+ @ApiOperation(value = "通过订单id获取蓝牙开锁秘钥", tags = {"小程序-业务流程"})
+ @GetMapping("/api/v1/mini-program/bluetooth/getUnlocktToken/{orderId}")
+ @XpClientCheck(checkToken = false, checkOtpToken = true)
+ public R<String> getBluetoothToken(@PathVariable("orderId") Long orderId, HttpServletRequest request) {
+ String uid = request.getHeader("XP-Uid");
+ XpOrder xpOrder = xpOrderService.getById(orderId);
+ if (!Objects.equals(xpOrder.getAppUserId(), Long.valueOf(uid))) {
+ return R.ok();
+ }
+ if(!Arrays.asList(4, 5, 6, 7, 8).contains(xpOrder.getStatus())){
+ return R.ok();
+ }
+ String token = redisService.getCacheObject("rt:bluetooth:unlock:order:" + orderId);
+ if (StringUtils.isBlank(token)) {
+ return R.ok();
+ }
+ return R.ok(token);
+ }
+}
\ No newline at end of file
--
Gitblit v1.7.1