会员充值-》解决方案之一

会员33元一个月,
1,一次性充值3个月会员送3个月普通代理,
2,一次性充值6个月会员送6个月白金代理。
3,一次性充值1年会员送一年钻石代理。
普通代理:拉一我的注册能得到5元奖励,拉一我的充值普通代理能获得20元奖励,拉一我的充值白金代理能得到30元奖励,拉一我的来充值钻石代理能得到40元奖励,
白金代理:拉一我的来注册能得到10元奖励,拉一我的充值普通代理能获得20元奖励,拉一我的充值白金代理能得到40元奖励,拉一我的来充值钻石代理能得到60元奖励,
钻石代理:拉一我的来注册能得到20元奖励,拉一我的充值普通代理能获得20元奖励,拉一我的充值白金代理能得到40元奖励,拉一我的来充值钻石代理能得到80元奖励,spa

理想效果,例如:代理

如今是白金    开始时间10.17 结束时间1.17 持续时间3个月blog

记录:充 钻石 开始时间1.10 结束时间5.17 持续时间4个月
记录:新建数据 白金 开始时间5.17 结束时间5.24 持续时间7天排序

修改:白金 开始时间10.17 结束时间1.17 持续时间3个月-》改结束时间为1.10,(持续时间)时间2个月23天递归

最终效果提早展现以下:im

以上是需求,分析后知道这个充值会员分等级。解决问题前个人分析:时间戳

会员类型:1:普通会员(1-2):2:普通代理(3-5):3:白金代理(6-11):4:钻石代理(>=12)
单位:月份
原则:先大后小支付

假如先充值一个月会员(普通会员),后再充值六个月(白金代理),实际的白金代理时间是六个月,普通会员一个月,正常状况,先享受六个月白金代理(保留普通会员的剩余时间),再享受一个月普通会员数据

假如先充值了三个月(普通代理),后再充值了六个月(白金代理),实际的白金代理时间是六个月,普通代理三个月,正常状况,先享受六个月白金代理(保留普通会员的剩余时间),再享受三个月普通代理查询

假设四种类型不分顺序,在一个月内不一样时间出现,并且四种类型还有可能重复出现,问会员各个类型时间到期时由高类型向低类型切换,应该记录哪些内容?

要求:时间和类型无缝切换,改变会员的类型(理想状态是一秒不差)

其中涉及的数据表:

1,用户表:记录和展现用户的会员时间和类型
2,充值记录表:记录充值的记录
3,持续时间记录表:用于记录用户的会员持续时间,各个时间段对应不一样的类型(核心表)
4,支付记录表:记录支付记录

解决这个问题,个人核心思想是:

一个时间段对应一条记录一个类型,始终判断第一条记录是不是当前的会员类型,若是是,什么也不作,若是不是,就改变会员类型为第一条记录的类型。若是没有记录则代表,会员期限已过,消除会员状态和类型等操做。

1:先保存充值记录,并记录在表(3),表3保存的字段有:会员持续时间,开始时间,结束时间,会员类型

持续时间:保存当前状态下会员持续的秒数

开始时间:暂且保存为当前的时间戳

结束时间:开始时间+会员持续时间

2:查询会员结束时间大于如今时间的全部记录,按照会员类型由大到小排序,在这里分为两种状况,第一种是只有两条数据的状况,第二种是大于两条记录的状况

3:当是第一种状况时,判断第一条是不是新插入的数据,若是是当即结束当前的会员记录,把结束时间改成当前时间,在建立一条新,类型和结束的这条记录类型同样,开始时间为第一条数据的结束时间,结束时间为总的结束时间;若是不是新插入的数据,只用改变新插入的数据的开始时间为第一条的结束时间

4:当是第二种状况时,判断三种状况,新插入的数据是不是在第一条、中间位置,最后一条,前两种状况时,后边的数据的开始时间都是上一条数据的结束时间,结束时间都是开始时间+持续时间(此处要用到递归)

相关文章
相关标签/搜索