From eaedeec11721f3d351c8d5bcdfa7f1da7bb802c1 Mon Sep 17 00:00:00 2001 From: sige Date: Fri, 22 Mar 2024 19:13:58 +0800 Subject: [PATCH] ~ --- .../my/graphiteDigesterBg/step/StepChecking.java | 33 ++++++++++++++++++ .../step/StepExecuteErrorTask.java | 24 +++++++++++++ .../step/StepMoveErrorTubesToErrorSlot.java | 33 ++++++++++++++++++ .../my/graphiteDigesterBg/task/TaskDigestion.java | 5 +++ .../task/TaskErrorDigestion.java | 40 ++++++++++++++++++++++ .../src/pages/main/contents/TaskStepManagement.vue | 37 ++++++++++++++++++-- 6 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 src/src/main/java/com/my/graphiteDigesterBg/step/StepChecking.java create mode 100644 src/src/main/java/com/my/graphiteDigesterBg/step/StepExecuteErrorTask.java create mode 100644 src/src/main/java/com/my/graphiteDigesterBg/step/StepMoveErrorTubesToErrorSlot.java create mode 100644 src/src/main/java/com/my/graphiteDigesterBg/task/TaskErrorDigestion.java diff --git a/src/src/main/java/com/my/graphiteDigesterBg/step/StepChecking.java b/src/src/main/java/com/my/graphiteDigesterBg/step/StepChecking.java new file mode 100644 index 0000000..8e10dc2 --- /dev/null +++ b/src/src/main/java/com/my/graphiteDigesterBg/step/StepChecking.java @@ -0,0 +1,33 @@ +package com.my.graphiteDigesterBg.step; +import com.my.graphiteDigesterBg.diframe.*; +import com.my.graphiteDigesterBg.diframe.model.DiMdbNotification; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlot; +import com.my.graphiteDigesterBg.task.TaskDigestion; +import java.util.LinkedHashMap; +import java.util.List; +@TaskStep(name="Checking") +public class StepChecking extends DiTaskStepBase { + @Override + public void run() { + var task = (TaskDigestion)this.getTask(); + var slot = task.getSlot(); + + if (!ResHeatingTubeRackSlot.LOCATION_LIQUID_PLATE.equals(slot.rackPosition)) { + task.throwException("试管架尚未移至加液区域,无法执行检测操作"); + return; + } + + DiMdbNotification.taskAction(task,"TaskDigestionStepChecking"); + var action = task.waitAction("TaskDigestionStepChecking"); + task.errorTubeIndexes = action.getResult(List.class); + } + + // action done + public void actionDone( LinkedHashMap params ) { + var task = (TaskDigestion)this.getTask(); + var action = task.getAction("TaskDigestionStepChecking"); + + Object tubes = params.get("tubes"); + action.finish(tubes); + } +} diff --git a/src/src/main/java/com/my/graphiteDigesterBg/step/StepExecuteErrorTask.java b/src/src/main/java/com/my/graphiteDigesterBg/step/StepExecuteErrorTask.java new file mode 100644 index 0000000..f94a90f --- /dev/null +++ b/src/src/main/java/com/my/graphiteDigesterBg/step/StepExecuteErrorTask.java @@ -0,0 +1,24 @@ +package com.my.graphiteDigesterBg.step; +import com.my.graphiteDigesterBg.diframe.*; +import com.my.graphiteDigesterBg.task.TaskDigestion; +import java.util.Map; +@TaskStep(name="ExecuteErrorTask") +public class StepExecuteErrorTask extends DiTaskStepBase { + // duration in minutes + public Integer errorTaskId; + + @Override + public void run() { + var task = (TaskDigestion)this.getTask(); + DiTaskManager taskManager = task.getDevice().getTaskManager(); + DiTask errorTask = taskManager.generateTask("ErrorDigestion", Map.of( + "id", this.errorTaskId, + "errorTubes", task.errorRackTubeIndexes + )); + errorTask.setUser(task.getUser()); + errorTask.prepare(); + errorTask.init(); + DiTaskExecutor executor = task.getDevice().getTaskManager().getExecutor(); + executor.appendTask(errorTask); + } +} diff --git a/src/src/main/java/com/my/graphiteDigesterBg/step/StepMoveErrorTubesToErrorSlot.java b/src/src/main/java/com/my/graphiteDigesterBg/step/StepMoveErrorTubesToErrorSlot.java new file mode 100644 index 0000000..701d58b --- /dev/null +++ b/src/src/main/java/com/my/graphiteDigesterBg/step/StepMoveErrorTubesToErrorSlot.java @@ -0,0 +1,33 @@ +package com.my.graphiteDigesterBg.step; +import com.my.graphiteDigesterBg.diframe.DiTaskStepBase; +import com.my.graphiteDigesterBg.diframe.TaskStep; +import com.my.graphiteDigesterBg.move.MoveTubeToErrorRackSlot; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; +import com.my.graphiteDigesterBg.task.TaskDigestion; +@TaskStep(name="MoveErrorTubesToErrorSlot") +public class StepMoveErrorTubesToErrorSlot extends DiTaskStepBase { + @Override + public void run() { + var task = (TaskDigestion)this.getTask(); + var slot = task.getSlot(); + var errorTubes = task.errorTubeIndexes; + + var slotMan = task.getResourceManager(ResHeatingTubeRackSlotManager.class); + var errorSlot = slotMan.getErrorSlot(); + var emptyTubeIndexList = errorSlot.allocEmptyTubeIndexes(errorTubes.size()); + task.errorRackTubeIndexes = emptyTubeIndexList; + + // move error tubes to error rack + for (int i = 0; i < errorTubes.size(); i++) { + var move = new MoveTubeToErrorRackSlot(); + move.setDevice(task.getDevice()); + move.srcSlotIndex = slot.index; + move.srcTubeIndex = (Integer)errorTubes.get(i); + move.errorTubeIndex = emptyTubeIndexList.get(i); + move.run(); + } + + throw new RuntimeException("无法正常加液"); + // @TODO: 取出收需要标记响应位置为空, 不然后面加液会出错 ~~~ + } +} diff --git a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskDigestion.java b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskDigestion.java index ce4268f..3c3762b 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskDigestion.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskDigestion.java @@ -7,6 +7,7 @@ import com.my.graphiteDigesterBg.model.MdbOperationLog; import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlot; import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; +import java.util.List; import java.util.Map; @Task(name="Digestion") public class TaskDigestion extends DiTaskStepTaskBase { @@ -14,6 +15,10 @@ public class TaskDigestion extends DiTaskStepTaskBase { public Integer id; // slot index public Integer slotIndex; + // list of error tubes + public List errorTubeIndexes; + // list of error rack tubes + public List errorRackTubeIndexes; // slot private ResHeatingTubeRackSlot slot; diff --git a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskErrorDigestion.java b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskErrorDigestion.java new file mode 100644 index 0000000..cfd4666 --- /dev/null +++ b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskErrorDigestion.java @@ -0,0 +1,40 @@ +package com.my.graphiteDigesterBg.task; +import com.my.graphiteDigesterBg.diframe.DiActiveRecord; +import com.my.graphiteDigesterBg.diframe.DiTaskStepTaskBase; +import com.my.graphiteDigesterBg.diframe.Task; +import com.my.graphiteDigesterBg.model.MdbDigestionTask; +import com.my.graphiteDigesterBg.model.MdbOperationLog; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlot; +import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; +import java.util.List; +@Task(name="ErrorDigestion") +public class TaskErrorDigestion extends DiTaskStepTaskBase { + // id of error digestion task + public Integer id; + // list of error tubes + public List errorTubes; + // taskModel + private MdbDigestionTask taskModel; + + @Override + protected void setup() { + this.taskModel = DiActiveRecord.findOne(MdbDigestionTask.class, this.id); + if ( this.taskModel == null ) { + throw new RuntimeException("task [" + this.id.toString() + "] not found"); + } + this.loadStepsByJson(this.taskModel.steps); + MdbOperationLog.log(this.getUser(), "异常试管架 : 执行预设【%s】", this.taskModel.name); + } + + // throw exception + public void throwException(String message) { + String msg = String.format("[异常试管架 - %s] : %s", this.taskModel.name, message); + throw new RuntimeException(msg); + } + + // get slot + public ResHeatingTubeRackSlot getSlot() { + var slotMan = this.getResourceManager(ResHeatingTubeRackSlotManager.class); + return slotMan.getErrorSlot(); + } +} diff --git a/src/web/src/pages/main/contents/TaskStepManagement.vue b/src/web/src/pages/main/contents/TaskStepManagement.vue index d1961a6..b6d296f 100644 --- a/src/web/src/pages/main/contents/TaskStepManagement.vue +++ b/src/web/src/pages/main/contents/TaskStepManagement.vue @@ -7,6 +7,10 @@