Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
f2d353e0eb
  1. 4
      src/main/java/a8k/service/appdata/AppSampleMgrService.java
  2. 47
      src/main/java/a8k/service/appdevicectrl/action/DO_CHECK_THE_QUANTITY_OF_CONSUMABLES.java
  3. 4
      src/main/java/a8k/service/appdevicectrl/action/base/A8kStepAction.java
  4. 39
      src/main/java/a8k/service/appdevicectrl/action/mainflow/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java
  5. 20
      src/main/java/a8k/service/appdevicectrl/action/mainflow/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java
  6. 62
      src/main/java/a8k/service/appdevicectrl/action/mainflow/SEQ3_CHECK_THE_QUANTITY_OF_CONSUMABLES.java
  7. 129
      src/main/java/a8k/service/appdevicectrl/scheduler/MainFlowCtrlScheduler.java
  8. 4
      src/main/java/a8k/service/appstate/AppA8kGStateService.java
  9. 26
      src/main/java/a8k/service/appstate/type/IncubationPlate.java
  10. 11
      src/main/java/a8k/service/appstate/type/IncubationPlateStatus.java
  11. 14
      src/main/java/a8k/service/appstate/type/IncubationSubTank.java
  12. 6
      src/main/java/a8k/service/appstate/type/Tube.java
  13. 10
      src/main/java/a8k/service/appstate/type/TubeHolder.java
  14. 2
      src/main/java/a8k/service/appstate/type/state/IncubationSubTankState.java
  15. 2
      src/main/java/a8k/service/appstate/type/state/TubeState.java
  16. 10
      src/main/java/a8k/type/IncubatorPos.java

4
src/main/java/a8k/service/appdata/AppSampleMgrService.java

@ -5,7 +5,7 @@ import a8k.controler.extapi.utils.ExtApiFn;
import a8k.controler.extapi.utils.ExtApiTab;
import a8k.dbservice.SampleRecordDBService;
import a8k.dbservice.type.SampleRecord;
import a8k.service.appstate.type.TubeState;
import a8k.service.appstate.type.Tube;
import a8k.type.type.BloodType;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
@ -59,7 +59,7 @@ public class AppSampleMgrService {
return record;
}
public void addSampleRecord(TubeState[] state) {
public void addSampleRecord(Tube[] state) {
Date intertime = new Date();
for (int i = 0; i < state.length; i++) {
if (state[i] == null) {

47
src/main/java/a8k/service/appdevicectrl/action/DO_CHECK_THE_QUANTITY_OF_CONSUMABLES.java

@ -1,47 +0,0 @@
package a8k.service.appdevicectrl.action;
import a8k.service.appdevicectrl.action.base.A8kActionStepType;
import a8k.service.appdevicectrl.action.base.A8kStepAction;
import a8k.service.appstate.AppA8kGStateService;
import a8k.service.appstate.resource.A8kPublicResourceType;
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_CHECK_THE_QUANTITY_OF_CONSUMABLES extends A8kStepAction {
static Logger logger = LoggerFactory.getLogger(DO_CHECK_THE_QUANTITY_OF_CONSUMABLES.class);
DO_CHECK_THE_QUANTITY_OF_CONSUMABLES() {
super(A8kActionStepType.DO_CHECK_THE_QUANTITY_OF_CONSUMABLES);
}
@Resource
AppA8kGStateService gstate;
@PostConstruct
void init() {
}
@Override public void doaction() throws AppException {
}
@Override public Boolean checkCondition() {
return false;
}
@Override public List<A8kPublicResourceType> getDeplyResourceList() {
return List.of();
}
}

4
src/main/java/a8k/service/appdevicectrl/action/base/A8kStepAction.java

@ -30,4 +30,8 @@ public class A8kStepAction {
}
public Boolean isAllowsParallelRunning() {
return true;
}
}

39
src/main/java/a8k/service/appdevicectrl/action/mainflow/SEQ1_ENTER_TUBEHOLDER_AND_SCAN.java

@ -13,7 +13,6 @@ import a8k.service.appstate.AppA8kGStateService;
import a8k.service.appstate.MainFlowCtrlState;
import a8k.service.appstate.resource.A8kPublicResourceType;
import a8k.service.appstate.type.TubeHolder;
import a8k.service.appstate.type.state.A8kWorkState;
import a8k.service.appstate.type.state.TubeHolderState;
import a8k.service.devicedriver.ctrl.SampleScanTransportCtrl;
import a8k.type.exception.AppException;
@ -28,6 +27,10 @@ import org.springframework.stereotype.Component;
import java.util.List;
/**
*
*
*/
@Component
public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction {
static Logger logger = LoggerFactory.getLogger(SEQ1_ENTER_TUBEHOLDER_AND_SCAN.class);
@ -139,37 +142,37 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction {
return null;
}
assert setting == null || setting.tubeSettings.length == state.tubeStates.length;
assert setting == null || setting.tubeSettings.length == state.tubes.length;
//逐个赋值试管配置信息
updaetGroupId();
for (int i = 0; i < state.tubeStates.length; i++) {
for (int i = 0; i < state.tubes.length; i++) {
if (!scanResult.tubesScanResults[i].isTubeExist) {
state.tubeStates[i].isTubeExist = scanResult.tubesScanResults[i].isTubeExist;
state.tubes[i].isTubeExist = scanResult.tubesScanResults[i].isTubeExist;
continue;
}
state.tubeStates[i].isTubeExist = scanResult.tubesScanResults[i].isTubeExist;
state.tubeStates[i].isHighTube = scanResult.tubesScanResults[i].isHighTube;
state.tubes[i].isTubeExist = scanResult.tubesScanResults[i].isTubeExist;
state.tubes[i].isHighTube = scanResult.tubesScanResults[i].isHighTube;
//首先赋值默认值
state.tubeStates[i].bloodType = BloodType.WHOLE_BLOOD;
state.tubeStates[i].sampleBarcode = "";
state.tubeStates[i].userid = "";
state.tubeStates[i].projIndex = List.of();//不做任何项目
state.tubes[i].bloodType = BloodType.WHOLE_BLOOD;
state.tubes[i].sampleBarcode = "";
state.tubes[i].userid = "";
state.tubes[i].projIndex = List.of();//不做任何项目
//然后赋值用户配置的数值
if (setting != null) {
state.tubeStates[i].bloodType = setting.tubeSettings[i].bloodType;
state.tubeStates[i].sampleBarcode = setting.tubeSettings[i].sampleBarcode;
state.tubeStates[i].userid = setting.tubeSettings[i].userid;
state.tubeStates[i].projIndex = setting.tubeSettings[i].projIndex;
state.tubes[i].bloodType = setting.tubeSettings[i].bloodType;
state.tubes[i].sampleBarcode = setting.tubeSettings[i].sampleBarcode;
state.tubes[i].userid = setting.tubeSettings[i].userid;
state.tubes[i].projIndex = setting.tubeSettings[i].projIndex;
}
if (state.tubeStates[i].userid.isEmpty()) {
state.tubeStates[i].userid = genUserId(i);
if (state.tubes[i].userid.isEmpty()) {
state.tubes[i].userid = genUserId(i);
}
//最后赋值扫描到的数值
@ -212,7 +215,7 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction {
}
logger.info("将样本信息写入数据库");
appSampleMgrService.addSampleRecord(state.tubeStates);
appSampleMgrService.addSampleRecord(state.tubes);
logger.info("更新试管架状态");
gstate.setTubeHolder(state);
@ -220,7 +223,7 @@ public class SEQ1_ENTER_TUBEHOLDER_AND_SCAN extends A8kStepAction {
@Override public Boolean checkCondition() {
//处于工作状态
Boolean cond1 = mfcs.workState.equals(A8kWorkState.WORKING) && mfcs.workState.equals(gstate.getWorkState());
Boolean cond1 = gstate.isWorking();
//试管架处于空闲状态
Boolean cond2 = gstate.getTubeHolder().state.equals(TubeHolderState.IDLE);
//入料通道是否为空

20
src/main/java/a8k/service/appdevicectrl/action/mainflow/SEQ2_SWITCH_TO_THE_NEXT_TUBE.java

@ -5,10 +5,9 @@ import a8k.service.appdevicectrl.action.base.A8kStepAction;
import a8k.service.appstate.AppA8kGStateService;
import a8k.service.appstate.resource.A8kPublicResourceType;
import a8k.service.appstate.type.TubeHolder;
import a8k.service.appstate.type.TubeState;
import a8k.service.appstate.type.state.A8kWorkState;
import a8k.service.appstate.type.Tube;
import a8k.service.appstate.type.state.TubeHolderState;
import a8k.service.appstate.type.state.TubeProcessState;
import a8k.service.appstate.type.state.TubeState;
import a8k.service.devicedriver.ctrl.SampleScanTransportCtrl;
import a8k.type.exception.AppException;
import jakarta.annotation.PostConstruct;
@ -43,14 +42,14 @@ public class SEQ2_SWITCH_TO_THE_NEXT_TUBE extends A8kStepAction {
int moveToNextTube() throws AppException {
TubeHolder state = gstate.getTubeHolder();
assert state.tubeStates.length == 10;
assert state.tubes.length == 10;
int nowTubeIndex = state.processingTubeIndex;
int nextTubeIndex = -1;
for (int i = nowTubeIndex + 1; i < 10; i++) {
TubeState tubeState = state.tubeStates[i];
if (!tubeState.isTubeExist) {
Tube tube = state.tubes[i];
if (!tube.isTubeExist) {
continue;
}
nextTubeIndex = i;
@ -70,17 +69,16 @@ public class SEQ2_SWITCH_TO_THE_NEXT_TUBE extends A8kStepAction {
* 1. 将下一个试管移动到预处理位
* 2. 如果当前试管是最后一个试管则设置试管架状态为处理完成
*/
TubeHolder state = gstate.getTubeHolder();
int nextPos = moveToNextTube();
if (nextPos == -1) {
logger.info("当前试管架处理完成");
state.state = TubeHolderState.PROCESS_FINISHED;
gstate.getTubeHolder().state = TubeHolderState.PROCESS_FINISHED;
return;
}
logger.info("移动到下一个试管:{}", nextPos);
sstc.moveTubeToPreProcessPos(nextPos);
state.processingTubeIndex = nextPos;
gstate.getTubeHolder().processingTubeIndex = nextPos;
}
@ -97,8 +95,8 @@ public class SEQ2_SWITCH_TO_THE_NEXT_TUBE extends A8kStepAction {
Boolean cond1 = gstate.isWorking();
//试管架正在处理中, 且当前试管Index=-1
Boolean cond2 = gstate.getTubeHolderState().equals(TubeHolderState.PROCESSING) && gstate.getTubeHolder().getProcessingTube() == null;
//当前试管处理完成
Boolean cond3 = gstate.getTubeHolder().getProcessingTube().state.equals(TubeProcessState.PROCESS_COMPLETE);
//当前<试管>处理完成
Boolean cond3 = gstate.getTubeHolder().getProcessingTube().state.equals(TubeState.PROCESS_COMPLETE);
return cond1 && (cond2 || cond3);
}

62
src/main/java/a8k/service/appdevicectrl/action/mainflow/SEQ3_CHECK_THE_QUANTITY_OF_CONSUMABLES.java

@ -0,0 +1,62 @@
package a8k.service.appdevicectrl.action.mainflow;
import a8k.service.appdevicectrl.action.base.A8kActionStepType;
import a8k.service.appdevicectrl.action.base.A8kStepAction;
import a8k.service.appstate.AppA8kGStateService;
import a8k.service.appstate.resource.A8kPublicResourceType;
import a8k.service.appstate.type.state.TubeHolderState;
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 SEQ3_CHECK_THE_QUANTITY_OF_CONSUMABLES extends A8kStepAction {
static Logger logger = LoggerFactory.getLogger(SEQ3_CHECK_THE_QUANTITY_OF_CONSUMABLES.class);
SEQ3_CHECK_THE_QUANTITY_OF_CONSUMABLES() {
super(A8kActionStepType.DO_CHECK_THE_QUANTITY_OF_CONSUMABLES);
}
@Resource
AppA8kGStateService gstate;
@PostConstruct
void init() {
}
@Override public void doaction() throws AppException {
//检查孵育盘是否有空位
// if(gstate.getIncubationPlate().getEmptyPos())){
// }
//检查当前试管的待做项目所需要的资源是否充足
}
@Override public Boolean checkCondition() {
// 仪器是否在工作
Boolean cond1 = gstate.isWorking();
// 试管架是否在处理中
Boolean cond2 = gstate.getTubeHolder().state.equals(TubeHolderState.PROCESSING);
// 试管是否待处理
Boolean cond3 = gstate.getTubeHolder().getProcessingTube() != null && gstate.getTubeHolder().getProcessingTube().state.equals(TubeState.TO_BE_PROCESSED);
// 孵育盘是否有空位
Boolean cond4 = gstate.getIncubationPlate().getEmptyPos() != null;
return cond1 && cond2 && cond3 && cond4;
}
@Override public List<A8kPublicResourceType> getDeplyResourceList() {
return List.of();
}
@Override public Boolean isAllowsParallelRunning() {
return false;
}
}

129
src/main/java/a8k/service/appdevicectrl/scheduler/MainFlowCtrlScheduler.java

@ -112,40 +112,54 @@ public class MainFlowCtrlScheduler {
// Scheduler
//
List<A8kActionStepType> guessWhatToDo() {
List<A8kActionStepType> dowhatList = new ArrayList<>();
List<A8kStepAction> guessWhatToDo() {
try {
List<A8kStepAction> dowhatList = new ArrayList<>();
for (A8kStepAction action : stepActionList) {
// Boolean cond = appCondtionMgrService.checkCondtion(action.getCondtions());
if (action.checkCondition()) {
Boolean relayResourceSuc = appResourceMgrService.applyForResources(this, action.getDeplyResourceList());
if (relayResourceSuc) {
dowhatList.add(action.step);
dowhatList.add(action);
}
}
}
return dowhatList;
} catch (Exception e) {
logger.info("guessWhatToDo error:{}", e.getMessage());
appResourceMgrService.releaseAllResource(this);
}
return new ArrayList<>();
}
void docall(A8kActionStepType key) throws AppException {
for (A8kStepAction action : stepActionList) {
if (action.step == key) {
action.doaction();
return;
}
A8kEcodeContext callFn(A8kStepAction key) {
beforeDoWhat(key.step);
try {
logger.info("doaction:{}", key.step);
key.doaction();
return new A8kEcodeContext(key.step, A8kEcode.NoError);
} catch (AppException appe) {
return new A8kEcodeContext(key.step, A8kEcode.fromInt(appe.getErrorCode()));
}
}
A8kEcodeContext callFn(A8kActionStepType key) {
beforeDoWhat(key);
void clearError() {
/*
* 清除错误
*/
clearErrorPendingFlag = false;
try {
docall(key);
return new A8kEcodeContext(key, A8kEcode.NoError);
beforeDoWhat(A8kActionStepType.DO_CLEAR_ERROR);
boolean suc = ecodeClearProcesser.process(state.ecodeList);
if (suc) {
state.ecodeList.clear();
state.errorFlag = false;
}
} catch (AppException appe) {
return new A8kEcodeContext(key, A8kEcode.fromInt(appe.getErrorCode()));
A8kEcodeContext context = new A8kEcodeContext(A8kActionStepType.DO_CLEAR_ERROR, A8kEcode.fromInt(appe.getErrorCode()));
a8kEcodePostProcesser(List.of(context));
}
}
@ -179,6 +193,46 @@ public class MainFlowCtrlScheduler {
return ecodeList;
}
void doActions(List<A8kStepAction> dowhatList) {
//
List<A8kStepAction> serialActionList = new ArrayList<>();
List<A8kStepAction> parallelActionList = new ArrayList<>();
List<A8kEcodeContext> ecodeList = new ArrayList<>();
for (A8kStepAction action : dowhatList) {
if (action.isAllowsParallelRunning()) {
parallelActionList.add(action);
} else {
serialActionList.add(action);
}
}
//执行串行任务
for (A8kStepAction action : serialActionList) {
A8kEcodeContext aec = callFn(action);
ecodeList.add(aec);
}
//执行并行任务
List<Future<A8kEcodeContext>> futureList = new ArrayList<>();
for (A8kStepAction dowhat : parallelActionList) {
var future = executor.submit(() -> callFn(dowhat));
futureList.add(future);
}
//等待并行任务完成
List<A8kEcodeContext> ecodeListParallel = waitAllActionIsDone(futureList);
appResourceMgrService.releaseAllResource(this);
//合并错误
ecodeList.addAll(ecodeListParallel);
if (!ecodeList.isEmpty()) {
a8kEcodePostProcesser(ecodeList);
}
}
void a8kEcodePostProcesser(List<A8kEcodeContext> ecodeList) {
//如果有错误且错误列表不为空则将错误列表添加到错误列表中
if (!this.state.ecodeList.isEmpty()) {
@ -211,49 +265,12 @@ public class MainFlowCtrlScheduler {
if (state.fatalErrorFlag) {
OS.forceSleep(800);
} else if (clearErrorPendingFlag) {
/*
* 清除错误
*/
clearErrorPendingFlag = false;
try {
beforeDoWhat(A8kActionStepType.DO_CLEAR_ERROR);
boolean suc = ecodeClearProcesser.process(state.ecodeList);
if (suc) {
state.ecodeList.clear();
state.errorFlag = false;
}
} catch (AppException appe) {
A8kEcodeContext context = new A8kEcodeContext(A8kActionStepType.DO_CLEAR_ERROR, A8kEcode.fromInt(appe.getErrorCode()));
a8kEcodePostProcesser(List.of(context));
}
clearError();
OS.forceSleep(800);
} else if (state.errorFlag) {
OS.forceSleep(800);
} else {
List<A8kActionStepType> dowhatList;
try {
dowhatList = guessWhatToDo();
} catch (Exception e) {
appResourceMgrService.releaseAllResource(this);
OS.forceSleep(800);
continue;
}
List<Future<A8kEcodeContext>> futureList = new ArrayList<>();
for (A8kActionStepType dowhat : dowhatList) {
var future = executor.submit(() -> callFn(dowhat));
futureList.add(future);
}
//等待所有任务完成
List<A8kEcodeContext> ecodeList = waitAllActionIsDone(futureList);
appResourceMgrService.releaseAllResource(this);
if (!ecodeList.isEmpty()) {
a8kEcodePostProcesser(ecodeList);
}
doActions(guessWhatToDo());
OS.forceSleep(800);
}
}

4
src/main/java/a8k/service/appstate/AppA8kGStateService.java

@ -2,7 +2,7 @@ package a8k.service.appstate;
import a8k.service.appdevicectrl.type.app_consumables_mgr_service.ConsumableState;
import a8k.service.appstate.type.EmergencyPosRunState;
import a8k.service.appstate.type.IncubationPlateStatus;
import a8k.service.appstate.type.IncubationPlate;
import a8k.service.appstate.type.OptScanModule;
import a8k.service.appstate.type.TubeHolder;
import a8k.service.appstate.type.state.A8kWorkState;
@ -33,7 +33,7 @@ public class AppA8kGStateService {
//急诊为状态
EmergencyPosRunState emergencyPosRunState = new EmergencyPosRunState();
//孵育盘状态
IncubationPlateStatus incubationPlateStatus = new IncubationPlateStatus();
IncubationPlate incubationPlate = new IncubationPlate();
//耗材状态
ConsumableState consumableState = new ConsumableState();
//光学模组状态

26
src/main/java/a8k/service/appstate/type/IncubationPlate.java

@ -0,0 +1,26 @@
package a8k.service.appstate.type;
import a8k.service.appstate.type.state.IncubationSubTankState;
import a8k.type.IncubatorPos;
public class IncubationPlate {
public IncubationSubTank[] subtanks = new IncubationSubTank[20];
public IncubatorPos incubationPos = IncubatorPos.SPACE01;
public IncubationPlate() {
for (int i = 0; i < 20; i++) {
subtanks[i] = new IncubationSubTank(IncubatorPos.of(i));
}
}
public IncubatorPos getEmptyPos() {
for (IncubationSubTank subtank : subtanks) {
if (subtank.state.equals(IncubationSubTankState.EMPTY)) {
return subtank.pos;
}
}
return null;
}
}

11
src/main/java/a8k/service/appstate/type/IncubationPlateStatus.java

@ -1,11 +0,0 @@
package a8k.service.appstate.type;
public class IncubationPlateStatus {
public ReactingPlateState[] plateStates = new ReactingPlateState[20];
public Integer incubationPos = 0;//0->360,只做显示不参与任何业务
public IncubationPlateStatus() {
for (int i = 0; i < plateStates.length; i++) {
plateStates[i] = new ReactingPlateState(i);
}
}
}

14
src/main/java/a8k/service/appstate/type/ReactingPlateState.java → src/main/java/a8k/service/appstate/type/IncubationSubTank.java

@ -1,16 +1,17 @@
package a8k.service.appstate.type;
import a8k.service.appstate.type.state.ReactionPlateState;
import a8k.service.appstate.type.state.IncubationSubTankState;
import a8k.type.IncubatorPos;
import a8k.type.type.BloodType;
import java.util.Date;
public class ReactingPlateState {
public class IncubationSubTank {
//位置
Integer index;
IncubatorPos pos;
//孵育时间
public ReactionPlateState state; //孵育盘状态
public IncubationSubTankState state = IncubationSubTankState.EMPTY; //孵育盘状态
//Info
public BloodType bloodType = BloodType.WHOLE_BLOOD; //血液类型
@ -23,9 +24,8 @@ public class ReactingPlateState {
Date startIncubatedTime; //开始孵育时间
Integer targetIncubatedTimeS; //目标孵育时间
public ReactingPlateState(Integer index) {
this.index = index;
this.state = ReactionPlateState.EMPTY;
public IncubationSubTank(IncubatorPos pos) {
this.pos = pos;
}
}

6
src/main/java/a8k/service/appstate/type/TubeState.java → src/main/java/a8k/service/appstate/type/Tube.java

@ -1,12 +1,12 @@
package a8k.service.appstate.type;
import a8k.service.appstate.type.state.TubeProcessState;
import a8k.service.appstate.type.state.TubeState;
import a8k.type.type.BloodType;
import java.util.ArrayList;
import java.util.List;
public class TubeState {
public class Tube {
public String sampleid; //样本ID-系统生成-唯一标识一个样本
public Boolean isHighTube = false;
@ -18,5 +18,5 @@ public class TubeState {
public List<Integer> projIndex = new ArrayList<>(); //项目代码
//
public TubeProcessState state = TubeProcessState.TO_BE_PROCESSED; //样本被处理的状态
public TubeState state = TubeState.TO_BE_PROCESSED; //样本被处理的状态
}

10
src/main/java/a8k/service/appstate/type/TubeHolder.java

@ -5,22 +5,22 @@ import a8k.type.type.A8kTubeHolderType;
public class TubeHolder {
public A8kTubeHolderType tubeHolderType = A8kTubeHolderType.BloodTube; //试管架类型
public TubeState[] tubeStates = new TubeState[10];
public Tube[] tubes = new Tube[10];
public TubeHolderState state = TubeHolderState.IDLE; //处理状态
public Integer processingTubeIndex = -1; //当前正在被处理的试管索引
public TubeHolder() {
for (int i = 0; i < tubeStates.length; i++) {
tubeStates[i] = new TubeState();
for (int i = 0; i < tubes.length; i++) {
tubes[i] = new Tube();
}
}
public TubeState getProcessingTube() {
public Tube getProcessingTube() {
if (processingTubeIndex == -1) {
return null;
}
return tubeStates[processingTubeIndex];
return tubes[processingTubeIndex];
}
}

2
src/main/java/a8k/service/appstate/type/state/ReactionPlateState.java → src/main/java/a8k/service/appstate/type/state/IncubationSubTankState.java

@ -1,7 +1,7 @@
package a8k.service.appstate.type.state;
//反应板条状态
public enum ReactionPlateState {
public enum IncubationSubTankState {
EMPTY,//板夹仓中
WAITING_FOR_DROP,//等待滴液
INCUBATING, //孵育中

2
src/main/java/a8k/service/appstate/type/state/TubeProcessState.java → src/main/java/a8k/service/appstate/type/state/TubeState.java

@ -1,6 +1,6 @@
package a8k.service.appstate.type.state;
public enum TubeProcessState {
public enum TubeState {
//
TO_BE_PROCESSED,//待处理
PRE_PROCESSING, //预处理

10
src/main/java/a8k/type/IncubatorPos.java

@ -4,7 +4,17 @@ public enum IncubatorPos {
SPACE01, SPACE02, SPACE03, SPACE04, SPACE05, SPACE06, SPACE07, SPACE08, SPACE09, SPACE10, SPACE11, SPACE12, SPACE13, SPACE14, SPACE15, SPACE16, SPACE17, SPACE18, SPACE19, SPACE20;
final public Integer off;
private IncubatorPos() {
this.off = ordinal();
}
public static IncubatorPos of(Integer off) {
for (IncubatorPos pos : IncubatorPos.values()) {
if (pos.off.equals(off)) {
return pos;
}
}
return null;
}
}
Loading…
Cancel
Save