System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 业务订单号生成方法及装置制造方法及图纸_技高网

业务订单号生成方法及装置制造方法及图纸

技术编号:40550524 阅读:8 留言:0更新日期:2024-03-05 19:09
本发明专利技术公开了一种业务订单号生成方法及装置。业务订单号生成方法包括:S1、在数据库中新建订单号表和单号唯一表;S2、获取订单号生成请求;S3、从缓存中获取预先生成的订单号,如果获取到订单号,则直接将获取到的订单号返回至业务端;S4、获取redis分布式锁,如果获取到,则转至S5;如果未获取到redis分布式锁,则进入等待状态;S5、向订单号表中插入一条记录,并返回主键ID;S6、将返回的主键ID与元数据进行拼装,生成订单号;S7、将生成的订单号插入单号唯一表中;如果插入成功,则将生成的订单号写入redis队列,并释放redis分布式锁;如果插入失败,则重新生成订单号。本发明专利技术能够利用分布式锁以及表操作的原子性,避免了高并发情况下生产相同单号的问题。

【技术实现步骤摘要】

本专利技术属于数据库,具体涉及一种业务订单号生成方法及装置


技术介绍

1、在电商性质的平台中,绕不开订单唯一编号的生成逻辑。在平台发展初期,单量不高的背景下,单号的生成算法,一般不会导致产生相同单号的问题。但是随着平台进入快速发展,单量高速增长的情况下,只有对订单号生成算法进行优化升级,逐渐迭代,才能避免生成相同单号的严重问题。实现单号唯一的技术包括基于时间戳和固定前缀的算法,也有的采用基于随机数生成的方法。

2、基于时间戳和固定前缀的订单号编码方法,这种方法使用时间戳作为订单号的一部分,并在时间戳之前或之后添加固定的前缀或后缀。然而,由于时间戳的精度限制和固定前缀或后缀的有限性,仍然存在不同会员和不同产品线生成相同订单号的风险。基于随机数的订单号编码方法,这种方法使用随机数作为订单号的一部分,以增加订单号的唯一性。然而,随机数的生成可能存在重复的可能性,并且无法完全保证订单号的唯一性。现有技术中存在相同会员和产品线生成相同订单号的风险,同时在高并发情况下,生成订单号的唯一性和效率也面临挑战。


技术实现思路

1、本专利技术的目的是提供了一种跨业务线订单系统订单号唯一编码方法,通过利用自增主键和时间戳结合哈希算法,结合产品线编码,会员唯一编码生成订单号,有效降低了不同会员和产品线生成相同订单号的风险,并通过唯一性约束和重试机制确保订单号的唯一性。从而实现一个多业务线的统一的订单号编码方法。

2、为了达到前述专利技术目的,本专利技术采用了以下方案:

>3、本专利技术的一个方面提供了一种业务订单号生成方法,包括:

4、步骤s1、在数据库中新建订单号表和单号唯一表;

5、步骤s2、获取订单号生成请求;

6、步骤s3、响应于订单号生成请求,从缓存中获取预先生成好的订单号,如果获取到订单号,则直接将获取到的订单号返回至业务端,结束流程;如果未获取到订单号,则转至步骤s4;

7、步骤s4、获取redis分布式锁,如果获取到redis分布式锁,则转至步骤s5;如果未获取到redis分布式锁,则进入等待状态,即转至步骤s3;

8、步骤s5、向所述订单号表中插入一条记录,并返回主键id;如果插入失败,则重试,即重复步骤s5;

9、步骤s6、将步骤s5中返回的主键id与一个或多个元数据进行拼装,生成订单号;

10、步骤s7、将步骤s6中生成的订单号插入所述单号唯一表中,利用字段主键唯一的机制,验证生成的订单号是否唯一;如果插入成功,则将生成的订单号写入redis队列,并释放redis分布式锁;如果插入失败,则重新生成订单号,即重复步骤s5;所述redis队列为预先生成好的订单号队列。

11、本专利技术的另一个方面提供了一种业务订单号生成装置,所述装置包括:

12、数据表构建模块,用于在数据库中新建订单号表和单号唯一表;

13、请求获取模块,用于获取订单号生成请求;

14、请求响应模块,用于响应于订单号生成请求,从缓存中获取预先生成好的订单号,如果获取到订单号,则直接将获取到的订单号返回至业务端;如果未获取到订单号,则执行redis锁获取模块;

15、redis锁获取模块,用于获取redis分布式锁,如果获取到redis分布式锁,则执行订单号写入模块;如果未获取到redis分布式锁,则进入等待状态;

16、订单号表写入模块,用于向所述订单号表中插入一条记录,并返回主键id;如果插入失败,则重试;

17、订单号生成模块,用于将订单号表写入模块返回的主键id与一个或多个元数据进行拼装,生成订单号;

18、订单号验证模块,用于将订单号生成模块所生成的订单号插入所述单号唯一表中,利用字段主键唯一的机制,验证生成的订单号是否唯一;如果插入成功,则将生成的订单号写入redis队列,并释放redis分布式锁;如果插入失败,则重新生成订单号;所述redis队列为预先生成好的订单号队列。

19、与现有技术相比,本专利技术至少具有如下优点:(1)本专利技术在接收到各业务线生成订单唯一编号的请求后,获取redis锁,后续的请求将处于等待状态。锁确保了并发带来的风险。提取数据包中加密的会员编码和业务线编码。再向一张自带有自增主键和具有唯一性约束的创建时间字段的表中插入一条记录,并返回主键id,生成失败有重试机制。拿到主键id后,将系统的时间、产品线、会员编号的hash值、以及一段随机数拼接成字符串,生成订单唯一编号,再往订单号为唯一主键的表中插入,确保单号唯一。每次订单号预生成指定数目的订单号,后面的订单号生成请求,则直接从缓存中获取。从而实现对不同业务线共用一套单号生成逻辑。(2)利用分布式锁,表操作的原子性,避免了高并发情况下,生成相同单号的问题。(3)通过批量预生成指定数量的单号,提高了程序性能。另外通过单号,即可判别出订单的业务类型,生单日期等。

本文档来自技高网...

【技术保护点】

1.一种业务订单号生成方法,其特征在于,包括:

2.根据权利要求1所述的业务订单号生成方法,其特征在于,所述订单号表为自增主键表,所述订单号表包括ID字段和时间字段,其中ID字段为自增主键,所述时间字段设置唯一约束;

3.根据权利要求2所述的业务订单号生成方法,其特征在于,所述元数据包括:产品线编号、当前时间、会员ID、GUID的哈希值乘以当前秒数作为随机数种子、随机数、自增主键ID;

4.根据权利要求3所述的业务订单号生成方法,其特征在于,所述步骤S6中,如果生成的订单号的总长度超过第一预设长度,则自订单号的首部或者末尾截取第一预设长度的字符串,作为最终生成的订单号。

5.根据权利要求1所述的业务订单号生成方法,其特征在于,所述方法还包括重复执行所述步骤S5至步骤S7,批量预生成指定数量的订单号,并写入redis队列。

6.一种业务订单号生成装置,其特征在于,包括:

7.根据权利要求6所述的业务订单号生成装置,其特征在于,所述订单号表为自增主键表,所述订单号表包括ID字段和时间字段,其中ID字段为自增主键,所述时间字段设置唯一约束;

8.根据权利要求7所述的业务订单号生成装置,其特征在于,所述元数据包括:产品线编号、当前时间、会员ID、GUID的哈希值乘以当前秒数作为随机数种子、随机数、自增主键ID;

9.根据权利要求8所述的业务订单号生成装置,其特征在于,如果订单号生成模块所生成的订单号的总长度超过第一预设长度,则自订单号的首部或者末尾截取第一预设长度的字符串,作为最终生成的订单号。

10.根据权利要求6所述的业务订单号生成装置,其特征在于,还包括,每次获取订单号时,批量预生成指定数量的订单号,并写入redis队列。

...

【技术特征摘要】

1.一种业务订单号生成方法,其特征在于,包括:

2.根据权利要求1所述的业务订单号生成方法,其特征在于,所述订单号表为自增主键表,所述订单号表包括id字段和时间字段,其中id字段为自增主键,所述时间字段设置唯一约束;

3.根据权利要求2所述的业务订单号生成方法,其特征在于,所述元数据包括:产品线编号、当前时间、会员id、guid的哈希值乘以当前秒数作为随机数种子、随机数、自增主键id;

4.根据权利要求3所述的业务订单号生成方法,其特征在于,所述步骤s6中,如果生成的订单号的总长度超过第一预设长度,则自订单号的首部或者末尾截取第一预设长度的字符串,作为最终生成的订单号。

5.根据权利要求1所述的业务订单号生成方法,其特征在于,所述方法还包括重复执行所述步骤s5至步骤s7,批量预生成指定数量的订单号,并写入redis队列...

【专利技术属性】
技术研发人员:周云豹
申请(专利权)人:苏州思客信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1