ソースを参照

【功能新增】IoT:动态脚本 js、groovy demo

YunaiV 6 ヶ月 前
コミット
724512399a

+ 21 - 0
yudao-module-iot/yudao-module-iot-biz/pom.xml

@@ -81,6 +81,27 @@
             <artifactId>pf4j-spring</artifactId>
         </dependency>
 
+        <!-- TODO @芋艿:bom 管理 -->
+        <dependency>
+            <groupId>org.apache.groovy</groupId>
+            <artifactId>groovy-all</artifactId>
+            <version>4.0.25</version>
+            <type>pom</type>
+        </dependency>
+
+        <!-- TODO @芋艿:bom 管理 -->
+        <dependency>
+            <groupId>org.graalvm.js</groupId>
+            <artifactId>js</artifactId>
+            <version>24.1.2</version>
+            <type>pom</type>
+        </dependency>
+        <dependency>
+            <groupId>org.graalvm.js</groupId>
+            <artifactId>js-scriptengine</artifactId>
+            <version>24.1.2</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 61 - 0
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/ScriptTest.java

@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.iot;
+
+import cn.hutool.script.ScriptUtil;
+import javax.script.Bindings;
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+
+/**
+ * TODO 芋艿:测试脚本的接入
+ */
+public class ScriptTest {
+
+    public static void main2(String[] args) {
+        // 创建一个 Groovy 脚本引擎
+        ScriptEngine engine = ScriptUtil.createGroovyEngine();
+
+        // 创建绑定参数
+        Bindings bindings = engine.createBindings();
+        bindings.put("name", "Alice");
+        bindings.put("age", 30);
+
+        // 定义一个稍微复杂的 Groovy 脚本
+        String script = "def greeting = 'Hello, ' + name + '!';\n" +
+                "def ageInFiveYears = age + 5;\n" +
+                "def message = greeting + ' In five years, you will be ' + ageInFiveYears + ' years old.';\n" +
+                "return message.toUpperCase();\n";
+
+        try {
+            // 执行脚本并获取结果
+            Object result = engine.eval(script, bindings);
+            System.out.println(result); // 输出: HELLO, ALICE! IN FIVE YEARS, YOU WILL BE 35 YEARS OLD.
+        } catch (ScriptException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        // 创建一个 JavaScript 脚本引擎
+        ScriptEngine jsEngine = ScriptUtil.createJsEngine();
+
+        // 创建绑定参数
+        Bindings jsBindings = jsEngine.createBindings();
+        jsBindings.put("name", "Bob");
+        jsBindings.put("age", 25);
+
+        // 定义一个简单的 JavaScript 脚本
+        String jsScript = "var greeting = 'Hello, ' + name + '!';\n" +
+                "var ageInTenYears = age + 10;\n" +
+                "var message = greeting + ' In ten years, you will be ' + ageInTenYears + ' years old.';\n" +
+                "message.toUpperCase();\n";
+
+        try {
+            // 执行脚本并获取结果
+            Object jsResult = jsEngine.eval(jsScript, jsBindings);
+            System.out.println(jsResult); // 输出: HELLO, BOB! IN TEN YEARS, YOU WILL BE 35 YEARS OLD.
+        } catch (ScriptException e) {
+            e.printStackTrace();
+        }
+    }
+
+}