博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
会员充值-》解决方案之一
阅读量:6268 次
发布时间:2019-06-22

本文共 1570 字,大约阅读时间需要 5 分钟。

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

转载于:https://www.cnblogs.com/peipeiyu/p/8253670.html

你可能感兴趣的文章
使用 ES2015 编写 Gulp 构建
查看>>
[转]Using NLog for ASP.NET Core to write custom information to the database
查看>>
BZOJ 4766: 文艺计算姬 [矩阵树定理 快速乘]
查看>>
MySQL 的instr函数
查看>>
Hibernate的核心对象关系映射
查看>>
接口与抽象类的使用选择
查看>>
if __name__ == '__main__'
查看>>
CF 375D. Tree and Queries【莫队 | dsu on tree】
查看>>
Maven最佳实践 划分模块 配置多模块项目 pom modules
查看>>
Hadoop学习笔记——WordCount
查看>>
Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 1)
查看>>
Java-Spring-获取Request,Response对象
查看>>
opencv项目报错_pFirstBlock==pHead解决办法
查看>>
MySQL日志
查看>>
Oracle性能优化之Oracle里的执行计划
查看>>
电脑如何连接远程服务器?听语音
查看>>
使用Xcode 查看objective-C的汇编代码
查看>>
Vue.js——60分钟快速入门
查看>>
设计模式 - 模板方法模式(template method pattern) 具体解释
查看>>
mysql判断一个字符串是否包含某子串 【转】
查看>>