一种自定义流水号的生成方法及装置与流程



1.本技术涉及流水号技术领域,尤其涉及一种自定义流水号的生成方法及装置。


背景技术:



2.在一些特定场景如单据填写、文档创建、费用归档下,都需要生成有规律或唯一的编码来关联内容,以便于通过生成的编码来高效的传递、查询或定位详细内容,而现有的策略一般是先分析具体的规则需求,再开发对应的编码生成业务逻辑代码来实现具体效果。
3.但这种方式存在以下问题:一是随着业务复杂度的不断增加,需要应用流水号的场景也会增加,而每个场景之间会有共通的特性也会有不同的异性,这就导致每出现一个场景就需要单独设计其流水号生成规则,还需要投入大量的研发成本对这些场景配置单独且分散的生成处理逻辑;二是所有生成流水号的规则逻辑一般都跟场景绑定,因此企业用户没有分布式系统中流水号的生成逻辑的能力,只能做一些简单的扩展。


技术实现要素:



4.本技术提供的一种自定义流水号的生成方法,旨在解决现有技术中用户不能自定义分布式系统中流水号的生成逻辑的问题。
5.为实现上述目的,本技术采用以下技术方案:
6.本技术的一种自定义流水号的生成方法,应用于服务器,包括以下步骤:
7.接收客户端发送的流水号生成请求;
8.响应于所述流水号生成请求,获取用户自定义的子流水号搭配策略以及与所述搭配策略对应的至少一个子流水号生成器的配置参数;
9.根据所述搭配策略确定所述至少一个子流水号生成器的调用链路,根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号。
10.作为优选,在接收客户端发送的流水号生成请求之前,还包括:
11.构建若干子流水号生成器,所述子流水号生成器包括固定字符生成器、日期生成器、自动计数生成器以及外部数据字段引用生成器;
12.在根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号之后,还包括:
13.将所述目标流水号返回给所述客户端。
14.作为优选,所述自动计数生成器的执行步骤包括:
15.根据预设规则生成远程字典服务的键命令,并根据所述用户配置的重置策略确定周期截止时间;
16.调用redis.incr方法,根据所述redis.incr方法和周期截止时间确定所述键对应的最新值;
17.获取所述用户配置的数值位数,并根据所述最新值对所述数值位数对应的最大值进行取余,得到第一子流水号。
18.作为优选,所述方法包括:
19.于所述第一子流水号的位数小于所述数值位数时,以零填充所述第一子流水号的高位空元素。
20.作为优选,所述外部数据字段引用生成器的执行步骤包括:
21.获取所述用户配置的字段编码和map集合;
22.解析所述字段编码得到目标字段,并在所述map集合中搜索所述目标字段对应的值;
23.将搜索得到的值转换为字符串得到第二子流水号。
24.作为优选,所述子流水号搭配策略包括组成所述目标流水号的至少一个子流水号的类型以及排列方式。
25.作为优选,所述根据所述搭配策略确定所述至少一个子流水号生成器的调用链路,包括:
26.根据所述至少一个子流水号的类型从若干子流水号生成器中筛选出对应的至少一个子流水号生成器,并根据所述排列方式确定所述至少一个子流水号生成器的调用顺序。
27.作为优选,所述方法还包括创建管道,所述管道用于所述至少一个子流水号生成器间的数据传输。
28.作为优选,所述目标流水号为字符串格式。
29.一种自定义流水号的生成装置,应用于服务器,包括:
30.接收模块,用于接收客户端发送的流水号生成请求;
31.获取模块,用于响应于所述流水号生成请求,获取用户自定义的子流水号搭配策略以及与所述搭配策略对应的至少一个子流水号生成器的配置参数;
32.生成模块,用于根据所述搭配策略确定所述至少一个子流水号生成器的调用链路,根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号。
33.本发明具有如下有益效果:
34.本技术提供一种可兼容、可扩展、可复用的分布式系统流水号生成方法,在系统业务复杂度不断增加同类型场景下达到快速开发、交付流水号的目的,大大节省研发成本,并开发了自定义规则配置窗口给客户,使得无需集成开发就可以满足客户对流水号的差异化定制需求。
附图说明
35.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
36.图1是本技术实现的一种自定义流水号的生成方法流程图;
37.图2是本技术中流水号的生成逻辑图;
38.图3是本技术实现的一种自定义流水号的生成装置示意图;
39.图4是本技术实现一种自定义流水号的生成方法的电子设备示意图。
具体实施方式
40.下面将结合附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
41.本技术的权利要求书和说明书的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序,应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本技术的实施例中对相同属性的对象在描述时所采用的区分方式,此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他单元。
42.实施例
43.如图1所示,本技术提供一种应用于服务器的自定义流水号生成方法,包括以下步骤:
44.s110、接收客户端发送的流水号生成请求;
45.s120、响应于所述流水号生成请求,获取用户自定义的子流水号搭配策略以及与所述搭配策略对应的至少一个子流水号生成器的配置参数;
46.s130、根据所述搭配策略确定所述至少一个子流水号生成器的调用链路,根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号。
47.本实施例所提供的方法可应用于分布式系统中,即本方法适用于多个客户端同时发起流水号生成请求的多并发场景。
48.在本实施例中,先在服务器端构建多个子流水号生成器,再由用户在客户端根据现实需要对这多个子流水号生成器进行筛选排序,并配置选择的每个子流水号生成器的参数,然后在创建单据或单据审批完成时,亦或是其他文档归档需要流水号时,客户端会向服务器发起流水号生成请求,服务器接收该请求后首先获取用户的配置信息,并根据该配置信息依次调用子流水号生成器,最后得到目标流水号并将其返回给客户端,本实施例为用户提供了一个自定义规则配置窗口使得用户可以根据自己的需求定义流水号的生成规则,实现了流水号的定制化开发,提高了用户体验度。
49.具体地,构建若干子流水号生成器,所述子流水号生成器包括固定字符生成器、日期生成器、自动计数生成器以及外部数据字段引用生成器。
50.生成器是一次生成一个值的特殊类型函数,可以将其视为可恢复函数,即在函数的执行过程中,yield语句会把需要的值返回给调用生成器的地方,然后退出函数,下一次调用生成器函数的时候又从上次中断的地方开始执行,同时生成器内的所有变量参数都会被保存下来供下一次使用。本实施例中在服务器端构建不同的子流水号生成器就是为了通过调用不同的子流水号生成器生成不同的子流水号,进而得到目标流水号。
51.在服务器端先构建四个不同的子流水号生成器,分别为固定字符生成器、日期生成器、自动计数生成器和外部数据字段引用生成器,也可用其它生成器替代,本实施例对此
不作限定。
52.用户通过客户端页面配置组成目标流水号的子流水号的类型以及子流水号的排列顺序,其中,上述的四种子流水号可以进行任意搭配,包括但不限于增加或删除,例如可以设置为日期+自动计数+固定字符+日期,也可以设置为日期+日期+日期,即子流水号的类型可以仅为一种,子流水号也可以只有一个,若目标流水号是由两个及以上的同类型子流水号不断调用同一个子流水号生成器,再对选中的子流水号生成器进行参数配置,在客户端页面,固定字符生成器支持用户通过文本输入框来自定义输入字符;日期生成器支持用户选择日期的自定义格式yyyy-mm-dd,其它符合date.format的格式也可以;自动计数生成器支持用户选择计数的数值位数和重置周期(按年、按月、按周、按日,或者是无);外部数据字段引用生成器支持用户选择注册进来的字段列表,同时其只会保存字段key的引用,假设用户的配置信息为日期生成器(日)+按日自动计数,即可得到一个以日期开头每天都会重置的流水号生成逻辑20221106001、20221106002、20221106003,亦或是20221107001、20221107002;假设用户的配置信息为固定字符(mk)+日期生成器(月)+按月自动计数,即可得到一个以日期开头每天都会重置的流水号生成逻辑mk202210001、mk202210002、mk202210003,亦或是mk202211001、mk202211002。
53.其中,自动计数生成器的执行步骤则包括:根据预设规则生成远程字典服务的键命令,并根据所述用户配置的重置策略确定周期截止时间;
54.调用redis.incr方法,根据所述redis.incr方法和周期截止时间确定所述键对应的最新值;
55.获取所述用户配置的数值位数,并根据所述最新值对所述数值位数对应的最大值进行取余,得到第一子流水号。
56.自动计数生成器的执行需要利用redis.inrc()来解决分布式系统中的高并发问题,因此其需要先根据固定前缀+单据唯一key+字段唯一key+周期重置策略的生成规则生成redis_key,再根据用户配置的重置策略确定周期截止时间,即一个周期是到每天的24点截止,还是到每月的最后一天截止,然后调用redis.incr方法结合周期截止时间确定key对应的最新值,其中,redis.incr命令用于将key中存储的数字值增一,即在远程字典服务中进行加法运算,但同时也要考虑到周期截止时间,如重置策略为按天,即周期截止时间为每天的24点,key中存储的数字初始值为0,则第一次进行自增操作时,key对应的值会变为0+1=1,第二次就成为1+1=2,依次类推,在当天的24点该值又会变为0,再获取用户配置的子流水号数值位数,数值位数限定了取值的最小值与最大值,根据获取到的key对应的最新值对数值位数对应的最大值进行取余操作,最后得到的值就是根据自动计数生成器生成的子流水号,假设数值位数为3位,最小值就为001,最大值为999,因为数值类型不会以0开头,key对应的最新值为10,则子流水号就是10除以999的余数即10,但10的位数明显不满足要求,就将其高位空元素填充上0,变成010,这就是调用自动计数生成器得到的子流水号了。
57.其中,外部数据字段引用生成器的执行步骤包括:
58.获取所述用户配置的字段编码和map集合;
59.解析所述字段编码得到目标字段,并在所述map集合中搜索所述目标字段对应的值;
60.将搜索得到的值转换为字符串得到第二子流水号。
61.外部数据字段引用生成器的执行步骤则是先获取用户在客户端页面配置的字段编码“$字段key#”,解析该字段编码得到字段key,由此到数据集合map《string,object》中key对应的所映射的value值对象,其中,map《string,object》是由用户在客户端页面传入的,在map中,所有数据结构的数据都可以用嵌套的map来承载数据,这个规则下map接口的键即为字段的key,值则为字段的内容,有了key,通过map的get(key)方法就可以得到所需要的字段内容,最后将得到的字段内容的类型转换为字符类型,就得到子流水号了。
62.固定字符生成器则是根据用户配置的固定字符(一般为英文缩写,且长度为1-6个字符)直接生成子流水号;日期生成器就是根据用户配置的时间格式对相应的日期进行格式化,格式化日期的过程依赖用户配置的标准的format格式(例如:yyyy-mm-dd),程序方法内部使用dateformatter.format(date,format)即可得到与配置格式对应的标准字符串,即子流水号。
63.这四种子流水号生成器都是可单独执行,没有顺序之分的,但用户可以根据自己的业务需求对其进行组合搭配,搭配策略就是通过客户端页面自定义配置的,调用的子流水号生成器之间则通过管道进行通信,调用逻辑如图2所示,因此前一个子流水号生成器的输出为后一子流水号生成器的输入,如用户的配置信息为固定字符生成器(mm)+日期生成器(日),服务器端先调用固定字符生成器得到子流水号mm,再调用日期生成器,此时的mm则是日期生成器的输入,最后日期生成器的输出则是mm20221127,即后一子流水号生成器生成的子流水号是缀在前一子流水号生成器的输出后的,且因为管道的特性,若得到的中间流水号以及目标流水号不是字符串类型,则需向将其都转换成字符串,本实施例的流程如下:
64.步骤1:在服务器端构建四个子流水号生成器,分别为固定字符生成器fixedchargenerator、日期生成器timegenerator、自动计数生成器autotallygenerator和外输数据字段引用生成器fieldgenerator;
65.步骤2:用户在客户端依次配置固定字符“hh”、时间格式yyyymmdd和自动计数的按月重置(数值位数为3),并向服务器发起流水号生成请求;
66.步骤3:服务器接收客户端发送的流水号生成请求并获取用户的配置信息;
67.步骤4:在2022年11月2日依次调用子流水号生成器(该月第六次调用),生成的结果依次为“hh”、“hh20221102”和“hh20221102006”。
68.步骤5:返回最后一个子流水号生成器的结果值即目标流水号"hh20221102006"给客户端,目标流水号类型为string。
69.本实施例提供一种可兼容、可扩展、可复用的分布式系统流水号生成方法,在系统业务复杂度不断增加同类型场景下达到快速开发、交付流水号的目的,大大节省研发成本,并开发了自定义规则配置窗口给客户,使得无需集成开发就可以满足客户对流水号的差异化定制需求。
70.如图3所示,本技术还提供一种应用于服务器的自定义流水号生成装置,包括:
71.接收模块10,用于接收客户端发送的流水号生成请求;
72.获取模块20,用于响应于所述接收模块10接收的所述流水号生成请求,获取用户自定义的子流水号搭配策略以及与所述搭配策略对应的至少一个子流水号生成器的配置参数;
73.生成模块30,用于根据所述获取模块20得到的搭配策略确定所述至少一个子流水号生成器的调用链路,根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号。
74.上述装置的一种实施方式可为:接收模块10接收客户端发送的流水号生成请求;获取模块20响应于所述接收模块10接收的所述流水号生成请求,获取用户自定义的子流水号搭配策略以及与所述搭配策略对应的至少一个子流水号生成器的配置参数;生成模块30根据所述获取模块20得到的搭配策略确定所述至少一个子流水号生成器的调用链路,根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号。
75.如图4所示,本技术还提供一种电子设备,包括存储器401和处理器402,所述存储器401用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器402执行以实现上述的一种自定义流水号的生成方法。
76.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的电子设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
77.本技术还提供一种存储有计算机程序的计算机可读存储介质,所述计算机程序使计算机执行时实现如上述的一种自定义流水号的生成方法。
78.示例性的,计算机程序可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器401中,并由处理器402执行,并由输入接口405和输出接口406完成数据的i/o接口传输,以完成本发明,一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在计算机设备中的执行过程。
79.计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。计算机设备可包括,但不仅限于,存储器401、处理器402,本领域技术人员可以理解,本实施例仅仅是计算机设备的示例,并不构成对计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如计算机设备还可以包括输入器407、网络接入设备、总线等。
80.处理器402可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器402、数字信号处理器402(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器402可以是微处理器402或者该处理器402也可以是任何常规的处理器402等。
81.存储器401可以是计算机设备的内部存储单元,例如计算机设备的硬盘或内存。存储器401也可以是计算机设备的外部存储设备,例如计算机设备上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等,进一步地,存储器401还可以既包括计算机设备的内部存储单元也包括外部存储设备,存储器401用于存储计算机程序以及计算机设备所需的其他程序和数据,存储器401还可以用于暂时地存储在输出器408,而前述的存储介质包括u盘、移动硬盘、只读存储器rom403、随机存储器ram404、碟盘或光盘等各种可以存储程序代码的介质。
82.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何在本发明揭露的技术范围内的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发
明的保护范围应以所述权利要求的保护范围为准。

技术特征:


1.一种自定义流水号的生成方法,其特征在于,应用于服务器,包括以下步骤:接收客户端发送的流水号生成请求;响应于所述流水号生成请求,获取用户自定义的子流水号搭配策略以及与所述搭配策略对应的至少一个子流水号生成器的配置参数;根据所述搭配策略确定所述至少一个子流水号生成器的调用链路,根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号。2.根据权利要求1所述的一种自定义流水号的生成方法,其特征在于,在接收客户端发送的流水号生成请求之前,还包括:构建若干子流水号生成器,所述子流水号生成器包括固定字符生成器、日期生成器、自动计数生成器以及外部数据字段引用生成器;在根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号之后,还包括:将所述目标流水号返回给所述客户端。3.根据权利要求2所述的一种自定义流水号的生成方法,其特征在于,所述自动计数生成器的执行步骤包括:根据预设规则生成远程字典服务的键命令,并根据所述用户配置的重置策略确定周期截止时间;调用redis.incr方法,根据所述redis.incr方法和周期截止时间确定所述键对应的最新值;获取所述用户配置的数值位数,并根据所述最新值对所述数值位数对应的最大值进行取余,得到第一子流水号。4.根据权利要求3所述的一种自定义流水号的生成方法,其特征在于,所述方法包括:于所述第一子流水号的位数小于所述数值位数时,以零填充所述第一子流水号的高位空元素。5.根据权利要求2所述的一种自定义流水号的生成方法,其特征在于,所述外部数据字段引用生成器的执行步骤包括:获取所述用户配置的字段编码和map集合;解析所述字段编码得到目标字段,并在所述map集合中搜索所述目标字段对应的值;将搜索得到的值转换为字符串得到第二子流水号。6.根据权利要求1所述的一种自定义流水号的生成方法,其特征在于,所述子流水号搭配策略包括组成所述目标流水号的至少一个子流水号的类型以及排列方式。7.根据权利要求6所述的一种自定义流水号的生成方法,其特征在于,所述根据所述搭配策略确定所述至少一个子流水号生成器的调用链路,包括:根据所述至少一个子流水号的类型从若干子流水号生成器中筛选出对应的至少一个子流水号生成器,并根据所述排列方式确定所述至少一个子流水号生成器的调用顺序。8.根据权利要求1所述的一种自定义流水号的生成方法,其特征在于,所述方法还包括创建管道,所述管道用于所述至少一个子流水号生成器间的数据传输。9.根据权利要求1所述的一种自定义流水号的生成方法,其特征在于,所述目标流水号为字符串格式。
10.一种自定义流水号的生成装置,其特征在于,应用于服务器,包括:接收模块,用于接收客户端发送的流水号生成请求;获取模块,用于响应于所述流水号生成请求,获取用户自定义的子流水号搭配策略以及与所述搭配策略对应的至少一个子流水号生成器的配置参数;生成模块,用于根据所述搭配策略确定所述至少一个子流水号生成器的调用链路,根据所述调用链路和对应的配置参数依次调用所述至少一个子流水号生成器得到目标流水号。

技术总结


本申请公开了一种自定义流水号的生成方法及装置,涉及流水号技术领域,包括以下步骤:服务器响应于客户端发送的流水号生成请求,获取用户自定义的子流水号搭配策略以及与搭配策略对应的至少一个子流水号生成器的配置参数;根据搭配策略确定至少一个子流水号生成器的调用链路,并根据调用链路和对应的配置参数依次调用至少一个子流水号生成器得到目标流水号。本申请在系统业务复杂度不断增加同类型场景下可以达到快速开发、交付流水号的目的,大大节省研发成本,并开发了自定义规则配置窗口给客户,使得无需集成开发就可以满足客户对流水号的差异化定制需求。流水号的差异化定制需求。流水号的差异化定制需求。


技术研发人员:

赵文朋 王森元 孙勤 魏美钟

受保护的技术使用者:

杭州每刻科技有限公司

技术研发日:

2022.11.28

技术公布日:

2023/2/23

本文发布于:2024-09-20 17:29:05,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/60395.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:流水号   所述   生成器   自定义
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议