From d5b037c6216203fbc99036f6bc09ecc992ca219a Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 2 Dec 2024 21:00:53 +0800 Subject: [PATCH] update --- .../java/a8k/extapi/controler/ExtApiControler.java | 382 +++++++++++++++++++++ .../extapi/controler/ExtApiControllerAdvice.java | 21 ++ .../a8k/extapi/service/ExtApiTabCfgService.java | 120 +++++++ .../a8k/extapi/utils/EnginnerPageActionParam.java | 11 + .../java/a8k/extapi/utils/EnginnerParamFile.java | 12 + src/main/java/a8k/extapi/utils/ExtApiFn.java | 16 + src/main/java/a8k/extapi/utils/ExtApiParam.java | 12 + .../java/a8k/extapi/utils/ExtApiParamsTab.java | 10 + src/main/java/a8k/extapi/utils/ExtApiStatu.java | 13 + src/main/java/a8k/extapi/utils/ExtApiTab.java | 10 + .../java/a8k/extapi_controler/DownloadMgr.java | 56 --- .../java/a8k/extapi_controler/ExtApiControler.java | 370 -------------------- .../extapi_controler/ExtApiControllerAdvice.java | 21 -- .../pagecontrol/ExtApiTabConfig.java | 56 --- .../utils/EnginnerPageActionParam.java | 11 - .../extapi_controler/utils/EnginnerParamFile.java | 12 - .../java/a8k/extapi_controler/utils/ExtApiFn.java | 16 - .../a8k/extapi_controler/utils/ExtApiParam.java | 12 - .../extapi_controler/utils/ExtApiParamsTab.java | 10 - .../a8k/extapi_controler/utils/ExtApiStatu.java | 13 - .../java/a8k/extapi_controler/utils/ExtApiTab.java | 12 - .../background/BackgroudProcessCtrlService.java | 6 +- .../ctrlservice/TubeFeedingCtrlService.java | 7 +- .../app/devicectrl/driver/PipetteCtrlDriver.java | 7 +- .../app/devicectrl/driver/StepMotorCtrlDriver.java | 6 +- .../devicectrl/exdriver/HbotBaseMoveExDriver.java | 5 +- .../init/MiniServoReferencePointIniter.java | 7 +- .../app/devicectrl/param/LowerDeviceParamMgr.java | 7 +- .../calibration/Hbot2DCodeScanPosCalibration.java | 7 +- .../HbotLargeBottleBSPosCalibration.java | 7 +- .../calibration/HbotLittleBSPosCalibration.java | 7 +- .../HbotProbeSubstancePosCalibration.java | 8 +- .../calibration/HbotSamplePosCalibration.java | 7 +- .../param/calibration/HbotTipPosCalibration.java | 15 +- .../calibration/OptModuleParamCalibration.java | 8 +- .../calibration/PipetteGunLLDParamCalibration.java | 7 +- .../calibration/PipetteGunLLFParamCalibration.java | 7 +- ...ReactionPlatesTransmitControlerCalibration.java | 7 +- .../TemperatureCtrlParamCalibration.java | 7 +- .../TubeFeedingModulePosCalibration.java | 7 +- .../calibration/TubePreProcesPosCalibration.java | 7 +- .../a8k/service/bases/FrontEndEventRouter.java | 4 - .../service/dao/LowerDeviceParameterStorgeDao.java | 1 + src/main/java/a8k/service/test/A8kOptTest.java | 9 +- .../a8k/service/test/MainflowCtrlTestService.java | 6 +- src/main/java/a8k/service/test/PipetteGunTest.java | 7 +- .../java/a8k/service/test/PosMeasureUtils.java | 8 +- .../service/test/VirtualDeviceSimulationTest.java | 8 +- .../verification/PipetteGunVerification.java | 207 +++++++++++ src/main/java/a8k/type/appret/AppRetV1.java | 19 +- src/main/java/a8k/utils/ZCSVUtils.java | 1 - src/main/java/a8k/utils/ZJsonHelper.java | 3 + 52 files changed, 905 insertions(+), 710 deletions(-) create mode 100644 src/main/java/a8k/extapi/controler/ExtApiControler.java create mode 100644 src/main/java/a8k/extapi/controler/ExtApiControllerAdvice.java create mode 100644 src/main/java/a8k/extapi/service/ExtApiTabCfgService.java create mode 100644 src/main/java/a8k/extapi/utils/EnginnerPageActionParam.java create mode 100644 src/main/java/a8k/extapi/utils/EnginnerParamFile.java create mode 100644 src/main/java/a8k/extapi/utils/ExtApiFn.java create mode 100644 src/main/java/a8k/extapi/utils/ExtApiParam.java create mode 100644 src/main/java/a8k/extapi/utils/ExtApiParamsTab.java create mode 100644 src/main/java/a8k/extapi/utils/ExtApiStatu.java create mode 100644 src/main/java/a8k/extapi/utils/ExtApiTab.java delete mode 100644 src/main/java/a8k/extapi_controler/DownloadMgr.java delete mode 100644 src/main/java/a8k/extapi_controler/ExtApiControler.java delete mode 100644 src/main/java/a8k/extapi_controler/ExtApiControllerAdvice.java delete mode 100644 src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java delete mode 100644 src/main/java/a8k/extapi_controler/utils/EnginnerPageActionParam.java delete mode 100644 src/main/java/a8k/extapi_controler/utils/EnginnerParamFile.java delete mode 100644 src/main/java/a8k/extapi_controler/utils/ExtApiFn.java delete mode 100644 src/main/java/a8k/extapi_controler/utils/ExtApiParam.java delete mode 100644 src/main/java/a8k/extapi_controler/utils/ExtApiParamsTab.java delete mode 100644 src/main/java/a8k/extapi_controler/utils/ExtApiStatu.java delete mode 100644 src/main/java/a8k/extapi_controler/utils/ExtApiTab.java create mode 100644 src/main/java/a8k/service/verification/PipetteGunVerification.java diff --git a/src/main/java/a8k/extapi/controler/ExtApiControler.java b/src/main/java/a8k/extapi/controler/ExtApiControler.java new file mode 100644 index 0000000..dc016a4 --- /dev/null +++ b/src/main/java/a8k/extapi/controler/ExtApiControler.java @@ -0,0 +1,382 @@ +package a8k.extapi.controler; + +import a8k.SpringBootBeanUtil; +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; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Controller +public class ExtApiControler { + + @Resource + ExtApiTabCfgService extApiTabCfgService; + + @PostMapping("/api/service-config/service-list") + @ResponseBody + public AppRetV1 services() { + List> services = new ArrayList<>(); + var classes = SpringBootBeanUtil.getBeans(); + for (var clazz : classes) { + var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); + var cfg = extApiTabCfgService.getCfg(clazz); + + if (cfg == null) { + continue; + } + if (null == hardwareServiceAnnotation || !cfg.display) { + continue; + } + + Map service = new HashMap<>(); + service.put("key", clazz.getSimpleName()); + service.put("name", cfg.getChName()); + service.put("order", cfg.getIndex()); + services.add(service); + } + return AppRetV1.success(services); + } + + @PostMapping("/api/service-config/service-params-list") + @ResponseBody + public AppRetV1 serviceParams(@RequestBody Map params) + throws InvocationTargetException, IllegalAccessException { + String serviceKey = (String) params.get("serviceKey"); + var paramService = this.getServiceParamHandlerByServiceKey(serviceKey); + List> list = new ArrayList<>(); + if (null == paramService) { + return AppRetV1.success(list); + } + + var methods = paramService.getClass().getMethods(); + for (var method : methods) { + var methodName = method.getName(); + if (!methodName.startsWith("get")) { + continue; + } + var paramAnnotation = method.getAnnotation(ExtApiParam.class); + if (null == paramAnnotation) { + continue; + } + + Map param = new HashMap<>(); + param.put("key", methodName.substring(3)); + param.put("type", method.getReturnType().getName()); + param.put("group", paramAnnotation.group()); + param.put("name", paramAnnotation.name()); + param.put("value", method.invoke(paramService)); + param.put("order", paramAnnotation.order()); + list.add(param); + } + return AppRetV1.success(list); + } + + @PostMapping("/api/service-config/service-params-update") + @ResponseBody + public AppRetV1 serviceParamsUpdate(@RequestBody Map params) throws Exception { + String serviceKey = (String) params.get("serviceKey"); + Map newParams = (Map) params.get("params"); + + var paramService = this.getServiceParamHandlerByServiceKey(serviceKey); + Assert.isTrue(paramService != null, "paramService != null"); + var paramServiceClass = paramService.getClass(); + for (var param : newParams.entrySet()) { + var name = param.getKey(); + var value = param.getValue(); + + var setterName = String.format("set%s", name); + var methods = paramServiceClass.getMethods(); + var isSetterHasBeenFound = false; + for (var method : methods) { + if (!setterName.equals(method.getName()) || 1 < method.getParameterTypes().length) { + continue; + } + var setParam = method.getParameters()[0]; + if (!setParam.getType().isAssignableFrom(value.getClass())) { + if (!(value instanceof Map)) { + continue; + } + var objValue = MyClassHelper.initializeByMap(setParam.getType(), (Map) value); + method.invoke(paramService, objValue); + } else { + method.invoke(paramService, value); + } + isSetterHasBeenFound = true; + } + + if (!isSetterHasBeenFound) { + // var options = HardwareServiceSetting.getOption(serviceKey, name); + // options.setValue(value); + // options.save(); + } + } + return AppRetV1.success(); + } + + @PostMapping("/api/service-config/service-params-reset") + @ResponseBody + public AppRetV1 serviceParamsReset(@RequestBody Map params) throws Exception { + // String serviceKey = (String) params.get("serviceKey"); + // HardwareServiceSetting.deleteAllByServiceName(serviceKey); + return AppRetV1.success(); + } + + @PostMapping("/api/service-config/service-status-list") + @ResponseBody + public AppRetV1 serviceStatus(@RequestBody Map params) throws InvocationTargetException, IllegalAccessException { + String serviceKey = (String) params.get("serviceKey"); + Class serviceClass = null; + var classes = SpringBootBeanUtil.getBeans(); + for (var clazz : classes) { + var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); + if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { + continue; + } + serviceClass = clazz; + break; + } + + List> statusList = new ArrayList<>(); + if (null == serviceClass) { + return AppRetV1.success(statusList); + } + + var service = SpringBootBeanUtil.getBean(serviceClass); + var methods = serviceClass.getMethods(); + for (var method : methods) { + var statusAnnotation = method.getAnnotation(ExtApiStatu.class); + if (null == statusAnnotation) { + continue; + } + + var status = new HashMap(); + status.put("name", statusAnnotation.name()); + status.put("group", statusAnnotation.group()); + status.put("order", statusAnnotation.order()); + var value = method.invoke(service); + status.put("value", value); + statusList.add(status); + } + return AppRetV1.success(statusList); + } + + // + @PostMapping("/api/service-config/service-action-list") + @ResponseBody + public AppRetV1 serviceActionList(@RequestBody Map params) throws Exception { + String serviceKey = (String) params.get("serviceKey"); + Class serviceClass = null; + var classes = SpringBootBeanUtil.getBeans(); + for (var clazz : classes) { + var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); + if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { + continue; + } + serviceClass = clazz; + break; + } + + List> actions = new ArrayList<>(); + if (null == serviceClass) { + return AppRetV1.success(actions); + } + + var methodList = serviceClass.getMethods(); + for (var method : methodList) { + var actionAnnotation = method.getAnnotation(ExtApiFn.class); + if (null == actionAnnotation) { + continue; + } + var action = new HashMap(); + action.put("key", method.getName()); + action.put("name", actionAnnotation.name()); + action.put("group", actionAnnotation.group()); + action.put("groupOrder", actionAnnotation.order()); + action.put("order", actionAnnotation.order()); + action.put("newline", actionAnnotation.newline()); + + var actionParams = new ArrayList>(); + var actionParamList = method.getParameters(); + for (var param : actionParamList) { + var actionParam = new HashMap(); + actionParam.put("key", param.getName()); + actionParam.put("type", param.getType().getName()); + actionParam.put("value", null); + if (param.getType().equals(Boolean.class)) { + actionParam.put("value", false); + } else if (param.getType().equals(Integer.class)) { + actionParam.put("value", 0); + } else if (param.getType().equals(String.class)) { + actionParam.put("value", ""); + } + if (param.getType().isEnum()) { + actionParam.put("type", "Enum"); + actionParam.put("typeEnum", param.getType().getName()); + var paramOptions = new ArrayList>(); + var values = param.getType().getEnumConstants(); + for (var value : values) { + var str = value.toString(); + var paramOption = new HashMap(); + paramOption.put("name", str); + paramOption.put("value", str); + paramOptions.add(paramOption); + } + if (!paramOptions.isEmpty()) { + actionParam.put("value", paramOptions.get(0).get("value")); + } + actionParam.put("options", paramOptions); + } + actionParam.put("name", param.getName()); + var annotation = param.getAnnotation(EnginnerPageActionParam.class); + if (null != annotation) { + actionParam.put("name", annotation.name()); + } + actionParams.add(actionParam); + } + action.put("params", actionParams); + actions.add(action); + } + return AppRetV1.success(actions); + } + + @PostMapping("/api/service-config/service-action-exec") + @ResponseBody + public AppRetV1 serviceActionExecute(@RequestBody Map params) throws Throwable { + String serviceKey = (String) params.get("serviceKey"); + var service = this.getServiceInstanceByServiceKey(serviceKey); + Assert.isTrue(service != null, "service not found"); + + var actionName = (String) params.get("action"); + var actionParams = (List) params.get("params"); + var actionParamTypes = (List) params.get("paramTypes"); + Class[] parameterTypes = new Class[actionParams.size()]; + for (int i = 0; i < actionParams.size(); ++i) { + var name = actionParamTypes.get(i); + parameterTypes[i] = Class.forName(name); + } + Method method = service.getClass().getMethod(actionName, parameterTypes); + + var parameters = method.getParameters(); + for (int i = 0; i < parameters.length; i++) { + var parameter = parameters[i]; + if (parameter.getType().isEnum()) { + var methodValueOf = parameter.getType().getMethod("valueOf", String.class); + var value = methodValueOf.invoke(null, actionParams.get(i)); + actionParams.set(i, value); + } else if (parameter.getType().equals(EnginnerParamFile.class)) { + String value = (String) actionParams.get(i); + actionParams.set(i, EnginnerParamFile.fromBase64(value)); + } else if (parameter.getType().equals(Double.class)) { + Object value = actionParams.get(i); + actionParams.set(i, Double.valueOf(String.format("%s", value))); + } + } + + return this.executeServiceActionAndGetResponse(service, method, actionParams); + } + + @PostMapping("/api/service-config/class-struct-info-get") + @ResponseBody + public AppRetV1 classStructInfoGet(@RequestBody Map params) throws Exception { + String className = (String) params.get("class"); + Class clazz = Class.forName(className); + List> struct = new ArrayList<>(); + this.classStructInfoFill(clazz, struct); + return AppRetV1.success(struct); + } + + // execute service action and get response + private AppRetV1 executeServiceActionAndGetResponse(Object service, Method method, List actionParams) throws Throwable { + Object actionResult = null; + try { + var actionParamList = actionParams.toArray(); + + var methodAnnotation = method.getAnnotation(ExtApiFn.class); + var beforeExecute = methodAnnotation.beforeExecute(); + if (!beforeExecute.isEmpty()) { + var beforeExecuteMethod = service.getClass().getMethod(beforeExecute, new Class[]{Method.class, List.class}); + beforeExecuteMethod.invoke(service, method, actionParams); + } + + if (method.getReturnType().equals(Void.TYPE)) { + method.invoke(service, actionParamList); + } else { + actionResult = method.invoke(service, actionParamList); + } + } catch (InvocationTargetException e) { + throw e.getTargetException(); + } + + if (actionResult instanceof AppRetV1) { + return (AppRetV1) actionResult; + } + return AppRetV1.success(actionResult); + } + + // get service instance by service key + private Object getServiceInstanceByServiceKey(String serviceKey) { + Class serviceClass = null; + var classes = SpringBootBeanUtil.getBeans(); + for (var clazz : classes) { + var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); + if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { + continue; + } + serviceClass = clazz; + break; + } + if (null == serviceClass) { + return null; + } + return SpringBootBeanUtil.getBean(serviceClass); + } + + // get service param handler by given service key + private Object getServiceParamHandlerByServiceKey(String serviceKey) { + var classes = SpringBootBeanUtil.getBeans(); + for (var clazz : classes) { + var hardwareServiceParamsAnnotation = clazz.getAnnotation(ExtApiParamsTab.class); + if (null == hardwareServiceParamsAnnotation) { + continue; + } + var serviceClass = hardwareServiceParamsAnnotation.service(); + if (!serviceClass.getSimpleName().equals(serviceKey)) { + continue; + } + return SpringBootBeanUtil.getBean(clazz); + } + return null; + } + + // fill up struct info + private void classStructInfoFill(Class clazz, List> struct) { + var fields = clazz.getFields(); + for (var item : fields) { + if (Modifier.isStatic(item.getModifiers()) || Modifier.isFinal(item.getModifiers())) { + continue; + } + var filed = new HashMap(); + filed.put("name", item.getName()); + filed.put("type", item.getType().getName()); + filed.put("typeShort", item.getType().getSimpleName()); + struct.add(filed); + } + } +} diff --git a/src/main/java/a8k/extapi/controler/ExtApiControllerAdvice.java b/src/main/java/a8k/extapi/controler/ExtApiControllerAdvice.java new file mode 100644 index 0000000..3b1c902 --- /dev/null +++ b/src/main/java/a8k/extapi/controler/ExtApiControllerAdvice.java @@ -0,0 +1,21 @@ +package a8k.extapi.controler; + +import a8k.type.appret.AppRetV1; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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") +public class ExtApiControllerAdvice { + + Logger logger = LoggerFactory.getLogger(ExtApiControllerAdvice.class); + + @ResponseBody + @ExceptionHandler(value = Exception.class) + public AppRetV1 controllerExceptionHandler(Exception e) { + logger.info("捕获到异常 : ", e); + return AppRetV1.fail(e); + } +} diff --git a/src/main/java/a8k/extapi/service/ExtApiTabCfgService.java b/src/main/java/a8k/extapi/service/ExtApiTabCfgService.java new file mode 100644 index 0000000..c54726a --- /dev/null +++ b/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 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 "已切换,请刷新页面."; + } +} diff --git a/src/main/java/a8k/extapi/utils/EnginnerPageActionParam.java b/src/main/java/a8k/extapi/utils/EnginnerPageActionParam.java new file mode 100644 index 0000000..e8f7e9f --- /dev/null +++ b/src/main/java/a8k/extapi/utils/EnginnerPageActionParam.java @@ -0,0 +1,11 @@ +package a8k.extapi.utils; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.PARAMETER}) +public @interface EnginnerPageActionParam { + String name(); +} diff --git a/src/main/java/a8k/extapi/utils/EnginnerParamFile.java b/src/main/java/a8k/extapi/utils/EnginnerParamFile.java new file mode 100644 index 0000000..2d282f7 --- /dev/null +++ b/src/main/java/a8k/extapi/utils/EnginnerParamFile.java @@ -0,0 +1,12 @@ +package a8k.extapi.utils; +import java.util.Base64; +public class EnginnerParamFile { + private byte[] bytes; + + public static EnginnerParamFile fromBase64( String base64 ) { + Base64.Decoder decoder = Base64.getDecoder(); + var file = new EnginnerParamFile(); + file.bytes = decoder.decode( base64 ); + return file; + } +} diff --git a/src/main/java/a8k/extapi/utils/ExtApiFn.java b/src/main/java/a8k/extapi/utils/ExtApiFn.java new file mode 100644 index 0000000..801f2cd --- /dev/null +++ b/src/main/java/a8k/extapi/utils/ExtApiFn.java @@ -0,0 +1,16 @@ +package a8k.extapi.utils; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface ExtApiFn { + String name() default ""; + String group() default ""; + int groupOrder() default 0; + int order() default 0; + boolean newline() default false; + String beforeExecute() default ""; +} diff --git a/src/main/java/a8k/extapi/utils/ExtApiParam.java b/src/main/java/a8k/extapi/utils/ExtApiParam.java new file mode 100644 index 0000000..279f2a8 --- /dev/null +++ b/src/main/java/a8k/extapi/utils/ExtApiParam.java @@ -0,0 +1,12 @@ +package a8k.extapi.utils; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface ExtApiParam { + String name(); + String group() default ""; + int order() default 0; +} diff --git a/src/main/java/a8k/extapi/utils/ExtApiParamsTab.java b/src/main/java/a8k/extapi/utils/ExtApiParamsTab.java new file mode 100644 index 0000000..7dc9bc6 --- /dev/null +++ b/src/main/java/a8k/extapi/utils/ExtApiParamsTab.java @@ -0,0 +1,10 @@ +package a8k.extapi.utils; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface ExtApiParamsTab { + Class service(); +} diff --git a/src/main/java/a8k/extapi/utils/ExtApiStatu.java b/src/main/java/a8k/extapi/utils/ExtApiStatu.java new file mode 100644 index 0000000..fc2fa81 --- /dev/null +++ b/src/main/java/a8k/extapi/utils/ExtApiStatu.java @@ -0,0 +1,13 @@ +package a8k.extapi.utils; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface ExtApiStatu { + String name(); + String group() default ""; + int order() default 0; +} diff --git a/src/main/java/a8k/extapi/utils/ExtApiTab.java b/src/main/java/a8k/extapi/utils/ExtApiTab.java new file mode 100644 index 0000000..015d412 --- /dev/null +++ b/src/main/java/a8k/extapi/utils/ExtApiTab.java @@ -0,0 +1,10 @@ +package a8k.extapi.utils; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface ExtApiTab { +} diff --git a/src/main/java/a8k/extapi_controler/DownloadMgr.java b/src/main/java/a8k/extapi_controler/DownloadMgr.java deleted file mode 100644 index bdcf2fe..0000000 --- a/src/main/java/a8k/extapi_controler/DownloadMgr.java +++ /dev/null @@ -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 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(); -// -// -// } - -} diff --git a/src/main/java/a8k/extapi_controler/ExtApiControler.java b/src/main/java/a8k/extapi_controler/ExtApiControler.java deleted file mode 100644 index 67a46dd..0000000 --- a/src/main/java/a8k/extapi_controler/ExtApiControler.java +++ /dev/null @@ -1,370 +0,0 @@ -package a8k.extapi_controler; - -import a8k.SpringBootBeanUtil; -import a8k.extapi_controler.utils.*; -import a8k.type.appret.AppRetV1; -import a8k.utils.*; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Controller; -import org.springframework.util.Assert; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Slf4j -@Controller -public class ExtApiControler { - @PostMapping("/api/service-config/service-list") - @ResponseBody - public AppRetV1 services() { - List> services = new ArrayList<>(); - var classes = SpringBootBeanUtil.getBeans(); - for (var clazz : classes) { - var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); - if (null == hardwareServiceAnnotation || !hardwareServiceAnnotation.cfg().isDisplay()) { - continue; - } - - Map service = new HashMap<>(); - service.put("key", clazz.getSimpleName()); - service.put("name", hardwareServiceAnnotation.cfg().getName()); - service.put("order", hardwareServiceAnnotation.cfg().ordinal()); - services.add(service); - } - return AppRetV1.success(services); - } - - @PostMapping("/api/service-config/service-params-list") - @ResponseBody - public AppRetV1 serviceParams(@RequestBody Map params) - throws InvocationTargetException, IllegalAccessException { - String serviceKey = (String) params.get("serviceKey"); - var paramService = this.getServiceParamHandlerByServiceKey(serviceKey); - List> list = new ArrayList<>(); - if (null == paramService) { - return AppRetV1.success(list); - } - - var methods = paramService.getClass().getMethods(); - for (var method : methods) { - var methodName = method.getName(); - if (!methodName.startsWith("get")) { - continue; - } - var paramAnnotation = method.getAnnotation(ExtApiParam.class); - if (null == paramAnnotation) { - continue; - } - - Map param = new HashMap<>(); - param.put("key", methodName.substring(3)); - param.put("type", method.getReturnType().getName()); - param.put("group", paramAnnotation.group()); - param.put("name", paramAnnotation.name()); - param.put("value", method.invoke(paramService)); - param.put("order", paramAnnotation.order()); - list.add(param); - } - return AppRetV1.success(list); - } - - @PostMapping("/api/service-config/service-params-update") - @ResponseBody - public AppRetV1 serviceParamsUpdate(@RequestBody Map params) throws Exception { - String serviceKey = (String) params.get("serviceKey"); - Map newParams = (Map) params.get("params"); - - var paramService = this.getServiceParamHandlerByServiceKey(serviceKey); - Assert.isTrue(paramService != null, "paramService != null"); - var paramServiceClass = paramService.getClass(); - for (var param : newParams.entrySet()) { - var name = param.getKey(); - var value = param.getValue(); - - var setterName = String.format("set%s", name); - var methods = paramServiceClass.getMethods(); - var isSetterHasBeenFound = false; - for (var method : methods) { - if (!setterName.equals(method.getName()) || 1 < method.getParameterTypes().length) { - continue; - } - var setParam = method.getParameters()[0]; - if (!setParam.getType().isAssignableFrom(value.getClass())) { - if (!(value instanceof Map)) { - continue; - } - var objValue = MyClassHelper.initializeByMap(setParam.getType(), (Map) value); - method.invoke(paramService, objValue); - } else { - method.invoke(paramService, value); - } - isSetterHasBeenFound = true; - } - - if (!isSetterHasBeenFound) { - // var options = HardwareServiceSetting.getOption(serviceKey, name); - // options.setValue(value); - // options.save(); - } - } - return AppRetV1.success(); - } - - @PostMapping("/api/service-config/service-params-reset") - @ResponseBody - public AppRetV1 serviceParamsReset(@RequestBody Map params) throws Exception { - // String serviceKey = (String) params.get("serviceKey"); - // HardwareServiceSetting.deleteAllByServiceName(serviceKey); - return AppRetV1.success(); - } - - @PostMapping("/api/service-config/service-status-list") - @ResponseBody - public AppRetV1 serviceStatus(@RequestBody Map params) throws InvocationTargetException, IllegalAccessException { - String serviceKey = (String) params.get("serviceKey"); - Class serviceClass = null; - var classes = SpringBootBeanUtil.getBeans(); - for (var clazz : classes) { - var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); - if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { - continue; - } - serviceClass = clazz; - break; - } - - List> statusList = new ArrayList<>(); - if (null == serviceClass) { - return AppRetV1.success(statusList); - } - - var service = SpringBootBeanUtil.getBean(serviceClass); - var methods = serviceClass.getMethods(); - for (var method : methods) { - var statusAnnotation = method.getAnnotation(ExtApiStatu.class); - if (null == statusAnnotation) { - continue; - } - - var status = new HashMap(); - status.put("name", statusAnnotation.name()); - status.put("group", statusAnnotation.group()); - status.put("order", statusAnnotation.order()); - var value = method.invoke(service); - status.put("value", value); - statusList.add(status); - } - return AppRetV1.success(statusList); - } -// - @PostMapping("/api/service-config/service-action-list") - @ResponseBody - public AppRetV1 serviceActionList(@RequestBody Map params) throws Exception { - String serviceKey = (String) params.get("serviceKey"); - Class serviceClass = null; - var classes = SpringBootBeanUtil.getBeans(); - for (var clazz : classes) { - var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); - if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { - continue; - } - serviceClass = clazz; - break; - } - - List> actions = new ArrayList<>(); - if (null == serviceClass) { - return AppRetV1.success(actions); - } - - var methodList = serviceClass.getMethods(); - for (var method : methodList) { - var actionAnnotation = method.getAnnotation(ExtApiFn.class); - if (null == actionAnnotation) { - continue; - } - var action = new HashMap(); - action.put("key", method.getName()); - action.put("name", actionAnnotation.name()); - action.put("group", actionAnnotation.group()); - action.put("groupOrder", actionAnnotation.order()); - action.put("order", actionAnnotation.order()); - action.put("newline", actionAnnotation.newline()); - - var actionParams = new ArrayList>(); - var actionParamList = method.getParameters(); - for (var param : actionParamList) { - var actionParam = new HashMap(); - actionParam.put("key", param.getName()); - actionParam.put("type", param.getType().getName()); - actionParam.put("value", null); - if (param.getType().equals(Boolean.class)) { - actionParam.put("value", false); - } else if (param.getType().equals(Integer.class)) { - actionParam.put("value", 0); - } else if (param.getType().equals(String.class)) { - actionParam.put("value", ""); - } - if (param.getType().isEnum()) { - actionParam.put("type", "Enum"); - actionParam.put("typeEnum", param.getType().getName()); - var paramOptions = new ArrayList>(); - var values = param.getType().getEnumConstants(); - for (var value : values) { - var str = value.toString(); - var paramOption = new HashMap(); - paramOption.put("name", str); - paramOption.put("value", str); - paramOptions.add(paramOption); - } - if (!paramOptions.isEmpty()) { - actionParam.put("value", paramOptions.get(0).get("value")); - } - actionParam.put("options", paramOptions); - } - actionParam.put("name", param.getName()); - var annotation = param.getAnnotation(EnginnerPageActionParam.class); - if (null != annotation) { - actionParam.put("name", annotation.name()); - } - actionParams.add(actionParam); - } - action.put("params", actionParams); - actions.add(action); - } - return AppRetV1.success(actions); - } - - @PostMapping("/api/service-config/service-action-exec") - @ResponseBody - public AppRetV1 serviceActionExecute(@RequestBody Map params) throws Throwable { - String serviceKey = (String) params.get("serviceKey"); - var service = this.getServiceInstanceByServiceKey(serviceKey); - Assert.isTrue(service != null, "service not found"); - - var actionName = (String) params.get("action"); - var actionParams = (List) params.get("params"); - var actionParamTypes = (List) params.get("paramTypes"); - Class[] parameterTypes = new Class[actionParams.size()]; - for (int i = 0; i < actionParams.size(); ++i) { - var name = actionParamTypes.get(i); - parameterTypes[i] = Class.forName(name); - } - Method method = service.getClass().getMethod(actionName, parameterTypes); - - var parameters = method.getParameters(); - for (int i = 0; i < parameters.length; i++) { - var parameter = parameters[i]; - if (parameter.getType().isEnum()) { - var methodValueOf = parameter.getType().getMethod("valueOf", String.class); - var value = methodValueOf.invoke(null, actionParams.get(i)); - actionParams.set(i, value); - } else if (parameter.getType().equals(EnginnerParamFile.class)) { - String value = (String) actionParams.get(i); - actionParams.set(i, EnginnerParamFile.fromBase64(value)); - } else if (parameter.getType().equals(Double.class)) { - Object value = actionParams.get(i); - actionParams.set(i, Double.valueOf(String.format("%s", value))); - } - } - - return this.executeServiceActionAndGetResponse(service, method, actionParams); - } - - @PostMapping("/api/service-config/class-struct-info-get") - @ResponseBody - public AppRetV1 classStructInfoGet(@RequestBody Map params) throws Exception { - String className = (String) params.get("class"); - Class clazz = Class.forName(className); - List> struct = new ArrayList<>(); - this.classStructInfoFill(clazz, struct); - return AppRetV1.success(struct); - } - - // execute service action and get response - private AppRetV1 executeServiceActionAndGetResponse(Object service, Method method, List actionParams) throws Throwable { - Object actionResult = null; - try { - var actionParamList = actionParams.toArray(); - - var methodAnnotation = method.getAnnotation(ExtApiFn.class); - var beforeExecute = methodAnnotation.beforeExecute(); - if (!beforeExecute.isEmpty()) { - var beforeExecuteMethod = service.getClass().getMethod(beforeExecute, new Class[]{Method.class, List.class}); - beforeExecuteMethod.invoke(service, method, actionParams); - } - - if (method.getReturnType().equals(Void.TYPE)) { - method.invoke(service, actionParamList); - } else { - actionResult = method.invoke(service, actionParamList); - } - } catch (InvocationTargetException e) { - throw e.getTargetException(); - } - - if (actionResult instanceof AppRetV1) { - return (AppRetV1) actionResult; - } - return AppRetV1.success(actionResult); - } - - // get service instance by service key - private Object getServiceInstanceByServiceKey(String serviceKey) { - Class serviceClass = null; - var classes = SpringBootBeanUtil.getBeans(); - for (var clazz : classes) { - var hardwareServiceAnnotation = clazz.getAnnotation(ExtApiTab.class); - if (null == hardwareServiceAnnotation || !clazz.getSimpleName().equals(serviceKey)) { - continue; - } - serviceClass = clazz; - break; - } - if (null == serviceClass) { - return null; - } - return SpringBootBeanUtil.getBean(serviceClass); - } - - // get service param handler by given service key - private Object getServiceParamHandlerByServiceKey(String serviceKey) { - var classes = SpringBootBeanUtil.getBeans(); - for (var clazz : classes) { - var hardwareServiceParamsAnnotation = clazz.getAnnotation(ExtApiParamsTab.class); - if (null == hardwareServiceParamsAnnotation) { - continue; - } - var serviceClass = hardwareServiceParamsAnnotation.service(); - if (!serviceClass.getSimpleName().equals(serviceKey)) { - continue; - } - return SpringBootBeanUtil.getBean(clazz); - } - return null; - } - - // fill up struct info - private void classStructInfoFill(Class clazz, List> struct) { - var fields = clazz.getFields(); - for (var item : fields) { - if (Modifier.isStatic(item.getModifiers()) || Modifier.isFinal(item.getModifiers())) { - continue; - } - var filed = new HashMap(); - filed.put("name", item.getName()); - filed.put("type", item.getType().getName()); - filed.put("typeShort", item.getType().getSimpleName()); - struct.add(filed); - } - } -} diff --git a/src/main/java/a8k/extapi_controler/ExtApiControllerAdvice.java b/src/main/java/a8k/extapi_controler/ExtApiControllerAdvice.java deleted file mode 100644 index d60d823..0000000 --- a/src/main/java/a8k/extapi_controler/ExtApiControllerAdvice.java +++ /dev/null @@ -1,21 +0,0 @@ -package a8k.extapi_controler; - -import a8k.type.appret.AppRetV1; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -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") -public class ExtApiControllerAdvice { - - Logger logger = LoggerFactory.getLogger(ExtApiControllerAdvice.class); - - @ResponseBody - @ExceptionHandler(value = Exception.class) - public AppRetV1 controllerExceptionHandler(Exception e) { - logger.info("捕获到异常 : ", e); - return AppRetV1.fail(e); - } -} diff --git a/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java b/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java deleted file mode 100644 index c6996c0..0000000 --- a/src/main/java/a8k/extapi_controler/pagecontrol/ExtApiTabConfig.java +++ /dev/null @@ -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; - } - - -} diff --git a/src/main/java/a8k/extapi_controler/utils/EnginnerPageActionParam.java b/src/main/java/a8k/extapi_controler/utils/EnginnerPageActionParam.java deleted file mode 100644 index 7bff8ad..0000000 --- a/src/main/java/a8k/extapi_controler/utils/EnginnerPageActionParam.java +++ /dev/null @@ -1,11 +0,0 @@ -package a8k.extapi_controler.utils; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.PARAMETER}) -public @interface EnginnerPageActionParam { - String name(); -} diff --git a/src/main/java/a8k/extapi_controler/utils/EnginnerParamFile.java b/src/main/java/a8k/extapi_controler/utils/EnginnerParamFile.java deleted file mode 100644 index df6734d..0000000 --- a/src/main/java/a8k/extapi_controler/utils/EnginnerParamFile.java +++ /dev/null @@ -1,12 +0,0 @@ -package a8k.extapi_controler.utils; -import java.util.Base64; -public class EnginnerParamFile { - private byte[] bytes; - - public static EnginnerParamFile fromBase64( String base64 ) { - Base64.Decoder decoder = Base64.getDecoder(); - var file = new EnginnerParamFile(); - file.bytes = decoder.decode( base64 ); - return file; - } -} diff --git a/src/main/java/a8k/extapi_controler/utils/ExtApiFn.java b/src/main/java/a8k/extapi_controler/utils/ExtApiFn.java deleted file mode 100644 index 9ba3e12..0000000 --- a/src/main/java/a8k/extapi_controler/utils/ExtApiFn.java +++ /dev/null @@ -1,16 +0,0 @@ -package a8k.extapi_controler.utils; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) -public @interface ExtApiFn { - String name() default ""; - String group() default ""; - int groupOrder() default 0; - int order() default 0; - boolean newline() default false; - String beforeExecute() default ""; -} diff --git a/src/main/java/a8k/extapi_controler/utils/ExtApiParam.java b/src/main/java/a8k/extapi_controler/utils/ExtApiParam.java deleted file mode 100644 index bf50fe8..0000000 --- a/src/main/java/a8k/extapi_controler/utils/ExtApiParam.java +++ /dev/null @@ -1,12 +0,0 @@ -package a8k.extapi_controler.utils; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) -public @interface ExtApiParam { - String name(); - String group() default ""; - int order() default 0; -} diff --git a/src/main/java/a8k/extapi_controler/utils/ExtApiParamsTab.java b/src/main/java/a8k/extapi_controler/utils/ExtApiParamsTab.java deleted file mode 100644 index ef7a58d..0000000 --- a/src/main/java/a8k/extapi_controler/utils/ExtApiParamsTab.java +++ /dev/null @@ -1,10 +0,0 @@ -package a8k.extapi_controler.utils; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -public @interface ExtApiParamsTab { - Class service(); -} diff --git a/src/main/java/a8k/extapi_controler/utils/ExtApiStatu.java b/src/main/java/a8k/extapi_controler/utils/ExtApiStatu.java deleted file mode 100644 index 22d7de1..0000000 --- a/src/main/java/a8k/extapi_controler/utils/ExtApiStatu.java +++ /dev/null @@ -1,13 +0,0 @@ -package a8k.extapi_controler.utils; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) -public @interface ExtApiStatu { - String name(); - String group() default ""; - int order() default 0; -} diff --git a/src/main/java/a8k/extapi_controler/utils/ExtApiTab.java b/src/main/java/a8k/extapi_controler/utils/ExtApiTab.java deleted file mode 100644 index 801e8a7..0000000 --- a/src/main/java/a8k/extapi_controler/utils/ExtApiTab.java +++ /dev/null @@ -1,12 +0,0 @@ -package a8k.extapi_controler.utils; -import a8k.extapi_controler.pagecontrol.ExtApiTabConfig; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -public @interface ExtApiTab { - ExtApiTabConfig cfg(); -} diff --git a/src/main/java/a8k/service/app/background/BackgroudProcessCtrlService.java b/src/main/java/a8k/service/app/background/BackgroudProcessCtrlService.java index ff360c1..26f70c4 100644 --- a/src/main/java/a8k/service/app/background/BackgroudProcessCtrlService.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeFeedingCtrlService.java b/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeFeedingCtrlService.java index b88c65b..9436faf 100644 --- a/src/main/java/a8k/service/app/devicectrl/ctrlservice/TubeFeedingCtrlService.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicectrl/driver/PipetteCtrlDriver.java b/src/main/java/a8k/service/app/devicectrl/driver/PipetteCtrlDriver.java index 611e2aa..26d01b9 100644 --- a/src/main/java/a8k/service/app/devicectrl/driver/PipetteCtrlDriver.java +++ b/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); diff --git a/src/main/java/a8k/service/app/devicectrl/driver/StepMotorCtrlDriver.java b/src/main/java/a8k/service/app/devicectrl/driver/StepMotorCtrlDriver.java index 607dfc4..7923af0 100644 --- a/src/main/java/a8k/service/app/devicectrl/driver/StepMotorCtrlDriver.java +++ b/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); diff --git a/src/main/java/a8k/service/app/devicectrl/exdriver/HbotBaseMoveExDriver.java b/src/main/java/a8k/service/app/devicectrl/exdriver/HbotBaseMoveExDriver.java index 4413cbf..e0d2a78 100644 --- a/src/main/java/a8k/service/app/devicectrl/exdriver/HbotBaseMoveExDriver.java +++ b/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); diff --git a/src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java b/src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java index 890a7a7..b5c6798 100644 --- a/src/main/java/a8k/service/app/devicectrl/init/MiniServoReferencePointIniter.java +++ b/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 diff --git a/src/main/java/a8k/service/app/devicectrl/param/LowerDeviceParamMgr.java b/src/main/java/a8k/service/app/devicectrl/param/LowerDeviceParamMgr.java index f56b43c..88b2c51 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/LowerDeviceParamMgr.java +++ b/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 diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/Hbot2DCodeScanPosCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/Hbot2DCodeScanPosCalibration.java index 3b28967..ab85973 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/Hbot2DCodeScanPosCalibration.java +++ b/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); diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLargeBottleBSPosCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLargeBottleBSPosCalibration.java index 83eb65e..c0be37c 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLargeBottleBSPosCalibration.java +++ b/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 { diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLittleBSPosCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLittleBSPosCalibration.java index 09f8ad9..0667638 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotLittleBSPosCalibration.java +++ b/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); diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotProbeSubstancePosCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotProbeSubstancePosCalibration.java index 00ee908..1efb48b 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotProbeSubstancePosCalibration.java +++ b/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); diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotSamplePosCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotSamplePosCalibration.java index cbd5447..e30b2d3 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotSamplePosCalibration.java +++ b/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 { diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotTipPosCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotTipPosCalibration.java index e62d80a..f41b391 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/HbotTipPosCalibration.java +++ b/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); diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/OptModuleParamCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/OptModuleParamCalibration.java index 351d3ce..0a88f6f 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/OptModuleParamCalibration.java +++ b/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 { diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLDParamCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLDParamCalibration.java index d6f7159..d592ef6 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLDParamCalibration.java +++ b/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 { diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLFParamCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLFParamCalibration.java index 07c13eb..7a0cc53 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/PipetteGunLLFParamCalibration.java +++ b/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 { diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/ReactionPlatesTransmitControlerCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/ReactionPlatesTransmitControlerCalibration.java index 0a55c26..af8cc63 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/ReactionPlatesTransmitControlerCalibration.java +++ b/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; diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/TemperatureCtrlParamCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/TemperatureCtrlParamCalibration.java index 7472b6d..cd02d15 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/TemperatureCtrlParamCalibration.java +++ b/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); diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/TubeFeedingModulePosCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/TubeFeedingModulePosCalibration.java index 0bfa2f7..8a516e6 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/TubeFeedingModulePosCalibration.java +++ b/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 { diff --git a/src/main/java/a8k/service/app/devicectrl/param/calibration/TubePreProcesPosCalibration.java b/src/main/java/a8k/service/app/devicectrl/param/calibration/TubePreProcesPosCalibration.java index 7a73c8b..824f978 100644 --- a/src/main/java/a8k/service/app/devicectrl/param/calibration/TubePreProcesPosCalibration.java +++ b/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 { diff --git a/src/main/java/a8k/service/bases/FrontEndEventRouter.java b/src/main/java/a8k/service/bases/FrontEndEventRouter.java index 947e152..aa4089d 100644 --- a/src/main/java/a8k/service/bases/FrontEndEventRouter.java +++ b/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; diff --git a/src/main/java/a8k/service/dao/LowerDeviceParameterStorgeDao.java b/src/main/java/a8k/service/dao/LowerDeviceParameterStorgeDao.java index ca6b71a..af1b520 100644 --- a/src/main/java/a8k/service/dao/LowerDeviceParameterStorgeDao.java +++ b/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; } diff --git a/src/main/java/a8k/service/test/A8kOptTest.java b/src/main/java/a8k/service/test/A8kOptTest.java index 0febdae..a6793f2 100644 --- a/src/main/java/a8k/service/test/A8kOptTest.java +++ b/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 { diff --git a/src/main/java/a8k/service/test/MainflowCtrlTestService.java b/src/main/java/a8k/service/test/MainflowCtrlTestService.java index 1d829d2..4f269f6 100644 --- a/src/main/java/a8k/service/test/MainflowCtrlTestService.java +++ b/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 { diff --git a/src/main/java/a8k/service/test/PipetteGunTest.java b/src/main/java/a8k/service/test/PipetteGunTest.java index a75a1bf..ff99fee 100644 --- a/src/main/java/a8k/service/test/PipetteGunTest.java +++ b/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 { diff --git a/src/main/java/a8k/service/test/PosMeasureUtils.java b/src/main/java/a8k/service/test/PosMeasureUtils.java index 5ca203c..f0ba175 100644 --- a/src/main/java/a8k/service/test/PosMeasureUtils.java +++ b/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 { diff --git a/src/main/java/a8k/service/test/VirtualDeviceSimulationTest.java b/src/main/java/a8k/service/test/VirtualDeviceSimulationTest.java index 13ed43d..4cf7529 100644 --- a/src/main/java/a8k/service/test/VirtualDeviceSimulationTest.java +++ b/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; diff --git a/src/main/java/a8k/service/verification/PipetteGunVerification.java b/src/main/java/a8k/service/verification/PipetteGunVerification.java new file mode 100644 index 0000000..db27230 --- /dev/null +++ b/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 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 "分配成功"; + } +} diff --git a/src/main/java/a8k/type/appret/AppRetV1.java b/src/main/java/a8k/type/appret/AppRetV1.java index de6a889..111ea0c 100644 --- a/src/main/java/a8k/type/appret/AppRetV1.java +++ b/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; } diff --git a/src/main/java/a8k/utils/ZCSVUtils.java b/src/main/java/a8k/utils/ZCSVUtils.java index 9b75c07..626d431 100644 --- a/src/main/java/a8k/utils/ZCSVUtils.java +++ b/src/main/java/a8k/utils/ZCSVUtils.java @@ -89,7 +89,6 @@ public class ZCSVUtils { log.info("{}", ZJsonHelper.objectToJson(projectBaseInfo)); } - } diff --git a/src/main/java/a8k/utils/ZJsonHelper.java b/src/main/java/a8k/utils/ZJsonHelper.java index 8115d6a..00e407c 100644 --- a/src/main/java/a8k/utils/ZJsonHelper.java +++ b/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); }