diff --git a/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java b/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java index 0456011..3e6d8a4 100644 --- a/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java +++ b/src/main/java/a8k/app/controler/api/v1/app/data/ReactionResultControler.java @@ -47,6 +47,7 @@ public class ReactionResultControler { @PostMapping("/printfRecord") public ApiRet printfRecord(Integer id) { + printerService.print(reactionRecordMgrService.getRecordById(id)); return ApiRet.success(); } @@ -57,6 +58,7 @@ public class ReactionResultControler { @PostMapping("/printfRecords") public ApiRet printfRecord(@RequestBody IDList ids) { + for (Integer i : ids.ids) { printerService.print(reactionRecordMgrService.getRecordById(i)); } diff --git a/src/main/java/a8k/app/engineer/service/executor/EngineerModeActionExecutor.java b/src/main/java/a8k/app/engineer/service/executor/EngineerModeActionExecutor.java index 5fa356e..82d3343 100644 --- a/src/main/java/a8k/app/engineer/service/executor/EngineerModeActionExecutor.java +++ b/src/main/java/a8k/app/engineer/service/executor/EngineerModeActionExecutor.java @@ -40,6 +40,7 @@ public class EngineerModeActionExecutor { private final EngineerModeStateMgrService stateMgr; private final GStateMgrService gStateMgrService; + Boolean stoppingFlag = false; ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(1)); @@ -56,6 +57,7 @@ public class EngineerModeActionExecutor { stoppingFlag = false; executor.submit(() -> { try { + stateMgr.setEngineerWorkState(EngineerWorkState.WORKING); action.run(); } catch (BreakException e) { log.info("action was interrupted"); diff --git a/src/main/java/a8k/app/engineer/service/qatest/ExperimentConsistencyTestingService.java b/src/main/java/a8k/app/engineer/service/qatest/ExperimentConsistencyTestingService.java index 5a49d11..868606d 100644 --- a/src/main/java/a8k/app/engineer/service/qatest/ExperimentConsistencyTestingService.java +++ b/src/main/java/a8k/app/engineer/service/qatest/ExperimentConsistencyTestingService.java @@ -17,6 +17,7 @@ import a8k.app.service.data.ProjInfoMgrService; import a8k.app.service.data.ReactionRecordMgrService; import a8k.app.service.lowerctrl.*; import a8k.app.service.mainctrl.TubeHolderSettingMgrService; +import a8k.app.service.param.pipetteparam.PipetteGunExParamMgr; import a8k.app.service.statemgr.*; import a8k.app.service.utils.ProjInfoUtils; import a8k.app.service.utils.UISender; @@ -100,6 +101,7 @@ public class ExperimentConsistencyTestingService { final private HbotMoveExCtrlService hbotMoveExCtrlService; private final OptModuleDriver optModuleDriver; private final HbotMoveCtrlService hbotMoveCtrlService; + private final PipetteGunExParamMgr pipetteGunExParamMgr; private TubeHolderSetting curTubeHolderSetting; @@ -198,6 +200,7 @@ public class ExperimentConsistencyTestingService { try { log.error("Catch exception: ", e); UISender.txErrorPrompt(e); + docmd("丢tip", hbotMoveExCtrlService::dropTip); docmd("HBOT复位", hbotMoveCtrlService::moveToZero); docmd("推出试管架", tubeFeedingCtrlService::ejectTubeHolder); //清空光学模组 @@ -328,6 +331,7 @@ public class ExperimentConsistencyTestingService { log.warn("样本异常,跳过当前样本"); break; } + docmd("HBOT复位", hbotMoveExCtrlService::moveQuickToZero); } } @@ -380,6 +384,8 @@ public class ExperimentConsistencyTestingService { //取混合液到预反应位 liquidOperationCtrlService.takePreReactionLiquidToReation(preProcessPos); incubationPlateStateMgrService.startIncubating(freeIncubationPos, System.currentTimeMillis(), projBuildinInfo.reactionPlateIncubationTimeMin * 60); + + } catch (AppException e) { if (e.getError().eq(A8kEcode.APPE_TAKE_SAMPLE_FAIL)) { hbotMoveExCtrlService.moveQuickToZero(); diff --git a/src/main/java/a8k/app/i18n/Internationalization.java b/src/main/java/a8k/app/i18n/Internationalization.java index e366ff9..ae1943e 100644 --- a/src/main/java/a8k/app/i18n/Internationalization.java +++ b/src/main/java/a8k/app/i18n/Internationalization.java @@ -70,6 +70,7 @@ public class Internationalization { case LOGIN_OUT_ERROR_DEVICE_IS_WORKING -> "设备正在工作中,不允许注销"; case DEVICE_STARTUP_IN_PROGRESS -> "设备启动中,请稍后"; case DEVICE_IS_BUSY -> "设备忙"; + case SYS_EXCEPTION -> "系统异常"; default -> ecode.toString(); }; } diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java index 14ddc35..facaf2c 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java @@ -2,6 +2,9 @@ package a8k.app.service.mainctrl.mainflowctrl; import a8k.OS; import a8k.SpringBootBeanUtil; +import a8k.app.engineer.service.qatest.EngineerModeActionCtrlService; +import a8k.app.engineer.service.state.EngineerModeStateMgrService; +import a8k.app.engineer.service.type.EngineerWorkState; import a8k.app.type.DeviceRunMode; //import a8k.app.a8ktype.appevent.A8kErrorsPromptEvent; import a8k.app.type.a8k.pos.TipGroupPos; @@ -40,11 +43,12 @@ import java.util.Objects; public class MainFlowCtrlScheduler implements ApplicationListener { - private final GStateMgrService gstate; - private final DeviceWorkStateMgrService deviceWorkStateMgrService; - private final AppEventBusService ebus; - private final ModuleEnableCtrlDriver moduleEnableCtrlDriver; - private final LiquidOperationCtrlService liquidOperationCtrlService; + private final GStateMgrService gstate; + private final DeviceWorkStateMgrService deviceWorkStateMgrService; + private final AppEventBusService ebus; + private final ModuleEnableCtrlDriver moduleEnableCtrlDriver; + private final LiquidOperationCtrlService liquidOperationCtrlService; + private final EngineerModeStateMgrService engineerModeStateMgrService; List allActions = new ArrayList<>(); IMainFlowStateChangeProcesser stateChangeProcesser; @@ -94,6 +98,10 @@ public class MainFlowCtrlScheduler implements ApplicationListener onIDLE(); - case WORKING -> onWorking(); - case PAUSE -> onPause(); - } - - onPostProcessing(); - OS.forceSleep(500); - } catch (Exception e) { - log.error("workFn error {}", e.getMessage(), e); - } + try { + var state = deviceWorkStateMgrService.getDeviceWorkState(); + if (state.fatalErrorFlag) { + OS.forceSleep(500); + continue; + } + + switch (state.workState) { + case IDLE -> onIDLE(); + case WORKING -> onWorking(); + case PAUSE -> onPause(); + } + + onPostProcessing(); + OS.forceSleep(500); + } catch (Exception e) { + log.error("workFn error {}", e.getMessage(), e); + } } } diff --git a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java index 92cfbf8..8fb1297 100644 --- a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java @@ -130,7 +130,9 @@ public class ExtApiPageGroupCfgMgr { new Menu(MiniServoCtrlPage.class, "伺服电机驱动"), new Menu(InputIOStateScannerPage.class, "输入IO状态查看"), new Menu(CodeScanerDriverCtrlPage.class, "条码扫描仪"), - new Menu(PrinterDebugPage.class, "打印机") + new Menu(PrinterDebugPage.class, "打印机"), + new Menu(OptScannerCtrlPage.class, "光学模组") + ))); diff --git a/src/main/java/a8k/extui/page/extapp/profession_test/ExperimentConsistencyTestingPage.java b/src/main/java/a8k/extui/page/extapp/profession_test/ExperimentConsistencyTestingPage.java index 0899809..fd6f6a4 100644 --- a/src/main/java/a8k/extui/page/extapp/profession_test/ExperimentConsistencyTestingPage.java +++ b/src/main/java/a8k/extui/page/extapp/profession_test/ExperimentConsistencyTestingPage.java @@ -87,7 +87,7 @@ public class ExperimentConsistencyTestingPage { } public void setTubeRepeatTime(Integer tubeOff, Integer repeatTimes) { - tubeOff = tubeOff + 1; + tubeOff = tubeOff - 1; TubeHolderExConfig tubeHolderExConfig = experimentConsistencyTestingService.getTubeExConfig(); tubeHolderExConfig.tubeExConfigs.get(tubeOff).repeatTimes = repeatTimes; log.info("setTubeRepeatTime: tubeOff = {}, repeatTimes = {}", tubeOff, repeatTimes);