Browse Source

update

tags/v0
zhaohe 8 months ago
parent
commit
d5b037c621
  1. 24
      src/main/java/a8k/extapi/controler/ExtApiControler.java
  2. 4
      src/main/java/a8k/extapi/controler/ExtApiControllerAdvice.java
  3. 120
      src/main/java/a8k/extapi/service/ExtApiTabCfgService.java
  4. 2
      src/main/java/a8k/extapi/utils/EnginnerPageActionParam.java
  5. 2
      src/main/java/a8k/extapi/utils/EnginnerParamFile.java
  6. 2
      src/main/java/a8k/extapi/utils/ExtApiFn.java
  7. 2
      src/main/java/a8k/extapi/utils/ExtApiParam.java
  8. 2
      src/main/java/a8k/extapi/utils/ExtApiParamsTab.java
  9. 2
      src/main/java/a8k/extapi/utils/ExtApiStatu.java
  10. 4
      src/main/java/a8k/extapi/utils/ExtApiTab.java
  11. 56
      src/main/java/a8k/extapi_controler/DownloadMgr.java
  12. 56
      src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java
  13. 6
      src/main/java/a8k/service/app/background/BackgroudProcessCtrlService.java
  14. 7
      src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeFeedingCtrlService.java
  15. 7
      src/main/java/a8k/service/app/devicectrl/driver/PipetteCtrlDriver.java
  16. 6
      src/main/java/a8k/service/app/devicectrl/driver/StepMotorCtrlDriver.java
  17. 5
      src/main/java/a8k/service/app/devicectrl/exdriver/HbotBaseMoveExDriver.java
  18. 7
      src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java
  19. 7
      src/main/java/a8k/service/app/devicectrl/param/LowerDeviceParamMgr.java
  20. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/Hbot2DCodeScanPosCalibration.java
  21. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLargeBottleBSPosCalibration.java
  22. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLittleBSPosCalibration.java
  23. 8
      src/main/java/a8k/service/app/devicectrl/param/calibration/HbotProbeSubstancePosCalibration.java
  24. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/HbotSamplePosCalibration.java
  25. 15
      src/main/java/a8k/service/app/devicectrl/param/calibration/HbotTipPosCalibration.java
  26. 8
      src/main/java/a8k/service/app/devicectrl/param/calibration/OptModuleParamCalibration.java
  27. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLDParamCalibration.java
  28. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLFParamCalibration.java
  29. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/ReactionPlatesTransmitControlerCalibration.java
  30. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/TemperatureCtrlParamCalibration.java
  31. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/TubeFeedingModulePosCalibration.java
  32. 7
      src/main/java/a8k/service/app/devicectrl/param/calibration/TubePreProcesPosCalibration.java
  33. 4
      src/main/java/a8k/service/bases/FrontEndEventRouter.java
  34. 1
      src/main/java/a8k/service/dao/LowerDeviceParameterStorgeDao.java
  35. 9
      src/main/java/a8k/service/test/A8kOptTest.java
  36. 6
      src/main/java/a8k/service/test/MainflowCtrlTestService.java
  37. 7
      src/main/java/a8k/service/test/PipetteGunTest.java
  38. 8
      src/main/java/a8k/service/test/PosMeasureUtils.java
  39. 8
      src/main/java/a8k/service/test/VirtualDeviceSimulationTest.java
  40. 207
      src/main/java/a8k/service/verification/PipetteGunVerification.java
  41. 19
      src/main/java/a8k/type/appret/AppRetV1.java
  42. 1
      src/main/java/a8k/utils/ZCSVUtils.java
  43. 3
      src/main/java/a8k/utils/ZJsonHelper.java

24
src/main/java/a8k/extapi_controler/ExtApiControler.java → src/main/java/a8k/extapi/controler/ExtApiControler.java

@ -1,10 +1,12 @@
package a8k.extapi_controler;
package a8k.extapi.controler;
import a8k.SpringBootBeanUtil;
import a8k.extapi_controler.utils.*;
import a8k.extapi.service.ExtApiTabCfgService;
import a8k.extapi.utils.*;
import a8k.type.appret.AppRetV1;
import a8k.utils.*;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.util.Assert;
@ -23,6 +25,10 @@ import java.util.Map;
@Slf4j
@Controller
public class ExtApiControler {
@Resource
ExtApiTabCfgService extApiTabCfgService;
@PostMapping("/api/service-config/service-list")
@ResponseBody
public AppRetV1 services() {
@ -30,14 +36,19 @@ public class ExtApiControler {
var classes = SpringBootBeanUtil.getBeans();
for (var clazz : classes) {
var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class);
if (null == hardwareServiceAnnotation || !hardwareServiceAnnotation.cfg().isDisplay()) {
var cfg = extApiTabCfgService.getCfg(clazz);
if (cfg == null) {
continue;
}
if (null == hardwareServiceAnnotation || !cfg.display) {
continue;
}
Map<String, Object> service = new HashMap<>();
service.put("key", clazz.getSimpleName());
service.put("name", hardwareServiceAnnotation.cfg().getName());
service.put("order", hardwareServiceAnnotation.cfg().ordinal());
service.put("name", cfg.getChName());
service.put("order", cfg.getIndex());
services.add(service);
}
return AppRetV1.success(services);
@ -165,7 +176,8 @@ public class ExtApiControler {
}
return AppRetV1.success(statusList);
}
//
//
@PostMapping("/api/service-config/service-action-list")
@ResponseBody
public AppRetV1 serviceActionList(@RequestBody Map<String, Object> params) throws Exception {

4
src/main/java/a8k/extapi_controler/ExtApiControllerAdvice.java → src/main/java/a8k/extapi/controler/ExtApiControllerAdvice.java

@ -1,4 +1,4 @@
package a8k.extapi_controler;
package a8k.extapi.controler;
import a8k.type.appret.AppRetV1;
import org.slf4j.Logger;
@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice(value = "a8k.extapi_controler")
@ControllerAdvice(value = "a8k.extapi.controler")
public class ExtApiControllerAdvice {
Logger logger = LoggerFactory.getLogger(ExtApiControllerAdvice.class);

120
src/main/java/a8k/extapi/service/ExtApiTabCfgService.java

@ -0,0 +1,120 @@
package a8k.extapi.service;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.background.BackgroudProcessCtrlService;
import a8k.service.app.devicectrl.ctrlservice.TubeFeedingCtrlService;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.init.MiniServoReferencePointIniter;
import a8k.service.app.devicectrl.param.LowerDeviceParamMgr;
import a8k.service.app.devicectrl.param.calibration.*;
import a8k.service.test.*;
import a8k.service.verification.PipetteGunVerification;
import jakarta.annotation.PostConstruct;
import lombok.Data;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
@ExtApiTab()
public class ExtApiTabCfgService {
static int index;
public enum TabType {
Public,
CodeTest,
Calibration,
Verify,
LowLevelApiTest,
Others,
}
;
@Data
public class Config {
public TabType tabType;
public Class<?> service;
public String chName;
public Boolean display;
public int index = ExtApiTabCfgService.index++;
public Config(Class<?> service, String chName, TabType tabType) {
this.service = service;
this.display = true;
this.chName = chName;
this.tabType = tabType;
}
}
List<Config> cfgList = new ArrayList<>();
@PostConstruct
void init() {
cfgList.add(new Config(ExtApiTabCfgService.class, "页面配置", TabType.Public));
cfgList.add(new Config(VirtualDeviceSimulationTest.class, "测试.虚拟设备测试", TabType.CodeTest));
cfgList.add(new Config(MainflowCtrlTestService.class, "测试.主流程控制测试", TabType.CodeTest));
cfgList.add(new Config(BackgroudProcessCtrlService.class, "测试模式.后台线程控制", TabType.CodeTest));
cfgList.add(new Config(LowerDeviceParamMgr.class, "校准.参数管理", TabType.Calibration));
cfgList.add(new Config(MiniServoReferencePointIniter.class, "校准.舵机参考点设置", TabType.Calibration));
cfgList.add(new Config(ReactionPlatesTransmitControlerCalibration.class, "校准.反应板相关位置校准", TabType.Calibration));
cfgList.add(new Config(TubeFeedingModulePosCalibration.class, "校准.试管入料校准", TabType.Calibration));
cfgList.add(new Config(TubePreProcesPosCalibration.class, "校准.试管预处理校准", TabType.Calibration));
cfgList.add(new Config(Hbot2DCodeScanPosCalibration.class, "校准.耗材扫描校准", TabType.Calibration));
cfgList.add(new Config(HbotTipPosCalibration.class, "校准.Tip耗材位置校准", TabType.Calibration));
cfgList.add(new Config(HbotLittleBSPosCalibration.class, "校准.小瓶BS耗材位置校准", TabType.Calibration));
cfgList.add(new Config(HbotProbeSubstancePosCalibration.class, "校准.探测物质位置校准", TabType.Calibration));
cfgList.add(new Config(HbotLargeBottleBSPosCalibration.class, "校准.大瓶BS耗材位置校准", TabType.Calibration));
cfgList.add(new Config(HbotSamplePosCalibration.class, "校准.样本位置校准", TabType.Calibration));
cfgList.add(new Config(PipetteGunLLDParamCalibration.class, "校准.移液枪LLD参数校准", TabType.Calibration));
cfgList.add(new Config(PipetteGunLLFParamCalibration.class, "校准.移液枪LLF参数校准", TabType.Calibration));
cfgList.add(new Config(OptModuleParamCalibration.class, "校准.光学模块参数校准", TabType.Calibration));
cfgList.add(new Config(TemperatureCtrlParamCalibration.class, "校准.温度控制参数校准", TabType.Calibration));
cfgList.add(new Config(PipetteGunTest.class, "测试.PipetteGun", TabType.LowLevelApiTest));
cfgList.add(new Config(PosMeasureUtils.class, "测试.坐标测量", TabType.LowLevelApiTest));
cfgList.add(new Config(A8kOptTest.class, "测试.光学测试", TabType.LowLevelApiTest));
cfgList.add(new Config(PipetteCtrlDriver.class, "硬件驱动.移液枪测试", TabType.LowLevelApiTest));
cfgList.add(new Config(StepMotorCtrlDriver.class, "硬件驱动.步进电机测试", TabType.LowLevelApiTest));
cfgList.add(new Config(TubeFeedingCtrlService.class, "硬件控制.入料模块", TabType.LowLevelApiTest));
cfgList.add(new Config(PipetteGunVerification.class, "验证.移液枪验证", TabType.Verify));
for (Config cfg : cfgList) {
cfg.display = cfg.tabType.equals(TabType.Public);
}
}
public Config getCfg(Class<?> service) {
for (Config cfg : cfgList) {
if (cfg.service == service) {
return cfg;
}
}
return null;
}
@ExtApiFn(name = "切换显示", group = "页面配置", order = 1)
public String display(TabType type) {
for (Config cfg : cfgList) {
cfg.display = cfg.tabType.equals(type) || cfg.tabType.equals(TabType.Public);
}
return "已切换,请刷新页面.";
}
}

2
src/main/java/a8k/extapi_controler/utils/EnginnerPageActionParam.java → src/main/java/a8k/extapi/utils/EnginnerPageActionParam.java

@ -1,4 +1,4 @@
package a8k.extapi_controler.utils;
package a8k.extapi.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

2
src/main/java/a8k/extapi_controler/utils/EnginnerParamFile.java → src/main/java/a8k/extapi/utils/EnginnerParamFile.java

@ -1,4 +1,4 @@
package a8k.extapi_controler.utils;
package a8k.extapi.utils;
import java.util.Base64;
public class EnginnerParamFile {
private byte[] bytes;

2
src/main/java/a8k/extapi_controler/utils/ExtApiFn.java → src/main/java/a8k/extapi/utils/ExtApiFn.java

@ -1,4 +1,4 @@
package a8k.extapi_controler.utils;
package a8k.extapi.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

2
src/main/java/a8k/extapi_controler/utils/ExtApiParam.java → src/main/java/a8k/extapi/utils/ExtApiParam.java

@ -1,4 +1,4 @@
package a8k.extapi_controler.utils;
package a8k.extapi.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

2
src/main/java/a8k/extapi_controler/utils/ExtApiParamsTab.java → src/main/java/a8k/extapi/utils/ExtApiParamsTab.java

@ -1,4 +1,4 @@
package a8k.extapi_controler.utils;
package a8k.extapi.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

2
src/main/java/a8k/extapi_controler/utils/ExtApiStatu.java → src/main/java/a8k/extapi/utils/ExtApiStatu.java

@ -1,4 +1,4 @@
package a8k.extapi_controler.utils;
package a8k.extapi.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

4
src/main/java/a8k/extapi_controler/utils/ExtApiTab.java → src/main/java/a8k/extapi/utils/ExtApiTab.java

@ -1,5 +1,4 @@
package a8k.extapi_controler.utils;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
package a8k.extapi.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -8,5 +7,4 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface ExtApiTab {
ExtApiTabConfig cfg();
}

56
src/main/java/a8k/extapi_controler/DownloadMgr.java

@ -1,56 +0,0 @@
package a8k.extapi_controler;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.resource.ResourceUtil;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.File;
import java.io.IOException;
@Slf4j
@Controller
@RequestMapping(value = "/api/extapi/")
public class DownloadMgr {
@GetMapping("/download/{path}")
public ResponseEntity<Resource> download(@PathVariable String path) {
String contentDisposition = ContentDisposition
.builder("attachment")
.filename(path)
.build().toString();
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
.body(new FileSystemResource(path));
}
// @PostConstruct
// void init() throws IOException {
// //创建一个文件并保存你好
//
// FileSystemResource file = new FileSystemResource("你好.txt");
// log.info("文件路径:{}", file.getFile().getAbsolutePath());
//
// File file1 = new File("你好.txt");
// log.info("文件路径:{}", file1.getAbsolutePath());
//
// // var output = file.getOutputStream();
// // output.write("你好".getBytes());
// // output.close();
//
//
// }
}

56
src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java

@ -1,56 +0,0 @@
package a8k.extapi_controler.pagecontrol;
public enum ExtApiTabConfig {
VirtualDeviceSimulationTest("测试.虚拟设备测试", true),
MainflowCtrlTestService("测试.主流程控制测试", true),
BackgroudProcessCtrlService("测试模式.后台线程控制", true),
LowerDeviceParamMgr("校准.参数管理", true),//OK
MiniServoReferencePointSetting("校准.舵机参考点设置", true),
ReactionPlatesTransmitControlerCalibration("校准.反应板相关位置校准", true),
TubeFeedingModulePosCalibration("校准.试管入料校准", true),
TubePreProcesPosCalibration("校准.试管预处理校准", true),
Hbot2DCodeScanPosCalibration("校准.耗材扫描校准", true),
HbotTipPosCalibration("校准.Tip耗材位置校准", true),
HbotLittleBSPosCalibration("校准.小瓶BS耗材位置校准", true),
HbotProbeSubstancePosCalibration("校准.探测物质位置校准", true),
HbotLargeBottleBSPosCalibration("校准.大瓶BS耗材位置校准", true),
HbotSamplePosCalibration("校准.样本位置校准", true),
PipetteGunLLDParamCalibration("校准.移液枪LLD参数校准", true),
PipetteGunLLFParamCalibration("校准.移液枪LLF参数校准", true),
OptModuleParamCalibration("校准.光学模块参数校准", true),
TemperatureCtrlParamCalibration("校准.温度控制参数校准", true),
PipetteGunTest("测试.PipetteGun",true),
PosMeasureUtils("测试.坐标测量",true),
A8kOptTest("测试.光学测试",true),
A8kPipetteCtrlModule("硬件驱动.移液枪测试", true),
StepMotorCtrlDriver("硬件驱动.步进电机测试", false),
HbotControlService("HbotControlService", false),
TubeTubeFeedingModule("硬件控制.入料模块", false),
Max("max", false);
final String name;
final boolean display;
ExtApiTabConfig(String name, boolean display) {
this.name = name;
this.display = display;
}
public String getName() {
return name;
}
public boolean isDisplay() {
return display;
}
}

6
src/main/java/a8k/service/app/background/BackgroudProcessCtrlService.java

@ -1,7 +1,7 @@
package a8k.service.app.background;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.appdata.ProjIdCardInfoMgrService;
import a8k.service.test.state.VirtualDevice;
import a8k.type.exception.AppException;
@ -9,7 +9,7 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@Component
@ExtApiTab(cfg = a8k.extapi_controler.pagecontrol.ExtApiTabConfig.BackgroudProcessCtrlService)
@ExtApiTab()
public class BackgroudProcessCtrlService {
@Resource
VirtualDevice virtualDevice;

7
src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeFeedingCtrlService.java

@ -1,9 +1,8 @@
package a8k.service.app.devicectrl.ctrlservice;
import a8k.OS;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.exdriver.CodeScanerExDriver;
import a8k.service.app.devicectrl.driver.MiniServoDriver;
import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver;
@ -27,7 +26,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
@ExtApiTab(cfg = ExtApiTabConfig.TubeTubeFeedingModule)
@ExtApiTab()
public class TubeFeedingCtrlService {
static Logger logger = LoggerFactory.getLogger(TubeFeedingCtrlService.class);
static Integer infeedOvertime = 10000;

7
src/main/java/a8k/service/app/devicectrl/driver/PipetteCtrlDriver.java

@ -1,8 +1,7 @@
package a8k.service.app.devicectrl.driver;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.LldType;
import a8k.hardware.type.a8kcanprotocol.CmdId;
@ -33,7 +32,7 @@ import java.util.List;
*/
@Component
@ExtApiTab(cfg = ExtApiTabConfig.A8kPipetteCtrlModule)
@ExtApiTab()
public class PipetteCtrlDriver {
private static final Logger log = LoggerFactory.getLogger(PipetteCtrlDriver.class);

6
src/main/java/a8k/service/app/devicectrl/driver/StepMotorCtrlDriver.java

@ -1,7 +1,7 @@
package a8k.service.app.devicectrl.driver;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.hardware.A8kCanBusService;
import a8k.hardware.type.a8kcanprotocol.A8kPacket;
import a8k.hardware.type.a8kcanprotocol.CmdId;
@ -16,7 +16,7 @@ import org.slf4j.Logger;
import org.springframework.stereotype.Component;
@Component
@ExtApiTab(cfg = a8k.extapi_controler.pagecontrol.ExtApiTabConfig.StepMotorCtrlDriver)
@ExtApiTab()
public class StepMotorCtrlDriver {
static Logger logger = org.slf4j.LoggerFactory.getLogger(StepMotorCtrlDriver.class);

5
src/main/java/a8k/service/app/devicectrl/exdriver/HbotBaseMoveExDriver.java

@ -1,7 +1,6 @@
package a8k.service.app.devicectrl.exdriver;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.driver.type.PipetteRegIndex;
import a8k.service.app.devicectrl.driver.HbotDriver;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
@ -21,7 +20,7 @@ import org.springframework.stereotype.Component;
* Hbot控制服务
*/
@Component
@ExtApiTab(cfg = ExtApiTabConfig.HbotControlService)
@ExtApiTab()
public class HbotBaseMoveExDriver {
static Logger logger = LoggerFactory.getLogger(HbotBaseMoveExDriver.class);

7
src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java

@ -1,9 +1,8 @@
package a8k.service.app.devicectrl.init;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.driver.MiniServoDriver;
import a8k.service.app.devicectrl.driver.type.MiniServoMId;
import a8k.type.exception.AppException;
@ -11,7 +10,7 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@Component
@ExtApiTab(cfg = ExtApiTabConfig.MiniServoReferencePointSetting)
@ExtApiTab()
public class MiniServoReferencePointIniter {
@Resource

7
src/main/java/a8k/service/app/devicectrl/param/LowerDeviceParamMgr.java

@ -1,8 +1,7 @@
package a8k.service.app.devicectrl.param;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.dao.LowerDeviceParameterDao;
import a8k.service.dao.type.Parameter;
import jakarta.annotation.Resource;
@ -10,7 +9,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
@Component
@ExtApiTab(cfg = ExtApiTabConfig.LowerDeviceParamMgr)
@ExtApiTab()
public class LowerDeviceParamMgr {
@Resource

7
src/main/java/a8k/service/app/devicectrl/param/calibration/Hbot2DCodeScanPosCalibration.java

@ -1,9 +1,8 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.driver.HbotDriver;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
@ -17,7 +16,7 @@ import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.Hbot2DCodeScanPosCalibration)
@ExtApiTab()
@Component
public class Hbot2DCodeScanPosCalibration {
static Logger logger = org.slf4j.LoggerFactory.getLogger(Hbot2DCodeScanPosCalibration.class);

7
src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLargeBottleBSPosCalibration.java

@ -1,9 +1,8 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.param.type.HbotLargeBottleBSPos;
import a8k.service.app.devicectrl.driver.HbotDriver;
@ -20,7 +19,7 @@ import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.HbotLargeBottleBSPosCalibration)
@ExtApiTab()
@Component
@Aspect
public class HbotLargeBottleBSPosCalibration {

7
src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLittleBSPosCalibration.java

@ -2,9 +2,8 @@ package a8k.service.app.devicectrl.param.calibration;
import a8k.constant.AppConstant;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.param.param_mgr.HbotLittleBSPosMgr;
import a8k.service.app.devicectrl.param.type.HbotLittleBSPos;
@ -22,7 +21,7 @@ import org.springframework.stereotype.Component;
import java.util.List;
@ExtApiTab(cfg = ExtApiTabConfig.HbotLittleBSPosCalibration)
@ExtApiTab()
@Component
public class HbotLittleBSPosCalibration {
static Logger logger = org.slf4j.LoggerFactory.getLogger(HbotLittleBSPosCalibration.class);

8
src/main/java/a8k/service/app/devicectrl/param/calibration/HbotProbeSubstancePosCalibration.java

@ -2,16 +2,14 @@ package a8k.service.app.devicectrl.param.calibration;
import a8k.constant.AppConstant;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.param.param_mgr.HbotProbeSubstancePosMgr;
import a8k.service.app.devicectrl.param.type.HbotProbeSubstancePos;
import a8k.service.app.devicectrl.ctrlservice.HbotCtrlService;
import a8k.service.app.devicectrl.driver.HbotDriver;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
import a8k.service.app.devicectrl.param.type.HbotSamplePos;
import a8k.type.ConsumableGroup;
import a8k.type.LittleBottleConsumableRefPoint;
import a8k.type.cfg.Pos2d;
@ -24,7 +22,7 @@ import org.springframework.stereotype.Component;
import java.util.List;
@ExtApiTab(cfg = ExtApiTabConfig.HbotProbeSubstancePosCalibration)
@ExtApiTab()
@Component
public class HbotProbeSubstancePosCalibration {
static Logger logger = org.slf4j.LoggerFactory.getLogger(HbotProbeSubstancePosCalibration.class);

7
src/main/java/a8k/service/app/devicectrl/param/calibration/HbotSamplePosCalibration.java

@ -1,9 +1,8 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.ctrlservice.TubePreProcesCtrlService;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.exdriver.MotorMoveZeroExDriver;
@ -24,7 +23,7 @@ import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.HbotSamplePosCalibration)
@ExtApiTab()
@Component
@Aspect
public class HbotSamplePosCalibration {

15
src/main/java/a8k/service/app/devicectrl/param/calibration/HbotTipPosCalibration.java

@ -2,10 +2,8 @@ package a8k.service.app.devicectrl.param.calibration;
import a8k.constant.AppConstant;
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.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.param.ext_param_mgr.HbotConsumableParamMgr;
import a8k.service.app.devicectrl.param.param_mgr.HbotTipPosMgr;
@ -16,23 +14,16 @@ import a8k.type.*;
import a8k.type.cfg.Pos2d;
import a8k.type.cfg.Pos3d;
import a8k.type.exception.AppException;
import a8k.type.pos.TipPos;
import a8k.type.type.TipGroup;
import a8k.utils.ZJsonHelper;
import a8k.utils.ZList;
import a8k.utils.ZSimplAlgo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import jakarta.annotation.Resource;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import java.util.List;
import java.util.Map;
@ExtApiTab(cfg = ExtApiTabConfig.HbotTipPosCalibration)
@ExtApiTab()
@Component
public class HbotTipPosCalibration {
static Logger logger = org.slf4j.LoggerFactory.getLogger(HbotTipPosCalibration.class);

8
src/main/java/a8k/service/app/devicectrl/param/calibration/OptModuleParamCalibration.java

@ -1,8 +1,7 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.ctrlservice.OptScanModuleCtrlService;
import a8k.service.app.devicectrl.ctrlservice.PlateBoxCtrlService;
import a8k.service.app.devicectrl.driver.OptModuleDriver;
@ -14,7 +13,6 @@ import a8k.service.app.devicectrl.param.type.OptModuleExtParam;
import a8k.service.dao.type.Parameter;
import a8k.service.dao.type.a8kidcard.zenum.A8kOptType;
import a8k.type.*;
import a8k.type.ecode.AECodeError;
import a8k.type.exception.AppException;
import a8k.utils.ZList;
import a8k.utils.opt_gain_convert.OptGainConvert;
@ -37,7 +35,7 @@ import java.util.List;
* TOptScanStartPos (T光学扫描起始位置)
* FOptScanStartPos (F光学扫描起始位置)
*/
@ExtApiTab(cfg = ExtApiTabConfig.OptModuleParamCalibration)
@ExtApiTab()
@Component
public class OptModuleParamCalibration {

7
src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLDParamCalibration.java

@ -1,8 +1,7 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.hardware.type.LldType;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
@ -14,7 +13,7 @@ import a8k.type.exception.AppException;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.PipetteGunLLDParamCalibration)
@ExtApiTab()
@Component
public class PipetteGunLLDParamCalibration {

7
src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLFParamCalibration.java

@ -1,9 +1,8 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
import a8k.service.app.devicectrl.exdriver.MotorEnableExDriver;
import a8k.service.app.devicectrl.param.param_mgr.PipetteGunLLFParamMgr;
@ -12,7 +11,7 @@ import a8k.type.exception.AppException;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.PipetteGunLLFParamCalibration)
@ExtApiTab()
@Component
public class PipetteGunLLFParamCalibration {

7
src/main/java/a8k/service/app/devicectrl/param/calibration/ReactionPlatesTransmitControlerCalibration.java

@ -1,8 +1,7 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.param.param_mgr.HbotFixedPosParamMgr;
import a8k.service.app.devicectrl.param.param_mgr.OptModuleParamsMgr;
@ -27,7 +26,7 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@Component
@ExtApiTab(cfg = ExtApiTabConfig.ReactionPlatesTransmitControlerCalibration)
@ExtApiTab()
public class ReactionPlatesTransmitControlerCalibration {
final static int overtime = 10000;

7
src/main/java/a8k/service/app/devicectrl/param/calibration/TemperatureCtrlParamCalibration.java

@ -1,9 +1,8 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.driver.TemperatureControlDriver;
import a8k.service.app.devicectrl.param.param_mgr.TemperatureCtrlParamMgr;
import a8k.service.app.devicectrl.param.type.TemperatureCtrlParam;
@ -14,7 +13,7 @@ import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.TemperatureCtrlParamCalibration)
@ExtApiTab()
@Component
public class TemperatureCtrlParamCalibration {
static Logger logger = org.slf4j.LoggerFactory.getLogger(TemperatureCtrlParamCalibration.class);

7
src/main/java/a8k/service/app/devicectrl/param/calibration/TubeFeedingModulePosCalibration.java

@ -1,8 +1,7 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.hardware.A8kCanBusService;
import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver;
import a8k.service.app.devicectrl.exdriver.MotorEnableExDriver;
@ -23,7 +22,7 @@ import org.springframework.stereotype.Component;
import java.util.List;
@ExtApiTab(cfg = ExtApiTabConfig.TubeFeedingModulePosCalibration)
@ExtApiTab()
@Component
public class TubeFeedingModulePosCalibration {

7
src/main/java/a8k/service/app/devicectrl/param/calibration/TubePreProcesPosCalibration.java

@ -1,8 +1,7 @@
package a8k.service.app.devicectrl.param.calibration;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.driver.MiniServoDriver;
import a8k.service.app.devicectrl.driver.StepMotorCtrlDriver;
import a8k.service.app.devicectrl.driver.type.MiniServoMId;
@ -21,7 +20,7 @@ import a8k.utils.ZJsonHelper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.TubePreProcesPosCalibration)
@ExtApiTab()
@Component
public class TubePreProcesPosCalibration {

4
src/main/java/a8k/service/bases/FrontEndEventRouter.java

@ -1,13 +1,9 @@
package a8k.service.bases;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.service.bases.appevent.*;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import java.util.List;

1
src/main/java/a8k/service/dao/LowerDeviceParameterStorgeDao.java

@ -48,6 +48,7 @@ public class LowerDeviceParameterStorgeDao {
public void addOrUpdate(Parameter parameter) {
Parameter old = findByServiceAndKey(parameter.service, parameter.key);
if (old == null) {
parameter.id = 0;
zSqlite.add(parameter);
return;
}

9
src/main/java/a8k/service/test/A8kOptTest.java

@ -1,10 +1,8 @@
package a8k.service.test;
import a8k.a8kproj.optalgo.type.OptAlgoAnalysResult;
import a8k.a8kproj.optalgo.type.OptScanResult;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.appdata.FileMgrService;
import a8k.service.app.appdata.ProjInfoMgrService;
import a8k.service.app.devicectrl.ctrlservice.OptScanModuleCtrlService;
@ -20,7 +18,6 @@ import a8k.type.exception.AppException;
import a8k.utils.ProjBuildinInfo;
import a8k.utils.ZList;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
@ -32,7 +29,7 @@ import java.util.List;
*
*
*/
@ExtApiTab(cfg = ExtApiTabConfig.A8kOptTest)
@ExtApiTab()
@Component
public class A8kOptTest {

6
src/main/java/a8k/service/test/MainflowCtrlTestService.java

@ -3,8 +3,8 @@ package a8k.service.test;
import a8k.OS;
import a8k.a8kproj.fakeproj.*;
import a8k.constant.AppConstant;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.appctrl.AppConsumablesScanService;
import a8k.service.app.appctrl.AppDeviceCtrlService;
import a8k.service.app.appctrl.AppTubeSettingMgrService;
@ -44,7 +44,7 @@ import java.util.List;
@Component
@Slf4j
@ExtApiTab(cfg = a8k.extapi_controler.pagecontrol.ExtApiTabConfig.MainflowCtrlTestService)
@ExtApiTab()
public class MainflowCtrlTestService {

7
src/main/java/a8k/service/test/PipetteGunTest.java

@ -1,8 +1,7 @@
package a8k.service.test;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.hardware.type.LldType;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
@ -12,7 +11,7 @@ import a8k.type.exception.AppException;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.PipetteGunTest)
@ExtApiTab()
@Component
public class PipetteGunTest {

8
src/main/java/a8k/service/test/PosMeasureUtils.java

@ -1,8 +1,8 @@
package a8k.service.test;
import a8k.extapi_controler.pagecontrol.ExtApiTabConfig;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.service.app.devicectrl.driver.HbotDriver;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
@ -13,7 +13,7 @@ import a8k.type.exception.AppException;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@ExtApiTab(cfg = ExtApiTabConfig.PosMeasureUtils)
@ExtApiTab()
@Component
public class PosMeasureUtils {

8
src/main/java/a8k/service/test/VirtualDeviceSimulationTest.java

@ -2,8 +2,8 @@ package a8k.service.test;
import a8k.SpringBootBeanUtil;
import a8k.a8kproj.fakeproj.*;
import a8k.extapi_controler.utils.ExtApiFn;
import a8k.extapi_controler.utils.ExtApiTab;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.hardware.type.a8kcanprotocol.A8kEcode;
import a8k.hardware.type.a8kcanprotocol.CmdId;
import a8k.hardware.type.a8kcanprotocol.MId;
@ -27,12 +27,10 @@ import a8k.type.ecode.AEConsumeNotEnoughError;
import a8k.type.ecode.AEHardwareError;
import a8k.type.exception.AppException;
import a8k.type.reaction_result_type.ReactionResultStatus;
import a8k.type.tube_setting.TubeHolderSetting;
import a8k.type.type.A8kTubeHolderType;
import a8k.type.type.BloodType;
import a8k.utils.A8kPacketBuilder;
import a8k.utils.ZDateUtils;
import a8k.utils.ZList;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@ -40,7 +38,7 @@ import java.util.ArrayList;
import java.util.List;
@Component
@ExtApiTab(cfg = a8k.extapi_controler.pagecontrol.ExtApiTabConfig.VirtualDeviceSimulationTest)
@ExtApiTab()
public class VirtualDeviceSimulationTest {
@Resource
VirtualDevice virtualDevice;

207
src/main/java/a8k/service/verification/PipetteGunVerification.java

@ -0,0 +1,207 @@
package a8k.service.verification;
import a8k.extapi.utils.ExtApiFn;
import a8k.extapi.utils.ExtApiTab;
import a8k.hardware.type.LldType;
import a8k.service.app.devicectrl.driver.PipetteCtrlDriver;
import a8k.service.app.devicectrl.driver.type.PipetteRegIndex;
import a8k.service.app.devicectrl.exdriver.HbotBaseMoveExDriver;
import a8k.service.app.devicectrl.exdriver.MotorEnableExDriver;
import a8k.service.app.devicectrl.param.param_mgr.HbotSamplePosParamMgr;
import a8k.service.app.devicectrl.param.param_mgr.PipetteGunLLDParamMgr;
import a8k.service.app.devicectrl.param.param_mgr.base.ParamMgr;
import a8k.service.app.devicectrl.param.type.A8kSamplePos;
import a8k.service.app.devicectrl.param.type.HbotSamplePos;
import a8k.service.dao.type.Parameter;
import a8k.type.cfg.Pos3d;
import a8k.type.exception.AppException;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
@ExtApiTab()
@Component
@Slf4j
public class PipetteGunVerification extends ParamMgr {
enum PipetteGunVerificationParam {
LLDStartPos("LLD开始位置", Integer.class),
LLDEndPos("LLD结束位置", Integer.class),
LLDType("LLD类型", LldType.class),
LLDCThreshold("LLD C阈值", Integer.class),
LLDPThreshold("LLD P阈值", Integer.class),
LLFVel("LLF Z轴速度", Integer.class),
;
public final String chName;
public final Class<?> type;
PipetteGunVerificationParam(String chName, Class<?> type) {
this.chName = chName;
this.type = type;
}
}
@Resource
PipetteGunLLDParamMgr pipetteGunLLDParamMgr;
@Resource
PipetteCtrlDriver pipetteCtrlDriver;
@Resource
HbotBaseMoveExDriver hbotBaseMoveExDriver;
@Resource
MotorEnableExDriver motorEnableExDriver;
@Resource
HbotSamplePosParamMgr hbotSamplePosParamMgr;
@PostConstruct
void initialize() {
for (PipetteGunVerificationParam cfg : PipetteGunVerificationParam.values()) {
initParam(cfg, cfg.chName, cfg.type);
}
}
@ExtApiFn(name = "失能电机", group = "基础", order = 1)
public void disableModule() throws AppException {
motorEnableExDriver.forceDisableAllMotor();
}
@ExtApiFn(name = "移液枪初始化(Tip会掉落)", group = "基础", order = 2)
public void pipetteInitDeviceBlock() throws AppException {
}
@ExtApiFn(name = "获取相关参数", group = "配置", order = 100)
public List<Parameter> getParams() {
return super.getParams();
}
@ExtApiFn(name = "设置当前位置为LLD开始位置", group = "配置", order = 101)
public void setCurZPosAsLLDStartZ() throws AppException {
pipetteCtrlDriver.zMotorEnable(1);
pipetteCtrlDriver.zMotorMeasureDistance();
Integer curZPos = pipetteCtrlDriver.zMotorReadMeasureDistanceResult();
setParam(PipetteGunVerificationParam.LLDStartPos, curZPos);
pipetteCtrlDriver.zMotorEnable(0);
}
@ExtApiFn(name = "设置当前位置为LLD结束位置", group = "配置", order = 102)
public void setCurZPosAsLLDEndZ() throws AppException {
pipetteCtrlDriver.zMotorEnable(1);
pipetteCtrlDriver.zMotorMeasureDistance();
Integer curZPos = pipetteCtrlDriver.zMotorReadMeasureDistanceResult();
setParam(PipetteGunVerificationParam.LLDEndPos, curZPos);
pipetteCtrlDriver.zMotorEnable(0);
}
@ExtApiFn(name = "设置LLD参数(c_val[1..300], p_val[1..300])", group = "配置", order = 103)
public void setLLDParam(LldType type, Integer c_val, Integer p_val) throws AppException {
setParam(PipetteGunVerificationParam.LLDType, type);
setParam(PipetteGunVerificationParam.LLDCThreshold, c_val);
setParam(PipetteGunVerificationParam.LLDPThreshold, p_val);
}
@ExtApiFn(name = "设置LLF参数(vel[1..1000])", group = "配置", order = 104)
public void setLLFParam(Integer vel) throws AppException {
setParam(PipetteGunVerificationParam.LLFVel, vel);
}
enum Step {
kStepIdle,
kStepLLDPrepare,
kStepLLD,
kStepAspirate,
kStepDistribu,
}
Step step = Step.kStepIdle;
@ExtApiFn(name = "LLD准备", group = "操作", order = 200)
public void lldprepare() throws AppException {
motorEnableExDriver.enableAllMotor();
pipetteCtrlDriver.zMotorMoveZeroBlock();
pipetteCtrlDriver.pipetteInitDeviceBlock();
pipetteCtrlDriver.lldPrepareBlock();
step = Step.kStepLLDPrepare;
}
@ExtApiFn(name = "LLD", group = "操作", order = 201)
public void lld() throws AppException {
if (!step.equals(Step.kStepLLDPrepare)) {
throw AppException.ofAECodeError("请按照顺序执行");
}
pipetteCtrlDriver.zMotorEnable(1);
pipetteCtrlDriver.zMotorMoveZeroBlock();
Integer lldStartPos = getParam(PipetteGunVerificationParam.LLDStartPos, Integer.class);
Integer lldEndPos = getParam(PipetteGunVerificationParam.LLDEndPos, Integer.class);
LldType type = getParam(PipetteGunVerificationParam.LLDType, LldType.class);
Integer c_val = getParam(PipetteGunVerificationParam.LLDCThreshold, Integer.class);
Integer p_val = getParam(PipetteGunVerificationParam.LLDPThreshold, Integer.class);
pipetteCtrlDriver.setStartZ(lldStartPos);
pipetteCtrlDriver.setEndZ(lldEndPos);
pipetteCtrlDriver.setLldType(type);
pipetteCtrlDriver.setLldCThreshold(c_val);
pipetteCtrlDriver.setLldPThreshold(p_val);
pipetteCtrlDriver.lldBlock();
if (!pipetteCtrlDriver.lldIsDetectLiquid()) {
throw AppException.ofAECodeError("没有液体");
}
step = Step.kStepLLD;
}
@ExtApiFn(name = "吸液", group = "操作", order = 202)
public String aspirate(Integer ul) throws AppException {
if (!step.equals(Step.kStepLLD)) {
throw AppException.ofAECodeError("请按照顺序执行");
}
/*
* 吸液并归零
*/
pipetteCtrlDriver.zMotorEnable(1);
Integer lldEndPos = getParam(PipetteGunVerificationParam.LLDEndPos, Integer.class);
Integer lldVel = getParam(PipetteGunVerificationParam.LLFVel, Integer.class);
if (!pipetteCtrlDriver.isHasTip()) {
throw AppException.ofAECodeError("没有tip头");
}
pipetteCtrlDriver.setLlfStartZ(pipetteCtrlDriver.getReg(PipetteRegIndex.kreg_pipette_zm_pos));
pipetteCtrlDriver.setLlfStartZ(lldEndPos);
pipetteCtrlDriver.aspirateSetLlfVelocity(lldVel);
pipetteCtrlDriver.aspiratePrepareBlock();
pipetteCtrlDriver.aspirateBlock(ul);
pipetteCtrlDriver.zMotorMoveToZeroPointQuickBlock();
step = Step.kStepAspirate;
return "吸液成功";
}
@ExtApiFn(name = "分配", group = "操作", order = 203)
public String distribuAll() throws AppException {
if (!step.equals(Step.kStepAspirate)) {
throw AppException.ofAECodeError("请按照顺序执行");
}
Integer containUl = pipetteCtrlDriver.getReg(PipetteRegIndex.kreg_pipette_pos_ul);
pipetteCtrlDriver.aspirateBlock(-containUl);
// pipetteCtrlDriver.clearHangingLiquid(3);
step = Step.kStepDistribu;
return "分配成功";
}
}

19
src/main/java/a8k/type/appret/AppRetV1.java

@ -10,9 +10,10 @@ import org.springframework.web.method.annotation.HandlerMethodValidationExceptio
public class AppRetV1 {
// 错误信息
public AppError ecode = null;
public String dataType;
public Object data;
public AppError ecode = null;
public String dataType;
public Object data;
public String message;
// 接口请求时间
@Getter
@ -41,13 +42,17 @@ public class AppRetV1 {
public static AppRetV1 fail(Exception e) {
AppRetV1 r = new AppRetV1();
if (e instanceof AppException hexcep) {
r.ecode = hexcep.error;
r.ecode = hexcep.error;
r.message = hexcep.error.exmsg;
} else if (e instanceof ValidationException ex) {
r.ecode = new AECodeError( ex.getLocalizedMessage());
r.ecode = new AECodeError(ex.getLocalizedMessage());
r.message = ex.getMessage();
} else if (e instanceof HandlerMethodValidationException validationE) {
r.ecode = new AECodeError( validationE.getMessage());
r.ecode = new AECodeError(validationE.getMessage());
r.message = validationE.getMessage();
} else {
r.ecode = new AECodeError(e.getMessage());
r.ecode = new AECodeError(e.getMessage());
r.message = e.getMessage();
}
return r;
}

1
src/main/java/a8k/utils/ZCSVUtils.java

@ -89,7 +89,6 @@ public class ZCSVUtils {
log.info("{}", ZJsonHelper.objectToJson(projectBaseInfo));
}
}

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

@ -95,6 +95,9 @@ public class ZJsonHelper {
if (obj instanceof Float) {
return ObjectMapper.createObjectNode().put("value", (Float) obj);
}
if (obj instanceof Enum) {
return ObjectMapper.createObjectNode().put("value", obj.toString());
}
return ObjectMapper.valueToTree(obj);
}

Loading…
Cancel
Save