xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/pushMessage/XpPushMessageClientFallbackFactory.java
@@ -47,6 +47,11 @@ public R<String> pushOrderRoute(PushOrderRouteDTO dto) { return R.fail("通过车辆实时定位推送订单轨迹失败,"+cause.getMessage()); } @Override public R<String> sendOpenTrunk(SendMessageDTO dto) { return R.fail("通过发送是否开启倒计时失败,"+cause.getMessage()); } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/pushMessage/XpPushMessageClient.java
@@ -55,5 +55,13 @@ */ @PostMapping("/inner/v1/order/pushOrderRoute") R<String> pushOrderRoute(@RequestBody PushOrderRouteDTO dto); /** * 发送是否开启倒计时 * * @param dto 消息实体 * @return 发送是否开启倒计时 */ @PostMapping("/inner/websocket/order/sendOpenTrunk") R<String> sendOpenTrunk(@RequestBody SendMessageDTO dto); } xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/enums/PushMessageTypeEnum.java
@@ -12,7 +12,8 @@ ORDER_STATUS("ORDER_STATUS"), VEHICLE_LOCATION("VEHICLE_LOCATION"), ORDER_ROUTE("ORDER_ROUTE"); ORDER_ROUTE("ORDER_ROUTE"), OPEN_TRUNK("OPEN_TRUNK"); @Getter private String desc; xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -1342,19 +1342,34 @@ break; case 7: // 查询自动结束行程时间 Integer arriveTime = xpSystemSettingClient.getOrderFinishTime().getData(); // 添加自动结束行程定时任务job Map<String, ? extends Object> endTripJobMaps = new ImmutableMap.Builder<String, Long>(). put("id", xpOrder.getId()) .build(); QuartzManager.addJob( EndTripJob.class, (EndTripJob.name + xpOrder.getId()).toUpperCase(), TimeJobType.END_TRIP, DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(arriveTime)), endTripJobMaps ); if(xpOrder.getOpenTrunk() != 1){ Integer arriveTime = xpSystemSettingClient.getOrderFinishTime().getData(); // 添加自动结束行程定时任务job Map<String, ? extends Object> endTripJobMaps = new ImmutableMap.Builder<String, Long>(). put("id", xpOrder.getId()) .build(); QuartzManager.addJob( EndTripJob.class, (EndTripJob.name + xpOrder.getId()).toUpperCase(), TimeJobType.END_TRIP, DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(arriveTime)), endTripJobMaps ); // 推送倒计时消息 Map<String, Object> params = new HashMap<>(); Map<String, Object> content = new HashMap<>(); content.put("orderId", xpOrder.getId().toString()); content.put("isOpen", 1); params.put("type", PushMessageTypeEnum.OPEN_TRUNK.getDesc()); params.put("content", JSONObject.toJSONString(content)); params.put("timestamp", new Date().getTime() + ""); String message = JSONObject.toJSONString(params); SendMessageDTO sendMessageDTO = new SendMessageDTO(); sendMessageDTO.setMessage(message); sendMessageDTO.setAppUserId(String.valueOf(xpOrder.getAppUserId())); xpPushMessageClient.sendStatus(sendMessageDTO); } break; } xpOrder.setAppUserId(null); xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/controller/WebSocketController.java
@@ -157,6 +157,40 @@ } /** * 发送是否开启倒计时 * { * "appUserId":"-1", * {"type":"OPEN_TRUNK","content":"{\"orderId\":\"1983875114637811713\",\"isOpen\":1}","timestamp":"176569945845456"} * } * * @param dto 消息实体 * @return 操作结果 */ @ApiOperation(value = "发送是否开启倒计时") @PostMapping("/inner/websocket/order/sendOpenTrunk") public R<String> sendOpenTrunk(@RequestBody SendMessageDTO dto) { try { String message = dto.getMessage(); if (message.trim().isEmpty()) { return R.fail("消息内容不能为空"); } String appUserId = dto.getAppUserId(); if (appUserId.trim().isEmpty()) { return R.fail("用户id不能为空"); } int deviceCount = webSocketUserService.sendMessageToUser(appUserId, message); if (deviceCount > 0) { return R.ok("消息发送成功,发送到 " + deviceCount + " 个设备"); } else { return R.fail("用户不在线或发送失败"); } } catch (Exception e) { log.error("向用户发送消息失败", e); return R.fail("发送消息失败: " + e.getMessage()); } } /** * 向指定用户发送JSON格式消息 * @param appUserId 用户ID * @param request 请求参数 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -3,15 +3,20 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; 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.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.VehicleTemperatureDto; import com.xiaopeng.api.feignClient.automaticPilot.XpuVinClient; import com.xiaopeng.api.feignClient.operation.XpElectronicClient; import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient; import com.xiaopeng.api.feignClient.order.XpOrderClient; import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient; import com.xiaopeng.api.model.operation.XpElectronicFence; import com.xiaopeng.api.model.operation.XpElectronicFenceArea; import com.xiaopeng.api.model.order.XpOrder; @@ -23,7 +28,10 @@ import com.xiaopeng.api.vo.vehicleConvoy.VehiclesCommandVo; import com.xiaopeng.common.core.constant.CacheConstants; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.enums.OrderStatusEnum; import com.xiaopeng.common.core.enums.PushMessageTypeEnum; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.utils.DateUtils; import com.xiaopeng.common.core.utils.GeodesyUtil; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.redis.service.RedisService; @@ -99,6 +107,8 @@ private MongoTemplate mongoTemplate; @Autowired private RedisTemplate redisTemplate; @Autowired private XpPushMessageClient xpPushMessageClient; @Override public List<XpVehicle> listByIds(List<Long> ids) { @@ -266,10 +276,32 @@ throw new ServiceException("车辆非P档,无法开启后备箱", I18nKeyConstant.VEHICLE_NOT_P_GEAR); } vehiclesCommandVo.setCommandCode(VehiclesCommandEnum.DOOR_TRUNK_OPEN.getCommand()); if(xpOrder.getOpenTrunk()==0){ xpOrder.setOpenTrunk(1); } if(xpOrder.getOpenTrunk()==1){ xpOrder.setOpenTrunk(2); // 添加定时任务 xpOrderClient.updateOrderStatus(xpOrder.getId(),7); // 推送倒计时消息 消息推送 Map<String, Object> params = new HashMap<>(); Map<String, Object> content = new HashMap<>(); content.put("orderId", xpOrder.getId().toString()); content.put("isOpen", 1); params.put("type", PushMessageTypeEnum.OPEN_TRUNK.getDesc()); params.put("content", JSONObject.toJSONString(content)); params.put("timestamp", new Date().getTime() + ""); String message = JSONObject.toJSONString(params); SendMessageDTO sendMessageDTO = new SendMessageDTO(); sendMessageDTO.setMessage(message); sendMessageDTO.setAppUserId(String.valueOf(xpOrder.getAppUserId())); xpPushMessageClient.sendStatus(sendMessageDTO); } } try { String result = vehicleControlUtil.vehiclesCommand(vehiclesCommandVo, xpOrder.getAppUserId()); log.info("车辆控制结果:{}", result); xpOrderClient.updateOrder(xpOrder); return 1; } catch (Exception e) { log.error("车辆控制异常:{}", e.getMessage());