From 9a93d7e97428f1d9c90e7be341f0ee5da5a6cea6 Mon Sep 17 00:00:00 2001 From: sige Date: Sun, 18 Feb 2024 15:19:09 +0800 Subject: [PATCH] ~~ --- .../my/graphiteDigesterBg/diframe/DiDevice.java | 5 ++ .../diframe/DiDeviceRuntimeVariableManager.java | 65 ++++++++++++---------- .../diframe/DiOptionManager.java | 22 ++++++++ .../diframe/api/DiApiDevice.java | 2 +- .../diframe/model/DiMdbOption.java | 15 +++++ .../diframe/model/DiMdbRuntimeVariable.java | 18 ++++++ .../my/graphiteDigesterBg/move/MoveLiquidAdd.java | 4 +- .../graphiteDigesterBg/resource/ResAcidBucket.java | 22 ++++++-- .../resource/ResAcidManager.java | 28 +++++++--- .../my/graphiteDigesterBg/task/TaskStartReset.java | 10 ++-- src/web/src/pages/main/contents/AcidManagement.vue | 2 +- 11 files changed, 143 insertions(+), 50 deletions(-) create mode 100644 src/src/main/java/com/my/graphiteDigesterBg/diframe/DiOptionManager.java create mode 100644 src/src/main/java/com/my/graphiteDigesterBg/diframe/model/DiMdbOption.java create mode 100644 src/src/main/java/com/my/graphiteDigesterBg/diframe/model/DiMdbRuntimeVariable.java diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDevice.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDevice.java index c05a2d0..2392a7f 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDevice.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDevice.java @@ -257,4 +257,9 @@ public class DiDevice { request.parameter = ByteBuffer.wrap(hex.getBytes()); return request; } + + // get option + public DiOptionManager getOption() { + return new DiOptionManager(); + } } \ No newline at end of file diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceRuntimeVariableManager.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceRuntimeVariableManager.java index 653fc55..dadcd9f 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceRuntimeVariableManager.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiDeviceRuntimeVariableManager.java @@ -1,50 +1,55 @@ package com.my.graphiteDigesterBg.diframe; +import com.my.graphiteDigesterBg.diframe.model.DiMdbRuntimeVariable; import java.util.Map; public class DiDeviceRuntimeVariableManager { - // variables - private final Map variables; + // get location value + public DiMdbRuntimeVariable getVariable(String key, Object ... args ) { + key = this.buildKey(key, args); + return DiActiveRecord.findOne(DiMdbRuntimeVariable.class, Map.of("key", key)); + } - // constructor - public DiDeviceRuntimeVariableManager() { - this.variables = new java.util.HashMap<>(); + // build key + private String buildKey(String key, Object ... args) { + StringBuilder keyBuilder = new StringBuilder(key); + for (Object arg : args) { + keyBuilder.append(".").append(arg.toString()); + } + return keyBuilder.toString(); } // get string - public String getString(String name) { - return (String)this.variables.get(name); + public String getString(String name, Object ... args ) { + var variable = this.getVariable(name, args); + return null == variable ? null : variable.value; } // get integer - public Integer getInteger(String name) { - return (Integer)this.variables.get(name); - } - - // get object - public Object get(String name) { - return this.variables.get(name); - } - - // get by class - public T get(String name, Class clazz) { - return (T)this.variables.get(name); + public Integer getInteger(String name, Object ... args ) { + var variable = this.getVariable(name, args); + return null == variable ? null : Integer.parseInt(variable.value); } // set string - public void setString(String name, String value) { - this.variables.put(name, value); - } - - public void setInteger(String name, Integer value) { - this.variables.put(name, value); + public void setString(String value, String name, Object ... args ) { + var variable = this.getVariable(name, args); + if ( null == variable ) { + variable = new DiMdbRuntimeVariable(); + variable.key = this.buildKey(name, args); + } + variable.value = value; + variable.save(); } - // set object - public void set(String name, Object value) { - this.variables.put(name, value); + // set integer + public void setInteger(Integer value, String name, Object ... args ) { + this.setString(value.toString(), name, args); } // remove - public void remove(String name) { - this.variables.remove(name); + public void remove(String name, Object ... args ) { + var variable = this.getVariable(name); + if ( null != variable ) { + variable.delete(); + } } } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiOptionManager.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiOptionManager.java new file mode 100644 index 0000000..c8530fc --- /dev/null +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/DiOptionManager.java @@ -0,0 +1,22 @@ +package com.my.graphiteDigesterBg.diframe; +import com.my.graphiteDigesterBg.diframe.model.DiMdbOption; +import java.util.Map; +public class DiOptionManager { + // get integer + public Integer getInteger(String key, Object ... args ) { + var option = this.getOption(key, args); + return Integer.parseInt(option.value); + } + + // get location value + public DiMdbOption getOption(String key, Object ... args ) { + StringBuilder keyBuilder = new StringBuilder(key); + for (Object arg : args) { + keyBuilder.append(".").append(arg.toString()); + } + key = keyBuilder.toString(); + var option = DiActiveRecord.findOne(DiMdbOption.class, Map.of("key", key)); + assert option != null; + return option; + } +} diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/api/DiApiDevice.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/api/DiApiDevice.java index c36dc3f..e94b775 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/diframe/api/DiApiDevice.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/api/DiApiDevice.java @@ -45,7 +45,7 @@ public class DiApiDevice extends DiApiControllerBase { @PostMapping("/api/device/runtime-variable/get") public DiApiResponse getRuntimeVariable(@RequestBody Map params ) { String name = (String)params.get("name"); - Object value = this.device.getRuntimeVariables().get(name); + Object value = this.device.getRuntimeVariables().getString(name); Map result = new HashMap<>(); result.put("value", value); return this.success(result); diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/model/DiMdbOption.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/model/DiMdbOption.java new file mode 100644 index 0000000..82aa96e --- /dev/null +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/model/DiMdbOption.java @@ -0,0 +1,15 @@ +package com.my.graphiteDigesterBg.diframe.model; +import com.my.graphiteDigesterBg.diframe.DiActiveRecord; +public class DiMdbOption extends DiActiveRecord { + // id + public Integer id; + // key + public String key; + // value + public String value; + + // get table name + public static String getTableName() { + return "app_options"; + } +} diff --git a/src/src/main/java/com/my/graphiteDigesterBg/diframe/model/DiMdbRuntimeVariable.java b/src/src/main/java/com/my/graphiteDigesterBg/diframe/model/DiMdbRuntimeVariable.java new file mode 100644 index 0000000..bd06321 --- /dev/null +++ b/src/src/main/java/com/my/graphiteDigesterBg/diframe/model/DiMdbRuntimeVariable.java @@ -0,0 +1,18 @@ +package com.my.graphiteDigesterBg.diframe.model; +import com.my.graphiteDigesterBg.diframe.ActiveRecordField; +import com.my.graphiteDigesterBg.diframe.DiActiveRecord; +public class DiMdbRuntimeVariable extends DiActiveRecord { + @ActiveRecordField + public Integer id; + + @ActiveRecordField + public String key; + + @ActiveRecordField + public String value; + + // get table name + public static String getTableName() { + return "app_runtime_variables"; + } +} diff --git a/src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java b/src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java index 4d4240e..f92b991 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/move/MoveLiquidAdd.java @@ -29,14 +29,14 @@ public class MoveLiquidAdd extends DiTaskMoveBase { liquidPlateMotor.moveTo("LiquidPlateSlotPumpOutGroup", i); groupOutPump.pump(this.liquidVolume); groupInPump.pump(this.liquidVolume); - bucket.volume -= this.liquidVolume * 2; + bucket.consume(this.liquidVolume * 2); // 内圈试管加液 liquidMotor.moveTo("LiquidArmPumpGroupIn"); liquidPlateMotor.moveTo("LiquidPlateSlotPumpInGroup", i); groupInPump.pump(this.liquidVolume); groupOutPump.pump(this.liquidVolume); - bucket.volume -= this.liquidVolume * 2; + bucket.consume(this.liquidVolume * 2); } liquidMotor.moveTo("LiquidArmStandby"); diff --git a/src/src/main/java/com/my/graphiteDigesterBg/resource/ResAcidBucket.java b/src/src/main/java/com/my/graphiteDigesterBg/resource/ResAcidBucket.java index 93e6d1e..8cef057 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/resource/ResAcidBucket.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/resource/ResAcidBucket.java @@ -4,13 +4,27 @@ public class ResAcidBucket { public Integer volume; public Integer maxVolume; public String acidType; - private ResAcidManager manager; + private final ResAcidManager manager; // constructor public ResAcidBucket( ResAcidManager manager, Integer index ) { this.index = index; - this.volume = 5000; - this.maxVolume = 5000; - this.acidType = "sulfuric"; + this.volume = 0; + this.maxVolume = 0; + this.acidType = ""; + this.manager = manager; + } + + // get volume + public void consume(Integer volume) { + this.volume -= volume; + this.manager.getDevice().getRuntimeVariables().setInteger(this.volume, "AcidSlotVolume", this.index); + } + + // update + public void update() { + var variables = this.manager.getDevice().getRuntimeVariables(); + variables.setString(this.acidType, "AcidSlotType", this.index); + variables.setInteger(this.volume, "AcidSlotVolume", this.index); } } diff --git a/src/src/main/java/com/my/graphiteDigesterBg/resource/ResAcidManager.java b/src/src/main/java/com/my/graphiteDigesterBg/resource/ResAcidManager.java index 86d6491..6432fd0 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/resource/ResAcidManager.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/resource/ResAcidManager.java @@ -12,14 +12,24 @@ public class ResAcidManager extends DiResourceManagerBase { // constructor public ResAcidManager() { this.buckets = new ArrayList<>(); + } + + @Override + public void setup() { + var option = this.getDevice().getOption(); + var runtimeVariable = this.getDevice().getRuntimeVariables(); for (int i = 0; i < 8; i++) { ResAcidBucket bucket = new ResAcidBucket(this, i); - - // @TODO : remove this - bucket.acidType = "sulfuric"; - bucket.volume = 5000; - bucket.maxVolume = 5000; - + bucket.acidType = runtimeVariable.getString("AcidSlotType", i); + if ( null == bucket.acidType ) { + bucket.acidType = ""; + } + bucket.volume = runtimeVariable.getInteger("AcidSlotVolume", i); + if ( null == bucket.volume ) { + bucket.volume = 0; + } + bucket.maxVolume = option.getInteger("AcidSlotVolume", i); + bucket.update(); this.buckets.add(bucket); } } @@ -36,8 +46,12 @@ public class ResAcidManager extends DiResourceManagerBase { String acidType = (String)params.get("acidType"); ResAcidBucket bucket = this.buckets.get(index); - bucket.volume = volume; bucket.acidType = acidType; + bucket.volume = volume; + if ( 0 == bucket.volume ) { + bucket.volume = bucket.maxVolume; + } + bucket.update(); } // get bucket by acid type diff --git a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java index 9a953b9..2cb1e41 100644 --- a/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java +++ b/src/src/main/java/com/my/graphiteDigesterBg/task/TaskStartReset.java @@ -10,8 +10,8 @@ public class TaskStartReset extends DiTaskBase { @Override public void run() { var runtimeVars = this.getDevice().getRuntimeVariables(); - runtimeVars.set("IsDeviceReady", "NO"); - runtimeVars.set("IsTaskStartResetExecuting", "YES"); + runtimeVars.setString("IsDeviceReady", "NO"); + runtimeVars.setString("IsTaskStartResetExecuting", "YES"); this.setProgressMessage("设备初始化..."); // this.setProgressMessage("设备初始化 : 关闭设备门"); @@ -75,14 +75,14 @@ public class TaskStartReset extends DiTaskBase { // } this.setProgressMessage("设备初始化 : 完成"); - runtimeVars.set("IsDeviceReady", "YES"); - runtimeVars.set("IsTaskStartResetExecuting", "NO"); + runtimeVars.setString("IsDeviceReady", "YES"); + runtimeVars.setString("IsTaskStartResetExecuting", "NO"); this.setStatus(TaskStatus.FINISHED); } // set progress message private void setProgressMessage(String message) { var runtimeVars = this.getDevice().getRuntimeVariables(); - runtimeVars.set("TaskStartResetMessage", message); + runtimeVars.setString("TaskStartResetMessage", message); } } diff --git a/src/web/src/pages/main/contents/AcidManagement.vue b/src/web/src/pages/main/contents/AcidManagement.vue index cbf83c9..49e1e06 100644 --- a/src/web/src/pages/main/contents/AcidManagement.vue +++ b/src/web/src/pages/main/contents/AcidManagement.vue @@ -58,7 +58,7 @@ async function actionReload(bucket) { await client.resourceActionExecute('Acid', 'bucketUpdate', { index : bucket.index, acidType : bucket.acidType, - volume : 5000, + volume : 0, // 0 则是整桶 }); refresh(); }