diff --git a/app.db b/app.db index 674552a..fcc641f 100644 Binary files a/app.db and b/app.db differ diff --git a/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java b/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java index cf2578c..1b855a5 100644 --- a/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java +++ b/src/main/java/com/iflytop/digester/DigestionTaskTheadManager.java @@ -2,10 +2,13 @@ package com.iflytop.digester; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.iflytop.digester.model.MdbDigestionSolution; import com.iflytop.digester.model.MdbDigestionTask; +import com.iflytop.digester.model.MdbOperationLog; import com.iflytop.digester.model.MdbRuntimeLog; import com.iflytop.digester.underframework.dao.model.UfMdbNotification; import com.iflytop.digester.underframework.dao.model.UfMdbOption; +import com.iflytop.digester.underframework.dao.record.UfActiveRecord; import com.iflytop.digester.underframework.util.UfJsonHelper; import jakarta.annotation.PostConstruct; import org.eclipse.paho.client.mqttv3.*; @@ -91,11 +94,16 @@ public class DigestionTaskTheadManager { actionJsonTree = jsonMapper.readTree(content); } catch (JsonProcessingException e) { // ignore invalid message + return ; } assert actionJsonTree != null; - String taskId = actionJsonTree.get("taskId").asText(); String actionName = actionJsonTree.get("action").asText(); + if ( "StartNewDigestion".equals(actionName) ) { + this.startNewDigestion(actionJsonTree.get("params")); + return; + } + Map actionParams = new HashMap<>(); if ( actionJsonTree.has("params") ) { var paramsJsonTree = actionJsonTree.get("params"); @@ -104,6 +112,7 @@ public class DigestionTaskTheadManager { } } + String taskId = actionJsonTree.get("taskId").asText(); DigestionTaskThread task = null; for ( var t : this.tasks ) { if ( t.getOutTaskId().equals(taskId) ) { @@ -118,6 +127,39 @@ public class DigestionTaskTheadManager { task.executeAction(actionName, actionParams); } + // start new digestion + private void startNewDigestion( JsonNode params ) { + String taskId = params.get("taskId").asText(); + String name = params.get("name").asText(); + String batchNo = params.get("batchNo").asText(); + List> tubes = new ArrayList<>(); + for ( JsonNode node : params.get("tubes") ) { + Map tube = new HashMap<>(); + tube.put("no", node.get("no").asText()); + tubes.add(tube); + } + + var digestion = UfActiveRecord.findOne(MdbDigestionSolution.class, Map.of("name", name)); + if ( null == digestion ) { + MdbRuntimeLog.log("DigestionTaskMqttMessage", "无效的消解配方名称 : %s", name); + return; + } + + var task = new MdbDigestionTask(); + task.digestionId = digestion.id; + task.outTaskId = taskId; + task.batchNo = batchNo; + task.tubes = UfJsonHelper.objectToJson(tubes); + task.status = "pending"; + task.message = "等待中"; + task.startedAt = (int)(System.currentTimeMillis() / 1000); + task.startedBy = ""; + task.mode = "auto"; + task.save(); + + this.startTask(task); + } + // Send message to trans bot public void sendMessageToTransBot(String action, Map params) { String myTopic = UfMdbOption.getString("DigestionTaskMqttMyTopic", ""); diff --git a/src/main/java/com/iflytop/digester/deviceinstance/HeatingTurntableSlot.java b/src/main/java/com/iflytop/digester/deviceinstance/HeatingTurntableSlot.java index 0455846..5c68e14 100644 --- a/src/main/java/com/iflytop/digester/deviceinstance/HeatingTurntableSlot.java +++ b/src/main/java/com/iflytop/digester/deviceinstance/HeatingTurntableSlot.java @@ -60,7 +60,7 @@ public class HeatingTurntableSlot { public List getExistTubeIndexes() { List indexes = new ArrayList<>(); for (int i = 0; i < tubes.size(); i++) { - if ( null != tubes.get(i) ) { + if ( null != tubes.get(i) && !"".equals(tubes.get(i).no)) { indexes.add(i); } } diff --git a/src/main/java/com/iflytop/digester/underframework/UfCmdSnippetExecutor.java b/src/main/java/com/iflytop/digester/underframework/UfCmdSnippetExecutor.java index f1d8b7d..92edf69 100644 --- a/src/main/java/com/iflytop/digester/underframework/UfCmdSnippetExecutor.java +++ b/src/main/java/com/iflytop/digester/underframework/UfCmdSnippetExecutor.java @@ -76,7 +76,7 @@ public class UfCmdSnippetExecutor { var cmdId = cmdNode.get("cmdId").asText(); var cmdParams = cmdNode.get("params").asText(); var desc = cmdNode.get("desc"); - if ( Boolean.TRUE.equals(logEnabled) && null != desc ) { + if ( Boolean.TRUE.equals(logEnabled) && null != desc && !"".equals(desc.asText())) { LOG.info("[Snippet Execute] : ∟ {}", desc.asText()); } this.executeStep(cmdId, cmdParams);