公共安全标准网
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 20221071480 3.8 (22)申请日 2022.06.22 (71)申请人 杭州每刻科技有限公司 地址 310000 浙江省杭州市钱塘新区万晶 湖畔中心西区2幢15 01室 (72)发明人 何建东 叶少宁 李翔 魏美钟  (74)专利代理 机构 杭州裕阳联合专利代理有限 公司 33289 专利代理师 何宇梁 (51)Int.Cl. G06Q 30/04(2012.01) G06F 16/2455(2019.01) G06F 16/23(2019.01) G06F 9/52(2006.01) (54)发明名称 一种基于分布式锁的开 票方法和系统 (57)摘要 本发明公开了一种基于分布式锁的开票方 法和系统, 所述方法包括: 连接在线票据接口, 获 取开票完毕的票据, 根据所述开票完毕票据获取 待开票金额数据; 获取所述待开票金额数据对应 的票据唯一编码; 在查询所述待开票金额数据前 添加锁逻辑; 添加锁逻辑 成功后执行已开票金额 的减扣操作; 完整所述已开票金额的减扣操作 后, 将减扣完毕的金额数据更新到数据库, 并执 行解锁操作。 权利要求书1页 说明书4页 附图1页 CN 114971753 A 2022.08.30 CN 114971753 A 1.一种基于分布式锁的开 票方法, 其特 征在于, 所述方法包括: 连接在线票据接口, 获取开票完毕的票据, 根据所述开票完毕票据获取待开票金额数 据; 获取所述待开 票金额数据对应的票据唯一编码; 在查询所述待开 票金额数据前 添加锁逻辑; 添加锁逻辑成功后执 行已开票金额的减扣操作; 完整所述已开票金额的减扣操作后, 将减扣完毕的金额数据更新到数据库, 并执行解 锁操作。 2.根据权利要求1所述的一种基于分布式锁的开票方法, 其特征在于, 在获取所述票据 唯一编码后, 将所述票据唯一编码拼接在票据锁逻辑名称前缀后作为锁逻辑键名, 并对所 述票据添加锁逻辑。 3.根据权利要求2所述的一种基于分布式锁的开票方法, 其特征在于, 所述添加锁逻辑 方法包括: 先判断当前缓存中是否存在锁逻辑对应的键名, 若不存在则在添加锁逻辑后将 生成的具有票据唯一编码信息的键名保存在缓存中, 保存成功后生成锁逻辑添加成功标 记。 4.根据权利要求2所述的一种基于分布式锁的开票方法, 其特征在于, 所述添加锁逻辑 方法还包括: 若先判断当前缓存中不存在锁逻辑对应的键名, 则返回错 误信息。 5.根据权利要求2所述的一种基于分布式锁的开票方法, 其特征在于, 所述锁逻辑采用 排他锁, 查询当前其他线程是否存在当前锁逻辑对应的键名, 若存在则返回错误信息; 若不 存在, 则当前线程持有当前锁逻辑对应的键名。 6.根据权利要求1所述的一种基于分布式锁的开票方法, 其特征在于, 在完成票据 金额 减扣操作并更新数据库后, 执行解锁逻辑, 所述解锁逻辑方法包括: 查找当前锁逻辑在缓存 中保存的具有票据唯一编码的键名, 并将该键名擦除后完成解锁逻辑。 7.根据权利要求1所述的一种基于分布式锁的开票方法, 其特征在于, 所述锁逻辑的方 法包括: 利用tryLock方法预设获取锁逻辑时间间隔, 通过所述tryLock尝试获取锁逻辑对 应键名, 若不存在, 则在预设的获取时间间隔后再次查询, 若存在, 则将锁逻辑生成的具有 对应票据唯一编码的键名保存于缓存中。 8.根据权利要求1所述的一种基于分布式锁的开票方法, 其特征在于, 所述缓存为 redies缓存, 所述锁逻辑对应的键名保存于所述redies缓存作为锁添加成功标志, 擦除所 述redies缓存中锁逻辑对应的键名, 则释放对应的锁逻辑。 9.一种基于分布式锁开票系统, 其特征在于, 所述系统执行权利要求1 ‑8中任意一项所 述的一种基于分布式锁的开 票方法。 10.一种计算机可读存储介质, 其特征在于, 所述计算机可读存储介质存储有计算机程 序, 所述计算机程序可被处理器执行权利要求1 ‑8中任意一项所述的一种基于分布式锁的 开票方法。权 利 要 求 书 1/1 页 2 CN 114971753 A 2一种基于分布式锁的开票方 法和系统 技术领域 [0001]本发明涉及互联网票据技术领域, 特别涉及一种基于分布式锁的开票方法和系 统。 背景技术 [0002]目前客户通过前端系统接口或openApi接口调用发票在线开具功能, 系统会根据 调用参数完成发票的在线开具任务。 发票成功开具后, 系统会通过查询数据库中的待开票 的金额信息, 将其与开具成功的发票金额进 行对比, 并在 对比后进 行相应扣减, 最后 将扣减 信息更新数据库。 若待开票金额扣减至零, 则还会同步更新待开票信息的状态为完成开票 状态。 当用户调用开票接口的批量开票功能时, 由同时开具多张发票引起的并发开票流程, 会导致系统在完成第一张发票的待开票金额扣减后数据更新前去为第二张完成开具的查 询待开票金额(从查询到更新平均用时100ms, 前后查询间隔平均用时60 ms), 此时获取的待 开票金额是不正确的, 因为该待开票金额尚未扣减第一张发票的金额。 即现有方案会在批 量开票时出现并发系统常见的数据不同步问题。 发明内容 [0003]本发明其中一个发明目的在于提供一种基于分布式锁的开票方法和系统, 所述方 法和系统通过添加分布式锁的方式, 将同一开票数据的流程进行原子化处理, 使得同一开 票流程从并行改为串行, 从而 避免同一 开票数据减扣不同步的问题。 [0004]本发明另一个发明目的在于提供一种基于分布式锁的开票方法和系统, 所述方法 和系统在轮询取锁的过程中, 通过添加线程暂停时间间隔, 从而 可以降低获取锁的CPU性能 暂用, 从而可以适配于大批量的开 票金额减扣操作。 [0005]本发明另一个发明目的在于提供一种基于分布式锁的开票方法和系统, 所述方法 和系统利用分布式排他锁进行开票金额减扣的原子化处理, 当锁被其他线程占用时, 返回 错误信息, 可避免同一个开票金额被不同线程操作, 保障开票金额的处理的唯一性和同步 性。 [0006]为了实现至少一个上述发明目的, 本发明进一步提供一种基于分布式锁的开票方 法, 所述方法包括: [0007]连接在线票据接 口, 获取开票完毕的票据, 根据所述开票完毕票据获取待开票金 额数据; [0008]获取所述待开 票金额数据对应的票据唯一编码; [0009]在查询所述待开 票金额数据前 添加锁逻辑; [0010]添加锁逻辑成功后执 行已开票金额的减扣操作; [0011]完整所述已开票金额的减扣操作后, 将减扣完毕的金额数据更新到数据库, 并执 行解锁操作。 [0012]根据本发明其中一个较佳实施例, 在获取所述票据唯一编码后, 将所述票据唯一说 明 书 1/4 页 3 CN 114971753 A 3

PDF文档 专利 一种基于分布式锁的开票方法和系统

文档预览
中文文档 7 页 50 下载 1000 浏览 0 评论 0 收藏 3.0分
温馨提示:本文档共7页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种基于分布式锁的开票方法和系统 第 1 页 专利 一种基于分布式锁的开票方法和系统 第 2 页 专利 一种基于分布式锁的开票方法和系统 第 3 页
下载文档到电脑,方便使用
本文档由 SC 于 2024-02-24 00:46:21上传分享
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。