Files
double-rack/ruoyi-mill/src/main/java/com/ruoyi/mill/udp/TelegramDispatcher.java
wangyu 7648a56a0d feat: 改造为冷轧双机架二级控制系统
- 删除 ruoyi-flowable 模块,移除所有 Flowable 依赖
- 新建 ruoyi-mill 业务模块:
  * protocol: iXComPCS UDP 电文编解码器(7条电文完整定义)
  * udp: UdpServer/UdpSender/TelegramDispatcher
  * domain: MillPlan / MillProductionResult
  * service/controller: 生产计划、产出管理骨架
- 前端改造为工业深色主题(深海军蓝 + 工业青色)
- 系统标题更新为"冷轧双机架二级控制系统"
- application.yml 新增 mill.udp 配置节

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 12:58:22 +08:00

67 lines
2.7 KiB
Java

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<String, Object> 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<String, Object> data) {
log.info("[2FK102] 作业撤销: planNo={} inMatNo={}", data.get("PLAN_NO"), data.get("IN_MAT_NO"));
// TODO: 从计划表软删除,记录撤销原因
}
/** 2FK103 作业命令应答 — L3 对 L2 发出计划的回执 */
private void handle2FK103(Map<String, Object> 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<String, Object> data) {
log.info("[2FK104] 产出应答: tcNo={} flag={} result={}",
data.get("TC_NO"), data.get("FLAG"), data.get("DEAL_RESULT"));
// TODO: 更新产出确认状态
}
}