Jelajahi Sumber

前缀校验

wangxichen 3 hari lalu
induk
melakukan
46571298d2

+ 2 - 2
src/com/mes/step/ScanMaterialStep.java

@@ -59,8 +59,8 @@ public class ScanMaterialStep extends AbstractStep {
 
         // 前缀校验
         if (prefix != null && !prefix.isEmpty() && !materialSn.startsWith(prefix)) {
-            log.warn("[{}] {}格式错误,期望前缀: {}", context.getStationCode(), label, prefix);
-            context.setStatusMessage(label + "格式错误", -1);
+            log.warn("[{}] {}前缀错误: {},期望前缀: {}", context.getStationCode(), label, materialSn, prefix);
+            context.setStatusMessage(label + "前缀应为 " + prefix, -1);
             context.setMaterialSn(null);
             
             // 格式错误,重新弹出扫码框

+ 17 - 0
src/com/mes/step/ScanProductStep.java

@@ -5,9 +5,12 @@ import com.mes.core.StationContext;
 /**
  * 扫描工件码步骤
  * 等待用户扫描工件码,然后自动进入下一步
+ * 支持通过config.prefix配置前缀校验
  */
 public class ScanProductStep extends AbstractStep {
 
+    private String prefix = "";  // 期望的前缀,从config读取
+
     public ScanProductStep() {
         super("scan_product", "扫描工件码");
         this.async = false;  // 扫码完成后同步进入下一步
@@ -15,6 +18,12 @@ public class ScanProductStep extends AbstractStep {
     }
 
     @Override
+    public void configure(java.util.Map<String, Object> config) {
+        super.configure(config);
+        this.prefix = getConfigString("prefix", "");
+    }
+
+    @Override
     public boolean execute(StationContext context) {
         String productSn = context.getProductSn();
         
@@ -31,6 +40,14 @@ public class ScanProductStep extends AbstractStep {
             log.info("[{}] 36位码处理: {} -> {}", context.getStationCode(), productSn, processedSn);
         }
 
+        // 前缀校验
+        if (prefix != null && !prefix.isEmpty() && !processedSn.startsWith(prefix)) {
+            log.warn("[{}] 工件码前缀错误: {},期望前缀: {}", context.getStationCode(), processedSn, prefix);
+            context.setStatusMessage("工件码前缀应为 " + prefix, -1);
+            context.setProductSn(null);  // 清空,让用户重新扫
+            return false;
+        }
+
         // 保存处理后的工件码
         context.setProductSn(processedSn);
         context.setState(StationContext.WorkflowState.SCANNING);