From 6e059659c5f4412dbda4c9602f73ee3940efc8ac Mon Sep 17 00:00:00 2001 From: sige Date: Tue, 23 Jul 2024 15:44:19 +0800 Subject: [PATCH] 1 --- .../java/a8k/hardware/controler/Controler.java | 71 ++++++++++++++++++++++ .../SamplesPreProcessModuleCtrlParamsService.java | 69 ++++++++------------- src/main/java/a8k/utils/HardwareServiceParam.java | 11 ++++ src/main/java/a8k/utils/HardwareServiceParams.java | 10 +++ 4 files changed, 117 insertions(+), 44 deletions(-) create mode 100644 src/main/java/a8k/utils/HardwareServiceParam.java create mode 100644 src/main/java/a8k/utils/HardwareServiceParams.java diff --git a/src/main/java/a8k/hardware/controler/Controler.java b/src/main/java/a8k/hardware/controler/Controler.java index 5fd0d01..5789c4d 100644 --- a/src/main/java/a8k/hardware/controler/Controler.java +++ b/src/main/java/a8k/hardware/controler/Controler.java @@ -1,10 +1,16 @@ package a8k.hardware.controler; import a8k.appbean.ecode.AppRet; +import a8k.service.db.entity.HardwareServiceSetting; import a8k.utils.HardwareService; +import a8k.utils.HardwareServiceParam; +import a8k.utils.HardwareServiceParams; +import com.iflytop.uf.UfApplication; import com.iflytop.uf.util.UfClassHelper; import org.springframework.stereotype.Controller; 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.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -29,4 +35,69 @@ public class Controler { } return AppRet.success(services); } + + @PostMapping("/api/service-config/service-params-list") + @ResponseBody + public AppRet serviceParams( @RequestBody Map params ) + throws InvocationTargetException, IllegalAccessException { + String serviceKey = (String)params.get("serviceKey"); + Class paramClass = null; + var classes = UfClassHelper.getAllClassesInPackage("a8k"); + for (var clazz : classes) { + var hardwareServiceParamsAnnotation = clazz.getAnnotation(HardwareServiceParams.class); + if (null == hardwareServiceParamsAnnotation) { + continue ; + } + var serviceClass = hardwareServiceParamsAnnotation.service(); + if (!serviceClass.getSimpleName().equals(serviceKey)) { + continue ; + } + paramClass = clazz; + break; + } + + List> list = new ArrayList<>(); + if ( null == paramClass ) { + return AppRet.success(list); + } + + var paramService = UfApplication.getContext().getBean(paramClass); + var methods = paramClass.getMethods(); + for ( var method : methods ) { + var methodName = method.getName(); + if ( !methodName.startsWith("get") ) { + continue; + } + var paramAnnotation = method.getAnnotation(HardwareServiceParam.class); + if (null == paramAnnotation) { + continue ; + } + + Map param = new HashMap<>(); + param.put("key", methodName.substring(3)); + param.put("type", method.getReturnType().getSimpleName()); + param.put("group", paramAnnotation.group()); + param.put("name",paramAnnotation.name()); + param.put("value", method.invoke(paramService)); + list.add(param); + } + return AppRet.success(list); + } + + @PostMapping("/api/service-config/service-params-update") + @ResponseBody + public AppRet serviceParamsUpdate( @RequestBody Map params ) throws Exception { + String serviceKey = (String)params.get("serviceKey"); + Map newParams = (Map)params.get("params"); + for ( var param : newParams.entrySet() ) { + var name = param.getKey(); + var value = param.getValue(); + var options = HardwareServiceSetting.getOption(serviceKey, name); + options.setValue(value); + options.save(); + } + return AppRet.success(); + } + + } diff --git a/src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java b/src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java index 5be44bb..1f64ec0 100644 --- a/src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java +++ b/src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java @@ -1,16 +1,18 @@ package a8k.service.db.dao; import a8k.service.db.entity.HardwareServiceSetting; +import a8k.service.hardware.SamplesPreProcessModuleCtrlService; +import a8k.utils.HardwareServiceParam; +import a8k.utils.HardwareServiceParams; import com.iflytop.uf.UfActiveRecord; import org.springframework.stereotype.Component; - import java.util.List; import java.util.Map; - /** * 样本预处理相关参数访问 */ @Component +@HardwareServiceParams(service=SamplesPreProcessModuleCtrlService.class) public class SamplesPreProcessModuleCtrlParamsService { /** @@ -19,130 +21,109 @@ public class SamplesPreProcessModuleCtrlParamsService { */ public final String serviceName = "SamplesPreProcessModuleCtrlService"; - // 回零超时时间 + @HardwareServiceParam(name="回零超时时间") public int getMoveToZeroOvertime() { // 索引为 "SamplesPreProcessModuleCtrlService" "MoveToZeroOvertime" return HardwareServiceSetting.getInteger(this.serviceName, "MoveToZeroOvertime", 0); } - // 执行动作的超时时间,该超时时间适用于当前模块在当前产品中所有动作的最大时间。 + @HardwareServiceParam(name="执行动作的超时时间") public int getActionOvertime() { // 索引为 "SamplesPreProcessModuleCtrlService" "MoveToZeroOvertime" return HardwareServiceSetting.getInteger(this.serviceName, "ActionOvertime", 0); } - /** - * 升降电机相关位置 - */ - + @HardwareServiceParam(name="5ML全血试管取试管位置", group="升降电机") public int getZMotor_HighBloodTakeTubeHeight() { return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_HighBloodTakeTubeHeight", 0); } + @HardwareServiceParam(name="3ML全血试管取试管位置", group="升降电机") public int getZMotor_ShortBloodTakeTubeHeight() { return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_ShortBloodTakeTubeHeight", 0); } - // 高全血试管取帽位置 + @HardwareServiceParam(name="5ML全血试管取帽位置", group="升降电机") public int getZMotor_HighBloodTakeCapHeight() { return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_HighBloodTakeCapHeight", 0); } - // 矮全血试管取帽位置 + @HardwareServiceParam(name="3ML全血试管取帽位置", group="升降电机") public int getZMotor_ShortBloodTakeCapHeight() { return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_ShortBloodTakeCapHeight", 0); } - // 高试管帽子判断位置 + @HardwareServiceParam(name="5ML全血试管帽子判断位置", group="升降电机") public int getZMotor_HighBloodCapJudgeHeight() { return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_HighBloodCapJudgeHeight", 0); } - // 矮全血试管帽子判断位置 + @HardwareServiceParam(name="3ML全血试管帽子判断位置", group="升降电机") public int getZMotor_ShortBloodCapJudgeHeight() { return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_ShortBloodCapJudgeHeight", 0); } - // 摇匀位放置高度 + @HardwareServiceParam(name="摇匀位放置高度", group="升降电机") public int getZMotor_placeShakeHeight() { return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_placeShakeHeight", 0); } - /* - * 平移电机相关参数 - */ - - // 水平移动电机,待机位置 + @HardwareServiceParam(name="待机位置", group="水平移动电机") public int getHorizontalMotor_standbyPos() { return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_standbyPos", 0); } - // 水平移动电机,取帽位置 + @HardwareServiceParam(name="取帽位置", group="水平移动电机") public int getHorizontalMotor_takeCapPos() { return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_takeCapPos", 0); } - // 水平移动电机,放帽位置 + @HardwareServiceParam(name="放帽位置", group="水平移动电机") public int getHorizontalMotor_takePushCapPos() { return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_takePushCapPos", 0); } - /* - * 抓手 - */ - - // 抓手舵机,待机位置 + @HardwareServiceParam(name="待机位置", group="抓手舵机") public int getGripperServo_standbyPos() { return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_standbyPos", 0); } - // 抓手舵机,取帽扭矩 + @HardwareServiceParam(name="取帽扭矩", group="抓手舵机") public int getGripperServo_takeCapTorque() { return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_takeCapTorque", 0); } - // 抓手舵机,取试管位置 + @HardwareServiceParam(name="取试管位置", group="抓手舵机") public int getGripperServo_takeTubePos() { return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_takeTubePos", 0); } - // 判断是否有帽子的位置阈值 + @HardwareServiceParam(name="判断是否有帽子的位置阈值", group="抓手舵机") public int getGripperServo_hatDeterminesPosThres() { return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_hatDeterminesPosThres", 0); } - /* - * 摇匀电机 - */ - - // 摇匀电机待机位置 + @HardwareServiceParam(name="待机位置", group="摇匀电机") public int getShakeMotor_standbyPos() { return HardwareServiceSetting.getInteger(this.serviceName, "ShakeMotor_standbyPos", 0); } - // 摇匀电机摇匀角度 + @HardwareServiceParam(name="摇匀角度", group="摇匀电机") public int getShakeMotor_shakeDegree() { return HardwareServiceSetting.getInteger(this.serviceName, "ShakeMotor_shakeDegree", 0); } - /* - * 夹紧电机 - */ - - // 试管夹紧电机待机位置 + @HardwareServiceParam(name="待机位置", group="试管夹紧电机") public int getTubeClampMotor_standbyPos() { return HardwareServiceSetting.getInteger(this.serviceName, "TubeClampMotor_standbyPos", 0); } - // 试管夹紧电机夹紧位置 + @HardwareServiceParam(name="夹紧位置", group="试管夹紧电机") public int getTubeClampMotor_ClampPos() { return HardwareServiceSetting.getInteger(this.serviceName, "TubeClampMotor_ClampPos", 0); } - /* - * 气溶胶风扇控制参数 - */ - // 气溶胶风扇风力大小(0->100) + @HardwareServiceParam(name="气溶胶风扇风力大小") public int getAerosolFanLevel() { return HardwareServiceSetting.getInteger(this.serviceName, "AerosolFanLevel", 100); } diff --git a/src/main/java/a8k/utils/HardwareServiceParam.java b/src/main/java/a8k/utils/HardwareServiceParam.java new file mode 100644 index 0000000..3183f42 --- /dev/null +++ b/src/main/java/a8k/utils/HardwareServiceParam.java @@ -0,0 +1,11 @@ +package a8k.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 HardwareServiceParam { + String name(); + String group() default ""; +} diff --git a/src/main/java/a8k/utils/HardwareServiceParams.java b/src/main/java/a8k/utils/HardwareServiceParams.java new file mode 100644 index 0000000..dcc1eaa --- /dev/null +++ b/src/main/java/a8k/utils/HardwareServiceParams.java @@ -0,0 +1,10 @@ +package a8k.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 HardwareServiceParams { + Class service(); +}