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.proto.down.cloudCreateOrder.RTTask; import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudCreateOrder.TaskStatus; import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudCreateOrder.TaskType; import com.xiaopeng.api.vo.automaticPilot.protobuf.*; 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 javax.annotation.Resource; import java.util.concurrent.TimeUnit; @Slf4j @RestController @RequestMapping("") @Api(tags = "订单任务Api") public class OrderMissionController { @Resource private XPUUtil xpuUtil; @Resource private RedisService redisService; @Resource private 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()); if(dto.getOrderId().contains("XU")){ taskBuilder.setTaskType(OrderType.ORDER_TYPE_ROBOTAXI); }else { 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 (!dto.getOrderId().contains("XU") && 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); } }