一下觀點都是小弟未經深思熟慮的考慮寫的,如果不對的地方請指點。。。。
抽獎系統 俗稱 大轉盤 或 九宮格抽獎功能,大轉盤或九宮格的功能我就不說了,網上插件有很多,也很簡單,這里就簡單的講解一下思路
1:如果獎品設置的是一等獎、二等獎、三等獎等 讓后每個級別的獎項有說明讓用戶知道每個級別的獎項對應的實物或虛擬物品是啥就行;
如果獎品設置的是后端配置的數據,建議后端返回的數據用緩存保存起來,避免每次讀取數據庫中的數據,這樣可以有效的提高效率,畢竟獎品修改的頻率不是很高,維護緩存也不麻煩。
2:前端抽獎流程:
a) 當用戶點擊抽獎按鈕時,讓轉盤轉起來(具體轉多少秒,這個插件里面能控制),讓后通過ajax請求后台的程序(期間轉盤的指針是一直在變動或轉動的)。
b) 當后端返回數據后, 通過返回的數據來控制轉盤指針最總停止的位置。
c) 具體用戶能抽中什么獎品,這個不能由前端決定,是請求后端后,后端的程序來控制用戶抽中的獎品,讓后將抽中的獎品信息返回給用戶端,用戶端根據后端返回的信息對轉盤進行控制。使用后端控制抽中的獎品可以有效的房子
前端用戶使用非法的手段來控制轉盤最總定位的位置。 更簡單的說當用戶點擊抽獎按鈕時,此次抽中的獎品就已經確定了,指針的變動是給用戶的一直遐想。
3:后端控制抽獎流程:
a) 后台需要對整個抽獎的控制 ,如中獎率(需控制)、每次抽獎的間隔(需控制)、每個用戶每天運行抽獎的次數(可不控制)、抽獎系統的有效時間(可不控制) , 獎品允許抽中的總數量(可不控制)等等;
b) 當后端接收到前端抽獎的請求時,首先要對抽獎控制的因素一一的驗證;
c) 當所有的的控制因素都通過后,在通過php在獎品列表中通過計算中獎率來抽取一個有效的獎品;
d) 這里如果控制了允許抽中的總數量的話,需要驗證一下當前抽中的獎品的總數量是否超出控制范圍,如果超出可以重新抽取一次或返回一個異常的情況給前端讓前端用戶重新抽取(如果總量和中獎率沒有控制好,這種情況出現的次數較多的話不建議);
e) 將當前抽獎的信息、是否扣除用戶積分或余額的信息記錄帶數據庫或redis緩存中;
f) 將抽中的獎品信息返回給客戶端;
這就是我設計的一個也不算很簡單的抽獎系統, 后端控制中獎率等因素時一定要適量, 本來抽獎系統就是吸粉的活動,弄得大家都不想玩了,那就沒有意義了。 之前在網上看到一個后台還要控制指定用戶抽中指定的獎品, 個人覺得這個已經完全失去了抽獎系統的樂趣了。 抽獎的具體流程大概就是這樣。 抽獎系統比較有難度的一點就是計算中獎率的問題了 當然這個中獎率的計算方式我盡快的也弄出來給大家參考。
