會員充值-》解決方案之一

會員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:當是第二種狀況時,判斷三種狀況,新插入的數據是不是在第一條、中間位置,最後一條,前兩種狀況時,後邊的數據的開始時間都是上一條數據的結束時間,結束時間都是開始時間+持續時間(此處要用到遞歸)

相關文章
相關標籤/搜索