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;
|
}
|
|
|
|
|
|
}
|