|
|
|
@ -10,7 +10,8 @@ import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskCompletedData; |
|
|
|
import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskModeChangeData; |
|
|
|
import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskStatusChangeData; |
|
|
|
import com.galaxis.rcs.connector.cl2.receiveEntity.base.TaskTypeChangeData; |
|
|
|
import com.galaxis.rcs.connector.cl2.sendEntity.AmrTaskMessage; |
|
|
|
import com.galaxis.rcs.connector.cl2.sendEntity.RcsAckMessage; |
|
|
|
import com.galaxis.rcs.connector.cl2.sendEntity.RcsTaskMessage; |
|
|
|
import com.galaxis.rcs.connector.cl2.sendEntity.BaseMessage; |
|
|
|
import com.yvan.logisticsModel.LogisticsRuntimeService; |
|
|
|
import com.yvan.logisticsModel.PtrAgvItem; |
|
|
|
@ -29,6 +30,66 @@ import java.nio.charset.StandardCharsets; |
|
|
|
@Service |
|
|
|
public class AmrMessageHandler { |
|
|
|
|
|
|
|
// 发送消息id
|
|
|
|
/** |
|
|
|
* AMR作业指令 10010 |
|
|
|
* 停止/解除 10040 |
|
|
|
* 电文应答 10050 |
|
|
|
* 配置信息 10060 |
|
|
|
* 旋转货架 10080 |
|
|
|
* 旋转车身 10081 |
|
|
|
* 控制卷帘门 10082 |
|
|
|
* 心跳 10100 |
|
|
|
* 状态查询 10110 |
|
|
|
* 取消已下发小车任务 10120 |
|
|
|
* 设置小车坐标 10200 |
|
|
|
* 等待就绪 19997 |
|
|
|
*/ |
|
|
|
private static final int RCS_TASK = 10010; |
|
|
|
private static final int RCS_SR = 10040; |
|
|
|
private static final int RCS_ACK = 10050; |
|
|
|
private static final int RCS_CONFIG = 10060; |
|
|
|
private static final int RCS_ROTATE_RACK = 10080; |
|
|
|
private static final int RCS_ROTATE_BODY = 10081; |
|
|
|
private static final int RCS_CONTROL_DOOR = 10082; |
|
|
|
private static final int RCS_HEARTBEAT = 10100; |
|
|
|
private static final int RCS_QUERY_STATUS = 10110; |
|
|
|
private static final int RCS_CANCEL_TASK = 10120; |
|
|
|
private static final int RCS_SET_LOCATION = 10200; |
|
|
|
private static final int RCS_WAIT_READY = 19997; |
|
|
|
|
|
|
|
// 接收消息id
|
|
|
|
/** |
|
|
|
* 小车作业完成 20010 AmrTaskCompletedMessage |
|
|
|
* 任务状态上报 20011 AmrTaskStatusMessage |
|
|
|
* 小车子模块任务状态 20012 AmrModuleTaskStatusMessage |
|
|
|
* 地标报告 20020 AmrLandmarkMessage |
|
|
|
* 消息应答 20050 AmrAckMessage |
|
|
|
* 状态上报 20060 AmrStatusMessage |
|
|
|
* 心跳 20100 AmrHeartbeatMessage |
|
|
|
* 开机上报 20147 AmrBootMessage |
|
|
|
* 关机上报 20148 AmrShutdownMessage |
|
|
|
* 小车主程序启动 20149 AmrAppStartMessage |
|
|
|
* 小车上线 20150 AmrOnlineMessage |
|
|
|
* 小车离线 20200 AmrOfflineMessage |
|
|
|
* 异常上报 20250 AmrExceptionMessage |
|
|
|
*/ |
|
|
|
private static final int AMR_TASK_COMPLETED = 20010; |
|
|
|
private static final int AMR_TASK_STATUS = 20011; |
|
|
|
private static final int AMR_MODULE_TASK_STATUS = 20012; |
|
|
|
private static final int AMR_LANDMARK = 20020; |
|
|
|
private static final int AMR_ACK = 20050; |
|
|
|
private static final int AMR_STATUS = 20060; |
|
|
|
private static final int AMR_HEARTBEAT = 20100; |
|
|
|
private static final int AMR_BOOT = 20147; |
|
|
|
private static final int AMR_SHUTDOWN = 20148; |
|
|
|
private static final int AMR_APP_START = 20149; |
|
|
|
private static final int AMR_ONLINE = 20150; |
|
|
|
private static final int AMR_OFFLINE = 20200; |
|
|
|
private static final int AMR_EXCEPTION = 20250; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final TypeReference<AmrMessage<AmrTaskCompletedMessage>> typeRef20010Message = new TypeReference<AmrMessage<AmrTaskCompletedMessage>>() {}; |
|
|
|
private static final TypeReference<AmrMessage<AmrTaskStatusMessage<TaskStatusChangeData>>> typeRef20011_defaultMessage = new TypeReference<AmrMessage<AmrTaskStatusMessage<TaskStatusChangeData>>>() {}; |
|
|
|
private static final TypeReference<AmrMessage<AmrTaskStatusMessage<TaskModeChangeData>>> typeRef20011_1Message = new TypeReference<AmrMessage<AmrTaskStatusMessage<TaskModeChangeData>>>() {}; |
|
|
|
@ -79,10 +140,10 @@ public class AmrMessageHandler { |
|
|
|
|
|
|
|
AmrMessage<?> amrMessage = null; |
|
|
|
switch (id) { |
|
|
|
case 20010: |
|
|
|
case AMR_TASK_COMPLETED: |
|
|
|
AmrMessage<AmrTaskCompletedMessage> taskCompletedMessage = JacksonUtils.parse(json, typeRef20010Message); |
|
|
|
break; |
|
|
|
case 20011: { |
|
|
|
case AMR_TASK_STATUS: { |
|
|
|
int EventId = jw.asInt("content", "EventId"); |
|
|
|
log.info("1-Received message: " + json); |
|
|
|
switch (EventId) { |
|
|
|
@ -119,10 +180,10 @@ public class AmrMessageHandler { |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
case 20012: |
|
|
|
case AMR_MODULE_TASK_STATUS: |
|
|
|
amrMessage = JacksonUtils.parse(json, typeRef20012Message); |
|
|
|
break; |
|
|
|
case 20020: |
|
|
|
case AMR_LANDMARK: |
|
|
|
AmrMessage<AmrLandmarkMessage> landmarkMessage = JacksonUtils.parse(json, typeRef20020Message); |
|
|
|
agvItem.x = landmarkMessage.content.X; |
|
|
|
agvItem.y = landmarkMessage.content.Y; |
|
|
|
@ -134,10 +195,10 @@ public class AmrMessageHandler { |
|
|
|
// log.info("2-Received message: " + json);
|
|
|
|
// }
|
|
|
|
break; |
|
|
|
case 20050: |
|
|
|
case AMR_ACK: |
|
|
|
amrMessage = JacksonUtils.parse(json, typeRef20050Message); |
|
|
|
break; |
|
|
|
case 20060: |
|
|
|
case AMR_STATUS: |
|
|
|
AmrMessage<AmrStatusMessage> statusMessage = JacksonUtils.parse(json, typeRef20060Message); |
|
|
|
agvItem.agvSOC = statusMessage.content.CurBattery.SOC; |
|
|
|
agvItem.agvBatteryVoltage = statusMessage.content.CurBattery.Voltage; |
|
|
|
@ -154,7 +215,7 @@ public class AmrMessageHandler { |
|
|
|
// log.info("Received message: " + json);
|
|
|
|
// }
|
|
|
|
break; |
|
|
|
case 20100: |
|
|
|
case AMR_HEARTBEAT: |
|
|
|
AmrMessage<AmrHeartbeatMessage> heartbeatMessage = JacksonUtils.parse(json, typeRef20100Message); |
|
|
|
sendxt(heartbeatMessage.content.VehicleId + "", heartbeatMessage.content.SeqNo + ""); |
|
|
|
|
|
|
|
@ -166,22 +227,22 @@ public class AmrMessageHandler { |
|
|
|
// }
|
|
|
|
|
|
|
|
break; |
|
|
|
case 20147: |
|
|
|
case AMR_BOOT: |
|
|
|
amrMessage = JacksonUtils.parse(json, typeRef20147Message); |
|
|
|
break; |
|
|
|
case 20148: |
|
|
|
case AMR_SHUTDOWN: |
|
|
|
amrMessage = JacksonUtils.parse(json, typeRef20148Message); |
|
|
|
break; |
|
|
|
case 20149: |
|
|
|
case AMR_APP_START: |
|
|
|
amrMessage = JacksonUtils.parse(json, typeRef20149Message); |
|
|
|
break; |
|
|
|
case 20150: |
|
|
|
case AMR_ONLINE: |
|
|
|
amrMessage = JacksonUtils.parse(json, typeRef20150Message); |
|
|
|
break; |
|
|
|
case 20200: |
|
|
|
case AMR_OFFLINE: |
|
|
|
amrMessage = JacksonUtils.parse(json, typeRef20200Message); |
|
|
|
break; |
|
|
|
case 20250: |
|
|
|
case AMR_EXCEPTION: |
|
|
|
amrMessage = JacksonUtils.parse(json, typeRef20250Message); |
|
|
|
break; |
|
|
|
default: |
|
|
|
@ -196,14 +257,14 @@ public class AmrMessageHandler { |
|
|
|
|
|
|
|
public static PtrAgvItem getPtrAgvItem(String vehicleId) { |
|
|
|
var runtime = LogisticsRuntimeService.INSTANCE.findByEnvCode(1L); |
|
|
|
var executorItem = runtime.executorItemMap.get("10"); |
|
|
|
var executorItem = runtime.executorItemMap.get("3"); |
|
|
|
return (PtrAgvItem) executorItem; |
|
|
|
} |
|
|
|
public static void sendCmd10010(String vehicleId, AmrTaskMessage amrTaskMessage) throws JsonProcessingException, MqttException { |
|
|
|
public static void sendCmd10010(String vehicleId, RcsTaskMessage rcsTaskMessage) throws JsonProcessingException, MqttException { |
|
|
|
MqttClient mqttClient = MqttConfig.mqttClient; |
|
|
|
BaseMessage baseMessage = new BaseMessage(); |
|
|
|
baseMessage.id = 10010; |
|
|
|
baseMessage.content = amrTaskMessage; |
|
|
|
baseMessage.content = rcsTaskMessage; |
|
|
|
String json = JacksonUtils.toJson(baseMessage); |
|
|
|
log.info("sendCmd10010: {}", json); |
|
|
|
mqttClient.publish("/wcs_server/" + vehicleId, json.getBytes(StandardCharsets.UTF_8), 0, false); |
|
|
|
@ -214,4 +275,16 @@ public class AmrMessageHandler { |
|
|
|
mqttClient.publish("/wcs_server/" + vehicleId, ("{\"id\": 10110, \"content\": {\"SeqNo\": " + seqNo + "}}").getBytes(), 0, false); |
|
|
|
} |
|
|
|
|
|
|
|
public static void sendCmdAck(String vehicleId, int seqNo) throws JsonProcessingException, MqttException { |
|
|
|
MqttClient mqttClient = MqttConfig.mqttClient; |
|
|
|
BaseMessage baseMessage = new BaseMessage(); |
|
|
|
RcsAckMessage rcsAckMsg = new RcsAckMessage(); |
|
|
|
rcsAckMsg.SeqNo = seqNo; |
|
|
|
baseMessage.id = 10010; |
|
|
|
baseMessage.content = rcsAckMsg; |
|
|
|
String json = JacksonUtils.toJson(baseMessage); |
|
|
|
log.info("sendCmd10010: {}", json); |
|
|
|
mqttClient.publish("/wcs_server/" + vehicleId, json.getBytes(StandardCharsets.UTF_8), 0, false); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|