踩坑笔记 ---- 使用LocalDateTime开通会员到期时间与自动续费业务某天用户突然为0

写在前面

使用LocalDateTime的同学需要注意下,这东西的plusMonth可能会有点点超出你的认知,如果不慎掉坑里,希望这篇笔记可以给你提供思路

业务背景

此业务场景非常简单,自动续费业务,需要在用户会员到期前24小时执行扣款服务,为用户开通续费会员

踩坑描述

这是一个组合坑,续费job无任何问题,会员管理端也没有任何问题,但是他们组合在一起,就是问题。
某日自动续费用户突然为0,相关负责同事让我排查问题,经排查发现,续费日后一天权益到期的用户数为0,因此导致不能扣费,具体排查过程简介如下

业务实现逻辑

续费端

定时任务

使用 elastic-job 配置定时器,在每日固定时间7点执行扣费任务

业务步骤

  • 扫描全部具有签约协议的用户
  • 查询每个用户的会员到期时间,与当前时间做对比,判断是否在24小时内,如果在24小时内,则进行扣费
  • 扣费记录入库,预订单入库,预开通权限入库,通知扣款服务商进行扣费,等待异步扣费结果通知

续费端业务逻辑并不复杂,按照每天扫描一次的方式执行,有到期的用户就进行续费,

会员管理端(踩坑点)

开通权限流程

  • 接受异步扣款通知
  • 验证通知中的签名等基本安全认证信息
  • 根据通知中的订单记录id,查找订单和预开通权限
  • 根据预开通权限的内容,为当前订单用户开通相关权益
  • 更新记录,订单完毕,续费表记录完毕

踩坑点细节

主要问题在开通权益这里,权益表存储数据包括了续费周期(1),和续费单位(MONTH),因此需要为用户开通一个月权益,考虑到用户权益可能未到期,因此需要把用户的最大到期时间,和当前时间做对比,取最大值,然后根据最大值开通一个月会员即可,伪代码如下

// 查询用户到期时间
LocalDateTime dbEndTime = fromDbEndTime(userId);
// 当前时间
LocalDateTime now = LocalDateTime.now();
// 二者取最大值作为权限的开始时间
LocalDateTime startTime = maxTime(now,dbEndTime);
// 计算用户应该开通的最大到期时间(异常点在这里)
LocalDateTime endTime = startTime.plusMonths(duration).minusDays(1).toLocalDate().atTime(LocalTime.MAX)
// 数据入库
save(userId,startTime,endTime);

异常说明

LocalDateTime的plusMonths这个api,他会计算本月延后一个月的天数,是否在下个月存在,如果不存在,他会保留下个月的最大值,比如
你是在1.31日任意时间点开通权限,向后延长一个月,保留时间为2.27 23:59:59
在这里插入图片描述
如果你在1.30 开通,也是这个时间
在这里插入图片描述
也就是说:大月份(31天的月份)衔接小月份(不足31天的月份),对于自动续费业务来说,会在某一天的用户总量会翻倍

你以为这就完了?没,小月份衔接大月份,某一天会没用户
比如:
4.30日开通权益的用户,到期时间是 5.29. 23:59:59
5.1日开通权益的用户,到期时间是 5.31 23:59:59
在这里插入图片描述
在这里插入图片描述
看出问题没?5.30那天,没人能到期,因此5.29日的扣费程序就不会有任何人被扣款

查看LocalDateTime的plusMonths 说明,并没有说明小月份衔接大月份的问题
在这里插入图片描述

总结

这个不能算JDK的bug,没有踩过这个坑的人,可能也想不到这个问题,如果使用这个api,你的程序大概也会这样,希望这个笔记能对你有帮助,在有人找你排查问题的时候,能快速定位并解决问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61647.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT来了,软件测试工程师距离失业还远吗?

小伙伴们前一段是不是都看到过ChatGPT的相关视频,那它到底是什么?对软件测试行业会有什么影响? 今天汇智妹就用一篇文章来给大家讲清楚。 一、ChatGPT是什么? 简单来说,ChatGPT是一款人工智能聊天机器人,…

ChatGPT会让软件测试人员失业吗?

首先,正视ChatGPT ,它只是一款提升测试效率的工具,并不会让测试失业 ChatGPT 本质上就是一个搜索引擎的二次封装,它更能理解你的输入意图,它更精确的帮你拼接返回结果。但它就是一个辅助工具,用好了可以帮…

抖音视频数据抓取

最近经常有人问我抓取抖音视频的数据,下面就来抓取一下吧。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有介绍。 搜索个视频看看 在抖音搜索框那里任意搜索个什么词。 查看抓的包信息: 可以看到,这里是post请…

抖音视频怎么制作

1、抖音拍摄制作 抖音短视频作为一款视频拍摄、分享软件,自身也带有一些功能可以实现抖音视频制作,做出的抖音视频也很好玩。 步骤: 1、首先安装好抖音并打开软件,点击软件正下方的“”。 2、可以点击“视频”自动拍摄一段视频&…

抖音视频评论采集

总结一下现在采集抖音评论的方法,根据不同的业务可以选择不同的采集方式。 需要代码可查看第4部分网页版评论采集。 文章内容仅供参考学习,如有侵权请联系作者进行删除。 文章目录 1、自动化工具采集2、第三方平台采集3、APP评论采集4、网页版评论采集专…

小程序如何实现抖音视频效果?

1、wxml部分代码 &#xff0c;主要是利用swiper 标签滑动切换&#xff0c;事件处理&#xff0c;具体参数说明可以去小程序官网文档看。https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html <swiper vertical"{{true}}"current"{{curren…

如何开发自动生产爆款抖音视频机器人

这是我这利用技术 自动生成的抖音视频,每个视频都是原创,而且可以基于主题生成对应的视频封面,例如需要制作大海主题的视频,只需要输入 “大海”,就可以生成视频封面为大海且背景音乐为海相关的主题视频。 抖音短视频分解 其实自动化制作视频并不难,我们可以通过一个短视…

微信小程序实现抖音视频效果

当我们进行开发的时候可能会遇到需要实现抖音视频效果的需求&#xff0c;并且网上该效果的开源代码少&#xff0c;找到的开源代码代码量大&#xff0c;很难进行二次开发 对此我将自己的代码进行简化&#xff0c;仅留下可动性高的代码模块 以上是实现效果与此处demo的模板 <…

抖音短视频脚本制作的一些技巧,快快收藏起来!

在抖音上发布一个成功的短视频需要多方面的考虑&#xff0c;其中最重要的是脚本的制作。一个好的脚本不仅可以吸引用户观看&#xff0c;还可以让用户产生共鸣&#xff0c;从而提高视频的传播效果。以下是不若与众科技一些关于抖音短视频脚本制作的技巧。 1. 简短明了 抖音短视…

抖音视频链接数据分析

一、制作背景 目前抖音账号数据只能进入后台查看 对于个人自媒体和工作室管理的账号 数量众多不利于提升效率。特别是工作室 一人管理数个账号每天发布几十条视频 隔天观看后台数据就要数个小时 每天剪辑视频发布视频观看后台 数据一天就过去了&#xff0c;每天还忙的焦头烂额 …

python爬虫+pyqt5制作完成 <在线翻译软件.exe>

#仅供学习参考。 目标网站&#xff1a;网易翻译pyqt5 在线翻译.exe 功能需求&#xff1a;中英互译&#xff0c;其他国家语言也行&#xff0c;如果能用键盘打得出来得话&#xff0c;这部分功能没怎么测试。 界面介绍&#xff1a;因为有时候网络有延迟&#xff0c;所有增加了个…

新媒体人都在用的6款在线设计工具

无论是在工作中还是学习中&#xff0c;经常会需要用到各种工具。学会运用工具&#xff0c;可以让你事半功倍&#xff0c;轻松高效地完成任务&#xff01;今天给大家整理几款高效的在线设计工具&#xff0c;一起来看看吧&#xff01; 01.稿定设计——贴图加水印 网址&#xff…

mac设计师系列 Adobe “全家桶” 15款设计软件 值得收藏!

文章素材来源&#xff1a;风云社区、简书 文章收录于&#xff1a;风云社区 www.scoee.com&#xff0c;提供1700多款mac软件下载 Adobe Creative Cloud 全线产品均可开放下载&#xff08;简称Adobe CC 全家桶&#xff09;&#xff0c;Adobe Creative Cloud 为多国语言版本&#…

Principle for Mac 6.12 中文版 优秀的交互原型设计工具

Principle for Mac 是一款优秀的交互原型设计工具&#xff0c;可以在很短时间内制作出一个具有完整交互动画的原型&#xff0c;并且可将交互动画生成视频或者 Gif 分享到 Dribbble、Twitter 等社交平台。此外 Principle 还支持多种尺寸的原型设计&#xff0c;包括 Apple Watch&…

spacedesk-把ipad变成显示器-真香经验全面分享

目录 spacedesk基本使用 spacedesk自定义设置 退出和重新开启电脑端的spacedesk软件 作为学生党&#xff0c;去图书馆学习不能背着个显示器&#xff0c;工作人士出去出差可能也需要显示器&#xff0c;如果你有平板的话&#xff0c;何不物尽其用呢。其实无论是ipad&#xff0…

交互原型图设计必备软件,这5款太赞了

如果你是UI/UX设计师&#xff0c;你肯定会在工作中涉及到交互原型图的设计。 在设计交互原型图时&#xff0c;我们通常需要找到一些适合自己的交互原型图设计软件来制作高质量的交互原型图。 与您分享5款易于使用的交互原型图设计软件 1.即时设计 即时设计是国内UI/UX设计师…

一个产品级MCU菜单框架设计~

声明&#xff1a;本处所说的菜单是用在128*64这种小屏幕的菜单&#xff0c;例如下面这种&#xff0c;不是彩屏上的GUI。 作为一个底层驱动工程师&#xff0c;驱动写完了&#xff0c;是要写硬件测试程序的。这个测试程序&#xff0c;一般给测试部/硬件工程师用来测试硬件&#x…

16款精品Mac平面设计软件,设计师专用,打造设计大作

如果您对自己的设计没有信心&#xff0c;那么您试试这16款精品Mac平面设计软件吧&#xff0c;设计师专用&#xff0c;打造设计大作的良心推荐&#xff0c;无论是新手还是专业的设计师来说&#xff0c;都能快速作创造出满意的作品。 1、Autodesk Sketch Book Autodesk SketchBo…

设计行业不可不知的6个电脑端设计神器

工欲善其事必先利其器&#xff0c;作为战斗在用户体验第一线的 UI 设计师更是如此&#xff0c;对自己的工具一定相当挑剔。毕竟&#xff0c;好用的工具才能够发挥自己100%的实力。下面介绍的这6款设计软件&#xff0c;作为设计师的你如果还未了解&#xff0c;那么绝对不容错过。…

pc ios android,PC、iOS、Android通用的交互设计

本文作者一大坨黄 供职微博UDC设计中心 。近年来&#xff0c;在技术方式&#xff0c;网页自适应的兴起、微软Win8系统的发布&#xff0c;都在试图解决一个问题&#xff1a;让同一产品能在平板、PC等多平台下同时使用。 由此可见&#xff0c;替换掉冗余的多版本开发模式&#xf…