|
|
|
@ -1,3 +1,4 @@ |
|
|
|
/* |
|
|
|
package com.gaotao.modules.api.consumer; |
|
|
|
|
|
|
|
import com.alibaba.fastjson2.JSONObject; |
|
|
|
@ -12,10 +13,12 @@ import org.springframework.scheduling.annotation.Async; |
|
|
|
import org.springframework.scheduling.annotation.Scheduled; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
*/ |
|
|
|
/** |
|
|
|
* WMS消息消费者 |
|
|
|
* 使用定时任务从Redis队列中消费消息 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
@Slf4j |
|
|
|
@Component |
|
|
|
@ConditionalOnProperty(name = "wms.message.queue.enabled", havingValue = "true", matchIfMissing = false) |
|
|
|
@ -35,36 +38,44 @@ public class WmsMessageConsumer { |
|
|
|
private static final String ROBOT_PICKING_QUEUE = "wms:queue:robot:picking"; |
|
|
|
private static final String AGV_TASK_QUEUE = "wms:queue:agv:task"; |
|
|
|
|
|
|
|
/** |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 消费入库完成消息 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
@Scheduled(fixedDelay = 1000) // 每秒检查一次 |
|
|
|
@Async |
|
|
|
public void consumeInboundFinishMessages() { |
|
|
|
consumeMessages(INBOUND_FINISH_QUEUE, "INBOUND_FINISH"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 消费机械手拣货完成消息 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
@Scheduled(fixedDelay = 1000) |
|
|
|
@Async |
|
|
|
public void consumeRobotPickingMessages() { |
|
|
|
consumeMessages(ROBOT_PICKING_QUEUE, "ROBOT_PICKING_FINISH"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 消费AGV任务状态消息 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
@Scheduled(fixedDelay = 1000) |
|
|
|
@Async |
|
|
|
public void consumeAGVTaskMessages() { |
|
|
|
consumeMessages(AGV_TASK_QUEUE, "AGV_TASK_STATUS"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 通用消息消费方法 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
private void consumeMessages(String queueName, String messageType) { |
|
|
|
try { |
|
|
|
// 检查队列长度 |
|
|
|
@ -87,9 +98,11 @@ public class WmsMessageConsumer { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 处理单个消息 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
private void processMessage(WmsMessage message, String messageType) { |
|
|
|
try { |
|
|
|
log.info("开始处理消息,ID: {}, 类型: {}", message.getMessageId(), messageType); |
|
|
|
@ -128,9 +141,11 @@ public class WmsMessageConsumer { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 处理消息失败的情况 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
private void handleProcessFailure(WmsMessage message, String messageType) { |
|
|
|
try { |
|
|
|
message.setRetryCount(message.getRetryCount() + 1); |
|
|
|
@ -155,9 +170,11 @@ public class WmsMessageConsumer { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 根据消息类型获取队列名称 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
private String getQueueNameByMessageType(String messageType) { |
|
|
|
switch (messageType) { |
|
|
|
case "INBOUND_FINISH": |
|
|
|
@ -171,12 +188,15 @@ public class WmsMessageConsumer { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 发送失败告警 |
|
|
|
*/ |
|
|
|
*//* |
|
|
|
|
|
|
|
private void sendFailureAlert(WmsMessage message) { |
|
|
|
// 可以集成邮件、短信、钉钉等告警方式 |
|
|
|
log.error("【WMS消息处理失败告警】消息ID: {}, 类型: {}, 数据: {}", |
|
|
|
message.getMessageId(), message.getMessageType(), message.getData()); |
|
|
|
} |
|
|
|
} |
|
|
|
*/ |