|
|
|
@ -1,13 +1,16 @@ |
|
|
|
package call |
|
|
|
package call |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
|
|
|
|
"context" |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
|
|
|
|
"gorm.io/gorm/clause" |
|
|
|
"reflect" |
|
|
|
"reflect" |
|
|
|
"server/common" |
|
|
|
"server/common" |
|
|
|
"server/db" |
|
|
|
"server/db" |
|
|
|
"server/pb" |
|
|
|
"server/pb" |
|
|
|
"server/util" |
|
|
|
"server/util" |
|
|
|
"strings" |
|
|
|
"strings" |
|
|
|
|
|
|
|
"sync" |
|
|
|
"time" |
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/liangdas/mqant/log" |
|
|
|
"github.com/liangdas/mqant/log" |
|
|
|
@ -22,9 +25,19 @@ func GetShareInfo(uid int) *common.ShareInfo { |
|
|
|
shareInfo.ChannelID = info.ChannelID |
|
|
|
shareInfo.ChannelID = info.ChannelID |
|
|
|
shareInfo.Share = util.GetShareCode(uid) |
|
|
|
shareInfo.Share = util.GetShareCode(uid) |
|
|
|
shareInfo.CreateTime = time.Now().Unix() |
|
|
|
shareInfo.CreateTime = time.Now().Unix() |
|
|
|
shareInfo.Level = 1 |
|
|
|
shareInfo.Level = 0 |
|
|
|
db.Mysql().Create(shareInfo) |
|
|
|
db.Mysql().Create(shareInfo) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
shareInfo.UpList = []int{shareInfo.UP1, shareInfo.UP2, shareInfo.UP3, shareInfo.UP4, shareInfo.UP5} |
|
|
|
|
|
|
|
betAmountTeam := shareInfo.BetAmountTeam |
|
|
|
|
|
|
|
downCount := shareInfo.Down1 + shareInfo.Down2 + shareInfo.Down3 + shareInfo.Down4 + shareInfo.Down5 |
|
|
|
|
|
|
|
shareConfig := GetConfigShareAll() |
|
|
|
|
|
|
|
for _, v := range shareConfig { |
|
|
|
|
|
|
|
if betAmountTeam >= int64(v.BetExp) && |
|
|
|
|
|
|
|
downCount >= int64(v.InviteExp) { |
|
|
|
|
|
|
|
shareInfo.Level = v.Level |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
return shareInfo |
|
|
|
return shareInfo |
|
|
|
} |
|
|
|
} |
|
|
|
func GetShareInfoByCode(code string) *common.ShareInfo { |
|
|
|
func GetShareInfoByCode(code string) *common.ShareInfo { |
|
|
|
@ -62,10 +75,7 @@ func ShareBind(share string, isOld bool, uid, cid int) { |
|
|
|
db.Mysql().Get(upInfo) |
|
|
|
db.Mysql().Get(upInfo) |
|
|
|
if upInfo.ID > 0 { |
|
|
|
if upInfo.ID > 0 { |
|
|
|
upInfo.UID = upInfo.UID |
|
|
|
upInfo.UID = upInfo.UID |
|
|
|
// todo ?发送奖励?
|
|
|
|
UpdateShare(upInfo.UID, 4, 0, fmt.Sprintf("%d", uid)) |
|
|
|
//util.Go(func() {
|
|
|
|
|
|
|
|
// SendShareReward(cid, codeInfo.UID, codeInfo.ActivityId)
|
|
|
|
|
|
|
|
//})
|
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
// 一级
|
|
|
|
// 一级
|
|
|
|
upInfo = &common.ShareInfo{Share: share} |
|
|
|
upInfo = &common.ShareInfo{Share: share} |
|
|
|
@ -99,8 +109,6 @@ func ShareBind(share string, isOld bool, uid, cid int) { |
|
|
|
db.Mysql().Update(&common.ShareInfo{UID: upUid}, map[string]interface{}{field: gorm.Expr(fmt.Sprintf("%s + 1", field))}) |
|
|
|
db.Mysql().Update(&common.ShareInfo{UID: upUid}, map[string]interface{}{field: gorm.Expr(fmt.Sprintf("%s + 1", field))}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// todo 更新上级邀请玩家数量?
|
|
|
|
|
|
|
|
CheckTask(Task{Uid: upInfo.UID, Value: 1, Types: []common.TaskType{common.TaskTypeInvite}}) |
|
|
|
|
|
|
|
// todo
|
|
|
|
// todo
|
|
|
|
util.Go(func() { |
|
|
|
util.Go(func() { |
|
|
|
if upInfo.UID != 0 { |
|
|
|
if upInfo.UID != 0 { |
|
|
|
@ -126,50 +134,50 @@ func ShareBind(share string, isOld bool, uid, cid int) { |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 判断分享,发放有效用户奖励
|
|
|
|
//// 判断分享,发放有效用户奖励
|
|
|
|
func CheckShare(r *common.RechargeOrder) { |
|
|
|
//func CheckShare(r *common.RechargeOrder) {
|
|
|
|
shareInfo := GetShareInfo(r.UID) |
|
|
|
// shareInfo := GetShareInfo(r.UID)
|
|
|
|
// todo
|
|
|
|
// // todo
|
|
|
|
if GetConfigShareSys() == nil { |
|
|
|
// if GetConfigShareSys() == nil {
|
|
|
|
return |
|
|
|
// return
|
|
|
|
} |
|
|
|
// }
|
|
|
|
reward := GetConfigShareSys().ShareReward |
|
|
|
// reward := GetConfigShareSys().ShareReward
|
|
|
|
// 付费分享
|
|
|
|
// // 付费分享
|
|
|
|
// CheckShareTask(shareInfo.UP1, 1, common.TaskTypePayShare)
|
|
|
|
// // CheckShareTask(shareInfo.UP1, 1, common.TaskTypePayShare)
|
|
|
|
// 发放奖励
|
|
|
|
// // 发放奖励
|
|
|
|
update := map[string]interface{}{ |
|
|
|
// update := map[string]interface{}{
|
|
|
|
"recharge_amount": gorm.Expr("recharge_amount + ?", r.Amount), |
|
|
|
// "recharge_amount": gorm.Expr("recharge_amount + ?", r.Amount),
|
|
|
|
} |
|
|
|
// }
|
|
|
|
if shareInfo.BetAmount != -1 { |
|
|
|
// if shareInfo.BetAmount != -1 {
|
|
|
|
update["bet_amount"] = gorm.Expr("bet_amount + ?", r.Amount) |
|
|
|
// update["bet_amount"] = gorm.Expr("bet_amount + ?", r.Amount)
|
|
|
|
} |
|
|
|
// }
|
|
|
|
db.Mysql().Update(&common.ShareInfo{UID: r.UID}, update) |
|
|
|
// db.Mysql().Update(&common.ShareInfo{UID: r.UID}, update)
|
|
|
|
betAmount := shareInfo.BetAmount |
|
|
|
// betAmount := shareInfo.BetAmount
|
|
|
|
if betAmount == -1 { |
|
|
|
// if betAmount == -1 {
|
|
|
|
betAmount = 0 |
|
|
|
// betAmount = 0
|
|
|
|
} |
|
|
|
// }
|
|
|
|
if shareInfo.RechargeAmount+r.Amount < GetConfigShareSys().ShareRecharge { |
|
|
|
// if shareInfo.RechargeAmount+r.Amount < GetConfigShareSys().ShareRecharge {
|
|
|
|
return |
|
|
|
// return
|
|
|
|
} |
|
|
|
// }
|
|
|
|
if shareInfo.UP1 == 0 { |
|
|
|
// if shareInfo.UP1 == 0 {
|
|
|
|
return |
|
|
|
// return
|
|
|
|
} |
|
|
|
// }
|
|
|
|
if shareInfo.BetAmount >= 0 { |
|
|
|
// if shareInfo.BetAmount >= 0 {
|
|
|
|
db.Mysql().Update(&common.ShareInfo{UID: r.UID}, map[string]interface{}{ |
|
|
|
// db.Mysql().Update(&common.ShareInfo{UID: r.UID}, map[string]interface{}{
|
|
|
|
"bet_amount": -1, |
|
|
|
// "bet_amount": -1,
|
|
|
|
}) |
|
|
|
// })
|
|
|
|
update = map[string]interface{}{ |
|
|
|
// update = map[string]interface{}{
|
|
|
|
"invalid_invites": gorm.Expr("invalid_invites + 1"), |
|
|
|
// "invalid_invites": gorm.Expr("invalid_invites + 1"),
|
|
|
|
"invite_reward": gorm.Expr("invite_reward + ?", reward), |
|
|
|
// "invite_reward": gorm.Expr("invite_reward + ?", reward),
|
|
|
|
"available_reward": gorm.Expr("available_reward + ?", reward), |
|
|
|
// "available_reward": gorm.Expr("available_reward + ?", reward),
|
|
|
|
} |
|
|
|
// }
|
|
|
|
db.Mysql().Update(&common.ShareInfo{UID: shareInfo.UP1}, update) |
|
|
|
// db.Mysql().Update(&common.ShareInfo{UID: shareInfo.UP1}, update)
|
|
|
|
ShareRecharge(r.UID, r.Amount+betAmount, 1) |
|
|
|
// ShareRecharge(r.UID, r.Amount+betAmount, 1)
|
|
|
|
IncreaseInviteCount(fmt.Sprintf("%v", shareInfo.UP1), 1, false) |
|
|
|
// IncreaseInviteCount(fmt.Sprintf("%v", shareInfo.UP1), 1, false)
|
|
|
|
} else { |
|
|
|
// } else {
|
|
|
|
ShareRecharge(r.UID, r.Amount+betAmount, 2) |
|
|
|
// ShareRecharge(r.UID, r.Amount+betAmount, 2)
|
|
|
|
} |
|
|
|
// }
|
|
|
|
} |
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
func ShareRecharge(uid int, amount int64, typ int) { |
|
|
|
func ShareRecharge(uid int, amount int64, typ int) { |
|
|
|
shareInfo := &common.ShareInfo{UID: uid} |
|
|
|
shareInfo := &common.ShareInfo{UID: uid} |
|
|
|
@ -593,3 +601,359 @@ func GetShareWithdrawHis(uid, page, num int) (list []*common.RechargeOrder, coun |
|
|
|
uid, common.CurrencyEventWithDraw, common.CurrencyEventShareWithdraw, common.ActivityIDShare) |
|
|
|
uid, common.CurrencyEventWithDraw, common.CurrencyEventShareWithdraw, common.ActivityIDShare) |
|
|
|
return |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func ShareRankUserGet(page, pageSize int, rankAt time.Time, withCount bool) (rankUsers []common.ShareRankDataWithUser, count int64, err error) { |
|
|
|
|
|
|
|
if withCount { |
|
|
|
|
|
|
|
countQuery := db.Mysql().C(). |
|
|
|
|
|
|
|
Model(&common.ShareRankData{}). |
|
|
|
|
|
|
|
Where("rank_cycle = ? and rank_at = ?", |
|
|
|
|
|
|
|
2, rankAt.Unix()) |
|
|
|
|
|
|
|
err = countQuery.Count(&count).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("get rank user count err, %s", err.Error()) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
err = db.Mysql().C().Table("share_rank_data as srd"). |
|
|
|
|
|
|
|
Select("srd.*, u.*"). |
|
|
|
|
|
|
|
Joins("left join users as u on srd.uid = u.id"). |
|
|
|
|
|
|
|
Where("srd.rank_cycle = ? and srd.rank_at = ?", 2, rankAt.Unix()). |
|
|
|
|
|
|
|
Order("srd.rank_value desc, srd.updated_at").Offset((page - 1) * pageSize).Limit(pageSize). |
|
|
|
|
|
|
|
Find(&rankUsers).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("get rank user err, %s", err.Error()) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var once sync.Once |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func ShareRankHandler() { |
|
|
|
|
|
|
|
once.Do(func() { |
|
|
|
|
|
|
|
util.Go(func() { |
|
|
|
|
|
|
|
for { |
|
|
|
|
|
|
|
now := time.Now() |
|
|
|
|
|
|
|
nextSettleAt := util.GetWeekZeroTime(now).AddDate(0, 0, 7).Add(30 * time.Minute) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if now.After(nextSettleAt) { |
|
|
|
|
|
|
|
nextSettleAt = nextSettleAt.AddDate(0, 0, 7) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
timer := time.NewTimer(nextSettleAt.Sub(now)) |
|
|
|
|
|
|
|
<-timer.C |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
shareRankAward() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func shareRankAward() { |
|
|
|
|
|
|
|
now := time.Now() |
|
|
|
|
|
|
|
jackpot := ShareRankJackpotPreGet() |
|
|
|
|
|
|
|
lessJackpot := jackpot |
|
|
|
|
|
|
|
lastRankAt := util.GetWeekZeroTime(now).AddDate(0, 0, -7) |
|
|
|
|
|
|
|
shareRankAwards := GetConfigShareRankAwardMap() |
|
|
|
|
|
|
|
if shareRankAwards == nil { |
|
|
|
|
|
|
|
log.Error("share rank award is nil") |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var rankUsers []*common.ShareRankData |
|
|
|
|
|
|
|
err := db.Mysql().C().Model(&common.ShareRankData{}).Where("rank_at = ?", lastRankAt.Unix()).Order("rank_value desc, updated_at").Find(&rankUsers).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("get share rank user err, %s", err.Error()) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
for index, rankUser := range rankUsers { |
|
|
|
|
|
|
|
var ( |
|
|
|
|
|
|
|
rank = index + 1 |
|
|
|
|
|
|
|
userAward int |
|
|
|
|
|
|
|
userAwardCount int64 |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
award, ok := shareRankAwards[rank] |
|
|
|
|
|
|
|
if ok { |
|
|
|
|
|
|
|
userAward = award.AwardRate |
|
|
|
|
|
|
|
userAwardCount = jackpot * int64(userAward) / 10000 |
|
|
|
|
|
|
|
lessJackpot -= userAwardCount |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if lessJackpot <= 0 { |
|
|
|
|
|
|
|
userAwardCount = 0 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
updateValues := map[string]interface{}{ |
|
|
|
|
|
|
|
"user_award": userAward, |
|
|
|
|
|
|
|
"user_award_count": userAwardCount, |
|
|
|
|
|
|
|
"rank": rank, |
|
|
|
|
|
|
|
"updated_at": now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
err = db.Mysql().C().Model(&common.ShareRankData{}).Where("id = ?", rankUser.ID).Updates(updateValues).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("update share rank data err, %d:%+v %s", rankUser.ID, updateValues, err.Error()) |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if userAwardCount == 0 { |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// todo 给玩家邮件发奖
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
jackpotKey := getShareRankJackpotPreKey() |
|
|
|
|
|
|
|
log.Debug("shareRankAward, %s, %d, less jackpot:%d", jackpotKey, jackpot, lessJackpot) |
|
|
|
|
|
|
|
err = db.Redis().GetRedis().Set(context.Background(), jackpotKey, lessJackpot, 0).Err() |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("share rankAward, %s set less-jackpot err, %s", jackpotKey, err.Error()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// updateType(1:下注,2:充值,3:任务,4:邀请人)
|
|
|
|
|
|
|
|
func updateShareByUp(uid, upUid, uplevel, updateType int, updateValue int64, expand ...string) { |
|
|
|
|
|
|
|
shareInfo := GetShareInfo(upUid) |
|
|
|
|
|
|
|
shareCfgMap := GetConfigShareMap() |
|
|
|
|
|
|
|
shareCfg := shareCfgMap[shareInfo.Level] |
|
|
|
|
|
|
|
rewardTier, ok := shareCfg.SubRewardTiersMap[uplevel] |
|
|
|
|
|
|
|
now := time.Now() |
|
|
|
|
|
|
|
var awardCount int64 |
|
|
|
|
|
|
|
if !ok || rewardTier.Per == 0 { |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var shareReward *common.ShareReward |
|
|
|
|
|
|
|
updateValues := make(map[string]interface{}) |
|
|
|
|
|
|
|
switch updateType { |
|
|
|
|
|
|
|
case 1: // 下注返利
|
|
|
|
|
|
|
|
var winCount int64 |
|
|
|
|
|
|
|
if len(expand) > 0 { |
|
|
|
|
|
|
|
winCount = util.ToInt64(expand[0]) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if winCount < 0 { |
|
|
|
|
|
|
|
rewardCount := -winCount * rewardTier.Per / 100 |
|
|
|
|
|
|
|
shareReward = &common.ShareReward{ |
|
|
|
|
|
|
|
UID: upUid, |
|
|
|
|
|
|
|
UpLevel: uplevel, |
|
|
|
|
|
|
|
RewardType: updateType, |
|
|
|
|
|
|
|
RewardCount: rewardCount, |
|
|
|
|
|
|
|
RewardDesc: fmt.Sprintf("%d", uid), |
|
|
|
|
|
|
|
RewardAt: now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
awardCount = rewardCount |
|
|
|
|
|
|
|
updateValues["reward"] = gorm.Expr("reward + ?", rewardCount) |
|
|
|
|
|
|
|
updateValues["withdrawable"] = gorm.Expr("withdrawable + ?", rewardCount) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
betAmount := updateValue * rewardTier.Per / 100 |
|
|
|
|
|
|
|
updateValues["bet_amount_team"] = gorm.Expr("bet_amount_team + ?", betAmount) |
|
|
|
|
|
|
|
case 2: // 充值返利
|
|
|
|
|
|
|
|
rewardCount := updateValue * rewardTier.Per / 100 |
|
|
|
|
|
|
|
shareReward = &common.ShareReward{ |
|
|
|
|
|
|
|
UID: upUid, |
|
|
|
|
|
|
|
UpLevel: uplevel, |
|
|
|
|
|
|
|
RewardType: updateType, |
|
|
|
|
|
|
|
RewardCount: rewardCount, |
|
|
|
|
|
|
|
RewardDesc: fmt.Sprintf("%d", uid), |
|
|
|
|
|
|
|
RewardAt: now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
awardCount = rewardCount |
|
|
|
|
|
|
|
updateValues["reward"] = gorm.Expr("reward + ?", rewardCount) |
|
|
|
|
|
|
|
updateValues["withdrawable"] = gorm.Expr("withdrawable + ?", rewardCount) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if shareReward != nil { |
|
|
|
|
|
|
|
err := db.Mysql().C().Create(&shareReward).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("create up share reward err, %s", err.Error()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if len(updateValues) > 0 { |
|
|
|
|
|
|
|
err := db.Mysql().C().Model(&common.ShareInfo{}).Where("uid = ?", upUid).Updates(updateValues).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("update up share info err, %s", err.Error()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if _, ok = updateValues["reward"]; ok { // 更新排行榜
|
|
|
|
|
|
|
|
shareRankData := common.ShareRankData{ |
|
|
|
|
|
|
|
UID: shareInfo.UID, |
|
|
|
|
|
|
|
RankCycle: 2, |
|
|
|
|
|
|
|
RankAt: util.GetWeekZeroTime(now).Unix(), |
|
|
|
|
|
|
|
RankValue: awardCount, |
|
|
|
|
|
|
|
UpdatedAt: now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
err = db.Mysql().C().Model(&common.ShareRankData{}).Clauses(clause.OnConflict{ |
|
|
|
|
|
|
|
Columns: []clause.Column{{Name: "rank_cycle"}, {Name: "rank_at"}, {Name: "uid"}}, |
|
|
|
|
|
|
|
DoUpdates: clause.Assignments(map[string]interface{}{ |
|
|
|
|
|
|
|
"rank_value": gorm.Expr("rank_value + ?", shareRankData.RankValue), |
|
|
|
|
|
|
|
"updated_at": shareRankData.UpdatedAt, |
|
|
|
|
|
|
|
}), |
|
|
|
|
|
|
|
}).Create(&shareRankData).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("update up share rank data err, %s", err.Error()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// updateType(1:下注,2:充值,3:任务,4:邀请人,5:提现, 6:回滚)
|
|
|
|
|
|
|
|
func UpdateShare(uid, updateType int, updateValue int64, expand ...string) (err error) { |
|
|
|
|
|
|
|
if updateType == 1 { // 直接更新下注奖池
|
|
|
|
|
|
|
|
_, _, expired, rankKey := getShareRankJackpotKey() |
|
|
|
|
|
|
|
_, err := db.Redis().Incr(rankKey, updateValue/100) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("update rank jackpot err, %s:%s", rankKey, err.Error()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
db.Redis().Expire(rankKey, time.Duration(expired)*time.Second) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
now := time.Now() |
|
|
|
|
|
|
|
shareInfo := GetShareInfo(uid) |
|
|
|
|
|
|
|
var shareReward *common.ShareReward |
|
|
|
|
|
|
|
updateValues := make(map[string]interface{}) |
|
|
|
|
|
|
|
var awardCount int64 |
|
|
|
|
|
|
|
var updateUp bool |
|
|
|
|
|
|
|
switch updateType { |
|
|
|
|
|
|
|
case 1: |
|
|
|
|
|
|
|
updateValues["bet_amount"] = gorm.Expr("bet_amount + ?", updateValue) |
|
|
|
|
|
|
|
updateValues["bet_amount_team"] = gorm.Expr("bet_amount_team + ?", updateValue) |
|
|
|
|
|
|
|
updateUp = true |
|
|
|
|
|
|
|
case 2: |
|
|
|
|
|
|
|
updateUp = true |
|
|
|
|
|
|
|
case 3: |
|
|
|
|
|
|
|
desc := expand[0] |
|
|
|
|
|
|
|
shareReward = &common.ShareReward{ |
|
|
|
|
|
|
|
UID: uid, |
|
|
|
|
|
|
|
RewardType: updateType, |
|
|
|
|
|
|
|
RewardCount: updateValue, |
|
|
|
|
|
|
|
RewardDesc: desc, |
|
|
|
|
|
|
|
RewardAt: now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
awardCount = updateValue |
|
|
|
|
|
|
|
updateValues["reward"] = gorm.Expr("reward + ?", updateValue) |
|
|
|
|
|
|
|
updateValues["withdrawable"] = gorm.Expr("withdrawable + ?", updateValue) |
|
|
|
|
|
|
|
case 4: |
|
|
|
|
|
|
|
configMap := GetConfigShareMap() |
|
|
|
|
|
|
|
if config, ok := configMap[shareInfo.Level]; ok { |
|
|
|
|
|
|
|
amount := config.InviteRebate |
|
|
|
|
|
|
|
var desc string |
|
|
|
|
|
|
|
if len(expand) > 0 { |
|
|
|
|
|
|
|
desc = expand[0] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
shareReward = &common.ShareReward{ |
|
|
|
|
|
|
|
UID: uid, |
|
|
|
|
|
|
|
RewardType: updateType, |
|
|
|
|
|
|
|
RewardCount: amount, |
|
|
|
|
|
|
|
RewardDesc: desc, |
|
|
|
|
|
|
|
RewardAt: now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
awardCount = updateValue |
|
|
|
|
|
|
|
updateValues["reward"] = gorm.Expr("reward + ?", amount) |
|
|
|
|
|
|
|
updateValues["withdrawable"] = gorm.Expr("withdrawable + ?", amount) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
case 5: |
|
|
|
|
|
|
|
desc := expand[0] |
|
|
|
|
|
|
|
shareReward = &common.ShareReward{ |
|
|
|
|
|
|
|
UID: uid, |
|
|
|
|
|
|
|
RewardType: updateType, |
|
|
|
|
|
|
|
RewardCount: -updateValue, |
|
|
|
|
|
|
|
RewardDesc: desc, |
|
|
|
|
|
|
|
RewardAt: now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
updateValues["withdrawable"] = gorm.Expr("withdrawable - ?", updateValue) |
|
|
|
|
|
|
|
case 6: |
|
|
|
|
|
|
|
desc := expand[0] |
|
|
|
|
|
|
|
shareReward = &common.ShareReward{ |
|
|
|
|
|
|
|
UID: uid, |
|
|
|
|
|
|
|
RewardType: updateType, |
|
|
|
|
|
|
|
RewardCount: updateValue, |
|
|
|
|
|
|
|
RewardDesc: desc, |
|
|
|
|
|
|
|
RewardAt: now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
updateValues["withdrawable"] = gorm.Expr("withdrawable + ?", updateValue) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if len(updateValues) > 0 { |
|
|
|
|
|
|
|
err = db.Mysql().C().Model(&common.ShareInfo{}). |
|
|
|
|
|
|
|
Where("id = ?", shareInfo.ID). |
|
|
|
|
|
|
|
Updates(updateValues).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("update share err, %s", err.Error()) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if _, ok := updateValues["reward"]; ok { // 更新排行榜
|
|
|
|
|
|
|
|
shareRankData := common.ShareRankData{ |
|
|
|
|
|
|
|
UID: shareInfo.UID, |
|
|
|
|
|
|
|
RankCycle: 2, |
|
|
|
|
|
|
|
RankAt: util.GetWeekZeroTime(now).Unix(), |
|
|
|
|
|
|
|
RankValue: awardCount, |
|
|
|
|
|
|
|
UpdatedAt: now.Unix(), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
err = db.Mysql().C().Model(&common.ShareRankData{}).Clauses(clause.OnConflict{ |
|
|
|
|
|
|
|
Columns: []clause.Column{{Name: "rank_cycle"}, {Name: "rank_at"}, {Name: "uid"}}, |
|
|
|
|
|
|
|
DoUpdates: clause.Assignments(map[string]interface{}{ |
|
|
|
|
|
|
|
"rank_value": gorm.Expr("rank_value + ?", shareRankData.RankValue), |
|
|
|
|
|
|
|
"updated_at": shareRankData.UpdatedAt, |
|
|
|
|
|
|
|
}), |
|
|
|
|
|
|
|
}).Create(&shareRankData).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("update share rank data err, %s", err.Error()) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if shareReward != nil { |
|
|
|
|
|
|
|
err = db.Mysql().C().Create(&shareReward).Error |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
log.Error("create share reward err, %s", err.Error()) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if updateUp { |
|
|
|
|
|
|
|
for index, upUid := range shareInfo.UpList { |
|
|
|
|
|
|
|
if upUid == 0 { |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
updateShareByUp(uid, upUid, index+1, updateType, updateValue, expand...) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func getShareRankJackpotKey() (rankAt, awardAt time.Time, expired int64, key string) { |
|
|
|
|
|
|
|
now := time.Now() |
|
|
|
|
|
|
|
rankCycle := 2 |
|
|
|
|
|
|
|
key = fmt.Sprintf("share_rank_jackpot|%d", rankCycle) |
|
|
|
|
|
|
|
switch rankCycle { |
|
|
|
|
|
|
|
case 1: |
|
|
|
|
|
|
|
rankAt = util.GetZeroTime(now) |
|
|
|
|
|
|
|
awardAt = rankAt.AddDate(0, 0, 1) |
|
|
|
|
|
|
|
expired = int64(rankAt.AddDate(0, 0, 2).Sub(now).Seconds()) |
|
|
|
|
|
|
|
case 2: |
|
|
|
|
|
|
|
rankAt = util.GetWeekZeroTime(now) |
|
|
|
|
|
|
|
awardAt = rankAt.AddDate(0, 0, 7) |
|
|
|
|
|
|
|
expired = int64(rankAt.AddDate(0, 0, 14).Sub(now).Seconds()) |
|
|
|
|
|
|
|
case 3: |
|
|
|
|
|
|
|
rankAt = util.GetFirstDateOfMonth(now) |
|
|
|
|
|
|
|
awardAt = rankAt.AddDate(0, 1, 0) |
|
|
|
|
|
|
|
expired = int64(rankAt.AddDate(0, 2, 0).Sub(now).Seconds()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
key += fmt.Sprintf("|%s", rankAt.Format("20060102")) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func getShareRankJackpotPreKey() (key string) { |
|
|
|
|
|
|
|
now := time.Now() |
|
|
|
|
|
|
|
var rankAt time.Time |
|
|
|
|
|
|
|
rankCycle := 2 |
|
|
|
|
|
|
|
key = fmt.Sprintf("share_rank_jackpot|%d", rankCycle) |
|
|
|
|
|
|
|
switch rankCycle { |
|
|
|
|
|
|
|
case 1: |
|
|
|
|
|
|
|
rankAt = util.GetZeroTime(now).AddDate(0, 0, -1) |
|
|
|
|
|
|
|
case 2: |
|
|
|
|
|
|
|
rankAt = util.GetWeekZeroTime(now).AddDate(0, 0, -7) |
|
|
|
|
|
|
|
case 3: |
|
|
|
|
|
|
|
rankAt = util.GetFirstDateOfMonth(now).AddDate(0, -1, 0) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
key += fmt.Sprintf("|%s", rankAt.Format("20060102")) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func ShareRankJackpotGet() (jackpot, rankLess int64) { |
|
|
|
|
|
|
|
_, awardAt, _, rankKey := getShareRankJackpotKey() |
|
|
|
|
|
|
|
jackpot = db.Redis().GetInt64(rankKey) |
|
|
|
|
|
|
|
rankLess = int64(awardAt.Sub(time.Now()).Seconds()) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func ShareRankJackpotPreGet() (jackpot int64) { |
|
|
|
|
|
|
|
jackpot = db.Redis().GetInt64(getShareRankJackpotPreKey()) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|