|
|
|
|
package call
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
|
"github.com/liangdas/mqant/log"
|
|
|
|
|
"server/common"
|
|
|
|
|
"server/db"
|
|
|
|
|
"server/pb"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func SetLuckyWheelRecords(uid int, luckType int, award *common.LuckyAward) {
|
|
|
|
|
userInfo, _ := GetUserInfo(uid)
|
|
|
|
|
err := db.Mysql().C().Model(&common.LuckyWheelReward{}).Create(&common.LuckyWheelReward{
|
|
|
|
|
UID: uid,
|
|
|
|
|
Nick: userInfo.Nick,
|
|
|
|
|
LuckyType: luckType,
|
|
|
|
|
AwardType: award.AwardType,
|
|
|
|
|
AwardCount: int(award.Currency.Value),
|
|
|
|
|
SpeAwardType: award.WheelType,
|
|
|
|
|
SpeAwardCount: award.WheelCount,
|
|
|
|
|
UpdatedAt: time.Now().Unix(),
|
|
|
|
|
}).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("create luckyWheel record err, %s", err.Error())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetLuckWheelRecords(uid, withoutUid, page, pageSize int) (
|
|
|
|
|
records []common.LuckyWheelReward, total, totalAmount int64, err error) {
|
|
|
|
|
mdb := db.Mysql().C().Model(&common.LuckyWheelReward{})
|
|
|
|
|
if uid == 0 { // 查询全部
|
|
|
|
|
mdb = mdb.Where("uid != ?", withoutUid).Order("updated_at desc").Limit(10)
|
|
|
|
|
err = mdb.Find(&records).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("get luckyWheel records err, %s", err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
} else { // 查询个人
|
|
|
|
|
mdb = mdb.Where("uid = ?", uid)
|
|
|
|
|
mdb = mdb.Order("updated_at desc")
|
|
|
|
|
err = mdb.Count(&total).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("get luckyWheel reward count err, %s", err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if page != 0 && pageSize != 0 {
|
|
|
|
|
mdb = mdb.Offset((page - 1) * pageSize).Limit(pageSize)
|
|
|
|
|
}
|
|
|
|
|
err = mdb.Find(&records).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("get luckyWheel records err, %s", err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
err = mdb.Select("COALESCE(SUM(award_count), 0) as totalAmount").Scan(&totalAmount).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("get luckyWheel totalAmount err, %s", err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func CheckLuckyWheel(uid int, unPush ...bool) {
|
|
|
|
|
if !db.Redis().Lock(common.GetRedisKeyLuckyWheel(uid)) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
defer func() {
|
|
|
|
|
db.Redis().UnLock(common.GetRedisKeyLuckyWheel(uid))
|
|
|
|
|
}()
|
|
|
|
|
luckyWheel := GetConfigLuckyWheel()
|
|
|
|
|
if luckyWheel == nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
rechargeInfo := GetRechargeInfo(uid)
|
|
|
|
|
playerData := GetPlayerData(uid)
|
|
|
|
|
if rechargeInfo.TotalRechargeCount < int64(luckyWheel.RechargeCount) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var (
|
|
|
|
|
update bool
|
|
|
|
|
lessCount int
|
|
|
|
|
)
|
|
|
|
|
for _, wheelCfg := range luckyWheel.WheelCfgStr {
|
|
|
|
|
lessKey := fmt.Sprintf("l%d", wheelCfg.LuckyType)
|
|
|
|
|
for _, rechargeAmount := range wheelCfg.RechargeAmount {
|
|
|
|
|
if rechargeAmount == 0 {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
freeKey := fmt.Sprintf("f%d_%d", wheelCfg.LuckyType, rechargeAmount)
|
|
|
|
|
if rechargeInfo.TotalRecharge >= int64(rechargeAmount)*common.DecimalDigits &&
|
|
|
|
|
playerData.LuckyWheelMap[freeKey] == 0 {
|
|
|
|
|
playerData.LuckyWheelMap[freeKey] = 1
|
|
|
|
|
playerData.LuckyWheelMap[lessKey] += 1
|
|
|
|
|
update = true
|
|
|
|
|
}
|
|
|
|
|
lessCount += playerData.LuckyWheelMap[lessKey]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if update {
|
|
|
|
|
luckyWheelBytes, err := json.Marshal(playerData.LuckyWheelMap)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("marshal err, %s", err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
err = db.Mysql().C().Model(&common.PlayerData{}).Where("uid = ?", uid).Updates(map[string]interface{}{
|
|
|
|
|
"lucky_wheel": string(luckyWheelBytes),
|
|
|
|
|
}).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("update err, %s", err.Error())
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if len(unPush) > 0 && unPush[0] {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if lessCount > 0 {
|
|
|
|
|
PushRed(uid, pb.RedPointModule_RedPointLuckyWheel, 1)
|
|
|
|
|
}
|
|
|
|
|
}
|