分享模块

dev_aagame_provider
zhora 2 months ago
parent a99f2bcee0
commit 7da246b994
  1. 157
      call/config.go
  2. 3
      call/pay.go
  3. 10
      call/rank.go
  4. 9
      call/reload.go
  5. 466
      call/share.go
  6. 1
      call/user.go
  7. 1
      common/activity.go
  8. 3
      common/config.go
  9. 1
      common/currency.go
  10. 2
      common/rank.go
  11. 120
      common/share.go
  12. 4
      modules/backend/migrate.go
  13. 2
      modules/backend/values/gm.go
  14. 5
      modules/common/nats.go
  15. 9
      modules/common/timer.go
  16. 17
      modules/web/config.go
  17. 2
      modules/web/handler/account.go
  18. 31
      modules/web/handler/luckyWheel.go
  19. 6
      modules/web/handler/recharge.go
  20. 529
      modules/web/handler/share.go
  21. 2
      modules/web/handler/user.go
  22. 4
      modules/web/handler/withdraw.go
  23. 5
      modules/web/providers/jin2/handler.go
  24. 1
      modules/web/routers/routers_luckyWheel.go
  25. 15
      modules/web/routers/routers_share.go
  26. 19
      modules/web/values/luckyWheel.go
  27. 7
      modules/web/values/pay.go
  28. 9
      modules/web/values/share.go
  29. 96
      modules/web/values/shareNew.go

@ -11,6 +11,7 @@ import (
"server/util"
"sort"
"strings"
"sync"
"time"
"github.com/liangdas/mqant/log"
@ -88,6 +89,14 @@ var (
configShareLimitTask []*common.ConfigShareLimitTask
configShareWithdrawProducts []*common.ConfigShareWithdrawProducts
ConfigWithdrawChannels []*common.ConfigWithdrawChannels
// 加锁
configShareRankMu sync.Mutex
configShareRankAwardMap map[int]map[int]common.RankAward
configShareRankAward map[int][]common.RankAward
configShareMu sync.Mutex
configShareMap map[int]*common.ConfigShare
)
var (
@ -1035,33 +1044,29 @@ func GetConfigAppSpin() []*common.ConfigAppSpin {
}
func LoadConfigShare() (err error) {
configShareMu.Lock()
defer configShareMu.Unlock()
list := []*common.ConfigShare{}
if _, err = db.Mysql().QueryAll("open = 1", "level asc", &common.ConfigShare{}, &list); err != nil {
log.Error("err:%v", err)
return err
}
for _, v := range list {
if v.InviteReward != "" {
err := json.Unmarshal([]byte(v.InviteReward), &v.SubInviteReward)
if err != nil {
log.Error("err:%v", err)
return err
}
}
if v.NewReward != "" {
err := json.Unmarshal([]byte(v.NewReward), &v.SubNewReward)
if err != nil {
if _, err = db.Mysql().QueryAll("open = 1", "level", &common.ConfigShare{}, &list); err != nil {
log.Error("err:%v", err)
return err
}
if configShareMap == nil {
configShareMap = make(map[int]*common.ConfigShare)
}
for _, v := range list {
if v.RewardTiers != "" {
err := json.Unmarshal([]byte(v.RewardTiers), &v.SubRewardTiers)
if err != nil {
log.Error("err:%v", err)
return err
}
v.SubRewardTiersMap = make(map[int]common.ConfigShareTiers)
for _, tier := range v.SubRewardTiers {
v.SubRewardTiersMap[tier.Tier] = tier
}
}
configShareMap[v.Level] = v
}
configShare = list
return nil
@ -1069,47 +1074,58 @@ func LoadConfigShare() (err error) {
func GetConfigShare(level, channel int) *common.ConfigShare {
for _, v := range configShare {
if v.Level != level {
continue
}
if v.Channel == channel || v.Channel == channel-10000 || v.Channel == 0 {
if v.Level == level {
return v
}
}
return nil
}
func GetConfigShareByExp(channel int, exp int64) (ret *common.ConfigShare) {
cons := GetConfigShares(channel)
if len(cons) == 0 {
return
}
for i, v := range cons {
if v.Exp < 0 {
continue
}
if exp == v.Exp {
return v
}
if exp < v.Exp && i > 0 {
return cons[i-1]
}
}
ret = cons[len(cons)-1]
return
}
func GetConfigShares(channel int) []*common.ConfigShare {
var result []*common.ConfigShare
func GetConfigShareAll() []common.ConfigShare {
result := make([]common.ConfigShare, 0, len(configShare))
for _, v := range configShare {
if v.Channel == channel || v.Channel == channel-10000 {
result = append(result, v)
continue
}
result = append(result, *v)
}
return result
}
func GetConfigShareMap() map[int]*common.ConfigShare {
configShareMu.Lock()
defer configShareMu.Unlock()
return configShareMap
}
//func GetConfigShareByExp(channel int, exp int64) (ret *common.ConfigShare) {
// cons := GetConfigShares(channel)
// if len(cons) == 0 {
// return
// }
// for i, v := range cons {
// if v.Exp < 0 {
// continue
// }
// if exp == v.Exp {
// return v
// }
// if exp < v.Exp && i > 0 {
// return cons[i-1]
// }
// }
// ret = cons[len(cons)-1]
// return
//}
//func GetConfigShares(channel int) []*common.ConfigShare {
// var result []*common.ConfigShare
// for _, v := range configShare {
// if v.Channel == channel || v.Channel == channel-10000 {
// result = append(result, v)
// continue
// }
// }
// return result
//}
// LoadConfigShareSys 分享系统配置
func LoadConfigShareSys() (err error) {
one := new(common.ConfigShareSys)
@ -2179,13 +2195,10 @@ func LoadConfigShareBanner() (err error) {
return nil
}
func GetConfigShareBanner(channel int) []*common.ConfigShareBanner {
func GetConfigShareBanner() []*common.ConfigShareBanner {
var result []*common.ConfigShareBanner
for _, v := range configShareBanner {
if v.Channel == channel || v.Channel == channel-10000 {
result = append(result, v)
continue
}
}
return result
}
@ -2267,3 +2280,49 @@ func GetShareWithdrawInfo(uid int) *common.ShareWithdrawInfo {
}
return info
}
func LoadConfigShareRankAward() (err error) {
configShareRankMu.Lock()
defer configShareRankMu.Unlock()
list := []*common.ConfigShareRankAward{}
if _, err = db.Mysql().QueryAll("", "", &common.ConfigShareRankAward{}, &list); err != nil {
log.Error("err:%v", err)
return err
}
if configShareRankAwardMap == nil {
configShareRankAwardMap = make(map[int]map[int]common.RankAward)
configShareRankAward = make(map[int][]common.RankAward)
}
for _, v := range list {
var tmpRankAward []common.RankAward
err = json.Unmarshal([]byte(v.RankAwards), &tmpRankAward)
if err != nil {
log.Error("unmarshal share rank award err, %s", err.Error())
return
}
tmpRankAwardMap := make(map[int]common.RankAward)
for _, award := range tmpRankAward {
for index := award.SmallRank; index <= award.LargeRank; index++ {
tmpRankAwardMap[index] = award
}
}
configShareRankAwardMap[v.ShareRankType] = tmpRankAwardMap
configShareRankAward[v.ShareRankType] = tmpRankAward
}
return nil
}
func GetConfigShareRankAwardMap(shareRankType ...int) (result map[int]common.RankAward) {
configShareRankMu.Lock()
defer configShareRankMu.Unlock()
if configShareRankAwardMap == nil {
LoadConfigShareRankAward()
}
if configShareRankAwardMap == nil {
return nil
}
if len(shareRankType) > 0 {
return configShareRankAwardMap[shareRankType[0]]
}
return configShareRankAwardMap[2]
}

@ -531,9 +531,10 @@ func PayActivity(r *common.RechargeOrder, notCharge bool, user *common.PlayerDBI
if notCharge {
InsertLoginRecord(r.UID, r.ChannelID, user.IP, user.Birth, user.Platform)
}
CheckShare(r)
// todo
util.Go(func() {
UpdateShare(r.UID, 2, r.Amount)
shareInfo := common.ShareInfo{UID: user.Id}
err = db.Mysql().Get(&shareInfo)
if err != nil {

@ -189,15 +189,18 @@ func rankAward(ticker *rankTicker) {
log.Error("rankAward, %s update rankData err, %s", jackpotKey, err.Error())
continue
}
if userAwardCount == 0 {
continue
}
// todo 给玩家邮件发奖
}
// 重置上一期奖池数量
if lessJackpot > 0 {
log.Debug("rankAward, %s less jackpot:%d", jackpotKey, lessJackpot)
log.Debug("rankAward, %s, %d, less jackpot:%d", jackpotKey, jackpot, lessJackpot)
err = db.Redis().GetRedis().Set(context.Background(), jackpotKey, lessJackpot, 0).Err()
if err != nil {
log.Error("rankAward, %s set less-jackpot err, %s", jackpotKey, err.Error())
}
if lessJackpot > 0 {
_, _, _, jackpotKeyNow := getRankJackpotKey(rankConfig.RankType, rankConfig.RankCycle)
_, err = db.Redis().Incr(jackpotKeyNow, lessJackpot)
if err != nil {
@ -205,7 +208,6 @@ func rankAward(ticker *rankTicker) {
}
}
}
}
// UpdateRankValue 更新玩家数值(mode:1打码,2充值)
// todo 接入打码

@ -623,4 +623,13 @@ func CommonReload(c map[int][]func(*pb.ReloadGameConfig) error) {
return nil
}}
}
if _, ok := c[common.ReloadConfigShowGameTag]; !ok {
c[common.ReloadConfigShowGameTag] = []func(*pb.ReloadGameConfig) error{func(rgc *pb.ReloadGameConfig) error {
if err := LoadConfigShowGameTag(); err != nil {
log.Error("error : [%s]", err.Error())
return err
}
return nil
}}
}
}

@ -1,13 +1,16 @@
package call
import (
"context"
"fmt"
"gorm.io/gorm/clause"
"reflect"
"server/common"
"server/db"
"server/pb"
"server/util"
"strings"
"sync"
"time"
"github.com/liangdas/mqant/log"
@ -22,9 +25,19 @@ func GetShareInfo(uid int) *common.ShareInfo {
shareInfo.ChannelID = info.ChannelID
shareInfo.Share = util.GetShareCode(uid)
shareInfo.CreateTime = time.Now().Unix()
shareInfo.Level = 1
shareInfo.Level = 0
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
}
func GetShareInfoByCode(code string) *common.ShareInfo {
@ -62,10 +75,7 @@ func ShareBind(share string, isOld bool, uid, cid int) {
db.Mysql().Get(upInfo)
if upInfo.ID > 0 {
upInfo.UID = upInfo.UID
// todo ?发送奖励?
//util.Go(func() {
// SendShareReward(cid, codeInfo.UID, codeInfo.ActivityId)
//})
UpdateShare(upInfo.UID, 4, 0, fmt.Sprintf("%d", uid))
} else {
// 一级
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))})
}
// todo 更新上级邀请玩家数量?
CheckTask(Task{Uid: upInfo.UID, Value: 1, Types: []common.TaskType{common.TaskTypeInvite}})
// todo
util.Go(func() {
if upInfo.UID != 0 {
@ -126,50 +134,50 @@ func ShareBind(share string, isOld bool, uid, cid int) {
})
}
// 判断分享,发放有效用户奖励
func CheckShare(r *common.RechargeOrder) {
shareInfo := GetShareInfo(r.UID)
// todo
if GetConfigShareSys() == nil {
return
}
reward := GetConfigShareSys().ShareReward
// 付费分享
// CheckShareTask(shareInfo.UP1, 1, common.TaskTypePayShare)
// 发放奖励
update := map[string]interface{}{
"recharge_amount": gorm.Expr("recharge_amount + ?", r.Amount),
}
if shareInfo.BetAmount != -1 {
update["bet_amount"] = gorm.Expr("bet_amount + ?", r.Amount)
}
db.Mysql().Update(&common.ShareInfo{UID: r.UID}, update)
betAmount := shareInfo.BetAmount
if betAmount == -1 {
betAmount = 0
}
if shareInfo.RechargeAmount+r.Amount < GetConfigShareSys().ShareRecharge {
return
}
if shareInfo.UP1 == 0 {
return
}
if shareInfo.BetAmount >= 0 {
db.Mysql().Update(&common.ShareInfo{UID: r.UID}, map[string]interface{}{
"bet_amount": -1,
})
update = map[string]interface{}{
"invalid_invites": gorm.Expr("invalid_invites + 1"),
"invite_reward": gorm.Expr("invite_reward + ?", reward),
"available_reward": gorm.Expr("available_reward + ?", reward),
}
db.Mysql().Update(&common.ShareInfo{UID: shareInfo.UP1}, update)
ShareRecharge(r.UID, r.Amount+betAmount, 1)
IncreaseInviteCount(fmt.Sprintf("%v", shareInfo.UP1), 1, false)
} else {
ShareRecharge(r.UID, r.Amount+betAmount, 2)
}
}
//// 判断分享,发放有效用户奖励
//func CheckShare(r *common.RechargeOrder) {
// shareInfo := GetShareInfo(r.UID)
// // todo
// if GetConfigShareSys() == nil {
// return
// }
// reward := GetConfigShareSys().ShareReward
// // 付费分享
// // CheckShareTask(shareInfo.UP1, 1, common.TaskTypePayShare)
// // 发放奖励
// update := map[string]interface{}{
// "recharge_amount": gorm.Expr("recharge_amount + ?", r.Amount),
// }
// if shareInfo.BetAmount != -1 {
// update["bet_amount"] = gorm.Expr("bet_amount + ?", r.Amount)
// }
// db.Mysql().Update(&common.ShareInfo{UID: r.UID}, update)
// betAmount := shareInfo.BetAmount
// if betAmount == -1 {
// betAmount = 0
// }
// if shareInfo.RechargeAmount+r.Amount < GetConfigShareSys().ShareRecharge {
// return
// }
// if shareInfo.UP1 == 0 {
// return
// }
// if shareInfo.BetAmount >= 0 {
// db.Mysql().Update(&common.ShareInfo{UID: r.UID}, map[string]interface{}{
// "bet_amount": -1,
// })
// update = map[string]interface{}{
// "invalid_invites": gorm.Expr("invalid_invites + 1"),
// "invite_reward": gorm.Expr("invite_reward + ?", reward),
// "available_reward": gorm.Expr("available_reward + ?", reward),
// }
// db.Mysql().Update(&common.ShareInfo{UID: shareInfo.UP1}, update)
// ShareRecharge(r.UID, r.Amount+betAmount, 1)
// IncreaseInviteCount(fmt.Sprintf("%v", shareInfo.UP1), 1, false)
// } else {
// ShareRecharge(r.UID, r.Amount+betAmount, 2)
// }
//}
func ShareRecharge(uid int, amount int64, typ int) {
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)
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
}

@ -508,6 +508,7 @@ func GetUserCurrencyTotal(uid int, t common.CurrencyType) int64 {
}
func GetUserCurrencyFloat(uid int, t common.CurrencyType, num int) float64 {
t = common.CurrencyINR
var pc, pcr int64
if err := db.Mysql().C().Model(&common.PlayerCurrency{UID: uid}).Select(t.GetCurrencyName()).Scan(&pc).Error; err != nil {
log.Error("err:%v", err)

@ -589,6 +589,7 @@ type LuckyAward struct {
// 摇奖奖励结构
WheelType int `json:"wheelType"` // 转盘
WheelCount int `json:"wheelCount"` // 摇奖次数
WheelLessCount int `json:"wheelLessCount"` // 当前转盘剩余次数
// 权重
Weights int `json:"weights"` // 权重
}

@ -72,6 +72,7 @@ const (
ReloadConfigShareWithdrawProducts
ReloadConfigShareBanner
ReloadTypeConfigWithdrawWeight
ReloadTypeConfigShareRankAward
)
// GetConfigStructByType 获取相应配置的结构
@ -197,6 +198,8 @@ func GetConfigStructByType(t int) (interface{}, interface{}) {
return &ConfigShareBanner{}, &[]ConfigShareBanner{}
case ReloadTypeConfigWithdrawWeight:
return &ConfigWithdrawChannels{}, &[]ConfigWithdrawChannels{}
case ReloadTypeConfigShareRankAward:
return &ConfigShareRankAward{}, &[]ConfigShareRankAward{}
default:
return nil, nil
}

@ -108,6 +108,7 @@ const (
CurrencyEventDrawMail // 领取邮箱奖励
CurrencyEventLuckyWheel // 充值转盘
CurrencyEventVIPWeekBonus // 领取vip周奖励
CurrencyEventShare
CurrencyEventAll
CurrencyEventGM = 1000 // 后台修改货币

@ -58,8 +58,6 @@ type RankData struct {
UserAwardCount int64 `gorm:"column:user_award_count;type:bigint(20);not null;comment:玩家奖励数量" json:"user_award_count"` // 玩家奖励数量
Rank int `gorm:"column:rank;type:int(11);default:0;comment:排名" json:"rank"` // 玩家奖励比例(*10000)
UpdatedAt int64 `gorm:"column:updated_at;type:bigint(20);not null;comment:更新时间" json:"updated_at"` // 更新时间
UserInfo PlayerDBInfo `gorm:"-"`
}
type RankDataWithUser struct {

@ -33,8 +33,6 @@ type ShareInfo struct {
UP3 int `gorm:"column:up3;type:int(11);default:0;comment:上3级"`
UP4 int `gorm:"column:up4;default:0;type:int(11);comment:上4级"`
UP5 int `gorm:"column:up5;default:0;type:int(11);comment:上5级"`
Reward int64 `gorm:"column:reward;default:0;type:bigint(20);comment:总奖励"`
Withdrawable int64 `gorm:"column:withdrawable;default:0;type:bigint(20);comment:可退出奖励"`
UpInviteReward int64 `gorm:"column:up_invite_reward;default:0;type:int(11);comment:为上级创造的邀请奖励"`
UpInviteUnlock int64 `gorm:"column:up_invite_Unlock;default:0;type:int(11);comment:为上级已解锁的邀请奖励"`
Down1 int64 `gorm:"column:down1;default:0;type:int(11);comment:下1级数量"`
@ -46,9 +44,13 @@ type ShareInfo struct {
PopWithdraw int `gorm:"pop_withdraw;default:0;type:tinyint(4);comment:是否弹出过退出"`
ChannelID int `gorm:"column:channel_id;type:int(11);default:0;comment:渠道id"`
BetReward int64 `gorm:"column:bet_reward;type:bigint(20);default:0;comment:邀请人下注获得的金额"`
RechargeAmount int64 `gorm:"column:recharge_amount;type:bigint(20);default:0;comment:充值金额"`
UpList []int `gorm:"-"`
Reward int64 `gorm:"column:reward;default:0;type:bigint(20);comment:总奖励"`
Withdrawable int64 `gorm:"column:withdrawable;default:0;type:bigint(20);comment:可退出奖励"`
BetAmount int64 `gorm:"column:bet_amount;type:bigint(20);default:0;comment:下注金额"`
BetAmountTeam int64 `gorm:"column:bet_amount_team;type:bigint(20);default:0;comment:团队下注金额"`
}
func (a *ShareInfo) TableName() string {
@ -184,7 +186,7 @@ const (
type ConfigShareTaskNew struct {
ID int `gorm:"primarykey"`
TaskID int `gorm:"column:task_id;type:int(11);default:1;uniqueIndex:task_id;comment:任务编号" web:"task_id"`
Type int `gorm:"column:type;type:int(11);default:1;comment:任务类型" web:"type"`
Type int `gorm:"column:type;type:int(11);default:2;comment:任务类型" web:"type"`
Condition int `gorm:"column:condition;type:int(11);default:0;comment:任务条件,玩牌对应游戏id" web:"condition"`
Target int64 `gorm:"column:target;type:int(11);default:1;comment:任务目标" web:"target"`
Reward int64 `gorm:"column:reward;type:int(11);default:0;comment:任务奖励" web:"reward"`
@ -239,12 +241,6 @@ func (c *ShareTaskNewData) GetDesc() string {
}
}
type ConfigShareReward struct {
CanWithdraw bool
Amount int64 // 奖励金额
ConditionAmount int64 // 转化条件金额
}
type ConfigShareTiers struct {
Tier int // 层级
Per int64 // 分成比例
@ -253,21 +249,16 @@ type ConfigShareTiers struct {
// 分享配置
type ConfigShare struct {
ID int `gorm:"primarykey"`
PN int `gorm:"column:pn;type:int(11);default:0;comment:包类别" web:"pn"`
Channel int `gorm:"column:channel;type:int(11);default:0;comment:渠道" web:"channel"`
Level int `gorm:"column:level;type:int(11);default:1;comment:代理等级" web:"level"`
Exp int64 `gorm:"column:exp;type:int(11);default:1;comment:升到本级所需总充值" web:"exp"`
InviteReward string `gorm:"column:invite_reward;type:varchar(256);default:'';comment:拉新奖励配置" web:"invite_reward"`
SubInviteReward ConfigShareReward `gorm:"-"`
NewReward string `gorm:"column:new_reward;type:varchar(256);default:'';comment:新手奖励配置" web:"new_reward"`
SubNewReward ConfigShareReward `gorm:"-"`
RechargeReward int64 `gorm:"column:recharge_reward;type:int(11);default:10;comment:充值返利比例" web:"recharge_reward"`
AffiliateReward int64 `gorm:"column:affiliate_reward;type:int(11);default:0;comment:客损返利比例" web:"affiliate_reward"`
Level int `gorm:"column:level;type:int(11);default:0;comment:代理等级" web:"level"`
InviteExp int `gorm:"column:invite_exp;type:int(11);default:0;comment:邀请人数" web:"invite_exp"`
BetExp int `gorm:"column:bet_exp;type:int(11);default:0;comment:下注数" web:"bet_exp"`
BetRebate int64 `gorm:"column:bet_rebate;type:int(11);default:0;comment:客损返利(*1万)" web:"bet_rebate"`
RechargeRebate int64 `gorm:"column:recharge_rebate;type:int(11);default:0;comment:充值返利(*1万)" web:"recharge_rebate"`
InviteRebate int64 `gorm:"column:invite_rebate;type:int(11);default:0;comment:拉人奖励" web:"invite_rebate"`
RewardTiers string `gorm:"column:reward_tiers;type:varchar(256);default:'[]';comment:返利层级配置" web:"reward_tiers"`
SubRewardTiers []ConfigShareTiers `gorm:"-"`
SubRewardTiersMap map[int]ConfigShareTiers `gorm:"-"`
DayWithdrawCount int `gorm:"column:day_withdraw_count;type:int(11);default:3;comment:日退出次数" web:"day_withdraw_count"`
Open int `gorm:"column:open;type:int(11);default:0;comment:是否打开 1打开" web:"open"`
AffiliateDiscount int64 `gorm:"column:affiliate_discount;type:int(11);default:0;comment:客损折扣比例" web:"affiliate_discount"`
WithdrawAudit int64 `gorm:"column:withdraw_audit;type:int(11);default:50000;comment:退出审核金额" web:"withdraw_audit"`
}
@ -278,11 +269,11 @@ func (c *ConfigShare) TableName() string {
func (c *ConfigShare) CalReward(event int, amount int64) int64 {
switch event {
case ShareEventInvitation:
return c.SubInviteReward.Amount
return c.InviteRebate
case ShareEventRecharge:
return amount * c.RechargeReward / 100
return amount * c.RechargeRebate / 10000
case ShareEventAffiliate:
return amount * c.AffiliateDiscount * c.AffiliateReward / 10000
return amount * c.BetRebate / 10000
default:
return 0
}
@ -291,8 +282,9 @@ func (c *ConfigShare) CalReward(event int, amount int64) int64 {
func (c *ConfigShare) GetLevelUpInfo() LevelUpInfo {
info := LevelUpInfo{}
info.Level = c.Level
info.Invitation = fmt.Sprintf("%drs/person", c.SubInviteReward.Amount/100)
info.RechargeCommission = fmt.Sprintf("%d", c.RechargeReward+c.AffiliateReward) + "%"
info.Invitation = fmt.Sprintf("%drs/person", c.InviteRebate)
// todo
//info.RechargeCommission = fmt.Sprintf("%d", c.RechargeReward+c.AffiliateReward) + "%"
tmp := ""
for i, v := range c.SubRewardTiers {
this := ""
@ -387,7 +379,7 @@ func (c *ShareLimitTaskData) IsValid() bool {
}
type ShareWithdrawInfo struct {
ID int `gorm:"primarykey"`
ID int `gorm:"primarykey;autoIncrement:true"`
UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:uid"`
DayCount int `gorm:"column:day_count;type:int(11);default:0;comment:日退出次数"`
DayTime int64 `gorm:"column:day_time;type:bigint(20);default:0;comment:日退出时间标记"`
@ -402,7 +394,7 @@ func (c *ShareWithdrawInfo) TableName() string {
// 退出商品配置
type ConfigShareWithdrawProducts struct {
ID int `gorm:"primarykey"`
ID int `gorm:"primarykey;autoIncrement:true"`
PN int `gorm:"column:pn;type:int(11);default:0;comment:包类别" web:"pn"`
Channel int `gorm:"column:channel;type:int(11);default:0;comment:渠道" web:"channel"`
ProductID int `gorm:"column:product_id;type:int(11);default:0;comment:商品id" web:"product_id"`
@ -415,11 +407,11 @@ func (c *ConfigShareWithdrawProducts) TableName() string {
}
type ConfigShareBanner struct {
ID int `gorm:"primarykey"`
PN int `gorm:"column:pn;type:int(11);default:0;comment:包类别" web:"pn"`
Channel int `gorm:"column:channel;type:int(11);default:0;comment:渠道" web:"channel"`
ID int `gorm:"primarykey;autoIncrement:true"`
Sort int `gorm:"column:sort;type:int(11);default:1;comment:排序" web:"sort"`
URL string `gorm:"column:url;type:varchar(256);default:'';comment:图片地址" web:"url"`
Desc string `gorm:"column:desc;type:varchar(256);default:'';comment:分享文案" web:"desc"`
SearchWord string `gorm:"column:search_word;type:varchar(512);default:'';comment:google search word" web:"search_word"`
}
func (c *ConfigShareBanner) TableName() string {
@ -427,7 +419,7 @@ func (c *ConfigShareBanner) TableName() string {
}
type ShareRewardData struct {
ID int `gorm:"primarykey"`
ID int `gorm:"primarykey;autoIncrement:true"`
UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:ut"`
Time int64 `gorm:"column:time;type:bigint(20);default:0;uniqueIndex:ut;comment:创建时间"`
Date string `gorm:"column:date;type:varchar(256);default:''"`
@ -497,3 +489,65 @@ type ESShareBalance struct {
Level int
Balance int64
}
type ShareReward struct {
ID int `gorm:"primarykey;autoIncrement:true"`
UID int `gorm:"column:uid;not null;type:int(11)"`
UpLevel int `gorm:"column:up_level;type:int(11);default:0"`
RewardType int `gorm:"column:reward_type;type:int(11);default:0;comment:奖励类型(1:下注,2:充值,3:任务,4:邀请人,5:提现)"`
RewardCount int64 `gorm:"column:reward_count;type:int(11);default:0;comment:奖励数量"`
RewardDesc string `gorm:"column:reward_desc;type:varchar(256);default:'奖励描述'"`
RewardAt int64 `gorm:"column:reward_at;type:int(11);default:0;comment:奖励时间"`
}
func (c *ShareReward) TableName() string {
return "share_reward"
}
type ConfigShareRankAward struct {
ID int `gorm:"primarykey;autoIncrement:true"`
ShareRankType int `gorm:"column:share_rank_type;type:int(11);default:2;comment:分享排行榜类型(1:日,2:周,3:月)" web:"share_rank_type"`
RankAwards string `gorm:"column:rank_awards;type:text;comment:排行榜奖励信息(复用打码排行榜奖励格式)" web:"rank_awards"`
}
func (c *ConfigShareRankAward) TableName() string {
return "config_share_rank_award"
}
type ShareRankData struct {
ID int64 `gorm:"column:id;type:bigint(20);primaryKey;autoIncrement:true" json:"id"`
UID int `gorm:"column:uid;type:bigint(11);not null;uniqueIndex:rank_idx,priority:3;comment:玩家id" json:"uid"` // 玩家id
RankCycle int `gorm:"column:rank_cycle;type:int(11);default:0;uniqueIndex:rank_idx,priority:1;comment:排行榜周期(1:日,2:周,3:月)" json:"rank_cycle"` // 排行榜周期(1:日,2:周,3:月)
RankAt int64 `gorm:"column:rank_at;type:bigint(20);not null;uniqueIndex:rank_idx,priority:2;comment:排行榜开始日期" json:"rank_at"` // 排行榜开始日期
RankValue int64 `gorm:"column:rank_value;type:bigint(20);not null;comment:玩家数值" json:"rank_value"` // 玩家数值
IsRobot int `gorm:"column:is_robot;type:int(11);not null;comment:是不是机器人(0:不是,1:是)" json:"is_robot"` // 是不是机器人(0:不是,1:是)
UserAward int `gorm:"column:user_award;type:int(11);not null;comment:玩家奖励比例(*10000)" json:"user_award"` // 玩家奖励比例(*10000)
UserAwardCount int64 `gorm:"column:user_award_count;type:bigint(20);not null;comment:玩家奖励数量" json:"user_award_count"` // 玩家奖励数量
Rank int `gorm:"column:rank;type:int(11);default:0;comment:排名" json:"rank"` // 玩家奖励比例(*10000)
UpdatedAt int64 `gorm:"column:updated_at;type:bigint(20);not null;comment:更新时间" json:"updated_at"` // 更新时间
}
type ShareRankDataWithUser struct {
ShareRankData `gorm:"embedded"` // RankData的所有字段会展开到表中
UserInfo PlayerDBInfo `gorm:"embedded"` // UserInfo的所有字段也会展开到同一张表中
}
func (c *ShareRankData) TableName() string {
return "share_rank_data"
}
type LuckyWheelReward struct {
ID int `gorm:"primarykey;autoIncrement:true"`
UID int `gorm:"column:uid;not null;type:int(11)"`
Nick string `gorm:"column:nick;type:varchar(256);default:''"`
LuckyType int `gorm:"column:lucky_type;type:int(11);default:0"`
AwardType int `gorm:"column:award_type;type:int(11);default:1"`
AwardCount int `gorm:"column:award_count;type:int(11);default:0"`
SpeAwardType int `gorm:"column:spe_award_type;type:int(11);default:0"`
SpeAwardCount int `gorm:"column:spe_award_count;type:int(11);default:0"`
UpdatedAt int64 `gorm:"column:updated_at;type:int(11);default:0;comment:奖励时间"`
}
func (c *LuckyWheelReward) TableName() string {
return "lucky_wheel_reward"
}

@ -146,6 +146,10 @@ func MigrateDB() {
new(common.ConfigShareWithdrawProducts),
new(common.ConfigShareBanner),
new(common.ShareRewardData),
new(common.ShareReward),
new(common.ConfigShareRankAward),
new(common.ShareRankData),
new(common.LuckyWheelReward),
)
if err != nil {
panic("Migrate db fail")

@ -195,6 +195,8 @@ func GetControlType(path string) int {
return common.ReloadConfigShareTaskNew
case "shareBanner":
return common.ReloadConfigShareBanner
case "shareRankAward":
return common.ReloadTypeConfigShareRankAward
default:
return 0
}

@ -1,6 +1,7 @@
package common
import (
"fmt"
"server/call"
"server/common"
"server/natsClient"
@ -43,6 +44,10 @@ type Player struct {
func afterSettle(d *pb.InnerAfterSettle) {
log.Debug("afterSettle:%+v", *d)
UpdateGameData(d)
// 更新打码排行榜信息
call.UpdateRankValue(1, int(d.UID), d.TotalBet, 0)
// 更新分享信息
call.UpdateShare(int(d.UID), 1, d.TotalBet, fmt.Sprintf("%d", d.FinalSettle-d.TotalBet))
// call.ShareSettle(d)
// p := &Player{uid: int(d.UID), gid: int(d.GameID), settleData: d}
// p.ActivityFirstRechargeBack()

@ -22,11 +22,11 @@ func initTimer() {
// 结算重置每日数据
// ShareReset()
// 分享机器人
ShareRobotTimer()
// ShareRobotTimer()
// slots奖池活动机器人
ActivitySlotsRobotTimer()
// ActivitySlotsRobotTimer()
// slots奖池活动结算
ActivitySlotsSettleTimer()
// ActivitySlotsSettleTimer()
}
var (
@ -64,7 +64,8 @@ func ShareRobotTimer() {
db.Mysql().Get(one)
if one.ID == 0 {
one.Share = util.GetShareCode(one.UID)
one.BetReward = v.InitCash + add
// todo
//one.BetReward = v.InitCash + add
db.Mysql().Create(one)
} else {
db.Mysql().Update(&common.ShareInfo{UID: v.RobotID}, map[string]interface{}{"bet_reward": gorm.Expr("bet_reward + ?", add)})

@ -25,6 +25,23 @@ func loadConfig() error {
return nil
},
}
if _, ok := c[common.ReloadTypeConfigShareRankAward]; !ok {
c[common.ReloadTypeConfigShareRankAward] = []func(*pb.ReloadGameConfig) error{
func(rgc *pb.ReloadGameConfig) error {
if err := call.LoadConfigShareRankAward(); err != nil {
log.Error("error : [%s]", err.Error())
return err
}
return nil
},
func(rgc *pb.ReloadGameConfig) error {
util.Go(func() {
call.ShareRankHandler()
})
return nil
},
}
}
call.LoadConfigs(c)
return nil
}

@ -47,7 +47,7 @@ func onLogin(user *common.PlayerDBInfo, a *app.Gin, isNew bool) {
if config.GetBase().Release {
gateURL = "wss://" + gateURL
} else {
gateURL = "wss://" + gateURL + ":16615"
gateURL = "ws://" + gateURL + ":16615"
}
// } else {
// gateURL = "ws://" + gateURL

@ -41,9 +41,6 @@ func LuckyWheelCfg(c *gin.Context) {
}
rechargeInfo := call.GetRechargeInfo(uid)
playerData := call.GetPlayerData(uid)
log.Debug("get config:%+v", *luckyWheel)
log.Debug("rechargeInfo:%+v", *rechargeInfo)
log.Debug("playerData:%+v", *playerData)
if rechargeInfo.TotalRechargeCount <= int64(luckyWheel.RechargeCount) {
return
}
@ -101,7 +98,6 @@ func LuckyWheelLottery(c *gin.Context) {
}
log.Debug("luckyWheelLottery req:%+v", req)
call.GetRedisRankKey()
uid := a.UID
resp := &values.LuckWheelLotteryResp{}
if !db.Redis().Lock(common.GetRedisKeyLuckyWheel(uid)) {
@ -174,12 +170,14 @@ func LuckyWheelLottery(c *gin.Context) {
case 2:
addKey := fmt.Sprintf("l%d", award.WheelType)
playerData.LuckyWheelMap[addKey] += award.WheelCount
award.WheelLessCount = playerData.LuckyWheelMap[addKey]
}
if err != nil {
log.Error("award err, %s", err.Error())
a.Code = values.CodeRetry
return
}
call.SetLuckyWheelRecords(uid, req.LuckyType, award)
luckyWheelBytes, err := json.Marshal(playerData.LuckyWheelMap)
if err != nil {
@ -199,3 +197,28 @@ func LuckyWheelLottery(c *gin.Context) {
resp.Award = *award
a.Data = resp
}
func LuckyWheelAwardRecords(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.LuckWheelAwardRecordsReq)
if !a.S(req) {
return
}
log.Debug("LuckyWheelAwardRecords req:%+v", req)
resp := &values.LuckWheelAwardRecordsResp{}
records, count, totalAmount, err := call.GetLuckWheelRecords(req.Uid, a.UID, req.Page, req.PageSize)
if err != nil {
log.Error("get records err, %s", err.Error())
a.Code = values.CodeRetry
return
}
resp.Records = records
resp.Total = count
resp.TotalAmount = totalAmount
a.Data = resp
}

@ -147,6 +147,12 @@ func RechargeInfo(c *gin.Context) {
for _, channel := range resp.Channels {
channel.PayStatus = call.GetChannelStatus(channel.ChannelID)
}
resp.NeedBet = call.GetUserNeedBet(a.UID)
resp.Cash = int64(call.GetUserCurrencyFloat(a.UID, common.CurrencyType(0), 2))
if resp.NeedBet == 0 {
resp.CanWithdraw = resp.Cash
}
}
func RechargeHistory(c *gin.Context) {

@ -16,117 +16,6 @@ import (
"time"
)
// 分享信息[done]
func ShareInfo(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
if !a.CheckActivityExpire(common.ActivityIDShare) {
return
}
resp := &values.ShareNewInfoResp{}
a.Data = resp
banners := call.GetConfigShareBanner(a.Channel)
for _, v := range banners {
resp.Banners = append(resp.Banners, v.URL)
}
shareInfo := call.GetShareInfo(a.UID)
resp.NowLevel = shareInfo.Level
resp.NowExp = shareInfo.Exp
nextCon := call.GetConfigShare(shareInfo.Level+1, a.Channel)
if nextCon != nil {
resp.NextExp = nextCon.Exp
} else {
resp.NextExp = shareInfo.Exp
}
conShare := call.GetConfigShare(shareInfo.Level, a.Channel)
if conShare == nil {
a.Code = values.CodeRetry
return
}
resp.ShareLink = call.GetShareLink(a.Channel, a.UID)
user, _ := call.GetUserInfo(a.UID)
resp.Avatar = user.Avatar
// 新手任务弹窗
task := &common.ShareTaskNewData{UID: a.UID}
db.Mysql().Get(task)
if task.ID == 0 { // 初始化任务
if user.IsOldDevice != 1 {
resp.PopNewTask = true
}
resp.NewReward = conShare.SubNewReward.Amount
shareInfo.Reward += conShare.SubNewReward.Amount
update := map[string]interface{}{"reward": gorm.Expr("reward + ?", conShare.SubNewReward.Amount)}
if conShare.SubNewReward.CanWithdraw {
shareInfo.Withdrawable += conShare.SubNewReward.Amount
update["withdrawable"] = gorm.Expr("withdrawable + ?", conShare.SubNewReward.Amount)
// 新建一个任务标记玩家已经领取过新手奖励
task := &common.ShareTaskNewData{UID: a.UID, TaskID: 1, Type: common.ShareTaskNewTypeFirst, Progress: 1, Target: 1, Reward: 0, Status: 1}
db.Mysql().Create(task)
} else {
con := call.GetConfigShareTaskNew()
for _, v := range con {
task := &common.ShareTaskNewData{UID: a.UID, TaskID: v.TaskID, Type: v.Type, Progress: 0, Target: v.Target, Reward: v.Reward, Condition: v.Condition}
if v.Type == common.ShareTaskNewTypeFirst {
task.Progress = 1
}
db.Mysql().Create(task)
}
}
db.Mysql().Update(&common.ShareInfo{UID: a.UID}, update)
call.WriteShareBalance(&common.ESShareBalance{
Event: common.ShareEventOther,
FriendUID: a.UID,
AmountType: int(common.CurrencyINR),
RefererUID: a.UID,
Amount: conShare.SubNewReward.Amount,
Level: 1,
Balance: conShare.SubNewReward.Amount,
}, true)
}
// 可退出弹窗
//products := call.GetConfigWithdrawProduct(common.WithdrawSorceShare)
//if shareInfo.PopWithdraw == 0 && len(products) > 0 && shareInfo.Withdrawable >= products[0].Amount*100 {
// resp.PopWithdraw = true
// resp.PopWithdrawAmount = products[0].Amount * 100
// shareInfo.PopWithdraw = 1
// db.Mysql().Update(&common.ShareInfo{ID: shareInfo.ID}, map[string]interface{}{"pop_withdraw": 1})
//}
resp.Balance = shareInfo.Reward
resp.TotalCommission = shareInfo.Withdrawable
resp.TotalReferrals = shareInfo.Down1 + shareInfo.Down2 + shareInfo.Down3 + shareInfo.Down4 + shareInfo.Down5
resp.TotalWithdrawals = call.GetShareWithdrawInfo(a.UID).TotalWithdraw * 100
// 昨日收益弹窗
{
now := time.Now()
t := util.GetZeroTime(now.AddDate(0, 0, -1)).Unix()
last := &common.ShareRewardData{UID: a.UID, Time: t}
db.Mysql().Get(last)
if last.ID > 0 && !util.IsSameDayTimeStamp(now.Unix(), last.PopTime) {
db.Mysql().Update(&common.ShareRewardData{UID: a.UID, Time: t}, map[string]interface{}{"pop_time": now.Unix()})
resp.LastReward.Total = last.TotalReward
resp.LastReward.Invitation = last.InviteReward
resp.LastReward.Recharge = last.RechargeReward
resp.LastReward.Affiliate = last.AffiliateReward
resp.LastReward.Other = last.OtherReward
}
}
// 升级弹窗
{
if shareInfo.LastLevel != shareInfo.Level {
db.Mysql().Update(&common.ShareInfo{UID: a.UID}, map[string]interface{}{"last_level": shareInfo.Level})
resp.LevelUpInfo = conShare.GetLevelUpInfo()
}
}
}
// 分享新手任务[done]
func ShareNewTaskInfo(c *gin.Context) {
a := app.NewApp(c)
@ -188,18 +77,7 @@ func ShareNewTaskDraw(c *gin.Context) {
a.Code = values.CodeRetry
return
}
s := call.GetShareInfo(a.UID)
// 转化奖励
db.Mysql().Update(&common.ShareInfo{UID: a.UID}, map[string]interface{}{"withdrawable": gorm.Expr("withdrawable + ?", task.Reward)})
bal := &common.ESShareBalance{
Event: common.ShareEventOther,
AmountType: int(common.CurrencyINR),
Amount: task.Reward,
RefererUID: a.UID,
Level: s.Level,
Balance: s.Withdrawable + task.Reward,
}
call.WriteShareBalance(bal, false)
call.UpdateShare(a.UID, 3, task.Reward, fmt.Sprintf("%d", task.Target))
resp.Reward = task.Reward
}
@ -378,116 +256,22 @@ func ShareNewRank(c *gin.Context) {
resp.List = list[start:end]
}
// 限时任务
func ShareLimitTaskInfo(c *gin.Context) {
func ShareNewBroadcast(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
resp := &values.ShareLimitTaskInfoResp{}
a.Data = resp
si := call.GetShareInfo(a.UID)
tasks := []*common.ShareLimitTaskData{}
db.Mysql().QueryBySql(fmt.Sprintf("select * from share_limit_task_data where uid = %d order by level asc", a.UID), &tasks)
now := time.Now().Unix()
var task *common.ShareLimitTaskData
for i := 1; i <= si.Level; i++ {
var thisTask *common.ShareLimitTaskData
for _, v := range tasks {
if v.Level == i {
thisTask = v
break
}
}
if thisTask == nil { // 当前等级还未创建
conTask := call.GetConfigShareLimitTask(i, a.Channel)
if conTask != nil {
thisTask = &common.ShareLimitTaskData{}
thisTask.UID = a.UID
thisTask.Level = i
thisTask.CreateTime = now
thisTask.Time = conTask.Time
thisTask.Status = 0
thisTask.Reward = conTask.Reward
db.Mysql().Create(thisTask)
if i <= si.Level && task == nil {
task = thisTask
}
}
} else if thisTask.IsValid() && task == nil {
task = thisTask
}
}
exLevel := si.Level
nextLevel := si.Level + 1
if task != nil {
exLevel = task.Level
nextLevel = task.Level + 1
resp.TimeLeft = task.CreateTime + task.Time*60 - now
resp.Reward = task.Reward
}
conShareEx := call.GetConfigShare(exLevel, a.Channel)
conShare := call.GetConfigShare(nextLevel, a.Channel)
if conShare == nil {
conShare = conShareEx
}
resp.NowLevel = conShareEx.GetLevelUpInfo()
resp.NextLevel = conShare.GetLevelUpInfo()
resp.Exp = si.Exp
resp.LevelUpExp = conShare.Exp
if resp.LevelUpExp < 0 {
resp.LevelUpExp = resp.Exp
}
resp.CanDraw = task != nil && si.Exp >= resp.LevelUpExp
}
// req := new(values.ShareNewBroadcastReq)
// if !a.S(req) {
// return
// }
// if req.Num > 100 {
// req.Num = 100
// }
func ShareLimitTaskDraw(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.ShareLimitTaskDrawReq)
if !a.S(req) {
return
}
resp := &values.ShareLimitTaskDrawResp{}
resp := &values.ShareNewBroadcastResp{List: values.ShareWithdrawBroadcast}
a.Data = resp
task := &common.ShareLimitTaskData{UID: a.UID, Level: req.NowLevel}
db.Mysql().Get(task)
if !task.IsValid() {
a.Code = values.CodeParam
a.Msg = "Invalid draw."
return
}
si := call.GetShareInfo(a.UID)
if si.Level <= task.Level { // 不可领取
a.Code = values.CodeParam
a.Msg = "Invalid draw."
return
}
rows, err := db.Mysql().UpdateWRes(&common.ShareLimitTaskData{}, map[string]interface{}{"status": 1},
fmt.Sprintf("uid = %d and level = %d and status = 0", a.UID, task.Level))
if err != nil || rows == 0 {
a.Code = values.CodeParam
a.Msg = "Invalid draw."
return
}
db.Mysql().Update(&common.ShareInfo{UID: a.UID},
map[string]interface{}{"reward": gorm.Expr("reward + ?", task.Reward), "withdrawable": gorm.Expr("withdrawable + ?", task.Reward)})
call.WriteShareBalance(&common.ESShareBalance{
Event: common.ShareEventOther,
// FriendUID: ,
AmountType: int(common.CurrencyINR),
Amount: task.Reward,
RefererUID: a.UID,
Level: si.Level,
Balance: si.Reward + task.Reward,
}, true)
resp.Reward = task.Reward
}
func ShareNewWithdrawInfo(c *gin.Context) {
@ -757,20 +541,295 @@ func ShareNewWithdrawHis(c *gin.Context) {
}
}
func ShareNewBroadcast(c *gin.Context) {
// todo
// ShareCfg 分享配置数据
func ShareCfg(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
if !a.CheckActivityExpire(common.ActivityIDShare) {
return
}
resp := &values.ShareCfgResp{}
a.Data = resp
resp.ShareCfg = call.GetConfigShareAll()
shareInfo := call.GetShareInfo(a.UID)
resp.ShareLevel = shareInfo.Level
resp.InviteCount = shareInfo.Down1 + shareInfo.Down2 + shareInfo.Down3 + shareInfo.Down4 + shareInfo.Down5
resp.BetCount = shareInfo.BetAmountTeam
resp.Amount = shareInfo.Withdrawable
resp.TotalAward = shareInfo.Reward
err := db.Mysql().C().Model(&common.ShareReward{}).
Select("sum(reward_count) as totayAmount").
Where("uid = ? and reward_at > ?", a.UID, util.GetZeroTime(time.Now()).Unix()).
Scan(&resp.TotalAward).Error
if err != nil {
log.Error("get totayAmount err, %s", err.Error())
}
// req := new(values.ShareNewBroadcastReq)
// if !a.S(req) {
// return
// }
// if req.Num > 100 {
// req.Num = 100
// }
resp.ShareLink = call.GetShareLink(a.Channel, a.UID)
}
resp := &values.ShareNewBroadcastResp{List: values.ShareWithdrawBroadcast}
// Reward 奖励页面数据
func Reward(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
resp := &values.RewardResp{}
a.Data = resp
if !a.CheckActivityExpire(common.ActivityIDShare) {
return
}
jackpot, _ := call.ShareRankJackpotGet()
resp.JackPot = jackpot
weekAt := util.GetWeekZeroTime(time.Now())
shareRankUsers, _, err := call.ShareRankUserGet(1, 3, weekAt, false)
if err != nil {
log.Error("get share rank user err, %s", err.Error())
a.Code = values.CodeRetry
return
}
resp.TopUsers = make([]values.ShareRankUser, 0, len(shareRankUsers))
rankAwards := call.GetConfigShareRankAwardMap()
for index, shareRankUser := range shareRankUsers {
var userAward int
var userAwardExpected int64
rank := index + 1
if rankAwards != nil {
if rankAward, ok := rankAwards[index+1]; ok {
userAward = rankAward.AwardRate
userAwardExpected = jackpot * int64(rankAward.AwardRate) / 10000
}
}
resp.TopUsers = append(resp.TopUsers, values.ShareRankUser{
UserRank: rank,
UserName: shareRankUser.UserInfo.Nick,
UserCount: shareRankUser.UserAwardCount,
UserIcon: shareRankUser.UserInfo.Avatar,
UserAward: userAward,
UserAwardExpected: userAwardExpected,
})
}
// 任务详情
list := []common.ShareTaskNewData{}
db.Mysql().QueryAll(fmt.Sprintf("uid = %d", a.UID), "", &common.ShareTaskNewData{}, &list)
for _, v := range list {
one := values.OneShareNewTask{
TaskID: v.TaskID,
Desc: v.GetDesc(),
Type: v.Type,
Progess: v.Progress,
Target: v.Target,
Reward: v.Reward,
}
if one.Progess >= one.Target || v.Status == 1 {
one.Progess = one.Target
if v.Status == 1 {
one.Status = 2
} else {
one.Status = 1
}
}
resp.TaskList = append(resp.TaskList, one)
}
}
// RewardDetails 玩家奖励详情
func RewardDetails(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.RewardDetailsReq)
if !a.S(req) {
return
}
resp := &values.RewardDetailsResp{}
a.Data = resp
if !a.CheckActivityExpire(common.ActivityIDShare) {
return
}
mdb := db.Mysql().C().Model(&common.ShareReward{}).Where("uid = ?", a.UID)
if req.RewardType != 0 {
mdb = mdb.Where("reward_type = ?", req.RewardType)
}
if req.StartAt != 0 {
mdb = mdb.Where("reward_at >= ?", req.StartAt)
}
if req.EndAt != 0 {
mdb = mdb.Where("reward_at <= ?", req.EndAt)
}
err := mdb.Count(&resp.Total).Error
if err != nil {
log.Error("get total err, %s", err.Error())
a.Code = values.CodeRetry
return
}
// 计算奖励金额总和
var rewardAmount int64
err = mdb.Select("COALESCE(SUM(reward_count), 0)").Row().Scan(&rewardAmount)
if err != nil {
log.Error("get reward amount err, %s", err.Error())
a.Code = values.CodeRetry
return
}
resp.RewardAmount = rewardAmount
err = mdb.Order("reward_at desc").Offset((req.Page - 1) * req.PageSize).Limit(req.PageSize).Find(&resp.List).Error
if err != nil {
log.Error("get list err, %s", err.Error())
a.Code = values.CodeRetry
return
}
}
// RankDetails 排行榜详情
func RankDetails(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.RankDetailsReq)
if !a.S(req) {
return
}
resp := &values.RankDetailsResp{}
a.Data = resp
if !a.CheckActivityExpire(common.ActivityIDShare) {
return
}
rankAt := util.GetWeekZeroTime(time.Now())
if req.Previous {
rankAt = rankAt.AddDate(0, 0, 7)
}
shareRankUsers, count, err := call.ShareRankUserGet(req.Page, req.PageSize, rankAt, true)
if err != nil {
log.Error("get rank user err, %s", err.Error())
a.Code = values.CodeRetry
return
}
jackpot, _ := call.ShareRankJackpotGet()
if req.Previous {
jackpot = call.ShareRankJackpotPreGet()
}
resp.Total = count
rankAwards := call.GetConfigShareRankAwardMap()
for index, shareRankUser := range shareRankUsers {
var userAward int
var userAwardExpected int64
rank := index + 1
if !req.Previous {
if rankAwards != nil {
if rankAward, ok := rankAwards[index+1]; ok {
userAward = rankAward.AwardRate
userAwardExpected = jackpot * int64(rankAward.AwardRate) / 10000
}
}
} else {
userAward = shareRankUser.UserAward
userAwardExpected = shareRankUser.UserAwardCount
}
resp.RankUsers = append(resp.RankUsers, values.ShareRankUser{
UserRank: rank,
UserName: shareRankUser.UserInfo.Nick,
UserCount: shareRankUser.UserAwardCount,
UserIcon: shareRankUser.UserInfo.Avatar,
UserAward: userAward,
UserAwardExpected: userAwardExpected,
})
}
}
func ShareBanner(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
resp := &values.ShareBannerResp{}
a.Data = resp
shareBanners := call.GetConfigShareBanner()
if len(shareBanners) == 0 {
return
}
shareBanner := shareBanners[0]
resp.SearchWord = shareBanner.SearchWord
resp.JpgUrl = shareBanner.URL
resp.Desc = shareBanner.Desc
shareInfo := call.GetShareInfo(a.UID)
resp.ShareCode = shareInfo.Share
resp.ShareLink = call.GetShareLink(a.Channel, a.UID)
}
func ShareWithdraw(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.ShareWithdrawReq)
if !a.S(req) {
return
}
if req.Opt == 0 {
req.Opt = 1
}
uid := a.UID
shareInfo := call.GetShareInfo(uid)
if shareInfo.Reward < req.Amount {
a.Code = values.CodeParam
a.Msg = "Insufficient balance."
return
}
con := call.GetConfigShare(shareInfo.Level, a.Channel)
if con == nil {
a.Code = values.CodeRetry
return
}
sw := call.GetShareWithdrawInfo(uid)
if sw.DayCount >= con.DayWithdrawCount {
a.Code = values.CodeParam
a.Msg = "Withdrawal limit."
return
}
err := call.UpdateShare(uid, 5, req.Amount, fmt.Sprintf("%d", req.Amount))
if err != nil {
log.Error("update share err, %s", err.Error())
a.Code = values.CodeRetry
return
}
_, err = call.UpdateCurrencyPro(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{
UID: uid,
Value: req.Amount,
Event: common.CurrencyEventShare,
Type: common.CurrencyINR,
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, req.Amount, 1),
},
})
if err != nil {
log.Error("update balance err, %s", err.Error())
call.UpdateShare(uid, 6, req.Amount, "callback")
a.Code = values.CodeRetry
return
}
}

@ -385,7 +385,7 @@ func CheckRedPoint(uid int, c *gin.Context) {
// 判断是否有任务可以领取
GetPromotions(nc)
// 邀请奖励
ShareInfo(nc)
//ShareInfo(nc)
// vip奖励
//GetVipInfo(nc)
})

@ -202,6 +202,10 @@ func WithdrawInfo(c *gin.Context) {
resp.Bets = append(resp.Bets, canWithdraw)
}
resp.NeedBet = call.GetUserNeedBet(a.UID)
resp.Cash = int64(call.GetUserCurrencyFloat(a.UID, common.CurrencyType(0), 2))
if resp.NeedBet == 0 {
resp.CanWithdraw = resp.Cash
}
a.Data = resp
}

@ -36,7 +36,7 @@ func GetBalance(c *gin.Context) {
req := &GetBalanceReq{}
resp := &GetBalanceResp{}
a.RetData = resp
if !a.S(req) {
if !a.SB(req) {
resp.Code = CodeRequestInvalidParams
return
}
@ -72,7 +72,7 @@ func GameBet(c *gin.Context) {
req := &GameBetReq{}
resp := &GameBetResp{}
a.RetData = resp
if !a.S(req) {
if !a.SB(req) {
resp.Code = CodeRequestInvalidParams
return
}
@ -90,6 +90,7 @@ func GameBet(c *gin.Context) {
if req.Reason == "bet" || req.Reason == "win" {
betReq := &base.BetReq{
UID: uid,
CurrencyType: common.CurrencyINR,
SessionType: base.SessionTypeBet,
GameID: GetGameID(common.ProviderJin2, req.GameID),
GameName: req.GameID,

@ -8,4 +8,5 @@ import (
func luckyWheel(e *gin.RouterGroup) {
e.POST("/luckyWheel/cfg", handler.LuckyWheelCfg)
e.POST("/luckyWheel/lottery", handler.LuckyWheelLottery)
e.POST("/luckyWheel/awardRecords", handler.LuckyWheelAwardRecords)
}

@ -6,18 +6,23 @@ import (
"github.com/gin-gonic/gin"
)
// todo 邀请,充值,客损
func share(e *gin.RouterGroup) {
// 新版分享
e.POST("/share/info", handler.ShareInfo)
e.POST("/share/taskInfo", handler.ShareNewTaskInfo)
e.POST("/share/cfg", handler.ShareCfg)
e.POST("/share/reward", handler.Reward)
e.POST("/share/reward/details", handler.RewardDetails)
e.POST("/share/rank/details", handler.RankDetails)
e.POST("/share/banner", handler.ShareBanner)
e.POST("/share/withdraw", handler.ShareWithdraw)
e.POST("/share/taskDraw", handler.ShareNewTaskDraw)
e.POST("/share/taskInfo", handler.ShareNewTaskInfo)
e.POST("/share/affiliate", handler.ShareNewAffiliate)
e.POST("/share/commission", handler.ShareNewCommission)
e.POST("/share/rank", handler.ShareNewRank)
e.POST("/share/limitTaskInfo", handler.ShareLimitTaskInfo)
e.POST("/share/limitTaskDraw", handler.ShareLimitTaskDraw)
e.POST("/share/withdrawInfo", handler.ShareNewWithdrawInfo)
e.POST("/share/withdraw", handler.ShareNewWithdraw)
//e.POST("/share/withdraw", handler.ShareNewWithdraw)
e.POST("/share/withdrawHis", handler.ShareNewWithdrawHis)
e.POST("/share/broadcast", handler.ShareNewBroadcast)
}

@ -1,6 +1,8 @@
package values
import "server/common"
import (
"server/common"
)
type LuckyWheelCfgReq struct {
}
@ -23,3 +25,18 @@ type LuckWheelLotteryResp struct {
AwardIndex int `json:"awardIndex"` // 奖励下标
Award common.LuckyAward `json:"award"` // 奖励类型
}
type LuckWheelAwardRecordsReq struct {
// 针对个人
Uid int `json:"uid"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
// 针对大厅(大厅场景最多返回10条)
}
type LuckWheelAwardRecordsResp struct {
Records []common.LuckyWheelReward `json:"records"`
Total int64 `json:"total"` // 总数
TotalAmount int64 `json:"totalAmount"` // 总奖励数量
}

@ -26,6 +26,10 @@ type RechargeInfoResp struct {
Tips string
SelectID int
DiscountTicket []*DiscountTicket
Cash int64
CanWithdraw int64
NeedBet int64
}
type PayInfo struct {
@ -175,6 +179,9 @@ type WithDrawInfoResp struct {
Tips string
Fees []int64
Bets []int64
Cash int64 // 货币
CanWithdraw int64 // 可提现金额
NeedBet int64 // 打码信息
}

@ -46,15 +46,6 @@ type OneShareRank struct {
Reward int64
}
// Opt 1转到余额 2直接赠送
// PayAccount opt为2时必填
type ShareWithdrawReq struct {
Opt int `json:"Opt" binding:"required"`
Amount int64 `json:"Amount" binding:"required"`
// 可能对应多种结构
PayAccount map[string]interface{} `json:"PayAccount"`
}
// Available 可用余额
type ShareWithdrawResp struct {
Available int64

@ -58,15 +58,6 @@ type ShareNewTaskDrawResp struct {
// Target 任务目标
// Reward 任务奖励
// Status 任务状态,0进行中,1可领取,2已领取
type OneShareNewTask struct {
TaskID int
Desc string
Type int
Progess int64
Target int64
Reward int64
Status int
}
// Page 页码
// Num 一页个数,最大50
@ -231,3 +222,90 @@ type ShareNewBroadcastReq struct {
type ShareNewBroadcastResp struct {
List []string
}
type ShareCfgResp struct {
// 等级配置
ShareCfg []common.ConfigShare `json:"shareCfg"`
// 分享等级
ShareLevel int `json:"shareLevel"`
// 邀请人数
InviteCount int64 `json:"inviteCount"`
// 团队下注金额
BetCount int64 `json:"betCount"`
// 奖励金额
Amount int64 `json:"amount"`
// 总奖励
TotalAward int64 `json:"totalAward"`
// 当天奖励
TodayAward int64 `json:"todayAward"`
// 分享链接
ShareLink string `json:"shareLink"`
}
type RewardDetailsReq struct {
RewardType int `json:"rewardType"`
StartAt int64 `json:"startAt"`
EndAt int64 `json:"endAt"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type RewardDetailsResp struct {
Total int64 `json:"total"`
RewardAmount int64 `json:"rewardAmount"`
List []common.ShareReward `json:"list"`
}
type ShareRankUser struct { // 排行榜玩家
UserRank int `json:"userRank"` // 玩家排名
UserName string `json:"userName"` // 玩家昵称
UserCount int64 `json:"userCount"` // 玩家数值
UserIcon string `json:"userIcon"` // 玩家头像
UserAward int `json:"userAward"` // 玩家预计分奖比例(*10000)
UserAwardExpected int64 `json:"userAwardExpected"` // 玩家预计奖励
}
type OneShareNewTask struct { // 任务列表
TaskID int `json:"taskID"`
Desc string `json:"desc"`
Type int `json:"type"`
Progess int64 `json:"progess"`
Target int64 `json:"target"`
Reward int64 `json:"reward"`
Status int `json:"status"`
}
type RewardResp struct {
TopUsers []ShareRankUser `json:"topUsers"` // 前三玩家
TaskList []OneShareNewTask `json:"taskList"` // 任务列表
JackPot int64 `json:"jackPot"` // 奖池数值
}
type RankDetailsReq struct {
Previous bool `json:"previous"` // 历史列表
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type RankDetailsResp struct {
Total int64 `json:"total"`
RankUsers []ShareRankUser `json:"rankUsers"`
JackPot int64 `json:"jackPot"`
}
type ShareBannerResp struct {
JpgUrl string `json:"jpgUrl"` // 图片地址
ShareCode string `json:"shareCode"` // 分享码
SearchWord string `json:"searchWord"` // google search word
Desc string `json:"desc"` // 文案
ShareLink string `json:"shareLink"` // 分享链接
}
// Opt 1转到余额 2直接赠送
// PayAccount opt为2时必填
type ShareWithdrawReq struct {
Opt int `json:"Opt"`
Amount int64 `json:"Amount"`
// 可能对应多种结构
PayAccount map[string]interface{} `json:"PayAccount"`
}

Loading…
Cancel
Save