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

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

理想效果,例如:

现在是白金    开始时间10.17 结束时间1.17 持续时间3个月

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

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

最终效果提前展示如下:

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

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

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

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

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

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

其中涉及的数据表:

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

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

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

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

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

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

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

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

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

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

posted @ 2018-01-09 21:04  骅骝漫轻舞01  阅读(281)  评论(0编辑  收藏  举报