CN102521411B - 公式及公式数据处理装置和公式及公式数据处理方法 - Google Patents
公式及公式数据处理装置和公式及公式数据处理方法 Download PDFInfo
- Publication number
- CN102521411B CN102521411B CN 201110447743 CN201110447743A CN102521411B CN 102521411 B CN102521411 B CN 102521411B CN 201110447743 CN201110447743 CN 201110447743 CN 201110447743 A CN201110447743 A CN 201110447743A CN 102521411 B CN102521411 B CN 102521411B
- Authority
- CN
- China
- Prior art keywords
- formula
- character
- binary tree
- business
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种公式及公式数据处理装置,包括:配置管理单元,用于读取业务配置参数;缓存单元,存储不同业务服务对应的公式;解析单元,获取公式和与公式对应的业务标识,根据配置参数对公式进行拆分和解析,循环处理公式的字符串中的每个字符,生成数据结构集合;运算单元,响应计算请求,根据数据结构集合中的运算符和参与运算的量构造二叉树,根据业务标识对数据集合进行分组,调用业务适配器将分组传送给相应的业务处理服务进行处理,得到业务数据,将业务数据替换到二叉树中与业务数据对应的公式所在的位置,基于二叉树计算得到运算结果。为系统带来统一的公式处理机制,提供系统运行效率和稳定性。本发明还提供了一种公式数据处理方法。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及公式及公式数据处理装置和公式及公式数据处理方法。
背景技术
在目前的很多软件系统中都需要对一些公式作处理,如在财务系统,税务系统,HR系统以及很多工业应用系统,但在这些系统中对公式的处理都没有一种通用的处理机制,都只能解决各自的问题,代码的重用程度不高,后期的维护复杂度加大,模块的可扩展性降低,对公式的支持单一,导致产品的易用性不好,软件的研发成本增加。
在很多情况下,为了提高产品的运行效率和开发效率,还需要实现对象间的运算,但在目前的软件系统中都避开了这种处理方式,牺牲了软件的效率。
在通常的软件研发过程中,无论是软件平台部分还是产品开发部分,也需要对一些公式处理的效率指标进行分析、需要对用户数据的公式进行跟踪调试,如果产品中存在很多不同公式解析方法,要作一个统一的分析处理是一件费力、费时的事情。在现有的部分系统中,如果要对不同系统间的公式解析和公式计算进行整合,还面临着这些不同的系统在之前的开发过程中固有的格式兼容问题,例如有的系统是用逗号做参数分隔符,有的是用分号做参数分隔符等。
并且在很多系统中对公式的计算都是依次的单个运算,有N个业务公式就至少需要向对应的业务服务发送N次计算请求,占用大量的服务器资源。
因此,需要一种公式处理技术,可以解决上述技术问题。
发明内容
基于上述背景技术的考虑,本发明的一个目的是提供一种公式及公式数据处理装置,本发明的另一目的是提供一种公式及公式数据处理方法,其可以提供一种通用的公式处理机制,可以将对象作为参数来输入,提高了系统的运行效率。
根据本发明的一个方面,提供了一种公式及公式数据处理装置,包括:配置管理单元,用于读取配置文件中不同业务模块的配置参数并存储在缓存单元中,所述配置参数包括与所述业务模块对应的业务标识、业务服务库文件名及路径、分隔符、实现运算符重载的库文件名及路径;所述缓存单元,接收从公式注册接口输入的不同业务标识对应的公式并进行缓存,以及存储公式解析结果和所述配置参数;所述解析单元,获取所述缓存单元中的所述公式和与所述公式对应的业务标识,根据所述配置参数对所述公式进行拆分和解析,循环处理所述公式的字符串中的每个字符,生成计算机语言能够识别的含有公式的数据结构集合;运算单元,响应计算请求,根据每个所述数据结构集合中的运算符和参与运算的量构造二叉树,根据业务标识对所述数据结构集合进行分组,调用业务适配器将经过分组后的公式集合传送给相应的业务处理服务进行处理,得到业务数据,将所述业务数据替换到所述二叉树中与所述业务数据对应的公式所在的位置,形成一个具有业务数据的二叉树结构的公式数据结构体,基于所述二叉树计算得到运算结果。
在该技术方案中,可以解决所有类似y=f(x)的公式解析和运算,并支持公式的嵌套,提供一种通用的处理机制。
在上述技术方案中,优选地,所述解析单元可以包括:判断子单元,判断当前从所述字符串中取出的字符的类型;逻辑处理子单元,根据字符的不同类型选择相应的处理逻辑,将处理结果返回到所述字符串中最后一个字符所在的位置,所述字符的类型包括字母、数字、分隔符和运算符。针对每个字符的类型有相应的处理逻辑,得到结构性的数据,在调试状态可以清晰地看到日志中记录的各个公式的结构。
在上述技术方案中,优选地,所述运算单元在构造所述二叉树时,将所述二叉树的根节点设置为所述公式集合中的运算符,将所述二叉树的左右叶子节点设置为参与运算的量,按照从所述二叉树的左树到所述二叉树的右树的方向顺序进行递归运算,得到计算结果;所述运算单元在进行运算时,还判断参与运算的量是否是复杂数据类型,若是复杂数据类型,则根据存储的实现运算符重载的库文件名及路径,反射调用当前运算符相应的服务接口进行计算,返回一个复杂数据对象,将所述复杂数据对象放入所述二叉树中继续从左到右进行运算,得到计算结果。这种结构树准确体现了公式中的各种运算关系以及参与运算的量,并且在运算时,可以按照公式中运算符的优先级先后顺序的高低进行运算,进一步保证运算结果的准确性。在运算时,也并不是对各公式进行单个依次运算,无需占用大量的服务器资源,提高了运算效率,因为相同的公式计算一次之后,结果会存入缓存中,下次计算直接取出,无需再次进行业务计算。
在上述技术方案中,优选地,所述配置管理单元按照配置文件中指定的映射关系将所述配置参数进行缓存,所述配置参数包括所述业务标识和分隔符的对应关系、业务标识和业务处理服务库文件的对应关系、业务标识和运算符重载库文件的对应关系,所述解析单元根据与所述业务标识对应的分隔符对所述公式进行解析拆分,例如有的系统公式是FS(″6001″,″″,″年″,″月″,″贷″),有的系统公式是Fee(6001,年,月,贷),这样在FS公式对应的业务系统中定义双引号与逗号作分隔符,Fee公式对应的业务系统用逗号做分隔符即可。
在上述技术方案中,优选地,所述缓存单元还将输入的公式与所述公式的业务标识进行关联缓存,具有相同所述业务标识的公式存储在同一组中。
根据本发明的技术方案,可以解决所有类似y=f(x)的公式解析和运算,并支持公式的嵌套,提供一种通用的处理机制;可以实现对象间的运算,可以将对象作为参数输入;在调试状态可以清晰的查看到日志中记录的各个公式的结构和处理对应的公式耗费的时间;可以通过配置关键字的方式,解决诸如同一系统中不同模块公式格式不同的问题;可以对公式进行分组处理,提高运行效率。
根据本发明的又一方面,还提供了一种公式数据处理方法,包括:步骤202,读取配置文件中不同业务服务的配置参数,接收从公式注册接口输入的不同业务标识对应的公式,根据所述配置参数对所述公式进行拆分和解析,循环处理所述公式的字符串中的每个字符,生成计算机语言能够识别的含有公式的数据结构集合,其中,所述配置参数包括分隔符、业务处理服务库文件名及路径和运算符重载库文件名及路径分别与业务标识的对应关系;步骤204,响应计算请求,根据所述含有公式的数据结构集合中的运算符和参与运算的量构造二叉树,根据业务标识对所述数据结构集合进行分组,并根据存储的业务标识对应的业务服务库文件名和路径,反射调用相应的业务处理服务接口处理每个分组,得到业务数据,将所述业务数据替换到所述二叉树中与所述业务数据对应的公式所在的位置,形成一个具有业务数据的二叉树结构的公式数据结构体,基于所述二叉树计算得到运算结果。
在上述技术方案中,优选地,循环处理所述公式对应的字符串中的每个字符的过程包括:判断当前取出的字符的类型,若当前取出的字符是字母,则调用字符处理逻辑对所述字符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;若当前取出的字符是数字,则调用数字处理逻辑对所述数字进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;若当前取出的字符是分隔符,则调用分隔符处理逻辑对所述分隔符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;若当前取出的字符是运算符,则调用运算符处理逻辑对所述运算符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值。
在上述技术方案中,优选地,所述步骤204还可以包括:所述二叉树的根节点设置为所述公式集合中的运算符,所述二叉树的左右叶子节点设置为参与运算的量,定义所述二叉树的左树的优先级高于所述二叉树的右树,在进行数据计算时,判断参与运算的量是否为复杂数据类型,如果是复杂数据类型,则根据存储的实现运算符重载的库文件名及路径,反射调用当前运算符相应的服务接口进行计算,返回一个复杂数据对象,将所述复杂数据对象放入所述二叉树中继续从左到右进行运算,得到计算结果。
在上述技术方案中,优选地,所述步骤202还包括:按照指定的映射关系将所述配置参数进行缓存,所述配置参数包括业务标识和分隔符的对应关系,根据与所述业务标识对应的分隔符对所述公式进行拆分。分隔符例如逗号、分号。
在上述技术方案中,优选地,还可以包括:将输入的公式与所述公式的业务标识进行关联缓存,具有相同所述业务标识的公式存储在同一组中。
根据本发明的技术方案,可以解决所有类似y=f(x)的公式解析和运算,并支持公式的嵌套,提供一种通用的处理机制;可以实现对象间的运算,可以将对象作为参数输入;在调试状态可以清晰的查看到日志中记录的各个公式的结构和处理对应的公式耗费的时间;可以通过配置关键字的方式,解决诸如同一系统中不同模块公式格式不同的问题;可以对公式进行分组处理,提高运行效率。
附图说明
图1示出了根据本发明的实施例的公式及公式数据处理装置的框图;
图2示出了根据本发明的实施例的公式及公式数据处理过程示意图;
图3示出了根据本发明的实施例的对公式进行缓存的示意图;
图4示出了根据本发明的实施例的公式解析的流程图;
图5示出了根据本发明的实施例的公式解析的流程图;
图6示出了根据本发明的实施例的公式数据处理方法的流程图;以及
图7示出了根据本发明的一个具体实施例在进行公式数据计算时的数据结构图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
图1示出了根据本发明的实施例的公式及公式数据处理装置的框图。
如图1所示,根据本发明的实施例的公式及公式数据处理装置100包括:配置管理单元102,用于读取配置文件中不同业务模块的配置参数并存储在缓存单元104中,所述配置参数包括与所述业务模块对应的业务标识、业务服务库文件名及路径、分隔符、实现运算符重载的库文件名及路径;缓存单元104,接收从公式注册接口输入的不同业务标识对应的公式并进行缓存,以及存储所述配置参数和解析单元106产生的公式解析结果;所述解析单元106,获取所述缓存单元104中的所述公式和与所述公式对应的业务标识,根据所述配置参数对所述公式进行拆分和解析,循环处理所述公式的字符串中的每个字符,生成计算机语言能够识别的含有公式的数据结构集合;运算单元108,响应计算请求,根据每个所述数据结构集合中的运算符和参与运算的量构造二叉树,根据业务标识对所述数据结构集合进行分组,调用业务适配器将经过分组后的公式集合传送给相应的业务处理服务进行处理,得到业务数据,将所述业务数据替换到所述二叉树中与所述业务数据对应的公式所在的位置,形成一个具有业务数据的二叉树结构的公式数据结构体,基于所述二叉树计算得到运算结果。
在该技术方案中,可以解决所有类似y=f(x)的公式解析和运算,并支持公式的嵌套,提供一种通用的处理机制。
在上述技术方案中,优选地,配置的业务服务从一个给定的基类继承,配置的实现运算符重载的库文件中的类从一个给定的基类;所述解析单元106可以包括:判断子单元1062,判断当前从所述字符串中取出的字符的类型;逻辑处理子单元1064,根据字符的不同类型选择相应的处理逻辑,将处理结果返回到所述字符串中最后一个字符所在的位置,所述字符的类型包括字母、数字、分隔符和运算符。针对每个字符的类型有相应的处理逻辑,得到结构性的数据,在调试状态可以清晰地看到日志中记录的各个公式的结构。
在上述技术方案中,优选地,所述运算单元108在构造所述二叉树时,将所述二叉树的根节点设置为所述公式集合中的运算符,将所述二叉树的左右叶子节点设置为参与运算的量,按照从所述二叉树的左树到所述二叉树的右树的方向顺序进行递归运算,得到计算结果;所述运算单元108在进行运算时,还判断参与运算的量是否是复杂数据类型,若是复杂数据类型,则根据存储的实现运算符重载的库文件名及路径,反射调用当前运算符相应的服务接口进行计算,返回一个复杂数据对象,将所述复杂数据对象放入所述二叉树中继续从左到右进行运算,得到计算结果。这种结构树准确体现了公式中的各种运算关系以及参与运算的量,并且在运算时,可以按照先后顺序来进行运算,进一步保证运算结果的准确性。在运算时,也并不是对各公式进行单个依次运算,无需占用大量的服务器资源,提高了运算效率。
在上述技术方案中,优选地,所述配置管理单元102按照配置文件中指定的映射关系将所述配置参数进行缓存,所述配置参数包括所述业务标识和分隔符的对应关系,所述解析单元根据与所述业务标识对应的分隔符对所述公式进行拆分。
在上述技术方案中,优选地,所述缓存单元104还将输入的公式与所述公式的业务标识进行关联缓存,具有相同所述业务标识的公式存储在同一组中。
根据本发明的技术方案,可以解决所有类似y=f(x)的公式解析和运算,并支持公式的嵌套,提供一种通用的处理机制;可以实现对象间的运算,可以将对象作为参数输入;在调试状态可以清晰的查看到日志中记录的各个公式的结构和处理对应的公式耗费的时间;可以通过配置关键字的方式,解决诸如同一系统中不同模块公式格式不同的问题;可以对公式进行分组处理,提高运行效率。
在此,应该理解,本发明提供的一种通用的公式及公式数据处理装置,可以应用于财务系统、报表系统、生产制造系统、人事系统、税务系统,以及其它所有需要采用数学公式的系统;并且可以自动扩展到一些应用或者计算比较特殊的领域,实现对象间的运算;通过将这个装置应用到全系统中,可以为系统带来统一的公式处理机制,提高系统的运行效率和稳定性。
图2示出了根据本发明的实施例的公式数据处理原理示意图。
如图2所示,描述了该公式及公式数据处理装置的内部系统结构图,包括公式缓存组件(对应图1中的缓存单元104),公式解析组件(对应图1中的解析单元106),四则运算组件(对应图1中的运算单元108),配置管理组件(对应图1中的配置单元102)、对象数据处理组件和业务适配器,各个模块之间协调运行过程如下:
步骤302,配置管理组件在公式及公式数据处理装置初始化时读取配置参数(配置参数包括分隔符以及与分隔符对应的业务标识),并放入内存。公式缓存组件通过公式注册接口接收不同业务模块的公式注册请求,并存储在对应的缓冲区中,注册的公式包括公式名称和业务标志(即业务标识)。
步骤304,公式解析组件接收传入的公式,响应解析请求,具体解析过程如下:
读取在步骤302中存放内存中的配置信息;
将传入的公式根据配置信息进行解析;
将解析的结果存储在一个Hash表中;
将该Hash数据返回至公式解析组件。
公式解析组件继续接收传入的公式,响应解析请求,过程如下:
重复步骤304的解析请求,将公式及参数转入到Hash结构的数据中;
将公式中所有的运算关系分解出来,并根据运算符号的优先级装入一个自定义的结构体中,并同时将公式按公式名称进行分组,存入一个缓存区。
步骤306,调用业务适配器,将缓存区中的公式传给不同的业务服务进行处理,得到业务数据,每个业务数据都是一个对象;
判断返回的业务数据的实际类型,如果是简单类型,则暂时放入缓存区,如果是复杂对象数据类型,例如dataTable型,则调用对象数据运算组件进行大数据的计算,并将返回结果存入该原复杂对象数据的位置;
其中,对于不同业务系统的扩展运算,不同业务领域的人员只需从对象数据运算组件的一个运算符处理基类继承,重载运算符,然后在配置文件中增加实现运算符重载的库文件名及路径。
当所有的复杂对象数据类型都处理完成后,则进行简单数据间的四则混合运算,最终得到计算结果。
下面针对图2中的相关组件进行详细说明。
(1)公式缓存组件
图3示出了公式在内存中的存储结构,具有相同业务标识的公式存储在一个相同的组中。
第一:公式缓存组件可以存储不同业务类型的公式。
第二:根据接收到的数据,分析该数据的标签特征(即业务标识),在缓存中建立不同的数据缓存段。将符合对应数据缓存段特征的数据存入该数据缓存段对应的缓存区,以标签作为缓存的页标签。
第三:当向缓存区发出获取数据的请求时,根据请求的相关标签快速定位到相关的数据缓存页并从缓存中取出所需数据。
(2)公式解析组件
该公式解析组件主要用来将单个或者多个公式解析成一定的计算机开发语言可以识别并处理的数据结构。
该公式解析组件可以分为两种解析方式,一种是单个公式或单个公式组成的集合的批量解析,例如,可以将单个公式数组如:{SLQC(″2010″,″1002″,″″,″″),QC(″1131″,″01″,″年″,″月″,″借″,″原币″,[部门=″001″,客户=″002″])}解析成如下表1所示的数据结构:
表1
另一种是多个公式组合成的一个复杂公式的解析如Formula1(…,)+Formula2(…),解析后的结果是对单个公式的再次封装成的一个结构体,可以如下表2所示的数据结构:
表2
在String[]数组中存放的是对单个最小公式(如:Formula2(…))解析后的各个元素,包括公式参数,公式名称,参数个数等。
如图4所示,在步骤402,首先响应公式解析请求;在步骤404,对公式进行解析处理;在步骤406,将公式解析成计算机可识别并处理的数据结构。
下面参照图5对公式的解析过程进行详细说明。
如图5所示,在步骤502,接收到传入的公式字符串和业务标识,进行数据的初始处理:封装并转换到组件的数据对象中,构建合适的数据结构。
在步骤504,读取配置信息,基于读取的配置信息,根据业务标识获取对应的分隔符。
在步骤506,根据获取的分隔符对公式字符串进行拆分和解析。
在步骤508,循环取出每一个字符,判断当前取出的字符的类型:
如果当前取出的字符是普通字符(例如字母),则调用字符处理逻辑,返回当前处理结果到最后一个字符在公式字符串中的位置;
如果取出的当前字符是一个数字(0-9或者小数点),则进入对应的数字数据处理逻辑,返回当前处理结果到最后一个字符在公式字符串中的位置;
如果当前取出的字符是配置信息中指定的分隔符,则进入分隔符处理逻辑,返回当前处理结果到最后一个字符在公式字符串中的位置;
如果当前取出的字符是运算符,则进入运算符处理逻辑,返回当前处理结果到最后一个字符在公式字符串中的位置。
以上的每一个处理逻辑都把分析出的结果存入一个缓存区中,该缓存区由公式缓存组件管理,同时将分析结果返回。
在步骤510,将分析结果进行格式处理。
在步骤512,生成结构性数据并输出给调用方。
(3)四则运算组件
四则运算组件主要包括两部分:运算符部分和数据计算部分。
第一:根据公式解析组件解析产生的公式集合,将运算符及各个参与运算的量构建成一棵二叉树。
第二:这棵二叉树的根节点是运算符号,左右叶子节点是参与运算的量。
第三:在该二叉树中,左树的优先级高于右树,在运算时,以从左向右的方向进行运算。
第四:对公式解析组件分析产生的公式集合进行分组并调用相应业务处理的服务,得到业务数据。
第五:将业务数据替换到这棵二叉树中生成对应业务数据的公式所在位置。
第六:从左向右进行计算并得到计算结果,其中,在运算时分两种情况:
1)如果当前参与运算的量是简单数据类型,例如字符型、数字型、日期型,则对这些数据进行直接运算。
2)如果当前参与运算的量是复杂数据类型,例如datatable等,则调用相应业务服务的复杂数据计算服务处理,并得到最后的计算结果。
(4)配置管理组件
本配置管理组件,主要用来管理当前发明的配置信息,主要包括公式分隔符配置和扩展业务模块配置。
如图6所示,在步骤602,在公式及公式数据处理装置启动、初始化时,接收到读取配置请求。
在步骤604,判断是否存在配置文件,若不存在,则进入步骤606,设置默认配置信息,若不存在,则进入步骤608。
在步骤608,读取配置信息并存入缓存。配置管理组件读取的分隔符配置信息,主要包括:公式的参数分隔符(如逗号,分号等),业务扩展模块标识符;将该分割符配置信息读取出来之后,按配置中指定的映射关系存储在内存中。配置管理组件还读取扩展业务模块的配置信息,主要包括:扩展业务模块的程序集位置,扩展业务模块的服务接口,扩展业务模块的标识符,将该扩展业务模块的配置信息读取出来之后,按配置中指定的映射关系存储在内存中。
图6示出了根据本发明的实施例的公式及公式数据处理方法的流程图。
如图6所示,根据本发明的实施例的公式数据处理方法,包括:步骤202,读取配置文件中不同业务服务的配置参数,接收从公式注册接口输入的不同业务标识对应的公式,根据配置参数对公式进行拆分和解析,循环处理公式的字符串中的每个字符,生成计算机语言能够识别的含有公式的数据结构集合,其中,所述配置参数包括分隔符、业务处理服务库文件名及路径和运算符重载库文件名及路径分别与业务标识的对应关系;步骤204,响应计算请求,根据所述含有公式的数据结构集合中的运算符和参与运算的量构造二叉树,根据业务标识对所述数据结构集合进行分组,并根据存储的业务标识对应的业务服务库文件名和路径,反射调用相应的业务处理服务接口处理每个分组,得到业务数据,将所述业务数据替换到所述二叉树中与所述业务数据对应的公式所在的位置,形成一个具有业务数据的二叉树结构的公式数据结构体,基于所述二叉树计算得到运算结果。
在上述技术方案中,优选地,循环处理所述公式对应的字符串中的每个字符的过程包括:判断当前取出的字符的类型,若当前取出的字符是字母,则调用字符处理逻辑对所述字符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;若当前取出的字符是数字,则调用数字处理逻辑对所述数字进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;若当前取出的字符是分隔符,则调用分隔符处理逻辑对所述分隔符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;若当前取出的字符是运算符,则调用运算符处理逻辑对所述运算符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值。
在上述技术方案中,优选地,所述步骤204还可以包括:所述二叉树的根节点设置为所述公式集合中的运算符,所述二叉树的左右叶子节点设置为参与运算的量,定义所述二叉树的左树的优先级高于所述二叉树的右树,在进行数据计算时,判断参与运算的量是否为复杂数据类型,如果是复杂数据类型,则根据存储的实现运算符重载的库文件名及路径,反射调用当前运算符相应的服务接口进行计算,返回一个复杂数据对象,将所述复杂数据对象放入所述二叉树中继续从左到右进行运算,得到计算结果。
在上述技术方案中,优选地,所述步骤202还包括:按照指定的映射关系将所述配置参数进行缓存,所述配置参数包括业务标识和分隔符的对应关系,根据与所述业务标识对应的分隔符对所述公式进行拆分。分隔符例如逗号、分号。
在上述技术方案中,优选地,还可以包括:将输入的公式与所述公式的业务标识进行关联缓存,具有相同所述业务标识的公式存储在同一组中。
根据本发明的技术方案,可以解决所有类似y=f(x)的公式解析和运算,并支持公式的嵌套,提供一种通用的处理机制;可以实现对象间的运算,可以将对象作为参数输入;在调试状态可以清晰的查看到日志中记录的各个公式的结构和处理对应的公式耗费的时间;可以通过配置关键字的方式,解决诸如同一系统中不同模块公式格式不同的问题;可以对公式进行分组处理,提高系统的运行效率。
如图7所示,如果要计算FS(″6001″,″″,″年″,″月″,″贷″)+Fee(″6051″,″″,″年″,″月″,″贷″)×1.1+100这样的一个财务公式,在计算时构建的一个二叉树的数据结构图(参见图7)。
第一步:使用者需要调整配置文件,包括公式名为FS和Fee对应的业务标识;FS和Fee分别对应的业务模块计算数据时的库文件(如DLL文件)名及路径,计算数据的实现类从装置中指定的基类继承;如果需要对象复杂对象级的运算,还需要配置实现运算符重载的库文件名及路径;实现类从装置中指定的基类继承。
第二步:将这个组合公式根据上面的技术方案,将各个计算量:FS(″6001″,″″,″年″,″月″,″贷″)、Fee(″6051″,″″,″年″,″月″,″贷″)、1.1、100及运算符的优先级构造成一个二叉树。
第三步:将组合公式中的子公式进行解析,生成一个公式结构体替换原公式所在位置的计算量;图7中的701即FS(″6001″,″″,″年″,″月″,″贷″)解析后的公式结构体;702是Fee(″6051″,″″,″年″,″月″,″贷″)的公式结构体。
第四步:根据上面的技术方案进行计算,反射调用公式名称为FS对应的业务服务接口并传入701,得到计算结果,再将701替换成计算后的数据;反射调用公式名称为Fee对应的业务服务接口并传入702,得到计算结果,再将702替换为计算后的数据;
第五步:当整个二叉树上的计算量都是最终结果时,再进行最后一次计算,得到计算结果。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种公式及公式数据处理装置,其特征在于,包括:
配置管理单元,用于读取配置文件中不同业务模块的配置参数并存储在缓存单元中,所述配置参数包括分隔符、业务处理服务库文件名及路径和运算符重载库文件名及路径分别与业务标识的对应关系;
所述缓存单元,接收从公式注册接口输入的不同业务标识对应的公式并进行缓存,以及存储所述配置参数和解析单元产生的公式解析结果;
所述解析单元,获取所述缓存单元中的所述公式和与所述公式对应的业务标识,根据所述配置参数对所述公式进行拆分和解析,循环处理所述公式的字符串中的每个字符,生成含有公式的数据结构集合;
运算单元,响应计算请求,根据每个所述数据结构集合中的运算符和参与运算的量构造二叉树,根据业务标识对所述数据结构集合进行分组,调用业务适配器将经过分组后的公式集合传送给相应的业务处理服务进行处理,得到业务数据,将所述业务数据替换到所述二叉树中与所述业务数据对应的公式所在的位置,形成一个具有业务数据的二叉树结构的公式数据结构体,基于所述二叉树计算得到运算结果,所述运算单元在构造所述二叉树时,将所述二叉树的根节点设置为所述公式集合中的运算符,将所述二叉树的左右叶子节点设置为参与运算的量,按照从所述二叉树的左树到所述二叉树的右树的方向顺序进行递归运算,得到计算结果,所述运算单元在进行运算时,还判断参与运算的量是否是复杂数据类型,若是复杂数据类型,则根据所述实现运算符重载的库文件名及路径,反射调用当前运算符相应的服务接口进行计算,返回一个复杂数据对象,将所述复杂数据对象放入所述二叉树中继续从左到右进行运算,得到计算结果。
2.根据权利要求1所述的公式及公式数据处理装置,其特征在于,所述解析单元包括:
判断子单元,判断当前从所述字符串中取出的字符的类型;
逻辑处理子单元,根据字符的不同类型选择相应的处理逻辑,将处理结果返回到所述字符串中最后一个字符所在的位置,所述字符的类型包括字母、数字、分隔符和运算符。
3.根据权利要求1所述的公式及公式数据处理装置,其特征在于,所述配置管理单元按照配置文件中指定的映射关系将所述配置参数进行缓存,所述解析单元根据与所述业务标识对应的分隔符对所述公式进行拆分。
4.根据权利要求1至3中任一项所述的公式及公式数据处理装置,其特征在于,所述缓存单元将输入的公式与所述公式的业务标识进行关联缓存,具有相同所述业务标识的公式存储在同一组中。
5.一种公式及公式数据处理方法,其特征在于,包括:
步骤202,读取配置文件中不同业务服务的配置参数,接收从公式注册接口输入的不同业务标识对应的公式,根据所述配置参数对所述公式进行拆分和解析,循环处理所述公式的字符串中的每个字符,生成含有公式的数据结构集合,其中,所述配置参数包括分隔符、业务处理服务库文件名及路径和运算符重载库文件名及路径分别与业务标识的对应关系;
步骤204,响应计算请求,根据所述含有公式的数据结构集合中的运算符和参与运算的量构造二叉树,根据业务标识对所述数据结构集合进行分组,并根据存储的业务标识对应的业务服务库文件名和路径,反射调用相应的业务处理服务接口处理每个分组,得到业务数据,将所述业务数据替换到所述二叉树中与所述业务数据对应的公式所在的位置,形成一个具有业务数据的二叉树结构的公式数据结构体,基于所述二叉树计算得到运算结果,所述二叉树的根节点设置为所述公式集合中的运算符,所述二叉树的左右叶子节点设置为参与运算的量,定义所述二叉树的左树的优先级高于所述二叉树的右树,在进行数据计算时,判断参与运算的量是否为复杂数据类型,如果是复杂数据类型,则根据存储的实现运算符重载的库文件名及路径,反射调用当前运算符相应的服务接口进行计算,返回一个复杂数据对象,将所述复杂数据对象放入所述二叉树中继续从左到右进行运算,得到计算结果。
6.根据权利要求5所述的公式及公式数据处理方法,其特征在于,循环处理所述公式对应的字符串中的每个字符的过程包括:
判断当前取出的字符的类型,若当前取出的字符是字母,则调用字符处理逻辑对所述字符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;
若当前取出的字符是数字,则调用数字处理逻辑对所述数字进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;
若当前取出的字符是分隔符,则调用分隔符处理逻辑对所述分隔符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值;
若当前取出的字符是运算符,则调用运算符处理逻辑对所述运算符进行处理,返回处理结果到所述字符串中最后一个字符所在的位置,将所述位置在当前字符串中的位置加1,并作为下一个循环的起始值。
7.根据权利要求5所述的公式及公式数据处理方法,其特征在于,所述步骤202还包括:
按照指定的映射关系将所述配置参数进行缓存,所述配置参数包括业务标识和分隔符的对应关系,根据与所述业务标识对应的分隔符对所述公式进行拆分。
8.根据权利要求5至7中任一项所述的公式及公式数据处理方法,其特征在于,还包括:
将输入的公式与所述公式的业务标识进行关联缓存,具有相同所述业务标识的公式存储在同一组中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110447743 CN102521411B (zh) | 2011-12-28 | 2011-12-28 | 公式及公式数据处理装置和公式及公式数据处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110447743 CN102521411B (zh) | 2011-12-28 | 2011-12-28 | 公式及公式数据处理装置和公式及公式数据处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102521411A CN102521411A (zh) | 2012-06-27 |
CN102521411B true CN102521411B (zh) | 2013-09-18 |
Family
ID=46292324
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110447743 Active CN102521411B (zh) | 2011-12-28 | 2011-12-28 | 公式及公式数据处理装置和公式及公式数据处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521411B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103023766A (zh) * | 2012-11-23 | 2013-04-03 | 山东电力集团公司 | 基于表达式判断的动态路由方法 |
CN104063365B (zh) * | 2013-03-19 | 2018-08-21 | 福建福昕软件开发股份有限公司 | 在pdf文档中插入对象的方法 |
CN103164393B (zh) * | 2013-04-12 | 2016-03-09 | 中国农业银行股份有限公司 | 报表公式处理方法和系统 |
CN103679353A (zh) * | 2013-12-02 | 2014-03-26 | 北京华胜天成科技股份有限公司 | 报表处理的方法及系统 |
CN105224293A (zh) * | 2014-05-30 | 2016-01-06 | 阿里巴巴集团控股有限公司 | 目标对象的生成方法及服务器 |
CN105447294A (zh) * | 2014-08-21 | 2016-03-30 | 中芯国际集成电路制造(上海)有限公司 | 用于集成电路制造的数据处理方法和装置 |
CN105405002A (zh) * | 2015-09-24 | 2016-03-16 | 国网山东省电力公司 | 基于sap平台的公式数据配置方法及系统 |
CN105302556B (zh) * | 2015-10-27 | 2018-10-16 | 北京京东尚科信息技术有限公司 | 实现计算的方法和系统以及服务器装置 |
CN105354324B (zh) * | 2015-11-17 | 2018-06-08 | 国云科技股份有限公司 | 一种基于hc-sql的树状结构系统及其实现方法 |
CN107967247A (zh) * | 2016-10-19 | 2018-04-27 | 航天信息股份有限公司 | 用于生成报表公式的方法、报表计算方法及其装置 |
CN106528260A (zh) * | 2016-11-10 | 2017-03-22 | 国云科技股份有限公司 | 一种基于公式的自动计算方法 |
CN107153678A (zh) * | 2017-04-18 | 2017-09-12 | 北京思特奇信息技术股份有限公司 | 一种短信提醒的触发方法及装置 |
CN107316138A (zh) * | 2017-06-20 | 2017-11-03 | 王建 | 自定义项目合规性检测方法及其系统 |
CN107480367A (zh) * | 2017-08-10 | 2017-12-15 | 山东博远重工有限公司 | 一种钢模板设计计算辅助工具 |
CN109426972A (zh) * | 2017-08-21 | 2019-03-05 | 阿里巴巴集团控股有限公司 | 订单页面的处理方法、装置和系统 |
CN109962843B (zh) * | 2017-12-22 | 2021-04-27 | 上海威派格智慧水务股份有限公司 | 物联网网关实现边缘信息处理的方法 |
CN108345658B (zh) * | 2018-01-30 | 2020-12-01 | 中国平安人寿保险股份有限公司 | 算法计算轨迹的分解处理方法、服务器及存储介质 |
CN110209376A (zh) * | 2018-02-28 | 2019-09-06 | 无锡锐泰节能系统科学有限公司 | 一种应用系统中的公式设计及解析方法 |
CN109543170B (zh) * | 2018-11-26 | 2023-07-07 | 深圳开立生物医疗科技股份有限公司 | 基于超声设备的公式编辑方法、超声设备和存储介质 |
CN109783702A (zh) * | 2018-12-27 | 2019-05-21 | 国网上海市电力公司 | 一种基于二叉树的字符串表达式计算方法及装置 |
CN110084239B (zh) * | 2019-04-10 | 2022-09-06 | 中国科学技术大学 | 降低离线手写数学公式识别时网络训练过拟合的方法 |
CN110069743B (zh) * | 2019-04-29 | 2023-02-24 | 武汉轻工大学 | 多模式微积分计算方法、装置、设备及存储介质 |
CN110333990B (zh) * | 2019-05-29 | 2023-06-27 | 创新先进技术有限公司 | 数据处理方法以及装置 |
CN111045647A (zh) * | 2019-11-20 | 2020-04-21 | 深圳市云智融科技有限公司 | 一种信息确定的方法及相关设备 |
CN111311094B (zh) * | 2020-02-14 | 2022-05-24 | 上海东普信息科技有限公司 | 供应链项目分析方法、装置、设备及存储介质 |
CN111694643B (zh) * | 2020-05-12 | 2023-04-11 | 中国科学院计算技术研究所 | 一种面向图神经网络应用的任务调度执行系统及方法 |
CN111539383B (zh) * | 2020-05-22 | 2023-05-05 | 浙江蓝鸽科技有限公司 | 公式知识点识别方法及装置 |
CN111767071A (zh) * | 2020-07-02 | 2020-10-13 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种数据的显示调整方法、装置及电子设备 |
CN113157717B (zh) * | 2021-05-26 | 2024-07-12 | 深圳平安智汇企业信息管理有限公司 | 长数据链路的缓存刷新方法、装置、设备及存储介质 |
CN113539405B (zh) * | 2021-06-24 | 2024-03-19 | 北京天健源达科技股份有限公司 | 电子病历表格运算控件的处理方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101008954A (zh) * | 2007-01-30 | 2007-08-01 | 金蝶软件(中国)有限公司 | 联机分析处理系统中多维表达式数据缓存的方法和装置 |
CN101651679A (zh) * | 2009-09-16 | 2010-02-17 | 清华大学 | 一种基于树形结构的数据帧解析和处理系统和方法 |
CN101763340A (zh) * | 2009-12-22 | 2010-06-30 | 金蝶软件(中国)有限公司 | 一种业务单据转换的方法、装置及系统 |
-
2011
- 2011-12-28 CN CN 201110447743 patent/CN102521411B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101008954A (zh) * | 2007-01-30 | 2007-08-01 | 金蝶软件(中国)有限公司 | 联机分析处理系统中多维表达式数据缓存的方法和装置 |
CN101651679A (zh) * | 2009-09-16 | 2010-02-17 | 清华大学 | 一种基于树形结构的数据帧解析和处理系统和方法 |
CN101763340A (zh) * | 2009-12-22 | 2010-06-30 | 金蝶软件(中国)有限公司 | 一种业务单据转换的方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102521411A (zh) | 2012-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521411B (zh) | 公式及公式数据处理装置和公式及公式数据处理方法 | |
US8340995B2 (en) | Method and system of using artifacts to identify elements of a component business model | |
US11164131B2 (en) | Measure factory | |
KR100305373B1 (ko) | 범용분석시스템 | |
CN105045869A (zh) | 基于多数据中心的自然资源地理空间数据组织方法和系统 | |
CN101778017A (zh) | 一种大型机联机交易的故障事件处理方法及服务器 | |
Lei et al. | A unified approach for location-allocation analysis: integrating GIS, distributed computing and spatial optimization | |
CN112860777B (zh) | 数据处理方法、装置及设备 | |
CN109977175B (zh) | 数据配置查询方法和装置 | |
CN108460068A (zh) | 报表导入导出的方法、装置、存储介质及终端 | |
CN108345658A (zh) | 算法计算轨迹的分解处理方法、服务器及存储介质 | |
CN108427709A (zh) | 一种多源海量数据处理系统及方法 | |
CN103198099A (zh) | 基于云计算的面向电信业务的数据挖掘应用方法 | |
CN109255587A (zh) | 一种工作数据的协同处理方法及装置 | |
CN111522840A (zh) | 标签的配置方法、装置、设备及计算机可读存储介质 | |
CN109005049B (zh) | 一种互联网环境下基于Bigraph一致性算法的服务组合方法 | |
CN107871055A (zh) | 一种数据分析方法和装置 | |
CN102707938A (zh) | 表形式软件规格制作支援方法及装置 | |
CN114860851A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN101770627A (zh) | 服务相对信任度评价方法和装置 | |
CN111260452B (zh) | 一种税务大数据模型的构建方法及系统 | |
CN114722789A (zh) | 数据报表集成方法、装置、电子设备及存储介质 | |
CN108964973B (zh) | 面向Web基于Bigraph替换算法的服务质量监控方法 | |
WO2022004455A1 (ja) | 入出力をカテゴライズされたオブジェクト間の協働を、配置可能なオブジェクトカテゴリが定義されたオブジェクトグループを利用して実現するコンピュータシステム及びアプリケーションプログラミングインターフェイス装置 | |
JP4772506B2 (ja) | 情報処理方法、情報処理システムおよびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |