diff --git a/src/main/java/a8k/controller/SamplesPreProcessModuleCtrlController.java b/src/main/java/a8k/controller/SamplesPreProcessModuleCtrlController.java index b307087..79a9c36 100644 --- a/src/main/java/a8k/controller/SamplesPreProcessModuleCtrlController.java +++ b/src/main/java/a8k/controller/SamplesPreProcessModuleCtrlController.java @@ -1,4 +1,5 @@ package a8k.controller; +import a8k.service.db.dao.SamplesPreProcessModuleCtrlParamsService; import a8k.service.hardware.SamplesPreProcessModuleCtrlService; import com.iflytop.uf.controller.UfApiControllerBase; import com.iflytop.uf.controller.UfApiResponse; @@ -14,6 +15,8 @@ import java.util.Map; public class SamplesPreProcessModuleCtrlController extends UfApiControllerBase { @Resource private SamplesPreProcessModuleCtrlService samplesPreProcessModuleCtrlService; + @Resource + private SamplesPreProcessModuleCtrlParamsService samplesPreProcessModuleCtrlParamsService; @PostMapping("/api/sample-pre-process-module-ctrl/execute-service-method") @ResponseBody @@ -24,4 +27,24 @@ public class SamplesPreProcessModuleCtrlController extends UfApiControllerBase { Object result = UfClassHelper.invokeMethod(service, methodName, methodArgs); return this.success(result); } + + @PostMapping("/api/sample-pre-process-module-ctrl/list-options") + @ResponseBody + public UfApiResponse listAllOptions() throws NoSuchMethodException { + var list = this.samplesPreProcessModuleCtrlParamsService.listOptions(); + return this.success(list); + } + + @PostMapping("/api/sample-pre-process-module-ctrl/update-options") + @ResponseBody + public UfApiResponse updateOptions(@RequestBody Map params ) throws Exception { + var options = (List>)params.get("options"); + for (Map item : options) { + var name = (String)item.get("name"); + var option = this.samplesPreProcessModuleCtrlParamsService.getOption(name); + option.setValue(item.get("value")); + option.save(); + } + return this.success(); + } } diff --git a/src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java b/src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java index c21db2c..141edc7 100644 --- a/src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java +++ b/src/main/java/a8k/service/db/dao/SamplesPreProcessModuleCtrlParamsService.java @@ -1,7 +1,12 @@ package a8k.service.db.dao; +import a8k.service.db.entity.HardwareServiceSetting; +import com.iflytop.uf.UfActiveRecord; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Map; + /** * 样本预处理相关参数访问 */ @@ -17,13 +22,13 @@ public class SamplesPreProcessModuleCtrlParamsService { // 回零超时时间 public int getMoveToZeroOvertime() { // 索引为 "SamplesPreProcessModuleCtrlService" "MoveToZeroOvertime" - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "MoveToZeroOvertime", 0); } // 执行动作的超时时间,该超时时间适用于当前模块在当前产品中所有动作的最大时间。 public int getActionOvertime() { // 索引为 "SamplesPreProcessModuleCtrlService" "MoveToZeroOvertime" - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "ActionOvertime", 0); } /** @@ -32,27 +37,27 @@ public class SamplesPreProcessModuleCtrlParamsService { // 高全血试管取帽位置 public int getZMotor_HighBloodTakeCapHeight() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_HighBloodTakeCapHeight", 0); } // 矮全血试管取帽位置 public int getZMotor_ShortBloodTakeCapHeight() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_ShortBloodTakeCapHeight", 0); } // 高试管帽子判断位置 public int getZMotor_HighBloodCapJudgeHeight() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_HighBloodCapJudgeHeight", 0); } // 矮全血试管帽子判断位置 public int getZMotor_ShortBloodCapJudgeHeight() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_ShortBloodCapJudgeHeight", 0); } // 摇匀位放置高度 public int getZMotor_placeShakeHeight() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "ZMotor_placeShakeHeight", 0); } /* @@ -61,17 +66,17 @@ public class SamplesPreProcessModuleCtrlParamsService { // 水平移动电机,待机位置 public int getHorizontalMotor_standbyPos() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_standbyPos", 0); } // 水平移动电机,取帽位置 public int getHorizontalMotor_takeCapPos() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_takeCapPos", 0); } // 水平移动电机,放帽位置 public int getHorizontalMotor_takePushCapPos() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "HorizontalMotor_takePushCapPos", 0); } /* @@ -80,22 +85,22 @@ public class SamplesPreProcessModuleCtrlParamsService { // 抓手舵机,待机位置 public int getGripperServo_standbyPos() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_standbyPos", 0); } // 抓手舵机,取帽扭矩 public int getGripperServo_takeCapTorque() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_takeCapTorque", 0); } // 抓手舵机,取试管位置 public int getGripperServo_takeTubePos() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_takeTubePos", 0); } // 判断是否有帽子的位置阈值 public int getGripperServo_hatDeterminesPosThres() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "GripperServo_hatDeterminesPosThres", 0); } /* @@ -104,12 +109,12 @@ public class SamplesPreProcessModuleCtrlParamsService { // 摇匀电机待机位置 public int getShakeMotor_standbyPos() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "ShakeMotor_standbyPos", 0); } // 摇匀电机摇匀角度 public int getShakeMotor_shakeDegree() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "ShakeMotor_shakeDegree", 0); } /* @@ -118,12 +123,12 @@ public class SamplesPreProcessModuleCtrlParamsService { // 试管夹紧电机待机位置 public int getTubeClampMotor_standbyPos() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "TubeClampMotor_standbyPos", 0); } // 试管夹紧电机夹紧位置 public int getTubeClampMotor_ClampPos() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "TubeClampMotor_ClampPos", 0); } /* @@ -131,6 +136,14 @@ public class SamplesPreProcessModuleCtrlParamsService { */ // 气溶胶风扇风力大小(0->100) public int getAerosolFanLevel() { - return 0; + return HardwareServiceSetting.getInteger(this.serviceName, "AerosolFanLevel", 100); + } + + public List listOptions() { + return UfActiveRecord.find(HardwareServiceSetting.class, Map.of("serviceName", this.serviceName)); + } + + public HardwareServiceSetting getOption(String optionName) { + return HardwareServiceSetting.getOption(this.serviceName, optionName); } } diff --git a/src/main/java/a8k/service/db/entity/HardwareServiceSetting.java b/src/main/java/a8k/service/db/entity/HardwareServiceSetting.java index b62df30..f589066 100644 --- a/src/main/java/a8k/service/db/entity/HardwareServiceSetting.java +++ b/src/main/java/a8k/service/db/entity/HardwareServiceSetting.java @@ -1,8 +1,12 @@ package a8k.service.db.entity; +import com.iflytop.uf.UfActiveRecord; import com.iflytop.uf.UfActiveRecordField; -public class HardwareServiceSetting { +import java.util.HashMap; +import java.util.Map; + +public class HardwareServiceSetting extends UfActiveRecord { @UfActiveRecordField public String key; @UfActiveRecordField @@ -12,7 +16,45 @@ public class HardwareServiceSetting { @UfActiveRecordField public String val; + public void setValue( Object value ) throws Exception { + if ( value instanceof String ) { + this.val = (String) value; + } else if ( value instanceof Integer ) { + this.val = String.valueOf((Integer)value); + } else { + throw new Exception("不支持的配置数据类型"); + } + } + public static String getTableName() { return "HardwareServiceSetting" + "Table"; } + + public static HardwareServiceSetting getOption( String service, String key ) { + var option = UfActiveRecord.findOne(HardwareServiceSetting.class, Map.of( + "serviceName", service, + "key", key + )); + if ( null == option ) { + option = new HardwareServiceSetting(); + option.serviceName = service; + option.key = key; + option.val = null; + } + return option; + } + + public static Integer getInteger( String service, String key, Integer defaultValue ) { + var option = HardwareServiceSetting.getOption(service, key); + if ( null == option.val ) { + return defaultValue; + } + return Integer.parseInt(option.val); + } + + public static void setInteger( String service, String key, Integer value ) { + var option = HardwareServiceSetting.getOption(service, key); + option.val = String.valueOf(value); + option.save(); + } } diff --git a/src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java b/src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java index 0a2619f..5768e73 100644 --- a/src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java +++ b/src/main/java/a8k/service/hardware/SamplesPreProcessModuleCtrlService.java @@ -76,7 +76,7 @@ public class SamplesPreProcessModuleCtrlService { * 使能模组 * @param enable 是否使能模组 */ - public void enableModule(boolean enable) throws HardwareException { + public void enableModule(Boolean enable) throws HardwareException { this.a8kCanBusService.callcmd( ModuleId.ShakeModShakeM, CmdId.kstep_motor_enable, diff --git a/src/main/resources/db/migration/V100_0__create_table_A8kStateDBTable.sql b/src/main/resources/db/migration/V100_0__create_table_A8kStateDBTable.sql new file mode 100644 index 0000000..28f7c22 --- /dev/null +++ b/src/main/resources/db/migration/V100_0__create_table_A8kStateDBTable.sql @@ -0,0 +1,4 @@ +CREATE TABLE "A8kStateDBTable" ( + "stateJson" TEXT, + "id" text +); \ No newline at end of file