diff --git a/app.db b/app.db index 2b34b99..d4b11bd 100644 Binary files a/app.db and b/app.db differ diff --git a/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java b/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java new file mode 100644 index 0000000..d7b0b6d --- /dev/null +++ b/src/main/java/com/iflytop/digester/DigesterApplicationRunner.java @@ -0,0 +1,18 @@ +package com.iflytop.digester; +import com.iflytop.digester.deviceinstance.Device; +import jakarta.annotation.Resource; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +@Order(2) +@Component +public class DigesterApplicationRunner implements ApplicationRunner { + @Resource + private Device device; + + @Override + public void run(ApplicationArguments args) throws Exception { + this.device.liquidAddition.setup(); + } +} diff --git a/src/main/java/com/iflytop/digester/controller/DigestionController.java b/src/main/java/com/iflytop/digester/controller/DigestionController.java new file mode 100644 index 0000000..c754a41 --- /dev/null +++ b/src/main/java/com/iflytop/digester/controller/DigestionController.java @@ -0,0 +1,19 @@ +package com.iflytop.digester.controller; +import com.iflytop.digester.model.MdbDigestionSolution; +import com.iflytop.digester.underframework.controller.UfApiControllerBase; +import com.iflytop.digester.underframework.controller.UfApiResponse; +import com.iflytop.digester.underframework.dao.record.UfActiveRecord; +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.util.Map; +@Controller +public class DigestionController extends UfApiControllerBase { + @ResponseBody + @PostMapping("/api/digestion/list") + public UfApiResponse list(@RequestBody Map params) { + var items = UfActiveRecord.find(MdbDigestionSolution.class); + return this.success(items); + } +} diff --git a/src/main/java/com/iflytop/digester/controller/LiquidController.java b/src/main/java/com/iflytop/digester/controller/LiquidController.java index 52a86de..783431f 100644 --- a/src/main/java/com/iflytop/digester/controller/LiquidController.java +++ b/src/main/java/com/iflytop/digester/controller/LiquidController.java @@ -5,6 +5,7 @@ import com.iflytop.digester.underframework.controller.UfApiResponse; import jakarta.annotation.Resource; 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.util.Map; @Controller @@ -18,4 +19,15 @@ public class LiquidController extends UfApiControllerBase { var liquids = this.device.liquidAddition.getLiquids(); return this.success(Map.of("liquids", liquids)); } + + @ResponseBody + @PostMapping("/api/liquid/bucket-update") + public UfApiResponse updateBucket(@RequestBody Map params) { + Integer bucketIndex = (Integer)params.get("index"); + String liquidType = (String)params.get("type"); + var bucket = this.device.liquidAddition.getLiquidByIndex(bucketIndex); + bucket.type = liquidType; + bucket.volume = bucket.totalVolume; + return this.success(); + } } diff --git a/src/main/java/com/iflytop/digester/controller/OperationLogController.java b/src/main/java/com/iflytop/digester/controller/OperationLogController.java new file mode 100644 index 0000000..d14f5b8 --- /dev/null +++ b/src/main/java/com/iflytop/digester/controller/OperationLogController.java @@ -0,0 +1,38 @@ +package com.iflytop.digester.controller; +import com.iflytop.digester.model.MdbOperationLog; +import com.iflytop.digester.underframework.controller.UfApiControllerBase; +import com.iflytop.digester.underframework.controller.UfApiResponse; +import com.iflytop.digester.underframework.dao.model.UfMdbUser; +import com.iflytop.digester.underframework.dao.record.UfActiveRecord; +import com.iflytop.digester.underframework.dao.record.UfActiveRecordCriteria; +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.util.ArrayList; +import java.util.Map; +@Controller +public class OperationLogController extends UfApiControllerBase { + @ResponseBody + @PostMapping("/api/operation-log/list") + public UfApiResponse list(@RequestBody Map params) { + var criteria = new UfActiveRecordCriteria(); + criteria.limit = 10; + criteria.offset = (Integer)params.getOrDefault("offset", 0); + var logs = UfActiveRecord.find(MdbOperationLog.class, criteria); + + var list = new ArrayList>(); + for ( var log : logs ) { + var map = log.toMap(); + map.put("user", null); + var user = UfActiveRecord.findOne(UfMdbUser.class, log.userId); + if ( null != user ) { + map.put("user", user.toMap()); + } + list.add(map); + } + + var total = UfActiveRecord.count(MdbOperationLog.class, criteria); + return this.success(Map.of("list",list, "total", total)); + } +} diff --git a/src/main/java/com/iflytop/digester/deviceinstance/LiquidAdditionInstance.java b/src/main/java/com/iflytop/digester/deviceinstance/LiquidAdditionInstance.java index e52132e..cb361c2 100644 --- a/src/main/java/com/iflytop/digester/deviceinstance/LiquidAdditionInstance.java +++ b/src/main/java/com/iflytop/digester/deviceinstance/LiquidAdditionInstance.java @@ -1,6 +1,9 @@ package com.iflytop.digester.deviceinstance; import com.iflytop.digester.underframework.UfCmdSnippetExecutor; +import com.iflytop.digester.underframework.dao.model.UfMdbOption; +import com.iflytop.digester.underframework.dao.model.UfMdbRuntimeVariable; import jakarta.annotation.PostConstruct; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @@ -10,16 +13,15 @@ public class LiquidAdditionInstance { // list of liquids private List liquids; - @PostConstruct - public void init() { + // setup + public void setup() { this.liquids = new ArrayList<>(); for (int i = 0; i < 8; i++) { LiquidAdditionLiquid liquid = new LiquidAdditionLiquid(); - - // @TODO : 测试用,要删除 - liquid.type = "hydrochloric"; - liquid.volume = 100; - + liquid.bucketIndex = i; + liquid.totalVolume = UfMdbOption.getInteger(String.format("LiquidBucketMaxVolume.%d", i), 0); + liquid.type = UfMdbRuntimeVariable.getString(String.format("LiquidBucketType.%d", i), "hydrochloric"); + liquid.volume = UfMdbRuntimeVariable.getInteger(String.format("LiquidBucketVolume.%d", i), 0); liquids.add(liquid); } } @@ -29,6 +31,11 @@ public class LiquidAdditionInstance { return this.liquids; } + // get liquid + public LiquidAdditionLiquid getLiquidByIndex( Integer index ) { + return this.liquids.get(index); + } + // 针对试管加液 public void addLiquidToTubes(List tubes, String type, int volume ) { diff --git a/src/main/java/com/iflytop/digester/model/MdbOperationLog.java b/src/main/java/com/iflytop/digester/model/MdbOperationLog.java new file mode 100644 index 0000000..1b7333a --- /dev/null +++ b/src/main/java/com/iflytop/digester/model/MdbOperationLog.java @@ -0,0 +1,28 @@ +package com.iflytop.digester.model; +import com.iflytop.digester.underframework.dao.model.UfMdbUser; +import com.iflytop.digester.underframework.dao.record.UfActiveRecord; +import com.iflytop.digester.underframework.dao.record.UfActiveRecordField; +public class MdbOperationLog extends UfActiveRecord { + @UfActiveRecordField + public String userId; + + @UfActiveRecordField + public String content; + + @UfActiveRecordField + public Integer time; + + // get table name + public static String getTableName() { + return "app_operation_logs"; + } + + // log + public static void log(UfMdbUser user, String content, Object ... args ) { + var log = new MdbOperationLog(); + log.userId = user.id; + log.content = String.format(content, args); + log.time = (int)(System.currentTimeMillis() / 1000); + log.save(); + } +} diff --git a/src/main/java/com/iflytop/digester/underframework/controller/UfApiRuntimeVariable.java b/src/main/java/com/iflytop/digester/underframework/controller/UfApiRuntimeVariable.java index 0040cd2..aee928b 100644 --- a/src/main/java/com/iflytop/digester/underframework/controller/UfApiRuntimeVariable.java +++ b/src/main/java/com/iflytop/digester/underframework/controller/UfApiRuntimeVariable.java @@ -11,8 +11,7 @@ public class UfApiRuntimeVariable extends UfApiControllerBase { @PostMapping("/api/runtime-variable/get") public UfApiResponse get(@RequestBody Map params ) { String key = (String)params.get("key"); - var value = UfMdbRuntimeVariable.getString(key); - assert value != null; + var value = UfMdbRuntimeVariable.getString(key, ""); return success(Map.of("value", value)); } } diff --git a/src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbOption.java b/src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbOption.java new file mode 100644 index 0000000..fcff2fa --- /dev/null +++ b/src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbOption.java @@ -0,0 +1,31 @@ +package com.iflytop.digester.underframework.dao.model; +import com.iflytop.digester.underframework.dao.record.UfActiveRecord; +import com.iflytop.digester.underframework.dao.record.UfActiveRecordField; +import java.util.Map; +public class UfMdbOption extends UfActiveRecord { + @UfActiveRecordField + public String key; + + @UfActiveRecordField + public String value; + + // get table name + public static String getTableName() { + return "app_options"; + } + + // get option + public static String getString(String key, String defaultValue ) { + var option = UfActiveRecord.findOne(UfMdbOption.class, Map.of("key", key)); + if ( null == option ) { + return defaultValue; + } + return option.value; + } + + // get option + public static Integer getInteger(String key, Integer defaultValue ) { + var option = UfMdbOption.getString(key, defaultValue.toString()); + return Integer.parseInt(option); + } +} diff --git a/src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbRuntimeVariable.java b/src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbRuntimeVariable.java index 5488f35..3f4b3ce 100644 --- a/src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbRuntimeVariable.java +++ b/src/main/java/com/iflytop/digester/underframework/dao/model/UfMdbRuntimeVariable.java @@ -30,15 +30,15 @@ public class UfMdbRuntimeVariable extends UfActiveRecord { } // get string - public static String getString(String name, Object ... args ) { - var variable = UfMdbRuntimeVariable.getVariable(name, args); - return null == variable ? null : variable.value; + public static String getString(String name, String defaultValue) { + var variable = UfActiveRecord.findOne(UfMdbRuntimeVariable.class, Map.of("key", name)); + return null == variable ? defaultValue : variable.value; } // get integer - public static Integer getInteger(String name, Object ... args ) { - var variable = UfMdbRuntimeVariable.getVariable(name, args); - return null == variable ? null : Integer.parseInt(variable.value); + public static Integer getInteger(String name, Integer defaultValue ) { + var variable = UfActiveRecord.findOne(UfMdbRuntimeVariable.class, Map.of("key", name)); + return null == variable ? defaultValue : Integer.parseInt(variable.value); } // set string diff --git a/web b/web index 7f4d0b8..568b1f8 160000 --- a/web +++ b/web @@ -1 +1 @@ -Subproject commit 7f4d0b8bfe683b41e75233368ed1ec1e98c8c350 +Subproject commit 568b1f82efb64410bbc4a54f923a5f5f2c0f8d5d