diff --git a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskTubeMoveToErrorSlot.java b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskTubeMoveToErrorSlot.java index a4c7852..90b9b84 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskTubeMoveToErrorSlot.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskTubeMoveToErrorSlot.java @@ -2,9 +2,15 @@ package com.my.graphiteDigesterBg.task; import com.my.graphiteDigesterBg.diframe.DiTaskBase; import com.my.graphiteDigesterBg.diframe.Task; import com.my.graphiteDigesterBg.model.MdbOperationLog; +import com.my.graphiteDigesterBg.move.MoveCameraGrabFrame; import com.my.graphiteDigesterBg.move.MoveMoveTubeRackFromLiquidPlateToHeatPlate; import com.my.graphiteDigesterBg.move.MoveTubeToErrorRackSlot; import com.my.graphiteDigesterBg.resource.ResHeatingTubeRackSlotManager; +import org.opencv.imgcodecs.Imgcodecs; +import org.opencv.imgproc.Imgproc; + +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; @Task(name="TubeMoveToErrorSlot") public class TaskTubeMoveToErrorSlot extends DiTaskBase { @@ -30,6 +36,7 @@ public class TaskTubeMoveToErrorSlot extends DiTaskBase { } MdbOperationLog.log(this.getUser(), "试管架%d移动试管到异常位", slotIndex); + this.saveErrorCameraImage(); // move tube rack from liquid plate to heat plate var move = new MoveMoveTubeRackFromLiquidPlateToHeatPlate(); @@ -51,4 +58,19 @@ public class TaskTubeMoveToErrorSlot extends DiTaskBase { this.setStatus(TaskStatus.FINISHED); } + + // save error camera image + private void saveErrorCameraImage() { + var cameraGrabFrame = new MoveCameraGrabFrame(); + cameraGrabFrame.setDevice(this.getDevice()); + cameraGrabFrame.run(); + var imgMat = cameraGrabFrame.getDetectImageMat(); + + var errorImageFolder = this.getDevice().getEnv().getProperty("app.errorImageFolder",String.class); + var filename = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + // join slot index list + var slotIndexList = String.join("-", this.tubeIndexList.stream().map(Object::toString).toArray(String[]::new)); + var imgPath = String.format("%s/%s_%s.png", errorImageFolder, filename, slotIndexList); + Imgcodecs.imwrite(imgPath, imgMat); + } }