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