V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  IlllIlllIlIIl  ›  全部回复第 1 页 / 共 1 页
回复总数  6
@IlllIlllIlIIl #20 再补充一点,不能允许让用户在暂停状态下充值,
@IlllIlllIlIIl #19 , 考虑到一致性的话,那张暂停表也就不要了, 可以像一楼说的把暂停状态和暂停开始时间记录在用户表下
@IlllIlllIlIIl #18 所以前面那张充值记录表应该叫时长变化表,再加一个叫“变化原因” 的值,里面可以写一些像是“用户充值“,”暂停“,”活动赠送“之类的
@IlllIlllIlIIl #17 突然发现 1 楼好像就是这个意思,补充一下暂停事件作为一个特殊的充值事件,不受上一次到期时间的影响,只管我到期时间上加就行了
@ccde8259 你这样子用户的分钟数只会越来越多。

我前面提到的方法只适用于 hobby project , 如果要按照这位 v 友的方法来做的话可以直接在现有的充值系统上改。

创建一张充值记录表,包含充值 ID ,用户 ID ,充值时间,充值时长,和新的到期时间(需要根据上一次的到期时间来计算,如果已经到期了的话就根据现在时间算,如果没有就在之前的到期时间上加)

再创建一张暂停记录表,记录暂停开始,暂停结束的事件。每次暂停开始前要判断一下用户是否到期,如果到期不能给暂停。暂停结束后把暂停时长按照一次充值事件加入充值记录里,计算出新的到期时间。
在用户状态为非暂停时,记录用户到期的时间点`time_expire`。
当用户将状态从非暂停改为暂停时,用到期时间点-现在的时间计算出时长`time_remain`保存。
当用户从暂停改为非暂停时,用现在的时间+时长算出新的到期时间点保存。
所以表里加个`time_expire datetime`的数值,用于非暂停状态下的计算.
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2814 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 07:53 · PVG 15:53 · LAX 23:53 · JFK 02:53
Developed with CodeLauncher
♥ Do have faith in what you're doing.