优惠券发放方法[发明专利]

(19)中华人民共和国国家知识产权局
(12)发明专利申请
(10)申请公布号 (43)申请公布日 (21)申请号 201610827387.7
(22)申请日 2016.09.14
(71)申请人 北京京东尚科信息技术有限公司
地址 100195 北京市海淀区杏石口路65号
西杉创意园西区11C楼东段1-4层西段
1-4层
申请人 北京京东世纪贸易有限公司
(72)发明人 王珏 
(74)专利代理机构 中科专利商标代理有限责任
公司 11021
代理人 倪斌
(51)Int.Cl.
G06Q  30/02(2012.01)
G06Q  20/38(2012.01)
(54)发明名称
(57)摘要
提供了一种优惠券发放方法,其中:确定待
发放的优惠券模板及相应优惠券的计划发放数
量;确定待发放的优惠券模板的目标用户批次的
批次编号;对所述批次编号加逻辑锁,其中所述
加逻辑锁包括:判断与批次编号相对应的目标用
户批次是会否被其他优惠券发放任务占用,在未
被其他优惠券发放任务占用的情况下,锁定所述
批次编号,使得其他优惠券发放任务无法使用该
目标用户批次;将计划发放数量和目标用户批次
中用户的数量中的较小值确定为优惠券的最终
发放数量;将所述目标用户批次中的用户与所述
优惠券模版彼此关联地存入任务队列;以及使用
所述任务队列,
按照最终发放数量发放优惠券。权利要求书1页  说明书4页  附图2页CN 107818475 A 2018.03.20
C N  107818475
A
1.一种优惠券发放方法,其中:
确定待发放的优惠券模板及相应优惠券的计划发放数量;
确定待发放的优惠券模板的目标用户批次的批次编号;
对所述批次编号加逻辑锁,其中所述加逻辑锁包括:判断与批次编号相对应的目标用户批次是会否被其他优惠券发放任务占用,在未被其他优惠券发放任务占用的情况下,锁定所述批次编号,使得其他优惠券发放任务无法使用该目标用户批次;
将计划发放数量和目标用户批次中用户的数量中的较小值确定为优惠券的最终发放数量;
将所述目标用户批次中的用户与所述优惠券模版彼此关联地存入任务队列;以及
使用所述任务队列,按照最终发放数量发放优惠券。
2.根据权利要求1所述的方法,还包括:在被其他优惠券发放任务占用的情况下,进行等待,直到其他优惠券发放任务释放对具有所述目标用户批次的占用。
3.根据权利要求1所述的方法,其中将所述目标用户批次中的用户与所述优惠券模版彼此关联地存入任务队列包括:批量查询目标用户批次中的用户,并将所查询到的用户与所述优惠券模版彼此关联地批量存入任务队列,作为一页数据。
4.根据权利要求3所述的方法,其中所述批量查询的批量大小是根据系统性能和业务需要设置的。
5.根据权利要求3所述的方法,还包括:响应于完成将一页数据存入任务队列,将数据页码加1。
6.根据权利要求3所述的方法,其中所述按照最终发放数量发放优惠券包括逐页地执行对优惠券的发放,包括:
采用多线程的方式向从任务队列中获取的用户发放根据从任务队列中获取的优惠券模板产生的优惠券;以及
响应于针对一页数据完成对优惠券的发放,记录或更新已发放的优惠券的数量,直到完成所述按照最终发放数量发放优惠券的操作。
7.根据权利要求1所述的方法,还包括:在完成所述按照最终发放数量发放优惠券的操作之后,释放对所述批次编号的锁定,以供其他优惠券发放任务使用。
8.根据权利要求1所述的方法,还包括:在完成所述按照最终发放数量发放优惠券的操作之后,将所述优惠券模版标记为已执行。
9.根据权利要求1所述的方法,其中通过使用Redis和MySQL来实现逻辑锁。
10.根据权利要求1所述的方法,其中所述确定待发放的优惠券模板及相应优惠券的计划发放数量还包括通过将tbschedule用作worker来轮询优惠券信息,从而确定待发放的优惠券模板及相应优惠券的计划发放数量。
权 利 要 求 书1/1页CN 107818475 A
优惠券发放方法
技术领域
[0001]本申请涉及计算机领域,具体地,涉及一种优惠券发放方法,其中所述方法能够在实现多线程快速推送的同时,确保每次优惠券发放活动向每个用户只发放一张优惠券,从而避免了发券过程中出现混乱。
背景技术
[0002]随着互联网和电子商务的不断发展,电子商务平台经常发放各种优惠券以吸引和激励用户。然而,目前电子商务平台方法优惠券的方式可以包括随机方法和按会员等级发放。现有的优惠发放系统在向用户发放优惠券时,无法做到每次活动向每个用户仅发放一种优惠券。尤其是在服务器断电之后,容易产生多发、漏发的现象。这样不仅降低了用户体验而且还浪费了优惠券。
[0003]综上,现有技术中发放优惠券的方法导致了优惠券使用率不高,使得用户无法享受到实惠。
[0004]因此,需要一种优惠券发放方法,所述方法能够定时发放或者审批之后发放优惠券;支持向用户批次中的全部用户或部分用户发放优惠券;并严格执行每次优惠券发放活动向每个用户只发放一张优惠券,绝不多发。
发明内容
[0005]本公开的方面在于解决至少上述问题和/或缺点并提供至少下述优点。[0006]根据本发明的一个方面,提供了一种优惠券发放方法,其中:确定待发放的优惠券模板及相应优惠券的计划发放数量;确定待发放的优惠券模板的目标用户批次的批次编号;对所述批次编号加逻辑锁,其中所述加逻辑锁包括:判断与批次编号相对应的目标用户批次是会否被其他优惠券发放任务占用,在未被其他优惠券
发放任务占用的情况下,锁定所述批次编号,使得其他优惠券发放任务无法使用该目标用户批次;将计划发放数量和目标用户批次中用户的数量中的较小值确定为优惠券的最终发放数量;将所述目标用户批次中的用户与所述优惠券模版彼此关联地存入任务队列;以及使用所述任务队列,按照最终发放数量发放优惠券。
[0007]优选地,所述方法还可以包括:在被其他优惠券发放任务占用的情况下,进行等待,直到其他优惠券发放任务释放对具有所述目标用户批次的占用。
[0008]优选地,所述将所述目标用户批次中的用户与所述优惠券模版彼此关联地存入任务队列包括:批量查询目标用户批次中的用户,并将所查询到的用户与所述优惠券模版彼此关联地批量存入任务队列,作为一页数据。
[0009]优选地,所述批量查询的批量大小是根据系统性能和业务需要设置的。[0010]优选地,所述方法还包括:响应于完成将一页数据存入任务队列,将数据页码加1。[0011]优选地,所述按照最终发放数量发放优惠券包括逐页地执行对优惠券的发放,包括:采用多线程的方式向从任务队列中获取的用户发放根据从任务队列中获取的优惠券模
板产生的优惠券;以及响应于针对一页数据完成对优惠券的发放,记录或更新已发放的优惠券的数量,直到完成所述按照最终发放数量发放优惠券的操作。
[0012]优选地,所述方法还包括:在完成所述按照最终发放数量发放优惠券的操作之后,释放对所述批次编号的锁定,以供其他优惠券发放任务使用。
[0013]优选地,所述方法还包括:在完成所述按照最终发放数量发放优惠券的操作之后,将所述优惠券模版标记为已执行。
[0014]优选地,所述方法包括:通过使用Redis和MySQL来实现逻辑锁。
[0015]优选地,所述确定待发放的优惠券模板及相应优惠券的计划发放数量还包括通过将tbschedule用作worker来轮询优惠券信息,从而确定待发放的优惠券模板及相应优惠券的计划发放数量。
附图说明
[0016]以下结合附图,将更清楚本公开的示例实施例的上述和其它方面、特征以及优点,附图中:
[0017]图1示出了根据本公开示例实施例的优惠券发放方法的流程图;以及
[0018]图2示出了根据本公开示例实施例的优惠券发放方法的示意图。
具体实施方式
[0019]以下参考附图描述了本公开的示例实施。本公开提供了一种优惠券发放方法,所述方法能够在实现多线程快速推送的同时,确保每次优惠券发放活动向每个用户只发放一张优惠券,从而避免了发券过程中出现混乱。
[0020]以下参考图1描述根据本公开示例实施例的优惠券发放方法的流程图。
[0021]具体地,如图1所示,首先在步骤S101,确定待方法的优惠券模板和相应优惠券的计划发放数量。具体地,所述方法可以通过将tbschedule用作worker来轮询优惠券信息,从而确定待发放的优惠券模板及相应优惠券的计划发放数量。所述优惠券信息可以包括优惠券模板、相应优惠券的计划发放数量以及相应优惠券的目标用户批次等信息。也就是说,可以通过采用定时调度任务装置来轮询发券任务,查询出满足推送条件的优惠券模板和相应优惠券的计划发放数量。
[0022]接着,在步骤S102,确定待发放的优惠券模板的目标用户批次的批次编号。所述方法可以包括:查询优惠券模板关联的目标用户批次,确定批次编号。
[0023]在确定批次编号之后,即,在步骤S103,对所述批次编号加逻辑锁,其中所述加逻辑锁包括:判断与批次编号相对应的目标用户批次是会否被其他优惠券发放任务占用。如果未被其他优惠券发放任务占用,则锁定所述批次编号,使得其他优惠券发放任务无法使用该目标用户批次,即,加锁成功(S103-是)。然而,如果被其他优惠券发放任务占用,则进行等待,直到其他优惠券发放任务释放对具
有所述目标用户批次的占用,即,加锁不成功(S103-否)。换言之,在所述步骤中,尝试对批次编号加上逻辑锁,成功则继续,不成功说明该批次正在被其他优惠券模板占用,等待释放继续执行。具体地,可以采用Redis作为不同用户批次的逻辑锁,或通过使用Redis和MySQL来实现逻辑锁。Redis是一款开源的、高性能的键-值存储系统。Redis的所有键值都存储在内存中,具有很高的单机读写性能。与其他缓
存服务器相比,Redis提供了更加丰富的数据结构。然而这仅是一种示例,还可以采用方法来实现逻辑锁,且本领域技术人员应认识到本发明不限于此。
[0024]随后,在步骤S104,将所获得的相应优惠券的计划发放数量和目标用户批次中用户的数量中的较小值确定为优惠券的最终发放数量。为了确保每次优惠券发放活动,仅向每个用户发放一张优惠券,需要确定优惠券的最终发放数量,以保证不会发生多发、漏发的现象。
[0025]在步骤S105,将所述目标用户批次中的用户与所述优惠券模版彼此关联地存入任务队列。具体地,根据本发明示例实施例的方法可以包括将所述目标用户批次中的用户与所述优惠券模版彼此关联地逐条存入任务队列;也可以包括:批量查询目标用户批次中的用户,并将所查询到的用户与所述优惠券模版彼此关联地批量存入任务队列,作为一页数据,即,批量查询出待推送用户并将其关联优惠券模板作为一页数据,并重新分片存入任务队列中。每次批量查询的批量大小是根据系统性能和业务
需要设置的。例如,当系统性能较好时,批量查询的批量数量可以较多。这样,可以改善优惠券的发放速度。在产生数据之后,如果下游业务有分表逻辑,则还可以对所获得的数据进行分表操作,以便在完成消费操作之后,更快速地将数据馈入数据库。
[0026]通过执行上述步骤,可以形成任务队列,例如,基于Redis的任务队列。任务队列中存放的是等待执行的批量任务。当以页为单位将所查询到的用户与所述优惠券模版彼此关联地批量存入任务队列时,该任务队列还需维护每个定向推送任务的当前页页码与页数,具体地,响应于完成将一页数据存入任务队列,任务队列将数据页码加1。此外,在执行发放优惠券任务时,每成功完成任务队列中的一页数据,将当前页码加1,直到当前页码等于页数,以表示优惠券发放任务完成。
[0027]在步骤S106,使用所述任务队列,按照步骤S104所确定的最终发放数量发放优惠券。在完成按照最终发放数量发放优惠券之后,将定向推送优惠券模板修改为已执行,并释放对所述批次编号的锁定,以供其他优惠券发放任务使用。具体地,所述发放步骤可以包括:逐条地发放优惠券。此外,当批量查询目标用户批次中的用户并将所查询到的用户与所述优惠券模版彼此关联地批量存入任务队列作为一页数据时,所述发放步骤还可以包括:采用多线程的方式向从任务队列中获取的用户发放根据从任务队列中获取的优惠券模板产生的优惠券;以及响应于针对一页数据完成对优惠券的发放,记录或更新已发放的优惠券的数量,直到完成所述按照最终发放数量发放优惠券的操作。因此,在优惠券到账之前,利用Redis集合或者MySQL唯一索引定向推送的唯一性,即,每人到账一张优惠券,防止
程序异常出现每人领取多张的情况。
[0028]上述根据本公开示例实施例的优惠券发放方法可以是定时执行的。通过使用分布式定时任务调度装置和缓存数据库实现发放优惠券的任务队列模式,其中使用Redis和/或MySQL的特性实现定向发放优惠券的逻辑锁,且分布式定时调度装置可以组合Spring框架与JDK线程池代替。
[0029]图2示出了根据本公开示例实施例的优惠券发放方法的示意图。在图2中,实现为例如tbschedule的worker 100可以轮询定向活动,并通知生产者200来查MySQL 400,以便确定相关信息,例如,待发放的优惠券模板和相应优惠券的计划发放数量。随后,生产者200确定相应优惠券的目标用户批次,并通过Redis逻辑锁300对相应优惠券的目标用户批

本文发布于:2024-09-21 21:47:02,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/407667.html

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

标签:优惠券   发放   任务   用户   数量
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议