Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
eb7ee4bfe1
  1. 24
      README.md
  2. 1
      src/main/java/a8k/controler/extapi/pagecontrol/ExtApiTabConfig.java
  3. 7
      src/main/java/a8k/hardware/type/a8kcanprotocol/A8kEcode.java
  4. 73
      src/main/java/a8k/service/appdevicectrl/AppEmergencySamplePosStateMgrService.java
  5. 2
      src/main/java/a8k/service/appdevicectrl/action/DO_EJECT_TUBEHOLDER.java
  6. 2
      src/main/java/a8k/service/appdevicectrl/action/DO_START.java
  7. 15
      src/main/java/a8k/service/appstate/AppA8kGStateService.java
  8. 20
      src/main/java/a8k/service/appstate/type/EmergencyPosRunState.java
  9. 8
      src/main/java/a8k/service/bak_appbase/progress/EmergencySampleProgress.java
  10. 8
      src/main/java/a8k/service/bak_appbase/progress/EmergencySampleState.java
  11. 2
      src/main/java/a8k/type/type/BloodType.java
  12. 18
      src/main/java/a8k/type/type/SupportBloodType.java

24
README.md

@ -144,7 +144,11 @@ TODO:
```
DO_ENTER_TUBEHOLDER_AND_SCAN(入料)
-> 修改试管架状态为READY
DO_
DO_SWITCH_TO_THE_NEXT_TUBE
->
DO_CHECK_TUBE_IS_OK_TO_PROCESS(检查试管是否可以被处理,如果检查不合格,则不切换状态)
-> 修改试管状态为PROCESSING
@ -164,11 +168,25 @@ TODO:
DO_PUSH_REACTION_PLATE(推出反应板)
DO_OPT_SCAN
```
```
任务列表:
0. 重新思考整个系统的状态
1. 尽可能完成整个流程的控制,如果中间缺少某些位置参数,则只修改状态,让整个流程执行下去。
2. 支持急诊位置
3. 根据配置,修改对应的动作的细节,使其支持更多的试管架类型,更多的项目类型。
4. 完善日志
3. 完成剩余动作的校准工作。(取样本,取耗材,滴定,光学扫描,结果分析)
5. 添加温度控制。
5. 支持吸空检测。
6. 支持反应板夹类型检测。
```

1
src/main/java/a8k/controler/extapi/pagecontrol/ExtApiTabConfig.java

@ -6,6 +6,7 @@ public enum ExtApiTabConfig {
AppDeviceCtrlService("应用控制.应用控制", true),
AppConsumablesMgrService("应用控制.耗材管理", true),
AppTubeSettingMgrService("应用控制.试管(样本)配置", true),//OK
AppEmergencySamplePosStateMgrService("应用控制.急诊位状态管理", true),//OK
AppUserMgrService("应用数据.用户管理", true), //Ok
AppSettingsMgr("应用数据.设备配置管理", true), //OK

7
src/main/java/a8k/hardware/type/a8kcanprotocol/A8kEcode.java

@ -56,6 +56,7 @@ public enum A8kEcode {
TubeHolderSettingIsLocked(138),//试管架设置被锁定
TubeHolderSettingNotFound(139),//试管架设置未找到
TubeHolderTypeIsNotSupport(140),//试管架类型不支持
EmergencySampleIsProcessing(141),//急诊样本正在处理中
/**
* 特殊服务错误码
@ -224,10 +225,10 @@ public enum A8kEcode {
WaterCoolingPumpIsError(1903),
WaterCoolingPelterIsError(1904),
;
;
public final int index;
public int unknownIndex = 0;
public int unknownIndex = 0;
A8kEcode(int index) {
this.index = index;
@ -257,4 +258,4 @@ public enum A8kEcode {
return String.format("unkown(%d)", id);
}
}
}

73
src/main/java/a8k/service/appdevicectrl/AppEmergencySamplePosStateMgrService.java

@ -0,0 +1,73 @@
package a8k.service.appdevicectrl;
import a8k.controler.extapi.pagecontrol.ExtApiTabConfig;
import a8k.controler.extapi.utils.EnginnerPageActionParam;
import a8k.controler.extapi.utils.ExtApiFn;
import a8k.controler.extapi.utils.ExtApiTab;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.service.appstate.AppA8kGStateService;
import a8k.service.appstate.type.EmergencyPosRunState;
import a8k.service.bak_appbase.progress.EmergencySampleState;
import a8k.type.exception.AppException;
import a8k.type.type.BloodType;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.AppEmergencySamplePosStateMgrService)
@Component
public class AppEmergencySamplePosStateMgrService {
@Resource
AppA8kGStateService gstate;
/*
* 状态变化
*
* 初始时:
* getEmergencyPosRunState() -> state = IDLE
*
* 提交样本配置后
* getEmergencySampleSetting() -> state = PENDING
*
* 提交样本配置且机器开始处理急诊样本时候
* getEmergencyPosRunState() -> state = PROCESSING
*
* 机器处理完急诊样本后
* getEmergencyPosRunState() -> state = FINISHED
*/
/**
* 提交紧急样本设置
* @param userid 用户ID
* @param barcodeid 样本条码
* @param bloodType 血型
* @param projIndexList
*
* 提交后就默认样本已经放置好了所以需要前台提醒用户需要先暂停设备放好样本
*/
@ExtApiFn(name = "提交紧急样本设置", group = "紧急样本设置")
public void commitEmergencySampleSetting(String userid, String barcodeid, BloodType bloodType,//
@EnginnerPageActionParam(name = "逗号分割项目列表(例子1,2,3)") String projIndexList) throws AppException {
EmergencyPosRunState state = gstate.getEmergencyPosRunState();
if (state.state.equals(EmergencySampleState.IDLE) || state.state.equals(EmergencySampleState.FINISHED)) {
state.userid = userid;
state.bloodType = bloodType;
state.barcodeid = barcodeid;
state.projIndex.clear();
for (String index : projIndexList.split(",")) {
state.projIndex.add(Integer.parseInt(index));
}
state.state = EmergencySampleState.PENDING;
} else {
throw new AppException(A8kEcode.EmergencySampleIsProcessing.index);
}
}
@ExtApiFn(name = "获取急诊样本位状态", group = "急诊样本位状态")
public EmergencyPosRunState getEmergencyPosRunState() {
return gstate.getEmergencyPosRunState();
}
}

2
src/main/java/a8k/service/appdevicectrl/action/DO_EJECT_TUBEHOLDER.java

@ -33,8 +33,6 @@ public class DO_EJECT_TUBEHOLDER extends A8kStepAction {
mfcs = gstate.mainFlowCtrlState;
}
@Override public void doaction() throws AppException {
stc.ejectTubeHolder();
stc.moveTubeRackMoveToEnterPos();

2
src/main/java/a8k/service/appdevicectrl/action/DO_START.java

@ -37,6 +37,8 @@ public class DO_START extends A8kStepAction {
@Override public void doaction() throws AppException {
if (gstate.mainFlowCtrlState.workState.equals(A8kWorkState.IDLE)) {
sstc.ejectTubeHolder();
//TODO: 弹出所有反应板夹
}
gstate.mainFlowCtrlState.workState = A8kWorkState.WORKING;
}

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

@ -28,18 +28,21 @@ public class AppA8kGStateService {
//设备工作状态标识位
A8kWorkState workState = A8kWorkState.IDLE; //
//当前正在被处理的试管架状态
TubeHolderState tubeHolderState = new TubeHolderState();
TubeHolderState tubeHolderState = new TubeHolderState();
//急诊为状态
EmergencyPosRunState emergencyPosRunState = new EmergencyPosRunState();
EmergencyPosRunState emergencyPosRunState = new EmergencyPosRunState();
//孵育盘状态
IncubationPlateStatus incubationPlateStatus = new IncubationPlateStatus();
IncubationPlateStatus incubationPlateStatus = new IncubationPlateStatus();
//
// 耗材状态试管配置急诊位样本配置均是前端提交的设置信息
//
//耗材状态
ConsumableState consumableState = new ConsumableState();
ConsumableState consumableState = new ConsumableState();
//试管配置
List<TubeHolderSetting> tubeHolderSettings = new ArrayList<>();
List<TubeHolderSetting> tubeHolderSettings = new ArrayList<>();
public MainFlowCtrlState mainFlowCtrlState = new MainFlowCtrlState();

20
src/main/java/a8k/service/appstate/type/EmergencyPosRunState.java

@ -1,14 +1,16 @@
package a8k.service.appstate.type;
import a8k.type.sampleinfo.SampleInfo;
import a8k.service.bak_appbase.result.ReactionResult;
import a8k.service.bak_appbase.progress.EmergencySampleProgress;
import a8k.service.bak_appbase.progress.EmergencySampleState;
import a8k.type.type.BloodType;
import java.util.ArrayList;
import java.util.List;
public class EmergencyPosRunState {
//急诊位状态
public EmergencySampleProgress emergencySampleProgress = EmergencySampleProgress.IDLE;
//样本位状态
SampleInfo sampleState = new SampleInfo(); //绑定的样本运行状态
//急诊位反应结果
public ReactionResult emergencyResult = new ReactionResult();
public String userid = ""; //用户输入的样本ID不做逻辑只做展示
public String barcodeid = ""; //用于请求用户信息的条码ID
public List<Integer> projIndex = new ArrayList<>(); //项目代码
public BloodType bloodType = BloodType.WHOLE_BLOOD; //血型
public EmergencySampleState state = EmergencySampleState.IDLE; //急诊位状态
}

8
src/main/java/a8k/service/bak_appbase/progress/EmergencySampleProgress.java

@ -1,8 +0,0 @@
package a8k.service.bak_appbase.progress;
public enum EmergencySampleProgress {
IDLE,//
WAITING_SAMPLE,//
PROCESSING,//
PROCESS_COMPLETE,//
}

8
src/main/java/a8k/service/bak_appbase/progress/EmergencySampleState.java

@ -0,0 +1,8 @@
package a8k.service.bak_appbase.progress;
public enum EmergencySampleState {
IDLE,//
PENDING,//
PROCESSING,//
FINISHED,//
}

2
src/main/java/a8k/type/type/BloodType.java

@ -2,5 +2,5 @@ package a8k.type.type;
public enum BloodType {
WHOLE_BLOOD,//全血
SERUM;//血清或者血浆
SERUM_OR_PLASMA,//血清或者血浆
}

18
src/main/java/a8k/type/type/SupportBloodType.java

@ -0,0 +1,18 @@
package a8k.type.type;
//ID卡中的类型
public enum SupportBloodType {
WHOLE_BLOOD(0),//全血
PLASMA(1),//血浆
SERUM(2),
SERUM_AND_PLASMA(3),//血清或者血浆
WHOLE_BLOOD_AND_PLASMA(4),//全血和血浆
WHOLE_BLOOD_AND_SERUM_AND_PLASMA(5),//全血和血清或者血浆
URINE(6),//尿液
FAECES(7),//粪便
;
final int index;
SupportBloodType(int index) {
this.index = index;
}
}
Loading…
Cancel
Save