一种基于数据库配置的公式引擎测算方法、装置和介质与流程

未命名 09-22 阅读:54 评论:0


1.本发明涉及数据结构与数据计算技术领域,尤其涉及一种基于数据库配置的公式引擎测算方法、装置和介质。


背景技术:

2.公式引擎测算中的公式极其复杂,公式包含多种运算符、多种嵌套运算逻辑等,且行业中不同的计算场景下公式也不同,因此,有必要提供一种适用性高、能够适用于复杂公式计算场景的公式引擎测算方法。
3.基于双向队列和树配置一种通用的公式计算表,针对包含多运算符、多嵌套运算逻辑的复杂公式进行计算,将公式输入抽象为统一代号,从而提取抽象公式,适用于行业复杂公式计算场景。双向队列支持在两端插入和移出元素,通过双向队列可以实现对公式计算的快速全解析。利用树结构建立索引,能够加快查询公式速度。
4.双向队列(double ended queue,deque)是一种线性表,作为线性表,按照存储方式有两种,分别是:基于数组的顺序存储方式和基于链表的链式存储方式,并且二者均支持在两端插入和移出元素。大多数的deque实现对于所能够包含的元素数没有固定的限制,双向队列提供了两端访问元素的方法,提供了插入、删除和检查元素的方法。
5.树是一种数据结构,它是由n(n≥1)个有限节点组成的一个具有层次关系的集合,将其称为“树”,因为该集合看起来像一棵倒挂的树,它是根朝上,而叶朝下的。树结构对结果进行存储,树的最强大的功能是存储查询,利用树结构建立索引,能够加快查询速度。


技术实现要素:

6.本发明的目的在于针对现有技术的不足,提供一种基于数据库配置的公式引擎测算方法、装置和介质。本发明的公式引擎测算方法灵活、通用性强、便捷、操作性强、兼容性强、实用性强。
7.本发明的目的是通过以下技术方案来实现的:本发明实施例第一方面提供了一种基于数据库配置的公式引擎测算方法,包括以下步骤:
8.(1)构建数据库配置表,所述数据库配置表包括公式索引表和公式规则表;所述公式索引表包括索引序号、索引名称和上级索引序号字段名,所述公式规则表包括索引序号、规则名称、公式编码标识、公式类型、公式规则和公式描述字段名;所述公式索引表中的索引列对应多个公式规则表中的公式规则,所述索引列为索引序号列;
9.(2)读取公式索引表的索引列,根据索引列的索引序号与其对应的上级索引序号构建一对多的非线性树状数据结构;
10.(3)根据所述步骤(2)获得的树状数据结构进行索引以获取索引序号,根据索引序号查询对应的公式规则的输入值编号;
11.(4)根据所述步骤(3)传递的索引序号和输入值编号查询公式规则表中对应的公式规则,根据公式多括号的对称性判断该公式规则的有效性,利用队列和链表对该公式规
则进行遍历并根据输入值编号对应的值进行计算,以获取测算结果。
12.进一步地,所述索引序号的格式为x.y.z;所述输入值编号的格式为字母+数字。
13.进一步地,若当前所述索引序号无上级索引序号,则将当前索引序号对应的上级索引序号配置为0或null。
14.进一步地,所述公式类型包括公式输入和公式输出。
15.进一步地,所述步骤(2)具体为:读取公式索引表的索引列,根据索引列的索引序号确定其对应的上级索引序号,选择无上级索引序号的索引序号作为根节点,遍历公式索引表,查找该根节点对应的所有索引序号作为子节点,直至所有的索引序号均遍历完成,以构建一对多的非线性树状数据结构。
16.进一步地,所述步骤(4)包括以下子步骤:
17.(4.1)根据所述步骤(3)传递的索引序号查询公式规则表中对应的公式规则,并创建一个双向队列和用于存储再解析后的公式规则的链表;
18.(4.2)为不同的运算符号设立优先级,对所述步骤(4.1)查询到的公式规则进行遍历,将通过所述步骤(3)查询到的公式规则的输入值编号和运算符号按照其优先级顺序添加到所述步骤(4.1)创建的队列和链表中,并根据公式规则多括号的对称性判断该公式规则的有效性;
19.(4.3)创建一个用于计算的队列,对所述步骤(4.2)最后获得的链表中的公式规则进行遍历,并将输入值编号对应的json格式的值代入对应的公式规则中进行计算,以获取测算结果。
20.进一步地,所述步骤(4.2)包括以下子步骤:
21.(4.2.1)为不同的运算符号设立优先级;
22.(4.2.2)对所述步骤(4.1)查询到的公式规则进行遍历:当遍历到左括号时,将该左括号添加到队列中;当遍历到右括号时,则将与该右括号对应的一个左括号从队列中移除;当遍历到公式规则的输入值编号时,将该输入值编号直接添加到链表中;当遍历到运算符号时,则查询当前队列中是否存在大于等于该运算符号优先级的运算符号,若存在,则将队列中的运算符号移除并将其按照优先级从大到小的顺序添加到链表中,同时将当前遍历到的运算符号添加到队列中;否则,则将该运算符号添加到队列中;最后将队列中剩余的运算符号按照优先级从大到小的顺序添加到链表中;
23.(4.2.3)判断所述步骤(4.2.2)最后获得的队列中是否存在左括号,若存在,则该公式规则无效;否则,则该公式规则有效。
24.进一步地,所述步骤(4.3)中对所述步骤(4.2)最后获得的链表中的公式规则进行遍历具体包括:当遍历到公式规则的输入值编号时,则将该输入值编号直接添加到队列中;当遍历到运算符号时,则将队列头部的前两位输入值编号取出,并按照与运算符号就近的原则根据入参赋值进行计算,然后将计算结果重新压入队列中。
25.本发明实施例第二方面提供了一种基于数据库配置的公式引擎测算装置,包括一个或多个处理器,用于实现上述的基于数据库配置的公式引擎测算方法。
26.本发明实施例第三方面提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,用于实现上述的基于数据库配置的公式引擎测算方法。
27.本发明的有益效果是,本发明基于数据库配置文件,不仅可以灵活配置、可定制化
公式引擎测算,还可以根据不同的数据业务需求,导入不同的计算规则到数据库;本发明通过使用树形数据结构与队列栈,能够与多种计算机语言兼容,加快运算速度,并简化公式运算过程,便于理解,通用性较强,适用于多种公式测算场景,操作简单,实用性强,易于推广。
附图说明
28.图1是本发明的基于数据库配置的公式引擎测算方法流程图;
29.图2是本发明一实施例的公式索引表的结构示意图;
30.图3是本发明一实施例的公式规则表的结构示意图;
31.图4是本发明一实施例的公式索引表的树形结构示意图;
32.图5是本发明一实施例的界面公式规则展示图;
33.图6是本发明一实施例的公式测算界面展示输入示例图;
34.图7是本发明一实施例的公式测算界面展示输出结果示例图;
35.图8是本发明的基于数据库配置的公式引擎测算装置的一种结构示意图。
具体实施方式
36.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
37.在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
38.应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
39.下面结合附图,对本发明进行详细说明。在不冲突的情况下,下述的实施例及实施方式中的特征可以相互组合。
40.参加图1,本发明的基于数据库配置的公式引擎测算方法包括以下步骤:
41.(1)构建数据库配置表,数据库配置表包括公式索引表和公式规则表。公式索引表包括索引序号(index_id)、索引名称(index_name)和上级索引序号(parent_index_id)等多个字段名;公式规则表包括索引序号(index_id)、规则名称(rule_class)、公式编码标识(value_code)、公式类型(value_type)、公式规则(value_rule)和公式描述(desc)等多个字段名。
42.其中,规则名称(rule_class)是公式代表的规则名称;公式编码标识(value_code)是公式入参编码标识。
43.应当理解的是,公式索引表和公式规则表包括的字段名不限于上述多个字段名,
例如,公式索引表还包括用于标记公式索引层级的公式索引层级(level)等等;公式规则表还包括公式计算单位(unit)等等,具体可以根据实际情况进行配置,以构建公式索引表和公式规则表。
44.本实施例中,索引序号的格式为x.y.z,例如1.2.3。另外,若当前索引序号无上级索引序号,可将索引序号对应的上级索引序号配置为0或null;应当理解的是,null表示不填上级索引序号。
45.本实施例中,公式类型包括公式输入(input,表示入参类型)和公式输出(output,表示出参类型)。
46.进一步地,公式索引表中的索引列对应多个公式规则表中的公式规则。其中,公式索引表中的索引列为索引序号(index_id)列。
47.(2)读取公式索引表的索引列,根据索引列的索引序号与其对应的上级索引序号构建一对多的非线性树状数据结构。
48.应当理解的是,通过构建一对多的非线性树状数据结构,能够便于在前端页面快速索引查询公式规则。
49.具体地,读取公式索引表的索引列,根据索引列的索引序号确定其对应的上级索引序号,选择无上级索引序号的索引序号作为根节点,遍历公式索引表,查找该根节点对应的所有索引序号作为子节点,直至所有的索引序号均遍历完成,以构建一对多的非线性树状数据结构。示例性地,构建的公式索引表的非线性树状数据结构如图4所示,相对应的前端界面公式规则展示图如图5所示。
50.(3)根据步骤(2)获得的树状数据结构进行索引以获取索引序号,根据索引序号查询对应的公式规则的输入值编号。
51.具体地,根据步骤(2)获得的树状数据结构,可快速由主节点索引至子节点,如从主节点2.快速索引至其对应的子节点2.1.1.1.1节点,如此即可获取到索引序号(index_id),然后通过该索引序号(index_id)查询对应的公式规则的输入值编号,其中,编号的格式定义为:字母+数字,形如:a1。应当理解的是,当给输入值编号赋值时,表示为json格式的值,其格式为“输入值编号:数值”,例如a1:100;b1:200;c1:300。
52.(4)根据步骤(3)传递的索引序号和输入值编号查询公式规则表中对应的公式规则,根据公式多括号的对称性判断该公式规则的有效性,利用队列和链表对该公式规则进行遍历并根据输入值编号对应的值进行计算,以获取测算结果。
53.(4.1)根据步骤(3)传递的索引序号查询公式规则表中对应的公式规则,并创建一个双向队列和用于存储再解析后的公式规则的链表。
54.示例性地,查询到的公式规则如(a1+b1)/100+c1、[a6*b6*341.215-276.3*b6]*h/i等等,其中a1、a6等均为输入值编号。
[0055]
(4.2)为不同的运算符号设立优先级,对步骤(4.1)查询到的公式规则进行遍历,将通过步骤(3)查询到的公式规则的输入值编号和运算符号按照其优先级顺序添加到步骤(4.1)创建的队列和链表中,并根据公式规则多括号的对称性判断该公式规则的有效性。
[0056]
(4.2.1)为不同的运算符号设立优先级。例如,乘除的优先级大于加减的优先级。
[0057]
(4.2.2)对步骤(4.1)查询到的公式规则进行遍历:当遍历到左括号时,将该左括号添加到队列中;当遍历到右括号时,则将与该右括号对应的一个左括号从队列中移除;当
遍历到公式规则的输入值编号时,将该输入值编号直接添加到链表中;当遍历到运算符号时,则查询当前队列中是否存在大于等于该运算符号优先级的运算符号,若存在,则将队列中的运算符号移除并将其按照优先级从大到小的顺序添加到链表中,同时将当前遍历到的运算符号添加到队列中;否则,则将该运算符号添加到队列中;最后将队列中剩余的运算符号按照优先级从大到小的顺序添加到链表中。
[0058]
(4.2.3)判断步骤(4.2.2)最后获得的队列中是否存在左括号,若存在,则该公式规则无效;否则,则该公式规则有效。
[0059]
示例性地,以公式规则[a6*b6*341.215-276.3*b6]*h/i为例,首先为不同的运算符号设立优先级。然后对公式规则进行遍历:当遍历到左括号时,将该左括号添加到队列中;当遍历到右括号时,则将与该右括号对应的一个左括号从队列中移除;当遍历到公式规则的输入值编号时,将该输入值编号直接添加到链表中;当遍历到运算符号时,则查询当前队列中是否存在大于等于该运算符号优先级的运算符号,若存在,则将队列中的运算符号移除并将其按照优先级从大到小的顺序添加到链表中,同时将当前遍历到的运算符号添加到队列中;否则,则将该运算符号添加到队列中;最后将队列中剩余的运算符号按照优先级从大到小的顺序添加到链表中,得到的链表中有:a6b6*341.215*276.3b6*-h*i/。最后判断当前队列中是否存在左括号,若存在,则该公式规则无效;否则,则该公式规则有效。该方法可兼容多种括号类型,如若在遍历完成后,队列中有剩余括号,则判断公式规则无效。
[0060]
(4.3)创建一个用于计算的队列,对步骤(4.2)最后获得的链表中的公式规则进行遍历,并将输入值编号对应的json格式的值代入对应的公式规则中进行计算,以获取测算结果。
[0061]
其中,输入值编号的格式为字母+数字,如a1、b1、c1,输入值编号对应的json格式的值的格式为“输入值编号:数值”,例如a1:100;b1:200;c1:300。
[0062]
本实施例中,对步骤(4.2)最后获得的链表中的公式规则进行遍历具体包括:当遍历到公式规则的输入值编号时,则将该输入值编号直接添加到队列中;当遍历到运算符号时,则将队列头部的前两位输入值编号取出,并按照与运算符号就近的原则根据入参赋值进行计算,然后将计算结果重新压入队列中。需要说明的是,在将队列头部的前两位输入值编号取出时,应当理解的是,该用于计算的队列遵循先进后出的原则。
[0063]
示例性地,若步骤(4.2)最后获得的链表中的公式规则为a1b1+c1d1/+,根据传入对应的json格式的数据:{a1:1,b1:2,c1:3,d1:4},利用队列进行计算,具体为:对公式规则a1b1+c1d1/+进行遍历:首先遍历到a1,将其添加到队列中;当遍历到b1时,将b1添加到队列中;当遍历到“+”时,取出队列中的前两位输入值编号即a1和b1进行计算,a1+b1=1+2=3,将计算结果3重新压入到队列中;当遍历到c1时,将c1添加到队列中;当遍历到d1时,将d1添加到队列中;当遍历到“/”时,将队列头部的前两位输入值编号即d1和c1取出进行计算,按照与运算符号就近的原则进行计算,即c1/d1=3/4,并将该计算结果压入到队列中;当遍历到“+”时,将队列头部的前两位输入值编号即3和3/4取出进行计算,即3+3/4,该结果即为测算结果。
[0064]
本发明基于灵活的数据库公式配置,可多样化定制需要导入的公式,及相应输入格式文本的字段列表,导入的字段名称等;本发明与工程开发框架也有很好的兼容性,读取公式配置、解析计算公式方便高效,实用性强,操作简单,易于推广。
[0065]
下面根据实施例详细描述本发明基于数据库配置的公式引擎测算方法,本发明的目的和效果将变得更加明显。
[0066]
本实施例中,以业务场景是计算某银行环境效益的相关数据为例,基于yaml(yet another markup language,另一种标记语言)配置文件将json格式文本的数据导入数据库,具体地,包括以下步骤:
[0067]
(1)按照指定规则,构建数据库配置表,即构建数据库配置表的公式索引表和公式规则表。
[0068]
配置公式索引表中的字段:索引序号(index_id)、索引名称(index_name)、上级索引序号(parent_index_id)、公式索引层级(level),如图2所示。
[0069]
配置公式规则表中的字段:索引序号(index_id)、规则名称(rule_class)、公式编码标识(value_code)、公式类型(value_type)、公式规则(value_rule)、公式描述(desc)、公式计算单位(unit),如图3所示。
[0070]
(2)读取公式索引表的索引列,根据索引序号与其对应的上级索引序号,构建一对多的非线性树状数据结构。
[0071]
读取数据库配置表的公式索引表,拼接对应的树结构形式,具体过程为:
[0072]
(2.1)读取公式索引表的第一字段列表:索引序号(index_id)。
[0073]
(2.2)读取公式索引表的第二字段列表:索引名称(index_name)。
[0074]
(2.3)读取公式索引表的第三字段列表:上级索引序号(parent_index_id)。
[0075]
(2.4)索引呈级联关系,如2.1.1索引为2.1的子索引,因此构造索引查询的树状数据结构:选取顶层的根节点,即选择无上级索引序号的节点作为根节点,递归调用,查找该根节点的所有子节点,生成构造完成的节点,并将构造完成的节点添加到根节点。
[0076]
构造完成后的非线性树状数据结构如图4所示。
[0077]
(3)根据步骤(2)构建的树状数据结构进行索引以获取索引序号,然后通过该索引序号查询对应的公式规则的输入值编号,编号的格式定义为:字母+数字,形如:a1;再将界面的输入值以多个“输入值编号:数值”,索引序号一同拼接为如下json格式,作为api的输入,用于公式结果的查询,如图6所示,显示了公式测算界面展示输入示例图。
[0078]
(4)根据步骤(3)传递的索引序号和输入值编号查询公式规则表中对应的公式规则,根据公式多括号的对称性判断该公式规则的有效性,并利用队列和链表对该公式规则进行遍历解析,最终将输入值编号对应的json格式的值代入对应的一个或多个公式规则中进行计算,即可获取测算结果。详细过程如下:
[0079]
(4.1)根据步骤(3)传递的索引序号,如1.7.6,查询公式规则表中对应的公式规则(若有多条规则,用“&”符号分隔),如查询到的公式规则为[a6*b6*341.215-276.3*b6]*h/i,其中a6表示某个输入值编号,并创建一个双向队列和用于存储再解析后的公式规则的链表。
[0080]
(4.2)首先为不同的运算符号设立优先级,乘除的优先级相等,加减的优先级相等,乘除的优先级大于加减的优先级。然后对该公式规则进行遍历:当遍历到左括号时,将该左括号添加到队列中;当遍历到a6时,将a6这个输入值编号直接添加到链表中;当遍历到“*”时,此时的队列中不存在大于等于“*”的优先级的运算符号,故将“*”添加到队列中;当遍历到b6时,将b6这个输入值编号直接添加到链表中;当再次遍历到“*”时,此时的队列中
存在等于该“*”优先级的一个“*”,因此,将队列中的运算符号“*”移除并将其添加到链表中,同时将当前遍历到的“*”添加到队列中;当遍历到341.215时,将341.215这个输入值编号直接添加到链表中,此时的队列中有:[*,此时的链表中有:a6b6*341.215;当遍历到
“‑”
时,当前队列中存在大于
“‑”
优先级的运算符号“*”,则将队列中的运算符号“*”移除并将其添加到链表中,同时将当前遍历到的
“‑”
添加到队列中,此时的队列中有:[-,此时的链表中有:a6b6*341.215*;当遍历到276.3时,直接将276.3添加到链表中即可;当遍历到“*”时,当前队列中不存在大于等于“*”优先级的运算符号,故将该运算符号“*”添加到队列中,此时的队列中有:[-*,此时的链表中有:a6b6*341.215*276.3;当遍历到b6时,将b6这个输入值编号直接添加到链表中;当遍历到右括号时,则将与该右括号对应的一个左括号从队列中移除;当再次遍历到“*”时,当前队列中存在等于“*”优先级的运算符号,故将队列中的运算符号
“‑
*”移除,并将其按照优先级从大到小的顺序添加到链表中,同时将当前遍历到的“*”添加到队列中,此时的队列中有:*,此时的链表中有:a6b6*341.215*276.3b6*-;当遍历到h时,将h这个输入值编号直接添加到链表中;当遍历到“/”时,队列中存在等于“/”优先级的运算符号“*”,故将队列中的“*”移除并将其添加到队列中,同时将当前遍历的“/”添加到队列中;当遍历到i时,将i这个输入值编号直接添加到链表中,此时的队列中有:/,此时的链表中有:a6b6*341.215*276.3b6*-h*i;最后将队列中的运算符号“/”添加到链表中,最终可以得到:内容为空的队列和内容为a6b6*341.215*276.3b6*-h*i/的链表。最后再对当前队列进行判断,判断其中是否存在左括号,此时不存在,因此该公式规则是有效的;应当理解的是,若队列中还存在左括号,则该公式规则就是无效的,不能进行后续的计算。
[0081]
(4.3)建立一个用于计算的队列,对步骤(4.2)最后获得的链表中的公式规则进行遍历,将步骤(3)中获得的输入值编号对应的json格式的值代入到对应的公式规则计算,即可获取测算结果。
[0082]
以上述步骤(4.2)解析后的公式规则a6b6*341.215*276.3b6*-h*i/为例,遍历再解析后的公式链表,若为运算符号,则将队列中的前两位公式编号取出,并根据入参赋值,并进行运算,运算结果重新压入栈中:若为公式编号,则直接加入到队列中。需要说明的是,该队列遵循先进后出的原则。
[0083]
具体地,首先将a6、b6对应数值放入队列中,当遍历到“*”时,将a6、b6的值移出队列并计算a6*b6的结果,并将计算后的结果重新放入队列;继续遍历,将341.215加入队列中,之后当遍历到“*”时,将队列头部两位数值:a6*b6、341.215移出,再计算a6*b6*341.215的结果并将该结果加入队列中;继续遍历,将276.3、b6加入到队列头部,到“*”时,将276.3、b6取出计算276.3*b6的结果并将该结果再加入队列头部;当遍历到
“‑”
时,按照运算符号就近的原则计算a6*b6*3341.215-276.3*b6的结果,并将该结果添加到队列中;如此,再计算[a6*b6*3341.215-276.3*b6]*h的值,并将其加入队列中;最后,当遍历到“/”时,则计算[a6*b6*3341.215-276.3*b6]*h/i。
[0084]
最终将输出结果展示到前端页面,如图7所示,本发明方法较为灵活、通用、便捷,兼容性强、实用性强。
[0085]
上述实例是示例性的,不能理解为对本发明的限制,本发明的专利保护范围包括但不限于上述具体示例实施方式。任何符合本发明的一种基于数据库配置的公式引擎计算的方法的权利要求说明的且任何本领域的技术人员在本发明范围内根据业务场景不同,示
例数据,对数据库表配置格式、计算过程中json格式进行修改、替换和变型,皆应落入本发明的专利保护范围。
[0086]
按照公式索引序号,公式索引名称、上级索引序号构建公式索引表,按照公式索引序号,公式输入/输出名称,值类型(公式输入/公式输出)与公式表达式构建公式规则表;首先,读出所有索引表的索引序号,根据其与上级索引序号的联系,通过递归运算,建立索引间的级联关系,生成树形格式数据结构;根据用户最终选择的公式索引序号,读取对应的公式规则返回到页面;最终前端以json格式的数据结构传入公式输入名称、对应用户在计算界面的输入数值与公式索引序号,通过公式规则引擎,代入对应的规则进行再解析并测算。本发明方法与现有的技术相比,基于mysql数据库表配置,可计算复杂公式,并对输入公式的正确性可验证,操作简单,适用于多种类型公式计算的场景;且该方法基于灵活的索引序号的配置,可随机定制需要测算的一个或多个公式规则以及公式输入输出字段名称等,计算快捷,实用性强,操作简单,易于推广。
[0087]
与前述基于数据库配置的公式引擎测算方法的实施例相对应,本发明还提供了基于数据库配置的公式引擎测算装置的实施例。
[0088]
参见图8,本发明实施例提供的一种基于数据库配置的公式引擎测算装置,包括一个或多个处理器,用于实现上述实施例中的基于数据库配置的公式引擎测算方法。
[0089]
本发明基于数据库配置的公式引擎测算装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图8所示,为本发明基于数据库配置的公式引擎测算装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图8所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
[0090]
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0091]
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0092]
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的基于数据库配置的公式引擎测算方法。
[0093]
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备,例如所述设备上配备的插接式硬盘、智能存储卡(smart media card,smc)、sd卡、闪存卡(flash card)等。进一步的,所述计算机可读存储介质还可以既包括任
意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
[0094]
以上实施例仅用于说明本发明的设计思想和特点,其目的在于使本领域内的技术人员能够了解本发明的内容并据以实施,本发明的保护范围不限于上述实施例。所以,凡依据本发明所揭示的原理、设计思路所作的等同变化或修饰,均在本发明的保护范围之内。

技术特征:
1.一种基于数据库配置的公式引擎测算方法,其特征在于,包括以下步骤:(1)构建数据库配置表,所述数据库配置表包括公式索引表和公式规则表;所述公式索引表包括索引序号、索引名称和上级索引序号字段名,所述公式规则表包括索引序号、规则名称、公式编码标识、公式类型、公式规则和公式描述字段名;所述公式索引表中的索引列对应多个公式规则表中的公式规则,所述索引列为索引序号列;(2)读取公式索引表的索引列,根据索引列的索引序号与其对应的上级索引序号构建一对多的非线性树状数据结构;(3)根据所述步骤(2)获得的树状数据结构进行索引以获取索引序号,根据索引序号查询对应的公式规则的输入值编号;(4)根据所述步骤(3)传递的索引序号和输入值编号查询公式规则表中对应的公式规则,根据公式多括号的对称性判断该公式规则的有效性,利用队列和链表对该公式规则进行遍历并根据输入值编号对应的值进行计算,以获取测算结果。2.根据权利要求1所述的基于数据库配置的公式引擎测算方法,其特征在于,所述索引序号的格式为x.y.z;所述输入值编号的格式为字母+数字。3.根据权利要求1所述的基于数据库配置的公式引擎测算方法,其特征在于,若当前所述索引序号无上级索引序号,则将当前索引序号对应的上级索引序号配置为0或null。4.根据权利要求1所述的基于数据库配置的公式引擎测算方法,其特征在于,所述公式类型包括公式输入和公式输出。5.根据权利要求1所述的基于数据库配置的公式引擎测算方法,其特征在于,所述步骤(2)具体为:读取公式索引表的索引列,根据索引列的索引序号确定其对应的上级索引序号,选择无上级索引序号的索引序号作为根节点,遍历公式索引表,查找该根节点对应的所有索引序号作为子节点,直至所有的索引序号均遍历完成,以构建一对多的非线性树状数据结构。6.根据权利要求1所述的基于数据库配置的公式引擎测算方法,其特征在于,所述步骤(4)包括以下子步骤:(4.1)根据所述步骤(3)传递的索引序号查询公式规则表中对应的公式规则,并创建一个双向队列和用于存储再解析后的公式规则的链表;(4.2)为不同的运算符号设立优先级,对所述步骤(4.1)查询到的公式规则进行遍历,将通过所述步骤(3)查询到的公式规则的输入值编号和运算符号按照其优先级顺序添加到所述步骤(4.1)创建的队列和链表中,并根据公式规则多括号的对称性判断该公式规则的有效性;(4.3)创建一个用于计算的队列,对所述步骤(4.2)最后获得的链表中的公式规则进行遍历,并将输入值编号对应的json格式的值代入对应的公式规则中进行计算,以获取测算结果。7.根据权利要求6所述的基于数据库配置的公式引擎测算方法,其特征在于,所述步骤(4.2)包括以下子步骤:(4.2.1)为不同的运算符号设立优先级;(4.2.2)对所述步骤(4.1)查询到的公式规则进行遍历:当遍历到左括号时,将该左括号添加到队列中;当遍历到右括号时,则将与该右括号对应的一个左括号从队列中移除;当
遍历到公式规则的输入值编号时,将该输入值编号直接添加到链表中;当遍历到运算符号时,则查询当前队列中是否存在大于等于该运算符号优先级的运算符号,若存在,则将队列中的运算符号移除并将其按照优先级从大到小的顺序添加到链表中,同时将当前遍历到的运算符号添加到队列中;否则,则将该运算符号添加到队列中;最后将队列中剩余的运算符号按照优先级从大到小的顺序添加到链表中;(4.2.3)判断所述步骤(4.2.2)最后获得的队列中是否存在左括号,若存在,则该公式规则无效;否则,则该公式规则有效。8.根据权利要求6所述的基于数据库配置的公式引擎测算方法,其特征在于,所述步骤(4.3)中对所述步骤(4.2)最后获得的链表中的公式规则进行遍历具体包括:当遍历到公式规则的输入值编号时,则将该输入值编号直接添加到队列中;当遍历到运算符号时,则将队列头部的前两位输入值编号取出,并按照与运算符号就近的原则根据入参赋值进行计算,然后将计算结果重新压入队列中。9.一种基于数据库配置的公式引擎测算装置,其特征在于,包括一个或多个处理器,用于实现权利要求1-8中任一项所述的基于数据库配置的公式引擎测算方法。10.一种计算机可读存储介质,其特征在于,其上存储有程序,该程序被处理器执行时,用于实现权利要求1-8中任一项所述的基于数据库配置的公式引擎测算方法。

技术总结
本发明公开了一种基于数据库配置的公式引擎测算方法、装置和介质,该方法首先构建数据库配置表;然后根据索引序号及其上级索引序号构建树状数据结构;再根据树状数据结构获取索引序号以及对应的公式规则的输入值编号;最后根据索引序号和输入值编号查询公式规则表中对应的公式规则,并判断公式规则的有效性,利用队列和链表对公式规则进行遍历并计算,以获取测算结果。本发明基于MySQL数据库表配置,可计算复杂公式,并对输入公式的正确性可验证,操作简单,适用于多种类型公式计算的场景;本发明基于灵活的索引序号的配置,可随机定制需要测算的一个或多个公式规则以及公式输入输出字段名称等,计算快捷,实用性强,操作简单,易于推广。易于推广。易于推广。


技术研发人员:徐黎 沈程 郭伟杰
受保护的技术使用者:之江实验室
技术研发日:2023.04.27
技术公布日:2023/9/20
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

航空商城 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

评论

相关推荐