package com.xiaopeng.automaticPilot.util; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson2.JSON; import com.xiaopeng.api.vo.automaticPilot.proto.down.*; import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.OrderOperation; import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudCreateOrder.RTTask; import com.xiaopeng.common.core.utils.uuid.UUID; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * 自动驾驶接口对接文档 */ @Slf4j @Component public class XPUUtil { /** * 接口地址 */ @Value("${xpu.url}") private String xpuUrl; /** * Robotaxi创建订单推送给XPU * * @param task * @return */ public ResponseMessage cloudCreateOrder(RTTask task) { MsgContent msgContent = new MsgContent(); // 消息头 RtMsgHeader header = new RtMsgHeader(); header.setMsg_id(UUID.randomUUID().toString()); header.setTimestamp(System.currentTimeMillis()); header.setCmd(RTCmdType.CLOUD_CREATE_ORDER); header.setSequence(1L); header.setType(MessageType.MESSAGE_TYPE_RESPONSE); msgContent.setHeader(header); // 消息内容 JSONObject jsonObject = new JSONObject(); jsonObject.put("task", task); msgContent.setContent_detail(jsonObject); log.info("云端-->XPU 创建订单:{}", msgContent); HttpRequest post = HttpUtil.createPost(""); post.body(JSON.toJSONString(msgContent)); HttpResponse execute = post.execute(); int status = execute.getStatus(); if (200 != status) { throw new RuntimeException("XPU 接口异常:" + execute.getStatus()); } MsgContent resMsgContent = JSON.parseObject(execute.body(), MsgContent.class); RtMsgHeader resHeader = resMsgContent.getHeader(); int value = resHeader.getType().getValue(); //只处理应答消息 if (value == MessageType.MESSAGE_TYPE_RESPONSE.getValue()) { JSONObject contentDetail = resMsgContent.getContent_detail(); return contentDetail.getObject("response", ResponseMessage.class); } return null; } /** * 操作订单 * 取消订单/修改途经点、终点/下发导航地址到车端 * * @param operation * @return */ public ResponseMessage cloudOrderOperation(OrderOperation operation) { MsgContent msgContent = new MsgContent(); // 消息头 RtMsgHeader header = new RtMsgHeader(); header.setMsg_id(UUID.randomUUID().toString()); header.setTimestamp(System.currentTimeMillis()); header.setCmd(RTCmdType.CLOUD_ORDER_OPERATION); Snowflake snowflake = IdUtil.getSnowflake(0, 0); header.setSequence(snowflake.nextId()); header.setType(MessageType.MESSAGE_TYPE_REQUEST); msgContent.setHeader(header); // 消息内容 JSONObject jsonObject = new JSONObject(); jsonObject.put("operation", operation); msgContent.setContent_detail(jsonObject); log.info("云端-->XPU 操作订单:{}", msgContent); HttpRequest post = HttpUtil.createPost(""); post.body(JSON.toJSONString(msgContent)); HttpResponse execute = post.execute(); int status = execute.getStatus(); if (200 != status) { throw new RuntimeException("XPU 接口异常:" + execute.getStatus()); } MsgContent resMsgContent = JSON.parseObject(execute.body(), MsgContent.class); RtMsgHeader resHeader = resMsgContent.getHeader(); int value = resHeader.getType().getValue(); //只处理应答消息 if (value == MessageType.MESSAGE_TYPE_RESPONSE.getValue()) { JSONObject contentDetail = resMsgContent.getContent_detail(); return contentDetail.getObject("response", ResponseMessage.class); } return null; } }