xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskClientFallbackFactory.java
@@ -21,6 +21,13 @@ // 降级策略: 返回 false (未上班状态) return R.fail("通过车辆id查询上一次保养记录失败,"+cause.getMessage()); } @Override public R saveVehicleAccidentError(Long vehicleId) { log.error("添加车辆事故任务失败, vehicleId={}, 错误信息: {}", vehicleId, cause.getMessage(), cause); return R.fail("添加车辆事故任务失败:" + cause.getMessage()); } }; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskRuleClientFallbackFactory.java
@@ -2,6 +2,7 @@ import com.xiaopeng.api.feignClient.maintenance.XpTaskRuleClient; import com.xiaopeng.api.model.maintenance.XpTaskRule; import com.xiaopeng.api.vo.maintenance.TaskRuleDetailVO; import com.xiaopeng.common.core.domain.R; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; @@ -20,6 +21,12 @@ cause.getMessage(), cause); return R.fail("查询运维规则失败,"+cause.getMessage()); } @Override public R<TaskRuleDetailVO> taskRuleAndRoleDetail() { log.error("查询运维规则详情失败 {}", cause.getMessage()); return R.fail("查询运维规则失败:" + cause.getMessage()); } }; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpCruiseOrderClientFallbackFactory.java
@@ -31,7 +31,7 @@ log.error("订单服务调用失败: {}", cause.getMessage()); return new XpCruiseOrderClient() { @Override public R<String> addCruiseOrder(XpCruiseOrder order) { public R<Long> addCruiseOrder(XpCruiseOrder order) { log.error("订单服务调用失败: {}", cause.getMessage()); return null; } @@ -43,19 +43,24 @@ } @Override public R<String> updateCruiseOrder(String vin) { public R<Long> updateCruiseOrder(String vin) { log.error("订单服务调用失败: {}", cause.getMessage()); return null; return R.fail("根据车辆VIN查询取消订单失败:" + cause.getMessage()); } @Override public R<String> closeCruiseOrder(String vin) { log.error("订单服务调用失败: {}", cause.getMessage()); return null; public R<Long> updateCruiseOrderId(Long orderId) { return R.fail("根据订单ID查询取消订单失败:" + cause.getMessage()); } @Override public R<XpCruiseOrder> getCruiseOrder(String orderId) { public R<Long> closeCruiseOrder(String vin) { log.error("订单服务调用失败: {}", cause.getMessage()); return R.fail("根据VIN码关闭巡游单失败"); } @Override public R<XpCruiseOrder> getCruiseOrder(Long orderId) { log.error("订单服务调用失败: {}", cause.getMessage()); return null; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationUserNotificationClient.java
@@ -33,5 +33,5 @@ * @return */ @PostMapping(value = "/inner/v1/notification/addBatch") public R<?> addNotificationBatch(@RequestBody List<XpOperationsUserNotification> notifications); R<?> addNotificationBatch(@RequestBody List<XpOperationsUserNotification> notifications); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskClient.java
@@ -8,6 +8,8 @@ import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; /** @@ -29,4 +31,14 @@ */ @GetMapping("/inner/xpTask/queryInfoByVehicleId") R<XpTask> queryInfoByVehicleId(@RequestParam("vehicleId") Long vehicleId); /** * 添加车辆事故任务 * @param vehicleId * @return */ @PostMapping("/api/v1/taskManagement/saveVehicleAccidentError") R saveVehicleAccidentError(@RequestParam Long vehicleId); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskRuleClient.java
@@ -5,6 +5,7 @@ import com.xiaopeng.api.model.maintenance.XpTask; import com.xiaopeng.api.model.maintenance.XpTaskRule; import com.xiaopeng.api.model.maintenance.XpTaskRuleRole; import com.xiaopeng.api.vo.maintenance.TaskRuleDetailVO; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; @@ -29,4 +30,12 @@ */ @GetMapping("/inner/xpTaskRule/queryDetail") R<XpTaskRule> queryDetail(); /** * 查询任务规则详情 * @return */ @GetMapping("/inner/v1/taskRule/taskRuleAndRoleDetail") R<TaskRuleDetailVO> taskRuleAndRoleDetail(); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpCruiseOrderClient.java
@@ -34,7 +34,7 @@ * @param order 订单信息 */ @PostMapping("/inner/cruiseOrder/addCruiseOrder") R<String> addCruiseOrder(@RequestBody XpCruiseOrder order); R<Long> addCruiseOrder(@RequestBody XpCruiseOrder order); /** @@ -53,14 +53,24 @@ * @param vin 订单信息 */ @PostMapping("/inner/cruiseOrder/updateCruiseOrder") R<String> updateCruiseOrder(@RequestParam String vin); R<Long> updateCruiseOrder(@RequestParam String vin); /** * 根据订单ID查询取消订单 * @param orderId * @return */ @PostMapping("/inner/cruiseOrder/updateCruiseOrderId") R<Long> updateCruiseOrderId(@RequestParam Long orderId); /** * 关闭 */ @PostMapping("/inner/cruiseOrder/closeCruiseOrder") R<String> closeCruiseOrder(@RequestParam String vin); R<Long> closeCruiseOrder(@RequestParam String vin); /** * 查询订单信息 @@ -68,5 +78,5 @@ * @param orderId 订单信息id */ @PostMapping("/inner/cruiseOrder/getCruiseOrder") R<XpCruiseOrder> getCruiseOrder(@RequestParam String orderId); R<XpCruiseOrder> getCruiseOrder(@RequestParam Long orderId); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java
@@ -29,7 +29,7 @@ @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("xp_task") @ApiModel(value="XpTask对象", description="任务管理") @ApiModel(value = "XpTask对象", description = "任务管理") public class XpTask extends BaseModel { private static final long serialVersionUID = 1L; @@ -43,7 +43,7 @@ @ApiModelProperty(value = "任务类别1常规 2事故") private Integer taskCategory; //1:车辆检查,2:车辆充电,3:车辆整备,4:整备洗车,5:车辆维修,6:车辆保养,7:车辆保险到期,8:车辆年检到期9:车辆运营资质到期 //1:车辆检查,2:车辆充电,3:车辆整备,4:整备洗车,5:车辆维修,6:车辆保养,7:车辆保险到期,8:车辆年检到期9:车辆运营资质到期 @ApiModelProperty(value = "任务类型id 任务类别为2时对应数据字典,多个逗号分割,为1的时候 枚举1车辆检查 2车辆充电 3车辆整备 4整备洗车 5车辆维修 6车辆保养 7车辆保险到期 8车辆年检到期 9车辆运营资质到期") private String taskTypeId; @@ -55,10 +55,6 @@ @ApiModelProperty(value = "任务描述图片") private String taskImage; @ApiModelProperty(value = "车辆id") private Long vehicleId; @@ -98,7 +94,6 @@ @ApiModelProperty(value = "状态 0=待到达 1=待处理 2=已完成 3=已取消") private Integer status; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpCruiseOrder.java
@@ -32,7 +32,7 @@ private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.NONE) private String id; private Long id; @ApiModelProperty(value = "车辆id") private Long vehicleId; @@ -83,7 +83,7 @@ @ApiModelProperty(value = "返程上次的订单id") @TableField("last_order_id") private String lastOrderId; private Long lastOrderId; @ApiModelProperty(value = "方向 1正2反") @TableField("order_reverse") xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskRuleDetailVO.java
File was renamed from xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskRuleDetailVO.java @@ -1,7 +1,5 @@ package com.xiaopeng.maintenance.vo; package com.xiaopeng.api.vo.maintenance; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import com.xiaopeng.api.model.maintenance.XpTaskRuleRole; import io.swagger.annotations.ApiModel; @@ -10,7 +8,6 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.List; xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskScheduleConstants.java
File was renamed from xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/TaskScheduleConstants.java @@ -1,4 +1,4 @@ package com.xiaopeng.maintenance.constant; package com.xiaopeng.api.vo.maintenance; /** * 定时任务常量类 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -26,7 +26,6 @@ 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.utils.SnowFlake; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.common.redis.service.RedisService; import io.swagger.annotations.Api; @@ -59,25 +58,21 @@ private RedisService redisService; @Resource private XpVehicleClient xpVehicleClient; @Resource private Snowflake snowflake; @PostMapping("/inner/pushOrder") public R<Boolean> pushOrder(@RequestBody PushOrderDto dto) { RtTask.Builder taskBuilder = RtTask.newBuilder(); SnowFlake snowFlake = new SnowFlake(0, 0); snowFlake.withStartTimestamp(1420041600000L); taskBuilder.setOrderId(dto.getOrderId().toString()); taskBuilder.setTaskId(snowFlake.nextId() + ""); if(dto.getOrderId().contains("XU")){ taskBuilder.setTaskType(OrderType.ORDER_TYPE_CRUISE); }else { taskBuilder.setTaskType(OrderType.ORDER_TYPE_ROBOTAXI); } //构建点位信息 Waypoint.Builder pointBuilderStart = Waypoint.newBuilder(); Waypoint.Builder pointBuilderEnd = Waypoint.newBuilder(); RtTaskList.Builder taskListBuilder = RtTaskList.newBuilder(); //巡游订单 if(dto.getOrderType().equals(com.xiaopeng.api.vo.OrderType.CRUISE_ORDER)){ RtTask.Builder taskBuilder = RtTask.newBuilder(); taskBuilder.setOrderId(dto.getOrderId().toString()); taskBuilder.setTaskId(snowflake.nextId() + ""); taskBuilder.setTaskType(OrderType.ORDER_TYPE_CRUISE); //构建起点坐标数据 pointBuilderStart.setWaypointId(dto.getOrderId() + "-001"); pointBuilderStart.setPointType(PointType.START_POINT); @@ -101,62 +96,68 @@ taskBuilder.addPoints(pointBuilderEnd); taskBuilder.setSequence(1); taskBuilder.addOrderPhase(OrderPhase.ROUTE_TO_CRUISE); taskListBuilder.addTasks(taskBuilder.build()); }else{ //用户订单 if(dto.getStage() == 1){ //构建车辆当前位置数据 pointBuilderStart.setWaypointId(dto.getOrderId() + "-JJ-001"); pointBuilderStart.setPointType(PointType.START_POINT); pointBuilderStart.setActionType(ActionType.ACTION_UNSPECIFIED); pointBuilderStart.setSequence(1); GeoPoint.Builder geoPointBuilder = GeoPoint.newBuilder(); geoPointBuilder.setLatitude(dto.getStartLatitude()); geoPointBuilder.setLongitude(dto.getStartLongitude()); pointBuilderStart.setPoint(geoPointBuilder.build()); taskBuilder.addPoints(pointBuilderStart); for (int i = 1; i < 3; i++) { RtTask.Builder taskBuilder = RtTask.newBuilder(); taskBuilder.setOrderId(dto.getOrderId().toString()); taskBuilder.setTaskId(snowflake.nextId() + ""); taskBuilder.setTaskType(OrderType.ORDER_TYPE_ROBOTAXI); if(i == 1){ VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(dto.getVin())), VehiclePosition.class); //构建车辆当前位置数据 pointBuilderStart.setWaypointId(dto.getOrderId() + "-JJ-001"); pointBuilderStart.setPointType(PointType.START_POINT); pointBuilderStart.setActionType(ActionType.ACTION_UNSPECIFIED); pointBuilderStart.setSequence(1); GeoPoint.Builder geoPointBuilder = GeoPoint.newBuilder(); geoPointBuilder.setLatitude(vehiclePosition.getPoint().getY()); geoPointBuilder.setLongitude(vehiclePosition.getPoint().getX()); pointBuilderStart.setPoint(geoPointBuilder.build()); taskBuilder.addPoints(pointBuilderStart); //构建上车点位置信息 pointBuilderEnd.setWaypointId(dto.getOrderId() + "-JJ-002"); pointBuilderEnd.setPointType(PointType.PICK_UP_POINT); pointBuilderEnd.setActionType(ActionType.PICK_UP); pointBuilderEnd.setSequence(2); geoPointBuilder = GeoPoint.newBuilder(); geoPointBuilder.setLatitude(dto.getStartLatitude()); geoPointBuilder.setLongitude(dto.getStartLongitude()); pointBuilderEnd.setPoint(geoPointBuilder.build()); taskBuilder.addPoints(pointBuilderEnd); taskBuilder.setSequence(1); taskBuilder.addOrderPhase(OrderPhase.ROUTE_TO_PICKUP); }else{ //构建上车点位置信息 pointBuilderStart.setWaypointId(dto.getOrderId() + "-SD-001"); pointBuilderStart.setPointType(PointType.PICK_UP_POINT); pointBuilderStart.setActionType(ActionType.PICK_UP); pointBuilderStart.setSequence(1); GeoPoint.Builder geoPointBuilder = GeoPoint.newBuilder(); geoPointBuilder.setLatitude(dto.getEndLatitude()); geoPointBuilder.setLongitude(dto.getEndLatitude()); pointBuilderStart.setPoint(geoPointBuilder.build()); taskBuilder.addPoints(pointBuilderStart); //构建上车点位置信息 pointBuilderEnd.setWaypointId(dto.getOrderId() + "-JJ-002"); pointBuilderEnd.setPointType(PointType.PICK_UP_POINT); pointBuilderEnd.setActionType(ActionType.PICK_UP); pointBuilderEnd.setSequence(2); geoPointBuilder = GeoPoint.newBuilder(); geoPointBuilder.setLatitude(dto.getStartLatitude()); geoPointBuilder.setLongitude(dto.getStartLongitude()); pointBuilderEnd.setPoint(geoPointBuilder.build()); taskBuilder.addPoints(pointBuilderEnd); taskBuilder.setSequence(i); taskBuilder.addOrderPhase(OrderPhase.ROUTE_TO_PICKUP); }else{ //构建上车点位置信息 pointBuilderStart.setWaypointId(dto.getOrderId() + "-SD-001"); pointBuilderStart.setPointType(PointType.PICK_UP_POINT); pointBuilderStart.setActionType(ActionType.PICK_UP); pointBuilderStart.setSequence(1); GeoPoint.Builder geoPointBuilder = GeoPoint.newBuilder(); geoPointBuilder.setLatitude(dto.getStartLatitude()); geoPointBuilder.setLongitude(dto.getStartLongitude()); pointBuilderStart.setPoint(geoPointBuilder.build()); taskBuilder.addPoints(pointBuilderStart); //构建下车点位置信息 pointBuilderEnd.setWaypointId(dto.getOrderId() + "-SD-002"); pointBuilderEnd.setPointType(PointType.END_POINT); pointBuilderEnd.setActionType(ActionType.DROP_OFF); pointBuilderEnd.setSequence(2); geoPointBuilder = GeoPoint.newBuilder(); geoPointBuilder.setLatitude(dto.getEndLatitude()); geoPointBuilder.setLongitude(dto.getEndLatitude()); pointBuilderEnd.setPoint(geoPointBuilder.build()); taskBuilder.addPoints(pointBuilderEnd); taskBuilder.setSequence(2); taskBuilder.addOrderPhase(OrderPhase.ROUTE_TO_DESTINATION); //构建下车点位置信息 pointBuilderEnd.setWaypointId(dto.getOrderId() + "-SD-002"); pointBuilderEnd.setPointType(PointType.END_POINT); pointBuilderEnd.setActionType(ActionType.DROP_OFF); pointBuilderEnd.setSequence(2); geoPointBuilder = GeoPoint.newBuilder(); geoPointBuilder.setLatitude(dto.getEndLatitude()); geoPointBuilder.setLongitude(dto.getEndLatitude()); pointBuilderEnd.setPoint(geoPointBuilder.build()); taskBuilder.addPoints(pointBuilderEnd); taskBuilder.setSequence(i); taskBuilder.addOrderPhase(OrderPhase.ROUTE_TO_DESTINATION); } taskListBuilder.addTasks(taskBuilder.build()); } } RtTaskList.Builder taskListBuilder = RtTaskList.newBuilder(); taskListBuilder.addTasks(taskBuilder.build()); long sequence = snowFlake.nextId(); long sequence = snowflake.nextId(); MqttPublishDto mqttPublishDto = xpuUtil.cloudCreateOrder(taskListBuilder.build(), dto.getVin(),sequence); //先将车辆修改状态,防止在异步通知之前被其他订单选中 if (!dto.getOrderId().contains("XU") && mqttPublishDto.getCode()== 200) { @@ -179,14 +180,12 @@ R<Boolean> cancelOrder(@RequestBody PushOrderDto dto) { OrderOperation.Builder operationBuilder = OrderOperation.newBuilder(); operationBuilder.setOrderId(dto.getOrderId().toString()); operationBuilder.setTaskId("CANCEL_MISSION_" + IdUtil.fastUUID()); operationBuilder.setTaskId(snowflake.nextId() + ""); if (dto.getOperation_type() != null) { operationBuilder.setOperationType(OrderOperationType.forNumber(dto.getOperation_type().getNumber())); } SnowFlake snowFlake = new SnowFlake(0, 0); snowFlake.withStartTimestamp(1420041600000L); long sequence = snowFlake.nextId(); long sequence = snowflake.nextId(); MqttPublishDto mqttPublishDto = xpuUtil.cloudOrderOperation(operationBuilder.build(), dto.getVin(), sequence); if (mqttPublishDto.getCode() == 200) { xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
@@ -1,6 +1,6 @@ package com.xiaopeng.automaticPilot.service; import cn.hutool.core.util.IdUtil; import cn.hutool.core.lang.Snowflake; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.google.protobuf.InvalidProtocolBufferException; @@ -14,6 +14,10 @@ import com.xiaopeng.api.dto.order.PopOrderDto; import com.xiaopeng.api.dto.pushMessage.PushOrderRouteDTO; import com.xiaopeng.api.dto.pushMessage.SendMessageDTO; import com.xiaopeng.api.feignClient.account.XpOperationUserClient; import com.xiaopeng.api.feignClient.account.XpOperationUserNotificationClient; import com.xiaopeng.api.feignClient.maintenance.XpTaskClient; import com.xiaopeng.api.feignClient.maintenance.XpTaskRuleClient; import com.xiaopeng.api.feignClient.map.XpMapClient; import com.xiaopeng.api.feignClient.operation.ReassignOrderClient; import com.xiaopeng.api.feignClient.operation.XpCruisePlanClient; @@ -21,13 +25,13 @@ import com.xiaopeng.api.feignClient.order.XpOrderClient; import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient; import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.order.XpCruiseOrder; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.vehicleConvoy.XpFleet; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.OrderType; import com.xiaopeng.api.vo.SystemEventType; import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; import com.xiaopeng.api.vo.automaticPilot.protobuf.*; import com.xiaopeng.api.vo.operation.RouteVo; @@ -37,18 +41,17 @@ 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.utils.SnowFlake; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.common.core.utils.uuid.UUID; import com.xiaopeng.common.redis.service.RedisService; import lombok.extern.slf4j.Slf4j; 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.data.mongodb.core.query.Update; import org.springframework.data.mongodb.core.query.UpdateDefinition; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -100,6 +103,15 @@ @Resource private XpCruisePlanClient xpCruisePlanClient; @Resource private Snowflake snowflake; @Value("${robotaxi.appId:xp_robotaxi_api}") private String appid; @Resource private XpTaskClient xpTaskClient; private static final com.google.protobuf.util.JsonFormat.Printer jsonPrinter = com.google.protobuf.util.JsonFormat.printer() .printingEnumsAsInts() @@ -377,35 +389,52 @@ int value = gearLevel.getNumber(); redisService.setCacheObject(CacheConstants.GEAR_LEVEL + systemRuntimeStatus.getVehicleStatus().getStaticInfo().getXpuId(), value); // 判断是否为故障状态 XpVehicle vehicle = null; if (abnormalReason == AbnormalReason.FAULT) { log.info("车辆故障,开始处理故障"); // TODO 添加异常任务 // 解绑用户与车辆关系 CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo(); String orderId = systemRuntimeStatus.getRunningOrderStatusInfo().getOrderId(); XpOrder xpOrder = xpOrderClient.queryOrderById(Long.parseLong(orderId)).getData(); XpVehicle vehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData(); if (vehicle != null) { // 修改车辆状态 vehicle.setOperatingStatus(4); xpVehicleClient.updateVehicleById(vehicle); cancelTaxiPassengerVo.setVin(vehicle.getVehicleVin()); cancelTaxiPassengerVo.setUid(xpOrder.getAppUserId().toString()); cancelTaxiPassengerVo.setOrderNo(xpOrder.getOrderNumber()); userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); if(!orderId.contains("XU")){ //巡游订单,需要关闭订单 xpCruiseOrderClient.updateCruiseOrderId(Long.parseLong(orderId.substring(2))); XpCruiseOrder cruiseOrder = xpCruiseOrderClient.getCruiseOrder(Long.parseLong(orderId.substring(2))).getData(); vehicle = xpVehicleClient.queryById(cruiseOrder.getVehicleId()).getData(); if (vehicle != null) { // 修改车辆状态 vehicle.setOperatingStatus(4); xpVehicleClient.updateVehicleById(vehicle); } }else{ //正常订单 XpOrder xpOrder = xpOrderClient.queryOrderById(Long.parseLong(orderId)).getData(); vehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData(); if (vehicle != null) { // 修改车辆状态 vehicle.setState(0); vehicle.setOperatingStatus(4); xpVehicleClient.updateVehicleById(vehicle); // 解绑用户与车辆关系 CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo(); cancelTaxiPassengerVo.setVin(vehicle.getVehicleVin()); cancelTaxiPassengerVo.setUid(xpOrder.getAppUserId().toString()); cancelTaxiPassengerVo.setOrderNo(xpOrder.getOrderNumber()); cancelTaxiPassengerVo.setAppId(appid); userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); } // TODO 重新派单 ReassignOrderDTO reassignOrderDTO = new ReassignOrderDTO(); reassignOrderDTO.setUid(xpOrder.getAppUserId().toString()); reassignOrderDTO.setOrderNo(xpOrder.getOrderNumber()); reassignOrderDTO.setCount(10); RealtimePose pose = systemRuntimeStatus.getPose(); Wgs naviPose = pose.getNaviPose(); Double latitude = naviPose.getLatitude(); Double longitude = naviPose.getLongitude(); reassignOrderDTO.setLongitude(longitude); reassignOrderDTO.setLatitude(latitude); reassignOrderClient.reassignOrder(reassignOrderDTO); } // TODO 重新派单 ReassignOrderDTO reassignOrderDTO = new ReassignOrderDTO(); reassignOrderDTO.setUid(xpOrder.getAppUserId().toString()); reassignOrderDTO.setOrderNo(xpOrder.getOrderNumber()); reassignOrderDTO.setCount(10); RealtimePose pose = systemRuntimeStatus.getPose(); Wgs naviPose = pose.getNaviPose(); Double latitude = naviPose.getLatitude(); Double longitude = naviPose.getLongitude(); reassignOrderDTO.setLongitude(longitude); reassignOrderDTO.setLatitude(latitude); reassignOrderClient.reassignOrder(reassignOrderDTO); //添加车辆异常任务和发送消息 xpTaskClient.saveVehicleAccidentError(vehicle.getId()); } } @@ -475,7 +504,7 @@ if (orderId.contains("XU")) { // orderType = OrderType.CRUISE_ORDER; R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(orderId); R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(Long.parseLong(orderId.substring(2))); XpCruiseOrder xpCruiseOrder = cruiseOrder.getData(); //先响应消息 @@ -591,7 +620,7 @@ //巡游单 if (orderPhase.equals(OrderPhase.ROUTE_TO_CRUISE)) { /* 构建导航数据给到车端 */ R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(orderId); R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(Long.parseLong(orderId.substring(2))); XpCruiseOrder xpCruiseOrder = cruiseOrder.getData(); origin.setLongitude(xpCruiseOrder.getStartLon()); @@ -738,9 +767,7 @@ } orderOperationBuilder.addAllWaypoints(waypoints); SnowFlake snowFlake = new SnowFlake(0, 0); snowFlake.withStartTimestamp(1420041600000L); long sequence = snowFlake.nextId(); long sequence = snowflake.nextId(); // 处理数据 redisService.setCacheObject(sequence + "","pushOrder_"+orderId+"_"+vin,30L, TimeUnit.MINUTES); //开发发送请求到XPU @@ -892,7 +919,7 @@ // 返程找到目前的订单 -》之前的订单 查询生成一个 正常巡游 找到下一个点位 若到达最后点位 则反向找点位 每次判断是否收车状态 是则不进行处理了 // 找到这个订单 R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(orderId); R<XpCruiseOrder> cruiseOrder = xpCruiseOrderClient.getCruiseOrder(Long.parseLong(orderId.substring(2))); if(cruiseOrder!=null){ XpCruiseOrder xpCruiseOrder = cruiseOrder.getData(); Long vehicleId = xpCruiseOrder.getVehicleId(); @@ -909,13 +936,13 @@ XpCruiseOrder lastXpCruiseOrder = lastOrder.getData(); // 修改一下id 加一个一样的巡游单子 lastXpCruiseOrder.setId("XU"+ IdUtil.fastUUID()); lastXpCruiseOrder.setId(null); lastXpCruiseOrder.setStatus(1); xpCruiseOrderClient.addCruiseOrder(lastXpCruiseOrder); //构建下发XPU订单报文数据 RtTask.Builder taskBuilder = RtTask.newBuilder(); taskBuilder.setOrderId(lastXpCruiseOrder.getId()); taskBuilder.setTaskId("MISSION_"+ IdUtil.fastUUID()); taskBuilder.setOrderId("XU" + lastXpCruiseOrder.getId()); taskBuilder.setTaskId(snowflake.nextId() + ""); taskBuilder.setTaskType(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderType.ORDER_TYPE_CRUISE); //构建点位信息 Waypoint.Builder pointBuilder = Waypoint.newBuilder(); @@ -932,9 +959,7 @@ RtTask task = taskBuilder.build(); RtTaskList taskList = RtTaskList.newBuilder().addTasks(task).build(); SnowFlake snowFlake = new SnowFlake(0, 0); snowFlake.withStartTimestamp(1420041600000L); long sequence1 = snowFlake.nextId(); long sequence1 = snowflake.nextId(); xpuUtil.cloudCreateOrder(taskList, xpVehicle.getVehicleVin(),sequence1); }else if(xpCruiseOrder.getOrderType()==1){ // 正常巡游 找到下一个点位 若到达最后点位 则反向找点位 @@ -942,7 +967,6 @@ Double endLon = xpCruiseOrder.getEndLon(); Double endLat = xpCruiseOrder.getEndLat(); XpCruiseOrder newXpCruiseOrder = new XpCruiseOrder(); newXpCruiseOrder.setId("XU"+ IdUtil.fastUUID()); newXpCruiseOrder.setVehicleId(xpCruiseOrder.getVehicleId()); newXpCruiseOrder.setVehicleVin(xpCruiseOrder.getVehicleVin()); newXpCruiseOrder.setFleetId(xpCruiseOrder.getFleetId()); @@ -966,8 +990,8 @@ xpCruiseOrderClient.addCruiseOrder(cruisePoint.getData()); RtTask.Builder taskBuilder = RtTask.newBuilder(); taskBuilder.setOrderId(newXpCruiseOrder.getId()); taskBuilder.setTaskId("MISSION_"+ IdUtil.fastUUID()); taskBuilder.setOrderId("XU" + newXpCruiseOrder.getId()); taskBuilder.setTaskId(snowflake.nextId() + ""); taskBuilder.setTaskType(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderType.ORDER_TYPE_CRUISE); //构建点位信息 @@ -985,9 +1009,7 @@ RtTaskList.Builder taskListBuilder = RtTaskList.newBuilder(); taskListBuilder.addTasks(taskBuilder.build()); SnowFlake snowFlake = new SnowFlake(0, 0); snowFlake.withStartTimestamp(1420041600000L); long sequence1 = snowFlake.nextId(); long sequence1 = snowflake.nextId(); xpuUtil.cloudCreateOrder(taskListBuilder.build(), xpVehicle.getVehicleVin(),sequence1); } } @@ -1038,9 +1060,7 @@ navigationDataBuilder.setRequestId(requestId); navigationDataBuilder.setContent(routeDataContent); navigationDataBuilder.setTimestamp(System.currentTimeMillis()); SnowFlake snowFlake = new SnowFlake(0, 0); snowFlake.withStartTimestamp(1420041600000L); long sequence = snowFlake.nextId(); long sequence = snowflake.nextId(); log.info("开始推送导航数据 {}", orderId); MqttPublishDto mqttPublishDto = xpuUtil.cloudPushNavigation(navigationDataBuilder.build(), xpuId, sequence); log.info("推送导航的响应消息,{}", JSON.toJSONString(mqttPublishDto)); xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/utils/SnowFlake.java
File was deleted xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -61,11 +61,13 @@ private XpFleetOperationsClient xpFleetOperationsClient; @Resource private XpVehicleClient xpVehicleClient; @ApiOperation(value = "事故类型列表", response = XpErrorType.class, tags = "运维APP-任务中心") @GetMapping("/api/v1/task/errorTypeList") public R<List<XpErrorType>> errorTypeList() { return xpErrorTypeService.errorTypeList(); } @ApiOperation(value = "任务中心列表", response = TaskPageListVO.class, tags = "运维APP-任务中心") @PostMapping("/api/v1/task/pageList") public R<PageInfo<TaskPageListVO>> pageList(@RequestBody TaskPageListQuery query) { @@ -73,13 +75,15 @@ PageInfo<TaskPageListVO> pageList = xpTaskService.pageList(query); return R.ok(pageList); } @ApiOperation(value = "事故任务确认到达", tags = "运维APP-任务中心") @GetMapping("/api/v1/task/confirmArrive") @Transactional public R confirmArrive( Long id) { public R confirmArrive(Long id) { Long userId = tokenService.getLoginOperationUser().getXpOperationsUser().getId(); return xpTaskService.confirmArrive(id,userId); return xpTaskService.confirmArrive(id, userId); } @ApiOperation(value = "查询车辆不分页列表", tags = "运维APP-任务中心") @PostMapping("/api/v1/task/listVehicle") public R<List<VehicleListVO>> listVehicle() { @@ -89,21 +93,21 @@ // 查询当前人员所属车队 查询车队关联车辆 R<List<Long>> vehicleByUserId = xpFleetOperationsClient.getVehicleByUserId(xpOperationsUser.getId()); List<Long> vehicleIds = vehicleByUserId.getData(); if (vehicleIds != null && !vehicleIds.isEmpty()){ if (vehicleIds != null && !vehicleIds.isEmpty()) { List<XpVehicle> data = xpVehicleClient.listByIds(vehicleIds).getData(); if (data!=null){ if (data != null) { List<VehicleListVO> vehicleListVOS = new ArrayList<>(); for (XpVehicle xpVehicle : data) { VehicleListVO vehicleListVO = new VehicleListVO(); vehicleListVO.setId(xpVehicle.getId()); VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); if(vehiclePosition!=null){ if (vehiclePosition != null) { double x = vehiclePosition.getPoint().getX(); double y = vehiclePosition.getPoint().getY(); vehicleListVO.setVehicleLon(x+""); vehicleListVO.setVehicleLat(y+""); vehicleListVO.setVehicleLon(x + ""); vehicleListVO.setVehicleLat(y + ""); } vehicleListVO.setVehicleCode(xpVehicle.getVehicleCode()); vehicleListVO.setVehicleColor(xpVehicle.getVehicleColor()); @@ -118,6 +122,7 @@ return R.ok(new ArrayList<>()); } @ApiOperation(value = "上传车辆事故", tags = "运维APP-任务中心") @PostMapping("/api/v1/task/saveVehicleAccident") public R saveVehicleAccident(@RequestBody SaveVehicleAccidentDto dto) { @@ -126,6 +131,7 @@ xpTaskService.saveVehicleAccident(dto, xpOperationsUser); return R.ok(); } @ApiOperation(value = "车辆事故任务详情", tags = "运维APP-任务中心") @GetMapping("/api/v1/task/vehicleAccidentDetail") public R<TaskAccidentDetailVO> vehicleAccidentDetail(Long id) { @@ -137,6 +143,7 @@ public R<TaskRoutineDetailVO> vehicleRoutineDetail(Long id) { return xpTaskService.vehicleRoutineDetail(id); } @ApiOperation(value = "上传车辆其他常规任务详情", tags = "运维APP-任务中心") @PostMapping("/api/v1/task/saveRoutineDetail") public R saveRoutineDetail(@RequestBody SaveRoutineDetailDto dto) { @@ -144,6 +151,7 @@ Long id = loginOperationUser.getId(); return xpTaskService.saveRoutineDetail(dto, id); } @ApiOperation(value = "车辆常规充电任务详情", tags = "运维APP-任务中心") @GetMapping("/api/v1/task/chargingDetail") public R<TaskChargingDetailVO> chargingDetail(Long id) { @@ -155,32 +163,37 @@ public R<com.xiaopeng.maintenance.vo.TaskRepairDetailVO> repairDetail(Long id) { return xpTaskService.repairDetail(id); } @ApiOperation(value = "车辆常规整备任务详情", tags = "运维APP-任务中心") @GetMapping("/api/v1/task/preparationDetail") public R<com.xiaopeng.maintenance.vo.TaskPreparationDetailVO> preparationDetail(Long id) { return xpTaskService.preparationDetail(id); } @ApiOperation(value = "车辆常规检测任务详情", tags = "运维APP-任务中心") @GetMapping("/api/v1/task/detectionDetail") public R<com.xiaopeng.maintenance.vo.TaskDetectionDetailVO> detectionDetail(Long id) { return xpTaskService.detectionDetail(id); } @ApiOperation(value = "车辆常规洗车任务详情", tags = "运维APP-任务中心") @GetMapping("/api/v1/task/cleanDetail") public R<com.xiaopeng.maintenance.vo.TaskCleanDetailVO> cleanDetail(Long id) { return xpTaskService.cleanDetail(id); } @ApiOperation(value = "处理车辆事故", tags = "运维APP-任务中心") @PostMapping("/api/v1/task/handleVehicleAccident") @Transactional public R handleVehicleAccident(@RequestBody HandleVehicleAccidentDto dto) { LoginOperationUser loginOperationUser = tokenService.getLoginOperationUser(); XpOperationsUser xpOperationsUser = loginOperationUser.getXpOperationsUser(); return xpTaskService.handleVehicleAccident(dto,xpOperationsUser); return xpTaskService.handleVehicleAccident(dto, xpOperationsUser); } /** * 通过车辆id查询任务事故分页列表 * * @return */ @ApiOperation(value = "通过车辆id查询任务事故分页列表", tags = {"管理后台-车辆管理-运营车辆管理"}) @@ -191,15 +204,17 @@ /** * 管理后台-车辆管理-运营车辆管理-删除任务/事故 * * @param id * @return */ @ApiOperation(value = "删除删除任务/事故", tags = {"管理后台-车辆管理-运营车辆管理"}) @DeleteMapping("/api/v1/task/delete/{id}") public R<?> deleteTaskById(@ApiParam(name = "id", value = "任务ID") @PathVariable Long id){ public R<?> deleteTaskById(@ApiParam(name = "id", value = "任务ID") @PathVariable Long id) { xpTaskService.deleteTaskById(id); return R.ok(); } @ApiOperation(value = "事故类型列表", response = XpErrorType.class, tags = "管理后台-车辆管理-运营车辆管理") @GetMapping("/api/v1/task/errorTypeTreeList") public R<List<XpErrorType>> errorTypeTreeList() { @@ -208,11 +223,15 @@ /** * 通过车辆id查询上一次保养记录 * * @param vehicleId 车辆ID */ @GetMapping("/inner/xpTask/queryInfoByVehicleId") public R<XpTask> queryInfoByVehicleId(@RequestParam("vehicleId") Long vehicleId){ public R<XpTask> queryInfoByVehicleId(@RequestParam("vehicleId") Long vehicleId) { XpTask xpTask = xpTaskService.queryInfoByVehicleId(vehicleId); return R.ok(xpTask); } } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskManagementController.java
@@ -77,17 +77,20 @@ private XpFleetOperationsClient xpFleetOperationsClient; @Resource private XpVehicleClient xpVehicleClient; @ApiOperation(value = "事故类型列表", response = XpErrorType.class) @GetMapping("/errorTypeList") public R<List<XpErrorType>> errorTypeList() { return xpErrorTypeService.errorTypeList(); } @ApiOperation(value = "任务中心列表", response = TaskManagementPageListVO.class) @PostMapping("/pageList") public R<PageInfo<TaskManagementPageListVO>> pageListManagement(@RequestBody TaskManagementPageListQuery query) { PageInfo<TaskManagementPageListVO> pageList = xpTaskService.pageListManagement(query); return R.ok(pageList); } @ApiOperation(value = "任务工单导出") @PostMapping(value = "/exportExcel") public void exportExcel(@RequestBody TaskManagementPageListQuery query) { @@ -101,11 +104,11 @@ xpTaskExportExcel.setTaskTypeName(task.getTaskTypeName()); xpTaskExportExcel.setTaskUrgencyLevel(task.getTaskUrgencyLevel()); xpTaskExportExcel.setTaskDescription(task.getTaskDescription()); if (StringUtils.hasLength(task.getHandleUserId())){ if (StringUtils.hasLength(task.getHandleUserId())) { String[] split = task.getHandleUserId().split(","); List<XpOperationsUser> users = operationUserClient.listByIds(Arrays.stream(split).map(Long::parseLong).collect(Collectors.toList())).getData(); if (users!=null){ if (users != null) { StringBuilder handleUserName = new StringBuilder(); for (XpOperationsUser user : users) { handleUserName.append(user.getNickName()).append(";"); @@ -143,23 +146,27 @@ } } /** * 管理后台-车辆管理-运营车辆管理-删除任务/事故 * * @param id * @return */ @ApiOperation(value = "删除任务/事故") @DeleteMapping("/deleteTaskById") public R<?> deleteTaskById(@ApiParam(name = "id", value = "任务ID")Long id){ public R<?> deleteTaskById(@ApiParam(name = "id", value = "任务ID") Long id) { xpTaskService.deleteTaskById(id); return R.ok(); } @ApiOperation(value = "任务分配") @GetMapping("/assigneeTask") public R assigneeTask(@ApiParam(name = "id", value = "任务ID") Long id, @ApiParam(name = "handlerUserId", value = "处理人id")Long handlerUserId) { public R assigneeTask(@ApiParam(name = "id", value = "任务ID") Long id, @ApiParam(name = "handlerUserId", value = "处理人id") Long handlerUserId) { Long assigneeUserId = tokenService.getLoginUser().getSysUser().getId(); return xpTaskService.assigneeTask(id, handlerUserId,assigneeUserId); return xpTaskService.assigneeTask(id, handlerUserId, assigneeUserId); } @ApiOperation(value = "创建任务事故") @PostMapping("/saveTask") public R saveTask(@RequestBody SaveErrorTaskDto dto) { @@ -167,23 +174,30 @@ xpTaskService.saveTask(dto, reportUserId); return R.ok(); } @ApiOperation(value = "异常情况上传车辆事故") @PostMapping("/inner/v1/task/saveVehicleAccidentError") public R saveVehicleAccidentError(@RequestParam Long vehicleId) { /** * 内部调用-添加车辆异常任务 * @param vehicleId * @return */ @PostMapping("/saveVehicleAccidentError") public R saveVehicleAccidentError(@RequestParam Long vehicleId) { xpTaskService.saveVehicleAccidentError(vehicleId); return R.ok(); } @ApiOperation(value = "任务详情") @GetMapping("/taskDetail") public R<TaskManagementDetailVO> taskDetail(Long id) { return xpTaskService.taskDetail(id); } @ApiOperation(value = "查询车辆不分页列表") @PostMapping("/listVehicle") public R<List<XpVehicle>> listVehicle() { List<XpVehicle> vehicles = xpVehicleClient.listVehicle().getData(); if (vehicles == null){ if (vehicles == null) { return R.ok(new ArrayList<>()); } return R.ok(vehicles); @@ -191,6 +205,7 @@ /** * 通过车辆id查询任务事故分页列表 * * @return */ @ApiOperation(value = "通过车辆id查询任务事故分页列表", tags = {"管理后台-车辆管理-运营车辆管理"}) xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskRuleController.java
@@ -4,13 +4,12 @@ import com.xiaopeng.api.model.maintenance.XpTaskRule; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.maintenance.dto.TaskRuleDetailDto; import com.xiaopeng.maintenance.vo.TaskRuleDetailVO; import com.xiaopeng.api.vo.maintenance.TaskRuleDetailVO; import com.xiaopeng.maintenance.service.IXpTaskRuleRoleService; import com.xiaopeng.maintenance.service.IXpTaskRuleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -34,7 +33,6 @@ private IXpTaskRuleRoleService xpTaskRuleRoleService; @ApiOperation(value = "任务规则详情") @GetMapping("/api/v1/taskRule/taskRuleDetail") @Transactional public R<TaskRuleDetailVO> taskRuleDetail() { return xpTaskRuleService.taskRuleDetail(); } @@ -48,6 +46,17 @@ return R.ok(taskRule); } /** * 查询任务规则详情 * @return */ @GetMapping("/inner/v1/taskRule/taskRuleAndRoleDetail") public R<TaskRuleDetailVO> taskRuleAndRoleDetail() { return xpTaskRuleService.taskRuleDetail(); } @ApiOperation(value = "保存或修改任务规则") @PostMapping("/api/v1/taskRule/saveOrUpdateTaskRule") public R saveOrUpdateTaskRule(@RequestBody TaskRuleDetailDto dto) { xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java
@@ -82,7 +82,7 @@ // 下发命令 PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(xpVehicle.getVehicleVin()); pushOrderDto.setOrderId(newCruiseOrder.getData().getId()); pushOrderDto.setOrderId("XU" + newCruiseOrder.getData().getId()); pushOrderDto.setStartLatitude(newCruiseOrder.getData().getStartLat()); pushOrderDto.setStartLongitude(newCruiseOrder.getData().getStartLon()); pushOrderDto.setEndLatitude(newCruiseOrder.getData().getEndLat()); @@ -95,7 +95,7 @@ }else if(dto.getDepartureStatus()==3){ // 收车 关闭当前巡游单子 生成新的返程单子 找到收车站点 R<String> r = xpCruiseOrderClient.updateCruiseOrder(xpVehicle.getVehicleVin()); R<Long> r = xpCruiseOrderClient.updateCruiseOrder(xpVehicle.getVehicleVin()); // redis 获取当前最新经纬度位置 VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); @@ -107,7 +107,6 @@ xpCruiseOrder.setStartLat(y); } xpCruiseOrder.setId("XU"+ IdUtil.fastUUID()); xpCruiseOrder.setVehicleId(xpVehicle.getId()); xpCruiseOrder.setFleetId(xpVehicle.getFleetId()); xpCruiseOrder.setOrderType(2); @@ -122,7 +121,7 @@ // 下发命令 PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(returnCruisePoint.getVehicleVin()); pushOrderDto.setOrderId(returnCruisePoint.getId()); pushOrderDto.setOrderId("XU" + returnCruisePoint.getId()); pushOrderDto.setStartLatitude(returnCruisePoint.getStartLat()); pushOrderDto.setStartLongitude(returnCruisePoint.getStartLon()); pushOrderDto.setEndLatitude(returnCruisePoint.getEndLat()); xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpWorkOrderController.java
@@ -6,24 +6,15 @@ import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.security.service.TokenService; import com.xiaopeng.maintenance.dto.TaskRuleDetailDto; import com.xiaopeng.maintenance.model.query.TaskManagementPageListQuery; import com.xiaopeng.maintenance.model.query.WorkOrderPageListQuery; import com.xiaopeng.maintenance.model.vo.TaskManagementPageListVO; import com.xiaopeng.maintenance.model.vo.TaskPageListVO; import com.xiaopeng.maintenance.service.IXpTaskRuleRoleService; import com.xiaopeng.maintenance.service.IXpTaskRuleService; import com.xiaopeng.maintenance.service.IXpWorkOrderLogService; import com.xiaopeng.maintenance.service.IXpWorkOrderService; import com.xiaopeng.maintenance.vo.TaskRuleDetailVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * <p> xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/InsuranceInspectionScheduleTask.java
@@ -9,7 +9,7 @@ import com.xiaopeng.api.model.maintenance.XpTaskRuleRole; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.maintenance.constant.TaskScheduleConstants; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.maintenance.mapper.XpTaskMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleRoleMapper; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutinePreparationScheduleTask.java
@@ -9,7 +9,7 @@ import com.xiaopeng.api.model.maintenance.XpTaskRuleRole; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.maintenance.constant.TaskScheduleConstants; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.maintenance.mapper.XpTaskMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleRoleMapper; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskExpireCheckScheduleTask.java
@@ -15,7 +15,7 @@ import com.xiaopeng.common.core.enums.NotificationTypeEnum; import com.xiaopeng.common.core.enums.TaskTypeEnum; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.maintenance.constant.TaskScheduleConstants; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.maintenance.mapper.XpTaskMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskNotificationScheduleTask.java
@@ -13,7 +13,7 @@ import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.enums.NotificationTypeEnum; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.maintenance.constant.TaskScheduleConstants; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.maintenance.mapper.XpTaskMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleChargingScheduleTask.java
@@ -10,7 +10,7 @@ import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.maintenance.constant.TaskScheduleConstants; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.maintenance.mapper.XpTaskMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleRoleMapper; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCleanScheduleTask.java
@@ -9,7 +9,7 @@ import com.xiaopeng.api.model.maintenance.XpTaskRuleRole; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.maintenance.constant.TaskScheduleConstants; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.maintenance.mapper.XpTaskMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleRoleMapper; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java
@@ -201,7 +201,7 @@ */ private void sendCollectionCommand(XpVehicle xpVehicle) { // 收车 关闭当前巡游单子 生成新的返程单子 找到收车站点 R<String> r = xpCruiseOrderClient.updateCruiseOrder(xpVehicle.getVehicleVin()); R<Long> r = xpCruiseOrderClient.updateCruiseOrder(xpVehicle.getVehicleVin()); // mongodb 获取当前最新经纬度位置 VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); @@ -213,7 +213,6 @@ xpCruiseOrder.setStartLat(y); } xpCruiseOrder.setId("XU"+ IdUtil.fastUUID()); xpCruiseOrder.setVehicleId(xpVehicle.getId()); xpCruiseOrder.setFleetId(xpVehicle.getFleetId()); xpCruiseOrder.setOrderType(2); @@ -228,7 +227,7 @@ // 下发命令 PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(returnCruisePoint.getData().getVehicleVin()); pushOrderDto.setOrderId(returnCruisePoint.getData().getId()); pushOrderDto.setOrderId("XU" + returnCruisePoint.getData().getId()); pushOrderDto.setStartLatitude(returnCruisePoint.getData().getStartLat()); pushOrderDto.setStartLongitude(returnCruisePoint.getData().getStartLon()); pushOrderDto.setEndLatitude(returnCruisePoint.getData().getEndLat()); xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleInspectionScheduleTask.java
@@ -9,7 +9,7 @@ import com.xiaopeng.api.model.maintenance.XpTaskRuleRole; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.maintenance.constant.TaskScheduleConstants; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.maintenance.mapper.XpTaskMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleRoleMapper; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleMaintenanceScheduleTask.java
@@ -9,7 +9,7 @@ import com.xiaopeng.api.model.maintenance.XpTaskRuleRole; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.maintenance.constant.TaskScheduleConstants; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.maintenance.mapper.XpTaskMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleRoleMapper; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpTaskRuleService.java
@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.maintenance.dto.TaskRuleDetailDto; import com.xiaopeng.maintenance.vo.TaskRuleDetailVO; import com.xiaopeng.api.vo.maintenance.TaskRuleDetailVO; /** * <p> xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskRuleServiceImpl.java
@@ -7,7 +7,7 @@ import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.bean.BeanUtils; import com.xiaopeng.maintenance.dto.TaskRuleDetailDto; import com.xiaopeng.maintenance.vo.TaskRuleDetailVO; import com.xiaopeng.api.vo.maintenance.TaskRuleDetailVO; import com.xiaopeng.maintenance.mapper.XpTaskRuleMapper; import com.xiaopeng.maintenance.mapper.XpTaskRuleRoleMapper; import com.xiaopeng.maintenance.service.IXpTaskRuleService; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -6,11 +6,14 @@ 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.XpOperationsUserQueryDTO; import com.xiaopeng.api.dto.pushMessage.AliPushMessageDTO; import com.xiaopeng.api.feignClient.account.SysUserClient; import com.xiaopeng.api.feignClient.account.XpOperationUserClient; import com.xiaopeng.api.feignClient.account.XpOperationUserNotificationClient; import com.xiaopeng.api.feignClient.pushMessage.XpAliPushMessageClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.account.SysUser; import com.xiaopeng.api.model.account.XpOperationsRole; @@ -18,7 +21,9 @@ import com.xiaopeng.api.model.account.XpOperationsUserNotification; import com.xiaopeng.api.model.maintenance.*; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO; import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; import com.xiaopeng.api.vo.maintenance.TaskScheduleConstants; import com.xiaopeng.common.core.constant.AliPushTypeConstant; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.enums.NotificationTypeEnum; @@ -40,6 +45,7 @@ import com.xiaopeng.maintenance.service.IXpTaskRuleRoleService; import com.xiaopeng.maintenance.service.IXpTaskRuleService; import com.xiaopeng.maintenance.service.XpTaskService; import com.xiaopeng.maintenance.utils.GDMapGeocodingUtil; import com.xiaopeng.maintenance.utils.UUIDUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -118,6 +124,15 @@ private IXpTaskRuleRoleService xpTaskRuleRoleService; @Autowired private IXpTaskRuleService xpTaskRuleService; @Resource private GDMapGeocodingUtil gdMapGeocodingUtil; @Resource private XpFleetVehicleClient xpFleetVehicleClient; @Resource private XpFleetOperationsClient xpFleetOperationsClient; @Override public PageInfo<WorkBenchVO> workbench(WorkBenchQuery query) { @@ -1088,50 +1103,50 @@ @Override public void saveVehicleAccidentError(Long vehicleId) { XpTask xpTask = new XpTask(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); xpTask.setTaskCode(code); xpTask.setTaskCategory(2); // todo 事故类型待客户确定 xpTask.setTaskTypeId("1"); xpTask.setTaskUrgencyLevel(0); xpTask.setTaskDescription("车辆发生异常"); XpVehicle vehicle = xpVehicleClient.queryById(xpTask.getVehicleId()).getData(); if (vehicle!=null){ VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class); if (vehiclePosition != null) { double x = vehiclePosition.getPoint().getX(); double y = vehiclePosition.getPoint().getY(); xpTask.setVehicleLon(new BigDecimal(x)); xpTask.setVehicleLat(new BigDecimal(y)); } } xpTask.setVehicleId(vehicleId); // 系统上传异常任务标识 xpTask.setReportUserId(0L); xpTask.setReportTime(LocalDateTime.now()); xpTask.setStatus(0); xpTask.setCreateBy("admin"); XpVehicle vehicle = xpVehicleClient.queryById(vehicleId).getData(); XpTaskRule taskRule = xpTaskRuleService.lambdaQuery().last("limit 1").one(); XpTaskRuleRole taskRuleRole = xpTaskRuleRoleService.lambdaQuery().eq(XpTaskRuleRole::getRuleType, 9).last("limit 1").one(); if (Objects.isNull(taskRuleRole) || Objects.isNull(taskRule)) { throw new ServiceException("未配置车辆事故任务分配规则"); } R<List<XpOperationsRole>> xpOperationsRoleResult = xpOperationUserClient.getXpOperationsRoleByRoleId(taskRuleRole.getRoleId()); if (CollUtil.isNotEmpty(xpOperationsRoleResult.getData())) { List<Long> userIds = xpOperationsRoleResult.getData().stream().map(XpOperationsRole::getOperationsUserId).collect(Collectors.toList()); xpTask.setHandleUserId(StringUtils.join(userIds, ",")); } // 根据事故处理限时配置设置任务截止时间 LocalDateTime endTime = LocalDateTime.now().plusMinutes(taskRule.getProcessingTimeLimit()); xpTask.setEndTime(endTime); this.save(xpTask); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); //查找事故处理人,处理角色和车辆所属的车队 Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData(); XpOperationsUserQueryDTO dto = new XpOperationsUserQueryDTO(); dto.setRoleId(taskRuleRole.getRoleId()); List<XpOperationsUserWithRoleVO> data = xpOperationUserClient.queryByConditions(dto).getData(); List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData(); List<XpOperationsUserWithRoleVO> collect = data.stream().filter(x -> ids.contains(x.getId())).collect(Collectors.toList()); String belongUserIds = collect.stream().map(XpOperationsUserWithRoleVO::getId).collect(Collectors.toSet()).stream().map(String::valueOf).collect(Collectors.joining(",")); VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class); Map<String, String> geocode = gdMapGeocodingUtil.geocode(vehiclePosition.getPoint().getX() + "", vehiclePosition.getPoint().getY() + ""); String address = geocode.get("address"); XpTask task = new XpTask(); String taskCode = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); task.setTaskCode(taskCode); task.setTaskCategory(TaskScheduleConstants.TASK_CATEGORY_ACCIDENT); task.setTaskTypeId("8,10"); task.setTaskUrgencyLevel(TaskScheduleConstants.URGENCY_LEVEL_P0); String taskDescription = "车辆" + vehicle.getPlateNumber() + "在" + address + "发生紧急事故,请在" + taskRule.getProcessingTimeLimit() + "内到达现场!"; task.setTaskDescription(taskDescription); task.setVehicleId(vehicle.getId()); task.setVehicleLocation(address); task.setVehicleLat(new BigDecimal(vehiclePosition.getPoint().getY())); task.setVehicleLon(new BigDecimal(vehiclePosition.getPoint().getX())); task.setHandleUserId(belongUserIds); task.setAssigneeTime(LocalDateTime.now()); task.setReportUserId(0L); task.setReportTime(LocalDateTime.now()); task.setEndTime(LocalDateTime.now().plusMinutes(taskRule.getProcessingTimeLimit())); task.setExpiredNoticeSent(0); task.setStatus(TaskScheduleConstants.TASK_STATUS_PENDING_ARRIVE); task.setCreateBy("系统自动生成"); task.setCreateTime(LocalDateTime.now()); this.save(task); // 异步发送消息通知 String plateNumber = Objects.nonNull(vehicle) ? vehicle.getPlateNumber() : ""; sendAccidentNotificationAsync(xpTask, plateNumber, taskRule.getProcessingTimeLimit()); sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit()); } @Override xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/utils/GDMapGeocodingUtil.java
New file @@ -0,0 +1,56 @@ package com.xiaopeng.maintenance.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.xiaopeng.common.core.utils.HttpUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; /** * 高德地图的地理编码工具类 */ @Component @Lazy public class GDMapGeocodingUtil { private String key = "66ae577f63898dae3016d599fda57221"; /** * 根据经纬度获取行政区域信息 * @param lon * @param lan * @return * @throws Exception */ public Map<String, String> geocode(String lon, String lan) { String url = "https://restapi.amap.com/v3/geocode/regeo?key=" + key + "&location=" + lon + "," + lan; String forObject = HttpUtils.sendGet(url); JSONObject jsonObject = JSON.parseObject(forObject); Map<String, String> map = new HashMap<>(); if(jsonObject.getString("status").equals("1")){ JSONObject regeocode = jsonObject.getJSONObject("regeocode"); JSONObject addressComponent = regeocode.getJSONObject("addressComponent"); String address = regeocode.getString("formatted_address"); map.put("address", address); String code = addressComponent.getString("adcode"); String province = addressComponent.getString("province"); String city = addressComponent.getString("city"); String district = addressComponent.getString("district"); map.put("province", province); map.put("provinceCode", code.substring(0, 2) + "0000"); map.put("city", city); map.put("cityCode", code.substring(0, 4) + "00"); map.put("district", district); map.put("districtCode", code); } return map; } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpCruisePlanController.java
@@ -180,7 +180,6 @@ Long pointId = xpCruisePlanPoint.getPointId(); XpPoint point = pointService.getById(pointId); XpCruiseOrder newXpCruiseOrder = new XpCruiseOrder(); newXpCruiseOrder.setId("XU" + IdUtil.fastUUID()); newXpCruiseOrder.setFleetId(dto.getFleetId()); newXpCruiseOrder.setVehicleId(dto.getVehicleId()); newXpCruiseOrder.setVehicleVin(dto.getVehicleVin()); xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
@@ -811,7 +811,7 @@ continue; } // 关闭巡游单子 R<String> stringR = xpCruiseOrderClient.updateCruiseOrder(vehiclePosition.getVehicleVin()); R<Long> stringR = xpCruiseOrderClient.updateCruiseOrder(vehiclePosition.getVehicleVin()); if (stringR == null || stringR.getCode() != 200) { log.info("关闭巡游单子失败 车牌号 {}", vehiclePosition.getPlateNumber()); continue; @@ -860,7 +860,7 @@ continue; } // 关闭巡游单子 R<String> stringR = xpCruiseOrderClient.updateCruiseOrder(vehicleId1.getVehicleVin()); R<Long> stringR = xpCruiseOrderClient.updateCruiseOrder(vehicleId1.getVehicleVin()); if (stringR == null || stringR.getCode() != 200) { log.info("关闭巡游单子失败 车牌号 {}", vehicleId1.getPlateNumber()); continue; @@ -944,7 +944,7 @@ continue; } // 关闭巡游单子 R<String> stringR = xpCruiseOrderClient.updateCruiseOrder(vehicleId1.getVehicleVin()); R<Long> stringR = xpCruiseOrderClient.updateCruiseOrder(vehicleId1.getVehicleVin()); if (stringR == null || stringR.getData() == null) { log.info("关闭巡游单子失败"); continue; xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpCruiseOrderController.java
@@ -46,8 +46,8 @@ * @param */ @PostMapping("/inner/cruiseOrder/updateCruiseOrder") public R<String> updateCruiseOrder(@RequestParam String vin) { String id = xpCruiseOrderService.updateCruiseOrder(vin); public R<Long> updateCruiseOrder(@RequestParam String vin) { Long id = xpCruiseOrderService.updateCruiseOrder(vin); return R.ok(id); } /** @@ -56,9 +56,20 @@ * @param */ @PostMapping("/inner/cruiseOrder/closeCruiseOrder") public R<String> closeCruiseOrder(@RequestParam String vin) { String id = xpCruiseOrderService.closeCruiseOrder(vin); public R<Long> closeCruiseOrder(@RequestParam String vin) { Long id = xpCruiseOrderService.closeCruiseOrder(vin); return R.ok(id); } /** * 根据订单ID查询取消订单 * @param orderId * @return */ @PostMapping("/inner/cruiseOrder/updateCruiseOrderId") public R<Long> updateCruiseOrderId(@RequestParam Long orderId){ return xpCruiseOrderService.updateCruiseOrderId(orderId); } @@ -68,7 +79,7 @@ * @return */ @PostMapping("/inner/cruiseOrder/getCruiseOrder") public R<XpCruiseOrder> getCruiseOrder(@RequestParam String orderId){ public R<XpCruiseOrder> getCruiseOrder(@RequestParam Long orderId){ return R.ok(xpCruiseOrderService.getById(orderId)); } @@ -80,8 +91,7 @@ * @return 订单ID */ @PostMapping("/inner/cruiseOrder/addCruiseOrder") public R<String> addCruiseOrder(@RequestBody XpCruiseOrder order) { order.setId("XU"+ IdUtil.fastUUID()); public R<Long> addCruiseOrder(@RequestBody XpCruiseOrder order) { boolean save = xpCruiseOrderService.save(order); if (!save) { return R.fail("新增失败"); @@ -90,7 +100,7 @@ // 下发命令 PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(order.getVehicleVin()); pushOrderDto.setOrderId(order.getId()); pushOrderDto.setOrderId("XU" + order.getId()); pushOrderDto.setStartLatitude(order.getStartLat()); pushOrderDto.setStartLongitude(order.getStartLon()); pushOrderDto.setEndLatitude(order.getEndLat()); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/job/jobs/AddCruiseMissionJob.java
@@ -36,7 +36,7 @@ if(xpVehicleR.getData().getState()==0){ PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(xpCruiseOrder.getVehicleVin()); pushOrderDto.setOrderId(xpCruiseOrder.getId()); pushOrderDto.setOrderId("XU" + xpCruiseOrder.getId()); pushOrderDto.setStartLatitude(xpCruiseOrder.getStartLat()); pushOrderDto.setStartLongitude(xpCruiseOrder.getStartLon()); pushOrderDto.setEndLatitude(xpCruiseOrder.getEndLat()); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpCruiseOrderService.java
@@ -38,10 +38,15 @@ */ public interface IXpCruiseOrderService extends IService<XpCruiseOrder> { String updateCruiseOrder(String vin); Long updateCruiseOrder(String vin); String closeCruiseOrder(String vin); R updateCruiseOrderId(Long orderId); Long closeCruiseOrder(String vin); /** * 巡游订单分页列表 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java
@@ -52,34 +52,50 @@ * @param vin */ @Override public String updateCruiseOrder(String vin) { public Long updateCruiseOrder(String vin) { LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleVin, vin).eq(XpCruiseOrder::getStatus, 1); XpCruiseOrder xpCruiseOrder = this.getOne(wrapper); if (xpCruiseOrder != null) { xpCruiseOrder.setStatus(2); this.update(xpCruiseOrder, wrapper); // todo 给XPU下发订单取消报文,如果取消不成功需要重试。两次不成功,则需要换车 PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(vin); pushOrderDto.setOrderId(xpCruiseOrder.getId()); pushOrderDto.setOperation_type(OrderOperationType.VEHICLE_CANCEL_ORDER); pushOrderDto.setOrderId("XU" + xpCruiseOrder.getId()); pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER); R<Boolean> booleanR = orderMissionClient.cancelOrder(pushOrderDto); if(booleanR==null || !booleanR.getData()){ log.error("下发失败重试一次"); R<Boolean> booleanR1 = orderMissionClient.cancelOrder(pushOrderDto); if(booleanR1==null || !booleanR1.getData()){ log.error("换车"); return null; } log.error("XPU取消巡游订单失败"); return null; } return xpCruiseOrder.getId(); } return null; } @Override public String closeCruiseOrder(String vin) { public R updateCruiseOrderId(Long orderId) { XpCruiseOrder xpCruiseOrder = this.getById(orderId); if (xpCruiseOrder != null) { xpCruiseOrder.setStatus(2); xpCruiseOrder.setVehicleId(null); this.updateById(xpCruiseOrder); PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(xpCruiseOrder.getVehicleVin()); pushOrderDto.setOrderId("XU" + xpCruiseOrder.getId()); pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER); R<Boolean> booleanR = orderMissionClient.cancelOrder(pushOrderDto); if(booleanR==null || !booleanR.getData()){ log.error("XPU取消巡游订单失败"); return R.fail("XPU取消巡游订单失败"); } return R.ok(); } return R.fail("获取订单失败"); } @Override public Long closeCruiseOrder(String vin) { LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleVin, vin).eq(XpCruiseOrder::getStatus, 1); XpCruiseOrder xpCruiseOrder = this.getOne(wrapper); if (xpCruiseOrder != null) { @@ -90,6 +106,8 @@ return null; } @Override public PageInfo<XpCruiseOrderPageVO> pageList(XpCruiseOrderPageQuery query) { PageInfo<XpCruiseOrderPageVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -872,7 +872,6 @@ } XpCruiseOrder returnOrder = new XpCruiseOrder(); returnOrder.setId("XU" + IdUtil.fastUUID()); returnOrder.setVehicleId(oldVehicle.getId()); returnOrder.setVehicleVin(oldVehicle.getVehicleVin()); returnOrder.setFleetId(oldVehicle.getFleetId()); @@ -916,7 +915,7 @@ // 下发巡游订单到原车辆 PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(oldVehicle.getVehicleVin()); pushOrderDto.setOrderId(returnOrder.getId().toString()); pushOrderDto.setOrderId("XU" + returnOrder.getId()); pushOrderDto.setStartLatitude(returnOrder.getStartLat()); pushOrderDto.setStartLongitude(returnOrder.getStartLon()); pushOrderDto.setEndLatitude(returnOrder.getEndLat()); @@ -1793,7 +1792,6 @@ xpCruiseOrder.setStatus(0); xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId()); xpCruiseOrder.setCreateTime(LocalDateTime.now()); xpCruiseOrder.setId("XU" + IdUtil.fastUUID()); // 判断当前时分秒是否大于收车时间 LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime(); @@ -1814,7 +1812,7 @@ // 添加自动结束行程定时任务job Map<String, ? extends Object> jobMaps = new ImmutableMap.Builder<String, String>(). put("id", xpCruiseOrder.getId()) put("id", xpCruiseOrder.getId() + "") .build(); QuartzManager.addJob( AddCruiseMissionJob.class, xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/SnowFlake.java
File was deleted