业务处理方法及装置与流程

文档序号:31935329发布日期:2022-10-26 01:37阅读:75来源:国知局
业务处理方法及装置与流程

1.本公开涉及数据处理技术领域,具体涉及到一种业务处理方法及装置。


背景技术:

2.针对不同的业务,需要开发不同的引擎进行业务数据的处理。该方式造成开发成本高,引擎的适用性差。


技术实现要素:

3.本公开的主要目的在于提供一种业务处理方法及装置。
4.为了实现上述目的,根据本公开的第一方面,提供了一种业务处理方法,包括配置业务处理用的表达式,其中,所述表达式由字段、运算符、或者函数中的一种或者多种组成;在获取到业务数据后,对业务数据进行解析以得到字段值,其中,所述字段值为表达式中的字段所对应的值;基于预建立的表达式引擎,确定所述表达式的计算结果。
5.可选地,方法还包括对计算结果进行校验。
6.可选地,方法还包括:预建立表达式引擎,其中,包括定义不可扩展的信息、以及定义可扩展接口;针对不同的业务,通过可扩展接口定义扩展的函数信息、以及通过可扩展接口定义扩展的数据类型信息。
7.可选地,定义不可扩展的信息包括:定义数据类型信息,其中,数据类型信息包括字符串(string)、数值(number)、布尔(boolean)、日期(date)、日期时间(datetime)、时间(time)、对象、和/或,可空类型;定义语法信息。
8.可选地,基于预建立的表达式引擎,确定所述表达式的计算结果包括:将表达式中中的内容注入表达式引擎中,以得到所述表达式的计算结果。
9.根据本公开的第二方面,提供了一种业务处理装置,包括:配置单元,被配置成配置业务处理用的表达式,其中,所述表达式由字段、运算符、或者函数中的一种或者多种组成;解析单元,被配置成在获取到业务数据后,对业务数据进行解析以得到字段值,其中,所述字段值为表达式中的字段所对应的值;确定单元,被配置成基于预建立的表达式引擎,确定所述表达式的计算结果。
10.可选地,装置还包括校验单元,被配置成对计算结果进行校验。
11.可选地,装置还预建立表达式引擎,其中,包括定义不可扩展的信息、以及定义可扩展接口;针对不同的业务,通过可扩展接口定义扩展的函数信息、以及通过可扩展接口定义扩展的数据类型信息;定义语法信息。
12.根据本公开的第三方面,提供了一种计算机可读存储介质,存储有计算机指令,所述计算机指令用于使所述计算机执行第一方面任意一项实现方式所述的业务处理方法。
13.根据本公开的第四方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理
器执行第一方面任意一项实现方式所述的业务处理方法。
14.在本公开实施例业务处理方法及装置中,包括:配置业务处理用的表达式,其中,所述表达式由字段、运算符、或者函数中的一种或者多种组成;在获取到业务数据后,对业务数据进行解析以得到字段值,其中,所述字段值为表达式中的字段所对应的值;基于预建立的表达式引擎,确定所述表达式的计算结果。通过可扩展的表达式引擎能够处理不同业务需求。克服相关技术中开发成本高,引擎适用性差的问题。
附图说明
15.为了更清楚地说明本公开具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
16.图1是根据本公开实施例的业务处理方法流程图;
17.图2-图5是根据本公开实施例的业务处理方法的应用示意图;
18.图6是根据本公开实施例的电子设备的示意图。
具体实施方式
19.为了使本技术领域的人员更好地理解本公开方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
20.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
21.需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
22.根据本公开实施例,提供了一种业务处理方法,如图1所示,该方法包括如下的步骤101至步骤103:
23.步骤101:配置业务处理用的表达式,其中,所述表达式由字段、运算符、或者函数中的一种或者多种组成。
24.在本实施例中,业务种类不限,可以包括单据相关的业务、业务对象相关的业务、费用相关的业务。各个类型的业务可以通过表达式实现各种复杂的计算场景。
25.用户可以通过页面按需配置表达式,示例性地,可以通过页面插入表达式所包含的内容。表达式中可插入引擎预定义的字段、还可以插入当前业务数据中字段;表达式中还可以插入引擎预先定义的运算符;表达式种还可以插入引擎支持的函数。以单据业务为例,
参考图2,通过插入字段、运算符和函数完成表达式的构建。
26.步骤102:在获取到业务数据后,对业务数据进行解析以得到字段值,其中,所述字段值为表达式中的字段所对应的值。
27.在本实施例中,完成单据相关业务的系统在接收到上传的单据后,在获取到业务数据后,可以基于表达式中的字段,利用表达式引擎的接口提取业务数据中字段值。由于业务数据中数据结构不同,取值方式也不同。
28.步骤103:基于预建立的表达式引擎,确定所述表达式的计算结果。
29.在本实施例中,在确定字段值后,可以通过表达式引擎确定计算结果。
30.示例性地,可以通过接口calculationhandle.getexpressionvalue()获取上下文,以单据组件为例,其需要实现此接口,描述自己的上下文。
31.作为本实施例一种可选的实现方式,方法还包括对计算结果进行校验。
32.在本可选的实现方式中,对计算出来的结果进行校验,可以包括校验数据类型是否正确,是否是有效数据及其他有附加条件比如设置了字段依赖性的校验。
33.进一步地,可以通过接口calculationhandle.analysisresult()对计算结果进行校验,以单据组件为例,其需要实现此接口,判断计算的结果是否符合要求。
34.作为本实施例一种可选的实现方式,方法还包括:预建立表达式引擎,其中,包括定义不可扩展的信息、以及定义可扩展接口;针对不同的业务,通过可扩展接口定义扩展的函数信息、以及通过可扩展接口定义扩展的数据类型信息。
35.在本可选的实现方式中,表达式引擎提供了一个"业务场景无关的"表达式语言的"解析与执行能力"的组件。通过一定的扩展实现后,它最终面向业务开发平台中各个需要表达式、公式、简单脚本的场景,提供实施、二次开发人员使用。表达式引擎已经完整定义了脚本语言的语法规范、类型系统,且这些部分是禁止扩展的。引擎将"可用函数"、"可用对象类型"交由业务领域扩展。最终达到平台层面的在不同业务领域,提供一致的表达式体验。
36.示例性地,如图3,引擎只提供了一个业务无关的表达式计算组件,并具备一定的扩展能力。到具体的业务场景,需要补足业务相关的知识才是可用的。业务层可开发的内容主要包括:对象的结构的定义、可用函数的定义、表达式展现形式的封装。
37.本表达式引擎提供自定义函数扩展和自定义数据类型两大特性,解决了更为复杂的数据结构场景,使表达式更容易定义,更简洁易懂,降低了客户使用表达式的成本,提高了客户单据填写的效率。
38.作为本实施例一种可选的实现方式,定义不可扩展的信息包括:
39.定义数据类型信息,其中,数据类型信息包括字符串(string)、数值(number)、布尔(boolean)、日期(date)、日期时间(datetime)、时间(time)、对象、和/或,可空类型;定义语法信息。
40.表达式引擎定义了完整的类型系统,表达式引擎的包含以下数据类型:字符串(string)、数值(number)、布尔(boolean)、日期(date)、日期时间(datetime)、时间(time)、对象。表达式引擎也支持“可空类型”。
41.可空类型:当某个变量的值可以为null的时候,必须在声明处的类型后添加“?”来标识该引用可为空。
42.fun foo(value:string?):number?{
43.//......
44.}
45.或者val bar:number?=null
46.字符串(string):使用string声明数值类型。
47.val foo=

hello

48.val bar:string=

world

49.数值(number):使用number声明数值类型。
50.布尔(boolean):使用boolean声明数值类型。
51.val b0=true
52.val b1:boolean=false
53.日期(date):使用date声明数值类型。使用date前缀的字符串形式,来声明字面量。
54.val d0:date=date

2019-05-29

55.//错误格式val d1=date

2018-5-29

56.时间(time):使用time声明数值类型。使用time前缀的字符串形式,来声明字面量。
57.日期时间(datetime):使用datetime声明数值类型。使用datetime前缀的字符串形式,来声明字面量。
58.val dt0:datetime=datetime

2019-06-29 14:38:22

59.对象:暂不支持对象的构建,但可以从外部传入对象数据。
60.使用.访问成员属性。foo如“obj.foo”运算符“.”为安全的成员访问,即只在obj非空时访问,空时则返回null。
61.数组:当前版本不支持数组的构建,可以从外部传入数组数据。
62.a.使用中括号的整型数据访问数组元素。元素下标从0开始,如a[0]。
[0063]
b.使用.size访问数组的长度。如“a.size”[0064]
c.使用.indices来构造数组的索引号的数组,该方法主要用于for语句遍历使用。
[0065]
for(i in myarray.indices){
[0066]
//myarry[]
[0067]
}
[0068]
定义变量:支持类型推断、可空类型,变量声明时必须赋值。
[0069]
val a=10//整型、不可变、不可为空
[0070]
var b=

hello

//字符串、可变、不可为空
[0071]
val c:boolean?=null/布尔类型,可空
[0072]
b=

hello world

[0073]
限定符:使用

`

来限定关键字或特殊符号。
[0074]
var`hello/world-foo*bar`:string=

new

[0075]
进一步地,表达式引擎还定义了语法规范。
[0076]
示例性地,语法规范如变量、if、when、for、with、方法调用、查询表达式;语言范式
如强类型系统:使得脚本更可维护的、ide更加友好;b.非空类型:减少npe错误;c.面向过程:降低语言使用门槛;d.属性getter:可以封装一定简单逻辑;e.其它:if/when作为表达式。
[0077]
进一步地,可扩展接口可以用于函数扩展:以"包(package)"为单位组织,可扩展函数;解析上下文(elparsecontext):用于指定在特定场景下,可以使用的函数、变量、类型;计算上下文(elcontext):用于指定计算相关的配置,如:周的开始天、最大小数位数。
[0078]
进一步地,引擎中可涉及到运算包括:
[0079]
数学运算:操作数是不可空类型:
[0080]
+:左操作数为字符串则为字符串连接;如果数值则为数值加;
[0081]-:减,操作数为数值;
[0082]
*:乘,操作数为数值;
[0083]
/:除,操作数为数值;
[0084]
%:余,操作数为数值;
[0085]
比较运算:
[0086]
==:等于,操作数类别相同,结果布尔;
[0087]
!=:不等于,操作数类别相同,结果布尔;
[0088]
》:大于,操作数为数值,结果布尔;
[0089]
<:小于,操作数为数值,结果布尔;
[0090]
>=:大于等于,操作数为数值,结果布尔;
[0091]
<=:小于等于,操作数为数值,结果布尔;
[0092]
日期、时间、日期时间将要支持比较运算;字符串不会支持比较运算;
[0093]
逻辑运算:
[0094]
||:或,操作数为布尔,结果布尔;
[0095]
&&:与,操作数为布尔,结果布尔;
[0096]
elvis运算:左侧表达式为空时,返回右侧的值。
[0097]
a?:

hello

[0098]
对象属性访问:支持普通的及空安全的成员属性访问。
[0099]
obj.a
[0100]
obj?.a
[0101]
when表达式:when表达式可作为赋值表达式。
[0102][0103]
if表达式:if表达式也作为赋值表达式。

空检查运算(elvis)?: 比较运算(comparison)>,>=,<,<= 等值比较运算(equality)==,!= 逻辑与运算(conjunction)&&lowest逻辑或运算(disjunction)||
[0123]
进一步地,关于表达式引擎中的api和spi:
[0124]
eltype&elclassifier:表达式引擎的类型系统,elclassifier定义不同的数据类型。eltype定义可空/不可空的类型。在声明变量、定义函数的参数时,都是使用eltype。
[0125]
elservice:核心服务类,提供表达式的解析、运算。
[0126]
elparsecontext:解析上下文,定义有效的对象结构、有效的变量、有效的函数。
[0127]
elcontext:执行上下文,定义运行期数值运算的精度、舍入规则、一周的开始天等。
[0128]
进一步地,关于函数,可以使用注解elfunctionspec标识扩展函数,在解析时,可以指定允许使用的函数的范围,其中base包为引擎默认提供的函数包,包括诸多基础函数,业务层可以扩展特定领域的专用函数包,基础函数包包括以下函数:数学函数,例如函数规范为min(vararg values:number):number,即返回最小数值,至少两个参数;max(vararg values:number):number即返回最小数值,至少两个参数等等数据函数,在此不做限定。
[0129]
还可包括日期时间函数,例如now():datetime,即返回当前的日期时间。dayofmonth(d:date):number dayofmonth(dt:datetime):number返回月中的第n天,[1,31]等等函数。
[0130]
还可包括字符串函数,例如,replace(s:string,search:string,replace:string):string,即替换字符串等等函数。
[0131]
作为本实施例一种可选的实现方式,基于预建立的表达式引擎,确定所述表达式的计算结果包括:将表达式中中的内容注入表达式引擎中,以得到所述表达式的计算结果。
[0132]
在本可选的实现方式中,通过变量注入、类型注入和函数注入的方式确定结果。
[0133]
变量注入的一个示例如下:
[0134][0135]
类型注入的一个示例:
[0136][0137]
函数注入的一个示例:
[0138]
val rule=elparsecontext.bu1lder()
[0139]
.withfunctionpackage()//指示使用默认的函数包,base
[0140]
.build()
[0141]
val rule=elparsecontext.builder()
[0142]
.withfunctionpackage(

base



flow

)//指示使用base和flow两个函数包
[0143]
.build()
[0144]
参考图4,以表达式引擎在单据业务中的应用为例。图中的类型定义环节,由于组件是单据的基础组成单元,参考图6比如文本组件,需要定义与单据组件相对应的数据类型,表达式引擎支持自定义的数据类型。
[0145]
上下文定义与结果校验环节,表达式上下文,需要将表达式中引用的“字段”的值从单据中解析出来,并将字段对应的值和类型注入表达式引擎。单据中每个组件的数据结构不一样,取值方式不一样。
[0146]
结果校验,是对计算出来的结果进行校验,如数据类型是否正确,是否是有效数据及其他有附加条件比如设置了字段依赖性的校验。calculationhand|e.getexpressionvalue()是获取上下文的核心接口,单据组件需要实现此接口,描述自己的上下文。
[0147]
calculationhandle.analysisresult()是对计算结果进行校验的核心接口,单据组件需要实现此接口,判断计算的结果是否符合要求。
[0148]
本实施例与其他表达式引擎相比,表达式可以自定义数据类型,能够支持类似单据复杂的数据结构,支持自定义函数,可以实现类似节假日判定等具有业务场景的函数。单据有了表达式的支持,单据上的字段的值可以自动填充,让客户填单更高效;业务对象和费用标准有了表达式可以实现更复杂的场景。
[0149]
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0150]
根据本公开实施例,还提供了一种业务处理装置,包括:配置单元,被配置成配置业务处理用的表达式,其中,所述表达式由字段、运算符、或者函数中的一种或者多种组成;解析单元,被配置成在获取到业务数据后,对业务数据进行解析以得到字段值,其中,所述字段值为表达式中的字段所对应的值;确定单元,被配置成基于预建立的表达式引擎,确定所述表达式的计算结果。
[0151]
进一步地,所述装置还包括校验单元,被配置成对计算结果进行校验。
[0152]
进一步地,装置还预建立表达式引擎,其中,包括定义不可扩展的信息、以及定义可扩展接口;针对不同的业务,通过可扩展接口定义扩展的函数信息、以及通过可扩展接口定义扩展的数据类型信息;定义语法信息。
[0153]
本公开实施例提供了一种电子设备,如图6所示,该电子设备包括一个或多个处理器61以及存储器62,图6中以一个处理器61为例。
[0154]
该控制器还可以包括:输入装置63和输出装置64。
[0155]
处理器61、存储器62、输入装置63和输出装置64可以通过总线或者其他方式连接,图6中以通过总线连接为例。
[0156]
处理器61可以为中央处理器(centralprocessingunit,cpu)。处理器61还可以为其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0157]
存储器62作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本公开实施例中的控制方法对应的程序指令/模块。处理器61通过运行存储在存储器62中的非暂态软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的
……
方法。
[0158]
存储器62可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据服务器操作的处理装置的使用所创建的数据等。此外,存储器62可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器62可选包括相对于处理器61远程设置的存储器,这些远程存储器可以通过网络连接至网络连接装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0159]
输入装置63可接收输入的数字或字符信息,以及产生与服务器的处理装置的用户设置以及功能控制有关的键信号输入。输出装置64可包括显示屏等显示设备。
[0160]
一个或者多个模块存储在存储器62中,当被一个或者多个处理器61执行时,执行如图1所示的方法。
[0161]
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各电机控制方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)、随机存储记忆体(randomaccessmemory,
ram)、快闪存储器(flashmemory)、硬盘(harddiskdrive,缩写:hdd)或固态硬盘(solid-statedrive,ssd)等;存储介质还可以包括上述种类的存储器的组合。
[0162]
虽然结合附图描述了本公开的实施方式,但是本领域技术人员可以在不脱离本公开的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1