From 9079e59cc1d2a01d4dce17b29138149d1db8bddc Mon Sep 17 00:00:00 2001 From: sige Date: Thu, 18 Apr 2024 15:04:04 +0800 Subject: [PATCH] ~ --- app.db | Bin 360448 -> 360448 bytes .../com/iflytop/digester/DigestionTaskThread.java | 57 +++++++++++++++------ 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/app.db b/app.db index 3652f8671221ab195e54f9283c7e498db7e7892c..48e03f844a47930f0cac2bdffdf7c14588cbff3e 100644 GIT binary patch delta 16879 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 OJY;{tQ7=0P9q=7lxdZ?J diff --git a/src/main/java/com/iflytop/digester/DigestionTaskThread.java b/src/main/java/com/iflytop/digester/DigestionTaskThread.java index 84f4f2c..556070c 100644 --- a/src/main/java/com/iflytop/digester/DigestionTaskThread.java +++ b/src/main/java/com/iflytop/digester/DigestionTaskThread.java @@ -210,9 +210,15 @@ public class DigestionTaskThread extends Thread { if ( !this.errorTubeIndexes.isEmpty() ) { var device = Device.getInstance(); // 等待放入空试管架 + device.door.open(); this.waitForEmptyTubeRackPutIn(); + device.door.close(); + // 取出剩余异常试管 + device.door.open(); device.transferArm.takeOutTubesFromErrorSlot(this.errorTubeIndexes); + device.door.close(); + // 等待取出试管架 this.waitForTubeRackTakeOut(); } @@ -354,6 +360,7 @@ public class DigestionTaskThread extends Thread { for ( var liquid : errorRound.liquids ) { this.updateTaskStatus("ErrorRoundLiquidAdd", String.format("异常加液 %s %d", liquid.type, liquid.volume)); liquidAddition.addLiquidToTubes(this.errorTubeIndexes, liquid.type, liquid.volume); + this.updateTaskStatus("ErrorRoundLiquidAdd", "异常加液完成"); } this.updateTaskStatus("ErrorRoundLiquidAdd", "异常摇匀"); liquidAddition.shake(errorRound.shakingCount); @@ -364,13 +371,14 @@ public class DigestionTaskThread extends Thread { for ( var heating : errorRound.heatings ) { this.updateTaskStatus("ErrorRoundHeating", String.format("异常加热 %d℃ %d分钟", heating.temperature, heating.duration)); this.heatingSlot.heating(heating.temperature, heating.duration); + this.updateTaskStatus("ErrorRoundHeating", "异常加液完成"); } this.updateTaskStatus("ErrorRound", "移动异常试管架至加液区"); device.transferArm.moveTubeRackToLiquidPlate(errorSlot.index); // 拍照检查是否存在消解完成的试管 - this.takeShotAndCheckFinishedTubes(); + this.executeErrorRoundTakeShotAndCheckFinishedTubes(); // 如果不存在消解完成的试管则本轮次结束 if (this.finishedErrorTubeIndexes.isEmpty()) { @@ -401,6 +409,38 @@ public class DigestionTaskThread extends Thread { this.updateTaskStatus("ErrorRound", String.format("异常轮次执行结束, 异常试管剩余 : [%s]", remainTubeIndexListStr)); } + // 拍照检查试管 + private void executeErrorRoundTakeShotAndCheckFinishedTubes() { + this.updateTaskStatus("ErrorTubeCheck", "拍照检查异常试管,等待确认完成试管"); + Map message = Map.of("batchNo", this.taskModel.batchNo, "taskId", this.taskModel.outTaskId); + UfMdbNotification.action("ErrorTubeCheck", message); + + this.finishedErrorTubeIndexes.clear(); + synchronized ( this.finishedErrorTubeIndexes ) { + try { + this.finishedErrorTubeIndexes.wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + String finishedTubeIndexes = String.join(",", this.finishedErrorTubeIndexes.stream().map(Object::toString).toArray(String[]::new)); + this.updateTaskStatus("ErrorTubeCheck", String.format("完成试管已确认 : [%s]", finishedTubeIndexes)); + } + + + + + + + + + + + + + + // 等待放入试管架 private void waitForTubeRackPutIn() { this.updateTaskStatus("TubeRackPutInWait", "等待放入试管架"); @@ -481,22 +521,7 @@ public class DigestionTaskThread extends Thread { this.updateTaskStatus("TubeCheck", "异常试管已确认"); } - // 拍照检查试管 - private void takeShotAndCheckFinishedTubes() { - this.updateTaskStatus("ErrorTubeCheck", "拍照检查异常试管,等待确认完成试管"); - Map message = Map.of("batchNo", this.taskModel.batchNo, "taskId", this.taskModel.outTaskId); - UfMdbNotification.action("ErrorTubeCheck", message); - this.finishedErrorTubeIndexes.clear(); - synchronized ( this.finishedErrorTubeIndexes ) { - try { - this.finishedErrorTubeIndexes.wait(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - this.updateTaskStatus("ErrorTubeCheck", "完成试管已确认"); - } // 更新任务状态 private void updateTaskStatus(String status, String message) {