22 changed files with 494 additions and 101 deletions
-
23src/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
-
34src/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
-
83src/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; |
|||
|
|||
public enum A8kPublicResourceType { |
|||
SampleTransferXMotor,//样本平移电机 |
|||
IncubationPlateMotor,//孵育盘电机 |
|||
PlatesBoxMotor,//板夹仓电机 |
|||
ShakeModule,//样本平移电机 |
|||
IncubationPlateModule,//孵育盘电机 |
|||
OPTModule, //光学电机 |
|||
PlatesBoxModule,//板夹仓电机 |
|||
HBOT,//HBOT |
|||
CurTubeProcessToken,//当前管子处理令牌 |
|||
} |
@ -1,6 +1,7 @@ |
|||
package a8k.service.appstate.type.state; |
|||
|
|||
public enum OptScanModuleState { |
|||
IDLE, |
|||
EMPTY, |
|||
PLATE_IS_READY, |
|||
SCANNING, |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue