xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -19,10 +19,13 @@ 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.exception.ServiceException; 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; @@ -62,6 +65,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; /** * <p> @@ -82,6 +86,7 @@ private MongoTemplate mongoTemplate; @Resource private XpVehicleClient xpVehicleClient; private OrderTrajectoryService orderTrajectoryService; /** * 获取订单统计数据(内部接口) @@ -346,9 +351,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); @@ -361,10 +366,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)); } /** @@ -373,10 +378,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)); } @@ -464,7 +469,6 @@ } /** * + * 获取行程费用明细 @@ -532,7 +536,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); } @@ -567,7 +571,7 @@ @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){ if (dto.getOrderId() == null) { return R.fail("参数不能为空"); } String uid = request.getHeader("XP-Uid"); @@ -592,6 +596,7 @@ routeVo.setDirection(null != vehiclePosition ? vehiclePosition.getCourse() : 90); return R.ok(routeVo); } /** * 订单查询轨迹路线 */ @@ -599,7 +604,7 @@ @GetMapping("/api/v1/mini-program/order/queryOrderTrajectory") @XpClientCheck(checkToken = false, checkOtpToken = true) public R<RouteVo> queryOrderTrajectory(@RequestParam String orderId, HttpServletRequest request) { if(orderId == null){ if (orderId == null) { return R.fail("参数不能为空"); } List<OrderTrajectory> trajectories = mongoTemplate.find( @@ -610,7 +615,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(","); @@ -624,7 +629,6 @@ } /** * 当日取消订单次数 * @@ -632,13 +636,31 @@ * @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/order/getBluetoothToken/{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))) { throw new ServiceException("解锁失败"); } if(!Arrays.asList(4, 5, 6, 7, 8).contains(xpOrder.getStatus())){ throw new ServiceException("解锁失败"); } String token = redisService.getCacheObject("rt:bluetooth:unlock:order:" + orderId); if (StringUtils.isBlank(token)) { throw new ServiceException("解锁失败"); } return R.ok(token); } } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -642,9 +642,25 @@ Long userId = order.getAppUserId(); if (order.getStatus() == 1) { order.setStatus(0); Long appUserId = order.getAppUserId(); order.setAppUserId(null); baseMapper.updateById(order); order.setAppUserId(appUserId); redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 0, 24L, TimeUnit.HOURS); //删除蓝牙秘钥 String token = redisService.getCacheObject("rt:bluetooth:unlock:order:" + order.getId()); if(StringUtils.isNotBlank(token)){ redisService.deleteObject("rt:bluetooth:unlock:" + token); redisService.deleteObject("rt:bluetooth:unlock:order:" + order.getId()); XpVehicle xpVehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); BluetoothDeliverVo vo = new BluetoothDeliverVo(); vo.setVim(xpVehicle.getVehicleVin()); vo.setPassengerUid(order.getAppUserId()); BaseVehicleUserDto delete = bluetoothUnlockClient.delete(vo); if(null == delete || delete.getCode() != 0){ log.error("删除蓝牙解锁失败:{} {}", delete.getMsg(), order.getOrderNumber()); } } // 消息推送 Map<String, Object> params = new HashMap<>(); Map<String, Object> content = new HashMap<>(); @@ -1670,9 +1686,25 @@ addCruiseMission(xpVehicle.getId()); } order.setStatus(0); Long appUserId = order.getAppUserId(); order.setAppUserId(null); baseMapper.updateById(order); order.setAppUserId(appUserId); redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 0, 24L, TimeUnit.HOURS); //删除蓝牙秘钥 String token = redisService.getCacheObject("rt:bluetooth:unlock:order:" + order.getId()); if(StringUtils.isNotBlank(token)){ redisService.deleteObject("rt:bluetooth:unlock:" + token); redisService.deleteObject("rt:bluetooth:unlock:order:" + order.getId()); XpVehicle xpVehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); BluetoothDeliverVo vo = new BluetoothDeliverVo(); vo.setVim(xpVehicle.getVehicleVin()); vo.setPassengerUid(order.getAppUserId()); BaseVehicleUserDto delete = bluetoothUnlockClient.delete(vo); if(null == delete || delete.getCode() != 0){ log.error("删除蓝牙解锁失败:{} {}", delete.getMsg(), order.getOrderNumber()); } } XpOrderCancel xpOrderCancel = new XpOrderCancel(); xpOrderCancel.setOrderId(orderId); @@ -1696,7 +1728,23 @@ order.setStatus(0); order.setAppUserId(null); baseMapper.updateById(order); order.setAppUserId(appUserId); redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 0, 24L, TimeUnit.HOURS); //删除蓝牙秘钥 String token = redisService.getCacheObject("rt:bluetooth:unlock:order:" + order.getId()); if(StringUtils.isNotBlank(token)){ redisService.deleteObject("rt:bluetooth:unlock:" + token); redisService.deleteObject("rt:bluetooth:unlock:order:" + order.getId()); XpVehicle xpVehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); BluetoothDeliverVo vo = new BluetoothDeliverVo(); vo.setVim(xpVehicle.getVehicleVin()); vo.setPassengerUid(order.getAppUserId()); BaseVehicleUserDto delete = bluetoothUnlockClient.delete(vo); if(null == delete || delete.getCode() != 0){ log.error("删除蓝牙解锁失败:{} {}", delete.getMsg(), order.getOrderNumber()); } } XpOrderCancel xpOrderCancel = new XpOrderCancel(); xpOrderCancel.setOrderId(Long.valueOf(orderId)); xpOrderCancel.setUserId(1l); @@ -2044,10 +2092,26 @@ throw new RuntimeException("订单状态错误"); } order.setStatus(8); Long appUserId = order.getAppUserId(); order.setAppUserId(null); order.setTripEnd(LocalDateTime.now()); baseMapper.updateById(order); order.setAppUserId(appUserId); redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 8, 24L, TimeUnit.HOURS); //删除蓝牙秘钥 String token = redisService.getCacheObject("rt:bluetooth:unlock:order:" + orderId); if(StringUtils.isNotBlank(token)){ redisService.deleteObject("rt:bluetooth:unlock:" + token); redisService.deleteObject("rt:bluetooth:unlock:order:" + orderId); XpVehicle xpVehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); BluetoothDeliverVo vo = new BluetoothDeliverVo(); vo.setVim(xpVehicle.getVehicleVin()); vo.setPassengerUid(order.getAppUserId()); BaseVehicleUserDto delete = bluetoothUnlockClient.delete(vo); if(null == delete || delete.getCode() != 0){ log.error("删除蓝牙解锁失败:{} {}", delete.getMsg(), order.getOrderNumber()); } } // 根据订单所属开通城市id 查询定价 XpPricing pricing = bootCommonService.getXpPricing(order.getCityId(),order.getVehicleId()); @@ -3331,6 +3395,7 @@ throw new ServiceException("下发蓝牙token失败"); } if(deliver.getCode() != 0){ log.error("下发蓝牙token失败:{} {}", deliver.getMsg(), order.getOrderNumber()); throw new ServiceException(deliver.getMsg()); } log.info("下发蓝牙token成功:{} {}", deliver.getData(), order.getOrderNumber()); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaskOrderCancelUtil.java
@@ -2,7 +2,13 @@ import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto; import com.xiaopeng.api.feignClient.vehicleConvoy.BluetoothUnlockClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.vehicleConvoy.BluetoothDeliverVo; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.common.redis.service.RedisService; import com.xiaopeng.order.service.IXpOrderService; import lombok.extern.slf4j.Slf4j; @@ -10,6 +16,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.concurrent.TimeUnit; @@ -24,6 +31,12 @@ @Autowired private RedisService redisService; @Resource private XpVehicleClient xpVehicleClient; @Resource private BluetoothUnlockClient bluetoothUnlockClient; /** * 30秒执行一次 @@ -59,7 +72,22 @@ order.setAppUserId(null); order.setStatus(0); xpOrderService.updateById(order); order.setAppUserId(appUserId); redisService.setCacheObject("ORDER_STATUS:" + order.getId(), 0, 24L, TimeUnit.HOURS); //删除蓝牙秘钥 String token = redisService.getCacheObject("rt:bluetooth:unlock:order:" + order.getId()); if(StringUtils.isNotBlank(token)){ redisService.deleteObject("rt:bluetooth:unlock:" + token); redisService.deleteObject("rt:bluetooth:unlock:order:" + order.getId()); XpVehicle xpVehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); BluetoothDeliverVo vo = new BluetoothDeliverVo(); vo.setVim(xpVehicle.getVehicleVin()); vo.setPassengerUid(order.getAppUserId()); BaseVehicleUserDto delete = bluetoothUnlockClient.delete(vo); if(null == delete || delete.getCode() != 0){ log.error("删除蓝牙解锁失败:{} {}", delete.getMsg(), order.getOrderNumber()); } } } xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/config/WebSocketConfig.java
File was deleted xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PushMessageWebSocketHandler.java
File was deleted