From 6381c27582e51976ddd5b0a1bd5cb44bbe803645 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 8 Nov 2024 09:38:37 +0800 Subject: [PATCH] update --- .../mainflowctrl/A8kPublicAreaResourceMgr.java | 161 +++++++++++++++++++++ .../appctrl/mainflowctrl/CondtionMgrService.java | 118 --------------- .../mainflowctrl/DeviceStateSyncReader.java | 12 -- .../mainflowctrl/DeviceStateSyncWriter.java | 7 - .../mainflowctrl/MainFlowCtrlScheduler.java | 6 +- .../appctrl/mainflowctrl/ResourceMgrService.java | 161 --------------------- .../action/DO_FINISH_TUBE_PROCESS.java | 12 +- .../action/DO_PROCESS_ERROR_PLATE.java | 10 +- .../mainflowctrl/action/PLATE_OPT_SCAN.java | 9 +- .../action/PROCESS_INCUBATE_COMPLETED_PLATE.java | 11 +- .../action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java | 12 +- .../action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java | 11 +- .../mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java | 3 - .../appctrl/mainflowctrl/action/SEQ5_PROCESS.java | 32 ++-- .../mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java | 9 +- .../a8k/service/app/appstate/GStateService.java | 7 - .../appstate/resource/A8kPublicResourceType.java | 11 -- .../a8k/service/test/MainflowCtrlTestService.java | 7 - 18 files changed, 203 insertions(+), 396 deletions(-) create mode 100644 src/main/java/a8k/service/app/appctrl/mainflowctrl/A8kPublicAreaResourceMgr.java delete mode 100644 src/main/java/a8k/service/app/appctrl/mainflowctrl/CondtionMgrService.java delete mode 100644 src/main/java/a8k/service/app/appctrl/mainflowctrl/DeviceStateSyncReader.java delete mode 100644 src/main/java/a8k/service/app/appctrl/mainflowctrl/DeviceStateSyncWriter.java delete mode 100644 src/main/java/a8k/service/app/appctrl/mainflowctrl/ResourceMgrService.java delete mode 100644 src/main/java/a8k/service/app/appstate/resource/A8kPublicResourceType.java diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/A8kPublicAreaResourceMgr.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/A8kPublicAreaResourceMgr.java new file mode 100644 index 0000000..e9a498e --- /dev/null +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/A8kPublicAreaResourceMgr.java @@ -0,0 +1,161 @@ +package a8k.service.app.appctrl.mainflowctrl; + + +import a8k.OS; +import a8k.service.app.appctrl.mainflowctrl.base.A8kPublicAreaResource; +import jakarta.annotation.PostConstruct; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.Vector; + +@Component +public class A8kPublicAreaResourceMgr { + static Logger logger = LoggerFactory.getLogger(A8kPublicAreaResourceMgr.class); + + static public class Resource { + public A8kPublicAreaResource type; + public Boolean rented = false;//是否被租用 + public Object ownerNow = null; + public String subOwnerName = ""; + + public Resource(A8kPublicAreaResource type) { + this.type = type; + } + } + + List resources = new Vector<>(); + + @PostConstruct + public void init() { + for (A8kPublicAreaResource type : A8kPublicAreaResource.values()) { + resources.add(new Resource(type)); + } + } + + + Boolean checkResourceRentable(A8kPublicAreaResource type) { + for (Resource r : resources) { + if (r.type == type) { + return !r.rented; + } + } + return false; + } + + + /** + * 申请资源 + * @param applyer 申请者 + * @param type 资源类型 + * @return 是否申请成功 + */ + Boolean applyForOneResourceInternal(Object applyer, String subOwnerName, A8kPublicAreaResource type) { + for (Resource r : resources) { + if (r.type == type) { + if (r.rented) { + return false; + } + r.rented = true; + r.ownerNow = applyer; + r.subOwnerName = subOwnerName; + return true; + } + } + return false; + } + + /** + * 申请多个资源 + * @param applyer 申请者 + * @param resources 资源类型列表 + * @return 是否申请成功 + */ + synchronized Boolean applyForResourceInternal(Object applyer, String subOwnerName, A8kPublicAreaResource... resources) { + // logger.info("{} applyForResources: {}", applyer.getClass().getSimpleName(), types); + + if (resources == null || resources.length == 0) { + return false; + } + + //检查是否所有资源都可租用 + for (A8kPublicAreaResource type : resources) { + if (!checkResourceRentable(type)) { + return false; + } + } + + //租用所有资源 + for (A8kPublicAreaResource type : resources) { + Boolean suc = applyForOneResourceInternal(applyer, subOwnerName, type); + Assert.isTrue(suc, "applyForResource(applyer, type) fail"); + } + return true; + } + + public void applyForResources(Object applyer, A8kPublicAreaResource... resources) { + while (true) { + Boolean suc = applyForResourceInternal(applyer, "", resources); + if (suc) + break; + + OS.forceSleep(300); + } + } + + public void applyForResources(Object applyer, String subOwnerName, A8kPublicAreaResource... resources) { + while (true) { + Boolean suc = applyForResourceInternal(applyer, subOwnerName, resources); + if (suc) + break; + + OS.forceSleep(300); + } + } + + + /** + * 释放资源 + * @param type 资源类型 + */ + synchronized public void releaseResource(A8kPublicAreaResource... type) { + for (A8kPublicAreaResource t : type) { + for (Resource r : resources) { + if (r.type == t) { + r.rented = false; + r.ownerNow = null; + } + } + } + } + + /** + * 释放所有资源 + * @param applyer 申请者 + */ + synchronized public void releaseAllResource(Object applyer) { + for (Resource r : resources) { + if (r.ownerNow == applyer) { + r.rented = false; + r.ownerNow = null; + } + } + } + + synchronized public void releaseAllResource(Object applyer, String subOwnerName) { + for (Resource r : resources) { + if (r.ownerNow == applyer) { + if (r.subOwnerName.equals(subOwnerName)) { + r.rented = false; + r.ownerNow = null; + r.subOwnerName = ""; + } + } + } + } + + +} diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/CondtionMgrService.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/CondtionMgrService.java deleted file mode 100644 index 1309ca1..0000000 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/CondtionMgrService.java +++ /dev/null @@ -1,118 +0,0 @@ -package a8k.service.app.appctrl.mainflowctrl; - -import a8k.hardware.A8kCanBusService; -import a8k.hardware.type.a8kcanprotocol.IOId; -import a8k.service.app.appstate.GStateService; -import a8k.service.app.appstate.statemgr.IncubationPlateStateMgrService; -import a8k.service.app.appstate.statemgr.OptScanModuleStateMgrService; -import a8k.service.app.appstate.statemgr.TubeStateMgrService; -import a8k.service.app.appstate.type.Tube; -import a8k.service.app.appstate.type.state.TubeState; - -import a8k.service.test.state.TestModeState; -import a8k.service.test.state.VirtualDevice; -import jakarta.annotation.Resource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - - -@Component -public class CondtionMgrService { - static Logger logger = LoggerFactory.getLogger(CondtionMgrService.class); - - @Resource - GStateService gstate; - @Resource - TestModeState testModeState; - @Resource - VirtualDevice virtualDevice; - - @Resource - A8kCanBusService canBus; - - @Resource - IncubationPlateStateMgrService incubationPlateStateMgrService; - @Resource - TubeStateMgrService tubeStateMgrService; - - @Resource - OptScanModuleStateMgrService optScanModuleStateMgrService; - - - // public Boolean getTubeholderEnterPosPPS() { //入料通道是否为空 - // if (virtualDevice.isEnable()) { - // return virtualDevice.isTubeHolderReady(); - // } - // try { - // - // return canBus.getIOState(IOId.InfeedPPS); - // } catch (Exception e) { - // logger.error("getTubeholderEnterPosPPS error", e); - // return false; - // } - // } - - - // public Boolean isOptModuleEmpty() { - // return optScanModuleStateMgrService.isEmpty(); - // } - - // public Boolean isTimeToEnterNewTubeHolder() { - // return tubeStateMgrService.isTubeHolderProcessCompleted() && getTubeholderEnterPosPPS(); - // } - - // public Boolean isTimeToSwitchNextTube() { - // return tubeStateMgrService.isNoTubeInProcessing() && tubeStateMgrService.isHasSomeToBeProcessedTube(); - // } - - // public Boolean isTimeToProcessPendingTube() { - // Tube tube = tubeStateMgrService.getCurProcessingTube(); - // if (tube == null) - // return false; - // - // //当前试管是否处于待命状态 - // Boolean cond2 = tube.getState().equals(TubeState.PENDING); - // //反应板夹是否充足 - // Boolean cond3 = incubationPlateStateMgrService.isHasEnoughIncubationIDLEPos(tube.getProjInfo().size()); - // return cond2 && cond3; - // } - - // public Boolean isTimeToProcessTube() { - // return tubeStateMgrService.isCurTubeResourceReady(); - // } - - // public Boolean isHasSomeErrorPlatesToBeProcessed() { - // return incubationPlateStateMgrService.isHasSomeErrorPlate(); - // } - - // public Boolean isHasErrorTube() { - // Tube tube = gstate.getCurProcessingTube(); - // if (tube == null) - // return false; - // return gstate.getCurProcessingTube().getState().equals(TubeState.ERROR); - // } - // - // public Boolean isHasProcessedTube() { - // Tube tube = gstate.getCurProcessingTube(); - // if (tube == null) - // return false; - // return gstate.getCurProcessingTube().getState().equals(TubeState.PROCESSED); - // } - - // public Boolean isTimeToFinishTubeProcess() { - // return isHasErrorTube() || isHasProcessedTube(); - // } - - // public Boolean isTimeToProcessErrorPlate() { - // return isHasSomeErrorPlatesToBeProcessed() && isOptModuleEmpty(); - // } - // - // public Boolean isTimeToPlateOptScan() { - // return !optScanModuleStateMgrService.isEmpty(); - // } - // - // public Boolean isTimeToProcessIncubateCompletedPlate() { - // return incubationPlateStateMgrService.getOneExpiredPlate() != null && optScanModuleStateMgrService.isEmpty(); - // } -} diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/DeviceStateSyncReader.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/DeviceStateSyncReader.java deleted file mode 100644 index e4034e2..0000000 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/DeviceStateSyncReader.java +++ /dev/null @@ -1,12 +0,0 @@ -package a8k.service.app.appctrl.mainflowctrl; - - -import org.springframework.stereotype.Component; - -@Component -public class DeviceStateSyncReader { - - - - -} diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/DeviceStateSyncWriter.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/DeviceStateSyncWriter.java deleted file mode 100644 index 006f008..0000000 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/DeviceStateSyncWriter.java +++ /dev/null @@ -1,7 +0,0 @@ -package a8k.service.app.appctrl.mainflowctrl; - -import org.springframework.stereotype.Component; - -@Component -public class DeviceStateSyncWriter { -} diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/MainFlowCtrlScheduler.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/MainFlowCtrlScheduler.java index ff37574..86cf852 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/MainFlowCtrlScheduler.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/MainFlowCtrlScheduler.java @@ -37,9 +37,9 @@ public class MainFlowCtrlScheduler implements ApplicationListener allActions = new ArrayList<>(); List foregroundActions = new ArrayList<>(); @@ -187,7 +187,7 @@ public class MainFlowCtrlScheduler implements ApplicationListener resources = new Vector<>(); - - @PostConstruct - public void init() { - for (A8kPublicAreaResource type : A8kPublicAreaResource.values()) { - resources.add(new Resource(type)); - } - } - - - Boolean checkResourceRentable(A8kPublicAreaResource type) { - for (Resource r : resources) { - if (r.type == type) { - return !r.rented; - } - } - return false; - } - - - /** - * 申请资源 - * @param applyer 申请者 - * @param type 资源类型 - * @return 是否申请成功 - */ - Boolean applyForOneResourceInternal(Object applyer, String subOwnerName, A8kPublicAreaResource type) { - for (Resource r : resources) { - if (r.type == type) { - if (r.rented) { - return false; - } - r.rented = true; - r.ownerNow = applyer; - r.subOwnerName = subOwnerName; - return true; - } - } - return false; - } - - /** - * 申请多个资源 - * @param applyer 申请者 - * @param resources 资源类型列表 - * @return 是否申请成功 - */ - synchronized Boolean applyForResourceInternal(Object applyer, String subOwnerName, A8kPublicAreaResource... resources) { - // logger.info("{} applyForResources: {}", applyer.getClass().getSimpleName(), types); - - if (resources == null || resources.length == 0) { - return false; - } - - //检查是否所有资源都可租用 - for (A8kPublicAreaResource type : resources) { - if (!checkResourceRentable(type)) { - return false; - } - } - - //租用所有资源 - for (A8kPublicAreaResource type : resources) { - Boolean suc = applyForOneResourceInternal(applyer, subOwnerName, type); - Assert.isTrue(suc, "applyForResource(applyer, type) fail"); - } - return true; - } - - public void applyForResources(Object applyer, A8kPublicAreaResource... resources) { - while (true) { - Boolean suc = applyForResourceInternal(applyer, "", resources); - if (suc) - break; - - OS.forceSleep(300); - } - } - - public void applyForResources(Object applyer, String subOwnerName, A8kPublicAreaResource... resources) { - while (true) { - Boolean suc = applyForResourceInternal(applyer, subOwnerName, resources); - if (suc) - break; - - OS.forceSleep(300); - } - } - - - /** - * 释放资源 - * @param type 资源类型 - */ - synchronized public void releaseResource(A8kPublicAreaResource... type) { - for (A8kPublicAreaResource t : type) { - for (Resource r : resources) { - if (r.type == t) { - r.rented = false; - r.ownerNow = null; - } - } - } - } - - /** - * 释放所有资源 - * @param applyer 申请者 - */ - synchronized public void releaseAllResource(Object applyer) { - for (Resource r : resources) { - if (r.ownerNow == applyer) { - r.rented = false; - r.ownerNow = null; - } - } - } - - synchronized public void releaseAllResource(Object applyer, String subOwnerName) { - for (Resource r : resources) { - if (r.ownerNow == applyer) { - if (r.subOwnerName.equals(subOwnerName)) { - r.rented = false; - r.ownerNow = null; - r.subOwnerName = ""; - } - } - } - } - - -} diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_FINISH_TUBE_PROCESS.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_FINISH_TUBE_PROCESS.java index 8fb00ae..d404b5a 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_FINISH_TUBE_PROCESS.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_FINISH_TUBE_PROCESS.java @@ -1,19 +1,15 @@ package a8k.service.app.appctrl.mainflowctrl.action; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; -import a8k.service.app.appctrl.mainflowctrl.ResourceMgrService; +import a8k.service.app.appctrl.mainflowctrl.A8kPublicAreaResourceMgr; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kPublicAreaResource; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; import a8k.service.app.appctrl.mainflowctrl.base.MainFlowProcesser; -import a8k.service.app.appstate.GStateService; -import a8k.service.app.appstate.statemgr.ProjectProcessContextMgrService; import a8k.service.app.appstate.statemgr.TubeStateMgrService; import a8k.service.app.appstate.type.Tube; import a8k.service.app.appstate.type.state.TubeState; import a8k.service.app.devicectrl.ctrlservice.HbotCtrlService; import a8k.service.app.devicectrl.ctrlservice.TubePreProcesCtrlService; -import a8k.service.test.state.TestModeState; import a8k.service.test.state.VirtualDevice; import a8k.type.ecode.AppError; import a8k.type.exception.AppException; @@ -47,9 +43,9 @@ public class DO_FINISH_TUBE_PROCESS extends A8kStepAction { @Resource - ResourceMgrService resourceMgrService; + A8kPublicAreaResourceMgr a8kPublicAreaResourceMgr; @Resource - TubeStateMgrService tubeStateMgrService; + TubeStateMgrService tubeStateMgrService; public Boolean isReady() { @@ -81,7 +77,7 @@ public class DO_FINISH_TUBE_PROCESS extends A8kStepAction { @Override public List doAction() { //ProcessErrorBeforeContinue - resourceMgrService.applyForResources(this, + a8kPublicAreaResourceMgr.applyForResources(this, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea, A8kPublicAreaResource.HbotArea); Tube tube = tubeStateMgrService.getCurProcessingTube(); diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_PLATE.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_PLATE.java index fe6fff1..fa2e402 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_PLATE.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/DO_PROCESS_ERROR_PLATE.java @@ -1,7 +1,6 @@ package a8k.service.app.appctrl.mainflowctrl.action; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; -import a8k.service.app.appctrl.mainflowctrl.ResourceMgrService; +import a8k.service.app.appctrl.mainflowctrl.A8kPublicAreaResourceMgr; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kPublicAreaResource; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; @@ -41,8 +40,7 @@ public class DO_PROCESS_ERROR_PLATE extends A8kStepAction { @Resource VirtualDevice virtualDevice; - @Resource - CondtionMgrService cms; + @Resource IncubationPlateStateMgrService incubationPlateStateMgrService; @Resource @@ -54,7 +52,7 @@ public class DO_PROCESS_ERROR_PLATE extends A8kStepAction { OptScanModuleCtrlService optScanModuleCtrlService; @Resource - ResourceMgrService resourceMgrService; + A8kPublicAreaResourceMgr a8kPublicAreaResourceMgr; IncubationSubTank errorTank; @@ -87,7 +85,7 @@ public class DO_PROCESS_ERROR_PLATE extends A8kStepAction { } @Override public List doAction() { - resourceMgrService.applyForResources(A8kPublicAreaResource.IncubationPlateArea, A8kPublicAreaResource.OptScanArea); + a8kPublicAreaResourceMgr.applyForResources(A8kPublicAreaResource.IncubationPlateArea, A8kPublicAreaResource.OptScanArea); if (errorTank == null) { return List.of(); } diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java index fc427d1..7d7c31f 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java @@ -2,18 +2,15 @@ package a8k.service.app.appctrl.mainflowctrl.action; import a8k.a8kproj.A8kReactionResultComputer; import a8k.a8kproj.optalgo.type.OptScanResult; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; -import a8k.service.app.appctrl.mainflowctrl.ResourceMgrService; +import a8k.service.app.appctrl.mainflowctrl.A8kPublicAreaResourceMgr; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kPublicAreaResource; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; import a8k.service.app.appctrl.mainflowctrl.base.MainFlowProcesser; import a8k.service.app.appdata.ReactionRecordMgrService; import a8k.service.app.appstate.GStateService; -import a8k.service.app.appstate.statemgr.IncubationPlateStateMgrService; import a8k.service.app.appstate.statemgr.OptScanModuleStateMgrService; import a8k.service.app.appstate.statemgr.ProjectProcessContextMgrService; -import a8k.service.app.appstate.type.OptScanModule; import a8k.service.app.appstate.type.ProjProcessContext; import a8k.service.app.appstate.type.state.OptScanModuleState; import a8k.service.app.devicectrl.ctrlservice.OptScanModuleCtrlService; @@ -64,7 +61,7 @@ public class PLATE_OPT_SCAN extends A8kStepAction { @Resource - ResourceMgrService resourceMgrService; + A8kPublicAreaResourceMgr a8kPublicAreaResourceMgr; public Boolean isReady() { @@ -119,7 +116,7 @@ public class PLATE_OPT_SCAN extends A8kStepAction { var ctx = projectProcessContextMgrService.getProjProcessContext(optScanModule.getSampleId(), optScanModule.getProjId()); - resourceMgrService.applyForResources(this, A8kPublicAreaResource.OptScanArea); + a8kPublicAreaResourceMgr.applyForResources(this, A8kPublicAreaResource.OptScanArea); try { log.info("扫描板夹"); scanResults = doOptScanXX(ctx); diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PROCESS_INCUBATE_COMPLETED_PLATE.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PROCESS_INCUBATE_COMPLETED_PLATE.java index 34700ea..020ea91 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PROCESS_INCUBATE_COMPLETED_PLATE.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PROCESS_INCUBATE_COMPLETED_PLATE.java @@ -1,19 +1,14 @@ package a8k.service.app.appctrl.mainflowctrl.action; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; -import a8k.service.app.appctrl.mainflowctrl.ResourceMgrService; +import a8k.service.app.appctrl.mainflowctrl.A8kPublicAreaResourceMgr; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kPublicAreaResource; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; import a8k.service.app.appctrl.mainflowctrl.base.MainFlowProcesser; -import a8k.service.app.appstate.GStateService; import a8k.service.app.appstate.statemgr.IncubationPlateStateMgrService; import a8k.service.app.appstate.statemgr.OptScanModuleStateMgrService; -import a8k.service.app.appstate.statemgr.ProjectProcessContextMgrService; import a8k.service.app.appstate.type.IncubationSubTank; import a8k.service.app.devicectrl.ctrlservice.OptScanModuleCtrlService; -import a8k.service.app.devicectrl.ctrlservice.TubeFeedingCtrlService; -import a8k.service.test.state.TestModeState; import a8k.service.test.state.VirtualDevice; import a8k.type.ecode.AppError; import a8k.type.exception.AppException; @@ -47,7 +42,7 @@ public class PROCESS_INCUBATE_COMPLETED_PLATE extends A8kStepAction { OptScanModuleCtrlService optScanModuleCtrlService; @Resource - ResourceMgrService resourceMgrService; + A8kPublicAreaResourceMgr a8kPublicAreaResourceMgr; public Boolean isReady() { @@ -71,7 +66,7 @@ public class PROCESS_INCUBATE_COMPLETED_PLATE extends A8kStepAction { IncubationSubTank toBeProcesstank; @Override public List doAction() { - resourceMgrService.applyForResources(this, A8kPublicAreaResource.OptScanArea, A8kPublicAreaResource.IncubationPlateArea); + a8kPublicAreaResourceMgr.applyForResources(this, A8kPublicAreaResource.OptScanArea, A8kPublicAreaResource.IncubationPlateArea); IncubationSubTank tank = getToBeProcessedTank(); if (tank == null) { return List.of(); diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java index 5317258..9b5ef46 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java @@ -4,8 +4,7 @@ import a8k.hardware.A8kCanBusService; import a8k.hardware.type.a8kcanprotocol.A8kEcode; import a8k.hardware.type.a8kcanprotocol.IOId; import a8k.service.app.appctrl.AppTubeSettingMgrService; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; -import a8k.service.app.appctrl.mainflowctrl.ResourceMgrService; +import a8k.service.app.appctrl.mainflowctrl.A8kPublicAreaResourceMgr; import a8k.service.app.appctrl.mainflowctrl.base.*; import a8k.service.app.appdata.ProjInfoMgrService; import a8k.service.app.appstate.GStateService; @@ -20,7 +19,6 @@ import a8k.service.app.appstate.type.state.TubeState; import a8k.service.app.devicectrl.ctrlservice.TubeFeedingCtrlService; import a8k.service.bases.AppEventBusService; import a8k.service.bases.appevent.AppWarningNotifyEvent; -import a8k.service.dao.type.SampleRecord; import a8k.service.test.state.TestModeState; import a8k.service.test.state.VirtualDevice; import a8k.type.TubeHolderScanResult; @@ -67,8 +65,6 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { VirtualDevice virtualDevice; @Resource AppEventBusService ebus; - @Resource - CondtionMgrService cmgr; @Resource AppTubeSettingMgrService appTubeSettingMgrService; @@ -90,9 +86,9 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { //StateMgr // @Resource - ResourceMgrService resourceMgrService; + A8kPublicAreaResourceMgr a8kPublicAreaResourceMgr; @Resource - TubeStateMgrService tubeStateMgrService; + TubeStateMgrService tubeStateMgrService; // @@ -238,7 +234,7 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction { TubeHolderScanResult scanResult; //申请硬件资源 - resourceMgrService.applyForResources(this, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); + a8kPublicAreaResourceMgr.applyForResources(this, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); try { scanResult = doScanHolder(); diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java index abef10a..337f579 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java @@ -1,7 +1,6 @@ package a8k.service.app.appctrl.mainflowctrl.action; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; -import a8k.service.app.appctrl.mainflowctrl.ResourceMgrService; +import a8k.service.app.appctrl.mainflowctrl.A8kPublicAreaResourceMgr; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kPublicAreaResource; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; @@ -43,11 +42,9 @@ public class SEQ2_SWITCH_TO_THE_NEXT_TUBE extends A8kStepAction { VirtualDevice virtualDevice; @Resource - TubeFeedingCtrlService tubeFeedingCtrlService; + TubeFeedingCtrlService tubeFeedingCtrlService; @Resource - CondtionMgrService cms; - @Resource - ResourceMgrService resourceMgrService; + A8kPublicAreaResourceMgr a8kPublicAreaResourceMgr; // @@ -85,7 +82,7 @@ public class SEQ2_SWITCH_TO_THE_NEXT_TUBE extends A8kStepAction { @Override public List doAction() { //申请资源 - resourceMgrService.applyForResources(this, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); + a8kPublicAreaResourceMgr.applyForResources(this, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); if (tubeStateMgrService.isHasEmergencyTubeToBeProcessed()) { //处理急诊试管 diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java index e53e85e..8e4b207 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ3_APPLAY_RESOURCE.java @@ -1,7 +1,6 @@ package a8k.service.app.appctrl.mainflowctrl.action; import a8k.hardware.type.a8kcanprotocol.A8kEcode; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; import a8k.service.app.appctrl.mainflowctrl.MainFlowCtrlScheduler; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; @@ -62,8 +61,6 @@ public class SEQ3_APPLAY_RESOURCE extends A8kStepAction { @Resource ProjInfoMgrService projConfigMgrService; @Resource - CondtionMgrService cms; - @Resource IncubationPlateStateMgrService incubationPlateStateMgrService; @Resource diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ5_PROCESS.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ5_PROCESS.java index 6e4156b..58b1749 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ5_PROCESS.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ5_PROCESS.java @@ -1,13 +1,11 @@ package a8k.service.app.appctrl.mainflowctrl.action; import a8k.OS; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; -import a8k.service.app.appctrl.mainflowctrl.ResourceMgrService; +import a8k.service.app.appctrl.mainflowctrl.A8kPublicAreaResourceMgr; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kPublicAreaResource; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; import a8k.service.app.appctrl.mainflowctrl.base.MainFlowProcesser; -import a8k.service.app.appstate.GStateService; import a8k.service.app.appstate.statemgr.IncubationPlateStateMgrService; import a8k.service.app.appstate.statemgr.ProjectProcessContextMgrService; import a8k.service.app.appstate.statemgr.TubeStateMgrService; @@ -65,8 +63,6 @@ public class SEQ5_PROCESS extends A8kStepAction { @Resource IncubationPlateStateMgrService incubationPlateStateMgrService; @Resource - CondtionMgrService cms; - @Resource ProjectProcessContextMgrService projectProcessContextMgrService; @Resource @@ -74,7 +70,7 @@ public class SEQ5_PROCESS extends A8kStepAction { @Resource DeviceCtrlScripter deviceCtrlScripter; @Resource - ResourceMgrService resourceMgrService; + A8kPublicAreaResourceMgr a8kPublicAreaResourceMgr; @Resource PlateBoxCtrlService plateBoxCtrlService; @Resource @@ -165,11 +161,11 @@ public class SEQ5_PROCESS extends A8kStepAction { logger.info("摇匀次数 :{}", shakeTimes); logger.info("试管架类型 :{}", tubeHolder.getTubeHolderType()); logger.info("是否高位试管:{}", isHighTube); - resourceMgrService.applyForResources(this, subResOwner, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); + a8kPublicAreaResourceMgr.applyForResources(this, subResOwner, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); tubePreProcesCtrlService.takeTubeFromTubeholderToShakePos(isHighTube); tubePreProcesCtrlService.shakeTube(45, shakeTimes); tubePreProcesCtrlService.takeTubeCap(); - resourceMgrService.releaseAllResource(this, subResOwner); + a8kPublicAreaResourceMgr.releaseAllResource(this, subResOwner); } else { logger.info("不是全血试管,不需要摇匀"); } @@ -178,9 +174,9 @@ public class SEQ5_PROCESS extends A8kStepAction { waittingForSampleProcessFinished(); //样本后处理 - resourceMgrService.applyForResources(this, subResOwner, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); + a8kPublicAreaResourceMgr.applyForResources(this, subResOwner, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); tubePreProcesCtrlService.resteModule(); - resourceMgrService.releaseAllResource(this, subResOwner); + a8kPublicAreaResourceMgr.releaseAllResource(this, subResOwner); } @@ -205,9 +201,9 @@ public class SEQ5_PROCESS extends A8kStepAction { for (ProjProcessContext cxt : cxts) { IncubatorPos incubatorPos = cxt.recourcePacket.incubatorPos; ; - resourceMgrService.applyForResources(this, subResOwner, A8kPublicAreaResource.PlateBoxArea, A8kPublicAreaResource.IncubationPlateArea); + a8kPublicAreaResourceMgr.applyForResources(this, subResOwner, A8kPublicAreaResource.PlateBoxArea, A8kPublicAreaResource.IncubationPlateArea); plateBoxCtrlService.pushPlateQuick(cxt.recourcePacket.consumable.getGroup(), incubatorPos); - resourceMgrService.releaseAllResource(this, subResOwner); + a8kPublicAreaResourceMgr.releaseAllResource(this, subResOwner); } reactionPlateReady = true; } @@ -228,16 +224,16 @@ public class SEQ5_PROCESS extends A8kStepAction { List cxts = projectProcessContextMgrService.getTubeAssociatedProjContext(tube.getSampleId()); Assert.isTrue(!cxts.isEmpty(), "项目上下文不能为空"); - resourceMgrService.applyForResources(this, subResOwner, A8kPublicAreaResource.HbotArea); + a8kPublicAreaResourceMgr.applyForResources(this, subResOwner, A8kPublicAreaResource.HbotArea); for (ProjProcessContext cxt : cxts) { deviceCtrlScripter.doSampleProcessPrepare(cxt); waittingForSampleIsReady(); deviceCtrlScripter.doSampleProcess(cxt); waittingForReactionPlateReady(); - resourceMgrService.applyForResources(this, subResOwner, A8kPublicAreaResource.IncubationPlateArea); + a8kPublicAreaResourceMgr.applyForResources(this, subResOwner, A8kPublicAreaResource.IncubationPlateArea); deviceCtrlScripter.doSampleProcessPostProcess(cxt); - resourceMgrService.releaseResource(A8kPublicAreaResource.IncubationPlateArea); + a8kPublicAreaResourceMgr.releaseResource(A8kPublicAreaResource.IncubationPlateArea); incubationPlateStateMgrService.startIncubating(cxt.recourcePacket.incubatorPos, cxt.projInfoContext.getReactionPlateIncubationTimeMin()); } @@ -275,7 +271,7 @@ public class SEQ5_PROCESS extends A8kStepAction { } catch (ZAppInterruptException ignored) { } - resourceMgrService.releaseAllResource(this, "sampleProcess"); + a8kPublicAreaResourceMgr.releaseAllResource(this, "sampleProcess"); return error; }); var future2 = executor.submit(() -> { @@ -289,7 +285,7 @@ public class SEQ5_PROCESS extends A8kStepAction { } catch (ZAppInterruptException ignored) { } - resourceMgrService.releaseAllResource(this, "paltePrepare"); + a8kPublicAreaResourceMgr.releaseAllResource(this, "paltePrepare"); return error; }); var future3 = executor.submit(() -> { @@ -303,7 +299,7 @@ public class SEQ5_PROCESS extends A8kStepAction { } catch (ZAppInterruptException ignored) { } - resourceMgrService.releaseAllResource(this, "samplePrepare"); + a8kPublicAreaResourceMgr.releaseAllResource(this, "samplePrepare"); return error; }); diff --git a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java index eb0fd06..4f9b19a 100644 --- a/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java +++ b/src/main/java/a8k/service/app/appctrl/mainflowctrl/action/SEQ7_EJECT_TUBEHOLDER.java @@ -1,7 +1,6 @@ package a8k.service.app.appctrl.mainflowctrl.action; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; -import a8k.service.app.appctrl.mainflowctrl.ResourceMgrService; +import a8k.service.app.appctrl.mainflowctrl.A8kPublicAreaResourceMgr; import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType; import a8k.service.app.appctrl.mainflowctrl.base.A8kPublicAreaResource; import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction; @@ -53,14 +52,12 @@ public class SEQ7_EJECT_TUBEHOLDER extends A8kStepAction { @Resource - CondtionMgrService cms; - @Resource TubeFeedingCtrlService tubeFeedingCtrlService; @Resource TubeStateMgrService tubeStateMgrService; @Resource - ResourceMgrService resourceMgrService; + A8kPublicAreaResourceMgr a8kPublicAreaResourceMgr; public Boolean isReady() { @@ -74,7 +71,7 @@ public class SEQ7_EJECT_TUBEHOLDER extends A8kStepAction { @Override public List doAction() { - resourceMgrService.applyForResources(this, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); + a8kPublicAreaResourceMgr.applyForResources(this, A8kPublicAreaResource.TubeSampleProcessAndTubeChannelArea); try { if (!virtualDevice.isEnable()) { tubeFeedingCtrlService.ejectTubeHolder(); diff --git a/src/main/java/a8k/service/app/appstate/GStateService.java b/src/main/java/a8k/service/app/appstate/GStateService.java index 75b6159..0ab4c94 100644 --- a/src/main/java/a8k/service/app/appstate/GStateService.java +++ b/src/main/java/a8k/service/app/appstate/GStateService.java @@ -18,26 +18,19 @@ import java.util.List; @Component @Data public class GStateService { - public static final Logger logger = LoggerFactory.getLogger(GStateService.class); //设备是否初始化过 private Boolean deviceInited = false; - - // private String appVersion = AppConstant.APP_VERSION; private String mcuVersion = "NOTSET"; private String sn = "NOTSET"; SensorState sensorState = new SensorState(); - ProjInfoCard mountedIdCardInfo; - - public Boolean isDeviceInited() { return deviceInited; } - public synchronized SensorState getSensorState() { return sensorState; } diff --git a/src/main/java/a8k/service/app/appstate/resource/A8kPublicResourceType.java b/src/main/java/a8k/service/app/appstate/resource/A8kPublicResourceType.java deleted file mode 100644 index 764770e..0000000 --- a/src/main/java/a8k/service/app/appstate/resource/A8kPublicResourceType.java +++ /dev/null @@ -1,11 +0,0 @@ -package a8k.service.app.appstate.resource; - -public enum A8kPublicResourceType { - ShakeModule,//摇匀模组 - TubeFeedModule,//入料模组 - IncubationPlateModule,//孵育盘电机 - OPTModule, //光学电机 - PlatesBoxModule,//板夹仓电机 - HBOT,//HBOT - CurTubeProcessToken,//当前管子处理令牌 -} diff --git a/src/main/java/a8k/service/test/MainflowCtrlTestService.java b/src/main/java/a8k/service/test/MainflowCtrlTestService.java index df1664d..6ae8af5 100644 --- a/src/main/java/a8k/service/test/MainflowCtrlTestService.java +++ b/src/main/java/a8k/service/test/MainflowCtrlTestService.java @@ -8,7 +8,6 @@ import a8k.extapi_controler.utils.ExtApiTab; import a8k.service.app.appctrl.AppConsumablesScanService; import a8k.service.app.appctrl.AppDeviceCtrlService; import a8k.service.app.appctrl.AppTubeSettingMgrService; -import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService; import a8k.service.app.appstate.statemgr.*; import a8k.service.app.appstate.GStateService; import a8k.service.app.appstate.type.DeviceWorkState; @@ -86,8 +85,6 @@ public class MainflowCtrlTestService { @Resource OptScanModuleCtrlService optScanModuleCtrlService; - @Resource - CondtionMgrService condtionMgrService; void resetProjDB() { @@ -181,10 +178,6 @@ public class MainflowCtrlTestService { return deviceWorkStateMgrService.getDeviceWorkState(); } - @ExtApiFn(name = "获取动作执行条件", group = "设备控制", order = 402) - synchronized public CondtionMgrService getCondtionMgrService() { - return condtionMgrService; - } void waittingForStop() {