diff --git a/src/main/java/a8k/controler/engineer/utils/EnginnerPageTabOrder.java b/src/main/java/a8k/controler/engineer/utils/EnginnerPageTabOrder.java index 9ec977a..b39e723 100644 --- a/src/main/java/a8k/controler/engineer/utils/EnginnerPageTabOrder.java +++ b/src/main/java/a8k/controler/engineer/utils/EnginnerPageTabOrder.java @@ -1,6 +1,21 @@ package a8k.controler.engineer.utils; + public enum EnginnerPageTabOrder { + + AppCtrlService, + AppConsumablesMgrService, + AppProjectItemMgrService, + AppSettingsMgr, + AppStateMgrService, + AppUserMgrService, + AppCfgMgrService, + AppFrontEndEventRouter, + SamplesPreProcessModuleCtrlService, ReactionPlatesTransmitCtrlService, + MotorTubeRackMoveCtrlService, + HbotControlService, + HardwareTestScript, + Max; } diff --git a/src/main/java/a8k/service/AddSampleService.java b/src/main/java/a8k/service/AddSampleService.java deleted file mode 100644 index 1dba6c3..0000000 --- a/src/main/java/a8k/service/AddSampleService.java +++ /dev/null @@ -1,4 +0,0 @@ -package a8k.service; - -public class AddSampleService { -} diff --git a/src/main/java/a8k/service/appbase/A8kDeviceState.java b/src/main/java/a8k/service/appbase/A8kDeviceState.java index da2173c..fe5b130 100644 --- a/src/main/java/a8k/service/appbase/A8kDeviceState.java +++ b/src/main/java/a8k/service/appbase/A8kDeviceState.java @@ -1,7 +1,7 @@ package a8k.service.appbase; import a8k.db.ProjectInfo; -import a8k.service.appconsumable.base.ConsumableItemGroup; +import a8k.service.appconsumable.base.Consumables; import a8k.service.appbase.runstate.ReactingPlateRunState; import a8k.service.appbase.runstate.EmergencyPosRunState; import a8k.service.appbase.runstate.TubeHolderRunState; @@ -10,9 +10,9 @@ import java.util.List; public class A8kDeviceState { //耗材状态 - public ConsumableItemGroup consumable = new ConsumableItemGroup(); + public Consumables consumable = new Consumables(); //急诊为状态 - public EmergencyPosRunState emergencyPosRunState = new EmergencyPosRunState(); + public EmergencyPosRunState emergencyPosRunState = new EmergencyPosRunState(); //正在孵育的任务状态 public List incubatingPlateStates = null; //当前正在被处理的试管架状态 diff --git a/src/main/java/a8k/service/appcfgs/A8kDeviceCfgMgrService.java b/src/main/java/a8k/service/appcfgs/AppCfgMgrService.java similarity index 97% rename from src/main/java/a8k/service/appcfgs/A8kDeviceCfgMgrService.java rename to src/main/java/a8k/service/appcfgs/AppCfgMgrService.java index acf9f48..3c8d3ae 100644 --- a/src/main/java/a8k/service/appcfgs/A8kDeviceCfgMgrService.java +++ b/src/main/java/a8k/service/appcfgs/AppCfgMgrService.java @@ -12,8 +12,8 @@ import a8k.service.hardware.canbus.protocol.A8kEcode; import org.springframework.stereotype.Component; @Component -@EngineerPageTab(name = "A8kDeviceCfgMgrService") -public class A8kDeviceCfgMgrService { +@EngineerPageTab(name = "AppCfgMgrService") +public class AppCfgMgrService { A8kDeviceCfg deviceCfg = new A8kDeviceCfg(); diff --git a/src/main/java/a8k/service/appconsumable/AppConsumableMgrService.java b/src/main/java/a8k/service/appconsumable/AppConsumablesMgrService.java similarity index 72% rename from src/main/java/a8k/service/appconsumable/AppConsumableMgrService.java rename to src/main/java/a8k/service/appconsumable/AppConsumablesMgrService.java index 15d06fa..24b9cc7 100644 --- a/src/main/java/a8k/service/appconsumable/AppConsumableMgrService.java +++ b/src/main/java/a8k/service/appconsumable/AppConsumablesMgrService.java @@ -3,17 +3,18 @@ package a8k.service.appconsumable; import a8k.appbase.appret.AppRet; import a8k.controler.engineer.utils.EngineerPageTab; import a8k.controler.engineer.utils.EnginnerPageAction; +import a8k.controler.engineer.utils.EnginnerPageTabOrder; import a8k.service.ProjectColorAllocer; -import a8k.service.appconsumable.base.ConsumableItemGroup; +import a8k.service.appconsumable.base.Consumables; import a8k.service.appconsumable.base.ReactantItem; import a8k.service.appconsumable.base.TipGroupInfo; import a8k.service.appstate.AppStateMgrService; import jakarta.annotation.Resource; import org.springframework.stereotype.Component; -@EngineerPageTab(name = "AppConsumableMgrService") +@EngineerPageTab(name = "应用-耗材管理服务", order = EnginnerPageTabOrder.AppConsumablesMgrService) @Component -public class AppConsumableMgrService { +public class AppConsumablesMgrService { @Resource ProjectColorAllocer projectColorAllocer; @@ -23,8 +24,8 @@ public class AppConsumableMgrService { //扫描耗材 @EnginnerPageAction(name = "扫描耗材") - public AppRet scanningConsumables() { - ConsumableItemGroup var = new ConsumableItemGroup(); + public AppRet scanningConsumables() { + Consumables var = new Consumables(); for (int i = 0; i < 6; i++) { var.reactantItems[i] = new ReactantItem(); var.reactantItems[i].projId = "PROJECT_" + i; @@ -41,4 +42,9 @@ public class AppConsumableMgrService { stateMgrService.setConsumable(var); return AppRet.success(var); } + + @EnginnerPageAction(name = "获取耗材状态") + public AppRet getConsumables() { + return AppRet.success(stateMgrService.getConsumable()); + } } diff --git a/src/main/java/a8k/service/appconsumable/base/ConsumableItemGroup.java b/src/main/java/a8k/service/appconsumable/base/Consumables.java similarity index 86% rename from src/main/java/a8k/service/appconsumable/base/ConsumableItemGroup.java rename to src/main/java/a8k/service/appconsumable/base/Consumables.java index 0971b23..a5e6a20 100644 --- a/src/main/java/a8k/service/appconsumable/base/ConsumableItemGroup.java +++ b/src/main/java/a8k/service/appconsumable/base/Consumables.java @@ -2,13 +2,13 @@ package a8k.service.appconsumable.base; import java.util.Date; -public class ConsumableItemGroup { +public class Consumables { public Date scanDate = new Date(); public ReactantItem[] reactantItems = new ReactantItem[6]; public TipGroupInfo[] tip = new TipGroupInfo[3]; - public ConsumableItemGroup() { + public Consumables() { for (int i = 0; i < reactantItems.length; i++) { reactantItems[i] = new ReactantItem(); } diff --git a/src/main/java/a8k/service/appctrl/AppCtrlService.java b/src/main/java/a8k/service/appctrl/AppCtrlService.java index 55c008f..f7a1747 100644 --- a/src/main/java/a8k/service/appctrl/AppCtrlService.java +++ b/src/main/java/a8k/service/appctrl/AppCtrlService.java @@ -3,51 +3,54 @@ package a8k.service.appctrl; import a8k.appbase.appret.AppRet; import a8k.controler.engineer.utils.EngineerPageTab; import a8k.controler.engineer.utils.EnginnerPageAction; +import a8k.controler.engineer.utils.EnginnerPageTabOrder; +import org.slf4j.Logger; import org.springframework.stereotype.Component; -@EngineerPageTab(name = "AppCtrlService") +@EngineerPageTab(name = "应用-设备控制", order = EnginnerPageTabOrder.AppCtrlService) @Component public class AppCtrlService { + static final Logger logger = org.slf4j.LoggerFactory.getLogger(AppCtrlService.class); + static class ORDER { + static final int initDevice = 1; + } - @EnginnerPageAction(name = "初始化设备") + @EnginnerPageAction(name = "初始化设备", group = "设备基础控制", order = ORDER.initDevice) public AppRet initDevice() { return AppRet.success(); + } + //关机 + @EnginnerPageAction(name = "关机", group = "设备基础控制", order = 1) + public AppRet shutdown() { + return AppRet.success(); } //启动 - @EnginnerPageAction(name = "启动") + @EnginnerPageAction(name = "启动", group = "应用控制", groupOrder = 1, order = 1) public AppRet startProcess() { return AppRet.success(); } //暂停 - @EnginnerPageAction(name = "暂停") + @EnginnerPageAction(name = "暂停", group = "应用控制", order = 2) public AppRet pauseProcess() { return AppRet.success(); } //急停 - @EnginnerPageAction(name = "急停") + @EnginnerPageAction(name = "急停", group = "应用控制", order = 3) public AppRet forceStopProcess() { return AppRet.success(); } //停止 - @EnginnerPageAction(name = "停止") + @EnginnerPageAction(name = "停止", group = "应用控制", order = 4) public AppRet stopProcess() { return AppRet.success(); } - //关机 - @EnginnerPageAction(name = "关机") - public AppRet shutdown() { - return AppRet.success(); - } - - - } diff --git a/src/main/java/a8k/service/FrontEndEventRouter.java b/src/main/java/a8k/service/appfrontend/AppFrontEndEventRouter.java similarity index 88% rename from src/main/java/a8k/service/FrontEndEventRouter.java rename to src/main/java/a8k/service/appfrontend/AppFrontEndEventRouter.java index b6467f3..17f41af 100644 --- a/src/main/java/a8k/service/FrontEndEventRouter.java +++ b/src/main/java/a8k/service/appfrontend/AppFrontEndEventRouter.java @@ -1,4 +1,4 @@ -package a8k.service; +package a8k.service.appfrontend; import a8k.service.appeventbus.AppEventListener; import a8k.appbase.appret.AppRet; @@ -16,8 +16,8 @@ import java.util.Queue; @Component @EngineerPageTab(name = "FrontEndEventRouter") -public class FrontEndEventRouter implements AppEventListener { - static Logger logger = org.slf4j.LoggerFactory.getLogger(FrontEndEventRouter.class); +public class AppFrontEndEventRouter implements AppEventListener { + static Logger logger = org.slf4j.LoggerFactory.getLogger(AppFrontEndEventRouter.class); @Resource AppEventBusService eventBus; diff --git a/src/main/java/a8k/service/appstate/AppStateMgrService.java b/src/main/java/a8k/service/appstate/AppStateMgrService.java index 2e19806..7bec717 100644 --- a/src/main/java/a8k/service/appstate/AppStateMgrService.java +++ b/src/main/java/a8k/service/appstate/AppStateMgrService.java @@ -3,7 +3,7 @@ package a8k.service.appstate; import a8k.controler.engineer.utils.EngineerPageTab; import a8k.controler.engineer.utils.EnginnerPageAction; import a8k.db.ProjectInfo; -import a8k.service.appconsumable.base.ConsumableItemGroup; +import a8k.service.appconsumable.base.Consumables; import a8k.service.appbase.A8kDeviceState; import jakarta.annotation.PostConstruct; import org.slf4j.Logger; @@ -34,8 +34,11 @@ public class AppStateMgrService { deviceState.curIdCardInfo = projectInfo; } - public void setConsumable(ConsumableItemGroup cig) { + public void setConsumable(Consumables cig) { deviceState.consumable = cig; } + public Consumables getConsumable() { + return deviceState.consumable; + } } diff --git a/src/main/java/a8k/service/hardware/TestScript.java b/src/main/java/a8k/service/hardware/HardwareTestScript.java similarity index 96% rename from src/main/java/a8k/service/hardware/TestScript.java rename to src/main/java/a8k/service/hardware/HardwareTestScript.java index f12f965..e6c3c88 100644 --- a/src/main/java/a8k/service/hardware/TestScript.java +++ b/src/main/java/a8k/service/hardware/HardwareTestScript.java @@ -23,9 +23,9 @@ import java.util.Map; @Component @EngineerPageTab(name = "测试脚本") -@EnginnerPageParams(service = TestScript.class) -public class TestScript { - static Logger logger = LoggerFactory.getLogger(TestScript.class); +@EnginnerPageParams(service = HardwareTestScript.class) +public class HardwareTestScript { + static Logger logger = LoggerFactory.getLogger(HardwareTestScript.class); @Resource A8kCanBusService canBus; diff --git a/src/main/java/a8k/service/project_mgr/ProjectItemMgrService.java b/src/main/java/a8k/service/project_mgr/AppProjectItemMgrService.java similarity index 69% rename from src/main/java/a8k/service/project_mgr/ProjectItemMgrService.java rename to src/main/java/a8k/service/project_mgr/AppProjectItemMgrService.java index 0f77ead..f79267b 100644 --- a/src/main/java/a8k/service/project_mgr/ProjectItemMgrService.java +++ b/src/main/java/a8k/service/project_mgr/AppProjectItemMgrService.java @@ -1,6 +1,8 @@ package a8k.service.project_mgr; +import a8k.controler.engineer.utils.EnginnerPageStatu; +import a8k.controler.engineer.utils.EnginnerPageTabOrder; import a8k.service.appeventbus.AppEventListener; import a8k.appbase.HardwareException; import a8k.appbase.ProjectInfoSimple; @@ -29,9 +31,9 @@ import java.util.List; import java.util.Map; @Component -@EngineerPageTab(name = "ProjectItemMgrService") -public class ProjectItemMgrService implements AppEventListener { - static Logger logger = org.slf4j.LoggerFactory.getLogger(ProjectItemMgrService.class); +@EngineerPageTab(name = "应用-项目管理", order = EnginnerPageTabOrder.AppProjectItemMgrService) +public class AppProjectItemMgrService implements AppEventListener { + static Logger logger = org.slf4j.LoggerFactory.getLogger(AppProjectItemMgrService.class); @Resource A8kCanBusService canBus; @@ -61,13 +63,9 @@ public class ProjectItemMgrService implements AppEventListener { logger.info("拔出ID卡"); } } else if (event instanceof A8kCanBusOnConnectEvent canPacket) { - try { - if (canBus.moduleGetReg(MId.A8kIdCardReader, RegIndex.kreg_id_card_reader_is_online) == 1) { - logger.info("ID卡读卡器在线"); - workQueue.addTask(this::readIDCard); - } - } catch (HardwareException e) { - throw new RuntimeException(e); + if (idCardStatus()) { + logger.info("ID卡读卡器在线"); + workQueue.addTask(this::readIDCard); } } } @@ -90,7 +88,7 @@ public class ProjectItemMgrService implements AppEventListener { return pinfo == null || newpinfo.updateChipVersion >= pinfo.updateChipVersion; } - void readIDCard() { + private ProjectInfo readAndConstructProjectInfo() { //读取ID卡信息 byte[] data = null; try { @@ -99,14 +97,24 @@ public class ProjectItemMgrService implements AppEventListener { //TODO: // 解析ID // 构造ProjectInfo - // 判断是否是新的ProjectInfo (by call isNewProjectInfo) - // 构造NewAppIDCardDetectEvent - // 发送事件到事件总线上去,事件将由 FrontEndEventRouter 路由到前端 - // 存储项目信息到数据库中 - // 调用 stateMgr.setCurrentIdCardInfo(); 将ID卡信息存储到状态管理器中 } catch (HardwareException e) { throw new RuntimeException(e); } + return null; + } + + void readIDCard() { + //读取ID卡信息 + //TODO: + // 解析ID + // 构造ProjectInfo + // 判断是否是新的ProjectInfo (by call isNewProjectInfo) + // 构造NewAppIDCardDetectEvent + // 发送事件到事件总线上去,事件将由 FrontEndEventRouter 路由到前端 + // 存储项目信息到数据库中 + // 调用 stateMgr.setCurrentIdCardInfo(); 将ID卡信息存储到状态管理器中 + ProjectInfo pjinfo = readAndConstructProjectInfo(); + } @@ -114,12 +122,12 @@ public class ProjectItemMgrService implements AppEventListener { // PUBLIC // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - @EnginnerPageAction(name = "获取项目信息(简单)") + @EnginnerPageAction(name = "获取项目信息(简单)", order = 1) public AppRet> getProjectInfoSimple() { return AppRet.success(dbGetProjectInfos()); } - @EnginnerPageAction(name = "添加项目信息") + @EnginnerPageAction(name = "添加项目信息", order = 2) public AppRet addProjectInfo(ProjectInfo newpinfo) { var pinfo = ProjectInfo.findOne(ProjectInfo.class, Map.of("lotName", newpinfo.lotName)); if (pinfo != null && newpinfo.updateChipVersion < pinfo.updateChipVersion) { @@ -132,4 +140,19 @@ public class ProjectItemMgrService implements AppEventListener { } return AppRet.success("添加成功"); } + + @EnginnerPageAction(name = "读取ID卡信息", order = 3) + public AppRet readIDCardInfo() { + ProjectInfo pinfo = readAndConstructProjectInfo(); + return AppRet.success(pinfo); + } + + @EnginnerPageStatu(name = "ID卡状态") + public Boolean idCardStatus() { + try { + return canBus.moduleGetReg(MId.A8kIdCardReader, RegIndex.kreg_id_card_reader_is_online) == 1; + } catch (HardwareException ignored) { + } + return false; + } } diff --git a/zhaohe_app.db b/zhaohe_app.db index 6ff5f44..c27d0b2 100644 Binary files a/zhaohe_app.db and b/zhaohe_app.db differ