- 修改application.yml中的远程端口配置从9000调整为9001 - 在TelegramDispatcher中注入TelegramStore并实现报文存储功能 - 新增TelegramRecord类用于定义报文记录的数据结构 - 创建TelegramStore组件用于管理UDP报文的历史记录 - 更新前端udp-debug.vue界面的字段映射和数据展示逻辑 - 实现后端API接口支持历史记录查询、统计和清空操作 - 优化UDP接收日志输出并增加数据预览功能 - 重构前端API调用参数以支持分页查询功能
206 lines
9.6 KiB
Java
206 lines
9.6 KiB
Java
package com.ruoyi.mill.protocol;
|
||
|
||
import java.util.Arrays;
|
||
import java.util.Collections;
|
||
import java.util.List;
|
||
|
||
import static com.ruoyi.mill.protocol.FieldType.*;
|
||
|
||
/**
|
||
* 7 条电文的字段 Schema 定义(与 电文/*.xlsx 完全对应)
|
||
*
|
||
* L3→L2(接收):
|
||
* 2FK101 作业命令信息
|
||
* 2FK102 作业命令撤销
|
||
* 2FK103 作业命令应答
|
||
* 2FK104 产出信息应答
|
||
*
|
||
* L2→L3(发送):
|
||
* K12F01 计划信息应答
|
||
* K12F02 计划钢卷删除
|
||
* K12F03 生产信息电文
|
||
*/
|
||
public final class TelegramSchema {
|
||
|
||
private TelegramSchema() {}
|
||
|
||
private static FieldDef s(String name, int len) { return new FieldDef(name, STRING, len, 0); }
|
||
private static FieldDef i(String name) { return new FieldDef(name, INT, 4, 0); }
|
||
private static FieldDef f(String name, int len, int precision) { return new FieldDef(name, FLOAT, len, precision); }
|
||
|
||
public static List<FieldDef> getSchema(String tcNo) {
|
||
switch (tcNo) {
|
||
case ID_2FK101: return SCHEMA_2FK101;
|
||
case ID_2FK102: return SCHEMA_2FK102;
|
||
case ID_2FK103: return SCHEMA_2FK103;
|
||
case ID_2FK104: return SCHEMA_2FK104;
|
||
case ID_K12F01: return SCHEMA_K12F01;
|
||
case ID_K12F02: return SCHEMA_K12F02;
|
||
case ID_K12F03: return SCHEMA_K12F03;
|
||
default: return null;
|
||
}
|
||
}
|
||
|
||
// ─────────────────────────────────────────────────────────────
|
||
// 2FK101 作业命令信息 L3→L2
|
||
// ─────────────────────────────────────────────────────────────
|
||
public static final String ID_2FK101 = "2FK101";
|
||
public static final List<FieldDef> SCHEMA_2FK101 = Collections.unmodifiableList(Arrays.asList(
|
||
s("PLAN_NO", 20),
|
||
s("MAT_SEQ_NO", 3),
|
||
s("UNIT_CODE", 4),
|
||
s("PLAN_TYPE", 1),
|
||
s("IN_MAT_NO", 20),
|
||
f("IN_MAT_THICK", 9, 3),
|
||
f("IN_MAT_THICK_MAX", 9, 3),
|
||
f("IN_MAT_THICK_MIN", 9, 3),
|
||
f("IN_MAT_WIDTH", 10, 3),
|
||
f("IN_MAT_WT", 5, 0),
|
||
f("IN_MAT_LEN", 12, 3),
|
||
f("IN_MAT_IN_DIA", 8, 2),
|
||
f("IN_MAT_DIA", 8, 2),
|
||
s("PONO", 10),
|
||
s("SG_SIGN", 24),
|
||
s("OUT_MAT_NO", 20),
|
||
s("CUST_IN_MAT_NO", 20),
|
||
s("REMARK", 250),
|
||
s("SPARE_1", 20),
|
||
s("SPARE_2", 20),
|
||
s("SPARE_3", 20),
|
||
s("SPARE_4", 20),
|
||
s("SPARE_5", 20),
|
||
f("SPARE_6", 13, 3),
|
||
f("SPARE_7", 13, 3),
|
||
f("SPARE_8", 13, 3),
|
||
f("SPARE_9", 13, 3),
|
||
f("SPARE_10", 13, 3)
|
||
));
|
||
|
||
// ─────────────────────────────────────────────────────────────
|
||
// 2FK102 作业命令撤销 L3→L2
|
||
// ─────────────────────────────────────────────────────────────
|
||
public static final String ID_2FK102 = "2FK102";
|
||
public static final List<FieldDef> SCHEMA_2FK102 = Collections.unmodifiableList(Arrays.asList(
|
||
s("PLAN_NO", 20),
|
||
i("MAT_SEQ_NO"),
|
||
s("UNIT_CODE", 4),
|
||
s("IN_MAT_NO", 20),
|
||
s("SPARE_1", 20),
|
||
s("SPARE_2", 20),
|
||
s("SPARE_3", 20),
|
||
s("SPARE_4", 20),
|
||
s("SPARE_5", 20)
|
||
));
|
||
|
||
// ─────────────────────────────────────────────────────────────
|
||
// 2FK103 作业命令应答 L3→L2
|
||
// ─────────────────────────────────────────────────────────────
|
||
public static final String ID_2FK103 = "2FK103";
|
||
public static final List<FieldDef> SCHEMA_2FK103 = Collections.unmodifiableList(Arrays.asList(
|
||
s("TC_NO", 6),
|
||
s("PLAN_NO", 20),
|
||
i("SEQ_NO"),
|
||
s("UNIT_CODE", 4),
|
||
s("IN_MAT_NO", 20),
|
||
s("FLAG", 1),
|
||
s("DEAL_RESULT", 50),
|
||
s("SPARE_1", 20),
|
||
s("SPARE_2", 20),
|
||
s("SPARE_3", 20),
|
||
s("SPARE_4", 20),
|
||
s("SPARE_5", 20)
|
||
));
|
||
|
||
// ─────────────────────────────────────────────────────────────
|
||
// 2FK104 产出信息应答 L3→L2
|
||
// ─────────────────────────────────────────────────────────────
|
||
public static final String ID_2FK104 = "2FK104";
|
||
public static final List<FieldDef> SCHEMA_2FK104 = Collections.unmodifiableList(Arrays.asList(
|
||
s("TC_NO", 6),
|
||
s("PLAN_NO", 20),
|
||
i("SEQ_NO"),
|
||
s("UNIT_CODE", 4),
|
||
s("OUT_MAT_NO", 20),
|
||
s("FLAG", 1),
|
||
s("DEAL_RESULT", 50),
|
||
s("SPARE_1", 20),
|
||
s("SPARE_2", 20),
|
||
s("SPARE_3", 20),
|
||
s("SPARE_4", 20),
|
||
s("SPARE_5", 20)
|
||
));
|
||
|
||
// ─────────────────────────────────────────────────────────────
|
||
// K12F01 计划信息应答 L2→L3
|
||
// ─────────────────────────────────────────────────────────────
|
||
public static final String ID_K12F01 = "K12F01";
|
||
public static final List<FieldDef> SCHEMA_K12F01 = Collections.unmodifiableList(Arrays.asList(
|
||
s("TC_NO", 6),
|
||
s("PLAN_NO", 20),
|
||
i("SEQ_NO"),
|
||
s("UNIT_CODE", 4),
|
||
s("IN_MAT_NO", 20),
|
||
s("FLAG", 1),
|
||
s("DEAL_RESULT", 50),
|
||
s("SPARE_1", 20),
|
||
s("SPARE_2", 20),
|
||
s("SPARE_3", 20),
|
||
s("SPARE_4", 20),
|
||
s("SPARE_5", 20)
|
||
));
|
||
|
||
// ─────────────────────────────────────────────────────────────
|
||
// K12F02 计划钢卷删除 L2→L3
|
||
// ─────────────────────────────────────────────────────────────
|
||
public static final String ID_K12F02 = "K12F02";
|
||
public static final List<FieldDef> SCHEMA_K12F02 = Collections.unmodifiableList(Arrays.asList(
|
||
s("PLAN_NO", 20),
|
||
i("SEQ_NO"),
|
||
s("UNIT_CODE", 4),
|
||
s("IN_MAT_NO", 20),
|
||
s("CAUSE_DESC", 50),
|
||
s("DO_TIME", 14),
|
||
s("SPARE_1", 20),
|
||
s("SPARE_2", 20),
|
||
s("SPARE_3", 20),
|
||
s("SPARE_4", 20),
|
||
s("SPARE_5", 20)
|
||
));
|
||
|
||
// ─────────────────────────────────────────────────────────────
|
||
// K12F03 生产信息电文 L2→L3
|
||
// ─────────────────────────────────────────────────────────────
|
||
public static final String ID_K12F03 = "K12F03";
|
||
public static final List<FieldDef> SCHEMA_K12F03 = Collections.unmodifiableList(Arrays.asList(
|
||
s("FLAG", 1),
|
||
s("PLAN_NO", 20),
|
||
i("SEQ_NO"),
|
||
s("UNIT_CODE", 4),
|
||
s("PROC_SEQ_NO", 4),
|
||
s("ANNEAL_FLAG", 16),
|
||
s("IN_MAT_NO", 20),
|
||
i("IN_MAT_WT"),
|
||
f("IN_MAT_THICK", 9, 3),
|
||
f("IN_MAT_WIDTH", 10, 3),
|
||
s("OUT_MAT_NO", 20),
|
||
s("CUST_MAT_NO", 20),
|
||
i("OUT_MAT_ACT_WT"),
|
||
f("OUT_MAT_ACT_THICK", 9, 3),
|
||
f("OUT_MAT_ACT_WIDTH", 10, 3),
|
||
f("OUT_MAT_ACT_LEN", 15, 3),
|
||
f("OUT_MAT_ACT_INNER_DIA", 8, 2),
|
||
f("OUT_MAT_ACT_OUTER_DIA", 8, 2),
|
||
s("PROD_SHIFT_NO", 1),
|
||
s("PROD_SHIFT_GROUP", 1),
|
||
s("START_PROD_TIME", 14),
|
||
s("END_PROD_TIME", 14),
|
||
s("SOCKET_NO", 2),
|
||
s("REMARK", 100),
|
||
s("SPARE_1", 20),
|
||
s("SPARE_2", 20),
|
||
s("SPARE_3", 20),
|
||
s("SPARE_4", 20),
|
||
s("SPARE_5", 20)
|
||
));
|
||
}
|