From a90264cf60e6983c388f5c1f5dc1a1849c93d2b0 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 9 Jan 2025 18:32:02 +0800 Subject: [PATCH] update --- doc/设备调试页面设计.md | 29 +++ .../service/statemgr/ConsumablesMgrService.java | 5 + .../java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java | 34 ++- .../debug/P00AppEventAndMessageBoxDebugPage.java | 53 ++++ .../debug/P00MainflowCtrlServiceDebugPage.java | 120 +++++++++ .../newpage/debug/P01EmergencyTubeDebugPage.java | 90 +++++++ .../extui/newpage/debug/P01ProjInfoDebugPage.java | 116 +++++++++ .../newpage/debug/P02ConsumablesMgrDebugPage.java | 216 ++++++++++++++++ .../newpage/debug/P02TubeSettingDebugPage.java | 141 ++++++++++ .../debug/P11IncubationPlateStateDebugPageAll.java | 121 +++++++++ .../extui/newpage/debug/P12TueStateDebugPage.java | 75 ++++++ .../newpage/debug/P13OptModuleStateDebugPage.java | 20 ++ .../newpage/debug/P20AppSettingDebugPage.java | 88 +++++++ .../debug/P22UserOperaionInRunOnlyModePage.java | 61 +++++ .../debug/P22UserOperaionInVertualModePage.java | 111 ++++++++ .../extui/newpage/extapp/A8kOptVerification.java | 273 ++++++++++++++++++++ .../newpage/extapp/OptModuleParamCalibration.java | 232 +++++++++++++++++ .../newpage/extapp/P01PipetteGunVerification.java | 219 ++++++++++++++++ .../extapp/P02A8kTemperaturaVerfication.java | 168 ++++++++++++ .../DeviceActionParameterSettingPage.java | 42 +++ .../extui/newpage/extsetting/ProjInfoMgrPage.java | 63 +++++ .../P01MiniServoReferencePointIniter.java | 86 +++++++ .../P02TubeFeedingModulePosCalibrationPage.java | 94 +++++++ .../P03TubePreProcesPosCalibrationPage.java | 100 ++++++++ ...tionPlatesTransmitControlerCalibrationPage.java | 108 ++++++++ .../P20HbotTipPosCalibrationPage.java | 100 ++++++++ .../P21HbotLittleBSPosCalibrationPage.java | 109 ++++++++ .../P23HbotLargeBottleBSPosCalibrationPage.java | 62 +++++ .../P24Hbot2DCodeScanPosCalibrationPage.java | 51 ++++ .../P25HbotSamplePosCalibrationPage.java | 172 +++++++++++++ .../a8k/extui/newpage/init/DeviceInitPage.java | 123 +++++++++ .../newpage/test/codetest/OptFormulaTestPage.java | 125 +++++++++ .../test/codetest/OptFormulaTestPageV2.java | 174 +++++++++++++ .../driver/LowLevelBoardVersionPreviewPage.java | 281 ++++++++++++++++++++ .../newpage/test/driver/PipetteCtrlDriverPage.java | 55 ++++ .../FakeReactionRecordGeneratorPage.java | 65 +++++ .../frond_end_test/FakeStateGeneratorPage.java | 73 ++++++ .../frond_end_test/VirtualEventGeneratorPage.java | 73 ++++++ .../test/stress_test/PipetteGunStressTest.java | 58 +++++ .../Hbot2DCodeScanPosCalibration.java | 2 +- .../HbotLittleBSPosCalibration.java | 2 +- .../HbotProbeSubstancePosCalibration.java | 2 +- .../OptModuleParamPosCalibration.java | 2 +- .../data/DeviceActionParameterSettingPage.java | 42 --- .../java/a8k/extui/page/data/ProjInfoMgrPage.java | 67 ----- .../debug/P00AppEventAndMessageBoxDebugPage.java | 53 ---- .../debug/P00MainflowCtrlServiceDebugPage.java | 143 ----------- .../page/debug/P01EmergencyTubeDebugPage.java | 91 ------- .../a8k/extui/page/debug/P01ProjInfoDebugPage.java | 116 --------- .../page/debug/P02ConsumablesMgrDebugPage.java | 217 ---------------- .../extui/page/debug/P02TubeSettingDebugPage.java | 142 ----------- .../debug/P11IncubationPlateStateDebugPageAll.java | 121 --------- .../a8k/extui/page/debug/P12TueStateDebugPage.java | 75 ------ .../page/debug/P13OptModuleStateDebugPage.java | 20 -- .../extui/page/debug/P20AppSettingDebugPage.java | 88 ------- .../page/debug/P21AppDebugModeConfigPage.java | 60 ----- .../debug/P22UserOperaionInRunOnlyModePage.java | 62 ----- .../debug/P22UserOperaionInVertualModePage.java | 112 -------- .../driver/LowLevelBoardVersionPreviewPage.java | 283 --------------------- .../extui/page/driver/PipetteCtrlDriverPage.java | 55 ---- .../FakeReactionRecordGeneratorPage.java | 65 ----- .../frond_end_test/FakeStateGeneratorPage.java | 73 ------ .../frond_end_test/VirtualEventGeneratorPage.java | 73 ------ .../measurement/DeviceInitializeUtilsPage.java | 46 ---- .../page/opt_calibration/A8kOptVerification.java | 273 -------------------- .../page/opt_calibration/OptFormulaTestPage.java | 125 --------- .../page/opt_calibration/OptFormulaTestPageV2.java | 174 ------------- .../opt_calibration/OptModuleParamCalibration.java | 232 ----------------- .../P01MiniServoReferencePointIniter.java | 86 ------- .../P02TubeFeedingModulePosCalibrationPage.java | 94 ------- .../P03TubePreProcesPosCalibrationPage.java | 100 -------- ...tionPlatesTransmitControlerCalibrationPage.java | 108 -------- .../P20HbotTipPosCalibrationPage.java | 100 -------- .../P21HbotLittleBSPosCalibrationPage.java | 109 -------- .../P23HbotLargeBottleBSPosCalibrationPage.java | 62 ----- .../P24Hbot2DCodeScanPosCalibrationPage.java | 51 ---- .../P25HbotSamplePosCalibrationPage.java | 172 ------------- .../P01PipetteGunVerification.java | 219 ---------------- .../P02A8kTemperaturaVerfication.java | 168 ------------ .../page/stress_test/PipetteGunStressTest.java | 58 ----- 80 files changed, 4172 insertions(+), 4157 deletions(-) create mode 100644 doc/设备调试页面设计.md create mode 100644 src/main/java/a8k/extui/newpage/debug/P00AppEventAndMessageBoxDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P00MainflowCtrlServiceDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P01EmergencyTubeDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P01ProjInfoDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P02ConsumablesMgrDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P02TubeSettingDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P11IncubationPlateStateDebugPageAll.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P12TueStateDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P13OptModuleStateDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P20AppSettingDebugPage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P22UserOperaionInRunOnlyModePage.java create mode 100644 src/main/java/a8k/extui/newpage/debug/P22UserOperaionInVertualModePage.java create mode 100644 src/main/java/a8k/extui/newpage/extapp/A8kOptVerification.java create mode 100644 src/main/java/a8k/extui/newpage/extapp/OptModuleParamCalibration.java create mode 100644 src/main/java/a8k/extui/newpage/extapp/P01PipetteGunVerification.java create mode 100644 src/main/java/a8k/extui/newpage/extapp/P02A8kTemperaturaVerfication.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/DeviceActionParameterSettingPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/ProjInfoMgrPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P01MiniServoReferencePointIniter.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P02TubeFeedingModulePosCalibrationPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P03TubePreProcesPosCalibrationPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P04ReactionPlatesTransmitControlerCalibrationPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P20HbotTipPosCalibrationPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P21HbotLittleBSPosCalibrationPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P23HbotLargeBottleBSPosCalibrationPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java create mode 100644 src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P25HbotSamplePosCalibrationPage.java create mode 100644 src/main/java/a8k/extui/newpage/init/DeviceInitPage.java create mode 100644 src/main/java/a8k/extui/newpage/test/codetest/OptFormulaTestPage.java create mode 100644 src/main/java/a8k/extui/newpage/test/codetest/OptFormulaTestPageV2.java create mode 100644 src/main/java/a8k/extui/newpage/test/driver/LowLevelBoardVersionPreviewPage.java create mode 100644 src/main/java/a8k/extui/newpage/test/driver/PipetteCtrlDriverPage.java create mode 100644 src/main/java/a8k/extui/newpage/test/frond_end_test/FakeReactionRecordGeneratorPage.java create mode 100644 src/main/java/a8k/extui/newpage/test/frond_end_test/FakeStateGeneratorPage.java create mode 100644 src/main/java/a8k/extui/newpage/test/frond_end_test/VirtualEventGeneratorPage.java create mode 100644 src/main/java/a8k/extui/newpage/test/stress_test/PipetteGunStressTest.java delete mode 100644 src/main/java/a8k/extui/page/data/DeviceActionParameterSettingPage.java delete mode 100644 src/main/java/a8k/extui/page/data/ProjInfoMgrPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P00AppEventAndMessageBoxDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P01EmergencyTubeDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P11IncubationPlateStateDebugPageAll.java delete mode 100644 src/main/java/a8k/extui/page/debug/P12TueStateDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P13OptModuleStateDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P20AppSettingDebugPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P21AppDebugModeConfigPage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P22UserOperaionInRunOnlyModePage.java delete mode 100644 src/main/java/a8k/extui/page/debug/P22UserOperaionInVertualModePage.java delete mode 100644 src/main/java/a8k/extui/page/driver/LowLevelBoardVersionPreviewPage.java delete mode 100644 src/main/java/a8k/extui/page/driver/PipetteCtrlDriverPage.java delete mode 100644 src/main/java/a8k/extui/page/frond_end_test/FakeReactionRecordGeneratorPage.java delete mode 100644 src/main/java/a8k/extui/page/frond_end_test/FakeStateGeneratorPage.java delete mode 100644 src/main/java/a8k/extui/page/frond_end_test/VirtualEventGeneratorPage.java delete mode 100644 src/main/java/a8k/extui/page/measurement/DeviceInitializeUtilsPage.java delete mode 100644 src/main/java/a8k/extui/page/opt_calibration/A8kOptVerification.java delete mode 100644 src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPage.java delete mode 100644 src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPageV2.java delete mode 100644 src/main/java/a8k/extui/page/opt_calibration/OptModuleParamCalibration.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P01MiniServoReferencePointIniter.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P02TubeFeedingModulePosCalibrationPage.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P03TubePreProcesPosCalibrationPage.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P04ReactionPlatesTransmitControlerCalibrationPage.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P20HbotTipPosCalibrationPage.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P21HbotLittleBSPosCalibrationPage.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P23HbotLargeBottleBSPosCalibrationPage.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java delete mode 100644 src/main/java/a8k/extui/page/pos_calibration/P25HbotSamplePosCalibrationPage.java delete mode 100644 src/main/java/a8k/extui/page/special_verification/P01PipetteGunVerification.java delete mode 100644 src/main/java/a8k/extui/page/special_verification/P02A8kTemperaturaVerfication.java delete mode 100644 src/main/java/a8k/extui/page/stress_test/PipetteGunStressTest.java diff --git a/doc/设备调试页面设计.md b/doc/设备调试页面设计.md new file mode 100644 index 0000000..47e8473 --- /dev/null +++ b/doc/设备调试页面设计.md @@ -0,0 +1,29 @@ +```angular2html +调试页面逻辑 + 1. 一个页面对应一个类 + 2. 一个页面的基础属性是(菜单名称,页面类型(通过继承实现)排序(通过类命名实现)GROUP(通过命名空间来实现)) + +命名空间 + +一个设备的测试页面应当包含的内容 + 初始化 + 模式选择 + 初始化设备 + 调试(UI能够操作和展示的一切内容,主要职责在没有UI的情况下调试设备) + + 测试 (目的:测试设备设置的参数) + 代码单元测试 + 驱动测试 + 单步动作测试 + 脚本动作测试 + 全流程动作测试 + 压力测试 + 设备配置与数据(一切设备运行的基础配置,主要目的是配置UI没有展示的配置) + 测量(目的:通过程序反向测量一些设备信息,用来对设备进行配置,这里不允许修改配置) + 高级应用(参数设置,测量,等均包含的,一体的配置页面) + 移液枪验证(送检) + 温度控制验证(送检) + 光学模块参数校准与验证 + 摇匀模组验证 + +``` \ No newline at end of file diff --git a/src/main/java/a8k/app/service/statemgr/ConsumablesMgrService.java b/src/main/java/a8k/app/service/statemgr/ConsumablesMgrService.java index 909018c..7d564b3 100644 --- a/src/main/java/a8k/app/service/statemgr/ConsumablesMgrService.java +++ b/src/main/java/a8k/app/service/statemgr/ConsumablesMgrService.java @@ -177,6 +177,11 @@ public class ConsumablesMgrService { synchronized public Integer statisticsConsumableNum(Integer projId) { int total = 0; for (int i = 0; i < cState.reactionPlateGroup.length; i++) { + if(cState.reactionPlateGroup[i].projId == null){ + continue; + } + + if (cState.reactionPlateGroup[i].projId.equals(projId)) { total += cState.reactionPlateGroup[i].num - cState.reactionPlateGroup[i].reserveNum; } diff --git a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java index c55ea2a..5e309b9 100644 --- a/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java +++ b/src/main/java/a8k/extui/mgr/ExtApiPageGroupCfgMgr.java @@ -1,23 +1,23 @@ package a8k.extui.mgr; -import a8k.extui.page.data.DeviceActionParameterSettingPage; -import a8k.extui.page.data.ProjInfoMgrPage; -import a8k.extui.page.driver.LowLevelBoardVersionPreviewPage; +import a8k.extui.newpage.debug.*; +import a8k.extui.newpage.extsetting.DeviceActionParameterSettingPage; +import a8k.extui.newpage.extsetting.ProjInfoMgrPage; +import a8k.extui.newpage.test.driver.LowLevelBoardVersionPreviewPage; import a8k.extui.page.measurement.DeviceInitializeUtilsPage; import a8k.extui.page.measurement.HbotPosMeasurePage; -import a8k.extui.page.opt_calibration.OptFormulaTestPage; -import a8k.extui.page.opt_calibration.OptFormulaTestPageV2; -import a8k.extui.page.debug.*; -import a8k.extui.page.driver.PipetteCtrlDriverPage; -import a8k.extui.page.opt_calibration.A8kOptVerification; -import a8k.extui.page.frond_end_test.FakeReactionRecordGeneratorPage; - -import a8k.extui.page.frond_end_test.VirtualEventGeneratorPage; -import a8k.extui.page.opt_calibration.OptModuleParamCalibration; -import a8k.extui.page.pos_calibration.*; -import a8k.extui.page.stress_test.PipetteGunStressTest; -import a8k.extui.page.special_verification.P01PipetteGunVerification; -import a8k.extui.page.special_verification.P02A8kTemperaturaVerfication; +import a8k.extui.newpage.test.codetest.OptFormulaTestPage; +import a8k.extui.newpage.test.codetest.OptFormulaTestPageV2; +import a8k.extui.newpage.test.driver.PipetteCtrlDriverPage; +import a8k.extui.newpage.extapp.A8kOptVerification; +import a8k.extui.newpage.test.frond_end_test.FakeReactionRecordGeneratorPage; + +import a8k.extui.newpage.test.frond_end_test.VirtualEventGeneratorPage; +import a8k.extui.newpage.extapp.OptModuleParamCalibration; +import a8k.extui.newpage.extsetting.pos_calibration.*; +import a8k.extui.newpage.test.stress_test.PipetteGunStressTest; +import a8k.extui.newpage.extapp.P01PipetteGunVerification; +import a8k.extui.newpage.extapp.P02A8kTemperaturaVerfication; import a8k.extui.page.verification.*; import a8k.extui.page.verification.P34LiquidOperationTestPage; import a8k.extui.page.verification.P10ProjejIDCardTestPage; @@ -25,7 +25,6 @@ import jakarta.annotation.PostConstruct; import org.springframework.stereotype.Component; import java.util.ArrayList; -import java.util.Collections; import java.util.List; @Component @@ -121,7 +120,6 @@ public class ExtApiPageGroupCfgMgr { ))); pushMenu(new Menu("调试", List.of( - new Menu(P21AppDebugModeConfigPage.class, "设备模式配置"), new Menu(P00AppEventAndMessageBoxDebugPage.class, "事件与消息"), new Menu(P22UserOperaionInRunOnlyModePage.class, "空转模式用户操作"), new Menu(P22UserOperaionInVertualModePage.class, "虚拟模式用户操作"), diff --git a/src/main/java/a8k/extui/newpage/debug/P00AppEventAndMessageBoxDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P00AppEventAndMessageBoxDebugPage.java new file mode 100644 index 0000000..7b39504 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P00AppEventAndMessageBoxDebugPage.java @@ -0,0 +1,53 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.appevent.AppEvent; +import a8k.app.a8ktype.ui.MessageBox; +import a8k.app.service.bases.FrontEndMessageBoxAndEventMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class P00AppEventAndMessageBoxDebugPage { + + @Resource + FrontEndMessageBoxAndEventMgr frontEndMessageBoxAndEventMgr; + + @Resource + ExtApiPageMgr extApiPageMgr; + + @ExtApiStatu(name = "", group = "最新消息", order = 1) + synchronized public MessageBox getTopMessage() { + return frontEndMessageBoxAndEventMgr.getTopMessage(); + } + + + @ExtApiStatu(name = "", group = "历史消息列表", order = 2) + synchronized public List getMessageBoxList() { + return frontEndMessageBoxAndEventMgr.getMessageBoxList(); + } + + + @ExtApiStatu(name = "", group = "历史事件列表", order = 3) + synchronized public List getAppHistoryEventList() { + return frontEndMessageBoxAndEventMgr.getAppHistoryEventList(); + } + + synchronized public void confirmPromoptInfo(String eventId) { + frontEndMessageBoxAndEventMgr.confirmPromoptInfo(eventId); + } + + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("Promopt确认", this::confirmPromoptInfo); + extApiPageMgr.addPage(page); + } + + +} diff --git a/src/main/java/a8k/extui/newpage/debug/P00MainflowCtrlServiceDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P00MainflowCtrlServiceDebugPage.java new file mode 100644 index 0000000..e663513 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P00MainflowCtrlServiceDebugPage.java @@ -0,0 +1,120 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.state.DeviceWorkState; +import a8k.app.service.background.BackgroudProcessCtrlService; +import a8k.app.service.background.SensorDataUpdateService; +import a8k.app.service.background.TemperatureCtrlService; +import a8k.app.service.statemgr.*; +import a8k.app.service.mainctrl.AppDeviceCtrlService; +import a8k.app.service.lowerctrl.DeviceInitCtrlService; +import a8k.extui.factory.CurveBuilder; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import a8k.extui.type.ret.ExtApiCurve; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +@Slf4j +public class P00MainflowCtrlServiceDebugPage { + // + // StateService + // + @Resource + DeviceWorkStateMgrService deviceWorkStateMgrService; + @Resource + GStateMgrService gStateMgrService; + // + // Ctrl + // + @Resource + AppDeviceCtrlService appDeviceCtrlService; + @Resource + DeviceInitCtrlService deviceInitCtrlService; + @Resource + BackgroudProcessCtrlService backgroudProcessCtrlService; + @Resource + TemperatureCtrlService temperatureCtrlService; + @Resource + SensorDataUpdateService sensorDataUpdateService; + + + @ExtApiStatu(name = "", group = "设备主流程工作状态", order = 1) + public DeviceWorkState readDeviceState() { + return deviceWorkStateMgrService.getDeviceWorkState(); + } + + @ExtApiStatu(name = "", group = "其他状态", order = 4) + public Map getBackgroudProcessState() { + return Map.of( + "后台线程工作状态", backgroudProcessCtrlService.getProcessState(), + "目标温度", temperatureCtrlService.getTargetTemperature(), + "孵育盘实时温度", gStateMgrService.getSensorState().getIncubateBoxTemperature(), + "板夹仓实时温度", gStateMgrService.getSensorState().getPboxTemperature(), + "废量仓光栅状态", gStateMgrService.getSensorState().getWasteBinFullFlag() + ); + } + + + + public void start() throws AppException { + appDeviceCtrlService.startWork(); + } + + public void stop() throws AppException { + appDeviceCtrlService.stopWork(); + } + + public void pause() throws AppException { + appDeviceCtrlService.pauseWork(); + } + + public void continueWork() throws AppException { + appDeviceCtrlService.continueWork(); + } + + public ExtApiCurve getIncubateBoxTemperatureCurve() { + var datas = sensorDataUpdateService.getIncubateBoxTemperatureCurve(); + Integer targetTemp = temperatureCtrlService.getTargetTemperature(); + List points = new ArrayList<>(); + for (var data : datas) { + points.add(new Object[]{data.tp, data.val}); + } + return CurveBuilder.buidCurve("孵育盘温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, points); + } + + public ExtApiCurve getPlateBoxTemperatureCurve() { + var datas = sensorDataUpdateService.getPlateBoxTemperatureCurve(); + Integer targetTemp = temperatureCtrlService.getTargetTemperature(); + List points = new ArrayList<>(); + for (var data : datas) { + points.add(new Object[]{data.tp, data.val}); + } + return CurveBuilder.buidCurve("板夹仓温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, points); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("设备控制"); + page.addFunction("开始", this::start); + page.addFunction("停止", this::stop); + page.addFunction("暂停", this::pause); + page.addFunction("继续", this::continueWork); + page.newGroup("状态"); + page.addFunction("查看孵育盘温度曲线", this::getIncubateBoxTemperatureCurve); + page.addFunction("查看板夹仓温度曲线", this::getPlateBoxTemperatureCurve); + extApiPageMgr.addPage(page); + } + +} diff --git a/src/main/java/a8k/extui/newpage/debug/P01EmergencyTubeDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P01EmergencyTubeDebugPage.java new file mode 100644 index 0000000..7095f3c --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P01EmergencyTubeDebugPage.java @@ -0,0 +1,90 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.device.BloodType; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.state.Tube; +import a8k.app.service.statemgr.TubeStateMgrService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@Slf4j +public class P01EmergencyTubeDebugPage { + + static public class EmergencyTubeSetting { + public String userid; + public String sampleBarcode; + public BloodType bloodType;// + public List projIds = new java.util.ArrayList<>(); + } + + + @Resource + TubeStateMgrService tubeStateMgrService; + + EmergencyTubeSetting setting = new EmergencyTubeSetting(); + + @ExtApiStatu(name = "", group = "紧急试管状态", order = 1) + public Tube getEmergencyPosRunState() { + return tubeStateMgrService.getEmergencyTube(); + } + + @ExtApiStatu(name = "", group = "紧急试管提交表单", order = 1) + public EmergencyTubeSetting getEmergencyTubeSetting() { + return setting; + } + + + public void setEmergencyUserid(String userid) { + setting.userid = userid; + } + + public void setEmergencySampleBarcode(String sampleBarcode) { + setting.sampleBarcode = sampleBarcode; + } + + public void setEmergencyBloodType(BloodType bloodType) { + setting.bloodType = bloodType; + } + + public void setEmergencyProjIds(String projIds) { + //逗号分隔的项目id + String[] projIdStrs = projIds.split(","); + setting.projIds.clear(); + for (String projIdStr : projIdStrs) { + setting.projIds.add(Integer.parseInt(projIdStr)); + } + } + + + + public void commmitEmergencyTube() throws AppException { + tubeStateMgrService.commitEmergencySampleSetting( + setting.userid, + setting.sampleBarcode, + setting.bloodType, + setting.projIds, + false + ); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("设置用户ID", this::setEmergencyUserid); + page.addFunction("设置样本条码", this::setEmergencySampleBarcode); + page.addFunction("设置血液类型", this::setEmergencyBloodType); + page.addFunction("设置项目ID", this::setEmergencyProjIds); + page.addFunction("提交紧急试管", this::commmitEmergencyTube); + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/debug/P01ProjInfoDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P01ProjInfoDebugPage.java new file mode 100644 index 0000000..4323647 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P01ProjInfoDebugPage.java @@ -0,0 +1,116 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.dao.db.type.A8kProjInfoCardBreif; +import a8k.app.dao.db.type.ProjExtInfoCard; +import a8k.app.factory.ProjExtInfoCardFactory; +import a8k.app.service.data.ProjIdCardInfoMgrService; +import a8k.app.service.data.ProjInfoMgrService; +import a8k.app.utils.ProjBuildinInfo; +import a8k.app.utils.ZDateUtils; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@Slf4j +public class P01ProjInfoDebugPage { + + + @Resource + ProjIdCardInfoMgrService projIdCardInfoMgrService; + + @Resource + ProjInfoMgrService projInfoMgrService; + + @ExtApiStatu(name = "", group = "挂载的项目信息", order = 1) + public ProjExtInfoCard getMountedProjInfoCard() { + return projIdCardInfoMgrService.getMountedProjInfoCard(); + } + + // + // 新建 + // + public String saveMountedProjInfoCard() throws AppException { + projIdCardInfoMgrService.saveMountedProjInfoCard(); + return "保存成功"; + } + + public String addAllProjFakeProjInfoCard() throws AppException { + List projBuildinInfos = projInfoMgrService.getAllProjBuildInInfo(); + for (ProjBuildinInfo projBuildinInfo : projBuildinInfos) { + ProjExtInfoCard projExtInfoCard = ProjExtInfoCardFactory.buildProjExtInfoCard(projBuildinInfo.projId, null); + projIdCardInfoMgrService.saveProjExtInfoCard(projExtInfoCard); + } + return "添加成功"; + } + + public String addProjFakeProjInfoCard(String projids) throws AppException { + String[] projidArr = projids.split(","); + for (String projid : projidArr) { + ProjExtInfoCard projExtInfoCard = ProjExtInfoCardFactory.buildProjExtInfoCard(Integer.parseInt(projid), null); + projIdCardInfoMgrService.saveProjExtInfoCard(projExtInfoCard); + } + return "添加成功"; + } + + // + // 查询 + // + public List getByProjId(Integer projId) { + return projIdCardInfoMgrService.getByProjId(projId); + } + + public ProjExtInfoCard getByLotId(String lotId) { + return projIdCardInfoMgrService.getByLotId(lotId); + } + + public Map getBreifAll() { + var all = projIdCardInfoMgrService.getBreifAll(); + //按照projId排序 + all.sort(Comparator.comparingInt(a -> a.projId)); + Map map = new HashMap<>(); + for (A8kProjInfoCardBreif a : all) { + map.put(String.format("%-20s", a.projName), String.format("%2d %s %s", a.projId, a.lotId, ZDateUtils.toDateString(a.expiryDate))); + } + return map; + } + + + + // + // 删除 + // + public String deleteAll() { + projIdCardInfoMgrService.deleteAll(); + return "删除成功"; + } + + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("新建ID卡信息"); + page.addFunction("保存挂载的项目信息", this::saveMountedProjInfoCard); + page.addFunction("添加所有项目的假项目信息", this::addAllProjFakeProjInfoCard); + page.addFunction("添加指定项目的假项目信息", this::addProjFakeProjInfoCard); + page.newGroup("查询ID卡信息"); + page.addFunction("获取列表", this::getBreifAll); + page.addFunction("通过ProjID查询详细信息", this::getByProjId); + page.addFunction("通过LotID查询详细信息", this::getByLotId); + page.newGroup("删除"); + page.addFunction("删除所有", this::deleteAll); + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/debug/P02ConsumablesMgrDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P02ConsumablesMgrDebugPage.java new file mode 100644 index 0000000..31d8857 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P02ConsumablesMgrDebugPage.java @@ -0,0 +1,216 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.device.ConsumableGroup; +import a8k.app.a8ktype.device.TipGroup; +import a8k.app.a8ktype.device.consumables.LarBottleGroup; +import a8k.app.a8ktype.device.consumables.LittBottleGroup; +import a8k.app.a8ktype.device.consumables.ReactionPlateGroup; +import a8k.app.a8ktype.device.consumables.Tips; +import a8k.app.a8ktype.error.ConsumablesScanReportErrorType; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.type.ConsumablesOneChannelScanResultPacket; +import a8k.app.a8ktype.type.ConsumablesScanReport; +import a8k.app.a8ktype.type.ConsumablesScanResultPacket; +import a8k.app.dao.db.type.ProjExtInfoCard; +import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.app.service.data.ProjIdCardInfoMgrService; +import a8k.app.service.data.ProjInfoMgrService; +import a8k.app.service.mainctrl.AppConsumablesScanService; +import a8k.app.service.statemgr.ConsumablesMgrService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class P02ConsumablesMgrDebugPage { + @Resource + ConsumablesMgrService consumablesMgrService; + + @Resource + AppConsumablesScanService appConsumablesScanService; + + @Resource + ProjIdCardInfoMgrService projIdCardInfoMgrService; + + + @ExtApiStatu(name = "", group = "耗材-反应板状态1", minWidth = "16%", order = 1) + public ReactionPlateGroup getReactionPlateGroupState0() { + return consumablesMgrService.getState().reactionPlateGroup[0]; + } + + @ExtApiStatu(name = "", group = "耗材-反应板状态2", minWidth = "16%", order = 2) + public ReactionPlateGroup getReactionPlateGroupState1() { + return consumablesMgrService.getState().reactionPlateGroup[1]; + } + + @ExtApiStatu(name = "", group = "耗材-反应板状态3", minWidth = "16%", order = 3) + public ReactionPlateGroup getReactionPlateGroupState2() { + return consumablesMgrService.getState().reactionPlateGroup[2]; + } + + @ExtApiStatu(name = "", group = "耗材-反应板状态4", minWidth = "16%", order = 4) + public ReactionPlateGroup getReactionPlateGroupState3() { + return consumablesMgrService.getState().reactionPlateGroup[3]; + } + + @ExtApiStatu(name = "", group = "耗材-反应板状态5", minWidth = "16%", order = 5) + public ReactionPlateGroup getReactionPlateGroupState4() { + return consumablesMgrService.getState().reactionPlateGroup[4]; + } + + @ExtApiStatu(name = "", group = "耗材-反应板状态6", minWidth = "16%", order = 6) + public ReactionPlateGroup getReactionPlateGroupState5() { + return consumablesMgrService.getState().reactionPlateGroup[5]; + } + + + // LittBottleGroup + @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液1", minWidth = "16%", order = 7) + public LittBottleGroup getLittBottleGroupState0() { + return consumablesMgrService.getState().littBottleGroup[0]; + } + + @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液2", minWidth = "16%", order = 8) + public LittBottleGroup getLittBottleGroupState1() { + return consumablesMgrService.getState().littBottleGroup[1]; + } + + @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液3", minWidth = "16%", order = 9) + public LittBottleGroup getLittBottleGroupState2() { + return consumablesMgrService.getState().littBottleGroup[2]; + } + + @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液4", minWidth = "16%", order = 10) + public LittBottleGroup getLittBottleGroupState3() { + return consumablesMgrService.getState().littBottleGroup[3]; + } + + @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液5", minWidth = "16%", order = 11) + public LittBottleGroup getLittBottleGroupState4() { + return consumablesMgrService.getState().littBottleGroup[4]; + } + + @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液6", minWidth = "16%", order = 12) + public LittBottleGroup getLittBottleGroupState5() { + return consumablesMgrService.getState().littBottleGroup[5]; + } + + + // LarBottleGroup + @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液1", minWidth = "16%", order = 13) + public LarBottleGroup getLarBottleGroupState0() { + return consumablesMgrService.getState().larBottleGroup[0]; + } + + @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液2", minWidth = "16%", order = 14) + public LarBottleGroup getLarBottleGroupState1() { + return consumablesMgrService.getState().larBottleGroup[1]; + } + + @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液3", minWidth = "16%", order = 15) + public LarBottleGroup getLarBottleGroupState2() { + return consumablesMgrService.getState().larBottleGroup[2]; + } + + @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液4", minWidth = "16%", order = 16) + public LarBottleGroup getLarBottleGroupState3() { + return consumablesMgrService.getState().larBottleGroup[3]; + } + + @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液5", minWidth = "16%", order = 17) + public LarBottleGroup getLarBottleGroupState4() { + return consumablesMgrService.getState().larBottleGroup[4]; + } + + @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液6", minWidth = "16%", order = 18) + public LarBottleGroup getLarBottleGroupState5() { + return consumablesMgrService.getState().larBottleGroup[5]; + } + + @ExtApiStatu(name = "", group = "耗材-Tip状态1", minWidth = "16%", order = 19) + public Tips getTipState0() { + return consumablesMgrService.getState().tips[0]; + } + + @ExtApiStatu(name = "", group = "耗材-Tip状态2", minWidth = "16%", order = 20) + public Tips getTipState1() { + return consumablesMgrService.getState().tips[1]; + } + + @ExtApiStatu(name = "", group = "耗材-Tip状态3", minWidth = "16%", order = 21) + public Tips getTipState2() { + return consumablesMgrService.getState().tips[2]; + } + + + @Resource + ProjInfoMgrService projInfoMgrService; + @Resource + ExtApiPageMgr extApiPageMgr; + + + // + // FUNCTION + // + public ConsumablesScanResultPacket scanConsumables() throws AppException { + return appConsumablesScanService.scanConsumables(); + } + + public ConsumablesOneChannelScanResultPacket scanOneConsumables(ConsumableGroup group) throws AppException { + return appConsumablesScanService.scanOneGroupConsumables(group); + } + + public void setTipNum(TipGroup tipGroup, Integer tiNum) throws AppException { + consumablesMgrService.setTipNum(tipGroup, tiNum); + } + + public void setConsumableNum(ConsumableGroup group, Integer num) { + consumablesMgrService.setCounsumableNum(group, num); + } + + public void loadConsumablesManual(ConsumableGroup group, String lotid) throws AppException { + ProjExtInfoCard projExtInfoCard = projInfoMgrService.getProjExtInfoCard(lotid); + if (projExtInfoCard == null) { + throw AppException.of(A8kEcode.CODEERROR, "项目卡信息不存在"); + } + + ConsumablesScanReport consumablesScanReport = new ConsumablesScanReport(); + consumablesScanReport.chNum = group.off; + consumablesScanReport.projId = projExtInfoCard.projId; + consumablesScanReport.projName = projExtInfoCard.projName; + consumablesScanReport.projShortName = projExtInfoCard.projShortName; + consumablesScanReport.lotId = lotid; + consumablesScanReport.state = ConsumablesScanReportErrorType.PASS; + appConsumablesScanService.loadingConsumablesDirectly(consumablesScanReport); + } + + public void loadMountProjIDCardConsumablesManual(ConsumableGroup group) throws AppException { + ProjExtInfoCard projExtInfoCard = projIdCardInfoMgrService.getMountedProjInfoCard(); + if (projExtInfoCard == null) { + throw AppException.of(A8kEcode.CODEERROR, "没有挂载的项目卡信息"); + } + + loadConsumablesManual(group, projExtInfoCard.lotId); + + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("耗材操作"); + page.addFunction("扫描耗材", this::scanConsumables); + page.addFunction("扫描耗材(单通道)", this::scanOneConsumables); + page.addFunction("设置Tip数量", this::setTipNum); + page.addFunction("设置耗材数量", this::setConsumableNum); + page.newGroup("辅助调试"); + page.addFunction("手动加载耗材", this::loadConsumablesManual); + page.addFunction("手动加载挂载项目卡耗材", this::loadMountProjIDCardConsumablesManual); + + extApiPageMgr.addPage(page); + + + } + +} diff --git a/src/main/java/a8k/extui/newpage/debug/P02TubeSettingDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P02TubeSettingDebugPage.java new file mode 100644 index 0000000..16f4cc1 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P02TubeSettingDebugPage.java @@ -0,0 +1,141 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.device.BloodType; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.ui.TubeHolderSetting; +import a8k.app.a8ktype.ui.TubeSetting; +import a8k.app.service.mainctrl.TubeSettingMgrService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@Slf4j +public class P02TubeSettingDebugPage { + @Resource + TubeSettingMgrService tubeSettingMgrService; + + String editChooseUuid = null; + Integer editTubeChooseIndex = 0; + + @ExtApiStatu(name = "", group = "试管架配置", order = 1) + public List getTubeHolderSettings() { + return tubeSettingMgrService.getTubeHolderSettings(); + } + + @ExtApiStatu(name = "", group = "试管架配置表单", order = 2) + public TubeHolderSetting getTubeHolderSettingForms() { + if (editChooseUuid == null) { + return null; + } + return tubeSettingMgrService.getTubeHolderSetting(editChooseUuid); + } + + @ExtApiStatu(name = "", group = "试管配置表单", order = 3) + public TubeSetting getTubeSettingForms() throws AppException { + if (editChooseUuid == null) { + return null; + } + var val = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); + if (val == null) { + editChooseUuid = null; + return null; + } + return val; + } + + + // + // 上下文选择 + // + synchronized public void setEditChooseUuid(String uuid) { + editChooseUuid = uuid; + } + + synchronized public void setEditTubeChooseIndex(Integer index) { + editTubeChooseIndex = index; + } + + + // + // 试管架配置 + // + public void newTubeHolderSetting() { + TubeHolderSetting setting = tubeSettingMgrService.newTubeHolderSetting(); + editChooseUuid = setting.uuid; + editTubeChooseIndex = 0; + } + + + public void removeTubeHolderSetting() throws AppException { + tubeSettingMgrService.removeTubeHolderSetting(editChooseUuid); + } + + public void updateActiveState(Boolean active) throws AppException { + tubeSettingMgrService.updateActiveState(editChooseUuid, active); + } + + + // + // 试管配置 + // + public void resetTubeSetting() throws AppException { + tubeSettingMgrService.resetTubeSetting(editChooseUuid, editTubeChooseIndex); + } + + public void setTubeSettingUserId(String userid) throws AppException { + TubeSetting setting = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); + setting.userid = userid; + tubeSettingMgrService.updateTubeSetting(editChooseUuid, setting); + } + + public void setTubeSettingSampleBarcode(String sampleBarcode) throws AppException { + TubeSetting setting = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); + setting.sampleBarcode = sampleBarcode; + tubeSettingMgrService.updateTubeSetting(editChooseUuid, setting); + } + + public void setTubeSettingProjId(Integer projId) throws AppException { + TubeSetting setting = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); + setting.projId.clear(); + setting.projId.add(projId); + tubeSettingMgrService.updateTubeSetting(editChooseUuid, setting); + } + + public void setTubeSettingBloodType(BloodType bloodType) throws AppException { + TubeSetting setting = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); + setting.bloodType = bloodType; + tubeSettingMgrService.updateTubeSetting(editChooseUuid, setting); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("上下文选择"); + page.addFunction("选择试管架", this::setEditChooseUuid); + page.addFunction("选择试管序号", this::setEditTubeChooseIndex); + + page.newGroup("试管架配置"); + page.addFunction("新建试管架配置", this::newTubeHolderSetting); + page.addFunction("删除试管架配置", this::removeTubeHolderSetting); + page.addFunction("激活试管架", this::updateActiveState); + + page.newGroup("试管配置"); + page.addFunction("重置试管配置", this::resetTubeSetting); + page.addFunction("设置用户ID", this::setTubeSettingUserId); + page.addFunction("设置样本条码", this::setTubeSettingSampleBarcode); + page.addFunction("设置项目ID", this::setTubeSettingProjId); + page.addFunction("设置血液类型", this::setTubeSettingBloodType); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/debug/P11IncubationPlateStateDebugPageAll.java b/src/main/java/a8k/extui/newpage/debug/P11IncubationPlateStateDebugPageAll.java new file mode 100644 index 0000000..6edc503 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P11IncubationPlateStateDebugPageAll.java @@ -0,0 +1,121 @@ +package a8k.extui.newpage.debug; + + +import a8k.app.a8ktype.device.IncubatorPos; +import a8k.app.a8ktype.state.IncubationSubTank; +import a8k.app.service.statemgr.IncubationPlateStateMgrService; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P11IncubationPlateStateDebugPageAll { + + + @Resource + IncubationPlateStateMgrService incubationPlateStateMgrService; + + + @ExtApiStatu(name = "", group = "孵育盘1状态", order = 1) + public IncubationSubTank getSubTankStatu1() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE01); + } + + @ExtApiStatu(name = "", group = "孵育盘2状态", order = 2) + public IncubationSubTank getSubTankStatu2() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE02); + } + + @ExtApiStatu(name = "", group = "孵育盘3状态", order = 3) + public IncubationSubTank getSubTankStatu3() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE03); + } + + @ExtApiStatu(name = "", group = "孵育盘4状态", order = 4) + public IncubationSubTank getSubTankStatu4() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE04); + } + + @ExtApiStatu(name = "", group = "孵育盘5状态", order = 5) + public IncubationSubTank getSubTankStatu5() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE05); + } + + @ExtApiStatu(name = "", group = "孵育盘6状态", order = 6) + public IncubationSubTank getSubTankStatu6() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE06); + } + + @ExtApiStatu(name = "", group = "孵育盘7状态", order = 7) + public IncubationSubTank getSubTankStatu7() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE07); + } + + @ExtApiStatu(name = "", group = "孵育盘8状态", order = 8) + public IncubationSubTank getSubTankStatu8() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE08); + } + + @ExtApiStatu(name = "", group = "孵育盘9状态", order = 9) + public IncubationSubTank getSubTankStatu9() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE09); + } + + @ExtApiStatu(name = "", group = "孵育盘10状态", order = 10) + public IncubationSubTank getSubTankStatu10() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE10); + } + + @ExtApiStatu(name = "", group = "孵育盘11状态", order = 11) + public IncubationSubTank getSubTankStatu11() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE11); + } + + @ExtApiStatu(name = "", group = "孵育盘12状态", order = 12) + public IncubationSubTank getSubTankStatu12() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE12); + } + + @ExtApiStatu(name = "", group = "孵育盘13状态", order = 13) + public IncubationSubTank getSubTankStatu13() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE13); + } + + @ExtApiStatu(name = "", group = "孵育盘14状态", order = 14) + public IncubationSubTank getSubTankStatu14() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE14); + } + + @ExtApiStatu(name = "", group = "孵育盘15状态", order = 15) + public IncubationSubTank getSubTankStatu15() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE15); + } + + @ExtApiStatu(name = "", group = "孵育盘16状态", order = 16) + public IncubationSubTank getSubTankStatu16() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE16); + } + + @ExtApiStatu(name = "", group = "孵育盘17状态", order = 17) + public IncubationSubTank getSubTankStatu17() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE17); + } + + @ExtApiStatu(name = "", group = "孵育盘18状态", order = 18) + public IncubationSubTank getSubTankStatu18() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE18); + } + + @ExtApiStatu(name = "", group = "孵育盘19状态", order = 19) + public IncubationSubTank getSubTankStatu19() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE19); + } + + @ExtApiStatu(name = "", group = "孵育盘20状态", order = 20) + public IncubationSubTank getSubTankStatu20() { + return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE20); + } + +} diff --git a/src/main/java/a8k/extui/newpage/debug/P12TueStateDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P12TueStateDebugPage.java new file mode 100644 index 0000000..d8441b1 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P12TueStateDebugPage.java @@ -0,0 +1,75 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.state.Tube; +import a8k.app.a8ktype.state.TubeHolder; +import a8k.app.service.statemgr.TubeStateMgrService; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P12TueStateDebugPage { + + @Resource + TubeStateMgrService tubeStateMgrService; + + + @ExtApiStatu(name = "", group = "试管架状态", minWidth = "100%", order = 1) + public TubeHolder getTubeHolder() { + return tubeStateMgrService.getTubeHolder(); + } + + @ExtApiStatu(name = "", group = "试管1", order = 2) + public Tube getTube0State() { + return tubeStateMgrService.getTubeHolder().getTubes()[0]; + } + + @ExtApiStatu(name = "", group = "试管2", order = 3) + public Tube getTube1State() { + return tubeStateMgrService.getTubeHolder().getTubes()[1]; + } + + @ExtApiStatu(name = "", group = "试管3", order = 4) + public Tube getTube2State() { + return tubeStateMgrService.getTubeHolder().getTubes()[2]; + } + + @ExtApiStatu(name = "", group = "试管4", order = 5) + public Tube getTube3State() { + return tubeStateMgrService.getTubeHolder().getTubes()[3]; + } + + @ExtApiStatu(name = "", group = "试管5", order = 6) + public Tube getTube4State() { + return tubeStateMgrService.getTubeHolder().getTubes()[4]; + } + + @ExtApiStatu(name = "", group = "试管6", order = 7) + public Tube getTube5State() { + return tubeStateMgrService.getTubeHolder().getTubes()[5]; + } + + @ExtApiStatu(name = "", group = "试管7", order = 8) + public Tube getTube6State() { + return tubeStateMgrService.getTubeHolder().getTubes()[6]; + } + + @ExtApiStatu(name = "", group = "试管8", order = 9) + public Tube getTube7State() { + return tubeStateMgrService.getTubeHolder().getTubes()[7]; + } + + @ExtApiStatu(name = "", group = "试管9", order = 10) + public Tube getTube8State() { + return tubeStateMgrService.getTubeHolder().getTubes()[8]; + } + + @ExtApiStatu(name = "", group = "试管10", order = 11) + public Tube getTube9State() { + return tubeStateMgrService.getTubeHolder().getTubes()[9]; + } + + +} diff --git a/src/main/java/a8k/extui/newpage/debug/P13OptModuleStateDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P13OptModuleStateDebugPage.java new file mode 100644 index 0000000..a69193f --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P13OptModuleStateDebugPage.java @@ -0,0 +1,20 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.state.OptScanModule; +import a8k.app.service.statemgr.OptScanModuleStateMgrService; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P13OptModuleStateDebugPage { + @Resource + OptScanModuleStateMgrService optScanModuleStateMgrService; + + @ExtApiStatu(name = "",group = "获取光学模块状态") + public OptScanModule getOptScanModuleState() { + return optScanModuleStateMgrService.getOptScanModule(); + } +} diff --git a/src/main/java/a8k/extui/newpage/debug/P20AppSettingDebugPage.java b/src/main/java/a8k/extui/newpage/debug/P20AppSettingDebugPage.java new file mode 100644 index 0000000..333bec6 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P20AppSettingDebugPage.java @@ -0,0 +1,88 @@ +package a8k.extui.newpage.debug; + +import a8k.app.dao.db.type.AppSetting; +import a8k.app.dao.db.type.appsetting.settingenum.*; +import a8k.app.service.setting.AppSettingsMgrService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class P20AppSettingDebugPage { + + @Resource + AppSettingsMgrService appSettingsMgrService; + + + @ExtApiStatu(name = "", group = "AppSetting", order = 1) + public AppSetting getAppSetting() { + return appSettingsMgrService.getAppSettings(); + } + + // + public void setLanguage(LanguageType val) { + appSettingsMgrService.setLanguage(val); + } + + public void setAutoPrint(Boolean val) { + appSettingsMgrService.setAutoPrint(val); + } + + public void setAutoLogout(Boolean val) { + appSettingsMgrService.setAutoLogout(val); + } + + public void setLISType(LISTypeEnum val) { + appSettingsMgrService.setLISType(val); + } + + public void setLISProtocol(LISProtocolEnum val) { + appSettingsMgrService.setLISProtocol(val); + } + + public void setLIFIf(LISIFType val) { + appSettingsMgrService.setLIFIf(val); + } + + public void setLISAutoExport(Boolean val) { + appSettingsMgrService.setLISAutoExport(val); + } + + public void setLISSerialBaudrate(LISSerialBaudrateType val) { + appSettingsMgrService.setLISSerialBaudrate(val); + } + + public void setLISNetIp(String val) { + appSettingsMgrService.setLISNetIp(val); + } + + public void setLISNetPort(Integer val) { + appSettingsMgrService.setLISNetPort(val); + } + + public void setTemperature(Integer val) { + appSettingsMgrService.setTemperature(val); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("设置语言", this::setLanguage); + page.addFunction("设置自动打印", this::setAutoPrint); + page.addFunction("设置自动登出", this::setAutoLogout); + page.addFunction("设置LIS类型", this::setLISType); + page.addFunction("设置LIS协议", this::setLISProtocol); + page.addFunction("设置LIS接口", this::setLIFIf); + page.addFunction("设置LIS自动导出", this::setLISAutoExport); + page.addFunction("设置LIS串口波特率", this::setLISSerialBaudrate); + page.addFunction("设置LIS网络IP", this::setLISNetIp); + page.addFunction("设置LIS网络端口", this::setLISNetPort); + page.addFunction("设置温度", this::setTemperature); + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/debug/P22UserOperaionInRunOnlyModePage.java b/src/main/java/a8k/extui/newpage/debug/P22UserOperaionInRunOnlyModePage.java new file mode 100644 index 0000000..93db614 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P22UserOperaionInRunOnlyModePage.java @@ -0,0 +1,61 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.DeviceRunMode; +import a8k.app.a8ktype.device.A8kTubeHolderType; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.type.TubeHolderScanResult; +import a8k.app.a8ktype.type.TubesScanResult; +import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.app.service.statemgr.GStateMgrService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import a8k.teststate.TestStateMgrService; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class P22UserOperaionInRunOnlyModePage { + @Resource + GStateMgrService gstate; + @Resource + TestStateMgrService testStateMgrService; + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + void init() { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.newGroup("样本模拟操作"); + page.addFunction("放入一个全血高试管架(10个试管)", this::putInVirtualBloodTubeHolder); + extApiPageMgr.addPage(page); + } + + private void checkInRunOnlyMode() throws AppException { + if (!gstate.getDeviceRunMode().equals(DeviceRunMode.RunOnlyMode)) { + throw AppException.of(A8kEcode.CODEERROR, "只有在空转模式下才能进行当前操作"); + } + } + + // + // 样本模拟操作 + // + public void putInVirtualBloodTubeHolder() throws AppException { + checkInRunOnlyMode(); + TubeHolderScanResult scanResult = new TubeHolderScanResult(); + scanResult.tubeHolderType = A8kTubeHolderType.BloodTube.scanCode; + scanResult.tube[0] = new TubesScanResult(true, true, ""); + scanResult.tube[1] = new TubesScanResult(true, true, ""); + scanResult.tube[2] = new TubesScanResult(true, true, ""); + scanResult.tube[3] = new TubesScanResult(true, true, ""); + scanResult.tube[4] = new TubesScanResult(true, true, ""); + scanResult.tube[5] = new TubesScanResult(true, true, ""); + scanResult.tube[6] = new TubesScanResult(true, true, ""); + scanResult.tube[7] = new TubesScanResult(true, true, ""); + scanResult.tube[8] = new TubesScanResult(true, true, ""); + scanResult.tube[9] = new TubesScanResult(true, true, ""); + testStateMgrService.insertVirtualBloodTubeHolder(scanResult); + } + + +} diff --git a/src/main/java/a8k/extui/newpage/debug/P22UserOperaionInVertualModePage.java b/src/main/java/a8k/extui/newpage/debug/P22UserOperaionInVertualModePage.java new file mode 100644 index 0000000..e41db45 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/debug/P22UserOperaionInVertualModePage.java @@ -0,0 +1,111 @@ +package a8k.extui.newpage.debug; + +import a8k.app.a8ktype.DeviceRunMode; +import a8k.app.a8ktype.device.A8kTubeHolderType; +import a8k.app.a8ktype.device.ConsumableGroup; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.type.TubeHolderScanResult; +import a8k.app.a8ktype.type.TubesScanResult; +import a8k.app.dao.db.type.ProjExtInfoCard; +import a8k.app.factory.ProjExtInfoCardFactory; +import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.app.service.lowerctrl.ProjIDCardCtrlAndMonitorService; +import a8k.app.service.statemgr.GStateMgrService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import a8k.teststate.TestStateMgrService; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class P22UserOperaionInVertualModePage { + @Resource + GStateMgrService gstate; + @Resource + TestStateMgrService testStateMgrService; + @Resource + ExtApiPageMgr extApiPageMgr; + + @Resource + ProjIDCardCtrlAndMonitorService projIDCardCtrlAndMonitorService; + + @PostConstruct + void init() { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.newGroup("ID卡模拟操作"); + page.addFunction("插入ID卡", this::insertVirtualIdCard); + page.addFunction("拔出ID卡", this::removeVirtualIdCard); + + page.newGroup("耗材模拟操作"); + page.addFunction("放入虚拟耗材", this::putInVirtualConsumable); + page.addFunction("拿走虚拟耗材", this::takeAwayVirtualConsumable); + + page.newGroup("样本模拟操作"); + page.addFunction("放入一个全血高试管架", this::putInVirtualBloodTubeHolder); + + extApiPageMgr.addPage(page); + } + + // + // ID卡模拟操作 + // + + private void checkMode() throws AppException { + if (!gstate.getDeviceRunMode().equals(DeviceRunMode.VirtualMode)) { + throw AppException.of(A8kEcode.CODEERROR, "只有在虚拟模式下才能进行当前操作"); + } + } + + public void insertVirtualIdCard(Integer projId, String lotId) throws AppException { + checkMode(); + ProjExtInfoCard newInfoCard = ProjExtInfoCardFactory.buildProjExtInfoCard(projId, lotId); + projIDCardCtrlAndMonitorService.setVirtualMountedIdCardInfo(newInfoCard); + } + + public void removeVirtualIdCard() throws AppException { + checkMode(); + projIDCardCtrlAndMonitorService.setVirtualMountedIdCardInfo(null); + } + + // + // 耗材模拟操作 + // + public void putInVirtualConsumable(ConsumableGroup group, String lotid) throws AppException { + checkMode(); + testStateMgrService.putVirtualConsumable(group.off, lotid); + } + + public void takeAwayVirtualConsumable() throws AppException { + checkMode(); + testStateMgrService.takeAwayVirtualConsumable(0); + testStateMgrService.takeAwayVirtualConsumable(1); + testStateMgrService.takeAwayVirtualConsumable(2); + testStateMgrService.takeAwayVirtualConsumable(3); + testStateMgrService.takeAwayVirtualConsumable(4); + testStateMgrService.takeAwayVirtualConsumable(5); + } + + + // + // 样本模拟操作 + // + public void putInVirtualBloodTubeHolder() throws AppException { + checkMode(); + TubeHolderScanResult scanResult = new TubeHolderScanResult(); + scanResult.tubeHolderType = A8kTubeHolderType.BloodTube.scanCode; + scanResult.tube[0] = new TubesScanResult(true, true, ""); + scanResult.tube[1] = new TubesScanResult(true, true, ""); + scanResult.tube[2] = new TubesScanResult(true, true, ""); + scanResult.tube[3] = new TubesScanResult(true, true, ""); + scanResult.tube[4] = new TubesScanResult(true, true, ""); + scanResult.tube[5] = new TubesScanResult(true, true, ""); + scanResult.tube[6] = new TubesScanResult(true, true, ""); + scanResult.tube[7] = new TubesScanResult(true, true, ""); + scanResult.tube[8] = new TubesScanResult(true, true, ""); + scanResult.tube[9] = new TubesScanResult(true, true, ""); + testStateMgrService.insertVirtualBloodTubeHolder(scanResult); + } + + +} diff --git a/src/main/java/a8k/extui/newpage/extapp/A8kOptVerification.java b/src/main/java/a8k/extui/newpage/extapp/A8kOptVerification.java new file mode 100644 index 0000000..3e2dd55 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extapp/A8kOptVerification.java @@ -0,0 +1,273 @@ +package a8k.extui.newpage.extapp; + +import a8k.app.a8kproj.A8kReactionResultComputer; +import a8k.app.a8kproj.optalgo.type.OptScanResult; +import a8k.app.a8ktype.device.BloodType; +import a8k.app.a8ktype.state.SampleInfo; +import a8k.app.a8ktype.type.ReactionResult; +import a8k.app.controler.filemgr.StorageControler; +import a8k.app.dao.db.type.ProjExtInfoCard; +import a8k.app.service.data.ProjIdCardInfoMgrService; +import a8k.app.service.lowerctrl.DeviceInitCtrlService; +import a8k.app.utils.ProjInfo; +import a8k.extui.type.ExtApiStatu; +import a8k.extui.type.ret.FileToBeDownload; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import a8k.app.service.data.FileMgrService; +import a8k.app.service.data.ProjInfoMgrService; +import a8k.app.service.lowerctrl.OptScanModuleCtrlService; +import a8k.app.service.lowerctrl.PlateBoxCtrlService; +import a8k.extui.type.ret.A8kScanCurve; +import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; +import a8k.app.a8ktype.device.ConsumableGroup; +import a8k.app.a8ktype.device.IncubatorPos; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.utils.ProjBuildinInfo; +import a8k.app.utils.ZList; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Component +public class A8kOptVerification { + + @Resource + DeviceInitCtrlService deviceInitCtrlService; + + @Resource + PlateBoxCtrlService plateBoxCtrlService; + @Resource + OptScanModuleCtrlService optScanModuleCtrlService; + + @Resource + ProjInfoMgrService projInfoMgrService; + @Resource + FileMgrService fileMgrService; + @Resource + ProjIdCardInfoMgrService projIdCardInfoMgrService; + + @Resource + ExtApiPageMgr extApiPageMgr; + + Integer activeProjId = 0; + BloodType bloodType = BloodType.WHOLE_BLOOD; + ProjBuildinInfo projInfo; + + @ExtApiStatu(name = "", group = "项目信息", order = 1) + public ProjBuildinInfo getProjInfo() { + return projInfo; + } + + @ExtApiStatu(name = "", group = "挂载ID卡信息", order = 2) + public ProjExtInfoCard getMountedProjInfoCard() { + return projIdCardInfoMgrService.getMountedProjInfoCard(); + } + + @ExtApiStatu(name = "", group = "血液类型", order = 2) + public String getBloodType() { + return switch (bloodType) { + case WHOLE_BLOOD -> "全血"; + case SERUM_OR_PLASMA -> "血清/血浆"; + default -> "未知"; + }; + } + + + @PostConstruct + void init() throws NoSuchMethodException { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.newGroup("测试工具"); + page.addFunction("测试初始化", this::testInit); + + page.newGroup("环境配置"); + page.addFunction("查看项目信息列表", this::getProjInfoBreifList); + page.addFunction("设置项目", this::setProj); + page.addFunction("设置血液类型", this::setBloodType); + + + page.newGroup("光学测试"); + page.addFunction("推板到光学模组(从板夹仓0号仓推入)", this::pushOnePlateToOptModule); + page.addFunction("光学扫描", this::doOptScan); + page.addFunction("计算扫描结果", this::computeResult); + page.addFunction("丢板", this::dropPlate); + + + page.newGroup("光学结果"); + page.addFunction("预览T光学扫描曲线", this::getScanCurveT); + page.addFunction("预览F光学扫描曲线", this::getScanCurveF); + page.addFunction("下载T光学报告", this::getTOptReport); + page.addFunction("下载F光学报告", this::getFOptReport); + + extApiPageMgr.addPage(page); + } + + public void testInit() throws AppException { + deviceInitCtrlService.initDeviceWithException(); + } + + public Map getProjInfoBreifList() throws AppException { + var allproj = projInfoMgrService.getAllProjBuildInInfo(); + Map result = new java.util.HashMap<>(); + for (var proj : allproj) { + result.put(proj.projId.toString(), + String.format("%s(%s)", proj.projName, proj.getOptMark())); + } + return result; + } + + + synchronized public void setProj(Integer projId) throws AppException { + activeProjId = projId; + projInfo = projInfoMgrService.getProjBuildInInfo(projId); + } + + synchronized public void setBloodType(BloodType bloodType) { + this.bloodType = bloodType; + } + + + A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) { + List refCurve = new ArrayList<>(); + for (int i = 1; i < 6; i++) { + refCurve.add((int) (40 * 4.8 * i)); + } + var result = new A8kScanCurve(); + result.refCurve = refCurve; + result.scanDataCurve = ZList.of(optScanResult); + return result; + } + + static class OptScanReport { + public A8kOptType optType; + public A8kScanCurve optScanCurve; + public String optReportFilePath; + public OptScanResult optScanResult; + } + + List optScanReports = new ArrayList<>(); + + private OptScanResult getOptScanResult(A8kOptType type) throws AppException { + for (var report : optScanReports) { + if (report.optType.equals(type)) { + return report.optScanResult; + } + } + return null; + } + + public void generateOptReport(ProjBuildinInfo info, Integer subProjIndex, OptScanResult optScanResult) + throws IOException { + OptScanReport report = new OptScanReport(); + report.optScanCurve = createScanCurve1200Point(optScanResult.rawData.rawData); + report.optReportFilePath = fileMgrService.storageOptReport(info.projName, info.projId, + subProjIndex, optScanResult); + report.optType = info.optcfg.get(subProjIndex).optType; + report.optScanResult = optScanResult; + optScanReports.add(report); + } + + public void pushOnePlateToOptModule() throws AppException { + optScanModuleCtrlService.dropPlate(); + optScanModuleCtrlService.pullPlate(IncubatorPos.SPACE01); + optScanModuleCtrlService.dropPlate(); + plateBoxCtrlService.pushPlateQuick(ConsumableGroup.CG1, IncubatorPos.SPACE01); + optScanModuleCtrlService.pullPlate(IncubatorPos.SPACE01); + } + + public String doOptScan() throws AppException, IOException { + fileMgrService.clearOptReport(); + optScanReports.clear(); + if (projInfo == null) { + throw AppException.ofSimplePrompt("请先选择项目"); + } + for (int i = 0; i < projInfo.optcfg.size(); i++) { + OptScanResult scanResult = getOptScanResult(projInfo.optcfg.get(i).optType); + if (scanResult == null) { + scanResult = optScanModuleCtrlService.optScan(projInfo, i); + } + generateOptReport(projInfo, i, scanResult); + } + return "扫描完成"; + } + + + public List computeResult() throws AppException { + if (projInfo == null) { + throw AppException.ofSimplePrompt("请先选择项目"); + } + + SampleInfo sampleInfo = new SampleInfo(); + sampleInfo.sampleId = "TEST_SAMPLE"; + sampleInfo.sampleBarcode = "TEST_BARCODE"; + sampleInfo.bloodType = bloodType; + + ProjInfo projInfo = new ProjInfo(); + projInfo.buildIn = this.projInfo; + projInfo.ext = projIdCardInfoMgrService.getMountedProjInfoCard(); + + if (projInfo.ext == null) { + throw AppException.ofSimplePrompt("请插入项目卡"); + } + + if (!Objects.equals(projInfo.ext.projId, this.projInfo.projId)) { + throw AppException.ofSimplePrompt("项目卡与当前项目不匹配"); + } + + List results = new ArrayList<>(); + for (int i = 0; i < this.projInfo.optcfg.size(); i++) { + OptScanResult optScanResult = getOptScanResult(this.projInfo.optcfg.get(i).optType); + Assert.notNull(optScanResult, "光学扫描结果为空"); + results.add(A8kReactionResultComputer.optComputeResult(sampleInfo, projInfo, i, optScanResult.analysResult)); + } + + return results; + } + + public void dropPlate() throws AppException { + optScanModuleCtrlService.dropPlate(); + } + + public A8kScanCurve getScanCurveT() throws AppException { + for (var report : optScanReports) { + if (report.optType.equals(A8kOptType.TOPT)) { + return report.optScanCurve; + } + } + throw AppException.ofSimplePrompt("当前项目没有T光学扫描曲线"); + } + + public A8kScanCurve getScanCurveF() throws AppException { + for (var report : optScanReports) { + if (report.optType.equals(A8kOptType.FOPT)) { + return report.optScanCurve; + } + } + throw AppException.ofSimplePrompt("当前项目没有F光学扫描曲线"); + } + + public FileToBeDownload getTOptReport() throws AppException { + for (var report : optScanReports) { + if (report.optType.equals(A8kOptType.TOPT)) { + return new FileToBeDownload(StorageControler.getDoloadPath(report.optReportFilePath)); + } + } + throw AppException.ofSimplePrompt("当前项目没有T光学报告"); + } + + public FileToBeDownload getFOptReport() throws AppException { + for (var report : optScanReports) { + if (report.optType.equals(A8kOptType.FOPT)) { + return new FileToBeDownload(StorageControler.getDoloadPath(report.optReportFilePath)); + } + } + throw AppException.ofSimplePrompt("当前项目没有F光学报告"); + } +} diff --git a/src/main/java/a8k/extui/newpage/extapp/OptModuleParamCalibration.java b/src/main/java/a8k/extui/newpage/extapp/OptModuleParamCalibration.java new file mode 100644 index 0000000..6ef807c --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extapp/OptModuleParamCalibration.java @@ -0,0 +1,232 @@ +package a8k.extui.newpage.extapp; + +import a8k.app.a8ktype.device.ConsumableGroup; +import a8k.app.a8ktype.device.IncubatorPos; +import a8k.app.service.lowerctrl.DeviceInitCtrlService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ret.A8kScanCurve; +import a8k.extui.type.ExtApiStatu; +import a8k.app.service.lowerctrl.OptScanModuleCtrlService; +import a8k.app.service.lowerctrl.PlateBoxCtrlService; +import a8k.app.service.param.OptModuleExtParamsMgr; +import a8k.app.a8ktype.param.optpos.OptModuleExtParam; +import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.utils.ZList; +import a8k.app.utils.opt_gain_convert.OptGainConvert; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * + * 1.下面三个位置在ReactionPlatesTransmitControlerCalibration进行标定 + * PullerTargetPos("拉板目标位置"), + * OptScanerDropPos("丢板坐标"), + * OptScanerScandbyPos("扫描待机位"), + * + * 2. 该模块只用来标定 + * TOptScanStartPos (T光学扫描起始位置) + * FOptScanStartPos (F光学扫描起始位置) + */ +@Component +public class OptModuleParamCalibration { + private static final Logger log = LoggerFactory.getLogger(OptModuleParamCalibration.class); + @Resource + OptModuleExtParamsMgr optModuleExtParamsMgr; + + @Resource + PlateBoxCtrlService plateBoxCtrlService; + @Resource + OptScanModuleCtrlService optScanModuleCtrlService; + + + @Resource + DeviceInitCtrlService deviceInitCtrlService; + + + @ExtApiStatu(name = "", group = "F光学参数", order = 1) + public Object getTPara() throws AppException { + return optModuleExtParamsMgr.getParamMap(OptModuleExtParam.FOptEmissionIntensity, OptModuleExtParam.FOptScanGainVal, OptModuleExtParam.FOptScanShift); + } + + @ExtApiStatu(name = "", group = "T光学参数", order = 2) + public Object getFPara() throws AppException { + return optModuleExtParamsMgr.getParamMap(OptModuleExtParam.TOptEmissionIntensity, OptModuleExtParam.TOptScanGainVal, OptModuleExtParam.TOptScanShift); + } + + @ExtApiStatu(name = "", group = "说明", order = 3) + public Object getDesc() { + Map desc = new HashMap<>(); + desc.put("1", "测试使用的位置反应板1号仓"); + desc.put("2", "F光学发射强度参数:越大强度越弱"); + return desc; + } + + public void deviceReset() throws AppException { + deviceInitCtrlService.initDeviceWithException(); + } + + + // + // 辅助方法 + // + + /** + * From: 0号仓 + * TrunablePos:0号仓到 + */ + + public void pushOnePlateToOptModule() throws AppException { + //先清空当前通道 + optScanModuleCtrlService.dropPlate(); + optScanModuleCtrlService.pullPlate(IncubatorPos.SPACE01); + optScanModuleCtrlService.dropPlate(); + + //推板到光学模组 + plateBoxCtrlService.pushPlateQuick(ConsumableGroup.CG1, IncubatorPos.SPACE01); + optScanModuleCtrlService.pullPlate(IncubatorPos.SPACE01); + } + + + public void dropPlate() throws AppException { + optScanModuleCtrlService.dropPlate(); + } + + + A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) { + // Integer[] optScanResult250 = A8kOptAlgoUtils.supperSamplingAndSubSampling(optScanResult); + List refCurve = new ArrayList<>(); + for (int i = 1; i < 6; i++) { + refCurve.add((int) (40 * 4.8 * i)); + } + + var result = new A8kScanCurve(); + result.refCurve = refCurve; + result.scanDataCurve = ZList.of(optScanResult); + return result; + } + + A8kScanCurve fcurveCache = null; + + public void setFOptScanShift(Integer shift) throws AppException { + if (shift < 0) { + throw AppException.ofAECodeError("扫描偏移量必须大于0"); + } + + Integer oldShift = optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptScanShift, Integer.class); + Integer diffShift = shift - oldShift; + + if (fcurveCache != null) { + for (int i = 0; i < fcurveCache.refCurve.size(); i++) { + // log.info("i={}, fcurveCache.refCurve.get(i)={}, diffShift={}", i, fcurveCache.refCurve.get(i), diffShift); + // log.info("new value={}", fcurveCache.refCurve.get(i) - diffShift); + fcurveCache.refCurve.set(i, fcurveCache.refCurve.get(i) + diffShift); + } + } + + + optModuleExtParamsMgr.setOptParam(OptModuleExtParam.FOptScanShift, shift); + } + + + public void setFOptEmissionIntensity(Integer val) { + optModuleExtParamsMgr.setOptParam(OptModuleExtParam.FOptEmissionIntensity, val); + } + + + public void setFOptScanAmplVal(Double val) { + optModuleExtParamsMgr.setOptParam(OptModuleExtParam.FOptScanGainVal, val); + } + + + public A8kScanCurve FOptScan() throws AppException { + Double scanGain = optModuleExtParamsMgr.getScanGain(A8kOptType.FOPT); + Integer rawScanGain = OptGainConvert.scanerToRawGain(A8kOptType.FOPT, scanGain); + Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.FOPT); + var result = optScanModuleCtrlService.startOptScan(A8kOptType.FOPT, rawLasterGain, rawScanGain); + fcurveCache = createScanCurve1200Point(result); + return fcurveCache; + } + + public A8kScanCurve getFCurveCache() { + return fcurveCache; + } + + + // + //T光学 + // + + + public void setTOptScanShift(Integer shift) throws AppException { + if (shift < 0) { + throw AppException.ofAECodeError("扫描偏移量必须大于0"); + } + optModuleExtParamsMgr.setOptParam(OptModuleExtParam.TOptScanShift, shift); + } + + + public void setTOptEmissionIntensity(Integer val) { + optModuleExtParamsMgr.setOptParam(OptModuleExtParam.TOptEmissionIntensity, val); + } + + + public void setTOptScanAmplVal(Double val) { + optModuleExtParamsMgr.setOptParam(OptModuleExtParam.TOptScanGainVal, val); + } + + + public A8kScanCurve TOptScan() throws AppException { + Double scanGain = optModuleExtParamsMgr.getScanGain(A8kOptType.TOPT); + Integer rawScanGain = OptGainConvert.scanerToRawGain(A8kOptType.TOPT, scanGain); + Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.TOPT); + + var result = optScanModuleCtrlService.startOptScan(A8kOptType.TOPT, rawLasterGain, rawScanGain); + return createScanCurve1200Point(result); + } + + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("基础"); + page.addFunction("设备初始化", this::deviceReset); + page.addFunction("推板到光学模组", this::pushOnePlateToOptModule); + page.addFunction("丢板", this::dropPlate); + + page.newGroup("F光学"); + page.addFunction("设置扫描偏移", this::setFOptScanShift) + .setParamVal("shift", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptScanShift, Integer.class)); + page.addFunction("设置发射强度[1->255]()", this::setFOptEmissionIntensity) + .setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptEmissionIntensity, Integer.class)); + page.addFunction("设置接收放大倍数[1.1->47]", this::setFOptScanAmplVal) + .setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptScanGainVal, Double.class)); + page.addFunction("扫描", this::FOptScan); + page.addFunction("查看波形", this::getFCurveCache); + + page.newGroup("T光学"); + page.addFunction("设置扫描偏移", this::setTOptScanShift) + .setParamVal("shift", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.TOptScanShift, Integer.class)); + page.addFunction("设置发射强度[1->255]", this::setTOptEmissionIntensity) + .setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.TOptEmissionIntensity, Integer.class)); + page.addFunction("设置接收放大倍数[0.5->21.7]", this::setTOptScanAmplVal) + .setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.TOptScanGainVal, Double.class)); + page.addFunction("扫描", this::TOptScan); + + extApiPageMgr.addPage(page); + } + +} diff --git a/src/main/java/a8k/extui/newpage/extapp/P01PipetteGunVerification.java b/src/main/java/a8k/extui/newpage/extapp/P01PipetteGunVerification.java new file mode 100644 index 0000000..34a741e --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extapp/P01PipetteGunVerification.java @@ -0,0 +1,219 @@ +package a8k.extui.newpage.extapp; + +import a8k.app.constant.AppConstant; +import a8k.app.service.param.HbotTipPosMgr; +import a8k.app.service.param.PipetteGunExParamMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import a8k.app.hardware.type.LldType; +import a8k.app.service.lowerctrl.HbotMoveExCtrlService; +import a8k.app.hardware.driver.PipetteCtrlDriver; +import a8k.app.hardware.driver.type.PipetteRegIndex; +import a8k.app.service.lowerctrl.HbotMoveCtrlService; +import a8k.app.a8ktype.device.ConsumableGroup; +import a8k.app.a8ktype.device.Pos3d; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.device.TipPos; +import a8k.app.a8ktype.device.TipGroup; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P01PipetteGunVerification { + @Resource + HbotTipPosMgr hbotTipPosMgr; + + @Resource + PipetteCtrlDriver pipetteCtrlDriver; + @Resource + HbotMoveCtrlService hbotMoveCtrlService; + @Resource + HbotMoveExCtrlService hbotMoveExCtrlService; + + @Resource + PipetteGunExParamMgr pipetteGunExParamMgr; + + @Resource + ExtApiPageMgr extApiPageMgr; + + Integer tipNum = 0; + Integer liquidPos = null; + Boolean stopFlag = false; + + @PostConstruct + void init() { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.newGroup("基础"); + page.addFunction("测试准备", this::initTestMode); + page.addFunction("停止测试", this::stopTest); + page.addFunction("设置校准系数", this::calibration) + .setParamVal("coefficientA", () -> pipetteGunExParamMgr.getCoefficientA()) + .setParamVal("coefficientB", () -> pipetteGunExParamMgr.getCoefficientB()); + page.newGroup("测试0"); + page.addFunction("取一次10ul", this::aspirate10ul); + page.addFunction("取一次75ul", this::aspirate75ul); + page.newGroup("测试1"); + page.addFunction("取一次5ul", this::aspirate5ul); + page.addFunction("取一次30ul", this::aspirate30ul); + page.addFunction("取一次50ul", this::aspirate50ul); + page.addFunction("停止测试", this::stopTest); + + extApiPageMgr.addPage(page); + } + + public void pipetteGunInit() throws AppException { + pipetteCtrlDriver.pipetteInitDeviceBlock(); + } + + public void initTestMode() throws AppException { + pipetteCtrlDriver.zMotorEnable(1); + hbotMoveCtrlService.enable(1); + pipetteCtrlDriver.zMotorMoveZeroBlock(); + hbotMoveCtrlService.moveToZero(); + hbotMoveCtrlService.hbotMoveTo(hbotTipPosMgr.getDropTipPos()); + pipetteGunInit(); + hbotMoveCtrlService.hbotMoveTo(new Pos3d(0, 0, 0)); + tipNum = AppConstant.TIP_NUM; + } + + public void stopTest() throws AppException { + pipetteCtrlDriver.zMotorEnable(0); + hbotMoveCtrlService.enable(0); + } + + public void calibration(Double coefficientA, Double coefficientB) { + pipetteGunExParamMgr.setVolumeCalibrationCoefficient(coefficientA, coefficientB); + } + + + Boolean takeOneTip() throws AppException { + hbotMoveCtrlService.hbotMoveTo(hbotTipPosMgr.getDropTipPos()); + pipetteGunInit(); + TipPos tipPos = new TipPos(); + tipPos.group = TipGroup.TipG1; + if (tipNum == 0) { + tipNum = 120; + } + + tipPos.index = AppConstant.TIP_NUM - tipNum; + tipNum--; + log.info(" 取TIP {}", tipPos); + return hbotMoveExCtrlService.takeTipNoCheck(tipPos.group, tipPos.index); + } + + void takeTip() throws AppException { + while (!pipetteCtrlDriver.isHasTip()) { + if (takeOneTip()) { + break; + } + } + } + + public void pumpMoveTo(Integer pumpvmax, Double ul) throws AppException { + pipetteCtrlDriver.liquidOperationClearParams(); + pipetteCtrlDriver.liquidOperationSetGunRunParams(14, 14, 0, 1000, pumpvmax); + pipetteCtrlDriver.liquidOperationFreshParams(); + pipetteCtrlDriver.pipettePumpMoveTo(ul); + } + + public Integer lld() throws AppException { + liquidPos = 0; + hbotMoveExCtrlService.moveToLargeBSSamplePosXY(ConsumableGroup.CG1); + pipetteCtrlDriver.zMotorMoveToBlock(0); + pumpMoveTo(8000, 0.0); + pumpMoveTo(300, 100.0); + pumpMoveTo(8000, 0.0); + pumpMoveTo(300, 50.0); + pipetteCtrlDriver.liquidOperationClearParams(); + pipetteCtrlDriver.liquidOperationSetGunRunParams(14, 14, 0, 900, 30); + pipetteCtrlDriver.liquidOperationSetZMotorRunParams(0, 500, 60); + pipetteCtrlDriver.liquidOperationFreshParams(); + pipetteCtrlDriver.pipetteLld(LldType.kplld, 0, 30); + if (pipetteCtrlDriver.lldIsDetectLiquid()) { + liquidPos = pipetteCtrlDriver.getReg(PipetteRegIndex.kreg_pipette_zm_pos); + } + pipetteCtrlDriver.zMotorMoveToBlock(0); + pumpMoveTo(8000, 0.0); + return liquidPos; + } + + public void takeLiquid(Double ul) throws AppException { + hbotMoveExCtrlService.moveToLargeBSSamplePosXY(ConsumableGroup.CG1); + pipetteCtrlDriver.zMotorMoveToBlock(0); + pumpMoveTo(8000, 0.0); + pumpMoveTo(8000, 150.0); + pipetteCtrlDriver.zMotorMoveToBlock(liquidPos); + pipetteCtrlDriver.liquidOperationClearParams(); + pipetteCtrlDriver.liquidOperationSetGunRunParams(14, 14, 0, 900, 100); + pipetteCtrlDriver.liquidOperationSetZMotorRunParams(0, 300, 10); + pipetteCtrlDriver.liquidOperationFreshParams(); + ul = pipetteGunExParamMgr.calibrateVolume(ul); + log.info("取液体 {}", ul); + pipetteCtrlDriver.pipetteAspirate(ul); + pipetteCtrlDriver.zMotorMoveToBlock(0); + } + + public void distributeLiquid() throws AppException { + hbotMoveExCtrlService.moveToLargeBSSamplePosXY(ConsumableGroup.CG6); + pipetteCtrlDriver.zMotorMoveToBlock(50); + pumpMoveTo(8000, 0.0); + pipetteCtrlDriver.zMotorMoveToBlock(0); + } + + public void resetPos() throws AppException { + hbotMoveExCtrlService.moveToLargeBSSamplePosXY(ConsumableGroup.CG2); + } + + public void aspirate10ul() throws AppException { + takeTip(); + lld(); + if (liquidPos == 0) + throw AppException.ofAECodeError("未检测到液体"); + takeLiquid(10.0); + distributeLiquid(); + resetPos(); + } + + public void aspirate75ul() throws AppException { + takeTip(); + lld(); + if (liquidPos == 0) + throw AppException.ofAECodeError("未检测到液体"); + takeLiquid(75.0); + distributeLiquid(); + resetPos(); + } + + public void aspirate5ul() throws AppException { + takeTip(); + lld(); + if (liquidPos == 0) + throw AppException.ofAECodeError("未检测到液体"); + takeLiquid(5.0); + distributeLiquid(); + resetPos(); + } + + public void aspirate30ul() throws AppException { + takeTip(); + lld(); + if (liquidPos == 0) + throw AppException.ofAECodeError("未检测到液体"); + takeLiquid(30.0); + distributeLiquid(); + resetPos(); + } + + public void aspirate50ul() throws AppException { + takeTip(); + lld(); + if (liquidPos == 0) + throw AppException.ofAECodeError("未检测到液体"); + takeLiquid(50.0); + distributeLiquid(); + resetPos(); + } +} diff --git a/src/main/java/a8k/extui/newpage/extapp/P02A8kTemperaturaVerfication.java b/src/main/java/a8k/extui/newpage/extapp/P02A8kTemperaturaVerfication.java new file mode 100644 index 0000000..1cda753 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extapp/P02A8kTemperaturaVerfication.java @@ -0,0 +1,168 @@ +package a8k.extui.newpage.extapp; + +import a8k.app.a8ktype.param.TemperatureCtrlParam; +import a8k.app.service.background.BackgroudProcessCtrlService; +import a8k.app.service.param.TemperatureCtrlParamMgr; +import a8k.extui.type.ret.ExtApiCurve; +import a8k.extui.factory.CurveBuilder; +import a8k.extui.type.ExtApiStatu; +import a8k.app.service.background.TemperatureCtrlService; +import a8k.app.hardware.driver.TemperatureControlDriver; +import a8k.app.a8ktype.exception.AppException; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.Resource; +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + + +/** + * + * + */ +@Component +@Slf4j +public class P02A8kTemperaturaVerfication { + @Resource + ExtApiPageMgr extApiPageMgr; + + @Resource + TemperatureCtrlService temperatureCtrlService; + @Resource + TemperatureControlDriver temperatureControlDriver; + @Resource + TemperatureCtrlParamMgr temperatureCtrlParamMgr; + @Resource + BackgroudProcessCtrlService backgroudProcessCtrlService; + + + List incubateBoxTemperatureCurve = new ArrayList<>(); + List plateBoxTemperatureCurve = new ArrayList<>(); + + Thread tempSampleThread; + + Double incubateBoxTemperatureCache = 0.0; + Double plateBoxTemperatureCache = 0.0; + Integer hasStartedTimeMS = 0; + Double targetTemp; + Boolean workingFlag = false; + + + @ExtApiStatu(name = "", group = "孵育盘温度", order = 3) + public Double readIncubateBoxTemperature() throws AppException { + return (incubateBoxTemperatureCache); + } + + @ExtApiStatu(name = "", group = "板夹仓温度", order = 4) + public Double readPlateBoxTemperature() throws AppException { + return (plateBoxTemperatureCache); + } + + @ExtApiStatu(name = "", group = "状态", order = 5) + public String hasStartedTime() { + int S = hasStartedTimeMS / 1000; + return String.format("%s:%s:%s", (int) Math.floor((double) S / 3600), (int) Math.floor((double) (S % 3600) / 60), S % 60); + } + + + @PostConstruct + public void init() throws NoSuchMethodException { + var page = extApiPageMgr.newPage(this); + + page.newGroup("基础"); + page.addFunction("设置孵育盘温度偏移", this::setIncubatorBoxTemperatureOff) + .setParamVal("offset", temperatureCtrlParamMgr.getParam(TemperatureCtrlParam.IncubatorTCMTempOffset)); + page.addFunction("设置板夹仓温度偏移", this::setPlatesBoxTCMTempOffset) + .setParamVal("offset", temperatureCtrlParamMgr.getParam(TemperatureCtrlParam.PlatesBoxTCMTempOffset)); + + page.newGroup("操作"); + page.addFunction("启动温度控制", this::startCtrl); + page.addFunction("停止温度控制", this::stopCtrl); + page.addFunction("查看孵育盘温度曲线", this::showIncubateBoxTemperatureCurve); + page.addFunction("查看板夹仓温度曲线", this::showPlateBoxTemperatureCurve); + extApiPageMgr.addPage(page); + } + + public void setIncubatorBoxTemperatureOff(Double offset) throws AppException, InterruptedException { + temperatureCtrlParamMgr.setParam(TemperatureCtrlParam.IncubatorTCMTempOffset, offset); + if (workingFlag) { + startCtrl(targetTemp.intValue()); + } + } + + + public void setPlatesBoxTCMTempOffset(Double offset) throws AppException, InterruptedException { + temperatureCtrlParamMgr.setParam(TemperatureCtrlParam.PlatesBoxTCMTempOffset, offset); + if (workingFlag) { + startCtrl(targetTemp.intValue()); + } + } + + + synchronized public void startCtrl(Integer targetTemperature) throws AppException, InterruptedException { + backgroudProcessCtrlService.stopProcess(); + + temperatureCtrlService.stopTemperatureControl(); + temperatureCtrlService.startFixTemperatureControl(targetTemperature); + if (tempSampleThread != null) { + tempSampleThread.interrupt(); + tempSampleThread.join(); + } + hasStartedTimeMS = 0; + targetTemp = (double) targetTemperature; + + tempSampleThread = new Thread(() -> { + while (true) { + try { + Thread.sleep(2000); + hasStartedTimeMS += 2000; + incubateBoxTemperatureCache = temperatureControlDriver.readIncubateBoxTemperature(); + plateBoxTemperatureCache = temperatureControlDriver.readPlateBoxTemperature(); + addIncubateBoxTemperatureCurve(incubateBoxTemperatureCache); + addPlateBoxTemperatureCurve(plateBoxTemperatureCache); + } catch (InterruptedException ignored) { + break; + } catch (Exception e) { + log.error("温度采样线程异常", e); + } + } + }); + tempSampleThread.start(); + workingFlag = true; + } + + synchronized public void stopCtrl() throws AppException, InterruptedException { + temperatureCtrlService.stopTemperatureControl(); + if (tempSampleThread != null) { + tempSampleThread.interrupt(); + tempSampleThread.join(); + } + workingFlag = false; + } + + public ExtApiCurve showIncubateBoxTemperatureCurve() { + return CurveBuilder.buidCurve("孵育盘温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, incubateBoxTemperatureCurve); + } + + public ExtApiCurve showPlateBoxTemperatureCurve() { + return CurveBuilder.buidCurve("板夹仓温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, plateBoxTemperatureCurve); + } + + + private void addIncubateBoxTemperatureCurve(Double temperature) { + incubateBoxTemperatureCurve.add(new Object[]{System.currentTimeMillis(), temperature}); + if (incubateBoxTemperatureCurve.size() > 3000) { + incubateBoxTemperatureCurve.remove(0); + } + } + + private void addPlateBoxTemperatureCurve(Double temperature) { + plateBoxTemperatureCurve.add(new Object[]{System.currentTimeMillis(), temperature}); + if (plateBoxTemperatureCurve.size() > 3000) { + plateBoxTemperatureCurve.remove(0); + } + } +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/DeviceActionParameterSettingPage.java b/src/main/java/a8k/extui/newpage/extsetting/DeviceActionParameterSettingPage.java new file mode 100644 index 0000000..2a5064b --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/DeviceActionParameterSettingPage.java @@ -0,0 +1,42 @@ +package a8k.extui.newpage.extsetting; + +import a8k.app.controler.filemgr.StorageControler; +import a8k.app.dao.db.DeviceActionParameterDao; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import a8k.extui.type.ret.FileToBeDownload; +import a8k.extui.type.param.ExtUIFile; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class DeviceActionParameterSettingPage { + @Resource + ExtApiPageMgr extApiPageMgr; + + @Resource + DeviceActionParameterDao deviceActionParameterDao; + + public FileToBeDownload exportDeviceActionParam() { + deviceActionParameterDao.export(); + return new FileToBeDownload(StorageControler.getDoloadPath(deviceActionParameterDao.getExportPATH())); + } + + public void importDeviceActionParam(ExtUIFile file) { + String filecontent = new String(file.bytes); + deviceActionParameterDao.importFromCSV(filecontent, true); + } + + + @PostConstruct + void init() throws NoSuchMethodException { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.addFunction("导出设备动作参数", this::exportDeviceActionParam); + page.addFunction("导入设备动作参数", this::importDeviceActionParam); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/ProjInfoMgrPage.java b/src/main/java/a8k/extui/newpage/extsetting/ProjInfoMgrPage.java new file mode 100644 index 0000000..2f1bc04 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/ProjInfoMgrPage.java @@ -0,0 +1,63 @@ +package a8k.extui.newpage.extsetting; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.service.data.ProjIdCardInfoMgrService; +import a8k.app.service.data.ProjInfoMgrService; +import a8k.app.utils.ProjBuildinInfo; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +@Slf4j +public class ProjInfoMgrPage { + @Resource + ExtApiPageMgr extApiPageMgr; + + @Resource + ProjIdCardInfoMgrService projIdCardInfoMgrService; + + @Resource + ProjInfoMgrService projInfoMgrService; + + // + // 1. 查询设备支持的项目信息 + // 2. 查询设备支持的单位范围 + // 3. 查询设备支持的未知数X的范围 + + + @PostConstruct + void init() throws NoSuchMethodException { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.addFunction("获取项目列表", this::getProjInfoBreifList); + page.addFunction("获取所有项目详细信息", this::getAllProjInfoBuildInInfo); + page.addFunction("获取项目详细信息", this::getProjInfoById); + extApiPageMgr.addPage(page); + } + + + public Map getProjInfoBreifList() throws AppException { + var allproj = projInfoMgrService.getAllProjBuildInInfo(); + Map result = new java.util.HashMap<>(); + for (var proj : allproj) { + result.put(proj.projId.toString(), + String.format("%s(%s)", proj.projName, proj.getOptMark())); + } + return result; + } + + public List getAllProjInfoBuildInInfo() throws AppException { + return projInfoMgrService.getAllProjBuildInInfo(); + } + + public ProjBuildinInfo getProjInfoById(Integer projId) throws AppException { + return projInfoMgrService.getProjBuildInInfo(projId); + } + +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P01MiniServoReferencePointIniter.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P01MiniServoReferencePointIniter.java new file mode 100644 index 0000000..0304703 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P01MiniServoReferencePointIniter.java @@ -0,0 +1,86 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + + +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.app.hardware.driver.MiniServoDriver; +import a8k.app.hardware.driver.type.MiniServoMId; +import a8k.app.a8ktype.exception.AppException; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class P01MiniServoReferencePointIniter { + + @Resource + MiniServoDriver miniServoDriver; + + + public void disableMotor() throws AppException { + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 0); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 0); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 0); + } + + + public void enableMotor() throws AppException { + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); + miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); + } + + + public Integer gripperSVSetCurrentPosAsRef() throws AppException { + miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModGripperSV); + return 1800; + } + + + public Integer YAxixServoSetCurrentPosAsRef() throws AppException { + return miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModGripperYSV); + } + + + public void setTubeScanClampPos() throws AppException { + miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModTubeScanerClampingSV); + } + + + public void gripperSVMoveToZeroBlock() throws AppException { + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperSV); + } + + + public void YAxixServoMoveToZeroBlock() throws AppException { + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV); + } + + + public void tubeScanClampMoveToZeroBlock() throws AppException { + miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModTubeScanerClampingSV); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("基础"); + page.addFunction("失能所有舵机", this::disableMotor); + page.addFunction("使能所有舵机", this::enableMotor); + + page.newGroup("参考点设置"); + page.addFunction("设置<夹爪><参考点>(完全张开的位置)", this::gripperSVSetCurrentPosAsRef); + page.addFunction("设置<摇匀模组Y轴舵机><参考点>(Y轴最外侧的位置)", this::YAxixServoSetCurrentPosAsRef); + page.addFunction("设置<夹紧舵机>参考点(水平位置)", this::setTubeScanClampPos); + + page.newGroup("校验"); + page.addFunction("夹紧舵机移动到待机位(在参考点附近)", this::gripperSVMoveToZeroBlock); + page.addFunction("摇匀模组Y轴舵机移动到待机位(在参考点附近)", this::YAxixServoMoveToZeroBlock); + page.addFunction("夹紧舵机移动到待机位(在参考点附近)", this::tubeScanClampMoveToZeroBlock); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P02TubeFeedingModulePosCalibrationPage.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P02TubeFeedingModulePosCalibrationPage.java new file mode 100644 index 0000000..8ebd5e7 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P02TubeFeedingModulePosCalibrationPage.java @@ -0,0 +1,94 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + +import a8k.app.a8ktype.param.tubefeeding.TubeFeedingModulePos; +import a8k.app.a8ktype.param.tubefeeding.TubeFeedingModuleSetting; +import a8k.app.service.param.TubeFeedingModuleParamMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + + +@Component +public class P02TubeFeedingModulePosCalibrationPage { + + @Resource + TubeFeedingModuleParamMgr tubeScanPosMgr; + + public void setTubeHolderEnterXPos(Integer pos) { + tubeScanPosMgr.setParam(TubeFeedingModulePos.TubeHolderEnterXPos, pos); + } + + public void setTubeHolderExitXPos(Integer pos) { + tubeScanPosMgr.setParam(TubeFeedingModulePos.TubeHolderExitXPos, pos); + } + + public void setTubeHolderScanXPos(Integer pos) { + tubeScanPosMgr.setParam(TubeFeedingModulePos.TubeHolderScanXPos, pos); + } + + public void setTube0ScanPos(Integer pos) { + tubeScanPosMgr.setParam(TubeFeedingModulePos.Tube0ScanPos, pos); + } + + public void setTube0AltitJudgPos(Integer pos) { + tubeScanPosMgr.setParam(TubeFeedingModulePos.Tube0AltitJudgPos, pos); + } + + public void setTube0ExistJudgPos(Integer pos) { + tubeScanPosMgr.setParam(TubeFeedingModulePos.Tube0ExistJudgPos, pos); + } + + public void setTube0PreProcessPos(Integer pos) { + tubeScanPosMgr.setParam(TubeFeedingModulePos.Tube0PreProcessPos, pos); + } + + //TubeScanServoTorque + //TubeSpacing + + public void setTubeScanServoTorque(Integer torque) { + tubeScanPosMgr.setParam(TubeFeedingModuleSetting.TubeScanServoTorque, torque); + } + + public void setTubeSpacing(Double spacing) { + tubeScanPosMgr.setParam(TubeFeedingModuleSetting.TubeSpacing, spacing); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("坐标"); + page.addFunction("设置试管架进入位置", this::setTubeHolderEnterXPos) + .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.TubeHolderEnterXPos, Integer.class)); + page.addFunction("设置试管架出口位置", this::setTubeHolderExitXPos) + .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.TubeHolderExitXPos, Integer.class)); + page.addFunction("设置试管架扫描位置", this::setTubeHolderScanXPos) + .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.TubeHolderScanXPos, Integer.class)); + page.addFunction("设置01号试管扫描位置", this::setTube0ScanPos) + .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.Tube0ScanPos, Integer.class)); + page.addFunction("设置01试管高度判断位置", this::setTube0AltitJudgPos) + .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.Tube0AltitJudgPos, Integer.class)); + page.addFunction("设置01试管存在判断位置", this::setTube0ExistJudgPos) + .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.Tube0ExistJudgPos, Integer.class)); + page.addFunction("设置01试管预处理位置", this::setTube0PreProcessPos) + .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.Tube0PreProcessPos, Integer.class)); + + page.newGroup("常量"); + page.addFunction("设置试管扫描旋转舵机扭矩(0->1000)", this::setTubeScanServoTorque) + .setParamVal("torque", () -> tubeScanPosMgr.getParam(TubeFeedingModuleSetting.TubeScanServoTorque, Integer.class)); + page.addFunction("计算并设置设置试管间距", this::setTubeSpacing) + .setParamVal("spacing", () -> tubeScanPosMgr.getParam(TubeFeedingModuleSetting.TubeSpacing, Double.class)); + extApiPageMgr.addPage(page); + } + + // + // 校验 + // + + + +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P03TubePreProcesPosCalibrationPage.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P03TubePreProcesPosCalibrationPage.java new file mode 100644 index 0000000..158c04d --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P03TubePreProcesPosCalibrationPage.java @@ -0,0 +1,100 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + +import a8k.app.a8ktype.param.tubepreprocess.TubePreProcessGripperPos; +import a8k.app.a8ktype.param.tubepreprocess.TubePreProcessTubeClamp; +import a8k.app.a8ktype.param.tubepreprocess.TubePreProcessYPos; +import a8k.app.a8ktype.param.tubepreprocess.TubePreProcessZAxisPos; +import a8k.app.service.param.TubePreProcesPosParamMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P03TubePreProcesPosCalibrationPage { + @Resource + TubePreProcesPosParamMgr posMgr; + + public void setGripperServoOpenPos(Integer pos) { + posMgr.setParam(TubePreProcessGripperPos.GripperServoOpenPos, pos); + } + + public void setGripperServoTakeCapPos(Integer pos) { + posMgr.setParam(TubePreProcessGripperPos.GripperServoTakeCapPos, pos); + } + + public void setGripperRedundancyHeight(Integer pos) { + posMgr.setParam(TubePreProcessGripperPos.GripperRedundancyHeight, pos); + } + + public void setShakeClampMotorClampPos(Integer pos) { + posMgr.setParam(TubePreProcessTubeClamp.ShakeClampMotorClampPos, pos); + } + + public void setShakeClampMotorReleasePos(Integer pos) { + posMgr.setParam(TubePreProcessTubeClamp.ShakeClampMotorReleasePos, pos); + } + + public void setYServoTakeTubePos(Integer pos) { + posMgr.setParam(TubePreProcessYPos.YServoTakeTubePos, pos); + } + + public void setYServoShakePos(Integer pos) { + posMgr.setParam(TubePreProcessYPos.YServoShakePos, pos); + } + + public void setZMotorTakeHTubePos(Integer pos) { + posMgr.setParam(TubePreProcessZAxisPos.ZMotorTakeHTubePos, pos); + } + + public void setZMotorTakeSTubePos(Integer pos) { + posMgr.setParam(TubePreProcessZAxisPos.ZMotorTakeSTubePos, pos); + } + + public void setZMotorShakeTubePos(Integer pos) { + posMgr.setParam(TubePreProcessZAxisPos.ZMotorShakeTubePos, pos); + } + + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("抓手"); + page.addFunction("设置张开位置", this::setGripperServoOpenPos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessGripperPos.GripperServoOpenPos, Integer.class)); + page.addFunction("设置取试管位置", this::setGripperServoTakeCapPos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessGripperPos.GripperServoTakeCapPos, Integer.class)); + page.addFunction("设置冗余高度", this::setGripperRedundancyHeight) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessGripperPos.GripperRedundancyHeight, Integer.class)); + + page.newGroup("摇匀试管夹"); + page.addFunction("设置夹紧位", this::setShakeClampMotorClampPos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessTubeClamp.ShakeClampMotorClampPos, Integer.class)); + page.addFunction("设置释放位", this::setShakeClampMotorReleasePos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessTubeClamp.ShakeClampMotorReleasePos, Integer.class)); + + page.newGroup("Y轴舵机"); + page.addFunction("设置取试管位置", this::setYServoTakeTubePos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessYPos.YServoTakeTubePos, Integer.class)); + page.addFunction("设置摇匀位置", this::setYServoShakePos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessYPos.YServoShakePos, Integer.class)); + + page.newGroup("Z轴"); + page.addFunction("设置取高试管位置", this::setZMotorTakeHTubePos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessZAxisPos.ZMotorTakeHTubePos, Integer.class)); + page.addFunction("设置取低试管位置", this::setZMotorTakeSTubePos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessZAxisPos.ZMotorTakeSTubePos, Integer.class)); + page.addFunction("设置摇匀放置位置", this::setZMotorShakeTubePos) + .setParamVal("pos", () -> posMgr.getParam(TubePreProcessZAxisPos.ZMotorShakeTubePos, Integer.class)); + + extApiPageMgr.addPage(page); + } + +} + + diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P04ReactionPlatesTransmitControlerCalibrationPage.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P04ReactionPlatesTransmitControlerCalibrationPage.java new file mode 100644 index 0000000..ac97872 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P04ReactionPlatesTransmitControlerCalibrationPage.java @@ -0,0 +1,108 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + +import a8k.app.a8ktype.param.optpos.OptModuleParam; +import a8k.app.service.param.OptModuleParamsMgr; +import a8k.app.service.param.PlatesBoxPosParamMgr; +import a8k.app.service.param.TurntablePosParamMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class P04ReactionPlatesTransmitControlerCalibrationPage { + @Resource + OptModuleParamsMgr optModuleParamsMgr; + @Resource + TurntablePosParamMgr turntablePosParamMgr; + @Resource + PlatesBoxPosParamMgr platesBoxPosParamMgr; + + // + // 孵育盘校准 + // + + public void TurntablePosMgr_setPosSpacing(Integer posSpacing) { + turntablePosParamMgr.setPosSpacing(posSpacing); + } + + + public void TurntablePosMgr_setPushPos0(Integer pos) { + turntablePosParamMgr.setPushPos0(pos); + } + + + public void TurntablePosMgr_setPullPos0(Integer pos) { + turntablePosParamMgr.setPullPos0(pos); + } + + + public void TurntablePosMgr_setDropLiquidPos0(Integer pos) { + turntablePosParamMgr.setDropLiquidPos0(pos); + } + + + public void PlatesBoxPosMgr_setCh0YPos(Integer pos) { + platesBoxPosParamMgr.setCh0YPos(pos); + } + + + public void PlatesBoxPosMgr_setYSpacing(Double spacing) { + platesBoxPosParamMgr.setYSpacing(spacing); + } + + + public void PlatesBoxPosMgr_setPushEndXPos(Integer pos) { + platesBoxPosParamMgr.setPushEndXPos(pos); + } + + public void OptModulePosMgr_setPullerTargetPos(Integer pos) { + optModuleParamsMgr.setOptParam(OptModuleParam.PullerTargetPos, pos); + } + + + public void OptModulePosMgr_setOptScanerDropPos(Integer pos) { + optModuleParamsMgr.setOptParam(OptModuleParam.OptScanerDropPos, pos); + } + + + public void OptModulePosMgr_setOptScanerScandbyPos(Integer pos) { + optModuleParamsMgr.setOptParam(OptModuleParam.OptScanerScandbyPos, pos); + } + + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("孵育盘"); + page.addFunction("设置孵育盘间距", this::TurntablePosMgr_setPosSpacing) + .setParamVal("posSpacing", () -> turntablePosParamMgr.getPosSpacing()); + page.addFunction("设置孵育盘-仓0-入口位", this::TurntablePosMgr_setPushPos0) + .setParamVal("pos", () -> turntablePosParamMgr.getPushPos0()); + page.addFunction("设置孵育盘-仓0-出口位", this::TurntablePosMgr_setPullPos0) + .setParamVal("pos", () -> turntablePosParamMgr.getPullPos0()); + page.addFunction("设置孵育盘-仓0-放液位", this::TurntablePosMgr_setDropLiquidPos0) + .setParamVal("pos", () -> turntablePosParamMgr.getDropLiquidPos0()); + + page.newGroup("板夹仓"); + page.addFunction("设置板夹仓-仓0-Y轴坐标", this::PlatesBoxPosMgr_setCh0YPos) + .setParamVal("pos", () -> platesBoxPosParamMgr.getCh0YPos()); + page.addFunction("设置板夹仓-仓5-Y轴坐标", this::PlatesBoxPosMgr_setYSpacing) + .setParamVal("spacing", () -> platesBoxPosParamMgr.getYSpacing()); + page.addFunction("设置板夹仓-推板-到位坐标", this::PlatesBoxPosMgr_setPushEndXPos) + .setParamVal("pos", () -> platesBoxPosParamMgr.getPushEndXPos()); + + page.newGroup("光学模组基础坐标.校准"); + page.addFunction("设置<拉板>目标位置", this::OptModulePosMgr_setPullerTargetPos) + .setParamVal("pos", () -> optModuleParamsMgr.getPullerTargetPos()); + page.addFunction("设置<光学扫描器>丢板坐标", this::OptModulePosMgr_setOptScanerDropPos) + .setParamVal("pos", () -> optModuleParamsMgr.getOptScanerDropPos()); + page.addFunction("设置<光学扫描器>扫描待机位", this::OptModulePosMgr_setOptScanerScandbyPos) + .setParamVal("pos", () -> optModuleParamsMgr.getOptScanerScandbyPos()); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P20HbotTipPosCalibrationPage.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P20HbotTipPosCalibrationPage.java new file mode 100644 index 0000000..2237b39 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P20HbotTipPosCalibrationPage.java @@ -0,0 +1,100 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + + +import a8k.app.a8ktype.device.Pos3d; +import a8k.app.a8ktype.device.TipGroup; +import a8k.app.a8ktype.type.TipPosConfig; +import a8k.app.service.param.HbotFixedPosParamMgr; +import a8k.app.service.param.HbotTipPosMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P20HbotTipPosCalibrationPage { + @Resource + HbotTipPosMgr hbotTipPosMgr; + + @Resource + HbotFixedPosParamMgr hbotFixedPosParamMgr; + + + public void setTipPos000(TipGroup tipGroup, Integer x, Integer y, Integer z) { + var tip000 = new Pos3d(x, y, z); + TipPosConfig poscfg = hbotTipPosMgr.getTipPosCfg(tipGroup); + poscfg.tip000 = tip000; + hbotTipPosMgr.setTipPosCfg(tipGroup, poscfg); + } + + public void setTipG1Pos000(Integer x, Integer y, Integer z) { + setTipPos000(TipGroup.TipG1, x, y, z); + } + + public void setTipG2Pos000(Integer x, Integer y, Integer z) { + setTipPos000(TipGroup.TipG2, x, y, z); + } + + public void setTipG3Pos000(Integer x, Integer y, Integer z) { + setTipPos000(TipGroup.TipG3, x, y, z); + } + + public void setSpacingXAndSpacingY(Double spacingX, Double spacingY) { + for (var tipgroup : TipGroup.values()) { + var cfg = hbotTipPosMgr.getTipPosCfg(tipgroup); + cfg.spaceingX = spacingX; + cfg.spaceingY = spacingY; + hbotTipPosMgr.setTipPosCfg(tipgroup, cfg); + } + } + + public void setDropPos(Integer x, Integer y, Integer z) { + var dropPos = new Pos3d(x, y, z); + hbotTipPosMgr.setDropTipPos(dropPos); + } + + public void setDropLiquidPos(Integer x, Integer y, Integer z) { + Pos3d pos = new Pos3d(x, y, z); + hbotFixedPosParamMgr.setDropLiquidPos(pos); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("设置"); + page.addFunction("设置TipG1-000坐标", this::setTipG1Pos000) + .setParamVal("x", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).tip000.x) + .setParamVal("y", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).tip000.y) + .setParamVal("z", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).tip000.z); + + page.addFunction("设置TipG2-000坐标", this::setTipG2Pos000) + .setParamVal("x", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG2).tip000.x) + .setParamVal("y", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG2).tip000.y) + .setParamVal("z", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG2).tip000.z); + + page.addFunction("设置TipG3-000坐标", this::setTipG3Pos000) + .setParamVal("x", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG3).tip000.x) + .setParamVal("y", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG3).tip000.y) + .setParamVal("z", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG3).tip000.z); + + page.addFunction("设置Tip间距", this::setSpacingXAndSpacingY) + .setParamVal("spacingX", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).spaceingX) + .setParamVal("spacingY", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).spaceingY); + page.addFunction("设置Tip丢弃位置", this::setDropPos) + .setParamVal("x", () -> hbotTipPosMgr.getDropTipPos().x) + .setParamVal("y", () -> hbotTipPosMgr.getDropTipPos().y) + .setParamVal("z", () -> hbotTipPosMgr.getDropTipPos().z); + page.addFunction("设置滴液位", this::setDropLiquidPos) + .setParamVal("x", () -> hbotFixedPosParamMgr.getDropLiquidPos().x) + .setParamVal("y", () -> hbotFixedPosParamMgr.getDropLiquidPos().y) + .setParamVal("z", () -> hbotFixedPosParamMgr.getDropLiquidPos().z); + extApiPageMgr.addPage(page); + } + +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P21HbotLittleBSPosCalibrationPage.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P21HbotLittleBSPosCalibrationPage.java new file mode 100644 index 0000000..6098241 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P21HbotLittleBSPosCalibrationPage.java @@ -0,0 +1,109 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + +import a8k.app.a8ktype.device.Pos2d; +import a8k.app.a8ktype.param.hbotpos.HbotLittleBSPos; +import a8k.app.service.param.HbotLittleBSPosMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P21HbotLittleBSPosCalibrationPage { + @Resource + HbotLittleBSPosMgr hbotLittleBSPosMgr; + + @Resource + ExtApiPageMgr extApiPageMgr; + + + public void setGroupDxAndDy(Double dx, Double dy) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.GroupDX, dx); + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.GroupDY, dy); + } + + public void setLittleBufferG0P00(Integer x, Integer y) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBufferGroup0_000Pos, new Pos2d(x, y)); + } + + public void setProbeSubstanceG0P00(Integer x, Integer y) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstanceGroup0_000Pos, new Pos2d(x, y)); + } + + public void setLittleBufferDXDY(Double dx, Double dy) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBufferDX, dx); + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBufferDY, dy); + } + + public void setProbeSubstanceDXDY(Double dx, Double dy) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstanceDX, dx); + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstanceDY, dy); + } + + public void setLittleBSPierceXYAppendDistance(Double distance) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBSPierceXYAppendDistance, distance); + } + + public void setProbeSubstancePierceXYAppendDistance(Double distance) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstancePierceXYAppendDistance, distance); + + } + + public void setLittleBSPierceZPos(Integer z) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBSPierceZPos, z); + } + + public void setLittleBSSampleZPos(Integer z) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBSSampleZPos, z); + } + + public void setProbeSubstancePierceZPos(Integer z) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstancePierceZPos, z); + } + + public void setProbeSubstanceSampleZPos(Integer z) { + hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstanceSampleZPos, z); + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("公共"); + page.addFunction("设置耗材组之间间距", this::setGroupDxAndDy). + setParamVal("dx", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.GroupDX, Double.class)). + setParamVal("dy", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.GroupDY, Double.class)); + + page.newGroup("小瓶缓冲液"); + page.addFunction("设置G0P0坐标", this::setLittleBufferG0P00). + setParamVal("x", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBufferGroup0_000Pos, Pos2d.class).x). + setParamVal("y", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBufferGroup0_000Pos, Pos2d.class).y); + page.addFunction("设置X间距Y间距", this::setLittleBufferDXDY). + setParamVal("dx", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBufferDX, Double.class)). + setParamVal("dy", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBufferDY, Double.class)); + page.addFunction("设置刺破XY附加距离", this::setLittleBSPierceXYAppendDistance). + setParamVal("distance", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBSPierceXYAppendDistance, Double.class)); + page.addFunction("设置取样Z坐标", this::setLittleBSSampleZPos). + setParamVal("z", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBSSampleZPos, Integer.class)); + page.addFunction("设置刺破Z坐标", this::setLittleBSPierceZPos). + setParamVal("z", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBSPierceZPos, Integer.class)); + + page.newGroup("探测物质"); + page.addFunction("设置G0P0坐标", this::setProbeSubstanceG0P00). + setParamVal("x", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceGroup0_000Pos, Pos2d.class).x). + setParamVal("y", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceGroup0_000Pos, Pos2d.class).y); + page.addFunction("设置X间距Y间距", this::setProbeSubstanceDXDY). + setParamVal("dx", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceDX, Double.class)). + setParamVal("dy", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceDY, Double.class)); + page.addFunction("设置刺破XY附加距离", this::setProbeSubstancePierceXYAppendDistance). + setParamVal("distance", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstancePierceXYAppendDistance, Double.class)); + page.addFunction("设置取样Z坐标", this::setProbeSubstanceSampleZPos). + setParamVal("z", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceSampleZPos, Integer.class)); + page.addFunction("设置刺破Z坐标", this::setProbeSubstancePierceZPos). + setParamVal("z", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstancePierceZPos, Integer.class)); + + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P23HbotLargeBottleBSPosCalibrationPage.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P23HbotLargeBottleBSPosCalibrationPage.java new file mode 100644 index 0000000..6a83233 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P23HbotLargeBottleBSPosCalibrationPage.java @@ -0,0 +1,62 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + +import a8k.app.a8ktype.device.Pos2d; +import a8k.app.a8ktype.param.hbotpos.HbotLargeBottleBSPos; +import a8k.app.service.param.HbotLargeBottleBSPosMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P23HbotLargeBottleBSPosCalibrationPage { + @Resource + HbotLargeBottleBSPosMgr hbotLargeBottleBSPosMgr; + + public void setConsumable0Pos(Integer x, Integer y) { + hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBuffer_0Pos, new Pos2d(x, y)); + } + + public void setConsumableDX(Double dx) { + hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBuffer_DX, dx); + } + + public void setConsumableDY(Double dy) { + hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBuffer_DY, dy); + } + + public void setLLDStartZAxisPos(Integer z) { + hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBottleBufferLLDStartZAxisPos, Double.valueOf(z)); + } + + public void setBottomZAxisPos(Integer z) { + hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBottleBufferBottomZAxisPos, Double.valueOf(z)); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("坐标设置"); + page.addFunction("设置0号耗材坐标", this::setConsumable0Pos) + .setParamVal("x", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBuffer_0Pos, Pos2d.class).x) + .setParamVal("y", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBuffer_0Pos, Pos2d.class).y); + page.addFunction("设置LLD开始Z轴位置", this::setLLDStartZAxisPos) + .setParamVal("z", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBottleBufferLLDStartZAxisPos, Double.class).intValue()); + page.addFunction("设置瓶底Z轴位置", this::setBottomZAxisPos) + .setParamVal("z", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBottleBufferBottomZAxisPos, Double.class).intValue()); + + page.newGroup("常量设置"); + page.addFunction("设置Dx", this::setConsumableDX) + .setParamVal("dx", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBuffer_DX, Double.class)); + page.addFunction("设置Dy", this::setConsumableDY) + .setParamVal("dy", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBuffer_DY, Double.class)); + + extApiPageMgr.addPage(page); + } + +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java new file mode 100644 index 0000000..eb04373 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java @@ -0,0 +1,51 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + +import a8k.app.a8ktype.device.Pos2d; +import a8k.app.service.param.Hbot2DCodeScanParamMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P24Hbot2DCodeScanPosCalibrationPage { + @Resource + Hbot2DCodeScanParamMgr hbot2DCodeScanParamMgr; + + + public void setPBScanPosX(Integer x, Integer y) { + hbot2DCodeScanParamMgr.setPBScanPosX(new Pos2d(x, y)); + } + + public void setLittBSX(Integer x, Integer y) { + hbot2DCodeScanParamMgr.setLittBSX(new Pos2d(x, y)); + } + + public void setLarBSX(Integer x, Integer y) { + hbot2DCodeScanParamMgr.setLarBSX(new Pos2d(x, y)); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup(""); + page.addFunction("设置PB扫描位置", this::setPBScanPosX) + .setParamVal("x", () -> hbot2DCodeScanParamMgr.getPBScanPosX(0).x) + .setParamVal("y", () -> hbot2DCodeScanParamMgr.getPBScanPosX(0).y); + page.addFunction("设置小瓶缓冲液0位置", this::setLittBSX) + .setParamVal("x", () -> hbot2DCodeScanParamMgr.getLittBSX(0).x) + .setParamVal("y", () -> hbot2DCodeScanParamMgr.getLittBSX(0).y); + page.addFunction("设大瓶缓冲液0位置", this::setLarBSX) + .setParamVal("x", () -> hbot2DCodeScanParamMgr.getLarBSX(0).x) + .setParamVal("y", () -> hbot2DCodeScanParamMgr.getLarBSX(0).y); + + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P25HbotSamplePosCalibrationPage.java b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P25HbotSamplePosCalibrationPage.java new file mode 100644 index 0000000..cc24be4 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/extsetting/pos_calibration/P25HbotSamplePosCalibrationPage.java @@ -0,0 +1,172 @@ +package a8k.extui.newpage.extsetting.pos_calibration; + +import a8k.app.a8ktype.device.Pos3d; +import a8k.app.a8ktype.param.hbotpos.HbotSamplePos; +import a8k.app.service.param.HbotSamplePosParamMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class P25HbotSamplePosCalibrationPage { + @Resource + HbotSamplePosParamMgr hbotSamplePosParamMgr; + + public void setEmergencyTubeSamplePos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.EmergencyTubeSamplePos, new Pos3d(x, y, z)); + } + + public void setEmergencyTubeSampleEndPos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.EmergencyTubeSampleEndPos, new Pos3d(x, y, z)); + } + + public void setBloodHTubeSamplePos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.BloodHTubeSamplePos, new Pos3d(x, y, z)); + } + + public void setBloodHTubeSampleEndPos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.BloodHTubeSampleEndPos, new Pos3d(x, y, z)); + } + + public void setBloodSTubeSamplePos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.BloodSTubeSamplePos, new Pos3d(x, y, z)); + } + + public void setBloodSTubeSampleEndPos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.BloodSTubeSampleEndPos, new Pos3d(x, y, z)); + } + + public void setMiniTubeSamplePos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.MiniTubeSamplePos, new Pos3d(x, y, z)); + } + + public void setMinitubeSampleEndPos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.MinitubeSampleEndPos, new Pos3d(x, y, z)); + } + + public void setMiniBloodSamplePos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.MiniBloodSamplePos, new Pos3d(x, y, z)); + } + + public void setMiniBloodSampleEndPos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.MiniBloodSampleEndPos, new Pos3d(x, y, z)); + } + + public void setBulltube1P5SamplePos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.Bulltube1P5SamplePos, new Pos3d(x, y, z)); + } + + public void setBulltube1P5SampleEndPos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.Bulltube1P5SampleEndPos, new Pos3d(x, y, z)); + } + + public void setBulltube0P5SamplePos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.Bulltube0P5SamplePos, new Pos3d(x, y, z)); + } + + public void setBulltube0P5SampleEndPos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.Bulltube0P5SampleEndPos, new Pos3d(x, y, z)); + } + + public void setStoolTestTubeSamplePos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.StoolTestTubeSamplePos, new Pos3d(x, y, z)); + } + + public void setStoolTestTubeSampleEndPos(Integer x, Integer y, Integer z) { + hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.StoolTestTubeSampleEndPos, new Pos3d(x, y, z)); + } + + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + + page.newGroup("急诊位"); + page.addFunction("取样位置", this::setEmergencyTubeSamplePos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSamplePos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSamplePos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSamplePos).z); + page.addFunction("取样结束位置", this::setEmergencyTubeSampleEndPos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSampleEndPos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSampleEndPos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSampleEndPos).z); + + page.newGroup("全血高试管"); + page.addFunction("取样位置", this::setBloodHTubeSamplePos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSamplePos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSamplePos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSamplePos).z); + page.addFunction("取样结束位置", this::setBloodHTubeSampleEndPos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSampleEndPos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSampleEndPos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSampleEndPos).z); + + page.newGroup("全血低试管"); + page.addFunction("取样位置", this::setBloodSTubeSamplePos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSamplePos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSamplePos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSamplePos).z); + page.addFunction("取样结束位置", this::setBloodSTubeSampleEndPos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSampleEndPos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSampleEndPos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSampleEndPos).z); + + page.newGroup("迷你试管"); + page.addFunction("取样位置", this::setMiniTubeSamplePos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniTubeSamplePos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniTubeSamplePos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniTubeSamplePos).z); + page.addFunction("取样结束位置", this::setMinitubeSampleEndPos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MinitubeSampleEndPos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MinitubeSampleEndPos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MinitubeSampleEndPos).z); + + page.newGroup("阳普管"); + page.addFunction("取样位置", this::setMiniBloodSamplePos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSamplePos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSamplePos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSamplePos).z); + page.addFunction("取样结束位置", this::setMiniBloodSampleEndPos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSampleEndPos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSampleEndPos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSampleEndPos).z); + + page.newGroup("子弹头试管1.5mL"); + page.addFunction("取样位置", this::setBulltube1P5SamplePos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SamplePos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SamplePos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SamplePos).z); + page.addFunction("取样结束位置", this::setBulltube1P5SampleEndPos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SampleEndPos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SampleEndPos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SampleEndPos).z); + + page.newGroup("子弹头试管0.5mL"); + page.addFunction("取样位置", this::setBulltube0P5SamplePos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SamplePos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SamplePos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SamplePos).z); + page.addFunction("取样结束位置", this::setBulltube0P5SampleEndPos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SampleEndPos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SampleEndPos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SampleEndPos).z); + + page.newGroup("粪便试管"); + page.addFunction("取样位置", this::setStoolTestTubeSamplePos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSamplePos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSamplePos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSamplePos).z); + page.addFunction("取样结束位置", this::setStoolTestTubeSampleEndPos) + .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSampleEndPos).x) + .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSampleEndPos).y) + .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSampleEndPos).z); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/init/DeviceInitPage.java b/src/main/java/a8k/extui/newpage/init/DeviceInitPage.java new file mode 100644 index 0000000..0443fc2 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/init/DeviceInitPage.java @@ -0,0 +1,123 @@ +package a8k.extui.newpage.init; + +import a8k.app.a8ktype.DeviceRunMode; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.others.checkpoint.CheckResult; +import a8k.app.service.background.BackgroudProcessCtrlService; +import a8k.app.service.lowerctrl.DeviceInitCtrlService; +import a8k.app.service.statemgr.GStateMgrService; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class DeviceInitPage { + + @Resource + GStateMgrService gstate; + + + @Resource + DeviceInitCtrlService deviceInitCtrlService; + + + @ExtApiStatu(name = "", group = "设备工作模式", order = 1) + public String getDeviceRunMode() { + if (gstate.getDeviceRunMode() == DeviceRunMode.RealMode) { + return "真实模式"; + } else if (gstate.getDeviceRunMode() == DeviceRunMode.VirtualMode) { + return "虚拟模式"; + } else if (gstate.getDeviceRunMode() == DeviceRunMode.RunOnlyMode) { + return "设备空转模式"; + } else if (gstate.getDeviceRunMode() == DeviceRunMode.VirtualStateGenerateMode) { + return "虚拟状态生成模式"; + } + return gstate.getDeviceRunMode().name(); + } + + + // + public void setInRealMode() { + gstate.setDeviceRunMode(DeviceRunMode.RealMode); + } + + public void setInVirtualMode() { + gstate.setDeviceRunMode(DeviceRunMode.VirtualMode); + } + + public void setInRunOnlyMode() { + gstate.setDeviceRunMode(DeviceRunMode.RunOnlyMode); + } + + public void setInVirtualStateMode() { + gstate.setDeviceRunMode(DeviceRunMode.VirtualStateGenerateMode); + } + + + public String moveAllStepMotorToZero() throws AppException { + deviceInitCtrlService.moveAllMotorToZero(); + return "SUCCESS"; + } + + public String disableAll() throws AppException { + deviceInitCtrlService.disableAllMotor(); + return "已失能所有电机"; + } + + public String enableAll() throws AppException { + deviceInitCtrlService.enableAllMotor(); + return "已使能所有电机"; + } + + + @Resource + BackgroudProcessCtrlService backgroudProcessCtrlService; + + public void startTemperatureControl() throws AppException { + backgroudProcessCtrlService.startProcess(); + } + + public void stopTemperatureControl() throws AppException { + backgroudProcessCtrlService.stopProcess(); + } + + public List initializeDevice() throws AppException { + var ret = deviceInitCtrlService.initDevice(); + List errorList = new java.util.ArrayList<>(); + for (var checkResult : ret) { + if (!checkResult.pass) { + errorList.add(checkResult); + } + } + return errorList; + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.newGroup("设备工作模式"); + page.addFunction("设置为真实模式", this::setInRealMode); + page.addFunction("设置为虚拟模式", this::setInVirtualMode); + page.addFunction("设置为设备空转模式", this::setInRunOnlyMode); + page.addFunction("设置为虚拟状态生成模式", this::setInVirtualStateMode); + + page.newGroup("设备初始化"); + page.addFunction("初始化设备", this::initializeDevice); + page.addFunction("开始控温", this::startTemperatureControl); + page.addFunction("停止控温", this::stopTemperatureControl); + + page.newGroup("电机初始化"); + page.addFunction("电机归零", this::moveAllStepMotorToZero); + page.addFunction("使能所有电机", this::enableAll); + page.addFunction("失能所有电机", this::disableAll); + + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/test/codetest/OptFormulaTestPage.java b/src/main/java/a8k/extui/newpage/test/codetest/OptFormulaTestPage.java new file mode 100644 index 0000000..cfaa242 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/test/codetest/OptFormulaTestPage.java @@ -0,0 +1,125 @@ +package a8k.extui.newpage.test.codetest; + + +import a8k.app.a8kproj.A8kReactionResultComputer; +import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult; +import a8k.app.a8ktype.device.BloodType; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.state.SampleInfo; +import a8k.app.a8ktype.type.ReactionResult; +import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.app.service.data.ProjIdCardInfoMgrService; +import a8k.app.service.data.ProjInfoMgrService; +import a8k.app.utils.ProjInfo; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class OptFormulaTestPage { + + @Resource + ProjInfoMgrService projInfoMgrService; + @Resource + ProjIdCardInfoMgrService projIdCardInfoMgrService; + + @FunctionalInterface + public interface TEST { + Boolean test(); + } + + OptAlgoAnalysResult optAlgoAnalysResult = new OptAlgoAnalysResult(); + + + public void setR(Double val) { + optAlgoAnalysResult.pdR = val; + } + + public void setAR(Double val) { + optAlgoAnalysResult.pdAR = val; + } + + public void setATR(Double val) { + optAlgoAnalysResult.pdATR = val; + } + + public void setRFR(Double val) { + optAlgoAnalysResult.pdRFR = val; + } + + public void setT4R(Double val) { + optAlgoAnalysResult.pdT4R = val; + } + + public void setT4T3R(Double val) { + optAlgoAnalysResult.pdT4T3R = val; + } + + public ProjInfo getProjInfo() throws AppException { + ProjInfo projInfoContext = new ProjInfo(); + var extProjInfo = projIdCardInfoMgrService.getMountedProjInfoCard(); + if (extProjInfo == null) { + throw AppException.of(A8kEcode.APPE_A8K_ID_CARD_NOT_MOUNTED); + } + + projInfoContext.ext = extProjInfo; + projInfoContext.buildIn = projInfoMgrService.getProjBuildInInfo(extProjInfo.projId); + return projInfoContext; + } + + + public ReactionResult computeResult(BloodType bloodType, Integer optIndex) throws AppException { + SampleInfo sampleInfo = new SampleInfo(); + sampleInfo.sampleId = "TEST_SAMPLE"; + sampleInfo.sampleBarcode = "TEST_BARCODE"; + sampleInfo.bloodType = bloodType; + + ProjInfo projInfoContext = getProjInfo(); + + if (projInfoContext.buildIn.optcfg.size() <= optIndex) { + throw AppException.of(A8kEcode.CODEERROR, "当前项目没有第%s个子项目", optIndex); + } + return A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, optIndex, optAlgoAnalysResult); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + + + @PostConstruct + void init() { + optAlgoAnalysResult.pdR = 0.0; + optAlgoAnalysResult.pdAR = 0.0; + optAlgoAnalysResult.pdATR = 0.0; + optAlgoAnalysResult.pdRFR = 0.0; + optAlgoAnalysResult.pdT4R = 0.0; + optAlgoAnalysResult.pdT4T3R = 0.0; + + + ExtUIPageCfg cfg = extApiPageMgr.newPage(this); + + + cfg.newGroup("项目信息"); + cfg.addFunction("打印项目信息", this::getProjInfo); + + cfg.newGroup("设置参数"); + cfg.addFunction("设置R", this::setR).setParamVal("val", () -> optAlgoAnalysResult.pdR); + cfg.addFunction("设置AR", this::setAR).setParamVal("val", () -> optAlgoAnalysResult.pdAR); + cfg.addFunction("设置ATR", this::setATR).setParamVal("val", () -> optAlgoAnalysResult.pdATR); + cfg.addFunction("设置RFR", this::setRFR).setParamVal("val", () -> optAlgoAnalysResult.pdRFR); + cfg.addFunction("设置T4R", this::setT4R).setParamVal("val", () -> optAlgoAnalysResult.pdT4R); + cfg.addFunction("设置T4T3R", this::setT4T3R).setParamVal("val", () -> optAlgoAnalysResult.pdT4T3R); + + cfg.newGroup("计算"); + cfg.addFunction("计算结果", this::computeResult); + extApiPageMgr.addPage(cfg); + + + } + +} diff --git a/src/main/java/a8k/extui/newpage/test/codetest/OptFormulaTestPageV2.java b/src/main/java/a8k/extui/newpage/test/codetest/OptFormulaTestPageV2.java new file mode 100644 index 0000000..45ec3f2 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/test/codetest/OptFormulaTestPageV2.java @@ -0,0 +1,174 @@ +package a8k.extui.newpage.test.codetest; + + +import a8k.app.a8kproj.A8kReactionResultComputer; +import a8k.app.a8kproj.optalgo.type.A8kOptPeaks; +import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult; +import a8k.app.a8kproj.optanalyzer.PeakNameAssigner; +import a8k.app.a8ktype.device.BloodType; +import a8k.app.a8ktype.exception.AppException; +import a8k.app.a8ktype.opttype.PeakName; +import a8k.app.a8ktype.state.SampleInfo; +import a8k.app.a8ktype.type.ReactionResult; +import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; +import a8k.app.service.data.ProjIdCardInfoMgrService; +import a8k.app.service.data.ProjInfoMgrService; +import a8k.app.utils.ProjInfo; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import a8k.extui.type.ExtUIPageCfg; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +@Slf4j +public class OptFormulaTestPageV2 { + + @Resource + ProjInfoMgrService projInfoMgrService; + @Resource + ProjIdCardInfoMgrService projIdCardInfoMgrService; + + @FunctionalInterface + public interface TEST { + Boolean test(); + } + + + Double T4Area = 0.0; + Double RArea = 0.0; + Double HArea = 0.0; + Double TArea = 0.0; + Double CArea = 0.0; + + + @ExtApiStatu(name = "", group = "INPUT", order = 1) + synchronized public Map getArea() { + return Map.of("T4", T4Area, "R", RArea, "H", HArea, "T", TArea, "C", CArea); + } + + @ExtApiStatu(name = "", group = "光学中间结果1", order = 2) + synchronized public Map getOptAlgoAnalysResult() { + if (optAlgoAnalysResult == null) { + return Map.of(); + } + + Map result = new HashMap<>(); + + if (optAlgoAnalysResult.pdR != null) + result.put("R", optAlgoAnalysResult.pdR); + if (optAlgoAnalysResult.pdAR != null) + result.put("AR", optAlgoAnalysResult.pdAR); + if (optAlgoAnalysResult.pdATR != null) + result.put("ATR", optAlgoAnalysResult.pdATR); + if (optAlgoAnalysResult.pdRFR != null) + result.put("RFR", optAlgoAnalysResult.pdRFR); + if (optAlgoAnalysResult.pdT4R != null) + result.put("T4R", optAlgoAnalysResult.pdT4R); + if (optAlgoAnalysResult.pdT4T3R != null) + result.put("T4T3R", optAlgoAnalysResult.pdT4T3R); + + return result; + } + + @ExtApiStatu(name = "", group = "光学中间结果2", order = 3, minWidth = "100%") + synchronized public String getComputedMidResult() { + return A8kReactionResultComputer.getComputeContext(); + } + + + + OptAlgoAnalysResult optAlgoAnalysResult; + + + synchronized public void setT4Area(Double val) { + T4Area = val; + } + + synchronized public void setRArea(Double val) { + RArea = val; + } + + synchronized public void setHArea(Double val) { + HArea = val; + } + + synchronized public void setTArea(Double val) { + TArea = val; + } + + synchronized public void setCArea(Double val) { + CArea = val; + } + + + public ProjInfo getProjInfo() throws AppException { + ProjInfo projInfoContext = new ProjInfo(); + var extProjInfo = projIdCardInfoMgrService.getMountedProjInfoCard(); + if (extProjInfo == null) { + throw AppException.of(A8kEcode.APPE_A8K_ID_CARD_NOT_MOUNTED); + } + + projInfoContext.ext = extProjInfo; + projInfoContext.buildIn = projInfoMgrService.getProjBuildInInfo(extProjInfo.projId); + return projInfoContext; + } + + + public ReactionResult computeResult(BloodType bloodType, Integer optIndex) throws AppException { + SampleInfo sampleInfo = new SampleInfo(); + sampleInfo.sampleId = "TEST_SAMPLE"; + sampleInfo.sampleBarcode = "TEST_BARCODE"; + sampleInfo.bloodType = bloodType; + ProjInfo projInfoContext = getProjInfo(); + + A8kOptPeaks peaks = new A8kOptPeaks(); + PeakNameAssigner.assignPeakName(projInfoContext.buildIn.projId, projInfoContext.buildIn.optcfg.get(optIndex).peakNameRefNum, peaks); + + peaks.trySetPeakArea(PeakName.T4, T4Area); + peaks.trySetPeakArea(PeakName.R, RArea); + peaks.trySetPeakArea(PeakName.H, HArea); + peaks.trySetPeakArea(PeakName.T, TArea); + peaks.trySetPeakArea(PeakName.C, CArea); + + + optAlgoAnalysResult = OptAlgoAnalysResult.build(new Integer[0], new double[0], peaks); + if (projInfoContext.buildIn.optcfg.size() <= optIndex) { + throw AppException.of(A8kEcode.CODEERROR, "当前项目没有第%s个子项目", optIndex); + } + return A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, optIndex, optAlgoAnalysResult); + } + + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + void init() { + + ExtUIPageCfg cfg = extApiPageMgr.newPage(this); + + + cfg.newGroup("项目信息"); + cfg.addFunction("打印项目信息", this::getProjInfo); + + cfg.newGroup("设置参数"); + cfg.addFunction("设置T4面积", this::setT4Area).setParamVal("val", () -> T4Area); + cfg.addFunction("设置R面积", this::setRArea).setParamVal("val", () -> RArea); + cfg.addFunction("设置H面积", this::setHArea).setParamVal("val", () -> HArea); + cfg.addFunction("设置T面积", this::setTArea).setParamVal("val", () -> TArea); + cfg.addFunction("设置C面积", this::setCArea).setParamVal("val", () -> CArea); + + + cfg.newGroup("计算"); + cfg.addFunction("计算结果", this::computeResult); + extApiPageMgr.addPage(cfg); + + + } + +} diff --git a/src/main/java/a8k/extui/newpage/test/driver/LowLevelBoardVersionPreviewPage.java b/src/main/java/a8k/extui/newpage/test/driver/LowLevelBoardVersionPreviewPage.java new file mode 100644 index 0000000..2201d27 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/test/driver/LowLevelBoardVersionPreviewPage.java @@ -0,0 +1,281 @@ +package a8k.extui.newpage.test.driver; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.basedriver.A8kCanBusService; +import a8k.app.hardware.type.a8kcanprotocol.MId; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class LowLevelBoardVersionPreviewPage { + + + @Resource + ExtApiPageMgr extApiPageMgr; + + @Resource + A8kCanBusService canBus; + + public static class VersionInfo { + public Integer moduleId; + public String moduleName; + public Boolean online; + public String moduleType; + public Integer version; + } + + Map versionInfos = new HashMap<>(); + // HbotBoard(10, "机械臂板模块"),// + // HbotM(11, "机械臂XY"),// + // PlatesBoxBoard(20, "板夹仓模块"),// + // PlatesBoxYM(21, "板夹仓移动电机"),// + // PlatesBoxPusherM(22, "板夹仓推杆电机"),// + // PlatesBoxScanner(23, "板夹仓扫码模组"),// + // ShakeModBoard(30, "摇匀模组板"),// + // ShakeModClampingM(31, "试管固定夹爪电机"),// + // ShakeModGripperZM(32, "摇匀升降电机"),// + // ShakeModShakeM(33, "试管摇匀电机"),// + // ShakeModGripperYSV(34, "摇匀前后移动舵机"),// + // ShakeModGripperSV(35, "摇匀试管帽夹爪舵机"),// + // ShakeModTubeScanerClampingSV(36, "试管架扫码夹紧舵机"),// + // ShakeModTubeScanerRotateSV(37, "试管架旋转舵机"),// + // PlatesBoxTCMBoard(40, "反应板夹温度控制板"),// + // PlatesBoxTCM(41, "反应板夹温度控制模块"),// + // WbTubeFanMod(42, "气溶胶风扇"),// + // IncubatorTCMBoard(50, "温度控制"),// + // IncubatorTCM(51, "温度控制"),// + // FeedingModBoard(60, "出入料模块"),// + // FeedingModInfeedM(61, "入料电机"),// + // FeedingModXM(62, "试管架平移电机"),// + // FeedingModOutfeedM(63, "出料电机"),// + // FeedingModScannerMod(64, "试管架扫码器"),// + // IncubatorRotateBoard(70, "孵育盘旋转板"),// + // IncubatorRotateCtrlM(71, "孵育盘旋转"),// + // PipetteModBoard(80, "机械臂Z轴板"),// + // PipetteMod(82, "移液枪"),// + // PipetteModCodeScanner(83, "物料扫码器"),// + // OptModBoard(90, "光学模组板"),// + // OptModScannerM(91, "板卡扫描电机"),// + // OptModPullM(92, "板卡推杆电机"),// + // OptMod(93, "扫描仪"),// + // A8kIdCardReaderBoard(100, "A8K读卡器板"),// + // A8kIdCardReader(101, "A8K读卡器"),// + + @ExtApiStatu(name = "", group = "机械臂板模块", order = 1) + public VersionInfo getHbotBoard() { + return versionInfos.get(MId.HbotBoard); + } + + @ExtApiStatu(name = "", group = "机械臂XY", order = 2) + public VersionInfo getHbotM() { + return versionInfos.get(MId.HbotM); + } + + @ExtApiStatu(name = "", group = "板夹仓模块", order = 3) + public VersionInfo getPlatesBoxBoard() { + return versionInfos.get(MId.PlatesBoxBoard); + } + + @ExtApiStatu(name = "", group = "板夹仓移动电机", order = 4) + public VersionInfo getPlatesBoxYM() { + return versionInfos.get(MId.PlatesBoxYM); + } + + @ExtApiStatu(name = "", group = "板夹仓推杆电机", order = 5) + public VersionInfo getPlatesBoxPusherM() { + return versionInfos.get(MId.PlatesBoxPusherM); + } + + @ExtApiStatu(name = "", group = "板夹仓扫码模组", order = 6) + public VersionInfo getPlatesBoxScanner() { + return versionInfos.get(MId.PlatesBoxScanner); + } + + @ExtApiStatu(name = "", group = "摇匀模组板", order = 7) + public VersionInfo getShakeModBoard() { + return versionInfos.get(MId.ShakeModBoard); + } + + @ExtApiStatu(name = "", group = "试管固定夹爪电机", order = 8) + public VersionInfo getShakeModClampingM() { + return versionInfos.get(MId.ShakeModClampingM); + } + + @ExtApiStatu(name = "", group = "摇匀升降电机", order = 9) + public VersionInfo getShakeModGripperZM() { + return versionInfos.get(MId.ShakeModGripperZM); + } + + @ExtApiStatu(name = "", group = "试管摇匀电机", order = 10) + public VersionInfo getShakeModShakeM() { + return versionInfos.get(MId.ShakeModShakeM); + } + + @ExtApiStatu(name = "", group = "摇匀前后移动舵机", order = 11) + public VersionInfo getShakeModGripperYSV() { + return versionInfos.get(MId.ShakeModGripperYSV); + } + + @ExtApiStatu(name = "", group = "摇匀试管帽夹爪舵机", order = 12) + public VersionInfo getShakeModGripperSV() { + return versionInfos.get(MId.ShakeModGripperSV); + } + + @ExtApiStatu(name = "", group = "试管架扫码夹紧舵机", order = 13) + public VersionInfo getShakeModTubeScanerClampingSV() { + return versionInfos.get(MId.ShakeModTubeScanerClampingSV); + } + + @ExtApiStatu(name = "", group = "试管架旋转舵机", order = 14) + public VersionInfo getShakeModTubeScanerRotateSV() { + return versionInfos.get(MId.ShakeModTubeScanerRotateSV); + } + + @ExtApiStatu(name = "", group = "反应板夹温度控板", order = 15) + public VersionInfo getPlatesBoxTCMBoard() { + return versionInfos.get(MId.PlatesBoxTCMBoard); + } + + @ExtApiStatu(name = "", group = "反应板夹温度控制模块", order = 16) + public VersionInfo getPlatesBoxTCM() { + return versionInfos.get(MId.PlatesBoxTCM); + } + + @ExtApiStatu(name = "", group = "气溶胶风扇", order = 17) + public VersionInfo getWbTubeFanMod() { + return versionInfos.get(MId.WbTubeFanMod); + } + + @ExtApiStatu(name = "", group = "孵育盘温空板", order = 18) + public VersionInfo getIncubatorTCMBoard() { + return versionInfos.get(MId.IncubatorTCMBoard); + } + + @ExtApiStatu(name = "", group = "孵育盘温控模块", order = 19) + public VersionInfo getIncubatorTCM() { + return versionInfos.get(MId.IncubatorTCM); + } + + @ExtApiStatu(name = "", group = "出入料模块", order = 20) + public VersionInfo getFeedingModBoard() { + return versionInfos.get(MId.FeedingModBoard); + } + + @ExtApiStatu(name = "", group = "入料电机", order = 21) + public VersionInfo getFeedingModInfeedM() { + return versionInfos.get(MId.FeedingModInfeedM); + } + + @ExtApiStatu(name = "", group = "试管架平移电机", order = 22) + public VersionInfo getFeedingModXM() { + return versionInfos.get(MId.FeedingModXM); + } + + @ExtApiStatu(name = "", group = "出料电机", order = 23) + public VersionInfo getFeedingModOutfeedM() { + return versionInfos.get(MId.FeedingModOutfeedM); + } + + @ExtApiStatu(name = "", group = "试管架扫码器", order = 24) + public VersionInfo getFeedingModScannerMod() { + return versionInfos.get(MId.FeedingModScannerMod); + } + + @ExtApiStatu(name = "", group = "孵育盘旋转板", order = 25) + public VersionInfo getIncubatorRotateBoard() { + return versionInfos.get(MId.IncubatorRotateBoard); + } + + @ExtApiStatu(name = "", group = "孵育盘旋转", order = 26) + public VersionInfo getIncubatorRotateCtrlM() { + return versionInfos.get(MId.IncubatorRotateCtrlM); + } + + @ExtApiStatu(name = "", group = "机械臂Z轴板", order = 27) + public VersionInfo getPipetteModBoard() { + return versionInfos.get(MId.PipetteModBoard); + } + + @ExtApiStatu(name = "", group = "移液枪", order = 28) + public VersionInfo getPipetteMod() { + return versionInfos.get(MId.PipetteMod); + } + + @ExtApiStatu(name = "", group = "物料扫码器", order = 29) + public VersionInfo getPipetteModCodeScanner() { + return versionInfos.get(MId.PipetteModCodeScanner); + } + + @ExtApiStatu(name = "", group = "光学模组板", order = 30) + public VersionInfo getOptModBoard() { + return versionInfos.get(MId.OptModBoard); + } + + @ExtApiStatu(name = "", group = "板卡扫描电机", order = 31) + public VersionInfo getOptModScannerM() { + return versionInfos.get(MId.OptModScannerM); + } + + @ExtApiStatu(name = "", group = "板卡推杆电机", order = 32) + public VersionInfo getOptModPullM() { + return versionInfos.get(MId.OptModPullM); + } + + @ExtApiStatu(name = "", group = "扫描仪", order = 33) + public VersionInfo getOptMod() { + return versionInfos.get(MId.OptMod); + } + + @ExtApiStatu(name = "", group = "A8K读卡器板", order = 34) + public VersionInfo getA8kIdCardReaderBoard() { + return versionInfos.get(MId.A8kIdCardReaderBoard); + } + + @ExtApiStatu(name = "", group = "A8K读卡器", order = 35) + public VersionInfo getA8kIdCardReader() { + return versionInfos.get(MId.A8kIdCardReader); + } + + public void refreshBoardState() { + var modules = MId.values(); + for (var module : modules) { + if (module == MId.NotSet) { + continue; + } + try { + Integer version = canBus.moduleReadVersion(module); + String modueType = canBus.moduleReadType(module); + + VersionInfo info = new VersionInfo(); + info.online = true; + info.moduleType = modueType; + info.moduleId = module.index; + info.moduleName = module.chname; + info.version = version; + versionInfos.put(module, info); + + } catch (AppException e) { + VersionInfo info = new VersionInfo(); + info.online = false; + info.moduleId = module.index; + info.moduleName = module.chname; + versionInfos.put(module, info); + } + } + } + + + @PostConstruct + void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("刷新", this::refreshBoardState); + extApiPageMgr.addPage(page); + } + +} diff --git a/src/main/java/a8k/extui/newpage/test/driver/PipetteCtrlDriverPage.java b/src/main/java/a8k/extui/newpage/test/driver/PipetteCtrlDriverPage.java new file mode 100644 index 0000000..66fac31 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/test/driver/PipetteCtrlDriverPage.java @@ -0,0 +1,55 @@ +package a8k.extui.newpage.test.driver; + +import a8k.app.hardware.driver.PipetteCtrlDriver; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class PipetteCtrlDriverPage { + + @Resource + PipetteCtrlDriver pipetteCtrlDriver; + + @Resource + ExtApiPageMgr extApiPageMgr; + + static public Class getPageClass() { + return PipetteCtrlDriver.class; + } + + @PostConstruct + void init() { + ExtUIPageCfg page = new ExtUIPageCfg(pipetteCtrlDriver); + page.addFunction("z轴电机使能", pipetteCtrlDriver::zMotorEnable); + page.addFunction("模块停止", pipetteCtrlDriver::moduleStop); + page.addFunction("z轴电机归零", pipetteCtrlDriver::zMotorMoveZeroBlock); + page.addFunction("z轴电机快速归零", pipetteCtrlDriver::zMotorMoveToZeroPointQuickBlock); + page.addFunction("z轴电机相对移动", pipetteCtrlDriver::zMotorMoveByBlock); + page.addFunction("z轴电机绝对移动", pipetteCtrlDriver::zMotorMoveToBlock); + page.addFunction("z轴电机测量距离", pipetteCtrlDriver::zMotorMeasureDistance); + page.addFunction("z轴电机读取测量距离结果", pipetteCtrlDriver::zMotorReadMeasureDistanceResult); + page.addFunction("移动液枪初始化设备", pipetteCtrlDriver::pipetteInitDeviceBlock); + page.addFunction("放置吸头", pipetteCtrlDriver::putTipBlock); + page.addFunction("LLD.获取传感器采样数据", pipetteCtrlDriver::getSensorSampleData); + page.addFunction("液体操作.清除参数", pipetteCtrlDriver::liquidOperationClearParams); + page.addFunction("液体操作.设置移液枪运行参数", pipetteCtrlDriver::liquidOperationSetGunRunParams); + page.addFunction("液体操作.设置z轴电机运行参数", pipetteCtrlDriver::liquidOperationSetZMotorRunParams); + page.addFunction("液体操作.使能LLD记录", pipetteCtrlDriver::liquidOperationEnableLldRecord); + page.addFunction("液体操作.刷新参数", pipetteCtrlDriver::liquidOperationFreshParams); + page.addFunction("LLD.读取电容值", pipetteCtrlDriver::readCapacitance); + page.addFunction("放置吸头", pipetteCtrlDriver::pipettePutTip); + page.addFunction("泵移动到", pipetteCtrlDriver::pipettePumpMoveTo); + page.addFunction("LLD", pipetteCtrlDriver::pipetteLld); + page.addFunction("吸液", pipetteCtrlDriver::pipetteAspirate); + page.addFunction("分液", pipetteCtrlDriver::pipetteDistribu); + page.addFunction("振荡", pipetteCtrlDriver::pipetteShakeUp); + page.addFunction("清除悬液", pipetteCtrlDriver::pipetteClearHangingLiquid); + page.addFunction("设置寄存器", pipetteCtrlDriver::setReg); + page.addFunction("获取寄存器", pipetteCtrlDriver::getReg); + page.addFunction("获取所有寄存器", pipetteCtrlDriver::getAllRegs); + extApiPageMgr.addPage(page); + } +} diff --git a/src/main/java/a8k/extui/newpage/test/frond_end_test/FakeReactionRecordGeneratorPage.java b/src/main/java/a8k/extui/newpage/test/frond_end_test/FakeReactionRecordGeneratorPage.java new file mode 100644 index 0000000..1ecec39 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/test/frond_end_test/FakeReactionRecordGeneratorPage.java @@ -0,0 +1,65 @@ +package a8k.extui.newpage.test.frond_end_test; + +import a8k.SpringBootBeanUtil; +import a8k.app.a8ktype.device.BloodType; +import a8k.app.a8ktype.opttype.ReactionResultStatus; +import a8k.app.a8ktype.type.ReactionResult; +import a8k.app.dao.db.ReactionRecordDao; +import a8k.app.dao.db.type.ReactionResultRecord; +import a8k.app.dao.db.type.a8kidcard.zenum.A8kResultUnit; +import a8k.app.service.statemgr.GStateMgrService; +import a8k.app.utils.ZDateUtils; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class FakeReactionRecordGeneratorPage { + @Resource + GStateMgrService gstate; + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + void init() { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.addFunction("添加1条反应结果记录", this::addVirtualReactionRecord); + page.addFunction("添加100条反应结果记录", this::add100VirtualReactionRecord); + extApiPageMgr.addPage(page); + } + + public void add100VirtualReactionRecord() { + for (int i = 0; i < 100; i++) { + addVirtualReactionRecord(String.format("SAMPLE%03d", i)); + } + } + + public void addVirtualReactionRecord(String sampleId) { + ReactionRecordDao service = SpringBootBeanUtil.getBean(ReactionRecordDao.class); + ReactionResultRecord record = new ReactionResultRecord(); + + record.sampleBloodType = BloodType.WHOLE_BLOOD; + record.sampleBarcode = "XXXXXXXXXXXXXXX"; + record.sampleUserid = "ABCDEFG"; + record.projName = "Tn-I/CK-MB/Myoglobin"; + record.projShortName = "TC"; + record.lotId = "CAHAC46U"; + record.projId = 1; + record.sampleId = sampleId; + record.setExpiryDate(ZDateUtils.nextDay()); + record.operator = "admin"; // 操作员 + record.appVersion = gstate.getAppVersion();// 上层应用版本 + record.mcuVersion = gstate.getMcuVersion(); // MCU软件版本 + record.sn = gstate.getSn(); // 仪器序列号 =; + record.subProjResult1 = new ReactionResult("Tn-I", "Tn-I", 11.11, 22.22, 33.33, A8kResultUnit.iuPml, + A8kResultUnit.iuPml, A8kResultUnit.coi); + record.subProjResult2 = new ReactionResult("CK-MB", "CK-MB", ReactionResultStatus.ERROR_LOST_PEAK_C, "C峰丢失"); + record.subProjResult3 = new ReactionResult("Myoglobin", "MG", 11.11, 22.22, 33.33, A8kResultUnit.iuPml, + A8kResultUnit.iuPml, A8kResultUnit.coi); + + service.add(record); + } + +} diff --git a/src/main/java/a8k/extui/newpage/test/frond_end_test/FakeStateGeneratorPage.java b/src/main/java/a8k/extui/newpage/test/frond_end_test/FakeStateGeneratorPage.java new file mode 100644 index 0000000..08cb9e4 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/test/frond_end_test/FakeStateGeneratorPage.java @@ -0,0 +1,73 @@ +package a8k.extui.newpage.test.frond_end_test; + +import a8k.SpringBootBeanUtil; +import a8k.app.a8ktype.device.BloodType; +import a8k.app.a8ktype.opttype.ReactionResultStatus; +import a8k.app.a8ktype.type.ReactionResult; +import a8k.app.dao.db.ReactionRecordDao; +import a8k.app.dao.db.type.ReactionResultRecord; +import a8k.app.dao.db.type.a8kidcard.zenum.A8kResultUnit; +import a8k.app.service.statemgr.GStateMgrService; +import a8k.app.utils.ZDateUtils; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtApiStatu; +import a8k.extui.type.ExtUIPageCfg; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +@Component +public class FakeStateGeneratorPage { + @Resource + GStateMgrService gstate; + @Resource + ExtApiPageMgr extApiPageMgr; + + @PostConstruct + void init() { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.addFunction("添加1条反应结果记录", this::addVirtualReactionRecord); + page.addFunction("添加100条反应结果记录", this::add100VirtualReactionRecord); + extApiPageMgr.addPage(page); + } + + public void add100VirtualReactionRecord() { + for (int i = 0; i < 100; i++) { + addVirtualReactionRecord(String.format("SAMPLE%03d", i)); + } + } + + @ExtApiStatu(name = "", group = "使用说明") + public String usage() { + return "生成虚拟状态生成,用于测试,如果设备运行起来了,请勿调用此接口会造成设备状态混乱"; + } + + + + public void addVirtualReactionRecord(String sampleId) { + ReactionRecordDao service = SpringBootBeanUtil.getBean(ReactionRecordDao.class); + ReactionResultRecord record = new ReactionResultRecord(); + + record.sampleBloodType = BloodType.WHOLE_BLOOD; + record.sampleBarcode = "XXXXXXXXXXXXXXX"; + record.sampleUserid = "ABCDEFG"; + record.projName = "Tn-I/CK-MB/Myoglobin"; + record.projShortName = "TC"; + record.lotId = "CAHAC46U"; + record.projId = 1; + record.sampleId = sampleId; + record.setExpiryDate(ZDateUtils.nextDay()); + record.operator = "admin"; // 操作员 + record.appVersion = gstate.getAppVersion();// 上层应用版本 + record.mcuVersion = gstate.getMcuVersion(); // MCU软件版本 + record.sn = gstate.getSn(); // 仪器序列号 =; + record.subProjResult1 = new ReactionResult("Tn-I", "Tn-I", 11.11, 22.22, 33.33, A8kResultUnit.iuPml, + A8kResultUnit.iuPml, A8kResultUnit.coi); + record.subProjResult2 = new ReactionResult("CK-MB", "CK-MB", ReactionResultStatus.ERROR_LOST_PEAK_C, "C峰丢失"); + record.subProjResult3 = new ReactionResult("Myoglobin", "MG", 11.11, 22.22, 33.33, A8kResultUnit.iuPml, + A8kResultUnit.iuPml, A8kResultUnit.coi); + + service.add(record); + } + +} diff --git a/src/main/java/a8k/extui/newpage/test/frond_end_test/VirtualEventGeneratorPage.java b/src/main/java/a8k/extui/newpage/test/frond_end_test/VirtualEventGeneratorPage.java new file mode 100644 index 0000000..a20656d --- /dev/null +++ b/src/main/java/a8k/extui/newpage/test/frond_end_test/VirtualEventGeneratorPage.java @@ -0,0 +1,73 @@ +package a8k.extui.newpage.test.frond_end_test; + +import a8k.app.a8ktype.appevent.*; +import a8k.app.a8ktype.ui.*; +import a8k.app.service.bases.AppEventBusService; +import a8k.app.service.bases.FrontEndMessageBoxAndEventMgr; +import a8k.extui.mgr.ExtApiPageMgr; +import a8k.extui.type.ExtUIPageCfg; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class VirtualEventGeneratorPage { + @Resource + AppEventBusService eventBus; + + @Resource + ExtApiPageMgr extApiPageMgr; + + ZAppPromoptTable buildZAppPromoptTable() { + ZAppPromoptTable table = new ZAppPromoptTable(); + table.addHeader("耗材名称", "需求量", "使用量"); + table.addType("String", "String", "String"); + table.addVar(new ZAppPromoptTable.Val("ABC"), new ZAppPromoptTable.Val("11"), new ZAppPromoptTable.Val(MessageLevel.Error, "20")); + table.addVar(new ZAppPromoptTable.Val("DEF"), new ZAppPromoptTable.Val("22"), new ZAppPromoptTable.Val(MessageLevel.Info, "10")); + table.addVar(new ZAppPromoptTable.Val("GHI"), new ZAppPromoptTable.Val("33"), new ZAppPromoptTable.Val(MessageLevel.Warn, "33")); + return table; + } + + List buildZAppPromoptFormsItem() { + List formsItems = new ArrayList<>(); + formsItems.add(new ZAppPromoptFormsItem("姓名", "ABC")); + formsItems.add(new ZAppPromoptFormsItem("年龄", "12")); + return formsItems; + } + + + public void buildInfoPromoptEvent(MessageLevel level, ZAppPromoptDetailInfoType infoType) { + switch (infoType) { + case Text: + eventBus.pushEvent(new AppPromptEvent(new ZAppPromopt(level, "测试消息", null, "一二三四五一二三四五一二三四五一二三四五一二三四五"))); + break; + case Forms: + eventBus.pushEvent(new AppPromptEvent(new ZAppPromopt(level, "测试表单", null, buildZAppPromoptFormsItem()))); + break; + case Table: + eventBus.pushEvent(new AppPromptEvent(new ZAppPromopt(level, "测试表格", null, buildZAppPromoptTable()))); + break; + } + } + + @Resource + FrontEndMessageBoxAndEventMgr frontEndMessageBoxAndEventMgr; + + + public void pushMessageBoxEvent(MessageLevel level, String info) { + frontEndMessageBoxAndEventMgr.pushMessageBox(new MessageBox(level, info)); + } + + @PostConstruct + void init() { + ExtUIPageCfg page = new ExtUIPageCfg(this); + page.addFunction("构建弹窗事件", this::buildInfoPromoptEvent); + page.addFunction("构造消息", this::pushMessageBoxEvent); + + extApiPageMgr.addPage(page); + } + +} diff --git a/src/main/java/a8k/extui/newpage/test/stress_test/PipetteGunStressTest.java b/src/main/java/a8k/extui/newpage/test/stress_test/PipetteGunStressTest.java new file mode 100644 index 0000000..02c1527 --- /dev/null +++ b/src/main/java/a8k/extui/newpage/test/stress_test/PipetteGunStressTest.java @@ -0,0 +1,58 @@ +package a8k.extui.newpage.test.stress_test; + +import a8k.app.a8ktype.exception.AppException; +import a8k.app.hardware.driver.PipetteCtrlDriver; +import a8k.extui.mgr.ExtApiPageMgr; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class PipetteGunStressTest { + + @Resource + PipetteCtrlDriver pipetteCtrlDriver; + + @Resource + ExtApiPageMgr extApiPageMgr; + + + Boolean workFlag = false; + + @Scheduled(fixedRate = 10) + void pressTest() { + if (!workFlag) { + return; + } + try { + pipetteCtrlDriver.liquidOperationClearParams(); + pipetteCtrlDriver.liquidOperationSetGunRunParams(14, 14, 0, 1000, 8000); + pipetteCtrlDriver.liquidOperationSetZMotorRunParams(0, 0, 123); + pipetteCtrlDriver.liquidOperationFreshParams(); + log.info("pressTest"); + } catch (AppException e) { + log.error("pressTest error", e); + } + } + + public void startWork() { + workFlag = true; + } + + public void stopWork() { + workFlag = false; + } + + @PostConstruct + public void init() { + var page = extApiPageMgr.newPage(this); + page.addFunction("startWork", this::startWork); + page.addFunction("stopWork", this::stopWork); + extApiPageMgr.addPage(page); + workFlag = false; + } + +} diff --git a/src/main/java/a8k/extui/oldpage/pos_calibration/Hbot2DCodeScanPosCalibration.java b/src/main/java/a8k/extui/oldpage/pos_calibration/Hbot2DCodeScanPosCalibration.java index f6680e0..4cb0b8a 100644 --- a/src/main/java/a8k/extui/oldpage/pos_calibration/Hbot2DCodeScanPosCalibration.java +++ b/src/main/java/a8k/extui/oldpage/pos_calibration/Hbot2DCodeScanPosCalibration.java @@ -1,4 +1,4 @@ -//package a8k.extui.page.pos_calibration; +//package a8k.extui.newpage.extsetting.pos_calibration; // //import a8k.extui.mgr.ExtApiPageMgr; //import a8k.app.service.lowerctrl.HbotMoveCtrlService; diff --git a/src/main/java/a8k/extui/oldpage/pos_calibration/HbotLittleBSPosCalibration.java b/src/main/java/a8k/extui/oldpage/pos_calibration/HbotLittleBSPosCalibration.java index bd19d3a..8f1e224 100644 --- a/src/main/java/a8k/extui/oldpage/pos_calibration/HbotLittleBSPosCalibration.java +++ b/src/main/java/a8k/extui/oldpage/pos_calibration/HbotLittleBSPosCalibration.java @@ -1,4 +1,4 @@ -//package a8k.extui.page.pos_calibration; +//package a8k.extui.newpage.extsetting.pos_calibration; // //import a8k.app.a8ktype.device.ConsumableGroup; //import a8k.app.constant.AppConstant; diff --git a/src/main/java/a8k/extui/oldpage/pos_calibration/HbotProbeSubstancePosCalibration.java b/src/main/java/a8k/extui/oldpage/pos_calibration/HbotProbeSubstancePosCalibration.java index fac9b6c..6c87b38 100644 --- a/src/main/java/a8k/extui/oldpage/pos_calibration/HbotProbeSubstancePosCalibration.java +++ b/src/main/java/a8k/extui/oldpage/pos_calibration/HbotProbeSubstancePosCalibration.java @@ -1,4 +1,4 @@ -//package a8k.extui.page.pos_calibration; +//package a8k.extui.newpage.extsetting.pos_calibration; // // //import a8k.app.constant.AppConstant; diff --git a/src/main/java/a8k/extui/oldpage/pos_calibration/OptModuleParamPosCalibration.java b/src/main/java/a8k/extui/oldpage/pos_calibration/OptModuleParamPosCalibration.java index 8bb7fa0..191c11c 100644 --- a/src/main/java/a8k/extui/oldpage/pos_calibration/OptModuleParamPosCalibration.java +++ b/src/main/java/a8k/extui/oldpage/pos_calibration/OptModuleParamPosCalibration.java @@ -1,4 +1,4 @@ -//package a8k.extui.page.pos_calibration; +//package a8k.extui.newpage.extsetting.pos_calibration; // //import a8k.app.a8ktype.exception.AppException; //import a8k.app.a8ktype.param.optpos.OptModuleExtParam; diff --git a/src/main/java/a8k/extui/page/data/DeviceActionParameterSettingPage.java b/src/main/java/a8k/extui/page/data/DeviceActionParameterSettingPage.java deleted file mode 100644 index 7ce427b..0000000 --- a/src/main/java/a8k/extui/page/data/DeviceActionParameterSettingPage.java +++ /dev/null @@ -1,42 +0,0 @@ -package a8k.extui.page.data; - -import a8k.app.controler.filemgr.StorageControler; -import a8k.app.dao.db.DeviceActionParameterDao; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import a8k.extui.type.ret.FileToBeDownload; -import a8k.extui.type.param.ExtUIFile; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class DeviceActionParameterSettingPage { - @Resource - ExtApiPageMgr extApiPageMgr; - - @Resource - DeviceActionParameterDao deviceActionParameterDao; - - public FileToBeDownload exportDeviceActionParam() { - deviceActionParameterDao.export(); - return new FileToBeDownload(StorageControler.getDoloadPath(deviceActionParameterDao.getExportPATH())); - } - - public void importDeviceActionParam(ExtUIFile file) { - String filecontent = new String(file.bytes); - deviceActionParameterDao.importFromCSV(filecontent, true); - } - - - @PostConstruct - void init() throws NoSuchMethodException { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.addFunction("导出设备动作参数", this::exportDeviceActionParam); - page.addFunction("导入设备动作参数", this::importDeviceActionParam); - - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/data/ProjInfoMgrPage.java b/src/main/java/a8k/extui/page/data/ProjInfoMgrPage.java deleted file mode 100644 index 7e9f276..0000000 --- a/src/main/java/a8k/extui/page/data/ProjInfoMgrPage.java +++ /dev/null @@ -1,67 +0,0 @@ -package a8k.extui.page.data; - -import a8k.app.a8ktype.exception.AppException; -import a8k.app.controler.filemgr.StorageControler; -import a8k.app.dao.db.DeviceActionParameterDao; -import a8k.app.service.data.ProjIdCardInfoMgrService; -import a8k.app.service.data.ProjInfoMgrService; -import a8k.app.utils.ProjBuildinInfo; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import a8k.extui.type.param.ExtUIFile; -import a8k.extui.type.ret.FileToBeDownload; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; -import java.util.Map; - -@Component -@Slf4j -public class ProjInfoMgrPage { - @Resource - ExtApiPageMgr extApiPageMgr; - - @Resource - ProjIdCardInfoMgrService projIdCardInfoMgrService; - - @Resource - ProjInfoMgrService projInfoMgrService; - - // - // 1. 查询设备支持的项目信息 - // 2. 查询设备支持的单位范围 - // 3. 查询设备支持的未知数X的范围 - - - @PostConstruct - void init() throws NoSuchMethodException { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.addFunction("获取项目列表", this::getProjInfoBreifList); - page.addFunction("获取所有项目详细信息", this::getAllProjInfoBuildInInfo); - page.addFunction("获取项目详细信息", this::getProjInfoById); - extApiPageMgr.addPage(page); - } - - - public Map getProjInfoBreifList() throws AppException { - var allproj = projInfoMgrService.getAllProjBuildInInfo(); - Map result = new java.util.HashMap<>(); - for (var proj : allproj) { - result.put(proj.projId.toString(), - String.format("%s(%s)", proj.projName, proj.getOptMark())); - } - return result; - } - - public List getAllProjInfoBuildInInfo() throws AppException { - return projInfoMgrService.getAllProjBuildInInfo(); - } - - public ProjBuildinInfo getProjInfoById(Integer projId) throws AppException { - return projInfoMgrService.getProjBuildInInfo(projId); - } - -} diff --git a/src/main/java/a8k/extui/page/debug/P00AppEventAndMessageBoxDebugPage.java b/src/main/java/a8k/extui/page/debug/P00AppEventAndMessageBoxDebugPage.java deleted file mode 100644 index 0abc53e..0000000 --- a/src/main/java/a8k/extui/page/debug/P00AppEventAndMessageBoxDebugPage.java +++ /dev/null @@ -1,53 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.appevent.AppEvent; -import a8k.app.a8ktype.ui.MessageBox; -import a8k.app.service.bases.FrontEndMessageBoxAndEventMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -public class P00AppEventAndMessageBoxDebugPage { - - @Resource - FrontEndMessageBoxAndEventMgr frontEndMessageBoxAndEventMgr; - - @Resource - ExtApiPageMgr extApiPageMgr; - - @ExtApiStatu(name = "", group = "最新消息", order = 1) - synchronized public MessageBox getTopMessage() { - return frontEndMessageBoxAndEventMgr.getTopMessage(); - } - - - @ExtApiStatu(name = "", group = "历史消息列表", order = 2) - synchronized public List getMessageBoxList() { - return frontEndMessageBoxAndEventMgr.getMessageBoxList(); - } - - - @ExtApiStatu(name = "", group = "历史事件列表", order = 3) - synchronized public List getAppHistoryEventList() { - return frontEndMessageBoxAndEventMgr.getAppHistoryEventList(); - } - - synchronized public void confirmPromoptInfo(String eventId) { - frontEndMessageBoxAndEventMgr.confirmPromoptInfo(eventId); - } - - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.addFunction("Promopt确认", this::confirmPromoptInfo); - extApiPageMgr.addPage(page); - } - - -} diff --git a/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java b/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java deleted file mode 100644 index 489b9ec..0000000 --- a/src/main/java/a8k/extui/page/debug/P00MainflowCtrlServiceDebugPage.java +++ /dev/null @@ -1,143 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.others.checkpoint.CheckResult; -import a8k.app.a8ktype.state.DeviceWorkState; -import a8k.app.a8ktype.state.SensorState; -import a8k.app.service.background.BackgroudProcessCtrlService; -import a8k.app.service.background.SensorDataUpdateService; -import a8k.app.service.background.TemperatureCtrlService; -import a8k.app.service.statemgr.*; -import a8k.app.service.mainctrl.AppDeviceCtrlService; -import a8k.app.service.lowerctrl.DeviceInitCtrlService; -import a8k.extui.factory.CurveBuilder; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import a8k.extui.type.ret.ExtApiCurve; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -@Component -@Slf4j -public class P00MainflowCtrlServiceDebugPage { - // - // StateService - // - @Resource - DeviceWorkStateMgrService deviceWorkStateMgrService; - @Resource - GStateMgrService gStateMgrService; - // - // Ctrl - // - @Resource - AppDeviceCtrlService appDeviceCtrlService; - @Resource - DeviceInitCtrlService deviceInitCtrlService; - @Resource - BackgroudProcessCtrlService backgroudProcessCtrlService; - @Resource - TemperatureCtrlService temperatureCtrlService; - @Resource - SensorDataUpdateService sensorDataUpdateService; - - - @ExtApiStatu(name = "", group = "设备主流程工作状态", order = 1) - public DeviceWorkState readDeviceState() { - return deviceWorkStateMgrService.getDeviceWorkState(); - } - - @ExtApiStatu(name = "", group = "其他状态", order = 4) - public Map getBackgroudProcessState() { - return Map.of( - "后台线程工作状态", backgroudProcessCtrlService.getProcessState(), - "目标温度", temperatureCtrlService.getTargetTemperature(), - "孵育盘实时温度", gStateMgrService.getSensorState().getIncubateBoxTemperature(), - "板夹仓实时温度", gStateMgrService.getSensorState().getPboxTemperature(), - "废量仓光栅状态", gStateMgrService.getSensorState().getWasteBinFullFlag() - ); - } - - public void startTemperatureControl() throws AppException { - backgroudProcessCtrlService.startProcess(); - } - - public void stopTemperatureControl() throws AppException { - backgroudProcessCtrlService.stopProcess(); - } - - public List initializeDevice() throws AppException { - var ret = deviceInitCtrlService.initDevice(); - List errorList = new java.util.ArrayList<>(); - for (var checkResult : ret) { - if (!checkResult.pass) { - errorList.add(checkResult); - } - } - return errorList; - } - - public void start() throws AppException { - appDeviceCtrlService.startWork(); - } - - public void stop() throws AppException { - appDeviceCtrlService.stopWork(); - } - - public void pause() throws AppException { - appDeviceCtrlService.pauseWork(); - } - - public void continueWork() throws AppException { - appDeviceCtrlService.continueWork(); - } - - public ExtApiCurve getIncubateBoxTemperatureCurve() { - var datas = sensorDataUpdateService.getIncubateBoxTemperatureCurve(); - Integer targetTemp = temperatureCtrlService.getTargetTemperature(); - List points = new ArrayList<>(); - for (var data : datas) { - points.add(new Object[]{data.tp, data.val}); - } - return CurveBuilder.buidCurve("孵育盘温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, points); - } - - public ExtApiCurve getPlateBoxTemperatureCurve() { - var datas = sensorDataUpdateService.getPlateBoxTemperatureCurve(); - Integer targetTemp = temperatureCtrlService.getTargetTemperature(); - List points = new ArrayList<>(); - for (var data : datas) { - points.add(new Object[]{data.tp, data.val}); - } - return CurveBuilder.buidCurve("板夹仓温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, points); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.newGroup("基础"); - page.addFunction("初始化设备", this::initializeDevice); - page.addFunction("开始控温", this::startTemperatureControl); - page.addFunction("停止控温", this::stopTemperatureControl); - page.newGroup("设备控制"); - page.addFunction("开始", this::start); - page.addFunction("停止", this::stop); - page.addFunction("暂停", this::pause); - page.addFunction("继续", this::continueWork); - page.newGroup("状态"); - page.addFunction("查看孵育盘温度曲线", this::getIncubateBoxTemperatureCurve); - page.addFunction("查看板夹仓温度曲线", this::getPlateBoxTemperatureCurve); - extApiPageMgr.addPage(page); - } - -} diff --git a/src/main/java/a8k/extui/page/debug/P01EmergencyTubeDebugPage.java b/src/main/java/a8k/extui/page/debug/P01EmergencyTubeDebugPage.java deleted file mode 100644 index 86f1a17..0000000 --- a/src/main/java/a8k/extui/page/debug/P01EmergencyTubeDebugPage.java +++ /dev/null @@ -1,91 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.device.BloodType; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.state.Tube; -import a8k.app.controler.api.v1.app.state.EmergencyTubeControler; -import a8k.app.service.statemgr.TubeStateMgrService; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@Slf4j -public class P01EmergencyTubeDebugPage { - - static public class EmergencyTubeSetting { - public String userid; - public String sampleBarcode; - public BloodType bloodType;// - public List projIds = new java.util.ArrayList<>(); - } - - - @Resource - TubeStateMgrService tubeStateMgrService; - - EmergencyTubeSetting setting = new EmergencyTubeSetting(); - - @ExtApiStatu(name = "", group = "紧急试管状态", order = 1) - public Tube getEmergencyPosRunState() { - return tubeStateMgrService.getEmergencyTube(); - } - - @ExtApiStatu(name = "", group = "紧急试管提交表单", order = 1) - public EmergencyTubeSetting getEmergencyTubeSetting() { - return setting; - } - - - public void setEmergencyUserid(String userid) { - setting.userid = userid; - } - - public void setEmergencySampleBarcode(String sampleBarcode) { - setting.sampleBarcode = sampleBarcode; - } - - public void setEmergencyBloodType(BloodType bloodType) { - setting.bloodType = bloodType; - } - - public void setEmergencyProjIds(String projIds) { - //逗号分隔的项目id - String[] projIdStrs = projIds.split(","); - setting.projIds.clear(); - for (String projIdStr : projIdStrs) { - setting.projIds.add(Integer.parseInt(projIdStr)); - } - } - - - - public void commmitEmergencyTube() throws AppException { - tubeStateMgrService.commitEmergencySampleSetting( - setting.userid, - setting.sampleBarcode, - setting.bloodType, - setting.projIds, - false - ); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.addFunction("设置用户ID", this::setEmergencyUserid); - page.addFunction("设置样本条码", this::setEmergencySampleBarcode); - page.addFunction("设置血液类型", this::setEmergencyBloodType); - page.addFunction("设置项目ID", this::setEmergencyProjIds); - page.addFunction("提交紧急试管", this::commmitEmergencyTube); - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java b/src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java deleted file mode 100644 index 84a6dbd..0000000 --- a/src/main/java/a8k/extui/page/debug/P01ProjInfoDebugPage.java +++ /dev/null @@ -1,116 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.exception.AppException; -import a8k.app.dao.db.type.A8kProjInfoCardBreif; -import a8k.app.dao.db.type.ProjExtInfoCard; -import a8k.app.factory.ProjExtInfoCardFactory; -import a8k.app.service.data.ProjIdCardInfoMgrService; -import a8k.app.service.data.ProjInfoMgrService; -import a8k.app.utils.ProjBuildinInfo; -import a8k.app.utils.ZDateUtils; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -@Slf4j -public class P01ProjInfoDebugPage { - - - @Resource - ProjIdCardInfoMgrService projIdCardInfoMgrService; - - @Resource - ProjInfoMgrService projInfoMgrService; - - @ExtApiStatu(name = "", group = "挂载的项目信息", order = 1) - public ProjExtInfoCard getMountedProjInfoCard() { - return projIdCardInfoMgrService.getMountedProjInfoCard(); - } - - // - // 新建 - // - public String saveMountedProjInfoCard() throws AppException { - projIdCardInfoMgrService.saveMountedProjInfoCard(); - return "保存成功"; - } - - public String addAllProjFakeProjInfoCard() throws AppException { - List projBuildinInfos = projInfoMgrService.getAllProjBuildInInfo(); - for (ProjBuildinInfo projBuildinInfo : projBuildinInfos) { - ProjExtInfoCard projExtInfoCard = ProjExtInfoCardFactory.buildProjExtInfoCard(projBuildinInfo.projId, null); - projIdCardInfoMgrService.saveProjExtInfoCard(projExtInfoCard); - } - return "添加成功"; - } - - public String addProjFakeProjInfoCard(String projids) throws AppException { - String[] projidArr = projids.split(","); - for (String projid : projidArr) { - ProjExtInfoCard projExtInfoCard = ProjExtInfoCardFactory.buildProjExtInfoCard(Integer.parseInt(projid), null); - projIdCardInfoMgrService.saveProjExtInfoCard(projExtInfoCard); - } - return "添加成功"; - } - - // - // 查询 - // - public List getByProjId(Integer projId) { - return projIdCardInfoMgrService.getByProjId(projId); - } - - public ProjExtInfoCard getByLotId(String lotId) { - return projIdCardInfoMgrService.getByLotId(lotId); - } - - public Map getBreifAll() { - var all = projIdCardInfoMgrService.getBreifAll(); - //按照projId排序 - all.sort(Comparator.comparingInt(a -> a.projId)); - Map map = new HashMap<>(); - for (A8kProjInfoCardBreif a : all) { - map.put(String.format("%-20s", a.projName), String.format("%2d %s %s", a.projId, a.lotId, ZDateUtils.toDateString(a.expiryDate))); - } - return map; - } - - - - // - // 删除 - // - public String deleteAll() { - projIdCardInfoMgrService.deleteAll(); - return "删除成功"; - } - - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.newGroup("新建ID卡信息"); - page.addFunction("保存挂载的项目信息", this::saveMountedProjInfoCard); - page.addFunction("添加所有项目的假项目信息", this::addAllProjFakeProjInfoCard); - page.addFunction("添加指定项目的假项目信息", this::addProjFakeProjInfoCard); - page.newGroup("查询ID卡信息"); - page.addFunction("获取列表", this::getBreifAll); - page.addFunction("通过ProjID查询详细信息", this::getByProjId); - page.addFunction("通过LotID查询详细信息", this::getByLotId); - page.newGroup("删除"); - page.addFunction("删除所有", this::deleteAll); - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java b/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java deleted file mode 100644 index 19a3a47..0000000 --- a/src/main/java/a8k/extui/page/debug/P02ConsumablesMgrDebugPage.java +++ /dev/null @@ -1,217 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.device.ConsumableGroup; -import a8k.app.a8ktype.device.TipGroup; -import a8k.app.a8ktype.device.consumables.LarBottleGroup; -import a8k.app.a8ktype.device.consumables.LittBottleGroup; -import a8k.app.a8ktype.device.consumables.ReactionPlateGroup; -import a8k.app.a8ktype.device.consumables.Tips; -import a8k.app.a8ktype.error.ConsumablesScanReportErrorType; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.type.ConsumablesOneChannelScanResultPacket; -import a8k.app.a8ktype.type.ConsumablesScanReport; -import a8k.app.a8ktype.type.ConsumablesScanResultPacket; -import a8k.app.dao.db.type.ProjExtInfoCard; -import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.app.service.data.ProjIdCardInfoMgrService; -import a8k.app.service.data.ProjInfoMgrService; -import a8k.app.service.mainctrl.AppConsumablesScanService; -import a8k.app.service.statemgr.ConsumablesMgrService; -import a8k.app.utils.ProjBuildinInfo; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class P02ConsumablesMgrDebugPage { - @Resource - ConsumablesMgrService consumablesMgrService; - - @Resource - AppConsumablesScanService appConsumablesScanService; - - @Resource - ProjIdCardInfoMgrService projIdCardInfoMgrService; - - - @ExtApiStatu(name = "", group = "耗材-反应板状态1", minWidth = "16%", order = 1) - public ReactionPlateGroup getReactionPlateGroupState0() { - return consumablesMgrService.getState().reactionPlateGroup[0]; - } - - @ExtApiStatu(name = "", group = "耗材-反应板状态2", minWidth = "16%", order = 2) - public ReactionPlateGroup getReactionPlateGroupState1() { - return consumablesMgrService.getState().reactionPlateGroup[1]; - } - - @ExtApiStatu(name = "", group = "耗材-反应板状态3", minWidth = "16%", order = 3) - public ReactionPlateGroup getReactionPlateGroupState2() { - return consumablesMgrService.getState().reactionPlateGroup[2]; - } - - @ExtApiStatu(name = "", group = "耗材-反应板状态4", minWidth = "16%", order = 4) - public ReactionPlateGroup getReactionPlateGroupState3() { - return consumablesMgrService.getState().reactionPlateGroup[3]; - } - - @ExtApiStatu(name = "", group = "耗材-反应板状态5", minWidth = "16%", order = 5) - public ReactionPlateGroup getReactionPlateGroupState4() { - return consumablesMgrService.getState().reactionPlateGroup[4]; - } - - @ExtApiStatu(name = "", group = "耗材-反应板状态6", minWidth = "16%", order = 6) - public ReactionPlateGroup getReactionPlateGroupState5() { - return consumablesMgrService.getState().reactionPlateGroup[5]; - } - - - // LittBottleGroup - @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液1", minWidth = "16%", order = 7) - public LittBottleGroup getLittBottleGroupState0() { - return consumablesMgrService.getState().littBottleGroup[0]; - } - - @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液2", minWidth = "16%", order = 8) - public LittBottleGroup getLittBottleGroupState1() { - return consumablesMgrService.getState().littBottleGroup[1]; - } - - @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液3", minWidth = "16%", order = 9) - public LittBottleGroup getLittBottleGroupState2() { - return consumablesMgrService.getState().littBottleGroup[2]; - } - - @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液4", minWidth = "16%", order = 10) - public LittBottleGroup getLittBottleGroupState3() { - return consumablesMgrService.getState().littBottleGroup[3]; - } - - @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液5", minWidth = "16%", order = 11) - public LittBottleGroup getLittBottleGroupState4() { - return consumablesMgrService.getState().littBottleGroup[4]; - } - - @ExtApiStatu(name = "", group = "耗材-小瓶缓冲液6", minWidth = "16%", order = 12) - public LittBottleGroup getLittBottleGroupState5() { - return consumablesMgrService.getState().littBottleGroup[5]; - } - - - // LarBottleGroup - @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液1", minWidth = "16%", order = 13) - public LarBottleGroup getLarBottleGroupState0() { - return consumablesMgrService.getState().larBottleGroup[0]; - } - - @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液2", minWidth = "16%", order = 14) - public LarBottleGroup getLarBottleGroupState1() { - return consumablesMgrService.getState().larBottleGroup[1]; - } - - @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液3", minWidth = "16%", order = 15) - public LarBottleGroup getLarBottleGroupState2() { - return consumablesMgrService.getState().larBottleGroup[2]; - } - - @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液4", minWidth = "16%", order = 16) - public LarBottleGroup getLarBottleGroupState3() { - return consumablesMgrService.getState().larBottleGroup[3]; - } - - @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液5", minWidth = "16%", order = 17) - public LarBottleGroup getLarBottleGroupState4() { - return consumablesMgrService.getState().larBottleGroup[4]; - } - - @ExtApiStatu(name = "", group = "耗材-大瓶缓冲液6", minWidth = "16%", order = 18) - public LarBottleGroup getLarBottleGroupState5() { - return consumablesMgrService.getState().larBottleGroup[5]; - } - - @ExtApiStatu(name = "", group = "耗材-Tip状态1", minWidth = "16%", order = 19) - public Tips getTipState0() { - return consumablesMgrService.getState().tips[0]; - } - - @ExtApiStatu(name = "", group = "耗材-Tip状态2", minWidth = "16%", order = 20) - public Tips getTipState1() { - return consumablesMgrService.getState().tips[1]; - } - - @ExtApiStatu(name = "", group = "耗材-Tip状态3", minWidth = "16%", order = 21) - public Tips getTipState2() { - return consumablesMgrService.getState().tips[2]; - } - - - @Resource - ProjInfoMgrService projInfoMgrService; - @Resource - ExtApiPageMgr extApiPageMgr; - - - // - // FUNCTION - // - public ConsumablesScanResultPacket scanConsumables() throws AppException { - return appConsumablesScanService.scanConsumables(); - } - - public ConsumablesOneChannelScanResultPacket scanOneConsumables(ConsumableGroup group) throws AppException { - return appConsumablesScanService.scanOneGroupConsumables(group); - } - - public void setTipNum(TipGroup tipGroup, Integer tiNum) throws AppException { - consumablesMgrService.setTipNum(tipGroup, tiNum); - } - - public void setConsumableNum(ConsumableGroup group, Integer num) { - consumablesMgrService.setCounsumableNum(group, num); - } - - public void loadConsumablesManual(ConsumableGroup group, String lotid) throws AppException { - ProjExtInfoCard projExtInfoCard = projInfoMgrService.getProjExtInfoCard(lotid); - if (projExtInfoCard == null) { - throw AppException.of(A8kEcode.CODEERROR, "项目卡信息不存在"); - } - - ConsumablesScanReport consumablesScanReport = new ConsumablesScanReport(); - consumablesScanReport.chNum = group.off; - consumablesScanReport.projId = projExtInfoCard.projId; - consumablesScanReport.projName = projExtInfoCard.projName; - consumablesScanReport.projShortName = projExtInfoCard.projShortName; - consumablesScanReport.lotId = lotid; - consumablesScanReport.state = ConsumablesScanReportErrorType.PASS; - appConsumablesScanService.loadingConsumablesDirectly(consumablesScanReport); - } - - public void loadMountProjIDCardConsumablesManual(ConsumableGroup group) throws AppException { - ProjExtInfoCard projExtInfoCard = projIdCardInfoMgrService.getMountedProjInfoCard(); - if (projExtInfoCard == null) { - throw AppException.of(A8kEcode.CODEERROR, "没有挂载的项目卡信息"); - } - - loadConsumablesManual(group, projExtInfoCard.lotId); - - } - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.newGroup("耗材操作"); - page.addFunction("扫描耗材", this::scanConsumables); - page.addFunction("扫描耗材(单通道)", this::scanOneConsumables); - page.addFunction("设置Tip数量", this::setTipNum); - page.addFunction("设置耗材数量", this::setConsumableNum); - page.newGroup("辅助调试"); - page.addFunction("手动加载耗材", this::loadConsumablesManual); - page.addFunction("手动加载挂载项目卡耗材", this::loadMountProjIDCardConsumablesManual); - - extApiPageMgr.addPage(page); - - - } - -} diff --git a/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java b/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java deleted file mode 100644 index 9e84d95..0000000 --- a/src/main/java/a8k/extui/page/debug/P02TubeSettingDebugPage.java +++ /dev/null @@ -1,142 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.device.BloodType; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.state.Tube; -import a8k.app.a8ktype.ui.TubeHolderSetting; -import a8k.app.a8ktype.ui.TubeSetting; -import a8k.app.service.mainctrl.TubeSettingMgrService; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@Slf4j -public class P02TubeSettingDebugPage { - @Resource - TubeSettingMgrService tubeSettingMgrService; - - String editChooseUuid = null; - Integer editTubeChooseIndex = 0; - - @ExtApiStatu(name = "", group = "试管架配置", order = 1) - public List getTubeHolderSettings() { - return tubeSettingMgrService.getTubeHolderSettings(); - } - - @ExtApiStatu(name = "", group = "试管架配置表单", order = 2) - public TubeHolderSetting getTubeHolderSettingForms() { - if (editChooseUuid == null) { - return null; - } - return tubeSettingMgrService.getTubeHolderSetting(editChooseUuid); - } - - @ExtApiStatu(name = "", group = "试管配置表单", order = 3) - public TubeSetting getTubeSettingForms() throws AppException { - if (editChooseUuid == null) { - return null; - } - var val = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); - if (val == null) { - editChooseUuid = null; - return null; - } - return val; - } - - - // - // 上下文选择 - // - synchronized public void setEditChooseUuid(String uuid) { - editChooseUuid = uuid; - } - - synchronized public void setEditTubeChooseIndex(Integer index) { - editTubeChooseIndex = index; - } - - - // - // 试管架配置 - // - public void newTubeHolderSetting() { - TubeHolderSetting setting = tubeSettingMgrService.newTubeHolderSetting(); - editChooseUuid = setting.uuid; - editTubeChooseIndex = 0; - } - - - public void removeTubeHolderSetting() throws AppException { - tubeSettingMgrService.removeTubeHolderSetting(editChooseUuid); - } - - public void updateActiveState(Boolean active) throws AppException { - tubeSettingMgrService.updateActiveState(editChooseUuid, active); - } - - - // - // 试管配置 - // - public void resetTubeSetting() throws AppException { - tubeSettingMgrService.resetTubeSetting(editChooseUuid, editTubeChooseIndex); - } - - public void setTubeSettingUserId(String userid) throws AppException { - TubeSetting setting = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); - setting.userid = userid; - tubeSettingMgrService.updateTubeSetting(editChooseUuid, setting); - } - - public void setTubeSettingSampleBarcode(String sampleBarcode) throws AppException { - TubeSetting setting = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); - setting.sampleBarcode = sampleBarcode; - tubeSettingMgrService.updateTubeSetting(editChooseUuid, setting); - } - - public void setTubeSettingProjId(Integer projId) throws AppException { - TubeSetting setting = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); - setting.projId.clear(); - setting.projId.add(projId); - tubeSettingMgrService.updateTubeSetting(editChooseUuid, setting); - } - - public void setTubeSettingBloodType(BloodType bloodType) throws AppException { - TubeSetting setting = tubeSettingMgrService.getTubeSetting(editChooseUuid, editTubeChooseIndex); - setting.bloodType = bloodType; - tubeSettingMgrService.updateTubeSetting(editChooseUuid, setting); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - - page.newGroup("上下文选择"); - page.addFunction("选择试管架", this::setEditChooseUuid); - page.addFunction("选择试管序号", this::setEditTubeChooseIndex); - - page.newGroup("试管架配置"); - page.addFunction("新建试管架配置", this::newTubeHolderSetting); - page.addFunction("删除试管架配置", this::removeTubeHolderSetting); - page.addFunction("激活试管架", this::updateActiveState); - - page.newGroup("试管配置"); - page.addFunction("重置试管配置", this::resetTubeSetting); - page.addFunction("设置用户ID", this::setTubeSettingUserId); - page.addFunction("设置样本条码", this::setTubeSettingSampleBarcode); - page.addFunction("设置项目ID", this::setTubeSettingProjId); - page.addFunction("设置血液类型", this::setTubeSettingBloodType); - - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/debug/P11IncubationPlateStateDebugPageAll.java b/src/main/java/a8k/extui/page/debug/P11IncubationPlateStateDebugPageAll.java deleted file mode 100644 index 6bd1f4f..0000000 --- a/src/main/java/a8k/extui/page/debug/P11IncubationPlateStateDebugPageAll.java +++ /dev/null @@ -1,121 +0,0 @@ -package a8k.extui.page.debug; - - -import a8k.app.a8ktype.device.IncubatorPos; -import a8k.app.a8ktype.state.IncubationSubTank; -import a8k.app.service.statemgr.IncubationPlateStateMgrService; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P11IncubationPlateStateDebugPageAll { - - - @Resource - IncubationPlateStateMgrService incubationPlateStateMgrService; - - - @ExtApiStatu(name = "", group = "孵育盘1状态", order = 1) - public IncubationSubTank getSubTankStatu1() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE01); - } - - @ExtApiStatu(name = "", group = "孵育盘2状态", order = 2) - public IncubationSubTank getSubTankStatu2() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE02); - } - - @ExtApiStatu(name = "", group = "孵育盘3状态", order = 3) - public IncubationSubTank getSubTankStatu3() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE03); - } - - @ExtApiStatu(name = "", group = "孵育盘4状态", order = 4) - public IncubationSubTank getSubTankStatu4() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE04); - } - - @ExtApiStatu(name = "", group = "孵育盘5状态", order = 5) - public IncubationSubTank getSubTankStatu5() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE05); - } - - @ExtApiStatu(name = "", group = "孵育盘6状态", order = 6) - public IncubationSubTank getSubTankStatu6() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE06); - } - - @ExtApiStatu(name = "", group = "孵育盘7状态", order = 7) - public IncubationSubTank getSubTankStatu7() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE07); - } - - @ExtApiStatu(name = "", group = "孵育盘8状态", order = 8) - public IncubationSubTank getSubTankStatu8() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE08); - } - - @ExtApiStatu(name = "", group = "孵育盘9状态", order = 9) - public IncubationSubTank getSubTankStatu9() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE09); - } - - @ExtApiStatu(name = "", group = "孵育盘10状态", order = 10) - public IncubationSubTank getSubTankStatu10() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE10); - } - - @ExtApiStatu(name = "", group = "孵育盘11状态", order = 11) - public IncubationSubTank getSubTankStatu11() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE11); - } - - @ExtApiStatu(name = "", group = "孵育盘12状态", order = 12) - public IncubationSubTank getSubTankStatu12() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE12); - } - - @ExtApiStatu(name = "", group = "孵育盘13状态", order = 13) - public IncubationSubTank getSubTankStatu13() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE13); - } - - @ExtApiStatu(name = "", group = "孵育盘14状态", order = 14) - public IncubationSubTank getSubTankStatu14() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE14); - } - - @ExtApiStatu(name = "", group = "孵育盘15状态", order = 15) - public IncubationSubTank getSubTankStatu15() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE15); - } - - @ExtApiStatu(name = "", group = "孵育盘16状态", order = 16) - public IncubationSubTank getSubTankStatu16() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE16); - } - - @ExtApiStatu(name = "", group = "孵育盘17状态", order = 17) - public IncubationSubTank getSubTankStatu17() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE17); - } - - @ExtApiStatu(name = "", group = "孵育盘18状态", order = 18) - public IncubationSubTank getSubTankStatu18() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE18); - } - - @ExtApiStatu(name = "", group = "孵育盘19状态", order = 19) - public IncubationSubTank getSubTankStatu19() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE19); - } - - @ExtApiStatu(name = "", group = "孵育盘20状态", order = 20) - public IncubationSubTank getSubTankStatu20() { - return incubationPlateStateMgrService.getSubTank(IncubatorPos.SPACE20); - } - -} diff --git a/src/main/java/a8k/extui/page/debug/P12TueStateDebugPage.java b/src/main/java/a8k/extui/page/debug/P12TueStateDebugPage.java deleted file mode 100644 index 1e8bd10..0000000 --- a/src/main/java/a8k/extui/page/debug/P12TueStateDebugPage.java +++ /dev/null @@ -1,75 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.state.Tube; -import a8k.app.a8ktype.state.TubeHolder; -import a8k.app.service.statemgr.TubeStateMgrService; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P12TueStateDebugPage { - - @Resource - TubeStateMgrService tubeStateMgrService; - - - @ExtApiStatu(name = "", group = "试管架状态", minWidth = "100%", order = 1) - public TubeHolder getTubeHolder() { - return tubeStateMgrService.getTubeHolder(); - } - - @ExtApiStatu(name = "", group = "试管1", order = 2) - public Tube getTube0State() { - return tubeStateMgrService.getTubeHolder().getTubes()[0]; - } - - @ExtApiStatu(name = "", group = "试管2", order = 3) - public Tube getTube1State() { - return tubeStateMgrService.getTubeHolder().getTubes()[1]; - } - - @ExtApiStatu(name = "", group = "试管3", order = 4) - public Tube getTube2State() { - return tubeStateMgrService.getTubeHolder().getTubes()[2]; - } - - @ExtApiStatu(name = "", group = "试管4", order = 5) - public Tube getTube3State() { - return tubeStateMgrService.getTubeHolder().getTubes()[3]; - } - - @ExtApiStatu(name = "", group = "试管5", order = 6) - public Tube getTube4State() { - return tubeStateMgrService.getTubeHolder().getTubes()[4]; - } - - @ExtApiStatu(name = "", group = "试管6", order = 7) - public Tube getTube5State() { - return tubeStateMgrService.getTubeHolder().getTubes()[5]; - } - - @ExtApiStatu(name = "", group = "试管7", order = 8) - public Tube getTube6State() { - return tubeStateMgrService.getTubeHolder().getTubes()[6]; - } - - @ExtApiStatu(name = "", group = "试管8", order = 9) - public Tube getTube7State() { - return tubeStateMgrService.getTubeHolder().getTubes()[7]; - } - - @ExtApiStatu(name = "", group = "试管9", order = 10) - public Tube getTube8State() { - return tubeStateMgrService.getTubeHolder().getTubes()[8]; - } - - @ExtApiStatu(name = "", group = "试管10", order = 11) - public Tube getTube9State() { - return tubeStateMgrService.getTubeHolder().getTubes()[9]; - } - - -} diff --git a/src/main/java/a8k/extui/page/debug/P13OptModuleStateDebugPage.java b/src/main/java/a8k/extui/page/debug/P13OptModuleStateDebugPage.java deleted file mode 100644 index f36ecf3..0000000 --- a/src/main/java/a8k/extui/page/debug/P13OptModuleStateDebugPage.java +++ /dev/null @@ -1,20 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.state.OptScanModule; -import a8k.app.service.statemgr.OptScanModuleStateMgrService; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P13OptModuleStateDebugPage { - @Resource - OptScanModuleStateMgrService optScanModuleStateMgrService; - - @ExtApiStatu(name = "",group = "获取光学模块状态") - public OptScanModule getOptScanModuleState() { - return optScanModuleStateMgrService.getOptScanModule(); - } -} diff --git a/src/main/java/a8k/extui/page/debug/P20AppSettingDebugPage.java b/src/main/java/a8k/extui/page/debug/P20AppSettingDebugPage.java deleted file mode 100644 index 6788238..0000000 --- a/src/main/java/a8k/extui/page/debug/P20AppSettingDebugPage.java +++ /dev/null @@ -1,88 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.dao.db.type.AppSetting; -import a8k.app.dao.db.type.appsetting.settingenum.*; -import a8k.app.service.setting.AppSettingsMgrService; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class P20AppSettingDebugPage { - - @Resource - AppSettingsMgrService appSettingsMgrService; - - - @ExtApiStatu(name = "", group = "AppSetting", order = 1) - public AppSetting getAppSetting() { - return appSettingsMgrService.getAppSettings(); - } - - // - public void setLanguage(LanguageType val) { - appSettingsMgrService.setLanguage(val); - } - - public void setAutoPrint(Boolean val) { - appSettingsMgrService.setAutoPrint(val); - } - - public void setAutoLogout(Boolean val) { - appSettingsMgrService.setAutoLogout(val); - } - - public void setLISType(LISTypeEnum val) { - appSettingsMgrService.setLISType(val); - } - - public void setLISProtocol(LISProtocolEnum val) { - appSettingsMgrService.setLISProtocol(val); - } - - public void setLIFIf(LISIFType val) { - appSettingsMgrService.setLIFIf(val); - } - - public void setLISAutoExport(Boolean val) { - appSettingsMgrService.setLISAutoExport(val); - } - - public void setLISSerialBaudrate(LISSerialBaudrateType val) { - appSettingsMgrService.setLISSerialBaudrate(val); - } - - public void setLISNetIp(String val) { - appSettingsMgrService.setLISNetIp(val); - } - - public void setLISNetPort(Integer val) { - appSettingsMgrService.setLISNetPort(val); - } - - public void setTemperature(Integer val) { - appSettingsMgrService.setTemperature(val); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.addFunction("设置语言", this::setLanguage); - page.addFunction("设置自动打印", this::setAutoPrint); - page.addFunction("设置自动登出", this::setAutoLogout); - page.addFunction("设置LIS类型", this::setLISType); - page.addFunction("设置LIS协议", this::setLISProtocol); - page.addFunction("设置LIS接口", this::setLIFIf); - page.addFunction("设置LIS自动导出", this::setLISAutoExport); - page.addFunction("设置LIS串口波特率", this::setLISSerialBaudrate); - page.addFunction("设置LIS网络IP", this::setLISNetIp); - page.addFunction("设置LIS网络端口", this::setLISNetPort); - page.addFunction("设置温度", this::setTemperature); - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/debug/P21AppDebugModeConfigPage.java b/src/main/java/a8k/extui/page/debug/P21AppDebugModeConfigPage.java deleted file mode 100644 index 8de93bb..0000000 --- a/src/main/java/a8k/extui/page/debug/P21AppDebugModeConfigPage.java +++ /dev/null @@ -1,60 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.DeviceRunMode; -import a8k.app.service.statemgr.GStateMgrService; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class P21AppDebugModeConfigPage { - - @Resource - GStateMgrService gstate; - - @ExtApiStatu(name = "", group = "设备工作模式", order = 1) - public String getDeviceRunMode() { - if (gstate.getDeviceRunMode() == DeviceRunMode.RealMode) { - return "真实模式"; - } else if (gstate.getDeviceRunMode() == DeviceRunMode.VirtualMode) { - return "虚拟模式"; - } else if (gstate.getDeviceRunMode() == DeviceRunMode.RunOnlyMode) { - return "设备空转模式"; - } else if (gstate.getDeviceRunMode() == DeviceRunMode.VirtualStateGenerateMode) { - return "虚拟状态生成模式"; - } - return gstate.getDeviceRunMode().name(); - } - - // - public void setInRealMode() { - gstate.setDeviceRunMode(DeviceRunMode.RealMode); - } - - public void setInVirtualMode() { - gstate.setDeviceRunMode(DeviceRunMode.VirtualMode); - } - - public void setInRunOnlyMode() { - gstate.setDeviceRunMode(DeviceRunMode.RunOnlyMode); - } - - public void setInVirtualStateMode() { - gstate.setDeviceRunMode(DeviceRunMode.VirtualStateGenerateMode); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.addFunction("设置为真实模式", this::setInRealMode); - page.addFunction("设置为虚拟模式", this::setInVirtualMode); - page.addFunction("设置为设备空转模式", this::setInRunOnlyMode); - page.addFunction("设置为虚拟状态生成模式", this::setInVirtualStateMode); - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/debug/P22UserOperaionInRunOnlyModePage.java b/src/main/java/a8k/extui/page/debug/P22UserOperaionInRunOnlyModePage.java deleted file mode 100644 index 95d2318..0000000 --- a/src/main/java/a8k/extui/page/debug/P22UserOperaionInRunOnlyModePage.java +++ /dev/null @@ -1,62 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.DeviceRunMode; -import a8k.app.a8ktype.device.A8kTubeHolderType; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.type.TubeHolderScanResult; -import a8k.app.a8ktype.type.TubesScanResult; -import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.app.service.lowerctrl.ProjIDCardCtrlAndMonitorService; -import a8k.app.service.statemgr.GStateMgrService; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import a8k.teststate.TestStateMgrService; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class P22UserOperaionInRunOnlyModePage { - @Resource - GStateMgrService gstate; - @Resource - TestStateMgrService testStateMgrService; - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - void init() { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.newGroup("样本模拟操作"); - page.addFunction("放入一个全血高试管架(10个试管)", this::putInVirtualBloodTubeHolder); - extApiPageMgr.addPage(page); - } - - private void checkInRunOnlyMode() throws AppException { - if (!gstate.getDeviceRunMode().equals(DeviceRunMode.RunOnlyMode)) { - throw AppException.of(A8kEcode.CODEERROR, "只有在空转模式下才能进行当前操作"); - } - } - - // - // 样本模拟操作 - // - public void putInVirtualBloodTubeHolder() throws AppException { - checkInRunOnlyMode(); - TubeHolderScanResult scanResult = new TubeHolderScanResult(); - scanResult.tubeHolderType = A8kTubeHolderType.BloodTube.scanCode; - scanResult.tube[0] = new TubesScanResult(true, true, ""); - scanResult.tube[1] = new TubesScanResult(true, true, ""); - scanResult.tube[2] = new TubesScanResult(true, true, ""); - scanResult.tube[3] = new TubesScanResult(true, true, ""); - scanResult.tube[4] = new TubesScanResult(true, true, ""); - scanResult.tube[5] = new TubesScanResult(true, true, ""); - scanResult.tube[6] = new TubesScanResult(true, true, ""); - scanResult.tube[7] = new TubesScanResult(true, true, ""); - scanResult.tube[8] = new TubesScanResult(true, true, ""); - scanResult.tube[9] = new TubesScanResult(true, true, ""); - testStateMgrService.insertVirtualBloodTubeHolder(scanResult); - } - - -} diff --git a/src/main/java/a8k/extui/page/debug/P22UserOperaionInVertualModePage.java b/src/main/java/a8k/extui/page/debug/P22UserOperaionInVertualModePage.java deleted file mode 100644 index 8ad5ef8..0000000 --- a/src/main/java/a8k/extui/page/debug/P22UserOperaionInVertualModePage.java +++ /dev/null @@ -1,112 +0,0 @@ -package a8k.extui.page.debug; - -import a8k.app.a8ktype.DeviceRunMode; -import a8k.app.a8ktype.device.A8kTubeHolderType; -import a8k.app.a8ktype.device.ConsumableGroup; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.type.TubeHolderScanResult; -import a8k.app.a8ktype.type.TubesScanResult; -import a8k.app.dao.db.type.ProjExtInfoCard; -import a8k.app.factory.ProjExtInfoCardFactory; -import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.app.service.lowerctrl.ProjIDCardCtrlAndMonitorService; -import a8k.app.service.statemgr.GStateMgrService; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import a8k.teststate.TestStateMgrService; -import a8k.teststate.VirtualDevice; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class P22UserOperaionInVertualModePage { - @Resource - GStateMgrService gstate; - @Resource - TestStateMgrService testStateMgrService; - @Resource - ExtApiPageMgr extApiPageMgr; - - @Resource - ProjIDCardCtrlAndMonitorService projIDCardCtrlAndMonitorService; - - @PostConstruct - void init() { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.newGroup("ID卡模拟操作"); - page.addFunction("插入ID卡", this::insertVirtualIdCard); - page.addFunction("拔出ID卡", this::removeVirtualIdCard); - - page.newGroup("耗材模拟操作"); - page.addFunction("放入虚拟耗材", this::putInVirtualConsumable); - page.addFunction("拿走虚拟耗材", this::takeAwayVirtualConsumable); - - page.newGroup("样本模拟操作"); - page.addFunction("放入一个全血高试管架", this::putInVirtualBloodTubeHolder); - - extApiPageMgr.addPage(page); - } - - // - // ID卡模拟操作 - // - - private void checkMode() throws AppException { - if (!gstate.getDeviceRunMode().equals(DeviceRunMode.VirtualMode)) { - throw AppException.of(A8kEcode.CODEERROR, "只有在虚拟模式下才能进行当前操作"); - } - } - - public void insertVirtualIdCard(Integer projId, String lotId) throws AppException { - checkMode(); - ProjExtInfoCard newInfoCard = ProjExtInfoCardFactory.buildProjExtInfoCard(projId, lotId); - projIDCardCtrlAndMonitorService.setVirtualMountedIdCardInfo(newInfoCard); - } - - public void removeVirtualIdCard() throws AppException { - checkMode(); - projIDCardCtrlAndMonitorService.setVirtualMountedIdCardInfo(null); - } - - // - // 耗材模拟操作 - // - public void putInVirtualConsumable(ConsumableGroup group, String lotid) throws AppException { - checkMode(); - testStateMgrService.putVirtualConsumable(group.off, lotid); - } - - public void takeAwayVirtualConsumable() throws AppException { - checkMode(); - testStateMgrService.takeAwayVirtualConsumable(0); - testStateMgrService.takeAwayVirtualConsumable(1); - testStateMgrService.takeAwayVirtualConsumable(2); - testStateMgrService.takeAwayVirtualConsumable(3); - testStateMgrService.takeAwayVirtualConsumable(4); - testStateMgrService.takeAwayVirtualConsumable(5); - } - - - // - // 样本模拟操作 - // - public void putInVirtualBloodTubeHolder() throws AppException { - checkMode(); - TubeHolderScanResult scanResult = new TubeHolderScanResult(); - scanResult.tubeHolderType = A8kTubeHolderType.BloodTube.scanCode; - scanResult.tube[0] = new TubesScanResult(true, true, ""); - scanResult.tube[1] = new TubesScanResult(true, true, ""); - scanResult.tube[2] = new TubesScanResult(true, true, ""); - scanResult.tube[3] = new TubesScanResult(true, true, ""); - scanResult.tube[4] = new TubesScanResult(true, true, ""); - scanResult.tube[5] = new TubesScanResult(true, true, ""); - scanResult.tube[6] = new TubesScanResult(true, true, ""); - scanResult.tube[7] = new TubesScanResult(true, true, ""); - scanResult.tube[8] = new TubesScanResult(true, true, ""); - scanResult.tube[9] = new TubesScanResult(true, true, ""); - testStateMgrService.insertVirtualBloodTubeHolder(scanResult); - } - - -} diff --git a/src/main/java/a8k/extui/page/driver/LowLevelBoardVersionPreviewPage.java b/src/main/java/a8k/extui/page/driver/LowLevelBoardVersionPreviewPage.java deleted file mode 100644 index 5101629..0000000 --- a/src/main/java/a8k/extui/page/driver/LowLevelBoardVersionPreviewPage.java +++ /dev/null @@ -1,283 +0,0 @@ -package a8k.extui.page.driver; - -import a8k.app.a8ktype.exception.AppException; -import a8k.app.hardware.basedriver.A8kCanBusService; -import a8k.app.hardware.type.a8kcanprotocol.MId; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -public class LowLevelBoardVersionPreviewPage { - - - @Resource - ExtApiPageMgr extApiPageMgr; - - @Resource - A8kCanBusService canBus; - - public static class VersionInfo { - public Integer moduleId; - public String moduleName; - public Boolean online; - public String moduleType; - public Integer version; - } - - Map versionInfos = new HashMap<>(); - // HbotBoard(10, "机械臂板模块"),// - // HbotM(11, "机械臂XY"),// - // PlatesBoxBoard(20, "板夹仓模块"),// - // PlatesBoxYM(21, "板夹仓移动电机"),// - // PlatesBoxPusherM(22, "板夹仓推杆电机"),// - // PlatesBoxScanner(23, "板夹仓扫码模组"),// - // ShakeModBoard(30, "摇匀模组板"),// - // ShakeModClampingM(31, "试管固定夹爪电机"),// - // ShakeModGripperZM(32, "摇匀升降电机"),// - // ShakeModShakeM(33, "试管摇匀电机"),// - // ShakeModGripperYSV(34, "摇匀前后移动舵机"),// - // ShakeModGripperSV(35, "摇匀试管帽夹爪舵机"),// - // ShakeModTubeScanerClampingSV(36, "试管架扫码夹紧舵机"),// - // ShakeModTubeScanerRotateSV(37, "试管架旋转舵机"),// - // PlatesBoxTCMBoard(40, "反应板夹温度控制板"),// - // PlatesBoxTCM(41, "反应板夹温度控制模块"),// - // WbTubeFanMod(42, "气溶胶风扇"),// - // IncubatorTCMBoard(50, "温度控制"),// - // IncubatorTCM(51, "温度控制"),// - // FeedingModBoard(60, "出入料模块"),// - // FeedingModInfeedM(61, "入料电机"),// - // FeedingModXM(62, "试管架平移电机"),// - // FeedingModOutfeedM(63, "出料电机"),// - // FeedingModScannerMod(64, "试管架扫码器"),// - // IncubatorRotateBoard(70, "孵育盘旋转板"),// - // IncubatorRotateCtrlM(71, "孵育盘旋转"),// - // PipetteModBoard(80, "机械臂Z轴板"),// - // PipetteMod(82, "移液枪"),// - // PipetteModCodeScanner(83, "物料扫码器"),// - // OptModBoard(90, "光学模组板"),// - // OptModScannerM(91, "板卡扫描电机"),// - // OptModPullM(92, "板卡推杆电机"),// - // OptMod(93, "扫描仪"),// - // A8kIdCardReaderBoard(100, "A8K读卡器板"),// - // A8kIdCardReader(101, "A8K读卡器"),// - - @ExtApiStatu(name = "", group = "机械臂板模块", order = 1) - public VersionInfo getHbotBoard() { - return versionInfos.get(MId.HbotBoard); - } - - @ExtApiStatu(name = "", group = "机械臂XY", order = 2) - public VersionInfo getHbotM() { - return versionInfos.get(MId.HbotM); - } - - @ExtApiStatu(name = "", group = "板夹仓模块", order = 3) - public VersionInfo getPlatesBoxBoard() { - return versionInfos.get(MId.PlatesBoxBoard); - } - - @ExtApiStatu(name = "", group = "板夹仓移动电机", order = 4) - public VersionInfo getPlatesBoxYM() { - return versionInfos.get(MId.PlatesBoxYM); - } - - @ExtApiStatu(name = "", group = "板夹仓推杆电机", order = 5) - public VersionInfo getPlatesBoxPusherM() { - return versionInfos.get(MId.PlatesBoxPusherM); - } - - @ExtApiStatu(name = "", group = "板夹仓扫码模组", order = 6) - public VersionInfo getPlatesBoxScanner() { - return versionInfos.get(MId.PlatesBoxScanner); - } - - @ExtApiStatu(name = "", group = "摇匀模组板", order = 7) - public VersionInfo getShakeModBoard() { - return versionInfos.get(MId.ShakeModBoard); - } - - @ExtApiStatu(name = "", group = "试管固定夹爪电机", order = 8) - public VersionInfo getShakeModClampingM() { - return versionInfos.get(MId.ShakeModClampingM); - } - - @ExtApiStatu(name = "", group = "摇匀升降电机", order = 9) - public VersionInfo getShakeModGripperZM() { - return versionInfos.get(MId.ShakeModGripperZM); - } - - @ExtApiStatu(name = "", group = "试管摇匀电机", order = 10) - public VersionInfo getShakeModShakeM() { - return versionInfos.get(MId.ShakeModShakeM); - } - - @ExtApiStatu(name = "", group = "摇匀前后移动舵机", order = 11) - public VersionInfo getShakeModGripperYSV() { - return versionInfos.get(MId.ShakeModGripperYSV); - } - - @ExtApiStatu(name = "", group = "摇匀试管帽夹爪舵机", order = 12) - public VersionInfo getShakeModGripperSV() { - return versionInfos.get(MId.ShakeModGripperSV); - } - - @ExtApiStatu(name = "", group = "试管架扫码夹紧舵机", order = 13) - public VersionInfo getShakeModTubeScanerClampingSV() { - return versionInfos.get(MId.ShakeModTubeScanerClampingSV); - } - - @ExtApiStatu(name = "", group = "试管架旋转舵机", order = 14) - public VersionInfo getShakeModTubeScanerRotateSV() { - return versionInfos.get(MId.ShakeModTubeScanerRotateSV); - } - - @ExtApiStatu(name = "", group = "反应板夹温度控板", order = 15) - public VersionInfo getPlatesBoxTCMBoard() { - return versionInfos.get(MId.PlatesBoxTCMBoard); - } - - @ExtApiStatu(name = "", group = "反应板夹温度控制模块", order = 16) - public VersionInfo getPlatesBoxTCM() { - return versionInfos.get(MId.PlatesBoxTCM); - } - - @ExtApiStatu(name = "", group = "气溶胶风扇", order = 17) - public VersionInfo getWbTubeFanMod() { - return versionInfos.get(MId.WbTubeFanMod); - } - - @ExtApiStatu(name = "", group = "孵育盘温空板", order = 18) - public VersionInfo getIncubatorTCMBoard() { - return versionInfos.get(MId.IncubatorTCMBoard); - } - - @ExtApiStatu(name = "", group = "孵育盘温控模块", order = 19) - public VersionInfo getIncubatorTCM() { - return versionInfos.get(MId.IncubatorTCM); - } - - @ExtApiStatu(name = "", group = "出入料模块", order = 20) - public VersionInfo getFeedingModBoard() { - return versionInfos.get(MId.FeedingModBoard); - } - - @ExtApiStatu(name = "", group = "入料电机", order = 21) - public VersionInfo getFeedingModInfeedM() { - return versionInfos.get(MId.FeedingModInfeedM); - } - - @ExtApiStatu(name = "", group = "试管架平移电机", order = 22) - public VersionInfo getFeedingModXM() { - return versionInfos.get(MId.FeedingModXM); - } - - @ExtApiStatu(name = "", group = "出料电机", order = 23) - public VersionInfo getFeedingModOutfeedM() { - return versionInfos.get(MId.FeedingModOutfeedM); - } - - @ExtApiStatu(name = "", group = "试管架扫码器", order = 24) - public VersionInfo getFeedingModScannerMod() { - return versionInfos.get(MId.FeedingModScannerMod); - } - - @ExtApiStatu(name = "", group = "孵育盘旋转板", order = 25) - public VersionInfo getIncubatorRotateBoard() { - return versionInfos.get(MId.IncubatorRotateBoard); - } - - @ExtApiStatu(name = "", group = "孵育盘旋转", order = 26) - public VersionInfo getIncubatorRotateCtrlM() { - return versionInfos.get(MId.IncubatorRotateCtrlM); - } - - @ExtApiStatu(name = "", group = "机械臂Z轴板", order = 27) - public VersionInfo getPipetteModBoard() { - return versionInfos.get(MId.PipetteModBoard); - } - - @ExtApiStatu(name = "", group = "移液枪", order = 28) - public VersionInfo getPipetteMod() { - return versionInfos.get(MId.PipetteMod); - } - - @ExtApiStatu(name = "", group = "物料扫码器", order = 29) - public VersionInfo getPipetteModCodeScanner() { - return versionInfos.get(MId.PipetteModCodeScanner); - } - - @ExtApiStatu(name = "", group = "光学模组板", order = 30) - public VersionInfo getOptModBoard() { - return versionInfos.get(MId.OptModBoard); - } - - @ExtApiStatu(name = "", group = "板卡扫描电机", order = 31) - public VersionInfo getOptModScannerM() { - return versionInfos.get(MId.OptModScannerM); - } - - @ExtApiStatu(name = "", group = "板卡推杆电机", order = 32) - public VersionInfo getOptModPullM() { - return versionInfos.get(MId.OptModPullM); - } - - @ExtApiStatu(name = "", group = "扫描仪", order = 33) - public VersionInfo getOptMod() { - return versionInfos.get(MId.OptMod); - } - - @ExtApiStatu(name = "", group = "A8K读卡器板", order = 34) - public VersionInfo getA8kIdCardReaderBoard() { - return versionInfos.get(MId.A8kIdCardReaderBoard); - } - - @ExtApiStatu(name = "", group = "A8K读卡器", order = 35) - public VersionInfo getA8kIdCardReader() { - return versionInfos.get(MId.A8kIdCardReader); - } - - public void refreshBoardState() { - var modules = MId.values(); - for (var module : modules) { - if (module == MId.NotSet) { - continue; - } - try { - Integer version = canBus.moduleReadVersion(module); - String modueType = canBus.moduleReadType(module); - - VersionInfo info = new VersionInfo(); - info.online = true; - info.moduleType = modueType; - info.moduleId = module.index; - info.moduleName = module.chname; - info.version = version; - versionInfos.put(module, info); - - } catch (AppException e) { - VersionInfo info = new VersionInfo(); - info.online = false; - info.moduleId = module.index; - info.moduleName = module.chname; - versionInfos.put(module, info); - } - } - } - - - @PostConstruct - void init() { - var page = extApiPageMgr.newPage(this); - page.addFunction("刷新", this::refreshBoardState); - extApiPageMgr.addPage(page); - } - -} diff --git a/src/main/java/a8k/extui/page/driver/PipetteCtrlDriverPage.java b/src/main/java/a8k/extui/page/driver/PipetteCtrlDriverPage.java deleted file mode 100644 index 614377e..0000000 --- a/src/main/java/a8k/extui/page/driver/PipetteCtrlDriverPage.java +++ /dev/null @@ -1,55 +0,0 @@ -package a8k.extui.page.driver; - -import a8k.app.hardware.driver.PipetteCtrlDriver; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class PipetteCtrlDriverPage { - - @Resource - PipetteCtrlDriver pipetteCtrlDriver; - - @Resource - ExtApiPageMgr extApiPageMgr; - - static public Class getPageClass() { - return PipetteCtrlDriver.class; - } - - @PostConstruct - void init() { - ExtUIPageCfg page = new ExtUIPageCfg(pipetteCtrlDriver); - page.addFunction("z轴电机使能", pipetteCtrlDriver::zMotorEnable); - page.addFunction("模块停止", pipetteCtrlDriver::moduleStop); - page.addFunction("z轴电机归零", pipetteCtrlDriver::zMotorMoveZeroBlock); - page.addFunction("z轴电机快速归零", pipetteCtrlDriver::zMotorMoveToZeroPointQuickBlock); - page.addFunction("z轴电机相对移动", pipetteCtrlDriver::zMotorMoveByBlock); - page.addFunction("z轴电机绝对移动", pipetteCtrlDriver::zMotorMoveToBlock); - page.addFunction("z轴电机测量距离", pipetteCtrlDriver::zMotorMeasureDistance); - page.addFunction("z轴电机读取测量距离结果", pipetteCtrlDriver::zMotorReadMeasureDistanceResult); - page.addFunction("移动液枪初始化设备", pipetteCtrlDriver::pipetteInitDeviceBlock); - page.addFunction("放置吸头", pipetteCtrlDriver::putTipBlock); - page.addFunction("LLD.获取传感器采样数据", pipetteCtrlDriver::getSensorSampleData); - page.addFunction("液体操作.清除参数", pipetteCtrlDriver::liquidOperationClearParams); - page.addFunction("液体操作.设置移液枪运行参数", pipetteCtrlDriver::liquidOperationSetGunRunParams); - page.addFunction("液体操作.设置z轴电机运行参数", pipetteCtrlDriver::liquidOperationSetZMotorRunParams); - page.addFunction("液体操作.使能LLD记录", pipetteCtrlDriver::liquidOperationEnableLldRecord); - page.addFunction("液体操作.刷新参数", pipetteCtrlDriver::liquidOperationFreshParams); - page.addFunction("LLD.读取电容值", pipetteCtrlDriver::readCapacitance); - page.addFunction("放置吸头", pipetteCtrlDriver::pipettePutTip); - page.addFunction("泵移动到", pipetteCtrlDriver::pipettePumpMoveTo); - page.addFunction("LLD", pipetteCtrlDriver::pipetteLld); - page.addFunction("吸液", pipetteCtrlDriver::pipetteAspirate); - page.addFunction("分液", pipetteCtrlDriver::pipetteDistribu); - page.addFunction("振荡", pipetteCtrlDriver::pipetteShakeUp); - page.addFunction("清除悬液", pipetteCtrlDriver::pipetteClearHangingLiquid); - page.addFunction("设置寄存器", pipetteCtrlDriver::setReg); - page.addFunction("获取寄存器", pipetteCtrlDriver::getReg); - page.addFunction("获取所有寄存器", pipetteCtrlDriver::getAllRegs); - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/frond_end_test/FakeReactionRecordGeneratorPage.java b/src/main/java/a8k/extui/page/frond_end_test/FakeReactionRecordGeneratorPage.java deleted file mode 100644 index 256e916..0000000 --- a/src/main/java/a8k/extui/page/frond_end_test/FakeReactionRecordGeneratorPage.java +++ /dev/null @@ -1,65 +0,0 @@ -package a8k.extui.page.frond_end_test; - -import a8k.SpringBootBeanUtil; -import a8k.app.a8ktype.device.BloodType; -import a8k.app.a8ktype.opttype.ReactionResultStatus; -import a8k.app.a8ktype.type.ReactionResult; -import a8k.app.dao.db.ReactionRecordDao; -import a8k.app.dao.db.type.ReactionResultRecord; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kResultUnit; -import a8k.app.service.statemgr.GStateMgrService; -import a8k.app.utils.ZDateUtils; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class FakeReactionRecordGeneratorPage { - @Resource - GStateMgrService gstate; - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - void init() { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.addFunction("添加1条反应结果记录", this::addVirtualReactionRecord); - page.addFunction("添加100条反应结果记录", this::add100VirtualReactionRecord); - extApiPageMgr.addPage(page); - } - - public void add100VirtualReactionRecord() { - for (int i = 0; i < 100; i++) { - addVirtualReactionRecord(String.format("SAMPLE%03d", i)); - } - } - - public void addVirtualReactionRecord(String sampleId) { - ReactionRecordDao service = SpringBootBeanUtil.getBean(ReactionRecordDao.class); - ReactionResultRecord record = new ReactionResultRecord(); - - record.sampleBloodType = BloodType.WHOLE_BLOOD; - record.sampleBarcode = "XXXXXXXXXXXXXXX"; - record.sampleUserid = "ABCDEFG"; - record.projName = "Tn-I/CK-MB/Myoglobin"; - record.projShortName = "TC"; - record.lotId = "CAHAC46U"; - record.projId = 1; - record.sampleId = sampleId; - record.setExpiryDate(ZDateUtils.nextDay()); - record.operator = "admin"; // 操作员 - record.appVersion = gstate.getAppVersion();// 上层应用版本 - record.mcuVersion = gstate.getMcuVersion(); // MCU软件版本 - record.sn = gstate.getSn(); // 仪器序列号 =; - record.subProjResult1 = new ReactionResult("Tn-I", "Tn-I", 11.11, 22.22, 33.33, A8kResultUnit.iuPml, - A8kResultUnit.iuPml, A8kResultUnit.coi); - record.subProjResult2 = new ReactionResult("CK-MB", "CK-MB", ReactionResultStatus.ERROR_LOST_PEAK_C, "C峰丢失"); - record.subProjResult3 = new ReactionResult("Myoglobin", "MG", 11.11, 22.22, 33.33, A8kResultUnit.iuPml, - A8kResultUnit.iuPml, A8kResultUnit.coi); - - service.add(record); - } - -} diff --git a/src/main/java/a8k/extui/page/frond_end_test/FakeStateGeneratorPage.java b/src/main/java/a8k/extui/page/frond_end_test/FakeStateGeneratorPage.java deleted file mode 100644 index f570a87..0000000 --- a/src/main/java/a8k/extui/page/frond_end_test/FakeStateGeneratorPage.java +++ /dev/null @@ -1,73 +0,0 @@ -package a8k.extui.page.frond_end_test; - -import a8k.SpringBootBeanUtil; -import a8k.app.a8ktype.device.BloodType; -import a8k.app.a8ktype.opttype.ReactionResultStatus; -import a8k.app.a8ktype.type.ReactionResult; -import a8k.app.dao.db.ReactionRecordDao; -import a8k.app.dao.db.type.ReactionResultRecord; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kResultUnit; -import a8k.app.service.statemgr.GStateMgrService; -import a8k.app.utils.ZDateUtils; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import a8k.extui.type.ExtUIPageCfg; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class FakeStateGeneratorPage { - @Resource - GStateMgrService gstate; - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - void init() { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.addFunction("添加1条反应结果记录", this::addVirtualReactionRecord); - page.addFunction("添加100条反应结果记录", this::add100VirtualReactionRecord); - extApiPageMgr.addPage(page); - } - - public void add100VirtualReactionRecord() { - for (int i = 0; i < 100; i++) { - addVirtualReactionRecord(String.format("SAMPLE%03d", i)); - } - } - - @ExtApiStatu(name = "", group = "使用说明") - public String usage() { - return "生成虚拟状态生成,用于测试,如果设备运行起来了,请勿调用此接口会造成设备状态混乱"; - } - - - - public void addVirtualReactionRecord(String sampleId) { - ReactionRecordDao service = SpringBootBeanUtil.getBean(ReactionRecordDao.class); - ReactionResultRecord record = new ReactionResultRecord(); - - record.sampleBloodType = BloodType.WHOLE_BLOOD; - record.sampleBarcode = "XXXXXXXXXXXXXXX"; - record.sampleUserid = "ABCDEFG"; - record.projName = "Tn-I/CK-MB/Myoglobin"; - record.projShortName = "TC"; - record.lotId = "CAHAC46U"; - record.projId = 1; - record.sampleId = sampleId; - record.setExpiryDate(ZDateUtils.nextDay()); - record.operator = "admin"; // 操作员 - record.appVersion = gstate.getAppVersion();// 上层应用版本 - record.mcuVersion = gstate.getMcuVersion(); // MCU软件版本 - record.sn = gstate.getSn(); // 仪器序列号 =; - record.subProjResult1 = new ReactionResult("Tn-I", "Tn-I", 11.11, 22.22, 33.33, A8kResultUnit.iuPml, - A8kResultUnit.iuPml, A8kResultUnit.coi); - record.subProjResult2 = new ReactionResult("CK-MB", "CK-MB", ReactionResultStatus.ERROR_LOST_PEAK_C, "C峰丢失"); - record.subProjResult3 = new ReactionResult("Myoglobin", "MG", 11.11, 22.22, 33.33, A8kResultUnit.iuPml, - A8kResultUnit.iuPml, A8kResultUnit.coi); - - service.add(record); - } - -} diff --git a/src/main/java/a8k/extui/page/frond_end_test/VirtualEventGeneratorPage.java b/src/main/java/a8k/extui/page/frond_end_test/VirtualEventGeneratorPage.java deleted file mode 100644 index 0bc02ba..0000000 --- a/src/main/java/a8k/extui/page/frond_end_test/VirtualEventGeneratorPage.java +++ /dev/null @@ -1,73 +0,0 @@ -package a8k.extui.page.frond_end_test; - -import a8k.app.a8ktype.appevent.*; -import a8k.app.a8ktype.ui.*; -import a8k.app.service.bases.AppEventBusService; -import a8k.app.service.bases.FrontEndMessageBoxAndEventMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - -@Component -public class VirtualEventGeneratorPage { - @Resource - AppEventBusService eventBus; - - @Resource - ExtApiPageMgr extApiPageMgr; - - ZAppPromoptTable buildZAppPromoptTable() { - ZAppPromoptTable table = new ZAppPromoptTable(); - table.addHeader("耗材名称", "需求量", "使用量"); - table.addType("String", "String", "String"); - table.addVar(new ZAppPromoptTable.Val("ABC"), new ZAppPromoptTable.Val("11"), new ZAppPromoptTable.Val(MessageLevel.Error, "20")); - table.addVar(new ZAppPromoptTable.Val("DEF"), new ZAppPromoptTable.Val("22"), new ZAppPromoptTable.Val(MessageLevel.Info, "10")); - table.addVar(new ZAppPromoptTable.Val("GHI"), new ZAppPromoptTable.Val("33"), new ZAppPromoptTable.Val(MessageLevel.Warn, "33")); - return table; - } - - List buildZAppPromoptFormsItem() { - List formsItems = new ArrayList<>(); - formsItems.add(new ZAppPromoptFormsItem("姓名", "ABC")); - formsItems.add(new ZAppPromoptFormsItem("年龄", "12")); - return formsItems; - } - - - public void buildInfoPromoptEvent(MessageLevel level, ZAppPromoptDetailInfoType infoType) { - switch (infoType) { - case Text: - eventBus.pushEvent(new AppPromptEvent(new ZAppPromopt(level, "测试消息", null, "一二三四五一二三四五一二三四五一二三四五一二三四五"))); - break; - case Forms: - eventBus.pushEvent(new AppPromptEvent(new ZAppPromopt(level, "测试表单", null, buildZAppPromoptFormsItem()))); - break; - case Table: - eventBus.pushEvent(new AppPromptEvent(new ZAppPromopt(level, "测试表格", null, buildZAppPromoptTable()))); - break; - } - } - - @Resource - FrontEndMessageBoxAndEventMgr frontEndMessageBoxAndEventMgr; - - - public void pushMessageBoxEvent(MessageLevel level, String info) { - frontEndMessageBoxAndEventMgr.pushMessageBox(new MessageBox(level, info)); - } - - @PostConstruct - void init() { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.addFunction("构建弹窗事件", this::buildInfoPromoptEvent); - page.addFunction("构造消息", this::pushMessageBoxEvent); - - extApiPageMgr.addPage(page); - } - -} diff --git a/src/main/java/a8k/extui/page/measurement/DeviceInitializeUtilsPage.java b/src/main/java/a8k/extui/page/measurement/DeviceInitializeUtilsPage.java deleted file mode 100644 index f5ad8c9..0000000 --- a/src/main/java/a8k/extui/page/measurement/DeviceInitializeUtilsPage.java +++ /dev/null @@ -1,46 +0,0 @@ -package a8k.extui.page.measurement; - -import a8k.app.a8ktype.exception.AppException; -import a8k.app.service.lowerctrl.DeviceInitCtrlService; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class DeviceInitializeUtilsPage { - @Resource - ExtApiPageMgr extApiPageMgr; - - - @Resource - DeviceInitCtrlService deviceInitCtrlService; - - - public String moveAllStepMotorToZero() throws AppException { - deviceInitCtrlService.moveAllMotorToZero(); - return "SUCCESS"; - } - - public String disableAll() throws AppException { - deviceInitCtrlService.disableAllMotor(); - return "已失能所有电机"; - } - - public String enableAll() throws AppException { - deviceInitCtrlService.enableAllMotor(); - return "已使能所有电机"; - } - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.addFunction("电机归零", this::moveAllStepMotorToZero); - page.addFunction("使能所有电机", this::enableAll); - page.addFunction("失能所有电机", this::disableAll); - - extApiPageMgr.addPage(page); - } - - -} diff --git a/src/main/java/a8k/extui/page/opt_calibration/A8kOptVerification.java b/src/main/java/a8k/extui/page/opt_calibration/A8kOptVerification.java deleted file mode 100644 index 3a2d6fd..0000000 --- a/src/main/java/a8k/extui/page/opt_calibration/A8kOptVerification.java +++ /dev/null @@ -1,273 +0,0 @@ -package a8k.extui.page.opt_calibration; - -import a8k.app.a8kproj.A8kReactionResultComputer; -import a8k.app.a8kproj.optalgo.type.OptScanResult; -import a8k.app.a8ktype.device.BloodType; -import a8k.app.a8ktype.state.SampleInfo; -import a8k.app.a8ktype.type.ReactionResult; -import a8k.app.controler.filemgr.StorageControler; -import a8k.app.dao.db.type.ProjExtInfoCard; -import a8k.app.service.data.ProjIdCardInfoMgrService; -import a8k.app.service.lowerctrl.DeviceInitCtrlService; -import a8k.app.utils.ProjInfo; -import a8k.extui.type.ExtApiStatu; -import a8k.extui.type.ret.FileToBeDownload; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import a8k.app.service.data.FileMgrService; -import a8k.app.service.data.ProjInfoMgrService; -import a8k.app.service.lowerctrl.OptScanModuleCtrlService; -import a8k.app.service.lowerctrl.PlateBoxCtrlService; -import a8k.extui.type.ret.A8kScanCurve; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; -import a8k.app.a8ktype.device.ConsumableGroup; -import a8k.app.a8ktype.device.IncubatorPos; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.utils.ProjBuildinInfo; -import a8k.app.utils.ZList; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; -import org.springframework.util.Assert; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -@Component -public class A8kOptVerification { - - @Resource - DeviceInitCtrlService deviceInitCtrlService; - - @Resource - PlateBoxCtrlService plateBoxCtrlService; - @Resource - OptScanModuleCtrlService optScanModuleCtrlService; - - @Resource - ProjInfoMgrService projInfoMgrService; - @Resource - FileMgrService fileMgrService; - @Resource - ProjIdCardInfoMgrService projIdCardInfoMgrService; - - @Resource - ExtApiPageMgr extApiPageMgr; - - Integer activeProjId = 0; - BloodType bloodType = BloodType.WHOLE_BLOOD; - ProjBuildinInfo projInfo; - - @ExtApiStatu(name = "", group = "项目信息", order = 1) - public ProjBuildinInfo getProjInfo() { - return projInfo; - } - - @ExtApiStatu(name = "", group = "挂载ID卡信息", order = 2) - public ProjExtInfoCard getMountedProjInfoCard() { - return projIdCardInfoMgrService.getMountedProjInfoCard(); - } - - @ExtApiStatu(name = "", group = "血液类型", order = 2) - public String getBloodType() { - return switch (bloodType) { - case WHOLE_BLOOD -> "全血"; - case SERUM_OR_PLASMA -> "血清/血浆"; - default -> "未知"; - }; - } - - - @PostConstruct - void init() throws NoSuchMethodException { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.newGroup("测试工具"); - page.addFunction("测试初始化", this::testInit); - - page.newGroup("环境配置"); - page.addFunction("查看项目信息列表", this::getProjInfoBreifList); - page.addFunction("设置项目", this::setProj); - page.addFunction("设置血液类型", this::setBloodType); - - - page.newGroup("光学测试"); - page.addFunction("推板到光学模组(从板夹仓0号仓推入)", this::pushOnePlateToOptModule); - page.addFunction("光学扫描", this::doOptScan); - page.addFunction("计算扫描结果", this::computeResult); - page.addFunction("丢板", this::dropPlate); - - - page.newGroup("光学结果"); - page.addFunction("预览T光学扫描曲线", this::getScanCurveT); - page.addFunction("预览F光学扫描曲线", this::getScanCurveF); - page.addFunction("下载T光学报告", this::getTOptReport); - page.addFunction("下载F光学报告", this::getFOptReport); - - extApiPageMgr.addPage(page); - } - - public void testInit() throws AppException { - deviceInitCtrlService.initDeviceWithException(); - } - - public Map getProjInfoBreifList() throws AppException { - var allproj = projInfoMgrService.getAllProjBuildInInfo(); - Map result = new java.util.HashMap<>(); - for (var proj : allproj) { - result.put(proj.projId.toString(), - String.format("%s(%s)", proj.projName, proj.getOptMark())); - } - return result; - } - - - synchronized public void setProj(Integer projId) throws AppException { - activeProjId = projId; - projInfo = projInfoMgrService.getProjBuildInInfo(projId); - } - - synchronized public void setBloodType(BloodType bloodType) { - this.bloodType = bloodType; - } - - - A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) { - List refCurve = new ArrayList<>(); - for (int i = 1; i < 6; i++) { - refCurve.add((int) (40 * 4.8 * i)); - } - var result = new A8kScanCurve(); - result.refCurve = refCurve; - result.scanDataCurve = ZList.of(optScanResult); - return result; - } - - static class OptScanReport { - public A8kOptType optType; - public A8kScanCurve optScanCurve; - public String optReportFilePath; - public OptScanResult optScanResult; - } - - List optScanReports = new ArrayList<>(); - - private OptScanResult getOptScanResult(A8kOptType type) throws AppException { - for (var report : optScanReports) { - if (report.optType.equals(type)) { - return report.optScanResult; - } - } - return null; - } - - public void generateOptReport(ProjBuildinInfo info, Integer subProjIndex, OptScanResult optScanResult) - throws IOException { - OptScanReport report = new OptScanReport(); - report.optScanCurve = createScanCurve1200Point(optScanResult.rawData.rawData); - report.optReportFilePath = fileMgrService.storageOptReport(info.projName, info.projId, - subProjIndex, optScanResult); - report.optType = info.optcfg.get(subProjIndex).optType; - report.optScanResult = optScanResult; - optScanReports.add(report); - } - - public void pushOnePlateToOptModule() throws AppException { - optScanModuleCtrlService.dropPlate(); - optScanModuleCtrlService.pullPlate(IncubatorPos.SPACE01); - optScanModuleCtrlService.dropPlate(); - plateBoxCtrlService.pushPlateQuick(ConsumableGroup.CG1, IncubatorPos.SPACE01); - optScanModuleCtrlService.pullPlate(IncubatorPos.SPACE01); - } - - public String doOptScan() throws AppException, IOException { - fileMgrService.clearOptReport(); - optScanReports.clear(); - if (projInfo == null) { - throw AppException.ofSimplePrompt("请先选择项目"); - } - for (int i = 0; i < projInfo.optcfg.size(); i++) { - OptScanResult scanResult = getOptScanResult(projInfo.optcfg.get(i).optType); - if (scanResult == null) { - scanResult = optScanModuleCtrlService.optScan(projInfo, i); - } - generateOptReport(projInfo, i, scanResult); - } - return "扫描完成"; - } - - - public List computeResult() throws AppException { - if (projInfo == null) { - throw AppException.ofSimplePrompt("请先选择项目"); - } - - SampleInfo sampleInfo = new SampleInfo(); - sampleInfo.sampleId = "TEST_SAMPLE"; - sampleInfo.sampleBarcode = "TEST_BARCODE"; - sampleInfo.bloodType = bloodType; - - ProjInfo projInfo = new ProjInfo(); - projInfo.buildIn = this.projInfo; - projInfo.ext = projIdCardInfoMgrService.getMountedProjInfoCard(); - - if (projInfo.ext == null) { - throw AppException.ofSimplePrompt("请插入项目卡"); - } - - if (!Objects.equals(projInfo.ext.projId, this.projInfo.projId)) { - throw AppException.ofSimplePrompt("项目卡与当前项目不匹配"); - } - - List results = new ArrayList<>(); - for (int i = 0; i < this.projInfo.optcfg.size(); i++) { - OptScanResult optScanResult = getOptScanResult(this.projInfo.optcfg.get(i).optType); - Assert.notNull(optScanResult, "光学扫描结果为空"); - results.add(A8kReactionResultComputer.optComputeResult(sampleInfo, projInfo, i, optScanResult.analysResult)); - } - - return results; - } - - public void dropPlate() throws AppException { - optScanModuleCtrlService.dropPlate(); - } - - public A8kScanCurve getScanCurveT() throws AppException { - for (var report : optScanReports) { - if (report.optType.equals(A8kOptType.TOPT)) { - return report.optScanCurve; - } - } - throw AppException.ofSimplePrompt("当前项目没有T光学扫描曲线"); - } - - public A8kScanCurve getScanCurveF() throws AppException { - for (var report : optScanReports) { - if (report.optType.equals(A8kOptType.FOPT)) { - return report.optScanCurve; - } - } - throw AppException.ofSimplePrompt("当前项目没有F光学扫描曲线"); - } - - public FileToBeDownload getTOptReport() throws AppException { - for (var report : optScanReports) { - if (report.optType.equals(A8kOptType.TOPT)) { - return new FileToBeDownload(StorageControler.getDoloadPath(report.optReportFilePath)); - } - } - throw AppException.ofSimplePrompt("当前项目没有T光学报告"); - } - - public FileToBeDownload getFOptReport() throws AppException { - for (var report : optScanReports) { - if (report.optType.equals(A8kOptType.FOPT)) { - return new FileToBeDownload(StorageControler.getDoloadPath(report.optReportFilePath)); - } - } - throw AppException.ofSimplePrompt("当前项目没有F光学报告"); - } -} diff --git a/src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPage.java b/src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPage.java deleted file mode 100644 index 6da065c..0000000 --- a/src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPage.java +++ /dev/null @@ -1,125 +0,0 @@ -package a8k.extui.page.opt_calibration; - - -import a8k.app.a8kproj.A8kReactionResultComputer; -import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult; -import a8k.app.a8ktype.device.BloodType; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.state.SampleInfo; -import a8k.app.a8ktype.type.ReactionResult; -import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.app.service.data.ProjIdCardInfoMgrService; -import a8k.app.service.data.ProjInfoMgrService; -import a8k.app.utils.ProjInfo; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class OptFormulaTestPage { - - @Resource - ProjInfoMgrService projInfoMgrService; - @Resource - ProjIdCardInfoMgrService projIdCardInfoMgrService; - - @FunctionalInterface - public interface TEST { - Boolean test(); - } - - OptAlgoAnalysResult optAlgoAnalysResult = new OptAlgoAnalysResult(); - - - public void setR(Double val) { - optAlgoAnalysResult.pdR = val; - } - - public void setAR(Double val) { - optAlgoAnalysResult.pdAR = val; - } - - public void setATR(Double val) { - optAlgoAnalysResult.pdATR = val; - } - - public void setRFR(Double val) { - optAlgoAnalysResult.pdRFR = val; - } - - public void setT4R(Double val) { - optAlgoAnalysResult.pdT4R = val; - } - - public void setT4T3R(Double val) { - optAlgoAnalysResult.pdT4T3R = val; - } - - public ProjInfo getProjInfo() throws AppException { - ProjInfo projInfoContext = new ProjInfo(); - var extProjInfo = projIdCardInfoMgrService.getMountedProjInfoCard(); - if (extProjInfo == null) { - throw AppException.of(A8kEcode.APPE_A8K_ID_CARD_NOT_MOUNTED); - } - - projInfoContext.ext = extProjInfo; - projInfoContext.buildIn = projInfoMgrService.getProjBuildInInfo(extProjInfo.projId); - return projInfoContext; - } - - - public ReactionResult computeResult(BloodType bloodType, Integer optIndex) throws AppException { - SampleInfo sampleInfo = new SampleInfo(); - sampleInfo.sampleId = "TEST_SAMPLE"; - sampleInfo.sampleBarcode = "TEST_BARCODE"; - sampleInfo.bloodType = bloodType; - - ProjInfo projInfoContext = getProjInfo(); - - if (projInfoContext.buildIn.optcfg.size() <= optIndex) { - throw AppException.of(A8kEcode.CODEERROR, "当前项目没有第%s个子项目", optIndex); - } - return A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, optIndex, optAlgoAnalysResult); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - - - @PostConstruct - void init() { - optAlgoAnalysResult.pdR = 0.0; - optAlgoAnalysResult.pdAR = 0.0; - optAlgoAnalysResult.pdATR = 0.0; - optAlgoAnalysResult.pdRFR = 0.0; - optAlgoAnalysResult.pdT4R = 0.0; - optAlgoAnalysResult.pdT4T3R = 0.0; - - - ExtUIPageCfg cfg = extApiPageMgr.newPage(this); - - - cfg.newGroup("项目信息"); - cfg.addFunction("打印项目信息", this::getProjInfo); - - cfg.newGroup("设置参数"); - cfg.addFunction("设置R", this::setR).setParamVal("val", () -> optAlgoAnalysResult.pdR); - cfg.addFunction("设置AR", this::setAR).setParamVal("val", () -> optAlgoAnalysResult.pdAR); - cfg.addFunction("设置ATR", this::setATR).setParamVal("val", () -> optAlgoAnalysResult.pdATR); - cfg.addFunction("设置RFR", this::setRFR).setParamVal("val", () -> optAlgoAnalysResult.pdRFR); - cfg.addFunction("设置T4R", this::setT4R).setParamVal("val", () -> optAlgoAnalysResult.pdT4R); - cfg.addFunction("设置T4T3R", this::setT4T3R).setParamVal("val", () -> optAlgoAnalysResult.pdT4T3R); - - cfg.newGroup("计算"); - cfg.addFunction("计算结果", this::computeResult); - extApiPageMgr.addPage(cfg); - - - } - -} diff --git a/src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPageV2.java b/src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPageV2.java deleted file mode 100644 index 4ee2f26..0000000 --- a/src/main/java/a8k/extui/page/opt_calibration/OptFormulaTestPageV2.java +++ /dev/null @@ -1,174 +0,0 @@ -package a8k.extui.page.opt_calibration; - - -import a8k.app.a8kproj.A8kReactionResultComputer; -import a8k.app.a8kproj.optalgo.type.A8kOptPeaks; -import a8k.app.a8kproj.optalgo.type.OptAlgoAnalysResult; -import a8k.app.a8kproj.optanalyzer.PeakNameAssigner; -import a8k.app.a8ktype.device.BloodType; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.opttype.PeakName; -import a8k.app.a8ktype.state.SampleInfo; -import a8k.app.a8ktype.type.ReactionResult; -import a8k.app.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.app.service.data.ProjIdCardInfoMgrService; -import a8k.app.service.data.ProjInfoMgrService; -import a8k.app.utils.ProjInfo; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtApiStatu; -import a8k.extui.type.ExtUIPageCfg; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.HashMap; -import java.util.Map; - -@Component -@Slf4j -public class OptFormulaTestPageV2 { - - @Resource - ProjInfoMgrService projInfoMgrService; - @Resource - ProjIdCardInfoMgrService projIdCardInfoMgrService; - - @FunctionalInterface - public interface TEST { - Boolean test(); - } - - - Double T4Area = 0.0; - Double RArea = 0.0; - Double HArea = 0.0; - Double TArea = 0.0; - Double CArea = 0.0; - - - @ExtApiStatu(name = "", group = "INPUT", order = 1) - synchronized public Map getArea() { - return Map.of("T4", T4Area, "R", RArea, "H", HArea, "T", TArea, "C", CArea); - } - - @ExtApiStatu(name = "", group = "光学中间结果1", order = 2) - synchronized public Map getOptAlgoAnalysResult() { - if (optAlgoAnalysResult == null) { - return Map.of(); - } - - Map result = new HashMap<>(); - - if (optAlgoAnalysResult.pdR != null) - result.put("R", optAlgoAnalysResult.pdR); - if (optAlgoAnalysResult.pdAR != null) - result.put("AR", optAlgoAnalysResult.pdAR); - if (optAlgoAnalysResult.pdATR != null) - result.put("ATR", optAlgoAnalysResult.pdATR); - if (optAlgoAnalysResult.pdRFR != null) - result.put("RFR", optAlgoAnalysResult.pdRFR); - if (optAlgoAnalysResult.pdT4R != null) - result.put("T4R", optAlgoAnalysResult.pdT4R); - if (optAlgoAnalysResult.pdT4T3R != null) - result.put("T4T3R", optAlgoAnalysResult.pdT4T3R); - - return result; - } - - @ExtApiStatu(name = "", group = "光学中间结果2", order = 3, minWidth = "100%") - synchronized public String getComputedMidResult() { - return A8kReactionResultComputer.getComputeContext(); - } - - - - OptAlgoAnalysResult optAlgoAnalysResult; - - - synchronized public void setT4Area(Double val) { - T4Area = val; - } - - synchronized public void setRArea(Double val) { - RArea = val; - } - - synchronized public void setHArea(Double val) { - HArea = val; - } - - synchronized public void setTArea(Double val) { - TArea = val; - } - - synchronized public void setCArea(Double val) { - CArea = val; - } - - - public ProjInfo getProjInfo() throws AppException { - ProjInfo projInfoContext = new ProjInfo(); - var extProjInfo = projIdCardInfoMgrService.getMountedProjInfoCard(); - if (extProjInfo == null) { - throw AppException.of(A8kEcode.APPE_A8K_ID_CARD_NOT_MOUNTED); - } - - projInfoContext.ext = extProjInfo; - projInfoContext.buildIn = projInfoMgrService.getProjBuildInInfo(extProjInfo.projId); - return projInfoContext; - } - - - public ReactionResult computeResult(BloodType bloodType, Integer optIndex) throws AppException { - SampleInfo sampleInfo = new SampleInfo(); - sampleInfo.sampleId = "TEST_SAMPLE"; - sampleInfo.sampleBarcode = "TEST_BARCODE"; - sampleInfo.bloodType = bloodType; - ProjInfo projInfoContext = getProjInfo(); - - A8kOptPeaks peaks = new A8kOptPeaks(); - PeakNameAssigner.assignPeakName(projInfoContext.buildIn.projId, projInfoContext.buildIn.optcfg.get(optIndex).peakNameRefNum, peaks); - - peaks.trySetPeakArea(PeakName.T4, T4Area); - peaks.trySetPeakArea(PeakName.R, RArea); - peaks.trySetPeakArea(PeakName.H, HArea); - peaks.trySetPeakArea(PeakName.T, TArea); - peaks.trySetPeakArea(PeakName.C, CArea); - - - optAlgoAnalysResult = OptAlgoAnalysResult.build(new Integer[0], new double[0], peaks); - if (projInfoContext.buildIn.optcfg.size() <= optIndex) { - throw AppException.of(A8kEcode.CODEERROR, "当前项目没有第%s个子项目", optIndex); - } - return A8kReactionResultComputer.optComputeResult(sampleInfo, projInfoContext, optIndex, optAlgoAnalysResult); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - void init() { - - ExtUIPageCfg cfg = extApiPageMgr.newPage(this); - - - cfg.newGroup("项目信息"); - cfg.addFunction("打印项目信息", this::getProjInfo); - - cfg.newGroup("设置参数"); - cfg.addFunction("设置T4面积", this::setT4Area).setParamVal("val", () -> T4Area); - cfg.addFunction("设置R面积", this::setRArea).setParamVal("val", () -> RArea); - cfg.addFunction("设置H面积", this::setHArea).setParamVal("val", () -> HArea); - cfg.addFunction("设置T面积", this::setTArea).setParamVal("val", () -> TArea); - cfg.addFunction("设置C面积", this::setCArea).setParamVal("val", () -> CArea); - - - cfg.newGroup("计算"); - cfg.addFunction("计算结果", this::computeResult); - extApiPageMgr.addPage(cfg); - - - } - -} diff --git a/src/main/java/a8k/extui/page/opt_calibration/OptModuleParamCalibration.java b/src/main/java/a8k/extui/page/opt_calibration/OptModuleParamCalibration.java deleted file mode 100644 index 96904a9..0000000 --- a/src/main/java/a8k/extui/page/opt_calibration/OptModuleParamCalibration.java +++ /dev/null @@ -1,232 +0,0 @@ -package a8k.extui.page.opt_calibration; - -import a8k.app.a8ktype.device.ConsumableGroup; -import a8k.app.a8ktype.device.IncubatorPos; -import a8k.app.service.lowerctrl.DeviceInitCtrlService; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ret.A8kScanCurve; -import a8k.extui.type.ExtApiStatu; -import a8k.app.service.lowerctrl.OptScanModuleCtrlService; -import a8k.app.service.lowerctrl.PlateBoxCtrlService; -import a8k.app.service.param.OptModuleExtParamsMgr; -import a8k.app.a8ktype.param.optpos.OptModuleExtParam; -import a8k.app.dao.db.type.a8kidcard.zenum.A8kOptType; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.utils.ZList; -import a8k.app.utils.opt_gain_convert.OptGainConvert; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -/** - * - * 1.下面三个位置在ReactionPlatesTransmitControlerCalibration进行标定 - * PullerTargetPos("拉板目标位置"), - * OptScanerDropPos("丢板坐标"), - * OptScanerScandbyPos("扫描待机位"), - * - * 2. 该模块只用来标定 - * TOptScanStartPos (T光学扫描起始位置) - * FOptScanStartPos (F光学扫描起始位置) - */ -@Component -public class OptModuleParamCalibration { - private static final Logger log = LoggerFactory.getLogger(OptModuleParamCalibration.class); - @Resource - OptModuleExtParamsMgr optModuleExtParamsMgr; - - @Resource - PlateBoxCtrlService plateBoxCtrlService; - @Resource - OptScanModuleCtrlService optScanModuleCtrlService; - - - @Resource - DeviceInitCtrlService deviceInitCtrlService; - - - @ExtApiStatu(name = "", group = "F光学参数", order = 1) - public Object getTPara() throws AppException { - return optModuleExtParamsMgr.getParamMap(OptModuleExtParam.FOptEmissionIntensity, OptModuleExtParam.FOptScanGainVal, OptModuleExtParam.FOptScanShift); - } - - @ExtApiStatu(name = "", group = "T光学参数", order = 2) - public Object getFPara() throws AppException { - return optModuleExtParamsMgr.getParamMap(OptModuleExtParam.TOptEmissionIntensity, OptModuleExtParam.TOptScanGainVal, OptModuleExtParam.TOptScanShift); - } - - @ExtApiStatu(name = "", group = "说明", order = 3) - public Object getDesc() { - Map desc = new HashMap<>(); - desc.put("1", "测试使用的位置反应板1号仓"); - desc.put("2", "F光学发射强度参数:越大强度越弱"); - return desc; - } - - public void deviceReset() throws AppException { - deviceInitCtrlService.initDeviceWithException(); - } - - - // - // 辅助方法 - // - - /** - * From: 0号仓 - * TrunablePos:0号仓到 - */ - - public void pushOnePlateToOptModule() throws AppException { - //先清空当前通道 - optScanModuleCtrlService.dropPlate(); - optScanModuleCtrlService.pullPlate(IncubatorPos.SPACE01); - optScanModuleCtrlService.dropPlate(); - - //推板到光学模组 - plateBoxCtrlService.pushPlateQuick(ConsumableGroup.CG1, IncubatorPos.SPACE01); - optScanModuleCtrlService.pullPlate(IncubatorPos.SPACE01); - } - - - public void dropPlate() throws AppException { - optScanModuleCtrlService.dropPlate(); - } - - - A8kScanCurve createScanCurve1200Point(Integer[] optScanResult) { - // Integer[] optScanResult250 = A8kOptAlgoUtils.supperSamplingAndSubSampling(optScanResult); - List refCurve = new ArrayList<>(); - for (int i = 1; i < 6; i++) { - refCurve.add((int) (40 * 4.8 * i)); - } - - var result = new A8kScanCurve(); - result.refCurve = refCurve; - result.scanDataCurve = ZList.of(optScanResult); - return result; - } - - A8kScanCurve fcurveCache = null; - - public void setFOptScanShift(Integer shift) throws AppException { - if (shift < 0) { - throw AppException.ofAECodeError("扫描偏移量必须大于0"); - } - - Integer oldShift = optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptScanShift, Integer.class); - Integer diffShift = shift - oldShift; - - if (fcurveCache != null) { - for (int i = 0; i < fcurveCache.refCurve.size(); i++) { - // log.info("i={}, fcurveCache.refCurve.get(i)={}, diffShift={}", i, fcurveCache.refCurve.get(i), diffShift); - // log.info("new value={}", fcurveCache.refCurve.get(i) - diffShift); - fcurveCache.refCurve.set(i, fcurveCache.refCurve.get(i) + diffShift); - } - } - - - optModuleExtParamsMgr.setOptParam(OptModuleExtParam.FOptScanShift, shift); - } - - - public void setFOptEmissionIntensity(Integer val) { - optModuleExtParamsMgr.setOptParam(OptModuleExtParam.FOptEmissionIntensity, val); - } - - - public void setFOptScanAmplVal(Double val) { - optModuleExtParamsMgr.setOptParam(OptModuleExtParam.FOptScanGainVal, val); - } - - - public A8kScanCurve FOptScan() throws AppException { - Double scanGain = optModuleExtParamsMgr.getScanGain(A8kOptType.FOPT); - Integer rawScanGain = OptGainConvert.scanerToRawGain(A8kOptType.FOPT, scanGain); - Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.FOPT); - var result = optScanModuleCtrlService.startOptScan(A8kOptType.FOPT, rawLasterGain, rawScanGain); - fcurveCache = createScanCurve1200Point(result); - return fcurveCache; - } - - public A8kScanCurve getFCurveCache() { - return fcurveCache; - } - - - // - //T光学 - // - - - public void setTOptScanShift(Integer shift) throws AppException { - if (shift < 0) { - throw AppException.ofAECodeError("扫描偏移量必须大于0"); - } - optModuleExtParamsMgr.setOptParam(OptModuleExtParam.TOptScanShift, shift); - } - - - public void setTOptEmissionIntensity(Integer val) { - optModuleExtParamsMgr.setOptParam(OptModuleExtParam.TOptEmissionIntensity, val); - } - - - public void setTOptScanAmplVal(Double val) { - optModuleExtParamsMgr.setOptParam(OptModuleExtParam.TOptScanGainVal, val); - } - - - public A8kScanCurve TOptScan() throws AppException { - Double scanGain = optModuleExtParamsMgr.getScanGain(A8kOptType.TOPT); - Integer rawScanGain = OptGainConvert.scanerToRawGain(A8kOptType.TOPT, scanGain); - Integer rawLasterGain = optModuleExtParamsMgr.getOptLasterRawGain(A8kOptType.TOPT); - - var result = optScanModuleCtrlService.startOptScan(A8kOptType.TOPT, rawLasterGain, rawScanGain); - return createScanCurve1200Point(result); - } - - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - - page.newGroup("基础"); - page.addFunction("设备初始化", this::deviceReset); - page.addFunction("推板到光学模组", this::pushOnePlateToOptModule); - page.addFunction("丢板", this::dropPlate); - - page.newGroup("F光学"); - page.addFunction("设置扫描偏移", this::setFOptScanShift) - .setParamVal("shift", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptScanShift, Integer.class)); - page.addFunction("设置发射强度[1->255]()", this::setFOptEmissionIntensity) - .setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptEmissionIntensity, Integer.class)); - page.addFunction("设置接收放大倍数[1.1->47]", this::setFOptScanAmplVal) - .setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.FOptScanGainVal, Double.class)); - page.addFunction("扫描", this::FOptScan); - page.addFunction("查看波形", this::getFCurveCache); - - page.newGroup("T光学"); - page.addFunction("设置扫描偏移", this::setTOptScanShift) - .setParamVal("shift", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.TOptScanShift, Integer.class)); - page.addFunction("设置发射强度[1->255]", this::setTOptEmissionIntensity) - .setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.TOptEmissionIntensity, Integer.class)); - page.addFunction("设置接收放大倍数[0.5->21.7]", this::setTOptScanAmplVal) - .setParamVal("val", () -> optModuleExtParamsMgr.getParam(OptModuleExtParam.TOptScanGainVal, Double.class)); - page.addFunction("扫描", this::TOptScan); - - extApiPageMgr.addPage(page); - } - -} diff --git a/src/main/java/a8k/extui/page/pos_calibration/P01MiniServoReferencePointIniter.java b/src/main/java/a8k/extui/page/pos_calibration/P01MiniServoReferencePointIniter.java deleted file mode 100644 index d430224..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P01MiniServoReferencePointIniter.java +++ /dev/null @@ -1,86 +0,0 @@ -package a8k.extui.page.pos_calibration; - - -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.app.hardware.driver.MiniServoDriver; -import a8k.app.hardware.driver.type.MiniServoMId; -import a8k.app.a8ktype.exception.AppException; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class P01MiniServoReferencePointIniter { - - @Resource - MiniServoDriver miniServoDriver; - - - public void disableMotor() throws AppException { - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 0); - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 0); - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 0); - } - - - public void enableMotor() throws AppException { - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperSV, 1); - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModGripperYSV, 1); - miniServoDriver.miniServoEnable(MiniServoMId.ShakeModTubeScanerClampingSV, 1); - } - - - public Integer gripperSVSetCurrentPosAsRef() throws AppException { - miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModGripperSV); - return 1800; - } - - - public Integer YAxixServoSetCurrentPosAsRef() throws AppException { - return miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModGripperYSV); - } - - - public void setTubeScanClampPos() throws AppException { - miniServoDriver.miniServoSetRefPos(MiniServoMId.ShakeModTubeScanerClampingSV); - } - - - public void gripperSVMoveToZeroBlock() throws AppException { - miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperSV); - } - - - public void YAxixServoMoveToZeroBlock() throws AppException { - miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModGripperYSV); - } - - - public void tubeScanClampMoveToZeroBlock() throws AppException { - miniServoDriver.miniServoMoveToZeroBlock(MiniServoMId.ShakeModTubeScanerClampingSV); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - - page.newGroup("基础"); - page.addFunction("失能所有舵机", this::disableMotor); - page.addFunction("使能所有舵机", this::enableMotor); - - page.newGroup("参考点设置"); - page.addFunction("设置<夹爪><参考点>(完全张开的位置)", this::gripperSVSetCurrentPosAsRef); - page.addFunction("设置<摇匀模组Y轴舵机><参考点>(Y轴最外侧的位置)", this::YAxixServoSetCurrentPosAsRef); - page.addFunction("设置<夹紧舵机>参考点(水平位置)", this::setTubeScanClampPos); - - page.newGroup("校验"); - page.addFunction("夹紧舵机移动到待机位(在参考点附近)", this::gripperSVMoveToZeroBlock); - page.addFunction("摇匀模组Y轴舵机移动到待机位(在参考点附近)", this::YAxixServoMoveToZeroBlock); - page.addFunction("夹紧舵机移动到待机位(在参考点附近)", this::tubeScanClampMoveToZeroBlock); - - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/pos_calibration/P02TubeFeedingModulePosCalibrationPage.java b/src/main/java/a8k/extui/page/pos_calibration/P02TubeFeedingModulePosCalibrationPage.java deleted file mode 100644 index 87cc596..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P02TubeFeedingModulePosCalibrationPage.java +++ /dev/null @@ -1,94 +0,0 @@ -package a8k.extui.page.pos_calibration; - -import a8k.app.a8ktype.param.tubefeeding.TubeFeedingModulePos; -import a8k.app.a8ktype.param.tubefeeding.TubeFeedingModuleSetting; -import a8k.app.service.param.TubeFeedingModuleParamMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - - -@Component -public class P02TubeFeedingModulePosCalibrationPage { - - @Resource - TubeFeedingModuleParamMgr tubeScanPosMgr; - - public void setTubeHolderEnterXPos(Integer pos) { - tubeScanPosMgr.setParam(TubeFeedingModulePos.TubeHolderEnterXPos, pos); - } - - public void setTubeHolderExitXPos(Integer pos) { - tubeScanPosMgr.setParam(TubeFeedingModulePos.TubeHolderExitXPos, pos); - } - - public void setTubeHolderScanXPos(Integer pos) { - tubeScanPosMgr.setParam(TubeFeedingModulePos.TubeHolderScanXPos, pos); - } - - public void setTube0ScanPos(Integer pos) { - tubeScanPosMgr.setParam(TubeFeedingModulePos.Tube0ScanPos, pos); - } - - public void setTube0AltitJudgPos(Integer pos) { - tubeScanPosMgr.setParam(TubeFeedingModulePos.Tube0AltitJudgPos, pos); - } - - public void setTube0ExistJudgPos(Integer pos) { - tubeScanPosMgr.setParam(TubeFeedingModulePos.Tube0ExistJudgPos, pos); - } - - public void setTube0PreProcessPos(Integer pos) { - tubeScanPosMgr.setParam(TubeFeedingModulePos.Tube0PreProcessPos, pos); - } - - //TubeScanServoTorque - //TubeSpacing - - public void setTubeScanServoTorque(Integer torque) { - tubeScanPosMgr.setParam(TubeFeedingModuleSetting.TubeScanServoTorque, torque); - } - - public void setTubeSpacing(Double spacing) { - tubeScanPosMgr.setParam(TubeFeedingModuleSetting.TubeSpacing, spacing); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - - page.newGroup("坐标"); - page.addFunction("设置试管架进入位置", this::setTubeHolderEnterXPos) - .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.TubeHolderEnterXPos, Integer.class)); - page.addFunction("设置试管架出口位置", this::setTubeHolderExitXPos) - .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.TubeHolderExitXPos, Integer.class)); - page.addFunction("设置试管架扫描位置", this::setTubeHolderScanXPos) - .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.TubeHolderScanXPos, Integer.class)); - page.addFunction("设置01号试管扫描位置", this::setTube0ScanPos) - .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.Tube0ScanPos, Integer.class)); - page.addFunction("设置01试管高度判断位置", this::setTube0AltitJudgPos) - .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.Tube0AltitJudgPos, Integer.class)); - page.addFunction("设置01试管存在判断位置", this::setTube0ExistJudgPos) - .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.Tube0ExistJudgPos, Integer.class)); - page.addFunction("设置01试管预处理位置", this::setTube0PreProcessPos) - .setParamVal("pos", () -> tubeScanPosMgr.getParam(TubeFeedingModulePos.Tube0PreProcessPos, Integer.class)); - - page.newGroup("常量"); - page.addFunction("设置试管扫描旋转舵机扭矩(0->1000)", this::setTubeScanServoTorque) - .setParamVal("torque", () -> tubeScanPosMgr.getParam(TubeFeedingModuleSetting.TubeScanServoTorque, Integer.class)); - page.addFunction("计算并设置设置试管间距", this::setTubeSpacing) - .setParamVal("spacing", () -> tubeScanPosMgr.getParam(TubeFeedingModuleSetting.TubeSpacing, Double.class)); - extApiPageMgr.addPage(page); - } - - // - // 校验 - // - - - -} diff --git a/src/main/java/a8k/extui/page/pos_calibration/P03TubePreProcesPosCalibrationPage.java b/src/main/java/a8k/extui/page/pos_calibration/P03TubePreProcesPosCalibrationPage.java deleted file mode 100644 index 52c60aa..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P03TubePreProcesPosCalibrationPage.java +++ /dev/null @@ -1,100 +0,0 @@ -package a8k.extui.page.pos_calibration; - -import a8k.app.a8ktype.param.tubepreprocess.TubePreProcessGripperPos; -import a8k.app.a8ktype.param.tubepreprocess.TubePreProcessTubeClamp; -import a8k.app.a8ktype.param.tubepreprocess.TubePreProcessYPos; -import a8k.app.a8ktype.param.tubepreprocess.TubePreProcessZAxisPos; -import a8k.app.service.param.TubePreProcesPosParamMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P03TubePreProcesPosCalibrationPage { - @Resource - TubePreProcesPosParamMgr posMgr; - - public void setGripperServoOpenPos(Integer pos) { - posMgr.setParam(TubePreProcessGripperPos.GripperServoOpenPos, pos); - } - - public void setGripperServoTakeCapPos(Integer pos) { - posMgr.setParam(TubePreProcessGripperPos.GripperServoTakeCapPos, pos); - } - - public void setGripperRedundancyHeight(Integer pos) { - posMgr.setParam(TubePreProcessGripperPos.GripperRedundancyHeight, pos); - } - - public void setShakeClampMotorClampPos(Integer pos) { - posMgr.setParam(TubePreProcessTubeClamp.ShakeClampMotorClampPos, pos); - } - - public void setShakeClampMotorReleasePos(Integer pos) { - posMgr.setParam(TubePreProcessTubeClamp.ShakeClampMotorReleasePos, pos); - } - - public void setYServoTakeTubePos(Integer pos) { - posMgr.setParam(TubePreProcessYPos.YServoTakeTubePos, pos); - } - - public void setYServoShakePos(Integer pos) { - posMgr.setParam(TubePreProcessYPos.YServoShakePos, pos); - } - - public void setZMotorTakeHTubePos(Integer pos) { - posMgr.setParam(TubePreProcessZAxisPos.ZMotorTakeHTubePos, pos); - } - - public void setZMotorTakeSTubePos(Integer pos) { - posMgr.setParam(TubePreProcessZAxisPos.ZMotorTakeSTubePos, pos); - } - - public void setZMotorShakeTubePos(Integer pos) { - posMgr.setParam(TubePreProcessZAxisPos.ZMotorShakeTubePos, pos); - } - - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.newGroup("抓手"); - page.addFunction("设置张开位置", this::setGripperServoOpenPos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessGripperPos.GripperServoOpenPos, Integer.class)); - page.addFunction("设置取试管位置", this::setGripperServoTakeCapPos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessGripperPos.GripperServoTakeCapPos, Integer.class)); - page.addFunction("设置冗余高度", this::setGripperRedundancyHeight) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessGripperPos.GripperRedundancyHeight, Integer.class)); - - page.newGroup("摇匀试管夹"); - page.addFunction("设置夹紧位", this::setShakeClampMotorClampPos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessTubeClamp.ShakeClampMotorClampPos, Integer.class)); - page.addFunction("设置释放位", this::setShakeClampMotorReleasePos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessTubeClamp.ShakeClampMotorReleasePos, Integer.class)); - - page.newGroup("Y轴舵机"); - page.addFunction("设置取试管位置", this::setYServoTakeTubePos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessYPos.YServoTakeTubePos, Integer.class)); - page.addFunction("设置摇匀位置", this::setYServoShakePos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessYPos.YServoShakePos, Integer.class)); - - page.newGroup("Z轴"); - page.addFunction("设置取高试管位置", this::setZMotorTakeHTubePos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessZAxisPos.ZMotorTakeHTubePos, Integer.class)); - page.addFunction("设置取低试管位置", this::setZMotorTakeSTubePos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessZAxisPos.ZMotorTakeSTubePos, Integer.class)); - page.addFunction("设置摇匀放置位置", this::setZMotorShakeTubePos) - .setParamVal("pos", () -> posMgr.getParam(TubePreProcessZAxisPos.ZMotorShakeTubePos, Integer.class)); - - extApiPageMgr.addPage(page); - } - -} - - diff --git a/src/main/java/a8k/extui/page/pos_calibration/P04ReactionPlatesTransmitControlerCalibrationPage.java b/src/main/java/a8k/extui/page/pos_calibration/P04ReactionPlatesTransmitControlerCalibrationPage.java deleted file mode 100644 index ba17edb..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P04ReactionPlatesTransmitControlerCalibrationPage.java +++ /dev/null @@ -1,108 +0,0 @@ -package a8k.extui.page.pos_calibration; - -import a8k.app.a8ktype.param.optpos.OptModuleParam; -import a8k.app.service.param.OptModuleParamsMgr; -import a8k.app.service.param.PlatesBoxPosParamMgr; -import a8k.app.service.param.TurntablePosParamMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import org.springframework.stereotype.Component; - -@Component -public class P04ReactionPlatesTransmitControlerCalibrationPage { - @Resource - OptModuleParamsMgr optModuleParamsMgr; - @Resource - TurntablePosParamMgr turntablePosParamMgr; - @Resource - PlatesBoxPosParamMgr platesBoxPosParamMgr; - - // - // 孵育盘校准 - // - - public void TurntablePosMgr_setPosSpacing(Integer posSpacing) { - turntablePosParamMgr.setPosSpacing(posSpacing); - } - - - public void TurntablePosMgr_setPushPos0(Integer pos) { - turntablePosParamMgr.setPushPos0(pos); - } - - - public void TurntablePosMgr_setPullPos0(Integer pos) { - turntablePosParamMgr.setPullPos0(pos); - } - - - public void TurntablePosMgr_setDropLiquidPos0(Integer pos) { - turntablePosParamMgr.setDropLiquidPos0(pos); - } - - - public void PlatesBoxPosMgr_setCh0YPos(Integer pos) { - platesBoxPosParamMgr.setCh0YPos(pos); - } - - - public void PlatesBoxPosMgr_setYSpacing(Double spacing) { - platesBoxPosParamMgr.setYSpacing(spacing); - } - - - public void PlatesBoxPosMgr_setPushEndXPos(Integer pos) { - platesBoxPosParamMgr.setPushEndXPos(pos); - } - - public void OptModulePosMgr_setPullerTargetPos(Integer pos) { - optModuleParamsMgr.setOptParam(OptModuleParam.PullerTargetPos, pos); - } - - - public void OptModulePosMgr_setOptScanerDropPos(Integer pos) { - optModuleParamsMgr.setOptParam(OptModuleParam.OptScanerDropPos, pos); - } - - - public void OptModulePosMgr_setOptScanerScandbyPos(Integer pos) { - optModuleParamsMgr.setOptParam(OptModuleParam.OptScanerScandbyPos, pos); - } - - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.newGroup("孵育盘"); - page.addFunction("设置孵育盘间距", this::TurntablePosMgr_setPosSpacing) - .setParamVal("posSpacing", () -> turntablePosParamMgr.getPosSpacing()); - page.addFunction("设置孵育盘-仓0-入口位", this::TurntablePosMgr_setPushPos0) - .setParamVal("pos", () -> turntablePosParamMgr.getPushPos0()); - page.addFunction("设置孵育盘-仓0-出口位", this::TurntablePosMgr_setPullPos0) - .setParamVal("pos", () -> turntablePosParamMgr.getPullPos0()); - page.addFunction("设置孵育盘-仓0-放液位", this::TurntablePosMgr_setDropLiquidPos0) - .setParamVal("pos", () -> turntablePosParamMgr.getDropLiquidPos0()); - - page.newGroup("板夹仓"); - page.addFunction("设置板夹仓-仓0-Y轴坐标", this::PlatesBoxPosMgr_setCh0YPos) - .setParamVal("pos", () -> platesBoxPosParamMgr.getCh0YPos()); - page.addFunction("设置板夹仓-仓5-Y轴坐标", this::PlatesBoxPosMgr_setYSpacing) - .setParamVal("spacing", () -> platesBoxPosParamMgr.getYSpacing()); - page.addFunction("设置板夹仓-推板-到位坐标", this::PlatesBoxPosMgr_setPushEndXPos) - .setParamVal("pos", () -> platesBoxPosParamMgr.getPushEndXPos()); - - page.newGroup("光学模组基础坐标.校准"); - page.addFunction("设置<拉板>目标位置", this::OptModulePosMgr_setPullerTargetPos) - .setParamVal("pos", () -> optModuleParamsMgr.getPullerTargetPos()); - page.addFunction("设置<光学扫描器>丢板坐标", this::OptModulePosMgr_setOptScanerDropPos) - .setParamVal("pos", () -> optModuleParamsMgr.getOptScanerDropPos()); - page.addFunction("设置<光学扫描器>扫描待机位", this::OptModulePosMgr_setOptScanerScandbyPos) - .setParamVal("pos", () -> optModuleParamsMgr.getOptScanerScandbyPos()); - - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/pos_calibration/P20HbotTipPosCalibrationPage.java b/src/main/java/a8k/extui/page/pos_calibration/P20HbotTipPosCalibrationPage.java deleted file mode 100644 index 732d52d..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P20HbotTipPosCalibrationPage.java +++ /dev/null @@ -1,100 +0,0 @@ -package a8k.extui.page.pos_calibration; - - -import a8k.app.a8ktype.device.Pos3d; -import a8k.app.a8ktype.device.TipGroup; -import a8k.app.a8ktype.type.TipPosConfig; -import a8k.app.service.param.HbotFixedPosParamMgr; -import a8k.app.service.param.HbotTipPosMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P20HbotTipPosCalibrationPage { - @Resource - HbotTipPosMgr hbotTipPosMgr; - - @Resource - HbotFixedPosParamMgr hbotFixedPosParamMgr; - - - public void setTipPos000(TipGroup tipGroup, Integer x, Integer y, Integer z) { - var tip000 = new Pos3d(x, y, z); - TipPosConfig poscfg = hbotTipPosMgr.getTipPosCfg(tipGroup); - poscfg.tip000 = tip000; - hbotTipPosMgr.setTipPosCfg(tipGroup, poscfg); - } - - public void setTipG1Pos000(Integer x, Integer y, Integer z) { - setTipPos000(TipGroup.TipG1, x, y, z); - } - - public void setTipG2Pos000(Integer x, Integer y, Integer z) { - setTipPos000(TipGroup.TipG2, x, y, z); - } - - public void setTipG3Pos000(Integer x, Integer y, Integer z) { - setTipPos000(TipGroup.TipG3, x, y, z); - } - - public void setSpacingXAndSpacingY(Double spacingX, Double spacingY) { - for (var tipgroup : TipGroup.values()) { - var cfg = hbotTipPosMgr.getTipPosCfg(tipgroup); - cfg.spaceingX = spacingX; - cfg.spaceingY = spacingY; - hbotTipPosMgr.setTipPosCfg(tipgroup, cfg); - } - } - - public void setDropPos(Integer x, Integer y, Integer z) { - var dropPos = new Pos3d(x, y, z); - hbotTipPosMgr.setDropTipPos(dropPos); - } - - public void setDropLiquidPos(Integer x, Integer y, Integer z) { - Pos3d pos = new Pos3d(x, y, z); - hbotFixedPosParamMgr.setDropLiquidPos(pos); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - - page.newGroup("设置"); - page.addFunction("设置TipG1-000坐标", this::setTipG1Pos000) - .setParamVal("x", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).tip000.x) - .setParamVal("y", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).tip000.y) - .setParamVal("z", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).tip000.z); - - page.addFunction("设置TipG2-000坐标", this::setTipG2Pos000) - .setParamVal("x", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG2).tip000.x) - .setParamVal("y", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG2).tip000.y) - .setParamVal("z", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG2).tip000.z); - - page.addFunction("设置TipG3-000坐标", this::setTipG3Pos000) - .setParamVal("x", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG3).tip000.x) - .setParamVal("y", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG3).tip000.y) - .setParamVal("z", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG3).tip000.z); - - page.addFunction("设置Tip间距", this::setSpacingXAndSpacingY) - .setParamVal("spacingX", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).spaceingX) - .setParamVal("spacingY", () -> hbotTipPosMgr.getTipPosCfg(TipGroup.TipG1).spaceingY); - page.addFunction("设置Tip丢弃位置", this::setDropPos) - .setParamVal("x", () -> hbotTipPosMgr.getDropTipPos().x) - .setParamVal("y", () -> hbotTipPosMgr.getDropTipPos().y) - .setParamVal("z", () -> hbotTipPosMgr.getDropTipPos().z); - page.addFunction("设置滴液位", this::setDropLiquidPos) - .setParamVal("x", () -> hbotFixedPosParamMgr.getDropLiquidPos().x) - .setParamVal("y", () -> hbotFixedPosParamMgr.getDropLiquidPos().y) - .setParamVal("z", () -> hbotFixedPosParamMgr.getDropLiquidPos().z); - extApiPageMgr.addPage(page); - } - -} diff --git a/src/main/java/a8k/extui/page/pos_calibration/P21HbotLittleBSPosCalibrationPage.java b/src/main/java/a8k/extui/page/pos_calibration/P21HbotLittleBSPosCalibrationPage.java deleted file mode 100644 index f0aa4ea..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P21HbotLittleBSPosCalibrationPage.java +++ /dev/null @@ -1,109 +0,0 @@ -package a8k.extui.page.pos_calibration; - -import a8k.app.a8ktype.device.Pos2d; -import a8k.app.a8ktype.param.hbotpos.HbotLittleBSPos; -import a8k.app.service.param.HbotLittleBSPosMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P21HbotLittleBSPosCalibrationPage { - @Resource - HbotLittleBSPosMgr hbotLittleBSPosMgr; - - @Resource - ExtApiPageMgr extApiPageMgr; - - - public void setGroupDxAndDy(Double dx, Double dy) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.GroupDX, dx); - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.GroupDY, dy); - } - - public void setLittleBufferG0P00(Integer x, Integer y) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBufferGroup0_000Pos, new Pos2d(x, y)); - } - - public void setProbeSubstanceG0P00(Integer x, Integer y) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstanceGroup0_000Pos, new Pos2d(x, y)); - } - - public void setLittleBufferDXDY(Double dx, Double dy) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBufferDX, dx); - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBufferDY, dy); - } - - public void setProbeSubstanceDXDY(Double dx, Double dy) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstanceDX, dx); - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstanceDY, dy); - } - - public void setLittleBSPierceXYAppendDistance(Double distance) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBSPierceXYAppendDistance, distance); - } - - public void setProbeSubstancePierceXYAppendDistance(Double distance) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstancePierceXYAppendDistance, distance); - - } - - public void setLittleBSPierceZPos(Integer z) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBSPierceZPos, z); - } - - public void setLittleBSSampleZPos(Integer z) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.LittleBSSampleZPos, z); - } - - public void setProbeSubstancePierceZPos(Integer z) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstancePierceZPos, z); - } - - public void setProbeSubstanceSampleZPos(Integer z) { - hbotLittleBSPosMgr.setParam(HbotLittleBSPos.ProbeSubstanceSampleZPos, z); - } - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.newGroup("公共"); - page.addFunction("设置耗材组之间间距", this::setGroupDxAndDy). - setParamVal("dx", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.GroupDX, Double.class)). - setParamVal("dy", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.GroupDY, Double.class)); - - page.newGroup("小瓶缓冲液"); - page.addFunction("设置G0P0坐标", this::setLittleBufferG0P00). - setParamVal("x", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBufferGroup0_000Pos, Pos2d.class).x). - setParamVal("y", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBufferGroup0_000Pos, Pos2d.class).y); - page.addFunction("设置X间距Y间距", this::setLittleBufferDXDY). - setParamVal("dx", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBufferDX, Double.class)). - setParamVal("dy", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBufferDY, Double.class)); - page.addFunction("设置刺破XY附加距离", this::setLittleBSPierceXYAppendDistance). - setParamVal("distance", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBSPierceXYAppendDistance, Double.class)); - page.addFunction("设置取样Z坐标", this::setLittleBSSampleZPos). - setParamVal("z", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBSSampleZPos, Integer.class)); - page.addFunction("设置刺破Z坐标", this::setLittleBSPierceZPos). - setParamVal("z", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.LittleBSPierceZPos, Integer.class)); - - page.newGroup("探测物质"); - page.addFunction("设置G0P0坐标", this::setProbeSubstanceG0P00). - setParamVal("x", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceGroup0_000Pos, Pos2d.class).x). - setParamVal("y", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceGroup0_000Pos, Pos2d.class).y); - page.addFunction("设置X间距Y间距", this::setProbeSubstanceDXDY). - setParamVal("dx", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceDX, Double.class)). - setParamVal("dy", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceDY, Double.class)); - page.addFunction("设置刺破XY附加距离", this::setProbeSubstancePierceXYAppendDistance). - setParamVal("distance", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstancePierceXYAppendDistance, Double.class)); - page.addFunction("设置取样Z坐标", this::setProbeSubstanceSampleZPos). - setParamVal("z", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstanceSampleZPos, Integer.class)); - page.addFunction("设置刺破Z坐标", this::setProbeSubstancePierceZPos). - setParamVal("z", hbotLittleBSPosMgr.getParam(HbotLittleBSPos.ProbeSubstancePierceZPos, Integer.class)); - - - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/pos_calibration/P23HbotLargeBottleBSPosCalibrationPage.java b/src/main/java/a8k/extui/page/pos_calibration/P23HbotLargeBottleBSPosCalibrationPage.java deleted file mode 100644 index ab2893b..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P23HbotLargeBottleBSPosCalibrationPage.java +++ /dev/null @@ -1,62 +0,0 @@ -package a8k.extui.page.pos_calibration; - -import a8k.app.a8ktype.device.Pos2d; -import a8k.app.a8ktype.param.hbotpos.HbotLargeBottleBSPos; -import a8k.app.service.param.HbotLargeBottleBSPosMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P23HbotLargeBottleBSPosCalibrationPage { - @Resource - HbotLargeBottleBSPosMgr hbotLargeBottleBSPosMgr; - - public void setConsumable0Pos(Integer x, Integer y) { - hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBuffer_0Pos, new Pos2d(x, y)); - } - - public void setConsumableDX(Double dx) { - hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBuffer_DX, dx); - } - - public void setConsumableDY(Double dy) { - hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBuffer_DY, dy); - } - - public void setLLDStartZAxisPos(Integer z) { - hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBottleBufferLLDStartZAxisPos, Double.valueOf(z)); - } - - public void setBottomZAxisPos(Integer z) { - hbotLargeBottleBSPosMgr.setParam(HbotLargeBottleBSPos.LargeBottleBufferBottomZAxisPos, Double.valueOf(z)); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.newGroup("坐标设置"); - page.addFunction("设置0号耗材坐标", this::setConsumable0Pos) - .setParamVal("x", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBuffer_0Pos, Pos2d.class).x) - .setParamVal("y", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBuffer_0Pos, Pos2d.class).y); - page.addFunction("设置LLD开始Z轴位置", this::setLLDStartZAxisPos) - .setParamVal("z", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBottleBufferLLDStartZAxisPos, Double.class).intValue()); - page.addFunction("设置瓶底Z轴位置", this::setBottomZAxisPos) - .setParamVal("z", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBottleBufferBottomZAxisPos, Double.class).intValue()); - - page.newGroup("常量设置"); - page.addFunction("设置Dx", this::setConsumableDX) - .setParamVal("dx", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBuffer_DX, Double.class)); - page.addFunction("设置Dy", this::setConsumableDY) - .setParamVal("dy", hbotLargeBottleBSPosMgr.getParam(HbotLargeBottleBSPos.LargeBuffer_DY, Double.class)); - - extApiPageMgr.addPage(page); - } - -} diff --git a/src/main/java/a8k/extui/page/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java b/src/main/java/a8k/extui/page/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java deleted file mode 100644 index 9b9aa26..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P24Hbot2DCodeScanPosCalibrationPage.java +++ /dev/null @@ -1,51 +0,0 @@ -package a8k.extui.page.pos_calibration; - -import a8k.app.a8ktype.device.Pos2d; -import a8k.app.service.param.Hbot2DCodeScanParamMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P24Hbot2DCodeScanPosCalibrationPage { - @Resource - Hbot2DCodeScanParamMgr hbot2DCodeScanParamMgr; - - - public void setPBScanPosX(Integer x, Integer y) { - hbot2DCodeScanParamMgr.setPBScanPosX(new Pos2d(x, y)); - } - - public void setLittBSX(Integer x, Integer y) { - hbot2DCodeScanParamMgr.setLittBSX(new Pos2d(x, y)); - } - - public void setLarBSX(Integer x, Integer y) { - hbot2DCodeScanParamMgr.setLarBSX(new Pos2d(x, y)); - } - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - - page.newGroup(""); - page.addFunction("设置PB扫描位置", this::setPBScanPosX) - .setParamVal("x", () -> hbot2DCodeScanParamMgr.getPBScanPosX(0).x) - .setParamVal("y", () -> hbot2DCodeScanParamMgr.getPBScanPosX(0).y); - page.addFunction("设置小瓶缓冲液0位置", this::setLittBSX) - .setParamVal("x", () -> hbot2DCodeScanParamMgr.getLittBSX(0).x) - .setParamVal("y", () -> hbot2DCodeScanParamMgr.getLittBSX(0).y); - page.addFunction("设大瓶缓冲液0位置", this::setLarBSX) - .setParamVal("x", () -> hbot2DCodeScanParamMgr.getLarBSX(0).x) - .setParamVal("y", () -> hbot2DCodeScanParamMgr.getLarBSX(0).y); - - - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/pos_calibration/P25HbotSamplePosCalibrationPage.java b/src/main/java/a8k/extui/page/pos_calibration/P25HbotSamplePosCalibrationPage.java deleted file mode 100644 index 763ebf4..0000000 --- a/src/main/java/a8k/extui/page/pos_calibration/P25HbotSamplePosCalibrationPage.java +++ /dev/null @@ -1,172 +0,0 @@ -package a8k.extui.page.pos_calibration; - -import a8k.app.a8ktype.device.Pos3d; -import a8k.app.a8ktype.param.hbotpos.HbotSamplePos; -import a8k.app.service.param.HbotSamplePosParamMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P25HbotSamplePosCalibrationPage { - @Resource - HbotSamplePosParamMgr hbotSamplePosParamMgr; - - public void setEmergencyTubeSamplePos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.EmergencyTubeSamplePos, new Pos3d(x, y, z)); - } - - public void setEmergencyTubeSampleEndPos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.EmergencyTubeSampleEndPos, new Pos3d(x, y, z)); - } - - public void setBloodHTubeSamplePos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.BloodHTubeSamplePos, new Pos3d(x, y, z)); - } - - public void setBloodHTubeSampleEndPos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.BloodHTubeSampleEndPos, new Pos3d(x, y, z)); - } - - public void setBloodSTubeSamplePos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.BloodSTubeSamplePos, new Pos3d(x, y, z)); - } - - public void setBloodSTubeSampleEndPos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.BloodSTubeSampleEndPos, new Pos3d(x, y, z)); - } - - public void setMiniTubeSamplePos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.MiniTubeSamplePos, new Pos3d(x, y, z)); - } - - public void setMinitubeSampleEndPos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.MinitubeSampleEndPos, new Pos3d(x, y, z)); - } - - public void setMiniBloodSamplePos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.MiniBloodSamplePos, new Pos3d(x, y, z)); - } - - public void setMiniBloodSampleEndPos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.MiniBloodSampleEndPos, new Pos3d(x, y, z)); - } - - public void setBulltube1P5SamplePos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.Bulltube1P5SamplePos, new Pos3d(x, y, z)); - } - - public void setBulltube1P5SampleEndPos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.Bulltube1P5SampleEndPos, new Pos3d(x, y, z)); - } - - public void setBulltube0P5SamplePos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.Bulltube0P5SamplePos, new Pos3d(x, y, z)); - } - - public void setBulltube0P5SampleEndPos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.Bulltube0P5SampleEndPos, new Pos3d(x, y, z)); - } - - public void setStoolTestTubeSamplePos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.StoolTestTubeSamplePos, new Pos3d(x, y, z)); - } - - public void setStoolTestTubeSampleEndPos(Integer x, Integer y, Integer z) { - hbotSamplePosParamMgr.setSamplePos(HbotSamplePos.StoolTestTubeSampleEndPos, new Pos3d(x, y, z)); - } - - - @Resource - ExtApiPageMgr extApiPageMgr; - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - - page.newGroup("急诊位"); - page.addFunction("取样位置", this::setEmergencyTubeSamplePos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSamplePos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSamplePos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSamplePos).z); - page.addFunction("取样结束位置", this::setEmergencyTubeSampleEndPos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSampleEndPos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSampleEndPos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.EmergencyTubeSampleEndPos).z); - - page.newGroup("全血高试管"); - page.addFunction("取样位置", this::setBloodHTubeSamplePos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSamplePos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSamplePos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSamplePos).z); - page.addFunction("取样结束位置", this::setBloodHTubeSampleEndPos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSampleEndPos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSampleEndPos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodHTubeSampleEndPos).z); - - page.newGroup("全血低试管"); - page.addFunction("取样位置", this::setBloodSTubeSamplePos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSamplePos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSamplePos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSamplePos).z); - page.addFunction("取样结束位置", this::setBloodSTubeSampleEndPos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSampleEndPos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSampleEndPos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.BloodSTubeSampleEndPos).z); - - page.newGroup("迷你试管"); - page.addFunction("取样位置", this::setMiniTubeSamplePos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniTubeSamplePos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniTubeSamplePos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniTubeSamplePos).z); - page.addFunction("取样结束位置", this::setMinitubeSampleEndPos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MinitubeSampleEndPos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MinitubeSampleEndPos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MinitubeSampleEndPos).z); - - page.newGroup("阳普管"); - page.addFunction("取样位置", this::setMiniBloodSamplePos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSamplePos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSamplePos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSamplePos).z); - page.addFunction("取样结束位置", this::setMiniBloodSampleEndPos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSampleEndPos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSampleEndPos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.MiniBloodSampleEndPos).z); - - page.newGroup("子弹头试管1.5mL"); - page.addFunction("取样位置", this::setBulltube1P5SamplePos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SamplePos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SamplePos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SamplePos).z); - page.addFunction("取样结束位置", this::setBulltube1P5SampleEndPos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SampleEndPos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SampleEndPos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube1P5SampleEndPos).z); - - page.newGroup("子弹头试管0.5mL"); - page.addFunction("取样位置", this::setBulltube0P5SamplePos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SamplePos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SamplePos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SamplePos).z); - page.addFunction("取样结束位置", this::setBulltube0P5SampleEndPos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SampleEndPos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SampleEndPos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.Bulltube0P5SampleEndPos).z); - - page.newGroup("粪便试管"); - page.addFunction("取样位置", this::setStoolTestTubeSamplePos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSamplePos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSamplePos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSamplePos).z); - page.addFunction("取样结束位置", this::setStoolTestTubeSampleEndPos) - .setParamVal("x", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSampleEndPos).x) - .setParamVal("y", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSampleEndPos).y) - .setParamVal("z", () -> hbotSamplePosParamMgr.getSamplePos(HbotSamplePos.StoolTestTubeSampleEndPos).z); - - extApiPageMgr.addPage(page); - } -} diff --git a/src/main/java/a8k/extui/page/special_verification/P01PipetteGunVerification.java b/src/main/java/a8k/extui/page/special_verification/P01PipetteGunVerification.java deleted file mode 100644 index 79d1064..0000000 --- a/src/main/java/a8k/extui/page/special_verification/P01PipetteGunVerification.java +++ /dev/null @@ -1,219 +0,0 @@ -package a8k.extui.page.special_verification; - -import a8k.app.constant.AppConstant; -import a8k.app.service.param.HbotTipPosMgr; -import a8k.app.service.param.PipetteGunExParamMgr; -import a8k.extui.mgr.ExtApiPageMgr; -import a8k.extui.type.ExtUIPageCfg; -import a8k.app.hardware.type.LldType; -import a8k.app.service.lowerctrl.HbotMoveExCtrlService; -import a8k.app.hardware.driver.PipetteCtrlDriver; -import a8k.app.hardware.driver.type.PipetteRegIndex; -import a8k.app.service.lowerctrl.HbotMoveCtrlService; -import a8k.app.a8ktype.device.ConsumableGroup; -import a8k.app.a8ktype.device.Pos3d; -import a8k.app.a8ktype.exception.AppException; -import a8k.app.a8ktype.device.TipPos; -import a8k.app.a8ktype.device.TipGroup; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class P01PipetteGunVerification { - @Resource - HbotTipPosMgr hbotTipPosMgr; - - @Resource - PipetteCtrlDriver pipetteCtrlDriver; - @Resource - HbotMoveCtrlService hbotMoveCtrlService; - @Resource - HbotMoveExCtrlService hbotMoveExCtrlService; - - @Resource - PipetteGunExParamMgr pipetteGunExParamMgr; - - @Resource - ExtApiPageMgr extApiPageMgr; - - Integer tipNum = 0; - Integer liquidPos = null; - Boolean stopFlag = false; - - @PostConstruct - void init() { - ExtUIPageCfg page = new ExtUIPageCfg(this); - page.newGroup("基础"); - page.addFunction("测试准备", this::initTestMode); - page.addFunction("停止测试", this::stopTest); - page.addFunction("设置校准系数", this::calibration) - .setParamVal("coefficientA", () -> pipetteGunExParamMgr.getCoefficientA()) - .setParamVal("coefficientB", () -> pipetteGunExParamMgr.getCoefficientB()); - page.newGroup("测试0"); - page.addFunction("取一次10ul", this::aspirate10ul); - page.addFunction("取一次75ul", this::aspirate75ul); - page.newGroup("测试1"); - page.addFunction("取一次5ul", this::aspirate5ul); - page.addFunction("取一次30ul", this::aspirate30ul); - page.addFunction("取一次50ul", this::aspirate50ul); - page.addFunction("停止测试", this::stopTest); - - extApiPageMgr.addPage(page); - } - - public void pipetteGunInit() throws AppException { - pipetteCtrlDriver.pipetteInitDeviceBlock(); - } - - public void initTestMode() throws AppException { - pipetteCtrlDriver.zMotorEnable(1); - hbotMoveCtrlService.enable(1); - pipetteCtrlDriver.zMotorMoveZeroBlock(); - hbotMoveCtrlService.moveToZero(); - hbotMoveCtrlService.hbotMoveTo(hbotTipPosMgr.getDropTipPos()); - pipetteGunInit(); - hbotMoveCtrlService.hbotMoveTo(new Pos3d(0, 0, 0)); - tipNum = AppConstant.TIP_NUM; - } - - public void stopTest() throws AppException { - pipetteCtrlDriver.zMotorEnable(0); - hbotMoveCtrlService.enable(0); - } - - public void calibration(Double coefficientA, Double coefficientB) { - pipetteGunExParamMgr.setVolumeCalibrationCoefficient(coefficientA, coefficientB); - } - - - Boolean takeOneTip() throws AppException { - hbotMoveCtrlService.hbotMoveTo(hbotTipPosMgr.getDropTipPos()); - pipetteGunInit(); - TipPos tipPos = new TipPos(); - tipPos.group = TipGroup.TipG1; - if (tipNum == 0) { - tipNum = 120; - } - - tipPos.index = AppConstant.TIP_NUM - tipNum; - tipNum--; - log.info(" 取TIP {}", tipPos); - return hbotMoveExCtrlService.takeTipNoCheck(tipPos.group, tipPos.index); - } - - void takeTip() throws AppException { - while (!pipetteCtrlDriver.isHasTip()) { - if (takeOneTip()) { - break; - } - } - } - - public void pumpMoveTo(Integer pumpvmax, Double ul) throws AppException { - pipetteCtrlDriver.liquidOperationClearParams(); - pipetteCtrlDriver.liquidOperationSetGunRunParams(14, 14, 0, 1000, pumpvmax); - pipetteCtrlDriver.liquidOperationFreshParams(); - pipetteCtrlDriver.pipettePumpMoveTo(ul); - } - - public Integer lld() throws AppException { - liquidPos = 0; - hbotMoveExCtrlService.moveToLargeBSSamplePosXY(ConsumableGroup.CG1); - pipetteCtrlDriver.zMotorMoveToBlock(0); - pumpMoveTo(8000, 0.0); - pumpMoveTo(300, 100.0); - pumpMoveTo(8000, 0.0); - pumpMoveTo(300, 50.0); - pipetteCtrlDriver.liquidOperationClearParams(); - pipetteCtrlDriver.liquidOperationSetGunRunParams(14, 14, 0, 900, 30); - pipetteCtrlDriver.liquidOperationSetZMotorRunParams(0, 500, 60); - pipetteCtrlDriver.liquidOperationFreshParams(); - pipetteCtrlDriver.pipetteLld(LldType.kplld, 0, 30); - if (pipetteCtrlDriver.lldIsDetectLiquid()) { - liquidPos = pipetteCtrlDriver.getReg(PipetteRegIndex.kreg_pipette_zm_pos); - } - pipetteCtrlDriver.zMotorMoveToBlock(0); - pumpMoveTo(8000, 0.0); - return liquidPos; - } - - public void takeLiquid(Double ul) throws AppException { - hbotMoveExCtrlService.moveToLargeBSSamplePosXY(ConsumableGroup.CG1); - pipetteCtrlDriver.zMotorMoveToBlock(0); - pumpMoveTo(8000, 0.0); - pumpMoveTo(8000, 150.0); - pipetteCtrlDriver.zMotorMoveToBlock(liquidPos); - pipetteCtrlDriver.liquidOperationClearParams(); - pipetteCtrlDriver.liquidOperationSetGunRunParams(14, 14, 0, 900, 100); - pipetteCtrlDriver.liquidOperationSetZMotorRunParams(0, 300, 10); - pipetteCtrlDriver.liquidOperationFreshParams(); - ul = pipetteGunExParamMgr.calibrateVolume(ul); - log.info("取液体 {}", ul); - pipetteCtrlDriver.pipetteAspirate(ul); - pipetteCtrlDriver.zMotorMoveToBlock(0); - } - - public void distributeLiquid() throws AppException { - hbotMoveExCtrlService.moveToLargeBSSamplePosXY(ConsumableGroup.CG6); - pipetteCtrlDriver.zMotorMoveToBlock(50); - pumpMoveTo(8000, 0.0); - pipetteCtrlDriver.zMotorMoveToBlock(0); - } - - public void resetPos() throws AppException { - hbotMoveExCtrlService.moveToLargeBSSamplePosXY(ConsumableGroup.CG2); - } - - public void aspirate10ul() throws AppException { - takeTip(); - lld(); - if (liquidPos == 0) - throw AppException.ofAECodeError("未检测到液体"); - takeLiquid(10.0); - distributeLiquid(); - resetPos(); - } - - public void aspirate75ul() throws AppException { - takeTip(); - lld(); - if (liquidPos == 0) - throw AppException.ofAECodeError("未检测到液体"); - takeLiquid(75.0); - distributeLiquid(); - resetPos(); - } - - public void aspirate5ul() throws AppException { - takeTip(); - lld(); - if (liquidPos == 0) - throw AppException.ofAECodeError("未检测到液体"); - takeLiquid(5.0); - distributeLiquid(); - resetPos(); - } - - public void aspirate30ul() throws AppException { - takeTip(); - lld(); - if (liquidPos == 0) - throw AppException.ofAECodeError("未检测到液体"); - takeLiquid(30.0); - distributeLiquid(); - resetPos(); - } - - public void aspirate50ul() throws AppException { - takeTip(); - lld(); - if (liquidPos == 0) - throw AppException.ofAECodeError("未检测到液体"); - takeLiquid(50.0); - distributeLiquid(); - resetPos(); - } -} diff --git a/src/main/java/a8k/extui/page/special_verification/P02A8kTemperaturaVerfication.java b/src/main/java/a8k/extui/page/special_verification/P02A8kTemperaturaVerfication.java deleted file mode 100644 index 9a1315c..0000000 --- a/src/main/java/a8k/extui/page/special_verification/P02A8kTemperaturaVerfication.java +++ /dev/null @@ -1,168 +0,0 @@ -package a8k.extui.page.special_verification; - -import a8k.app.a8ktype.param.TemperatureCtrlParam; -import a8k.app.service.background.BackgroudProcessCtrlService; -import a8k.app.service.param.TemperatureCtrlParamMgr; -import a8k.extui.type.ret.ExtApiCurve; -import a8k.extui.factory.CurveBuilder; -import a8k.extui.type.ExtApiStatu; -import a8k.app.service.background.TemperatureCtrlService; -import a8k.app.hardware.driver.TemperatureControlDriver; -import a8k.app.a8ktype.exception.AppException; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.Resource; -import jakarta.annotation.PostConstruct; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - - -/** - * - * - */ -@Component -@Slf4j -public class P02A8kTemperaturaVerfication { - @Resource - ExtApiPageMgr extApiPageMgr; - - @Resource - TemperatureCtrlService temperatureCtrlService; - @Resource - TemperatureControlDriver temperatureControlDriver; - @Resource - TemperatureCtrlParamMgr temperatureCtrlParamMgr; - @Resource - BackgroudProcessCtrlService backgroudProcessCtrlService; - - - List incubateBoxTemperatureCurve = new ArrayList<>(); - List plateBoxTemperatureCurve = new ArrayList<>(); - - Thread tempSampleThread; - - Double incubateBoxTemperatureCache = 0.0; - Double plateBoxTemperatureCache = 0.0; - Integer hasStartedTimeMS = 0; - Double targetTemp; - Boolean workingFlag = false; - - - @ExtApiStatu(name = "", group = "孵育盘温度", order = 3) - public Double readIncubateBoxTemperature() throws AppException { - return (incubateBoxTemperatureCache); - } - - @ExtApiStatu(name = "", group = "板夹仓温度", order = 4) - public Double readPlateBoxTemperature() throws AppException { - return (plateBoxTemperatureCache); - } - - @ExtApiStatu(name = "", group = "状态", order = 5) - public String hasStartedTime() { - int S = hasStartedTimeMS / 1000; - return String.format("%s:%s:%s", (int) Math.floor((double) S / 3600), (int) Math.floor((double) (S % 3600) / 60), S % 60); - } - - - @PostConstruct - public void init() throws NoSuchMethodException { - var page = extApiPageMgr.newPage(this); - - page.newGroup("基础"); - page.addFunction("设置孵育盘温度偏移", this::setIncubatorBoxTemperatureOff) - .setParamVal("offset", temperatureCtrlParamMgr.getParam(TemperatureCtrlParam.IncubatorTCMTempOffset)); - page.addFunction("设置板夹仓温度偏移", this::setPlatesBoxTCMTempOffset) - .setParamVal("offset", temperatureCtrlParamMgr.getParam(TemperatureCtrlParam.PlatesBoxTCMTempOffset)); - - page.newGroup("操作"); - page.addFunction("启动温度控制", this::startCtrl); - page.addFunction("停止温度控制", this::stopCtrl); - page.addFunction("查看孵育盘温度曲线", this::showIncubateBoxTemperatureCurve); - page.addFunction("查看板夹仓温度曲线", this::showPlateBoxTemperatureCurve); - extApiPageMgr.addPage(page); - } - - public void setIncubatorBoxTemperatureOff(Double offset) throws AppException, InterruptedException { - temperatureCtrlParamMgr.setParam(TemperatureCtrlParam.IncubatorTCMTempOffset, offset); - if (workingFlag) { - startCtrl(targetTemp.intValue()); - } - } - - - public void setPlatesBoxTCMTempOffset(Double offset) throws AppException, InterruptedException { - temperatureCtrlParamMgr.setParam(TemperatureCtrlParam.PlatesBoxTCMTempOffset, offset); - if (workingFlag) { - startCtrl(targetTemp.intValue()); - } - } - - - synchronized public void startCtrl(Integer targetTemperature) throws AppException, InterruptedException { - backgroudProcessCtrlService.stopProcess(); - - temperatureCtrlService.stopTemperatureControl(); - temperatureCtrlService.startFixTemperatureControl(targetTemperature); - if (tempSampleThread != null) { - tempSampleThread.interrupt(); - tempSampleThread.join(); - } - hasStartedTimeMS = 0; - targetTemp = (double) targetTemperature; - - tempSampleThread = new Thread(() -> { - while (true) { - try { - Thread.sleep(2000); - hasStartedTimeMS += 2000; - incubateBoxTemperatureCache = temperatureControlDriver.readIncubateBoxTemperature(); - plateBoxTemperatureCache = temperatureControlDriver.readPlateBoxTemperature(); - addIncubateBoxTemperatureCurve(incubateBoxTemperatureCache); - addPlateBoxTemperatureCurve(plateBoxTemperatureCache); - } catch (InterruptedException ignored) { - break; - } catch (Exception e) { - log.error("温度采样线程异常", e); - } - } - }); - tempSampleThread.start(); - workingFlag = true; - } - - synchronized public void stopCtrl() throws AppException, InterruptedException { - temperatureCtrlService.stopTemperatureControl(); - if (tempSampleThread != null) { - tempSampleThread.interrupt(); - tempSampleThread.join(); - } - workingFlag = false; - } - - public ExtApiCurve showIncubateBoxTemperatureCurve() { - return CurveBuilder.buidCurve("孵育盘温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, incubateBoxTemperatureCurve); - } - - public ExtApiCurve showPlateBoxTemperatureCurve() { - return CurveBuilder.buidCurve("板夹仓温度曲线", "time", "value", targetTemp - 10, targetTemp + 10, plateBoxTemperatureCurve); - } - - - private void addIncubateBoxTemperatureCurve(Double temperature) { - incubateBoxTemperatureCurve.add(new Object[]{System.currentTimeMillis(), temperature}); - if (incubateBoxTemperatureCurve.size() > 3000) { - incubateBoxTemperatureCurve.remove(0); - } - } - - private void addPlateBoxTemperatureCurve(Double temperature) { - plateBoxTemperatureCurve.add(new Object[]{System.currentTimeMillis(), temperature}); - if (plateBoxTemperatureCurve.size() > 3000) { - plateBoxTemperatureCurve.remove(0); - } - } -} diff --git a/src/main/java/a8k/extui/page/stress_test/PipetteGunStressTest.java b/src/main/java/a8k/extui/page/stress_test/PipetteGunStressTest.java deleted file mode 100644 index ea3e6c4..0000000 --- a/src/main/java/a8k/extui/page/stress_test/PipetteGunStressTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package a8k.extui.page.stress_test; - -import a8k.app.a8ktype.exception.AppException; -import a8k.app.hardware.driver.PipetteCtrlDriver; -import a8k.extui.mgr.ExtApiPageMgr; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class PipetteGunStressTest { - - @Resource - PipetteCtrlDriver pipetteCtrlDriver; - - @Resource - ExtApiPageMgr extApiPageMgr; - - - Boolean workFlag = false; - - @Scheduled(fixedRate = 10) - void pressTest() { - if (!workFlag) { - return; - } - try { - pipetteCtrlDriver.liquidOperationClearParams(); - pipetteCtrlDriver.liquidOperationSetGunRunParams(14, 14, 0, 1000, 8000); - pipetteCtrlDriver.liquidOperationSetZMotorRunParams(0, 0, 123); - pipetteCtrlDriver.liquidOperationFreshParams(); - log.info("pressTest"); - } catch (AppException e) { - log.error("pressTest error", e); - } - } - - public void startWork() { - workFlag = true; - } - - public void stopWork() { - workFlag = false; - } - - @PostConstruct - public void init() { - var page = extApiPageMgr.newPage(this); - page.addFunction("startWork", this::startWork); - page.addFunction("stopWork", this::stopWork); - extApiPageMgr.addPage(page); - workFlag = false; - } - -}