ソースを参照

feat(protocol): v3 协议 INSPXXX/OPXXX0 前道工位号显示
CheckQualityStep 收到 QN/QD 结果时,从 AQDW 报文原文(99 字节)
substring(72,75) 提取 lx 前道工位号紧凑格式,转成可读工位号:
"13" → OP130
"I3" → INSP030
"I10" → INSP100

对齐 mesclient-okng a20eea3 的 ErrorMsg.getOprnoName 逻辑,
未改动 dispatch/engine/step 签名,一处改动完成。

wangxichen 2 日 前
コミット
f3fec2e5c7
1 ファイル変更32 行追加2 行削除
  1. 32 2
      src/com/mes/step/CheckQualityStep.java

+ 32 - 2
src/com/mes/step/CheckQualityStep.java

@@ -113,7 +113,7 @@ public class CheckQualityStep extends AbstractStep {
             case "NG":
                 return "该工件本工位已加工,结果:NG";
             case "QD":
-                return "前道工序未完成";
+                return "该工件" + parseLastOprnoFromMsg(message) + "未加工";
             case "NE":
                 return "工件不存在";
             case "LK":
@@ -123,7 +123,7 @@ public class CheckQualityStep extends AbstractStep {
             case "NN":
                 return "该工件跳过该工位";
             case "QN":
-                return "前道工序加工NG";
+                return "该工件" + parseLastOprnoFromMsg(message) + "加工NG";
             case "NF":
                 return "该工件已合格下线";
             case "NR":
@@ -187,4 +187,34 @@ public class CheckQualityStep extends AbstractStep {
         context.updateUI();
         onSuccess(context);
     }
+
+    // ========== v3 协议:INSPXXX / OPXXX0 前道工位号解析 ==========
+
+    /**
+     * 从 AQDW 响应原文中解析 lx(前道工位号紧凑格式),并转成可读工位号。
+     * AQDW v3(99 字节)中 lx 位于 substring(72,75),占 3 字符(含空格 trim)。
+     */
+    private static String parseLastOprnoFromMsg(String message) {
+        if (message == null || message.length() < 75) return "OP";
+        return getOprnoName(message.substring(72, 75).trim());
+    }
+
+    /**
+     * 紧凑 lx → 可读工位号
+     *   "13"  → "OP130"
+     *   "I3"  → "INSP030"(Integer("3") * 10 = 30)
+     *   "I10" → "INSP100"
+     */
+    private static String getOprnoName(String lx) {
+        if (lx == null || lx.isEmpty()) return "OP";
+        if (lx.startsWith("I")) {
+            try {
+                int num = Integer.parseInt(lx.substring(1)) * 10;
+                return String.format("INSP%03d", num);
+            } catch (Exception e) {
+                return "INSP" + lx.substring(1);
+            }
+        }
+        return "OP" + lx + "0";
+    }
 }