Browse Source

update

tags/v0
zhaohe 10 months ago
parent
commit
7755b9071e
  1. BIN
      app.db
  2. 8
      src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java
  3. 12
      src/main/java/a8k/service/app/appctrl/mainflowctrl/base/A8kActionStepType.java
  4. 4
      src/main/java/a8k/service/app/appdata/ReactionRecordMgrService.java
  5. 21
      src/main/java/a8k/service/bases/appevent/AppWarningNotifyEvent.java
  6. 10
      src/main/java/a8k/service/db/ReactionRecordDBService.java
  7. 5
      src/main/java/a8k/service/db/type/ReactionResultRecord.java
  8. 92
      src/main/java/a8k/service/debug/AppDebugHelperService.java
  9. 2
      src/main/java/a8k/type/ecode/AppError.java
  10. 4
      src/main/java/a8k/type/ecode/ConsumeNotEnoughError.java
  11. 10
      src/main/java/a8k/type/ecode/HardwareError.java
  12. 2
      src/main/java/a8k/type/reaction_result_type/ReactionResultStatus.java
  13. 2
      src/main/java/a8k/utils/AppExceptionBuilder.java
  14. 4
      src/main/java/a8k/utils/ZDateUtils.java

BIN
app.db

8
src/main/java/a8k/service/app/appctrl/mainflowctrl/action/PLATE_OPT_SCAN.java

@ -3,7 +3,7 @@ package a8k.service.app.appctrl.mainflowctrl.action;
import a8k.service.app.appctrl.mainflowctrl.CondtionMgrService;
import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType;
import a8k.service.app.appctrl.mainflowctrl.base.A8kStepAction;
import a8k.service.app.appdata.AppReactionResultMgrService;
import a8k.service.app.appdata.ReactionRecordMgrService;
import a8k.service.app.appstate.GStateService;
import a8k.service.app.appstate.IncubationPlateMgrService;
import a8k.service.app.appstate.OptScanModuleStateMgrService;
@ -42,9 +42,9 @@ public class PLATE_OPT_SCAN extends A8kStepAction {
@Resource
OptScanModuleStateMgrService optScanModuleStateMgrService;
@Resource
TubeStateMgrService tubeStateMgrService;
TubeStateMgrService tubeStateMgrService;
@Resource
AppReactionResultMgrService appReactionResultMgrService;
ReactionRecordMgrService reactionRecordMgrService;
MainFlowCtrlState mfcs;
@ -63,7 +63,7 @@ public class PLATE_OPT_SCAN extends A8kStepAction {
//修改板夹状态
optScanModuleStateMgrService.dropPlate();
appReactionResultMgrService.addRecord(optScanModuleStateMgrService.getCurProjProcessContext(),
reactionRecordMgrService.addRecord(optScanModuleStateMgrService.getCurProjProcessContext(),
new ReactionResult(ReactionResultStatus.SUCCESS, "12.8 mg/L"),
new ReactionResult(ReactionResultStatus.ERROR_RESULT_OUT_OF_RANGE, ""));
}

12
src/main/java/a8k/service/app/appctrl/mainflowctrl/base/A8kActionStepType.java

@ -10,19 +10,19 @@ public enum A8kActionStepType {
SEQ1_ENTER_TUBEHOLDER_AND_SCAN, //入料并扫描
SEQ2_SWITCH_TO_THE_NEXT_TUBE,// 切换到下一个试管
SEQ3_APPLAY_RESOURCE,//申请资源
SEQ4_PRE_PROCESS,
SEQ5_PROCESS,
SEQ6_POST_PROCESS,
SEQ4_PRE_PROCESS,//样本预处理
SEQ5_PROCESS,//样本处理中
SEQ6_POST_PROCESS,//样本后处理
SEQ7_EJECT_TUBEHOLDER, //弹出试管架
//incubate
PROCESS_INCUBATE_COMPLETED_PLATE,//处理孵育完成的板
//OPT
PLATE_OPT_SCAN,
PLATE_OPT_SCAN,//光学扫描
//Error
DO_CLEAR_ERROR_BEFORE_WORK,//在启动前清除错误
DO_PROCESS_ERROR_TUBE,
DO_PROCESS_ERROR_PLATE,
DO_PROCESS_ERROR_TUBE,//处理异常的样本
DO_PROCESS_ERROR_PLATE,//处理异常的孵育盘
}

4
src/main/java/a8k/service/app/appdata/AppReactionResultMgrService.java → src/main/java/a8k/service/app/appdata/ReactionRecordMgrService.java

@ -21,9 +21,9 @@ import java.util.List;
@Component
@ExtApiTab(cfg = ExtApiTabConfig.AppReactionResultMgrService)
public class AppReactionResultMgrService {
public class ReactionRecordMgrService {
final static Logger logger = LoggerFactory.getLogger(AppReactionResultMgrService.class);
final static Logger logger = LoggerFactory.getLogger(ReactionRecordMgrService.class);
@Resource
ReactionRecordDBService reactionRecordDBService;

21
src/main/java/a8k/service/bases/appevent/AppWarningNotifyEvent.java

@ -1,24 +1,23 @@
package a8k.service.bases.appevent;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.type.ecode.AppError;
public class AppWarningNotifyEvent extends AppEvent {
public Integer errorCode;
public String errorCodeStr;
public AppError error;
public AppWarningNotifyEvent(Integer errorCode) {
public AppWarningNotifyEvent(AppError erro) {
super(AppWarningNotifyEvent.class.getSimpleName());
this.errorCode = errorCode;
this.errorCodeStr = A8kEcode.toDisPlayString(errorCode);
this.error = erro;
}
public AppWarningNotifyEvent(A8kEcode ecode) {
this(ecode.index);
public AppWarningNotifyEvent(A8kEcode errorCode) {
super(AppWarningNotifyEvent.class.getSimpleName());
this.error = new AppError(errorCode);
}
public String toString() {
return String.format("%s", errorCodeStr);
public AppWarningNotifyEvent(Integer errorCode) {
super(AppWarningNotifyEvent.class.getSimpleName());
this.error = new AppError(A8kEcode.fromInt(errorCode));
}
}

10
src/main/java/a8k/service/db/ReactionRecordDBService.java

@ -1,7 +1,9 @@
package a8k.service.db;
import a8k.service.db.type.ReactionResultRecord;
import a8k.service.debug.AppDebugHelperService;
import a8k.utils.ZSqliteJdbcHelper;
import freemarker.debug.impl.DebuggerService;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.SneakyThrows;
@ -23,9 +25,17 @@ public class ReactionRecordDBService {
@Resource
JdbcTemplate jdbcTemplate;
@Resource
AppDebugHelperService appDebugHelperService;
@PostConstruct
void init() {
if(appDebugHelperService.isDebug()) {
ZSqliteJdbcHelper.forceDeleteTable(jdbcTemplate, tableName);
ZSqliteJdbcHelper.createTable(jdbcTemplate, tableName, tClass);
}
if (!ZSqliteJdbcHelper.isTableExist(jdbcTemplate, tableName)) {
ZSqliteJdbcHelper.createTable(jdbcTemplate, tableName, tClass);
}

5
src/main/java/a8k/service/db/type/ReactionResultRecord.java

@ -2,6 +2,8 @@ package a8k.service.db.type;
import a8k.type.reaction_result_type.ReactionResultStatus;
import a8k.type.type.BloodType;
import a8k.utils.DateUtil;
import a8k.utils.ZDateUtils;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
@ -26,8 +28,7 @@ import java.util.Date;
public class ReactionResultRecord {
public int id = 0;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date date = new Date();
public Integer creatDate = ZDateUtils.getTimestamp();
//样本信息
public BloodType sampleBloodType = BloodType.WHOLE_BLOOD; //血液类型

92
src/main/java/a8k/service/debug/AppDebugHelperService.java

@ -1,17 +1,29 @@
package a8k.service.debug;
import a8k.OS;
import a8k.SpringBootBeanUtil;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.hardware.type.a8kcanprotocol.CmdId;
import a8k.hardware.type.a8kcanprotocol.MId;
import a8k.service.app.appctrl.CheckPointType;
import a8k.service.app.appctrl.mainflowctrl.base.A8kActionStepType;
import a8k.service.app.appctrl.mainflowctrl.base.A8kErrorContext;
import a8k.service.app.appdata.ReactionRecordMgrService;
import a8k.service.app.appstate.GStateService;
import a8k.service.app.appstate.type.ProjProcessContext;
import a8k.service.bases.AppEventBusService;
import a8k.service.bases.appevent.A8kHardwareReport;
import a8k.service.bases.appevent.*;
import a8k.service.db.A8kProjIdCardDBService;
import a8k.service.db.A8kProjInfoDBService;
import a8k.service.db.ReactionRecordDBService;
import a8k.service.db.type.A8kIdCardInfo;
import a8k.service.db.type.A8kProjOptConfig;
import a8k.service.db.type.A8kProjectInfo;
import a8k.service.db.type.ReactionResultRecord;
import a8k.service.db.type.a8kidcard.zenum.A8kReactionFlowType;
import a8k.service.debug.fakeprojinfo.*;
import a8k.type.ConsumableGroup;
import a8k.type.ConsumableOneChResult;
@ -19,15 +31,24 @@ import a8k.type.ConsumableScanRawResult;
import a8k.type.checkpoint.CheckResult;
import a8k.type.checkpoint.Checkpoint;
import a8k.type.consumables.ConsumablesErrorType;
import a8k.type.ecode.AppCodeError;
import a8k.type.ecode.AppError;
import a8k.type.ecode.ConsumeNotEnoughError;
import a8k.type.ecode.HardwareError;
import a8k.type.exception.AppException;
import a8k.type.reaction_result_type.ReactionResultStatus;
import a8k.type.type.BloodType;
import a8k.utils.A8kPacketBuilder;
import a8k.utils.AppExceptionBuilder;
import a8k.utils.ReactionPlate2DCodeHelper;
import a8k.utils.ZDateUtils;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Component
@ -50,9 +71,12 @@ public class AppDebugHelperService {
P22_PCTAndHsCRP p22_pctAndHsCRP;
@Resource
AppEventBusService eventBus;
@Resource
GStateService gstate;
FakeProjInfo mountIdcard;
String[] consumables = new String[6];
ConsumablesErrorType[] consumablesErrorType = new ConsumablesErrorType[6];
@ -149,6 +173,71 @@ public class AppDebugHelperService {
Arrays.fill(consumables, "");
}
@ExtApiFn(name = "添加反应结果记录", group = "虚拟数据", order = 4)
public void addVirtualReactionRecord() {
ReactionRecordDBService service = SpringBootBeanUtil.getBean(ReactionRecordDBService.class);
ReactionResultRecord record = new ReactionResultRecord();
record.sampleBloodType = BloodType.WHOLE_BLOOD;
record.sampleBarcode = "XXXXXXXXXXXXXXX";
record.sampleUserid = "ABCDEFG";
record.projName = "hscrp";
record.lotId = "CAHAC46U";
record.projIndex = 1;
record.sampleId = "20120904_1";
record.expiryDate = ZDateUtils.nextDay();
record.operator = "admin"; // 操作员
record.appVersion = gstate.getAppVersion();//上层应用版本
record.mcuVersion = gstate.getMcuVersion(); // MCU软件版本
record.sn = gstate.getSn(); // 仪器序列号 =;
record.subProjResultStatus1 = ReactionResultStatus.SUCCESS;
record.subProjResultStatus2 = ReactionResultStatus.ERROR_RESULT_OUT_OF_RANGE;
record.subProjResultStatus3 = ReactionResultStatus.ERROR_QUALITY_PEAK_DETECTION;
record.subProjResult1 = "12.3mg/L,12.5g/ml,125mol/L"; //子项目1 结果
record.subProjResult2 = ""; //子项目2 结果
record.subProjResult3 = ""; //子项目3 结果
service.add(record);
}
//A8kEcodeContextListPromptEvent
//AppWarningNotifyEvent
//A8kErrorPromptEvent
//AppTubeholderSettingUpdateEvent
//DoA8kStepActionEvent
@ExtApiFn(name = "发送AppWarningNotifyEvent", group = "虚拟事件", order = 1)
public void buildAndSendAppWarningNotifyEvent() {
AppWarningNotifyEvent event = new AppWarningNotifyEvent(A8kEcode.UsrNotExitError);
eventBus.pushEvent(event);
}
@ExtApiFn(name = "A8kErrorPromptEvent", group = "虚拟事件", order = 2)
public void buildAndSendA8kErrorPromptEvent() {
A8kErrorPromptEvent event = new A8kErrorPromptEvent(new ConsumeNotEnoughError("Hscrp"));
eventBus.pushEvent(event);
event = new A8kErrorPromptEvent(new AppCodeError("XXXX额外的错误说明XXXX"));
eventBus.pushEvent(event);
event = new A8kErrorPromptEvent(new HardwareError(A8kEcode.StepMotorOverVoltage, MId.HbotM, CmdId.step_motor_read_pos));
eventBus.pushEvent(event);
}
@ExtApiFn(name = "发送AppTubeholderSettingUpdateEvent", group = "虚拟事件", order = 3)
public void buildAndSendAppTubeholderSettingUpdateEvent() {
eventBus.pushEvent(new AppTubeholderSettingUpdateEvent());
}
@ExtApiFn(name = "发送DoA8kStepActionEvent", group = "虚拟事件", order = 4)
public void buildAndSendDoA8kStepActionEvent() {
eventBus.pushEvent(new DoA8kStepActionEvent(A8kActionStepType.SEQ1_ENTER_TUBEHOLDER_AND_SCAN));
}
@ExtApiFn(name = "发送A8kEcodeContextListPromptEvent", group = "虚拟事件", order = 5)
public void buildAndSendA8kEcodeContextListPromptEvent() {
List<A8kErrorContext> errorContexts = new ArrayList<>();
errorContexts.add(new A8kErrorContext(A8kActionStepType.SEQ1_ENTER_TUBEHOLDER_AND_SCAN, new AppError(A8kEcode.TubeHolderTypeIsNotSupport)));
errorContexts.add(new A8kErrorContext(A8kActionStepType.SEQ5_PROCESS, new AppError(A8kEcode.NoTubeInHolder)));
eventBus.pushEvent(new A8kEcodeContextListPromptEvent(errorContexts));
}
//InterUse
public Boolean getVirtualIDCard() {
@ -187,6 +276,7 @@ public class AppDebugHelperService {
public ConsumableOneChResult scanOneCH(Integer ch) {
OS.forceSleep(1500);
ConsumableOneChResult result = new ConsumableOneChResult(ch);
switch (consumablesErrorType[ch]) {
case PASS: //通过

2
src/main/java/a8k/type/ecode/AppError.java

@ -4,9 +4,11 @@ import a8k.hardware.type.a8kcanprotocol.A8kEcode;
public class AppError {
public A8kEcode code;
public String errorType;
public AppError(A8kEcode errorCode) {
this.code = errorCode;
this.errorType = this.getClass().getSimpleName();
}
public String toString() {

4
src/main/java/a8k/type/ecode/ConsumeNotEnoughError.java

@ -3,11 +3,11 @@ package a8k.type.ecode;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
public class ConsumeNotEnoughError extends AppError {
public Integer projIndex;
public String projName;
public ConsumeNotEnoughError(String projName, Integer projIndex) {
public ConsumeNotEnoughError(String projName) {
super(A8kEcode.ConsumeNotEnough);
this.projName = projName;
}
}

10
src/main/java/a8k/type/ecode/HardwareError.java

@ -5,14 +5,12 @@ import a8k.hardware.type.a8kcanprotocol.CmdId;
import a8k.hardware.type.a8kcanprotocol.MId;
public class HardwareError extends AppError {
public MId mid;
public CmdId cmdId;
public MId mid;
public CmdId cmdId;
public HardwareError(A8kEcode errorCode, MId mid, CmdId cmdId) {
super(errorCode);
this.mid = mid;
this.cmdId = cmdId;
}
}

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

@ -9,5 +9,5 @@ public enum ReactionResultStatus {
SUCCESS,// 成功
ERROR,// 结果异常
ERROR_RESULT_OUT_OF_RANGE,// 结果超出范围
ERROR_DEPENDENT_VAR_OUT_OF_RANGE,// 依赖变量超出范围
ERROR_QUALITY_PEAK_DETECTION,// 质峰检测错误
}

2
src/main/java/a8k/utils/AppExceptionBuilder.java

@ -22,7 +22,7 @@ public class AppExceptionBuilder {
public AppException buildConsumeNotEnoughError(Integer projIndex) {
String projName = projConfigMgrService.getProjNameByLotId(projIndex);
return new AppException(new ConsumeNotEnoughError(projName, projIndex));
return new AppException(new ConsumeNotEnoughError(projName));
}
public AppException buildMutiErrorAppException(List<AppError> errors) {

4
src/main/java/a8k/utils/ZDateUtils.java

@ -10,4 +10,8 @@ public class ZDateUtils {
public static Date nextDay() {
return addOneDay(new Date());
}
public static Integer getTimestamp() {
return (int) (System.currentTimeMillis() / 1000);
}
}
Loading…
Cancel
Save