Browse Source

update

tags/v0
zhaohe 9 months ago
parent
commit
7b69ecb2ce
  1. 8
      src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java
  2. 3
      src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java
  3. 5
      src/main/java/a8k/service/app/devicectrl/exdriver/MotorEnableExDriver.java
  4. 3
      src/main/java/a8k/service/app/devicectrl/exdriver/MotorMoveZeroExDriver.java
  5. 38
      src/main/java/a8k/service/app/devicectrl/param/calibration/HbotSamplePosCalibration.java
  6. 2
      src/main/java/a8k/service/app/devicectrl/script/DeviceCtrlScripter.java
  7. 108
      src/main/java/a8k/service/test/MainflowCtrlTestService.java
  8. 36
      src/main/java/a8k/service/test/VirtualDeviceSimulationTest.java
  9. 5
      src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_01_FLOW1.java
  10. 4
      src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_02_FLOW2.java
  11. 12
      src/main/java/a8k/service/test/state/TestModeState.java
  12. 11
      src/main/java/a8k/type/TubeHolderScanResult.java
  13. BIN
      src/main/resources/app.db

8
src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java

@ -81,12 +81,14 @@ public class PLATE_OPT_SCAN extends A8kStepAction {
}
//扫描反应板并获取结果
if (testModeState.getEnableOptScan()) {
if (testModeState.getDisableOptScan()) {
optScanModuleCtrlService.dropPlate();
return reactionResults;
}
OptAnalyzeContext optCxt = new OptAnalyzeContext(cxt.projCfg, cxt.bloodType);
optScanModuleCtrlService.doOptScan(optCxt);
reactionResults = optCxt.result;
}
//丢板
optScanModuleCtrlService.dropPlate();

3
src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java

@ -90,6 +90,9 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction {
//如果测试模式设置好了试管扫描结果那么直接使用虚拟扫描结果
if (testModeState.getVirtualTubeScanResult() != null) {
if (result.isHasTubeInIt()) {
throw AppException.of("试管架中有试管,但是测试模式中设置了虚拟试管扫描结果");
}
result = testModeState.getVirtualTubeScanResult();
}

5
src/main/java/a8k/service/app/devicectrl/exdriver/MotorEnableExDriver.java

@ -33,12 +33,7 @@ public class MotorEnableExDriver {
Integer val = enable ? 1 : 0;
miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, val);
miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, val);
if (!enable) {
//TODO: 只有第一台样机由于无法手拧所以永不失能
// stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, val);
} else {
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, val);
}
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModGripperZM, val);
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModShakeM, val);
}

3
src/main/java/a8k/service/app/devicectrl/exdriver/MotorMoveZeroExDriver.java

@ -47,6 +47,9 @@ public class MotorMoveZeroExDriver {
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModClampingM, 5000);
stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModShakeM, 5000);
// move to default pos
stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.ShakeModShakeM, 90, 5000);
}
}

38
src/main/java/a8k/service/app/devicectrl/param/calibration/HbotSamplePosCalibration.java

@ -86,11 +86,12 @@ public class HbotSamplePosCalibration {
enableModule();
motorEnableExDriver.preProcessRelatedModuleEnable(true);
motorMoveZeroExDriver.preProcessModuleMoveToZero();
// motorEnableExDriver.tubeFeedRelatedModuleEnable(true);
motorMoveZeroExDriver.preProcessModuleMoveToZero();
pipetteCtrlDriver.zMotorMoveZeroBlock();
hbotBaseMoveExDriver.moveToZero();
// motorMoveZeroExDriver.tubeFeeddingModuleMoveToZero();
}
@ExtApiFn(name = "使能相关模块", group = "测试工具", order = 12)
@ -101,46 +102,21 @@ public class HbotSamplePosCalibration {
@ExtApiFn(name = "失能相关模块", group = "测试工具", order = 13)
public void disableModule() throws AppException {
stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1);
stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, 10, 3000);
pipetteCtrlDriver.zMotorEnable(0);
hbotBaseMoveExDriver.enable(0);
motorEnableExDriver.forceDisableAllMotor();
}
// @ExtApiFn(name = "试管夹具复位", group = "辅助工具", order = 21)
// public void tubeClampMoveZero() throws AppException {
// stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1);
// stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModShakeM, 1);
// stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModShakeM, 5000);
// stepMotorCtrlDriver.stepMotorEasyMoveToBlock(StepMotorMId.ShakeModShakeM, 90, 5000);
// stepMotorCtrlDriver.stepMotorEasyMoveToZeroBlock(StepMotorMId.ShakeModClampingM, 5000);
// tubePreProcesModuleExDriver.clampingMReleaseTube();
// stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModShakeM, 0);
// }
//
// @ExtApiFn(name = "释放试管", group = "辅助工具", order = 22)
// public void releaseTubeClamp() throws AppException {
// stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1);
// stepMotorCtrlDriver.stepMotorEasyMoveByBlock(StepMotorMId.ShakeModClampingM, 20, 5000);
// // tubePreProcesModuleExDriver.clampingMReleaseTube();
// }
//
// @ExtApiFn(name = "夹紧试管", group = "辅助工具", order = 23)
// public void clampTubeClamp() throws AppException {
// stepMotorCtrlDriver.stepMotorEnable(StepMotorMId.ShakeModClampingM, 1);
// tubePreProcesModuleExDriver.clampingMclampTube();
// }
@ExtApiFn(name = "取试管到试管摇匀位", group = "辅助工具", order = 21)
public void takeTubeToShakePos(Boolean isHtube) throws AppException {
tubePreProcesCtrlService.takeTubeFromTubeholderToShakePos(isHtube);
tubePreProcesCtrlService.takeTubeCap();
}
@ExtApiFn(name = "放回试管到试管架中", group = "辅助工具", order = 22)
public void putTubeBak() throws AppException {
tubePreProcesCtrlService.putbakTubeCapAndPutbakTubeToTubeHolder();
}
//
// 标定Z轴

2
src/main/java/a8k/service/app/devicectrl/script/DeviceCtrlScripter.java

@ -197,6 +197,7 @@ public class DeviceCtrlScripter {
//吐液
distribute(PipetteGunBindActionType.DISTRIBUTION_LARGE_BUFFER_SOLUTION_PROBE_SUBSTANCE, ctx, takeul);
//丢tip
hbotCtrlService.dropTip();
@ -265,7 +266,6 @@ public class DeviceCtrlScripter {
pipetteCtrlDriver.clearHangingLiquid(2);
//丢tip
hbotCtrlService.dropTip();
//归零,待机

108
src/main/java/a8k/service/test/MainflowCtrlTestService.java

@ -20,28 +20,21 @@ import a8k.service.app.devicectrl.exdriver.MotorEnableExDriver;
import a8k.service.dao.A8kProjIdCardDao;
import a8k.service.dao.A8kProjInfoDao;
import a8k.service.dao.A8kProjOptConfigDao;
import a8k.service.test.fakeproj.FAKE_PROJ_01;
import a8k.service.test.fakeproj.FAKE_PROJ_02;
import a8k.service.test.fakeproj.FakeProjInfo;
import a8k.service.test.fakeproj.FakeProjInfoFactory;
import a8k.service.test.fakeproj.*;
import a8k.service.test.state.TestModeState;
import a8k.service.test.state.VirtualDevice;
import a8k.service.test.type.MainFlowCtrlTestCaseType;
import a8k.type.*;
import a8k.type.checkpoint.CheckResult;
import a8k.type.consumables.ConsumablesScanReportErrorType;
import a8k.type.ecode.AECodeError;
import a8k.type.exception.AppException;
import a8k.type.tube_setting.TubeHolderSetting;
import a8k.type.type.A8kTubeHolderType;
import a8k.type.type.TipGroup;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Objects;
@Component
@Slf4j
@ -127,7 +120,7 @@ public class MainflowCtrlTestService {
return scanResult;
}
TubeHolderSetting createOneActiveTubeHolderSetting(A8kTubeHolderType type, Integer tubeNum, List<Integer> projId) {
TubeHolderSetting createOneActiveTubeHolderSetting(Integer tubeNum, List<Integer> projId) {
TubeHolderSetting setting = new TubeHolderSetting();
// setting.tubeHolderType = type;
setting.active = true;
@ -156,7 +149,7 @@ public class MainflowCtrlTestService {
@ExtApiFn(name = "使能光学检查", group = "测试模式", order = 103)
public void setEnableOptScan(Boolean enable) {
testModeState.setEnableOptScan(enable);
testModeState.setDisableOptScan(enable);
}
//
@ -247,76 +240,83 @@ public class MainflowCtrlTestService {
}
}
@ExtApiFn(name = "执行一次简单的测试(无试管测试.流程1)", order = 400)
public String doSimpleTest(Boolean isHTube, Integer tubeNum) throws AppException {
void doOnceSimpleTest(FakeProjInfo proj, Boolean isHTube, Integer tubeNum) throws AppException {
if (tubeNum <= 0) {
throw AppException.of("试管数量必须大于0");
}
gstate.setDeviceInited(true);
stopAndWaittingForDeviceStop();
//清空项目的数据库配置
resetProjDB();
//设置虚拟耗材,只有一个高试管
testModeState.setVirtualTubeScanResult(createScanResult(A8kTubeHolderType.BloodTube, isHTube, tubeNum));
//无校验模式
testModeState.setNoCheckMode(true);
//无光学检查
testModeState.setEnableOptScan(true);
//添加项目信息
addProjInfo(FAKE_PROJ_01.class);
//设置耗材状态假定已经扫描过耗材
LoadingConsumablesDirectly(ConsumableGroup.GROUP0, new FAKE_PROJ_01());
//设置试管架扫描信息全部设置成高试管
LoadingConsumablesDirectly(ConsumableGroup.GROUP0, proj);
//添加一个新试管配置
appTubeSettingMgrService.removeAllTubeSetting();
for (int i = 0; i < 3; i++) {
TubeHolderSetting setting = createOneActiveTubeHolderSetting(A8kTubeHolderType.BloodTube, tubeNum, List.of(new FAKE_PROJ_01().projId));
appTubeSettingMgrService.newTubeHolderSetting(setting);
}
appTubeSettingMgrService.newTubeHolderSetting(//
createOneActiveTubeHolderSetting(tubeNum, List.of(proj.projId)));
//开始工作
appDeviceCtrlService.startWork();
}
public void regFakeProjInfo() {
resetProjDB();
addProjInfo(FAKE_PROJ_01_FLOW1.class);
addProjInfo(FAKE_PROJ_02_FLOW2.class);
addProjInfo(FAKE_PROJ_03.class);
addProjInfo(FAKE_PROJ_04.class);
addProjInfo(FAKE_PROJ_05.class);
addProjInfo(FAKE_PROJ_06.class);
}
@ExtApiFn(name = "执行一次简单的测试(无试管测试.流程1)", order = 400)
public String doSimpleTest(Boolean isHTube, Integer tubeNum) throws AppException {
regFakeProjInfo();
//设置虚拟耗材,只有一个高试管,无校验模式,无光学检查
testModeState.resetAll();
testModeState.setVirtualTubeScanResult(createScanResult(A8kTubeHolderType.BloodTube, isHTube, tubeNum));
testModeState.setNoCheckMode(true);
testModeState.setDisableOptScan(true);
doOnceSimpleTest(new FAKE_PROJ_01_FLOW1(), isHTube, tubeNum);
return "开始测试";
}
@ExtApiFn(name = "执行一次简单的测试(无试管测试.流程2)", order = 401)
public String doSimpleTest2(Boolean isHTube, Integer tubeNum) throws AppException {
if (tubeNum <= 0) {
throw AppException.of("试管数量必须大于0");
regFakeProjInfo();
testModeState.resetAll();
testModeState.setVirtualTubeScanResult(createScanResult(A8kTubeHolderType.BloodTube, isHTube, tubeNum));
testModeState.setNoCheckMode(true);
testModeState.setDisableOptScan(true);
doOnceSimpleTest(new FAKE_PROJ_02_FLOW2(), isHTube, tubeNum);
return "开始测试";
}
@ExtApiFn(name = "执行一次十个试管,双项目,无耗材测试", order = 402)
public String doSimpleTest3() throws AppException {
regFakeProjInfo();
testModeState.resetAll();
testModeState.setVirtualTubeScanResult(createScanResult(A8kTubeHolderType.BloodTube, true, 10));
testModeState.setNoCheckMode(true);
testModeState.setDisableOptScan(true);
gstate.setDeviceInited(true);
stopAndWaittingForDeviceStop();
//清空项目的数据库配置
resetProjDB();
//设置虚拟耗材,只有一个高试管
testModeState.setVirtualTubeScanResult(createScanResult(A8kTubeHolderType.BloodTube, isHTube, tubeNum));
//无校验模式
testModeState.setNoCheckMode(true);
//无光学检查
testModeState.setEnableOptScan(true);
//添加项目信息
addProjInfo(FAKE_PROJ_02.class);
//设置耗材状态假定已经扫描过耗材
LoadingConsumablesDirectly(ConsumableGroup.GROUP1, new FAKE_PROJ_02());
//设置试管架扫描信息全部设置成高试管
LoadingConsumablesDirectly(ConsumableGroup.GROUP0, new FAKE_PROJ_01_FLOW1());
LoadingConsumablesDirectly(ConsumableGroup.GROUP1, new FAKE_PROJ_02_FLOW2());
LoadingConsumablesDirectly(ConsumableGroup.GROUP3, new FAKE_PROJ_01_FLOW1());
LoadingConsumablesDirectly(ConsumableGroup.GROUP4, new FAKE_PROJ_02_FLOW2());
//添加一个新试管配置
appTubeSettingMgrService.removeAllTubeSetting();
for (int i = 0; i < 3; i++) {
TubeHolderSetting setting = createOneActiveTubeHolderSetting(A8kTubeHolderType.BloodTube, tubeNum, List.of(new FAKE_PROJ_02().projId));
appTubeSettingMgrService.newTubeHolderSetting(setting);
}
appTubeSettingMgrService.newTubeHolderSetting(//
createOneActiveTubeHolderSetting(10, List.of(new FAKE_PROJ_01_FLOW1().projId, new FAKE_PROJ_02_FLOW2().projId)));
//开始工作
appDeviceCtrlService.startWork();

36
src/main/java/a8k/service/test/VirtualDeviceSimulationTest.java

@ -69,7 +69,7 @@ public class VirtualDeviceSimulationTest {
@ExtApiFn(name = "模拟插入一张虚拟ID卡", group = "虚拟操作", order = 200)
public void insertVirtualIdCard() {
A8kProjInfoCard idCardInfo = new FAKE_PROJ_01().buildA8kIDCardInfo();
A8kProjInfoCard idCardInfo = new FAKE_PROJ_01_FLOW1().buildA8kIDCardInfo();
virtualDevice.setMountIdCard(idCardInfo);
eventBus.pushEvent(new A8kHardwareReport(A8kPacketBuilder.build_event_a8000_idcard_online()));
}
@ -90,7 +90,7 @@ public class VirtualDeviceSimulationTest {
@ExtApiFn(name = "添加一组全血试管架配置(辅助调试)", group = "虚拟操作", order = 203)
public TubeHolderSetting addTubeCfg() {
appTubeSettingMgrService.removeAllTubeSetting();
TubeHolderSetting setting = testStateMgrService.createOneActiveTubeHolderSetting(A8kTubeHolderType.BloodTube, 10, List.of(new FAKE_PROJ_01().projId));
TubeHolderSetting setting = testStateMgrService.createOneActiveTubeHolderSetting(A8kTubeHolderType.BloodTube, 10, List.of(new FAKE_PROJ_01_FLOW1().projId));
appTubeSettingMgrService.newTubeHolderSetting(setting);
return setting;
@ -100,22 +100,22 @@ public class VirtualDeviceSimulationTest {
@ExtApiFn(name = "插入虚拟耗材", group = "虚拟操作", order = 250)
public void insertVirtualConsumable() {
testStateMgrService.addProjInfo(FAKE_PROJ_01.class);
testStateMgrService.addProjInfo(FAKE_PROJ_02.class);
testStateMgrService.addProjInfo(FAKE_PROJ_01_FLOW1.class);
testStateMgrService.addProjInfo(FAKE_PROJ_02_FLOW2.class);
testStateMgrService.addProjInfo(FAKE_PROJ_03.class);
testStateMgrService.addProjInfo(FAKE_PROJ_04.class);
testStateMgrService.addProjInfo(FAKE_PROJ_05.class);
testStateMgrService.addProjInfo(FAKE_PROJ_06.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_01.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_02.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_01_FLOW1.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_02_FLOW2.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_03.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_04.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_05.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_06.class);
testStateMgrService.insertVirtualConsumable(0, new FAKE_PROJ_01().lotId);
testStateMgrService.insertVirtualConsumable(1, new FAKE_PROJ_02().lotId);
testStateMgrService.insertVirtualConsumable(0, new FAKE_PROJ_01_FLOW1().lotId);
testStateMgrService.insertVirtualConsumable(1, new FAKE_PROJ_02_FLOW2().lotId);
testStateMgrService.insertVirtualConsumable(2, new FAKE_PROJ_03().lotId);
testStateMgrService.insertVirtualConsumable(3, new FAKE_PROJ_04().lotId);
testStateMgrService.insertVirtualConsumable(4, new FAKE_PROJ_05().lotId);
@ -129,13 +129,13 @@ public class VirtualDeviceSimulationTest {
ConsumableOneChRawResult oneChResult;
//缺少ID卡
testStateMgrService.addProjInfo(FAKE_PROJ_01.class);
testStateMgrService.insertVirtualConsumable(0, new FAKE_PROJ_01().lotId);
testStateMgrService.addProjInfo(FAKE_PROJ_01_FLOW1.class);
testStateMgrService.insertVirtualConsumable(0, new FAKE_PROJ_01_FLOW1().lotId);
//缺少耗材
testStateMgrService.addProjInfo(FAKE_PROJ_02.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_02.class);
oneChResult = testStateMgrService.buildConsumable(1, new FAKE_PROJ_02().lotId);
testStateMgrService.addProjInfo(FAKE_PROJ_02_FLOW2.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_02_FLOW2.class);
oneChResult = testStateMgrService.buildConsumable(1, new FAKE_PROJ_02_FLOW2().lotId);
oneChResult.littBSScanResult = "";
oneChResult.larBSScanResult = "";
testStateMgrService.insertVirtualConsumable(oneChResult);
@ -174,13 +174,13 @@ public class VirtualDeviceSimulationTest {
ConsumableOneChRawResult oneChResult;
//缺少项目
testStateMgrService.addIdCardInfo(FAKE_PROJ_01.class);
testStateMgrService.insertVirtualConsumable(0, new FAKE_PROJ_01().lotId);
testStateMgrService.addIdCardInfo(FAKE_PROJ_01_FLOW1.class);
testStateMgrService.insertVirtualConsumable(0, new FAKE_PROJ_01_FLOW1().lotId);
//缺少耗材
testStateMgrService.addProjInfo(FAKE_PROJ_02.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_02.class);
oneChResult = testStateMgrService.buildConsumable(1, new FAKE_PROJ_02().lotId);
testStateMgrService.addProjInfo(FAKE_PROJ_02_FLOW2.class);
testStateMgrService.addIdCardInfo(FAKE_PROJ_02_FLOW2.class);
oneChResult = testStateMgrService.buildConsumable(1, new FAKE_PROJ_02_FLOW2().lotId);
oneChResult.littBSScanResult = "XXXX";
oneChResult.larBSScanResult = "XXXX";
testStateMgrService.insertVirtualConsumable(oneChResult);

5
src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_01.java → src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_01_FLOW1.java

@ -3,8 +3,8 @@ package a8k.service.test.fakeproj;
import a8k.service.dao.type.a8kidcard.zenum.A8kReactionFlowType;
public class FAKE_PROJ_01 extends FakeProjInfo {
public FAKE_PROJ_01() {
public class FAKE_PROJ_01_FLOW1 extends FakeProjInfo {
public FAKE_PROJ_01_FLOW1() {
super(1);
subProjNum = 1; // 子项目数量
reactionTemperature = 25; // 反应温度
@ -12,5 +12,4 @@ public class FAKE_PROJ_01 extends FakeProjInfo {
reactionFlowType = A8kReactionFlowType.FlowType1; // 反应流程类型
}
}

4
src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_02.java → src/main/java/a8k/service/test/fakeproj/FAKE_PROJ_02_FLOW2.java

@ -3,8 +3,8 @@ package a8k.service.test.fakeproj;
import a8k.service.dao.type.a8kidcard.zenum.A8kReactionFlowType;
public class FAKE_PROJ_02 extends FakeProjInfo {
public FAKE_PROJ_02() {
public class FAKE_PROJ_02_FLOW2 extends FakeProjInfo {
public FAKE_PROJ_02_FLOW2() {
super(2);
subProjNum = 1; // 子项目数量
reactionTemperature = 25; // 反应温度

12
src/main/java/a8k/service/test/state/TestModeState.java

@ -1,8 +1,6 @@
package a8k.service.test.state;
import a8k.type.TubeHolderScanResult;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.stereotype.Component;
@ -11,8 +9,14 @@ import org.springframework.stereotype.Component;
public class TestModeState {
Boolean noCheckMode = false; //无校验模式
Boolean enableOptScan = true; //是否使能光学扫描
Boolean disableOptScan = false; //是否使能光学扫描
// @JsonIgnore
// @JsonIgnore
TubeHolderScanResult virtualTubeScanResult = null; // 虚拟管架扫描结果
public void resetAll() {
noCheckMode = false;
disableOptScan = false;
virtualTubeScanResult = null;
}
}

11
src/main/java/a8k/type/TubeHolderScanResult.java

@ -6,7 +6,16 @@ public class TubeHolderScanResult {
public TubesScanResult[] tube = new TubesScanResult[10];
public String tubeHolderType = "";
public String toString(){
public String toString() {
return String.format("%s %s", tubeHolderType, Arrays.toString(tube));
}
public Boolean isHasTubeInIt() {
for (TubesScanResult tubesScanResult : tube) {
if (tubesScanResult.isTubeExist) {
return true;
}
}
return false;
}
}

BIN
src/main/resources/app.db

Loading…
Cancel
Save