22 changed files with 494 additions and 101 deletions
-
21src/main/java/a8k/service/appctrl/CondtionMgrService.java
-
7src/main/java/a8k/service/appctrl/MainFlowCtrlService.java
-
13src/main/java/a8k/service/appctrl/action/base/A8kActionStepType.java
-
2src/main/java/a8k/service/appctrl/action/ctrl/DO_START.java
-
32src/main/java/a8k/service/appctrl/action/errorhandler/DO_CLEAR_ERROR_BEFORE_WORK.java
-
82src/main/java/a8k/service/appctrl/action/errorhandler/DO_PROCESS_ERROR_PLATE.java
-
84src/main/java/a8k/service/appctrl/action/errorhandler/DO_PROCESS_ERROR_TUBE.java
-
82src/main/java/a8k/service/appctrl/action/incubate/PROCESS_INCUBATE_COMPLETED_PLATE.java
-
6src/main/java/a8k/service/appctrl/action/mainflow/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java
-
2src/main/java/a8k/service/appctrl/action/mainflow/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java
-
5src/main/java/a8k/service/appctrl/action/mainflow/SEQ4_PRE_PROCESS.java
-
4src/main/java/a8k/service/appctrl/action/mainflow/SEQ5_PROCESS.java
-
7src/main/java/a8k/service/appctrl/action/mainflow/SEQ6_POST_PROCESS.java
-
3src/main/java/a8k/service/appctrl/action/mainflow/SEQ7_EJECT_TUBEHOLDER.java
-
71src/main/java/a8k/service/appstate/IncubationPlateMgrService.java
-
41src/main/java/a8k/service/appstate/OptScanModuleStateMgrService.java
-
7src/main/java/a8k/service/appstate/resource/A8kPublicResourceType.java
-
2src/main/java/a8k/service/appstate/type/IncubationSubTank.java
-
4src/main/java/a8k/service/appstate/type/OptScanModule.java
-
1src/main/java/a8k/service/appstate/type/state/IncubationSubTankState.java
-
3src/main/java/a8k/service/appstate/type/state/OptScanModuleState.java
@ -0,0 +1,82 @@ |
|||||
|
package a8k.service.appctrl.action.errorhandler; |
||||
|
|
||||
|
import a8k.OS; |
||||
|
import a8k.service.appctrl.CondtionMgrService; |
||||
|
import a8k.service.appctrl.action.base.A8kActionStepType; |
||||
|
import a8k.service.appctrl.action.base.A8kStepAction; |
||||
|
import a8k.service.appstate.GStateService; |
||||
|
import a8k.service.appstate.IncubationPlateMgrService; |
||||
|
import a8k.service.appstate.OptScanModuleStateMgrService; |
||||
|
import a8k.service.appstate.resource.A8kPublicResourceType; |
||||
|
import a8k.service.appstate.type.IncubationSubTank; |
||||
|
import a8k.service.appstate.type.MainFlowCtrlState; |
||||
|
import a8k.service.appstate.type.state.A8kWorkState; |
||||
|
import a8k.service.appstate.type.state.IncubationSubTankState; |
||||
|
import a8k.type.exception.AppException; |
||||
|
import jakarta.annotation.PostConstruct; |
||||
|
import jakarta.annotation.Resource; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 处理错误的孵育盘 |
||||
|
*/ |
||||
|
@Component |
||||
|
public class DO_PROCESS_ERROR_PLATE extends A8kStepAction { |
||||
|
static Logger logger = LoggerFactory.getLogger(DO_PROCESS_ERROR_PLATE.class); |
||||
|
|
||||
|
DO_PROCESS_ERROR_PLATE() { |
||||
|
super(A8kActionStepType.DO_PROCESS_ERROR_PLATE); |
||||
|
} |
||||
|
|
||||
|
@Resource |
||||
|
GStateService gstate; |
||||
|
@Resource |
||||
|
CondtionMgrService cms; |
||||
|
@Resource |
||||
|
IncubationPlateMgrService incubationPlateMgrService; |
||||
|
@Resource |
||||
|
OptScanModuleStateMgrService optScanModuleStateMgrService; |
||||
|
|
||||
|
MainFlowCtrlState mfcs; |
||||
|
@PostConstruct |
||||
|
void init() { |
||||
|
mfcs = gstate.mainFlowCtrlState; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
@Override public void doaction() throws AppException { |
||||
|
//ProcessErrorBeforeContinue |
||||
|
|
||||
|
while (true) { |
||||
|
IncubationSubTank errorTank = incubationPlateMgrService.getErrorPlate(); |
||||
|
if (errorTank == null) { |
||||
|
break; |
||||
|
} |
||||
|
logger.info("处理错误板夹:{}", errorTank.pos); |
||||
|
//TODO:推出板夹到光学模组,同时丢弃板夹 |
||||
|
logger.info("推出板夹到光学模组"); |
||||
|
logger.info("丢弃板夹"); |
||||
|
OS.forceSleep(3000); |
||||
|
// |
||||
|
optScanModuleStateMgrService.newPlateToOptScanPos(errorTank); |
||||
|
optScanModuleStateMgrService.dropPlate(); |
||||
|
incubationPlateMgrService.setIncubationPlateState(errorTank.pos, IncubationSubTankState.EMPTY); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Override public Boolean checkCondition() { |
||||
|
Boolean cond1 = cms.isCanDoAction(); |
||||
|
Boolean cond2 = cms.isHasSomeErrorPlatesToBeProcessed(); |
||||
|
Boolean cond3 = cms.isOptModuleEmpty(); |
||||
|
return cond1 && cond2 && cond3; |
||||
|
} |
||||
|
|
||||
|
@Override public List<A8kPublicResourceType> getResourceList() { |
||||
|
return List.of(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,84 @@ |
|||||
|
package a8k.service.appctrl.action.errorhandler; |
||||
|
|
||||
|
import a8k.OS; |
||||
|
import a8k.service.appctrl.CondtionMgrService; |
||||
|
import a8k.service.appctrl.action.base.A8kActionStepType; |
||||
|
import a8k.service.appctrl.action.base.A8kStepAction; |
||||
|
import a8k.service.appstate.GStateService; |
||||
|
import a8k.service.appstate.IncubationPlateMgrService; |
||||
|
import a8k.service.appstate.OptScanModuleStateMgrService; |
||||
|
import a8k.service.appstate.TubeProcessStateMgrService; |
||||
|
import a8k.service.appstate.resource.A8kPublicResourceType; |
||||
|
import a8k.service.appstate.type.MainFlowCtrlState; |
||||
|
import a8k.service.appstate.type.Tube; |
||||
|
import a8k.service.appstate.type.state.A8kWorkState; |
||||
|
import a8k.service.appstate.type.state.TubeState; |
||||
|
import a8k.type.exception.AppException; |
||||
|
import jakarta.annotation.PostConstruct; |
||||
|
import jakarta.annotation.Resource; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 处理错误的试管 |
||||
|
*/ |
||||
|
@Component |
||||
|
public class DO_PROCESS_ERROR_TUBE extends A8kStepAction { |
||||
|
static Logger logger = LoggerFactory.getLogger(DO_PROCESS_ERROR_TUBE.class); |
||||
|
|
||||
|
DO_PROCESS_ERROR_TUBE() { |
||||
|
super(A8kActionStepType.DO_PROCESS_ERROR_TUBE); |
||||
|
} |
||||
|
|
||||
|
@Resource |
||||
|
GStateService gstate; |
||||
|
@Resource |
||||
|
CondtionMgrService cms; |
||||
|
@Resource |
||||
|
IncubationPlateMgrService incubationPlateMgrService; |
||||
|
@Resource |
||||
|
OptScanModuleStateMgrService optScanModuleStateMgrService; |
||||
|
@Resource |
||||
|
TubeProcessStateMgrService tubeProcessStateMgrService; |
||||
|
|
||||
|
|
||||
|
MainFlowCtrlState mfcs; |
||||
|
|
||||
|
@PostConstruct |
||||
|
void init() { |
||||
|
mfcs = gstate.mainFlowCtrlState; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Override public void doaction() throws AppException { |
||||
|
//ProcessErrorBeforeContinue |
||||
|
|
||||
|
Tube tube = gstate.getCurProcessingTube(); |
||||
|
assert tube != null; |
||||
|
|
||||
|
logger.info("处理错误试管:{}", tube.sampleid); |
||||
|
logger.info("复位摇匀模组"); |
||||
|
OS.forceSleep(4000); |
||||
|
//复位摇匀模组 |
||||
|
logger.info("复位HBOT"); |
||||
|
//复位HBOT |
||||
|
OS.forceSleep(4000); |
||||
|
tubeProcessStateMgrService.setCurTubeState(TubeState.PROCESS_COMPLETE); |
||||
|
} |
||||
|
|
||||
|
@Override public Boolean checkCondition() { |
||||
|
Boolean cond1 = cms.isCanDoAction(); |
||||
|
Boolean cond2 = cms.isHasSometubesToBeProcessed(); |
||||
|
return cond1 && cond2; |
||||
|
} |
||||
|
|
||||
|
@Override public List<A8kPublicResourceType> getResourceList() { |
||||
|
return List.of( |
||||
|
A8kPublicResourceType.ShakeModule, |
||||
|
A8kPublicResourceType.HBOT |
||||
|
); |
||||
|
} |
||||
|
} |
@ -0,0 +1,82 @@ |
|||||
|
package a8k.service.appctrl.action.incubate; |
||||
|
|
||||
|
import a8k.OS; |
||||
|
import a8k.service.appctrl.CondtionMgrService; |
||||
|
import a8k.service.appctrl.action.base.A8kActionStepType; |
||||
|
import a8k.service.appctrl.action.base.A8kStepAction; |
||||
|
import a8k.service.appstate.GStateService; |
||||
|
import a8k.service.appstate.IncubationPlateMgrService; |
||||
|
import a8k.service.appstate.OptScanModuleStateMgrService; |
||||
|
import a8k.service.appstate.TubeProcessStateMgrService; |
||||
|
import a8k.service.appstate.resource.A8kPublicResourceType; |
||||
|
import a8k.service.appstate.type.IncubationSubTank; |
||||
|
import a8k.service.appstate.type.MainFlowCtrlState; |
||||
|
import a8k.service.appstate.type.Tube; |
||||
|
import a8k.service.appstate.type.state.IncubationSubTankState; |
||||
|
import a8k.service.appstate.type.state.TubeState; |
||||
|
import a8k.type.exception.AppException; |
||||
|
import jakarta.annotation.PostConstruct; |
||||
|
import jakarta.annotation.Resource; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 处理错误的试管 |
||||
|
*/ |
||||
|
@Component |
||||
|
public class PROCESS_INCUBATE_COMPLETED_PLATE extends A8kStepAction { |
||||
|
static Logger logger = LoggerFactory.getLogger(PROCESS_INCUBATE_COMPLETED_PLATE.class); |
||||
|
|
||||
|
PROCESS_INCUBATE_COMPLETED_PLATE() { |
||||
|
super(A8kActionStepType.PROCESS_INCUBATE_COMPLETED_PLATE); |
||||
|
} |
||||
|
|
||||
|
@Resource |
||||
|
GStateService gstate; |
||||
|
@Resource |
||||
|
CondtionMgrService cms; |
||||
|
@Resource |
||||
|
IncubationPlateMgrService incubationPlateMgrService; |
||||
|
@Resource |
||||
|
OptScanModuleStateMgrService optScanModuleStateMgrService; |
||||
|
@Resource |
||||
|
TubeProcessStateMgrService tubeProcessStateMgrService; |
||||
|
|
||||
|
|
||||
|
MainFlowCtrlState mfcs; |
||||
|
|
||||
|
@PostConstruct |
||||
|
void init() { |
||||
|
mfcs = gstate.mainFlowCtrlState; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Override public void doaction() throws AppException { |
||||
|
IncubationSubTank tank = incubationPlateMgrService.getOneExpiredPlate(); |
||||
|
if (tank == null) { |
||||
|
return; |
||||
|
} |
||||
|
logger.info("推出板夹到光学模组,{}", tank.pos); |
||||
|
OS.forceSleep(3000); |
||||
|
|
||||
|
optScanModuleStateMgrService.newPlateToOptScanPos(tank); |
||||
|
incubationPlateMgrService.setIncubationPlateState(tank.pos, IncubationSubTankState.EMPTY); |
||||
|
} |
||||
|
|
||||
|
@Override public Boolean checkCondition() { |
||||
|
Boolean cond1 = cms.isCanDoAction(); |
||||
|
Boolean cond2 = incubationPlateMgrService.isHasExpiredPlate(); |
||||
|
Boolean cond3 = optScanModuleStateMgrService.isEmpty(); |
||||
|
return cond1 && cond2 && cond3; |
||||
|
} |
||||
|
|
||||
|
@Override public List<A8kPublicResourceType> getResourceList() { |
||||
|
return List.of( |
||||
|
A8kPublicResourceType.OPTModule, |
||||
|
A8kPublicResourceType.IncubationPlateModule |
||||
|
); |
||||
|
} |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
package a8k.service.appstate; |
||||
|
|
||||
|
import a8k.service.appstate.type.IncubationSubTank; |
||||
|
import a8k.service.appstate.type.OptScanModule; |
||||
|
import a8k.service.appstate.type.state.IncubationSubTankState; |
||||
|
import a8k.service.appstate.type.state.OptScanModuleState; |
||||
|
import jakarta.annotation.Resource; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
@Component |
||||
|
public class OptScanModuleStateMgrService { |
||||
|
@Resource |
||||
|
GStateService gstate; |
||||
|
|
||||
|
synchronized public void newPlateToOptScanPos(IncubationSubTank tank) { |
||||
|
OptScanModule optScanModule = gstate.getOptScanModule(); |
||||
|
optScanModule.state = OptScanModuleState.PLATE_IS_READY; |
||||
|
optScanModule.isErrorPlate = tank.state.equals(IncubationSubTankState.ERROR); |
||||
|
optScanModule.bloodType = tank.bloodType; |
||||
|
optScanModule.sampleBarcode = tank.sampleBarcode; |
||||
|
optScanModule.userid = tank.userid; |
||||
|
optScanModule.projIndex = tank.projIndex; |
||||
|
optScanModule.projProcessContxt = tank.projProcessContxt; |
||||
|
} |
||||
|
|
||||
|
synchronized public void dropPlate() { |
||||
|
OptScanModule optScanModule = gstate.getOptScanModule(); |
||||
|
optScanModule.state = OptScanModuleState.EMPTY; |
||||
|
} |
||||
|
|
||||
|
synchronized public void startScanPlate() { |
||||
|
OptScanModule optScanModule = gstate.getOptScanModule(); |
||||
|
optScanModule.state = OptScanModuleState.SCANNING; |
||||
|
} |
||||
|
|
||||
|
synchronized public Boolean isEmpty() { |
||||
|
OptScanModule optScanModule = gstate.getOptScanModule(); |
||||
|
return optScanModule.state.equals(OptScanModuleState.EMPTY); |
||||
|
} |
||||
|
|
||||
|
} |
@ -1,9 +1,10 @@ |
|||||
package a8k.service.appstate.resource; |
package a8k.service.appstate.resource; |
||||
|
|
||||
public enum A8kPublicResourceType { |
public enum A8kPublicResourceType { |
||||
SampleTransferXMotor,//样本平移电机 |
|
||||
IncubationPlateMotor,//孵育盘电机 |
|
||||
PlatesBoxMotor,//板夹仓电机 |
|
||||
|
ShakeModule,//样本平移电机 |
||||
|
IncubationPlateModule,//孵育盘电机 |
||||
|
OPTModule, //光学电机 |
||||
|
PlatesBoxModule,//板夹仓电机 |
||||
HBOT,//HBOT |
HBOT,//HBOT |
||||
CurTubeProcessToken,//当前管子处理令牌 |
CurTubeProcessToken,//当前管子处理令牌 |
||||
} |
} |
@ -1,6 +1,7 @@ |
|||||
package a8k.service.appstate.type.state; |
package a8k.service.appstate.type.state; |
||||
|
|
||||
public enum OptScanModuleState { |
public enum OptScanModuleState { |
||||
IDLE, |
|
||||
|
EMPTY, |
||||
|
PLATE_IS_READY, |
||||
SCANNING, |
SCANNING, |
||||
} |
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue