From c98d3f2fc620b3f5d699e2be34eaabc1033b42b2 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 11 三月 2026 16:17:32 +0800
Subject: [PATCH] 修改巡游订单部分逻辑
---
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskManagementController.java | 33 +
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpCruisePlanController.java | 1
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskRuleDetailVO.java | 5
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskClient.java | 12
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpCruiseOrderClient.java | 18 +
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpCruiseOrderService.java | 9
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutinePreparationScheduleTask.java | 2
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpCruiseOrderClientFallbackFactory.java | 19
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java | 42 ++
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java | 122 +++++---
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java | 131 ++++----
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java | 39 ++
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCleanScheduleTask.java | 2
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpCruiseOrderController.java | 26 +
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpWorkOrderController.java | 9
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpTaskRuleService.java | 2
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskRuleController.java | 15
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/utils/GDMapGeocodingUtil.java | 56 ++++
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java | 89 +++--
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskNotificationScheduleTask.java | 2
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java | 6
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskRuleServiceImpl.java | 2
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskExpireCheckScheduleTask.java | 2
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskClientFallbackFactory.java | 7
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskRuleClient.java | 9
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java | 7
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleMaintenanceScheduleTask.java | 2
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java | 9
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 6
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/InsuranceInspectionScheduleTask.java | 2
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java | 5
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskRuleClientFallbackFactory.java | 7
/dev/null | 111 -------
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleChargingScheduleTask.java | 2
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpCruiseOrder.java | 4
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/job/jobs/AddCruiseMissionJob.java | 2
xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskScheduleConstants.java | 2
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationUserNotificationClient.java | 2
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleInspectionScheduleTask.java | 2
39 files changed, 453 insertions(+), 370 deletions(-)
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskClientFallbackFactory.java
index 0c0a8af..9bcff29 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskClientFallbackFactory.java
+++ b/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());
+ }
};
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskRuleClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskRuleClientFallbackFactory.java
index 7372aab..b710ab6 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpTaskRuleClientFallbackFactory.java
+++ b/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());
+ }
};
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpCruiseOrderClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpCruiseOrderClientFallbackFactory.java
index d76076e..ad2130e 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpCruiseOrderClientFallbackFactory.java
+++ b/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;
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationUserNotificationClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationUserNotificationClient.java
index e6b1810..deb097a 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationUserNotificationClient.java
+++ b/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);
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskClient.java
index 99c3bde..21ebeb3 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskClient.java
+++ b/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);
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskRuleClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskRuleClient.java
index 532826a..f64de0e 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpTaskRuleClient.java
+++ b/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();
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpCruiseOrderClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpCruiseOrderClient.java
index 87e77ea..304f3bc 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpCruiseOrderClient.java
+++ b/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);
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java
index 16a94bb..58124d2 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpTask.java
+++ b/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;
-
}
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpCruiseOrder.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpCruiseOrder.java
index bc04ba0..638cc90 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpCruiseOrder.java
+++ b/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")
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskRuleDetailVO.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskRuleDetailVO.java
similarity index 95%
rename from xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskRuleDetailVO.java
rename to xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskRuleDetailVO.java
index c379e43..ecf5656 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/TaskRuleDetailVO.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/TaskScheduleConstants.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskScheduleConstants.java
similarity index 98%
rename from xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/TaskScheduleConstants.java
rename to xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskScheduleConstants.java
index edbf40e..70e2218 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/constant/TaskScheduleConstants.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/maintenance/TaskScheduleConstants.java
@@ -1,4 +1,4 @@
-package com.xiaopeng.maintenance.constant;
+package com.xiaopeng.api.vo.maintenance;
/**
* 定时任务常量类
diff --git a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
index 6e12f34..d465fb7 100644
--- a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
+++ b/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) {
diff --git a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
index 6602ed1..1267084 100644
--- a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/service/KafkaConsumerService.java
+++ b/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));
diff --git a/xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/utils/SnowFlake.java b/xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/utils/SnowFlake.java
deleted file mode 100644
index a6c17f6..0000000
--- a/xp-robotaxi-common/xp-common-core/src/main/java/com/xiaopeng/common/core/utils/SnowFlake.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.xiaopeng.common.core.utils;
-
-/**
- * see @https://raw.githubusercontent.com/beyondfengyu/SnowFlake/master/SnowFlake.java
- * Created by Lox on 2017/8/21.
- */
-public class SnowFlake {
- /**
- * 起始的时间戳
- */
- private static long START_STMP = 1503305692631L;
-
- /**
- * 每一部分占用的位数
- */
- private final static long SEQUENCE_BIT = 12; //序列号占用的位数
- private final static long MACHINE_BIT = 5; //机器标识占用的位数
- private final static long DATACENTER_BIT = 5;//数据中心占用的位数
-
- /**
- * 每一部分的最大值
- */
- public final static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT);
- public final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);
- private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);
-
- /**
- * 每一部分向左的位移
- */
- private final static long MACHINE_LEFT = SEQUENCE_BIT;
- private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
- private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
-
- private long datacenterId; //数据中心
- private long machineId; //机器标识
- private long sequence = 0L; //序列号
- private long lastStmp = -1L;//上一次时间戳
-
- public SnowFlake(long datacenterId, long machineId) {
- if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) {
- throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0");
- }
- if (machineId > MAX_MACHINE_NUM || machineId < 0) {
- throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0");
- }
- this.datacenterId = datacenterId;
- this.machineId = machineId;
- }
-
- /**
- * 设置初始时间,各业务方的旧算法有可能初始时间不一致,请使用
- * @param timestamp 设定的新初始时间戳
- * @return 当前对象
- */
- public SnowFlake withStartTimestamp(long timestamp) {
- SnowFlake.START_STMP = timestamp;
- return this;
- }
-
- /**
- * 产生下一个ID
- *
- * @return
- */
- public synchronized long nextId() {
- long currStmp = getNewstmp();
- if (currStmp < lastStmp) {
- throw new RuntimeException("Clock moved backwards. Refusing to generate id");
- }
-
- if (currStmp == lastStmp) {
- //相同毫秒内,序列号自增
- sequence = (sequence + 1) & MAX_SEQUENCE;
- //同一毫秒的序列数已经达到最大
- if (sequence == 0L) {
- currStmp = getNextMill();
- }
- } else {
- //不同毫秒内,序列号置为0
- sequence = 0L;
- }
-
- lastStmp = currStmp;
-
- return (currStmp - START_STMP) << TIMESTMP_LEFT //时间戳部分
- | datacenterId << DATACENTER_LEFT //数据中心部分
- | machineId << MACHINE_LEFT //机器标识部分
- | sequence; //序列号部分
- }
-
- private long getNextMill() {
- long mill = getNewstmp();
- while (mill <= lastStmp) {
- mill = getNewstmp();
- }
- return mill;
- }
-
- private long getNewstmp() {
- return System.currentTimeMillis();
- }
-
-// public static void main(String[] args) {
-// SnowFlake snowFlake = new SnowFlake(0, 0);
-// snowFlake.withStartTimestamp(1420041600000L);
-//
-// for (int i = 0; i < (1 << 5); i++) {
-// System.out.println(snowFlake.nextId());
-// }
-// }
-}
\ No newline at end of file
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
index af174bf..cde62f6 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -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);
}
+
+
+
}
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskManagementController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskManagementController.java
index abf03a9..00db2eb 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskManagementController.java
+++ b/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 = {"管理后台-车辆管理-运营车辆管理"})
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskRuleController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskRuleController.java
index 69e1cd2..791d46d 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskRuleController.java
+++ b/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) {
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java
index 53b5547..a8275be 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java
+++ b/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());
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpWorkOrderController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpWorkOrderController.java
index 3eb5df7..9bf881b 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpWorkOrderController.java
+++ b/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>
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/InsuranceInspectionScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/InsuranceInspectionScheduleTask.java
index 7c91369..ca9a930 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/InsuranceInspectionScheduleTask.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutinePreparationScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutinePreparationScheduleTask.java
index c160817..ae922e2 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutinePreparationScheduleTask.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskExpireCheckScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskExpireCheckScheduleTask.java
index e780bd8..5ae0db2 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskExpireCheckScheduleTask.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskNotificationScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskNotificationScheduleTask.java
index eebea79..863bafa 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/RoutineTaskNotificationScheduleTask.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleChargingScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleChargingScheduleTask.java
index 44c4354..7fcf42f 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleChargingScheduleTask.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCleanScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCleanScheduleTask.java
index ac4580e..ee0915c 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCleanScheduleTask.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java
index 4111c79..146fc30 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleCollectionScheduleTask.java
+++ b/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());
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleInspectionScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleInspectionScheduleTask.java
index ac08578..ce5acc0 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleInspectionScheduleTask.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleMaintenanceScheduleTask.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleMaintenanceScheduleTask.java
index 7319f8c..3b81d31 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/schedule/VehicleMaintenanceScheduleTask.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpTaskRuleService.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpTaskRuleService.java
index 0bc884e..bf4a5c1 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpTaskRuleService.java
+++ b/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>
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskRuleServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskRuleServiceImpl.java
index 5d98929..ee7c7da 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskRuleServiceImpl.java
+++ b/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;
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
index 31261c9..c681993 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -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
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/utils/GDMapGeocodingUtil.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/utils/GDMapGeocodingUtil.java
new file mode 100644
index 0000000..8ebceb4
--- /dev/null
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/utils/GDMapGeocodingUtil.java
@@ -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;
+ }
+
+}
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpCruisePlanController.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpCruisePlanController.java
index 6679c50..633b059 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpCruisePlanController.java
+++ b/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());
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
index 5000456..d232c1c 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/TaskOrderUtil.java
+++ b/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;
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpCruiseOrderController.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpCruiseOrderController.java
index 240a5bd..3539e74 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpCruiseOrderController.java
+++ b/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());
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/job/jobs/AddCruiseMissionJob.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/job/jobs/AddCruiseMissionJob.java
index 6b8a1f2..486e60f 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/job/jobs/AddCruiseMissionJob.java
+++ b/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());
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpCruiseOrderService.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpCruiseOrderService.java
index 035d85e..a778bcd 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpCruiseOrderService.java
+++ b/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);
+
+
/**
* 巡游订单分页列表
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java
index f1bf8a5..49239eb 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java
+++ b/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());
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index d1ec250..9399092 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -871,7 +871,6 @@
}
XpCruiseOrder returnOrder = new XpCruiseOrder();
- returnOrder.setId("XU" + IdUtil.fastUUID());
returnOrder.setVehicleId(oldVehicle.getId());
returnOrder.setVehicleVin(oldVehicle.getVehicleVin());
returnOrder.setFleetId(oldVehicle.getFleetId());
@@ -915,7 +914,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());
@@ -1787,7 +1786,6 @@
xpCruiseOrder.setStatus(0);
xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());
xpCruiseOrder.setCreateTime(LocalDateTime.now());
- xpCruiseOrder.setId("XU" + IdUtil.fastUUID());
// 判断当前时分秒是否大于收车时间
LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime();
@@ -1808,7 +1806,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,
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/SnowFlake.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/SnowFlake.java
deleted file mode 100644
index fb76d2d..0000000
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/util/SnowFlake.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.xiaopeng.vehicleConvoy.util;
-
-/**
- * see @https://raw.githubusercontent.com/beyondfengyu/SnowFlake/master/SnowFlake.java
- * Created by Lox on 2017/8/21.
- */
-public class SnowFlake {
- /**
- * 起始的时间戳
- */
- private static long START_STMP = 1503305692631L;
-
- /**
- * 每一部分占用的位数
- */
- private final static long SEQUENCE_BIT = 12; //序列号占用的位数
- private final static long MACHINE_BIT = 5; //机器标识占用的位数
- private final static long DATACENTER_BIT = 5;//数据中心占用的位数
-
- /**
- * 每一部分的最大值
- */
- public final static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT);
- public final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);
- private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);
-
- /**
- * 每一部分向左的位移
- */
- private final static long MACHINE_LEFT = SEQUENCE_BIT;
- private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
- private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
-
- private long datacenterId; //数据中心
- private long machineId; //机器标识
- private long sequence = 0L; //序列号
- private long lastStmp = -1L;//上一次时间戳
-
- public SnowFlake(long datacenterId, long machineId) {
- if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) {
- throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0");
- }
- if (machineId > MAX_MACHINE_NUM || machineId < 0) {
- throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0");
- }
- this.datacenterId = datacenterId;
- this.machineId = machineId;
- }
-
- /**
- * 设置初始时间,各业务方的旧算法有可能初始时间不一致,请使用
- * @param timestamp 设定的新初始时间戳
- * @return 当前对象
- */
- public SnowFlake withStartTimestamp(long timestamp) {
- SnowFlake.START_STMP = timestamp;
- return this;
- }
-
- /**
- * 产生下一个ID
- *
- * @return
- */
- public synchronized long nextId() {
- long currStmp = getNewstmp();
- if (currStmp < lastStmp) {
- throw new RuntimeException("Clock moved backwards. Refusing to generate id");
- }
-
- if (currStmp == lastStmp) {
- //相同毫秒内,序列号自增
- sequence = (sequence + 1) & MAX_SEQUENCE;
- //同一毫秒的序列数已经达到最大
- if (sequence == 0L) {
- currStmp = getNextMill();
- }
- } else {
- //不同毫秒内,序列号置为0
- sequence = 0L;
- }
-
- lastStmp = currStmp;
-
- return (currStmp - START_STMP) << TIMESTMP_LEFT //时间戳部分
- | datacenterId << DATACENTER_LEFT //数据中心部分
- | machineId << MACHINE_LEFT //机器标识部分
- | sequence; //序列号部分
- }
-
- private long getNextMill() {
- long mill = getNewstmp();
- while (mill <= lastStmp) {
- mill = getNewstmp();
- }
- return mill;
- }
-
- private long getNewstmp() {
- return System.currentTimeMillis();
- }
-
-// public static void main(String[] args) {
-// SnowFlake snowFlake = new SnowFlake(0, 0);
-// snowFlake.withStartTimestamp(1420041600000L);
-//
-// for (int i = 0; i < (1 << 5); i++) {
-// System.out.println(snowFlake.nextId());
-// }
-// }
-}
\ No newline at end of file
--
Gitblit v1.7.1