基于 groovy 实现公式库

2020-05-12 22:24:45 +08:00
 xinQing

在工作中基于 groovy 设计的公式库,希望能带给大家帮助。

项目地址

Github

语法

公式名(参数)

比如:

ECHO(大侠王波波)

支持公式嵌套:

公式名 1(公式名 2(参数), 参数)

比如:

ECHO(UUID())

快速开始

  1. 创建 Formula 对象 formula
  2. 运行 formula.run("script")

下面是例子:

package tk.fishfish.formula;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
 * 公式测试
 *
 * @author 奔波儿灞
 * @since 1.0
 */
public class FormulaTest {

    private Formula formula;

    @Before
    public void setup() {
        formula = new Formula();
    }

    @Test
    public void lower() {
        Object result = formula.run("LOWER(ABC)");
        Assert.assertEquals("abc", result);
    }

}

默认公式

这里只是抛砖引玉,实现了如下文本公式:

这里未实现丰富文本、时间、数学、逻辑等公式,只是提供一个扩展机制,方便大家定制自己的公式库。

开发自己的公式

注意:

SPI 扩展

除了可以手动 FormulaScript.installPlugin(CustomPlugin.class) 安装自定义公式以外,还能通过 SPI 注册。

在 src/main/resources/META-INF/services 目录下创建名称为 tk.fishfish.formula.plugin.Plugin 的文件,里面是实现类的全类名:

# custom plugin
tk.fishfish.formula.plugin.CustomPlugin

此时,会自动通过 SPI 机制发现实现类,自动安装,实现解偶。

2081 次点击
所在节点    Java
5 条回复
pkwenda
2020-05-13 01:41:34 +08:00
看着,如果做财务相关这样用会方便一些,可读性更好,性能方面 [eg:动态编译] 有测试损耗吗?
pkwenda
2020-05-13 01:41:50 +08:00
@pkwenda #1 看着不错,吃字了
w292614191
2020-05-13 08:51:44 +08:00
我们实现了 Excel 公式计算、行列变换、单元格引用计算、函数解析。
xinQing
2020-05-13 09:12:00 +08:00
@pkwenda 初略测试下来,单次公式计算在 10ms 以下(主要看实现的代码,内存计算都相当快)。
xinQing
2020-05-13 09:13:56 +08:00
@w292614191 我们主要是实现表单公式(比如,表单字段涉及数据变换、依赖),excel 这块到没有涉略噢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671073

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX