Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
aa1501f36f
  1. 5
      src/main/java/a8k/constant/AppConstant.java
  2. 8
      src/main/java/a8k/dbservice/type/ReactionResultRecord.java
  3. 85
      src/main/java/a8k/service/appctrl/action/opt/PLATE_OPT_SCAN.java
  4. 61
      src/main/java/a8k/service/appdata/AppReactionResultMgrService.java
  5. 19
      src/main/java/a8k/service/appstate/GStateService.java
  6. 5
      src/main/java/a8k/service/appstate/OptScanModuleStateMgrService.java
  7. 13
      src/main/java/a8k/type/ReactionResult.java
  8. 5
      src/main/java/a8k/type/reaction_result_type/ReactionResultStatus.java

5
src/main/java/a8k/constant/AppConstant.java

@ -3,6 +3,7 @@ package a8k.constant;
import a8k.type.Consumable;
public class AppConstant {
public static final int CONSUMABLE_NUM = 25;
public static final int TIP_NUM = 120;
public static final int CONSUMABLE_NUM = 25;
public static final int TIP_NUM = 120;
public static final String APP_VERSION = "1.0.0";
}

8
src/main/java/a8k/dbservice/type/ReactionResultRecord.java

@ -27,15 +27,17 @@ public class ReactionResultRecord {
public int id = 0;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date date = new Date();
public Date date = new Date();
//样本信息
public BloodType sampleBloodType = BloodType.WHOLE_BLOOD; //血液类型
public String sampleBarcode = ""; //用于请求用户信息的条码ID
public String sampleUserid = ""; //用户输入的样本ID不做逻辑只做展示
public String sampleId = ""; // 样本ID,由系统生成
//项目信息
public String projName = ""; // 项目名称
public String lotId = ""; // 批次名称
public String projName = ""; // 项目名称
public String lotId = ""; // 批次名称
public Integer projIndex = 0; // 项目名称代码
@JsonFormat(pattern = "yyyy-MM-dd")
public Date expiryDate; // 有效日期

85
src/main/java/a8k/service/appctrl/action/opt/PLATE_OPT_SCAN.java

@ -0,0 +1,85 @@
package a8k.service.appctrl.action.opt;
import a8k.OS;
import a8k.dbservice.type.ReactionResultRecord;
import a8k.service.appctrl.CondtionMgrService;
import a8k.service.appctrl.action.base.A8kActionStepType;
import a8k.service.appctrl.action.base.A8kStepAction;
import a8k.service.appdata.AppReactionResultMgrService;
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.state.IncubationSubTankState;
import a8k.type.ReactionResult;
import a8k.type.exception.AppException;
import a8k.type.reaction_result_type.ReactionResultStatus;
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 PLATE_OPT_SCAN extends A8kStepAction {
static Logger logger = LoggerFactory.getLogger(PLATE_OPT_SCAN.class);
PLATE_OPT_SCAN() {
super(A8kActionStepType.PLATE_OPT_SCAN);
}
@Resource
GStateService gstate;
@Resource
CondtionMgrService cms;
@Resource
IncubationPlateMgrService incubationPlateMgrService;
@Resource
OptScanModuleStateMgrService optScanModuleStateMgrService;
@Resource
TubeProcessStateMgrService tubeProcessStateMgrService;
@Resource
AppReactionResultMgrService appReactionResultMgrService;
MainFlowCtrlState mfcs;
@PostConstruct
void init() {
mfcs = gstate.mainFlowCtrlState;
}
@Override public void doaction() throws AppException {
optScanModuleStateMgrService.startScanPlate();
logger.info("扫描板夹");
//记录扫描结果
//修改板夹状态
optScanModuleStateMgrService.dropPlate();
appReactionResultMgrService.addRecord(optScanModuleStateMgrService.getCurProjProcessContext(),
new ReactionResult(ReactionResultStatus.SUCCESS, "12.8 mg/L"),
new ReactionResult(ReactionResultStatus.ERROR_RESULT_OUT_OF_RANGE, ""));
}
@Override public Boolean checkCondition() {
Boolean cond1 = cms.isCanDoAction();
Boolean cond2 = !optScanModuleStateMgrService.isEmpty();
return cond1 && cond2;
}
@Override public List<A8kPublicResourceType> getResourceList() {
return List.of(
A8kPublicResourceType.OPTModule
);
}
}

61
src/main/java/a8k/service/appdata/AppReactionResultMgrService.java

@ -5,8 +5,17 @@ import a8k.controler.extapi.utils.ExtApiFn;
import a8k.controler.extapi.utils.ExtApiTab;
import a8k.dbservice.ReactionRecordDBService;
import a8k.dbservice.type.ReactionResultRecord;
import a8k.service.appstate.GStateService;
import a8k.service.appstate.TubeProcessContextMgrService;
import a8k.service.appstate.type.ProjProcessContext;
import a8k.service.appstate.type.TubeProcessContext;
import a8k.type.ReactionResult;
import a8k.type.reaction_result_type.ReactionResultStatus;
import a8k.utils.ZJsonHelper;
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;
@ -15,9 +24,20 @@ import java.util.List;
@ExtApiTab(cfg = ExtApiTabConfig.AppReactionResultMgrService)
public class AppReactionResultMgrService {
final static Logger logger = LoggerFactory.getLogger(AppReactionResultMgrService.class);
@Resource
ReactionRecordDBService reactionRecordDBService;
@Resource
TubeProcessContextMgrService tubeProcessContextMgrService;
@Resource
AppUserMgrService appUserMgrService;
@Resource
GStateService gstate;
@PostConstruct
public void init() {
}
@ -27,9 +47,44 @@ public class AppReactionResultMgrService {
return reactionRecordDBService.getAll();
}
@ExtApiFn(name = "添加测试记录")
public void addRecord() {
ReactionResultRecord record = new ReactionResultRecord();
public void addRecord(ProjProcessContext projContext, ReactionResult... reactionResults) {
ReactionResultRecord record = new ReactionResultRecord();
TubeProcessContext tubeContext = tubeProcessContextMgrService.getTubeContext(projContext.sampleId);
String operator = appUserMgrService.getLoginUsr() != null ? appUserMgrService.getLoginUsr().account : "UNLOGIN";
record.sampleBloodType = tubeContext.bloodType;
record.sampleBarcode = tubeContext.sampleBarcode;
record.sampleUserid = tubeContext.userid;
record.sampleId = tubeContext.sampleid;
record.projName = projContext.projName;
record.lotId = projContext.a8kIdCardInfo.lotId;
record.projIndex = projContext.a8kIdCardInfo.projIndex;
record.expiryDate = projContext.a8kIdCardInfo.expiryDate;
record.operator = operator;
record.appVersion = gstate.getAppVersion();
record.mcuVersion = gstate.getMcuVersion();
record.sn = gstate.getSn();
if (reactionResults.length == 1) {
record.subProjResultStatus1 = reactionResults[0].status;
record.subProjResult1 = reactionResults[0].result;
} else if (reactionResults.length == 2) {
record.subProjResultStatus1 = reactionResults[0].status;
record.subProjResult1 = reactionResults[0].result;
record.subProjResultStatus2 = reactionResults[1].status;
record.subProjResult2 = reactionResults[1].result;
} else if (reactionResults.length == 3) {
record.subProjResultStatus1 = reactionResults[0].status;
record.subProjResult1 = reactionResults[0].result;
record.subProjResultStatus2 = reactionResults[1].status;
record.subProjResult2 = reactionResults[1].result;
record.subProjResultStatus3 = reactionResults[2].status;
record.subProjResult3 = reactionResults[2].result;
}
logger.info("addRecord: {}", ZJsonHelper.objectToJson(record));
reactionRecordDBService.add(record);
}

19
src/main/java/a8k/service/appstate/GStateService.java

@ -1,5 +1,6 @@
package a8k.service.appstate;
import a8k.constant.AppConstant;
import a8k.service.appctrl.type.app_consumables_mgr_service.ConsumableState;
import a8k.service.appstate.type.*;
import a8k.service.appstate.type.state.A8kWorkState;
@ -19,12 +20,9 @@ public class GStateService {
public static final Logger logger = LoggerFactory.getLogger(GStateService.class);
//温度
Integer temperature = 25;
Integer temperature = 25;
//设备是否初始化过
Boolean deviceInited = false;
//设备工作状态标识位
Boolean deviceInited = false;
//当前正在被处理的试管架状态
TubeHolder tubeHolder = new TubeHolder();
//急诊为状态
@ -35,14 +33,15 @@ public class GStateService {
ConsumableState consumableState = new ConsumableState();
//光学模组状态
OptScanModule optScanModule = new OptScanModule();
//
// 耗材状态试管配置急诊位样本配置均是前端提交的设置信息
//
//试管配置
List<TubeHolderSetting> tubeHolderSettings = new ArrayList<>();
//当前正在处理的试管
Tube curProcessingTube = null;
Tube curProcessingTube = null;
//
String appVersion = AppConstant.APP_VERSION;
String mcuVersion = "NOTSET";
String sn = "NOTSET";
public Boolean debugMode = true;

5
src/main/java/a8k/service/appstate/OptScanModuleStateMgrService.java

@ -2,6 +2,7 @@ package a8k.service.appstate;
import a8k.service.appstate.type.IncubationSubTank;
import a8k.service.appstate.type.OptScanModule;
import a8k.service.appstate.type.ProjProcessContext;
import a8k.service.appstate.type.state.IncubationSubTankState;
import a8k.service.appstate.type.state.OptScanModuleState;
import jakarta.annotation.Resource;
@ -38,4 +39,8 @@ public class OptScanModuleStateMgrService {
return optScanModule.state.equals(OptScanModuleState.EMPTY);
}
synchronized public ProjProcessContext getCurProjProcessContext() {
return gstate.getOptScanModule().projProcessContxt;
}
}

13
src/main/java/a8k/type/ReactionResult.java

@ -0,0 +1,13 @@
package a8k.type;
import a8k.type.reaction_result_type.ReactionResultStatus;
public class ReactionResult {
public ReactionResultStatus status = ReactionResultStatus.DISABLED;
public String result = "";
public ReactionResult(ReactionResultStatus status, String result) {
this.status = status;
this.result = result;
}
}

5
src/main/java/a8k/type/reaction_result_type/ReactionResultStatus.java

@ -1,7 +1,10 @@
package a8k.type.reaction_result_type;
public enum ReactionResultStatus {
//
/*
*
* 命名规范如果结果错误则ERROR开头的状态表示结果异常
*/
DISABLED, // 未启用
SUCCESS,// 成功
ERROR,// 结果异常

Loading…
Cancel
Save