Browse Source

探测物质和小瓶缓冲液坐标校准完成

tags/v0
zhaohe 10 months ago
parent
commit
1b2b5bb36c
  1. BIN
      app.db
  2. 4
      src/main/java/a8k/hardware/A8kModParamInitializer.java
  3. 31
      src/main/java/a8k/service/app/devicedriver/calibration/HbotLittleBottleConsumableCalibration.java
  4. 33
      src/main/java/a8k/service/app/devicedriver/pos/HbotConsumablePosMgr.java
  5. 69
      src/main/java/a8k/service/db/LowerDeviceParameterDBService.java
  6. 13
      src/main/java/a8k/service/db/type/Parameter.java
  7. 20
      src/main/java/a8k/service/db/utils/PosParameterReader.java
  8. 2
      src/main/java/a8k/type/HbotConsumablePosParam.java
  9. 42
      src/main/java/a8k/utils/ZJsonHelper.java
  10. 11
      src/main/java/a8k/utils/ZSqliteJdbcHelper.java

BIN
app.db

4
src/main/java/a8k/hardware/A8kModParamInitializer.java

@ -70,7 +70,7 @@ public class A8kModParamInitializer {
canBus.moduleSetReg(MId.PlatesBoxPusherM, RegIndex.kret_step_motor_io_trigger_append_distance, 3); canBus.moduleSetReg(MId.PlatesBoxPusherM, RegIndex.kret_step_motor_io_trigger_append_distance, 3);
canBus.moduleSetReg(MId.OptModPullM, RegIndex.kret_step_motor_io_trigger_append_distance, 10); canBus.moduleSetReg(MId.OptModPullM, RegIndex.kret_step_motor_io_trigger_append_distance, 10);
canBus.moduleSetReg(MId.OptModScannerM, RegIndex.kret_step_motor_io_trigger_append_distance, 10); canBus.moduleSetReg(MId.OptModScannerM, RegIndex.kret_step_motor_io_trigger_append_distance, 10);
// pipetteCtrlModule.setReg(PipetteRegIndex.kreg_pipette_zm_io_trigger_append_distance, 0);
pipetteCtrlModule.setReg(PipetteRegIndex.kreg_pipette_zm_io_trigger_append_distance, 10);
canBus.moduleSetReg(MId.IncubatorRotateCtrlM, RegIndex.kret_step_motor_io_trigger_append_distance, 10); canBus.moduleSetReg(MId.IncubatorRotateCtrlM, RegIndex.kret_step_motor_io_trigger_append_distance, 10);
canBus.moduleSetReg(MId.ShakeModGripperYSV, RegIndex.kreg_mini_servo_limit_torque, 700); canBus.moduleSetReg(MId.ShakeModGripperYSV, RegIndex.kreg_mini_servo_limit_torque, 700);
@ -103,6 +103,8 @@ public class A8kModParamInitializer {
canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_d1, 5); canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_d1, 5);
canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_vstop, 1); canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_vstop, 1);
canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_tzerowait, 300); canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_tzerowait, 300);
canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_run_to_zero_speed, 80);
canBus.moduleSetReg(MId.HbotM, RegIndex.kreg_xyrobot_look_zero_edge_speed, 10);

31
src/main/java/a8k/service/app/devicedriver/calibration/HbotLittleBottleConsumableCalibration.java

@ -88,12 +88,10 @@ public class HbotLittleBottleConsumableCalibration {
LittleBottleConsumableType littleBottleConsumableType = LittleBottleConsumableType.BufferSolution; LittleBottleConsumableType littleBottleConsumableType = LittleBottleConsumableType.BufferSolution;
List<LittleBottleConsumableRefPoint> littleBottleConsumableRefPoint = new java.util.ArrayList<>(); List<LittleBottleConsumableRefPoint> littleBottleConsumableRefPoint = new java.util.ArrayList<>();
LittleBottleConsumablePosInfo littleBottleConsumablePosInfo;
@ExtApiFn(name = "开始标定小瓶坐标", group = "标定小瓶XY坐标", order = 30) @ExtApiFn(name = "开始标定小瓶坐标", group = "标定小瓶XY坐标", order = 30)
public void startCalibrateLittleBottleGroup(LittleBottleConsumableType type) throws AppException { public void startCalibrateLittleBottleGroup(LittleBottleConsumableType type) throws AppException {
littleBottleConsumablePosInfo = null;
littleBottleConsumableRefPoint = new java.util.ArrayList<>(); littleBottleConsumableRefPoint = new java.util.ArrayList<>();
littleBottleConsumableType = type; littleBottleConsumableType = type;
moveToZero(); moveToZero();
@ -104,9 +102,9 @@ public class HbotLittleBottleConsumableCalibration {
public Object addLittleBottleGroupRefPoint(ConsumableGroup group, Integer off0To24) throws AppException { public Object addLittleBottleGroupRefPoint(ConsumableGroup group, Integer off0To24) throws AppException {
enableModule(); enableModule();
Pos2d xypos = hbotModule.readPos(); Pos2d xypos = hbotModule.readPos();
pipetteCtrlModule.zMotorMeasureDistance();
Integer z = pipetteCtrlModule.zMotorReadMeasureDistanceResult();
LittleBottleConsumableRefPoint littleBufferRefPoint = new LittleBottleConsumableRefPoint(group, off0To24, new Pos3d(xypos.x, xypos.y, z));
// pipetteCtrlModule.zMotorMeasureDistance();
// Integer z = pipetteCtrlModule.zMotorReadMeasureDistanceResult();
LittleBottleConsumableRefPoint littleBufferRefPoint = new LittleBottleConsumableRefPoint(group, off0To24, new Pos3d(xypos.x, xypos.y, 0));
this.littleBottleConsumableRefPoint.add(littleBufferRefPoint); this.littleBottleConsumableRefPoint.add(littleBufferRefPoint);
disableModule(); disableModule();
ObjectNode node = ZJsonHelper.createObjectNode(); ObjectNode node = ZJsonHelper.createObjectNode();
@ -115,8 +113,15 @@ public class HbotLittleBottleConsumableCalibration {
return node; return node;
} }
@ExtApiFn(name = "移除最后一个参考点", group = "标定小瓶XY坐标", order = 32)
public void removeTheLastLittleBottleGroupRefPoint() {
if (!littleBottleConsumableRefPoint.isEmpty()) {
littleBottleConsumableRefPoint.remove(littleBottleConsumableRefPoint.size() - 1);
}
}
@ExtApiFn(name = "计算坐标", group = "标定小瓶XY坐标", order = 32)
@ExtApiFn(name = "读取坐标计算结果", group = "标定小瓶XY坐标", order = 33)
public LittleBottleConsumablePosInfo computeLittleBottlePosInfo() { public LittleBottleConsumablePosInfo computeLittleBottlePosInfo() {
//计算y0,所有group==0,1,2,同时0<=off<5的点求平均 //计算y0,所有group==0,1,2,同时0<=off<5的点求平均
Double[] y = new Double[2]; Double[] y = new Double[2];
@ -191,7 +196,7 @@ public class HbotLittleBottleConsumableCalibration {
var oldposInfo = hbotConsumablePosMgr.getLittleBottleConsumablePosInfo(littleBottleConsumableType); var oldposInfo = hbotConsumablePosMgr.getLittleBottleConsumablePosInfo(littleBottleConsumableType);
littleBottleConsumablePosInfo = new LittleBottleConsumablePosInfo();
var littleBottleConsumablePosInfo = new LittleBottleConsumablePosInfo();
littleBottleConsumablePosInfo.g0_000 = new Pos3d(x[0].intValue(), y[0].intValue(), oldposInfo.g0_000.z); littleBottleConsumablePosInfo.g0_000 = new Pos3d(x[0].intValue(), y[0].intValue(), oldposInfo.g0_000.z);
littleBottleConsumablePosInfo.g1_000 = new Pos3d(x[1].intValue(), y[0].intValue(), oldposInfo.g1_000.z); littleBottleConsumablePosInfo.g1_000 = new Pos3d(x[1].intValue(), y[0].intValue(), oldposInfo.g1_000.z);
littleBottleConsumablePosInfo.g2_000 = new Pos3d(x[2].intValue(), y[0].intValue(), oldposInfo.g2_000.z); littleBottleConsumablePosInfo.g2_000 = new Pos3d(x[2].intValue(), y[0].intValue(), oldposInfo.g2_000.z);
@ -203,12 +208,12 @@ public class HbotLittleBottleConsumableCalibration {
return littleBottleConsumablePosInfo; return littleBottleConsumablePosInfo;
} }
@ExtApiFn(name = "保存计算结果", group = "标定小瓶XY坐标", order = 33)
@ExtApiFn(name = "保存计算结果", group = "标定小瓶XY坐标", order = 34)
public void saveLittleBottleConsumablePosInfo() throws AppException { public void saveLittleBottleConsumablePosInfo() throws AppException {
hbotConsumablePosMgr.setLittleBottleConsumablePosInfo(littleBottleConsumableType, littleBottleConsumablePosInfo);
hbotConsumablePosMgr.setLittleBottleConsumablePosInfo(littleBottleConsumableType, computeLittleBottlePosInfo());
} }
@ExtApiFn(name = "读取所有参考点", group = "标定小瓶XY坐标", order = 33)
@ExtApiFn(name = "读取所有参考点", group = "标定小瓶XY坐标", order = 35)
public Object readAllRefPoint() throws AppException { public Object readAllRefPoint() throws AppException {
return littleBottleConsumableRefPoint; return littleBottleConsumableRefPoint;
} }
@ -220,20 +225,26 @@ public class HbotLittleBottleConsumableCalibration {
@ExtApiFn(name = "校准.小瓶穿孔Z轴位置", group = "标定Z轴", order = 101) @ExtApiFn(name = "校准.小瓶穿孔Z轴位置", group = "标定Z轴", order = 101)
public void setLittleBSPierceZPos() throws AppException { public void setLittleBSPierceZPos() throws AppException {
enableModule();
pipetteCtrlModule.zMotorMeasureDistance(); pipetteCtrlModule.zMotorMeasureDistance();
hbotConsumablePosMgr.setParam(HbotConsumablePosParam.LittleBSPierceZPos, pipetteCtrlModule.zMotorReadMeasureDistanceResult()); hbotConsumablePosMgr.setParam(HbotConsumablePosParam.LittleBSPierceZPos, pipetteCtrlModule.zMotorReadMeasureDistanceResult());
disableModule();
} }
@ExtApiFn(name = "校准.小瓶取样Z轴位置", group = "标定Z轴", order = 102) @ExtApiFn(name = "校准.小瓶取样Z轴位置", group = "标定Z轴", order = 102)
public void setLittleBSSampleZPos() throws AppException { public void setLittleBSSampleZPos() throws AppException {
enableModule();
pipetteCtrlModule.zMotorMeasureDistance(); pipetteCtrlModule.zMotorMeasureDistance();
hbotConsumablePosMgr.setParam(HbotConsumablePosParam.LittleBSSampleZPos, pipetteCtrlModule.zMotorReadMeasureDistanceResult()); hbotConsumablePosMgr.setParam(HbotConsumablePosParam.LittleBSSampleZPos, pipetteCtrlModule.zMotorReadMeasureDistanceResult());
disableModule();
} }
@ExtApiFn(name = "校准.探测物质取样Z轴位置", group = "标定Z轴", order = 103) @ExtApiFn(name = "校准.探测物质取样Z轴位置", group = "标定Z轴", order = 103)
public void setProbeSubstanceSampleZPos() throws AppException { public void setProbeSubstanceSampleZPos() throws AppException {
enableModule();
pipetteCtrlModule.zMotorMeasureDistance(); pipetteCtrlModule.zMotorMeasureDistance();
hbotConsumablePosMgr.setParam(HbotConsumablePosParam.ProbeSubstanceSampleZPos, pipetteCtrlModule.zMotorReadMeasureDistanceResult()); hbotConsumablePosMgr.setParam(HbotConsumablePosParam.ProbeSubstanceSampleZPos, pipetteCtrlModule.zMotorReadMeasureDistanceResult());
disableModule();
} }

33
src/main/java/a8k/service/app/devicedriver/pos/HbotConsumablePosMgr.java

@ -35,12 +35,16 @@ public class HbotConsumablePosMgr {
LowerDeviceParameterDBService lowerDeviceParameterDBService; LowerDeviceParameterDBService lowerDeviceParameterDBService;
PosParameterReader posReader = null; PosParameterReader posReader = null;
static Integer nowParaVersion = 3;
static Integer nowParaVersion = 2;
@PostConstruct @PostConstruct
void initialize() { void initialize() {
posReader = lowerDeviceParameterDBService.getReader(this.getClass()); posReader = lowerDeviceParameterDBService.getReader(this.getClass());
Integer paraVersion = posReader.getVersion(); Integer paraVersion = posReader.getVersion();
for (HbotConsumablePosParam param : HbotConsumablePosParam.values()) {
posReader.setParamChName(param, param.chName);
}
if (!nowParaVersion.equals(paraVersion)) { if (!nowParaVersion.equals(paraVersion)) {
paramReset(); paramReset();
} }
@ -57,7 +61,7 @@ public class HbotConsumablePosMgr {
posReader.updatePos(HbotConsumablePosParam.TipGroup1_000Pos, new Pos3d()); posReader.updatePos(HbotConsumablePosParam.TipGroup1_000Pos, new Pos3d());
posReader.updatePos(HbotConsumablePosParam.TipGroup1_SpaceingX, 0.0); posReader.updatePos(HbotConsumablePosParam.TipGroup1_SpaceingX, 0.0);
posReader.updatePos(HbotConsumablePosParam.TipGroup2_SpaceingY, 0.0);
posReader.updatePos(HbotConsumablePosParam.TipGroup1_SpaceingY, 0.0);
posReader.updatePos(HbotConsumablePosParam.TipGroup2_000Pos, new Pos3d()); posReader.updatePos(HbotConsumablePosParam.TipGroup2_000Pos, new Pos3d());
posReader.updatePos(HbotConsumablePosParam.TipGroup2_SpaceingX, 0.0); posReader.updatePos(HbotConsumablePosParam.TipGroup2_SpaceingX, 0.0);
@ -88,19 +92,15 @@ public class HbotConsumablePosMgr {
posReader.updatePos(HbotConsumablePosParam.LargeBuffer_DX, 0.0); posReader.updatePos(HbotConsumablePosParam.LargeBuffer_DX, 0.0);
posReader.updatePos(HbotConsumablePosParam.LargeBuffer_DY, 0.0); posReader.updatePos(HbotConsumablePosParam.LargeBuffer_DY, 0.0);
posReader.updatePos(HbotConsumablePosParam.LittleBSPierceZPos, 0.0);
posReader.updatePos(HbotConsumablePosParam.LittleBSSampleZPos, 0.0);
posReader.updatePos(HbotConsumablePosParam.ProbeSubstanceSampleZPos, 0.0);
posReader.updatePos(HbotConsumablePosParam.LargeBSSSampleZPos, 0.0);
} }
public List<ObjectNode> getParams() {
List<ObjectNode> list = new java.util.ArrayList<>();
for (HbotConsumablePosParam param : HbotConsumablePosParam.values()) {
ObjectNode posNode = ZJsonHelper.createObjectNode();
posNode.put("pos", ZJsonHelper.createObjectNode(posReader.getPos(param.name(), Pos3d.class)));
posNode.put("name", param.name());
posNode.put("chName", param.chName);
list.add(posNode);
}
return list;
public Object getParams() {
return posReader.getParams();
} }
@ -127,13 +127,14 @@ public class HbotConsumablePosMgr {
tipDyPos = HbotConsumablePosParam.TipGroup2_SpaceingY; tipDyPos = HbotConsumablePosParam.TipGroup2_SpaceingY;
} }
Assert.isTrue(tip000Pos != null,"tip000Pos != null");
Assert.isTrue(tip000Pos != null, "tip000Pos != null");
posReader.updatePos(tip000Pos, tip000); posReader.updatePos(tip000Pos, tip000);
posReader.updatePos(tipDxPos, dx); posReader.updatePos(tipDxPos, dx);
posReader.updatePos(tipDyPos, dy); posReader.updatePos(tipDyPos, dy);
} }
public LittleBottleConsumablePosInfo getLittleBufferGroupPosInfo() { public LittleBottleConsumablePosInfo getLittleBufferGroupPosInfo() {
LittleBottleConsumablePosInfo info = new LittleBottleConsumablePosInfo(); LittleBottleConsumablePosInfo info = new LittleBottleConsumablePosInfo();
info.g0_000 = posReader.getPos(HbotConsumablePosParam.LittleBufferGroup0_000Pos, Pos3d.class); info.g0_000 = posReader.getPos(HbotConsumablePosParam.LittleBufferGroup0_000Pos, Pos3d.class);
@ -227,9 +228,9 @@ public class HbotConsumablePosMgr {
dx = posReader.getPos(HbotConsumablePosParam.TipGroup2_SpaceingX, Double.class); dx = posReader.getPos(HbotConsumablePosParam.TipGroup2_SpaceingX, Double.class);
dy = posReader.getPos(HbotConsumablePosParam.TipGroup2_SpaceingY, Double.class); dy = posReader.getPos(HbotConsumablePosParam.TipGroup2_SpaceingY, Double.class);
} }
Assert.isTrue(tip000 != null,"tip000 != null");
Assert.isTrue(dx != null,"dx != null");
Assert.isTrue(dy != null,"dy != null");
Assert.isTrue(tip000 != null, "tip000 != null");
Assert.isTrue(dx != null, "dx != null");
Assert.isTrue(dy != null, "dy != null");
int xoff = tipoff % 12; int xoff = tipoff % 12;
int yoff = tipoff / 12; int yoff = tipoff / 12;

69
src/main/java/a8k/service/db/LowerDeviceParameterDBService.java

@ -2,6 +2,7 @@ package a8k.service.db;
import a8k.service.db.type.Parameter; import a8k.service.db.type.Parameter;
import a8k.service.db.utils.PosParameterReader; import a8k.service.db.utils.PosParameterReader;
import a8k.utils.ZJsonHelper;
import a8k.utils.ZSqliteJdbcHelper; import a8k.utils.ZSqliteJdbcHelper;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@ -37,6 +38,23 @@ public class LowerDeviceParameterDBService {
return (Parameter) ZSqliteJdbcHelper.rowMapper(rs, tClass); return (Parameter) ZSqliteJdbcHelper.rowMapper(rs, tClass);
} }
public void setParamChName(String service, String key, String chName) {
Parameter parameter = getParam(service, key);
if (parameter == null) {
parameter = new Parameter();
parameter.service = service;
parameter.key = key;
parameter.chName = chName;
ZSqliteJdbcHelper.addObj(jdbcTemplate, tableName, tClass, parameter);
} else {
if (parameter.chName.equals(chName)) {
return;
}
parameter.chName = chName;
ZSqliteJdbcHelper.updateObj(jdbcTemplate, tableName, tClass, parameter);
}
}
public <T> T getParam(String service, String key, Class<T> tClass) { public <T> T getParam(String service, String key, Class<T> tClass) {
List<Parameter> list = jdbcTemplate.query("select * from " + tableName + " where service = ? and key = ?;", this::rowMapper, service, key); List<Parameter> list = jdbcTemplate.query("select * from " + tableName + " where service = ? and key = ?;", this::rowMapper, service, key);
@ -45,38 +63,43 @@ public class LowerDeviceParameterDBService {
} }
Parameter parameter = list.get(0); Parameter parameter = list.get(0);
try {
return new ObjectMapper().readValue(parameter.val, tClass);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
return ZJsonHelper.objectFromJson(parameter.val, tClass);
}
public Parameter getParam(String service, String key) {
List<Parameter> list = jdbcTemplate.query("select * from " + tableName + " where service = ? and key = ?;", this::rowMapper, service, key);
if (list.isEmpty()) {
return null;
} }
return list.get(0);
}
public List<Parameter> getParams(String service) {
return jdbcTemplate.query("select * from " + tableName + " where service = ?;", this::rowMapper, service);
} }
public void updateParam(String service, String key, Object pos) { public void updateParam(String service, String key, Object pos) {
logger.info("updateParam: service={}, key={}, pos={}", service, key, pos); logger.info("updateParam: service={}, key={}, pos={}", service, key, pos);
try {
ObjectMapper objectMapper = new ObjectMapper();
List<Parameter> list = jdbcTemplate.query("select * from " + tableName + " where service = ? and key = ?;", this::rowMapper, service, key);
if (list.isEmpty()) {
Parameter parameter = new Parameter();
parameter.service = service;
parameter.key = key;
parameter.val = objectMapper.writeValueAsString(pos);
parameter.valType = pos.getClass().getSimpleName();
ZSqliteJdbcHelper.addObj(jdbcTemplate, tableName, tClass, parameter);
return;
}
Parameter parameter = list.get(0);
parameter.val = objectMapper.writeValueAsString(pos);
ObjectMapper objectMapper = new ObjectMapper();
List<Parameter> list = jdbcTemplate.query("select * from " + tableName + " where service = ? and key = ?;", this::rowMapper, service, key);
if (list.isEmpty()) {
Parameter parameter = new Parameter();
parameter.service = service; parameter.service = service;
parameter.key = key; parameter.key = key;
parameter.val = ZJsonHelper.createObjectNode(pos);
parameter.valType = pos.getClass().getSimpleName(); parameter.valType = pos.getClass().getSimpleName();
ZSqliteJdbcHelper.updateObj(jdbcTemplate, tableName, tClass, parameter);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
ZSqliteJdbcHelper.addObj(jdbcTemplate, tableName, tClass, parameter);
return;
} }
Parameter parameter = list.get(0);
parameter.val = ZJsonHelper.createObjectNode(pos);
parameter.service = service;
parameter.key = key;
parameter.valType = pos.getClass().getSimpleName();
ZSqliteJdbcHelper.updateObj(jdbcTemplate, tableName, tClass, parameter);
} }
public void tryInitParam(String service, String key, Object pos) { public void tryInitParam(String service, String key, Object pos) {

13
src/main/java/a8k/service/db/type/Parameter.java

@ -1,9 +1,12 @@
package a8k.service.db.type; package a8k.service.db.type;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class Parameter { public class Parameter {
public int id;
public String service;
public String key;
public String valType;
public String val;
public int id;
public String service;
public String key;
public String valType;
public ObjectNode val;
public String chName;
} }

20
src/main/java/a8k/service/db/utils/PosParameterReader.java

@ -1,6 +1,9 @@
package a8k.service.db.utils; package a8k.service.db.utils;
import a8k.service.db.LowerDeviceParameterDBService; import a8k.service.db.LowerDeviceParameterDBService;
import a8k.service.db.type.Parameter;
import java.util.List;
public class PosParameterReader { public class PosParameterReader {
Class<?> service; Class<?> service;
@ -19,6 +22,19 @@ public class PosParameterReader {
return lowerDeviceParameterDBService.getParam(this.service.getSimpleName(), key.name(), tClass); return lowerDeviceParameterDBService.getParam(this.service.getSimpleName(), key.name(), tClass);
} }
public Parameter getParamer(String key) {
return lowerDeviceParameterDBService.getParam(this.service.getSimpleName(), key);
}
public Parameter getParamer(Enum<?> key) {
return lowerDeviceParameterDBService.getParam(this.service.getSimpleName(), key.name());
}
public void setParamChName(Enum<?> key, String chName) {
lowerDeviceParameterDBService.setParamChName(service.getSimpleName(), key.name(), chName);
}
public void updatePos(String key, Object pos) { public void updatePos(String key, Object pos) {
lowerDeviceParameterDBService.updateParam(service.getSimpleName(), key, pos); lowerDeviceParameterDBService.updateParam(service.getSimpleName(), key, pos);
} }
@ -38,4 +54,8 @@ public class PosParameterReader {
public void setVersion(Integer version) { public void setVersion(Integer version) {
lowerDeviceParameterDBService.setParamVersion(service.getSimpleName(), version); lowerDeviceParameterDBService.setParamVersion(service.getSimpleName(), version);
} }
public List<Parameter> getParams() {
return lowerDeviceParameterDBService.getParams(service.getSimpleName());
}
} }

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

@ -37,7 +37,7 @@ public enum HbotConsumablePosParam {
LargeBuffer_DY("大瓶缓冲液的Y间距"), LargeBuffer_DY("大瓶缓冲液的Y间距"),
LittleBSPierceZPos("小瓶缓冲液刺破Z坐标"), LittleBSPierceZPos("小瓶缓冲液刺破Z坐标"),
LittleBSSampleZPos("小瓶缓冲液刺破取样Z坐标"),
LittleBSSampleZPos("小瓶缓冲液取样Z坐标"),
ProbeSubstanceSampleZPos("探测物质取样Z坐标"), ProbeSubstanceSampleZPos("探测物质取样Z坐标"),
LargeBSSSampleZPos("大瓶缓冲液取样Z坐标"), LargeBSSSampleZPos("大瓶缓冲液取样Z坐标"),

42
src/main/java/a8k/utils/ZJsonHelper.java

@ -20,9 +20,51 @@ public class ZJsonHelper {
return new ObjectMapper().createObjectNode(); return new ObjectMapper().createObjectNode();
} }
public static <T> T objectFromJson(ObjectNode node, Class<T> tClass) {
ObjectMapper mapper = new ObjectMapper();
if (tClass.getTypeName().equals(Integer.class.getTypeName())) {
return (T) Integer.valueOf(node.get("value").asInt());
}
if (tClass.getTypeName().equals(String.class.getTypeName())) {
return (T) node.get("value").asText();
}
if (tClass.getTypeName().equals(Boolean.class.getTypeName())) {
return (T) Boolean.valueOf(node.get("value").asBoolean());
}
if (tClass.getTypeName().equals(Double.class.getTypeName())) {
return (T) Double.valueOf(node.get("value").asDouble());
}
if (tClass.getTypeName().equals(Float.class.getTypeName())) {
return (T) Float.valueOf(node.get("value").floatValue());
}
try {
return (T) mapper.treeToValue(node, tClass);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static ObjectNode createObjectNode(Object obj) { public static ObjectNode createObjectNode(Object obj) {
ObjectMapper ObjectMapper = new ObjectMapper(); ObjectMapper ObjectMapper = new ObjectMapper();
if (obj instanceof Integer) {
return ObjectMapper.createObjectNode().put("value", (Integer) obj);
}
if (obj instanceof String) {
return ObjectMapper.createObjectNode().put("value", (String) obj);
}
if (obj instanceof Boolean) {
return ObjectMapper.createObjectNode().put("value", (Boolean) obj);
}
if (obj instanceof Double) {
return ObjectMapper.createObjectNode().put("value", (Double) obj);
}
if (obj instanceof Float) {
return ObjectMapper.createObjectNode().put("value", (Float) obj);
}
return ObjectMapper.valueToTree(obj); return ObjectMapper.valueToTree(obj);
} }
} }

11
src/main/java/a8k/utils/ZSqliteJdbcHelper.java

@ -2,6 +2,7 @@ package a8k.utils;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
@ -90,6 +91,13 @@ public class ZSqliteJdbcHelper {
field.set(obj, null); field.set(obj, null);
else else
field.set(obj, new Date(rs.getLong(field.getName()))); field.set(obj, new Date(rs.getLong(field.getName())));
} else if (field.getType().equals(ObjectNode.class)) {
ObjectMapper objectMapper = new ObjectMapper();
try {
field.set(obj, objectMapper.readTree(rs.getString(field.getName())));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
} else if (field.getType().isEnum()) { } else if (field.getType().isEnum()) {
Method methodValueOf = null; Method methodValueOf = null;
try { try {
@ -139,6 +147,9 @@ public class ZSqliteJdbcHelper {
args.add(date.getTime()); args.add(date.getTime());
} else if (field.getType().isEnum()) { } else if (field.getType().isEnum()) {
args.add(field.get(obj).toString()); args.add(field.get(obj).toString());
} else if (field.getType().equals(ObjectNode.class)) {
ObjectMapper objectMapper = new ObjectMapper();
args.add(objectMapper.writeValueAsString(field.get(obj)));
} else { } else {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
args.add(objectMapper.writeValueAsString(field.get(obj))); args.add(objectMapper.writeValueAsString(field.get(obj)));

Loading…
Cancel
Save