package com.xiaopeng.automaticPilot.controller; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import com.xiaopeng.api.dto.automaticPilot.MqttPublishDto; import com.xiaopeng.api.dto.automaticPilot.PushOrderDto; import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.vo.automaticPilot.protobuf.RtTask; import com.xiaopeng.api.vo.automaticPilot.protobuf.RtTaskList; import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderType; import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperation; import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType; import com.xiaopeng.automaticPilot.util.XPUUtil; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.SnowFlake; import com.xiaopeng.common.redis.service.RedisService; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.concurrent.TimeUnit; @Slf4j @RestController @RequestMapping("") @Api(tags = "订单任务Api") public class OrderMissionController { private final XPUUtil xpuUtil; private final RedisService redisService; private final XpVehicleClient xpVehicleClient; public OrderMissionController(XPUUtil xpuUtil, RedisService redisService, XpVehicleClient xpVehicleClient, Snowflake snowflake) { this.xpuUtil = xpuUtil; this.redisService = redisService; this.xpVehicleClient = xpVehicleClient; } @PostMapping("/inner/pushOrder") public R pushOrder(@RequestBody PushOrderDto dto) { RtTask.Builder taskBuilder = RtTask.newBuilder(); //TODO 设置目标地点信息 taskBuilder.setOrderId(dto.getOrderId().toString()); taskBuilder.setTaskId("MISSION_"+ IdUtil.fastUUID()); taskBuilder.setTaskType(OrderType.ORDER_TYPE_ROBOTAXI); RtTaskList.Builder taskListBuilder = RtTaskList.newBuilder(); taskListBuilder.addTasks(taskBuilder.build()); SnowFlake snowFlake = new SnowFlake(0, 0); snowFlake.withStartTimestamp(1420041600000L); long sequence = snowFlake.nextId(); MqttPublishDto mqttPublishDto = xpuUtil.cloudCreateOrder(taskListBuilder.build(), dto.getVin(),sequence); if (mqttPublishDto.getCode()== 200) { // 修改车子为接单状态 xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(dto.getVin(),1)); return R.ok(true); } return R.ok(false); } @PostMapping("/inner/cancelOrder") R cancelOrder(@RequestBody PushOrderDto dto) { OrderOperation.Builder operationBuilder = OrderOperation.newBuilder(); operationBuilder.setOrderId(dto.getOrderId().toString()); operationBuilder.setTaskId("CANCEL_MISSION_" + IdUtil.fastUUID()); if (dto.getOperation_type() != null) { operationBuilder.setOperationType(OrderOperationType.forNumber(dto.getOperation_type().getValue())); } SnowFlake snowFlake = new SnowFlake(0, 0); snowFlake.withStartTimestamp(1420041600000L); long sequence = snowFlake.nextId(); xpuUtil.cloudOrderOperation(operationBuilder.build(), dto.getVin(), sequence); redisService.setCacheObject(String.valueOf(sequence), "cancelOrder_" + dto.getOrderId() + "_" + dto.getVin(), 30l, TimeUnit.MINUTES); return R.ok(true); } }