From 2b199c818d400d411e762ea06ae343cf6a44e8a0 Mon Sep 17 00:00:00 2001 From: Tom Li Date: Thu, 22 Jan 2026 18:50:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/constant/FormulaAviatorConst.java | 17 +++++++ .../desk/basic/constant/FormulaConst.java | 4 +- .../aviator/func/CustomFunctionRegistry.java | 46 +++++++++++++++++++ .../basic/controller/AviatorController.java | 18 ++++++-- 4 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java new file mode 100644 index 00000000..9314357a --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java @@ -0,0 +1,17 @@ +package org.springblade.desk.basic.constant; + +public interface FormulaAviatorConst { + + /** + * 添加点 + */ + String ADD = "add"; + /** + * 测量值 + */ + String TEST = "test"; + /** + * 体积 + */ + String VOL = "vol"; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java index 47905fa5..54be7051 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java @@ -5,9 +5,9 @@ public interface FormulaConst { /** * */ - final Integer TYPE_1 = 1; + Integer TYPE_1 = 1; /** * */ - final Integer TYPE_2 = 2; + Integer TYPE_2 = 2; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java new file mode 100644 index 00000000..a7f323ee --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java @@ -0,0 +1,46 @@ +package org.springblade.desk.basic.aviator.func; + +import com.googlecode.aviator.AviatorEvaluatorInstance; +import com.googlecode.aviator.runtime.function.AbstractFunction; +import com.googlecode.aviator.runtime.type.AviatorObject; +import com.googlecode.aviator.runtime.type.AviatorString; +import jakarta.annotation.Resource; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@ToString(callSuper = false) +@Slf4j +public class CustomFunctionRegistry implements InitializingBean { + + @Resource + private AviatorEvaluatorInstance aviatorEvaluator; + + @Override + public void afterPropertiesSet() throws Exception { + // 注册自定义函数 + // 此时 aviatorEvaluator 已被注入 + aviatorEvaluator.addFunction(new AbstractFunction() { + @Override + public String getName() { + return "myCustomFunc"; + } + + @Override + public AviatorObject call(Map env, AviatorObject arg1) { + String value = (String) arg1.getValue(env); + return new AviatorString("自定义结果: " + value); + } + }); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java index 6e17fb91..4e2e8023 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java @@ -1,5 +1,6 @@ package org.springblade.desk.basic.controller; +import com.googlecode.aviator.AviatorEvaluatorInstance; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import lombok.AllArgsConstructor; @@ -8,11 +9,9 @@ import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.springblade.desk.basic.aviator.service.AviatorService; import org.springblade.desk.basic.constant.BAModuleConst; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import java.util.Collections; import java.util.Map; @RestController @@ -26,6 +25,8 @@ public class AviatorController { @Resource private AviatorService aviatorService; + @Resource + private AviatorEvaluatorInstance aviatorEvaluator; /** * { @@ -47,4 +48,13 @@ public class AviatorController { Map variables = (Map) request.get("variables"); return aviatorService.evaluateExpression(expression, variables); } + + @GetMapping("/customFunc") + public Object customFunc() { + // 直接使用注册的自定义函数 + return aviatorEvaluator.execute( + "myCustomFunc('Hello')", + Collections.emptyMap() + ); + } }