diff --git a/src/main/java/com/iflytop/gd/app/core/CraftsContext.java b/src/main/java/com/iflytop/gd/app/core/CraftsContext.java index 839d0da..7d7421b 100644 --- a/src/main/java/com/iflytop/gd/app/core/CraftsContext.java +++ b/src/main/java/com/iflytop/gd/app/core/CraftsContext.java @@ -5,6 +5,7 @@ import com.iflytop.gd.app.common.enums.CraftEvents; import com.iflytop.gd.app.common.enums.CraftStates; import com.iflytop.gd.app.model.bo.CraftsStep; import com.iflytop.gd.app.model.entity.Crafts; +import com.iflytop.gd.app.service.CraftsStepService; import com.iflytop.gd.app.service.WebSocketService; import com.iflytop.gd.common.constant.WebSocketMessageType; import lombok.Getter; @@ -26,12 +27,14 @@ public class CraftsContext implements Runnable { private final List craftsStepList; private final StateMachine sm; private final WebSocketService ws; + private final CraftsStepService craftsStepService; private int currentIndex = 0; - public CraftsContext(String heatId, Crafts craft, StateMachineFactory factory, WebSocketService ws) { + public CraftsContext(String heatId, Crafts craft, StateMachineFactory factory, WebSocketService ws, CraftsStepService craftsStepService) { this.heatId = heatId; this.craftsStepList = JSONUtil.parseArray(craft.getSteps()).toList(CraftsStep.class); this.ws = ws; + this.craftsStepService = craftsStepService; this.sm = factory.getStateMachine(heatId); Mono.from(sm.startReactively()).block(); @@ -83,14 +86,13 @@ public class CraftsContext implements Runnable { } private boolean executeStep(CraftsStep step) throws InterruptedException { - // TODO: 推送单步信息并实际调用设备服务 Map dataMap = new HashMap<>(); dataMap.put("heatId", heatId); dataMap.put("currentStep", step.getMethod()); ws.push(WebSocketMessageType.CRAFTS_STEP, dataMap); Thread.sleep(3000); - return true; + return craftsStepService.executeStep(heatId, step); } // 暂停 diff --git a/src/main/java/com/iflytop/gd/app/service/CraftsService.java b/src/main/java/com/iflytop/gd/app/service/CraftsService.java index b39844d..eb0ec38 100644 --- a/src/main/java/com/iflytop/gd/app/service/CraftsService.java +++ b/src/main/java/com/iflytop/gd/app/service/CraftsService.java @@ -26,6 +26,7 @@ import java.util.stream.Collectors; public class CraftsService extends ServiceImpl { private final StateMachineFactory stateMachineFactory; private final WebSocketService webSocketService; + private final CraftsStepService craftsStepService; private ExecutorService executor; private final ConcurrentHashMap contextMap = new ConcurrentHashMap<>(); @@ -47,7 +48,7 @@ public class CraftsService extends ServiceImpl { if (craft == null) { return false; } - CraftsContext ctx = new CraftsContext(heatId, craft, stateMachineFactory, webSocketService); + CraftsContext ctx = new CraftsContext(heatId, craft, stateMachineFactory, webSocketService, craftsStepService); CompletableFuture cf = CompletableFuture.runAsync(() -> { try { ctx.run(); diff --git a/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java b/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java new file mode 100644 index 0000000..8272c5a --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/service/CraftsStepService.java @@ -0,0 +1,58 @@ +package com.iflytop.gd.app.service; + +import cn.hutool.json.JSONObject; +import com.iflytop.gd.app.model.bo.CraftsStep; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * 工艺步骤 + */ +@Service +@RequiredArgsConstructor +public class CraftsStepService { + + /** + * 执行单个工艺步骤 + */ + public boolean executeStep(String heatId, CraftsStep step) throws InterruptedException { + String method = step.getMethod(); + JSONObject params = step.getParams(); + return switch (method) { + case "UP_TRAY" -> upTray(heatId); + case "DOWN_TRAY" -> downTray(heatId); + case "ADD_LIQUID" -> addLiquid(heatId, params); + case "DELAY" -> delay(params); + default -> false; + }; + } + + /** + * 将托盘升起 + */ + private boolean upTray(String heatId) { + return true; + } + + /** + * 将托盘降下 + */ + private boolean downTray(String heatId) { + return true; + } + + /** + * 加液操作 + */ + private boolean addLiquid(String heatId, JSONObject params) { + return true; + } + + /** + * 等待指定秒数 + */ + private boolean delay(JSONObject params) throws InterruptedException { + Thread.sleep(params.getInt("second") * 1000L); + return true; + } +} \ No newline at end of file