diff --git a/src/main/java/com/dreamworks/boditech/driver/actuator/ActIncubator.java b/src/main/java/com/dreamworks/boditech/driver/actuator/ActIncubator.java index 59eff05..a8da556 100644 --- a/src/main/java/com/dreamworks/boditech/driver/actuator/ActIncubator.java +++ b/src/main/java/com/dreamworks/boditech/driver/actuator/ActIncubator.java @@ -1,6 +1,7 @@ package com.dreamworks.boditech.driver.actuator; import com.dreamworks.boditech.driver.Device; import com.dreamworks.boditech.driver.entity.IncubatorSlot; +import com.dreamworks.boditech.utils.MyCommon; public class ActIncubator extends ActMotor { // slots private final IncubatorSlot[] slots; @@ -41,11 +42,13 @@ public class ActIncubator extends ActMotor { // lock slot public void lockSlot( int index ) { this.slots[index].isFree = false; + this.updateRuntimeSlotStatus(); } // unlock slot public void unlockSlot( int index ) { this.slots[index].isFree = true; + this.updateRuntimeSlotStatus(); } // has locked slot @@ -57,4 +60,12 @@ public class ActIncubator extends ActMotor { } return false; } + + // update runtime slot status + private void updateRuntimeSlotStatus() { + this.getDevice().runtimeVariableService.setString( + "DeviceIncubatorSlots", + MyCommon.objectToJson(this.slots) + ); + } } diff --git a/src/main/java/com/dreamworks/boditech/driver/task/TaskStartReset.java b/src/main/java/com/dreamworks/boditech/driver/task/TaskStartReset.java index d50b47f..f1a3f67 100644 --- a/src/main/java/com/dreamworks/boditech/driver/task/TaskStartReset.java +++ b/src/main/java/com/dreamworks/boditech/driver/task/TaskStartReset.java @@ -8,6 +8,8 @@ import com.dreamworks.boditech.service.AccountService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.List; +import java.util.Map; import java.util.Objects; public class TaskStartReset extends TaskBase { // mode : normal @@ -114,22 +116,36 @@ public class TaskStartReset extends TaskBase { LOG.info("[reset] task finished, cost {}s", (System.currentTimeMillis() - startTime)/1000.00); } - // clean incubator if error + /** + * 清理孵育盘, 孵育盘卡位状态由数据库获取,清理完成后重置数据库变量。 + * 数据库变量由每次获取和释放孵育盘卡位时更新。 + */ private void cleanIncubatorIfError() { if ( !Objects.equals(this.mode, TaskStartReset.MODE_ERROR) ) { return; } - this.analysisScanMotor.moveTo("analysisScanMotorDropCard"); ActIncubator incubatorMotor = (ActIncubator)device.getActuator(ActuatorModule.INCUBATOR_MOTOR); - IncubatorSlot[] incubatorSlots = incubatorMotor.getSlots(); - for ( IncubatorSlot incubatorSlot : incubatorSlots ) { - incubatorMotor.moveTo(incubatorSlot.getExitLocation()); + this.analysisScanMotor.moveTo("analysisScanMotorDropCard"); + + List> slots = this.device.runtimeVariableService.getJson("DeviceIncubatorSlots", List.class); + for ( Map slotInfo : slots ) { + Boolean isFree = (Boolean)slotInfo.get("isFree"); + if ( isFree ) { + continue; + } + + Integer index = (Integer)slotInfo.get("index"); + IncubatorSlot slot = incubatorMotor.getSlotByIndex(index); + LOG.info("[reset] incubator slot clean index {}", index); + incubatorMotor.moveTo(slot.getExitLocation()); this.analysisPushMotor.moveTo("analysisPushMotorScanStart"); this.analysisPushMotor.moveTo("analysisPushMotorStandby"); } this.analysisScanMotor.moveTo("analysisScanMotorStandBy"); + this.device.runtimeVariableService.setString("DeviceIncubatorSlots", "[]"); + LOG.info("[reset] incubator clean finished"); } // clean analysis scan track if error diff --git a/src/main/java/com/dreamworks/boditech/service/DeviceService.java b/src/main/java/com/dreamworks/boditech/service/DeviceService.java index f671079..c3c279a 100644 --- a/src/main/java/com/dreamworks/boditech/service/DeviceService.java +++ b/src/main/java/com/dreamworks/boditech/service/DeviceService.java @@ -34,13 +34,14 @@ public class DeviceService { * reset device */ public void reset() { -// String deviceWorkingStatus = this.runtimeVariableService.getString("DeviceWorkingStatus"); -// if ( !errorReset && "RUNNING".equals(deviceWorkingStatus) ) { -// throw new RuntimeException("DEVICE_RESET_NOT_CLEAN"); -// } - TaskStartReset task = new TaskStartReset(); task.mode = TaskStartReset.MODE_NORMAL; + + String deviceWorkingStatus = this.runtimeVariableService.getString("DeviceWorkingStatus"); + if ( "RUNNING".equals(deviceWorkingStatus) ) { + task.mode = TaskStartReset.MODE_ERROR; + } + Executor.executeTask(this.device, task); this.runtimeVariableService.setString("DeviceWorkingStatus","RUNNING"); } diff --git a/src/main/java/com/dreamworks/boditech/service/RuntimeVariableService.java b/src/main/java/com/dreamworks/boditech/service/RuntimeVariableService.java index 3cbc47e..5915689 100644 --- a/src/main/java/com/dreamworks/boditech/service/RuntimeVariableService.java +++ b/src/main/java/com/dreamworks/boditech/service/RuntimeVariableService.java @@ -1,5 +1,6 @@ package com.dreamworks.boditech.service; import com.dreamworks.boditech.mapper.RuntimeVariableMapper; +import com.dreamworks.boditech.utils.MyCommon; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @Service @@ -40,4 +41,16 @@ public class RuntimeVariableService { public void setString(String variableName, String variableValue) { this.runtimeVariableMapper.setVariableValue(variableName, variableValue); } + + // get json value + public T getJson(String variableName, Class clazz ) { + String json = this.getString(variableName); + return MyCommon.jsonToObject(json, clazz); + } + + // set json value + public void setJson(String variableName, Object variableValue) { + String json = MyCommon.objectToJson(variableValue); + this.setString(variableName, json); + } }