diff --git a/src/main/java/com/iflytop/digester/DigestionTaskThread.java b/src/main/java/com/iflytop/digester/DigestionTaskThread.java index 0085b12..4716001 100644 --- a/src/main/java/com/iflytop/digester/DigestionTaskThread.java +++ b/src/main/java/com/iflytop/digester/DigestionTaskThread.java @@ -453,6 +453,11 @@ public class DigestionTaskThread extends Thread { this.updateTaskStatus("ErrorRound", "移动异常试管架至加液区"); this.lockLiquidPlate("异常处理:检查是否存在消解完成的试管"); + // 如果这个时候试管已经由其他任务拿走了,后面也就不用处理了 + if ( this.errorTubeIndexes.isEmpty() ) { + this.unlockLiquidPlate("异常轮次执行结束, 无异常试管"); + return ; + } device.transferArm.moveTubeRackToLiquidPlate(errorSlot.index); // 拍照检查是否存在消解完成的试管 @@ -487,19 +492,29 @@ public class DigestionTaskThread extends Thread { this.unlockLiquidPlate("异常处理:消解完成的试管已取出"); // 更新异常试管索引列表 - this.errorTubeIndexes.removeAll(this.finishedErrorTubeIndexes); + var tasks = this.manager.getTasks(); + for ( var task : tasks ) { + task.errorTubeIndexRemoveItems(this.finishedErrorTubeIndexes); + } for ( var index : this.finishedErrorTubeIndexes ) { errorSlot.tubes.set(index, null); } - String remainTubeIndexListStr = String.join(",", this.errorTubeIndexes.stream().map(Object::toString).toArray(String[]::new)); this.updateTaskStatus("ErrorRound", String.format("异常轮次执行结束, 异常试管剩余 : [%s]", remainTubeIndexListStr)); } + // 更新异常试管索引列表 + public void errorTubeIndexRemoveItems( List items ) { + this.errorTubeIndexes.removeAll(items); + } + // 拍照检查试管 private void executeErrorRoundTakeShotAndCheckFinishedTubes() { this.updateTaskStatus("ErrorTubeCheck", "拍照检查异常试管,等待确认完成试管"); - Map message = Map.of("batchNo", this.taskModel.batchNo, "taskId", this.taskModel.outTaskId); + Map message = new HashMap<>(); + message.put("batchNo", this.taskModel.batchNo); + message.put("taskId", this.taskModel.outTaskId); + message.put("tubes", this.errorTubeIndexes); UfMdbNotification.action("ErrorTubeCheck", message); this.finishedErrorTubeIndexes.clear();