求一个可以让客户灵活编辑计算公式的方法

2022-06-07 09:21:29 +08:00
 shyrock
目前做的系统中有一个模块是绩效奖金计算,具体就是根据公司各个部门的考核方法构建公式,读取系统各种销售额、成本、周期等信息来计算每个项目的奖金。用代码直接写这个公式甚至封装成一个策略都不难。
但是,这个公式变动很频繁,所以想做到让业务部门的人来编写公式,平台只提供一个公式录入界面。
不知道各位大佬有没有好的思路或者有开源的方案更好。

曾经以为规则引擎可以解决这个,仔细了解后发现不太对。
369 次点击
所在节点    问与答
3 条回复
sillydaddy
2022-06-07 14:40:28 +08:00
这个待解决的问题点在哪里呢?没有太搞懂。是公式很复杂难以解析呢?还是对客户来说输入公式比较麻烦?
shyrock
2022-06-07 14:46:53 +08:00
@sillydaddy #1 痛点在于用户随时改公式,作为程序员不想陪他们玩,就想写个小白可以用的公式配置 UI 给他们自个儿玩
sillydaddy
2022-06-07 15:33:07 +08:00
如果侧重点在于「公式输入」的话,我推荐参考 GrafEq 这个软件的实现方式:
http://www.peda.com/grafeq/spec.html#math-formats

它录入公式的特点,类似于 markdown 编辑器的「所见即所得」:随着用户把公式逐字敲进去的过程,公式会逐渐自动地显现出对应的数学格式。

举个复杂点的例子,比如对 y 开 x 次方,纯手打的话应该是输入"root(x,y)"。不过真实过程一点都不像这个公式一样枯燥:当用户输入完"root"这几个字母,然后输入一个"(",这时「根号」这个数学符号就自动显现出格式来了,同时焦点光标自动移动到了根号左上角指数幂的位置,然后用户输入"x"。这时光标仍然在左上角,用户需要输入一个",",把焦点切换到根号里面,也就是底数部分,这时可以输入"y",光标焦点仍在根号内。最后需要输入")"将光标切出根号外面。整个过程很自然。

这种方式有点「所见即所得」的意思,它把线性的输入字符串转变成了非线性的显示。最神奇的是当你完成了公式的输入,得到了一个完全格式化显现的公式后,你还可以把光标逐个字符向前移动,数学公式会像电影的倒放一样,逐渐恢复到线性的字符串格式。

对于所有难记的公式,它有「 easy button 」可以用,点一个按钮自动填入公式。但所见所得的思想没变。
http://www.peda.com/grafeq/spec.html#easy-buttons

楼主可以试一下输入上面链接里举的例子"y={x if x>0,0 if x=0,-x if x<0}",输入过程中的实时显示反馈感觉非常好。既不像 MathType 那种纯按钮输入的死板,又不像编程一样纯代码的晦涩。

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

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

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

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

© 2021 V2EX