package com.ruoyi.mill.udp; import com.ruoyi.mill.protocol.TelegramCodec; import com.ruoyi.mill.protocol.TelegramSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.util.Map; /** * 接收到的 L3→L2 电文分发处理器 * 根据电文号前6字节路由到对应业务处理方法 */ @Component public class TelegramDispatcher { private static final Logger log = LoggerFactory.getLogger(TelegramDispatcher.class); public void dispatch(String telegramId, byte[] payload) { log.info("[UDP-RECV] telegramId={} payloadLen={}", telegramId, payload.length); switch (telegramId) { case TelegramSchema.ID_2FK101: handle2FK101(TelegramCodec.decode(TelegramSchema.SCHEMA_2FK101, payload)); break; case TelegramSchema.ID_2FK102: handle2FK102(TelegramCodec.decode(TelegramSchema.SCHEMA_2FK102, payload)); break; case TelegramSchema.ID_2FK103: handle2FK103(TelegramCodec.decode(TelegramSchema.SCHEMA_2FK103, payload)); break; case TelegramSchema.ID_2FK104: handle2FK104(TelegramCodec.decode(TelegramSchema.SCHEMA_2FK104, payload)); break; default: log.warn("[UDP-RECV] 未知电文号: {}", telegramId); } } /** 2FK101 作业命令信息 — L3 下发生产计划 */ private void handle2FK101(Map data) { log.info("[2FK101] 作业命令: planNo={} inMatNo={} unitCode={}", data.get("PLAN_NO"), data.get("IN_MAT_NO"), data.get("UNIT_CODE")); // TODO: 写入计划表,触发 K12F01 应答 } /** 2FK102 作业命令撤销 — L3 撤销某条计划 */ private void handle2FK102(Map data) { log.info("[2FK102] 作业撤销: planNo={} inMatNo={}", data.get("PLAN_NO"), data.get("IN_MAT_NO")); // TODO: 从计划表软删除,记录撤销原因 } /** 2FK103 作业命令应答 — L3 对 L2 发出计划的回执 */ private void handle2FK103(Map data) { log.info("[2FK103] 命令应答: tcNo={} flag={} result={}", data.get("TC_NO"), data.get("FLAG"), data.get("DEAL_RESULT")); // TODO: 更新计划状态 } /** 2FK104 产出信息应答 — L3 对 L2 上报产出的回执 */ private void handle2FK104(Map data) { log.info("[2FK104] 产出应答: tcNo={} flag={} result={}", data.get("TC_NO"), data.get("FLAG"), data.get("DEAL_RESULT")); // TODO: 更新产出确认状态 } }