| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package com.mes.step;
- import com.mes.core.StationContext;
- import com.mes.tcp.MessageSender;
- import com.mes.ui.component.WorkstationPanel;
- /**
- * 物料校验步骤
- * 发送VLDW消息校验物料(底护板、冷板等)是否可用
- * 校验失败后自动重新弹出扫码框
- */
- public class ValidateMaterialStep extends AbstractStep {
- private MessageSender messageSender;
- private WorkstationPanel panel; // 工位面板引用
- public ValidateMaterialStep() {
- super("validate_material", "物料校验");
- this.messageType = "VLDW";
- this.async = true; // 需要等待服务端响应
- this.requiresUserInteraction = false;
- this.craft = "400004"; // 默认工艺号
- }
- public void setMessageSender(MessageSender messageSender) {
- this.messageSender = messageSender;
- }
- /**
- * 设置工位面板引用(用于弹出扫码框)
- */
- public void setPanel(WorkstationPanel panel) {
- this.panel = panel;
- }
- @Override
- public boolean execute(StationContext context) {
- String productSn = context.getProcessedProductSn();
- String materialSn = context.getMaterialSn();
- if (productSn == null || productSn.isEmpty()) {
- log.error("[{}] 物料校验失败: 工件码为空", context.getStationCode());
- return false;
- }
- if (materialSn == null || materialSn.isEmpty()) {
- log.error("[{}] 物料校验失败: 物料码为空", context.getStationCode());
- return false;
- }
- context.setStatusMessage("正在校验物料...", 0);
- log.info("[{}] 发送物料校验: product={}, material={}, craft={}",
- context.getStationCode(), productSn, materialSn, craft);
- // 发送校验消息
- if (messageSender != null) {
- return messageSender.sendValidateMaterial(
- productSn,
- materialSn,
- context.getUser(),
- craft,
- context.getStationCode()
- );
- } else {
- log.error("[{}] MessageSender未设置", context.getStationCode());
- return false;
- }
- }
- @Override
- public void onServerResponse(StationContext context, String result, String message) {
- if ("OK".equalsIgnoreCase(result)) {
- context.setMaterialValidated(true);
- context.setStatusMessage("物料校验通过", 0);
- log.info("[{}] 物料校验通过", context.getStationCode());
- onSuccess(context);
- } else {
- context.setMaterialValidated(false);
- context.setMaterialSn(null); // 清空物料码
- String errorMsg = getErrorMessage(result, message);
- context.setStatusMessage(errorMsg, -1);
- log.warn("[{}] 物料校验失败: {}", context.getStationCode(), errorMsg);
-
- // 校验失败后自动重新弹出扫码框
- if (panel != null) {
- log.info("[{}] 物料校验失败,自动重新弹出扫码框", context.getStationCode());
- javax.swing.SwingUtilities.invokeLater(() -> panel.requestMaterialScan());
- }
-
- onFailure(context, errorMsg);
- }
- }
- @Override
- protected String getErrorMessage(String resultCode, String message) {
- switch (resultCode.toUpperCase()) {
- case "NE":
- return "物料不存在";
- case "US":
- return "物料已被使用";
- case "EX":
- return "物料已过期";
- case "NM":
- return "物料不匹配";
- default:
- return "物料校验失败: " + resultCode;
- }
- }
- @Override
- public boolean canExecute(StationContext context) {
- return context.isQualityPassed() &&
- context.getMaterialSn() != null &&
- !context.getMaterialSn().isEmpty();
- }
- }
|