diff --git a/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionAreaState.java b/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionAreaState.java new file mode 100644 index 0000000..08c3d37 --- /dev/null +++ b/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionAreaState.java @@ -0,0 +1,17 @@ +package a8k.app.a8ktype.device.consumables; + +import a8k.app.a8ktype.device.ConsumableGroup; + +import java.util.ArrayList; +import java.util.List; + +public class PreReactionAreaState { + public List gridGroups; + + public PreReactionAreaState() { + gridGroups = new ArrayList<>(); + for (int i = 0; i < 6; i++) { + gridGroups.add(new PreReactionGridGroup(ConsumableGroup.values()[i])); + } + } +} diff --git a/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionGrid.java b/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionGrid.java new file mode 100644 index 0000000..20f318f --- /dev/null +++ b/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionGrid.java @@ -0,0 +1,20 @@ +package a8k.app.a8ktype.device.consumables; + +import a8k.app.a8ktype.device.ConsumableGroup; + +public class PreReactionGrid { + public ConsumableGroup group; + public Integer off; + public Boolean inUse; + + public String projectTaskCxtId; + public Integer preReactionTotleTimeS; + public Long startTime; + public Integer remainTimeS; + + public PreReactionGrid(ConsumableGroup group, Integer off) { + this.group = group; + this.off = off; + + } +} diff --git a/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionGridGroup.java b/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionGridGroup.java new file mode 100644 index 0000000..643f96d --- /dev/null +++ b/src/main/java/a8k/app/a8ktype/device/consumables/PreReactionGridGroup.java @@ -0,0 +1,19 @@ +package a8k.app.a8ktype.device.consumables; + +import a8k.app.a8ktype.device.ConsumableGroup; + +import java.util.ArrayList; +import java.util.List; + +public class PreReactionGridGroup { + public ConsumableGroup group; + public List grids; + + public PreReactionGridGroup(ConsumableGroup group) { + grids = new ArrayList<>(); + this.group = group; + for (int i = 0; i < 6; i++) { + grids.add(new PreReactionGrid(group, i)); + } + } +} diff --git a/src/main/java/a8k/app/service/mainctrl/AppDeviceCtrlService.java b/src/main/java/a8k/app/service/mainctrl/AppDeviceCtrlService.java index 95dc835..d0d2bbf 100644 --- a/src/main/java/a8k/app/service/mainctrl/AppDeviceCtrlService.java +++ b/src/main/java/a8k/app/service/mainctrl/AppDeviceCtrlService.java @@ -1,6 +1,6 @@ package a8k.app.service.mainctrl; -import a8k.app.service.mainctrl.mainflowctrl.MainFlowCtrlSchedulerSignalThread; +import a8k.app.service.mainctrl.mainflowctrl.MainFlowCtrlScheduler; import a8k.app.service.statemgr.ConsumablesMgrService; import a8k.app.service.statemgr.ProjectContextMgrService; @@ -18,29 +18,7 @@ public class AppDeviceCtrlService { GStateMgrService gstate; @Resource - MainFlowCtrlSchedulerSignalThread mainFlowCtrlScheduler; //主流程控制模块 - @Resource - AppConsumablesScanService appConsumablesScanService; //耗材扫描模块 - @Resource - ConsumablesMgrService consumablesMgrService; //耗材管理模块 - @Resource - ProjectContextMgrService projectContextMgrService; //项目处理上下文管理模块 - - // - // /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // * 设备初始化 - // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - // public List checkBeforeInitDevice() throws AppException { - // return deviceInitializationModule.checkBeforeInitDevice(); - // } - // - // public void initDeviceAsync() throws AppException { - // deviceInitializationModule.initDeviceAsync(); - // backgroudProcessCtrlService.startProcess(); //TODO:将这段代码绑定login事件 - // } - - - + MainFlowCtrlScheduler mainFlowCtrlScheduler; //主流程控制模块 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * 设备控制 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlSchedulerSignalThread.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java similarity index 98% rename from src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlSchedulerSignalThread.java rename to src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java index 5731ff8..8e559e8 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlSchedulerSignalThread.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/MainFlowCtrlScheduler.java @@ -29,8 +29,8 @@ import java.util.List; import java.util.Objects; @Component -public class MainFlowCtrlSchedulerSignalThread implements ApplicationListener { - static Logger logger = LoggerFactory.getLogger(MainFlowCtrlSchedulerSignalThread.class); +public class MainFlowCtrlScheduler implements ApplicationListener { + static Logger logger = LoggerFactory.getLogger(MainFlowCtrlScheduler.class); @FunctionalInterface @@ -162,7 +162,7 @@ public class MainFlowCtrlSchedulerSignalThread implements ApplicationListener(); } - } diff --git a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/P40ApplyRresoure.java b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/P40ApplyRresoure.java index adbd1be..fe44e18 100644 --- a/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/P40ApplyRresoure.java +++ b/src/main/java/a8k/app/service/mainctrl/mainflowctrl/action/P40ApplyRresoure.java @@ -94,7 +94,6 @@ public class P40ApplyRresoure extends A8kActionTask { List errors = prePareResource(); if (errors != null && !errors.isEmpty()) { log.warn("申请耗材失败,请求人工干预"); - backProjectResource(tube); deviceWorkStateMgrService.setHumanInterventionReq(true); ebus.pushEvent(new A8kErrorsPromptEvent(errors)); diff --git a/src/main/java/a8k/app/service/statemgr/PreReactionAreaStateMgrService.java b/src/main/java/a8k/app/service/statemgr/PreReactionAreaStateMgrService.java new file mode 100644 index 0000000..187e87d --- /dev/null +++ b/src/main/java/a8k/app/service/statemgr/PreReactionAreaStateMgrService.java @@ -0,0 +1,53 @@ +package a8k.app.service.statemgr; + +import a8k.app.a8ktype.device.ConsumableGroup; +import a8k.app.a8ktype.device.consumables.PreReactionAreaState; +import a8k.app.a8ktype.device.consumables.PreReactionGridGroup; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class PreReactionAreaStateMgrService { + public PreReactionAreaState preReactionAreaState = new PreReactionAreaState(); + + public synchronized PreReactionAreaState getState() { + return preReactionAreaState; + } + + public synchronized void takeAwayMixLiquid(ConsumableGroup group, Integer posoff) { + var grid = preReactionAreaState.gridGroups.get(group.ordinal()).grids.get(posoff); + grid.inUse = false; + grid.projectTaskCxtId = null; + grid.startTime = 0l; + grid.remainTimeS = 0; + grid.preReactionTotleTimeS = 0; + } + + public synchronized void startPreIncubation(ConsumableGroup group, Integer posoff, String projectTaskCxtId, Integer preIncubationTotleTimeS) { + var grid = preReactionAreaState.gridGroups.get(group.ordinal()).grids.get(posoff); + grid.inUse = true; + grid.projectTaskCxtId = projectTaskCxtId; + grid.startTime = System.currentTimeMillis(); + grid.remainTimeS = preIncubationTotleTimeS; + grid.preReactionTotleTimeS = preIncubationTotleTimeS; + } + + + @Scheduled(fixedDelay = 500) + synchronized public void updateRemainTime() { + for (PreReactionGridGroup group : preReactionAreaState.gridGroups) { + group.grids.forEach(grid -> { + if (grid.inUse) { + grid.remainTimeS = (int) ((grid.preReactionTotleTimeS * 1000 - (System.currentTimeMillis() - grid.startTime)) / 1000); + if (grid.remainTimeS <= 0) { + grid.remainTimeS = 0; + } + } + }); + } + } + + +}