自定义函数。

develop-QA
Tom Li 3 months ago
parent ec8c042a3d
commit 2b199c818d
  1. 17
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaAviatorConst.java
  2. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/constant/FormulaConst.java
  3. 46
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/aviator/func/CustomFunctionRegistry.java
  4. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/AviatorController.java

@ -0,0 +1,17 @@
package org.springblade.desk.basic.constant;
public interface FormulaAviatorConst {
/**
* 添加点
*/
String ADD = "add";
/**
* 测量值
*/
String TEST = "test";
/**
* 体积
*/
String VOL = "vol";
}

@ -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;
} }

@ -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<String, Object> env, AviatorObject arg1) {
String value = (String) arg1.getValue(env);
return new AviatorString("自定义结果: " + value);
}
});
}
}

@ -1,5 +1,6 @@
package org.springblade.desk.basic.controller; package org.springblade.desk.basic.controller;
import com.googlecode.aviator.AviatorEvaluatorInstance;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -8,11 +9,9 @@ import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.basic.aviator.service.AviatorService; import org.springblade.desk.basic.aviator.service.AviatorService;
import org.springblade.desk.basic.constant.BAModuleConst; import org.springblade.desk.basic.constant.BAModuleConst;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
import java.util.Map; import java.util.Map;
@RestController @RestController
@ -26,6 +25,8 @@ public class AviatorController {
@Resource @Resource
private AviatorService aviatorService; private AviatorService aviatorService;
@Resource
private AviatorEvaluatorInstance aviatorEvaluator;
/** /**
* { * {
@ -47,4 +48,13 @@ public class AviatorController {
Map<String, Object> variables = (Map<String, Object>) request.get("variables"); Map<String, Object> variables = (Map<String, Object>) request.get("variables");
return aviatorService.evaluateExpression(expression, variables); return aviatorService.evaluateExpression(expression, variables);
} }
@GetMapping("/customFunc")
public Object customFunc() {
// 直接使用注册的自定义函数
return aviatorEvaluator.execute(
"myCustomFunc('Hello')",
Collections.emptyMap()
);
}
} }

Loading…
Cancel
Save