周卡,厂商逻辑修改

dev_aagame_provider
zhora 2 months ago
parent 7bd458b62e
commit 3f523af780
  1. 48
      call/config.go
  2. 156
      call/pay.go
  3. 9
      call/pdd.go
  4. 25
      common/activity.go
  5. 1
      common/recharge.go
  6. 5
      common/redis_keys.go
  7. 1
      modules/backend/migrate.go
  8. 32
      modules/web/app/balance.go
  9. 2
      modules/web/handler/firstpage.go
  10. 2
      modules/web/handler/game.go
  11. 19
      modules/web/handler/recharge.go
  12. 328
      modules/web/handler/weekCard.go
  13. 2
      modules/web/providers/base/base.go
  14. 6
      modules/web/providers/sn/api.go
  15. 20
      modules/web/providers/sn/base.go
  16. 78
      modules/web/providers/sn/handler.go
  17. 41
      modules/web/providers/sn/values.go
  18. 31
      modules/web/values/activity.go
  19. 7
      modules/web/values/pay.go

@ -1437,6 +1437,19 @@ func GetConfigCurrencyResourceNeedBet(t common.CurrencyRes, amount int64, speMul
return return
} }
func GetConfigCurrencyResourceNeedBetByActId(activityId int, amount int64) (needBet int64) {
if amount <= 0 {
return
}
switch activityId {
case common.ActivityIDWeekCard:
config := GetConfigWeekCard()
needBet = int64(config.BetMultiples) * amount
return
}
return
}
// LoadConfigFirstPay 首充 // LoadConfigFirstPay 首充
func LoadConfigFirstPay() (err error) { func LoadConfigFirstPay() (err error) {
one := []*common.ConfigFirstPay{} one := []*common.ConfigFirstPay{}
@ -2147,18 +2160,45 @@ func GetConfigGameTag() (result []*common.ConfigGameTag) {
return return
} }
func GetConfigGameTagByIds(ids []int) (result []*common.ConfigGameTag) { func GetConfigGameTagByIds(ids []int, notSort bool) (result []*common.ConfigGameTag) {
if len(configGameTag) == 0 { if len(configGameTag) == 0 {
LoadConfigGameTag() LoadConfigGameTag()
} }
idOrderMap := make(map[int]int)
for i, id := range ids {
idOrderMap[id] = i
}
for _, v := range configGameTag { for _, v := range configGameTag {
if util.SliceContain(ids, v.TagId) { if util.SliceContain(ids, v.TagId) {
result = append(result, v) result = append(result, v)
} }
} }
sort.Slice(result, func(i, j int) bool {
return result[i].Sort > result[j].Sort if notSort {
}) sort.Slice(result, func(i, j int) bool {
orderI, okI := idOrderMap[result[i].TagId]
orderJ, okJ := idOrderMap[result[j].TagId]
if okI && okJ {
return orderI < orderJ
}
if okI && !okJ {
return true
}
if !okI && okJ {
return false
}
return result[i].Sort > result[j].Sort
})
} else {
sort.Slice(result, func(i, j int) bool {
return result[i].Sort > result[j].Sort
})
}
return return
} }

@ -6,6 +6,7 @@ import (
"errors" "errors"
"fmt" "fmt"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
"gorm.io/gorm/clause"
"io/ioutil" "io/ioutil"
"math/rand" "math/rand"
"net/http" "net/http"
@ -222,7 +223,14 @@ func RechargeCallback(r *common.RechargeOrder, success bool, payAccount, extra s
t = common.CurrencyResourceRechargeWithBonus t = common.CurrencyResourceRechargeWithBonus
} }
} }
needBet := GetConfigCurrencyResourceNeedBet(t, amount+bonus) var needBet int64
if r.ActivityID != 0 {
needBet = GetConfigCurrencyResourceNeedBetByActId(r.ActivityID, amount)
}
if needBet == 0 {
needBet = GetConfigCurrencyResourceNeedBet(t, amount+bonus)
}
cb := &common.CurrencyBalance{ cb := &common.CurrencyBalance{
UID: r.UID, UID: r.UID,
Type: r.CurrencyType, Type: r.CurrencyType,
@ -533,6 +541,7 @@ func PayActivity(r *common.RechargeOrder, notCharge bool, user *common.PlayerDBI
} }
// todo // todo
util.Go(func() { util.Go(func() {
// 分享活动
UpdateShare(r.UID, 2, r.Amount) UpdateShare(r.UID, 2, r.Amount)
shareInfo := common.ShareInfo{UID: user.Id} shareInfo := common.ShareInfo{UID: user.Id}
@ -594,24 +603,24 @@ func CheckAllActivity(r *common.RechargeOrder) {
if r.ProductID > 0 { if r.ProductID > 0 {
product = GetConfigPayProductByID(r.ProductID) product = GetConfigPayProductByID(r.ProductID)
} }
// slots奖池活动 //// slots奖池活动
ActivitySlots(r, product) //ActivitySlots(r, product)
if product == nil { //if product == nil {
return // return
} //}
switch product.ActivityID { switch r.ActivityID {
case common.ActivityIDBreakGift:
ActivityBreakGift(r, product)
case common.ActivityIDWeekCard: case common.ActivityIDWeekCard:
ActivityWeekCard(r, product) ActivityWeekCard(r, product)
case common.ActivityIDLuckyShop: //case common.ActivityIDBreakGift:
ActivityLuckyShop(r, product) // ActivityBreakGift(r, product)
case common.ActivityIDSevenDayBox: //case common.ActivityIDLuckyShop:
ActivitySevenDayBox(r, product) // ActivityLuckyShop(r, product)
case common.ActivityIDSuper: //case common.ActivityIDSevenDayBox:
ActivitySuper(r, product) // ActivitySevenDayBox(r, product)
//case common.ActivityIDSuper:
// ActivitySuper(r, product)
} }
} }
@ -643,89 +652,6 @@ func ActivityBreakGift(r *common.RechargeOrder, product *common.ConfigPayProduct
UploadActivityData(r.UID, common.ActivityIDBreakGift, common.ActivityDataJoin, product.Value) UploadActivityData(r.UID, common.ActivityIDBreakGift, common.ActivityDataJoin, product.Value)
} }
func ActivityWeekCard(r *common.RechargeOrder, product *common.ConfigPayProduct) {
con := GetConfigWeekCard()
if con == nil {
return
}
rows, err := db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: r.UID}, map[string]interface{}{
"recharge_time": time.Now().Unix(), "day": 0, "recharge_amount": r.Amount, "rewards": ""})
if err != nil || rows == 0 {
log.Error("err:%v", err)
return
}
// ok
UpdateCurrencyPro(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{
UID: r.UID,
Value: product.Value,
Event: common.CurrencyEventActivityWeekCard,
Type: common.CurrencyINR,
NeedBet: GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, product.Value),
ChannelID: r.ChannelID,
Exi1: product.ProductID,
},
})
UploadActivityData(r.UID, common.ActivityIDWeekCard, common.ActivityDataJoin, product.Value)
// 自动领第一天的
cons := GetConfigWeekCard()
cardInfo := GetUserWeekCard(r.UID)
var rewardList []int64
_ = rewardList
_ = cons
//rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5)
//if err != nil {
// log.Error("err:%v", err)
//}
//rewardList = append([]int64{cons.DayOneReward}, rewardList...)
//rewardList = append(rewardList, 0)
//if cardInfo.ID <= 0 || len(cardInfo.Rewards) == 0 {
// cardInfo.Day = 0
// rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5)
// if err != nil {
// log.Error("err:%v", err)
// }
// rewardList = append([]int64{cons.DayOneReward}, rewardList...)
// rewardList = append(rewardList, 0)
// cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",")
// db.Mysql().Update(&common.ActivityWeekCardData{UID: r.UID}, map[string]interface{}{
// "rewards": cardInfo.Rewards,
// })
//}
rewards, _ := util.StringToInt64Slice(cardInfo.Rewards, ",")
if cardInfo.Day >= len(rewards) {
log.Error("The weekly card has been collected")
return
}
now := time.Now()
rows, err = db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: r.UID},
map[string]interface{}{"day": gorm.Expr("day + 1"), "last_draw": now.Unix()})
if rows == 0 || err != nil {
log.Error("err:%v", err)
return
}
var reward int64
if cardInfo.Day < 6 {
reward = rewards[cardInfo.Day] * common.DecimalDigits
}
resource := common.CurrencyResourceWeekCard
if cardInfo.Day > 0 {
resource = common.CurrencyResourceBonus
}
if reward > 0 {
UpdateCurrencyPro(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{
UID: r.UID,
Type: common.CurrencyINR,
Value: reward,
Event: common.CurrencyEventActivityWeekCard,
ChannelID: r.ChannelID,
NeedBet: GetConfigCurrencyResourceNeedBet(resource, reward),
},
})
}
}
func ActivityLuckyShop(r *common.RechargeOrder, product *common.ConfigPayProduct) { func ActivityLuckyShop(r *common.RechargeOrder, product *common.ConfigPayProduct) {
rows, err := db.Mysql().UpdateResW(&common.ActivityLuckyShopData{}, map[string]interface{}{"buy": 1}, rows, err := db.Mysql().UpdateResW(&common.ActivityLuckyShopData{}, map[string]interface{}{"buy": 1},
fmt.Sprintf("uid = %d and product_id = %d and buy = 0", r.UID, product.ProductID)) fmt.Sprintf("uid = %d and product_id = %d and buy = 0", r.UID, product.ProductID))
@ -894,3 +820,37 @@ func WithdrawInfoGet(uid int) (withdrawInfo common.WithdrawInfo, err error) {
} }
return return
} }
func ActivityWeekCard(r *common.RechargeOrder, product *common.ConfigPayProduct) {
con := GetConfigWeekCard()
if con == nil {
return
}
now := time.Now()
weekCardData := common.WeekCardData{
UID: r.UID,
BeginAt: now.Unix(),
CardPrice: int(product.Amount / common.DecimalDigits),
AwardTimes: 1,
AwardAt: now.Unix(),
AwardTotal: int(product.Amount),
AwardTotalHistory: int(product.Amount),
BuyCardTimes: 1,
}
err := db.Mysql().C().Model(&common.WeekCardData{}).Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "uid"}},
DoUpdates: clause.Assignments(map[string]interface{}{
"begin_at": weekCardData.BeginAt,
"card_price": weekCardData.CardPrice,
"award_times": weekCardData.AwardTimes,
"award_at": weekCardData.AwardAt,
"award_total": weekCardData.AwardTotal,
"award_total_history": gorm.Expr("`award_total_history` + ?", weekCardData.AwardTotalHistory),
"buy_card_times": gorm.Expr("`buy_card_times` + ?", weekCardData.BuyCardTimes),
}),
}).Create(&weekCardData).Error
if err != nil {
log.Error("update week card err:%v", err.Error())
return
}
}

@ -47,3 +47,12 @@ func GetPddData(uid int) (result *common.PddDataNew, err error) {
} }
return return
} }
func GetWeekCardData(uid int) (result *common.WeekCardData, err error) {
err = db.Mysql().C().Model(&common.WeekCardData{}).Where("uid = ?", uid).Find(&result).Error
if err != nil {
log.Error("get week card data err, %s", err.Error())
return
}
return
}

@ -671,9 +671,10 @@ type WeekCardDay struct {
} }
type ConfigWeekCard struct { type ConfigWeekCard struct {
ID int `gorm:"primarykey"` ID int `gorm:"primarykey"`
Switch int `gorm:"column:switch;type:int(11);default:0;comment:开关(1开2关)" json:"Switch" web:"switch"` Switch int `gorm:"column:switch;type:int(11);default:0;comment:开关(1开2关)" json:"Switch" web:"switch"`
Amount int64 `gorm:"column:amount;type:int(20);default:50000;comment:周卡价格" json:"Amount" web:"amount"` Amount int64 `gorm:"column:amount;type:int(20);default:50000;comment:周卡价格" json:"Amount" web:"amount"`
BetMultiples int `gorm:"column:bet_multiples;type:int(11);comment:打码倍数" json:"BetMultiples" web:"bet_multiples"`
// []WeekCardDay json // []WeekCardDay json
AwardData string `gorm:"column:award_data;type:varchar(512);default:'';comment:奖励数据" json:"AwardData" web:"award_data"` AwardData string `gorm:"column:award_data;type:varchar(512);default:'';comment:奖励数据" json:"AwardData" web:"award_data"`
@ -684,3 +685,21 @@ type ConfigWeekCard struct {
func (c *ConfigWeekCard) TableName() string { func (c *ConfigWeekCard) TableName() string {
return "config_week_card" return "config_week_card"
} }
type WeekCardData struct {
ID int `gorm:"primarykey"`
UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:uid"`
BeginAt int64 `gorm:"column:begin_at;type:bigint(20);default:0;comment:周卡开始时间"`
CardPrice int `gorm:"column:card_price;type:int(11);default:0;comment:周卡价格"`
Amount int `gorm:"column:amount;type:bigint(20);default:0;comment:当前领取金额"`
AwardTimes int `gorm:"column:award_times;type:int(11);default:0;comment:当前领取次数"`
AwardAt int64 `gorm:"column:award_at;type:bigint(20);comment:最近领取时间"`
AwardTotal int `gorm:"column:award_total;type:bigint(20);comment:当前总奖励"`
AwardTotalHistory int `gorm:"column:award_total_history;type:bigint(20);comment:历史总奖励"`
BuyCardTimes int `gorm:"column:buy_card_times;type:bigint(20);comment:买卡次数"`
}
func (m *WeekCardData) TableName() string {
return "week_card_data"
}

@ -134,6 +134,7 @@ type RechargeOrder struct {
Event int `gorm:"column:event;not null;type:smallint(4);comment:事件类型"` Event int `gorm:"column:event;not null;type:smallint(4);comment:事件类型"`
CurrencyType CurrencyType `gorm:"column:currency_type;not null;type:int(11);comment:货币类型"` CurrencyType CurrencyType `gorm:"column:currency_type;not null;type:int(11);comment:货币类型"`
ProductID int `gorm:"column:productid;not null;type:int(11)"` ProductID int `gorm:"column:productid;not null;type:int(11)"`
ActivityID int `gorm:"column:activity_id;default:0;type:int(11)"`
Status uint8 `gorm:"column:status;not null;type:tinyint(4);comment:1新建,2支付完成,3发货完成,4支付失败,5取消"` Status uint8 `gorm:"column:status;not null;type:tinyint(4);comment:1新建,2支付完成,3发货完成,4支付失败,5取消"`
FailReason string `gorm:"column:fail_reason;type:varchar(255);comment:失败原因"` FailReason string `gorm:"column:fail_reason;type:varchar(255);comment:失败原因"`
ChannelID int `gorm:"column:channel_id;type:bigint(20);default:1;comment:渠道id" redis:"channel_id"` ChannelID int `gorm:"column:channel_id;type:bigint(20);default:1;comment:渠道id" redis:"channel_id"`

@ -51,6 +51,7 @@ const (
RedisKeyLuckyWheel = "luckyWheel" RedisKeyLuckyWheel = "luckyWheel"
RedisKeyPdd = "pdd" RedisKeyPdd = "pdd"
RedisKeyShare = "share" RedisKeyShare = "share"
RedisKeyWeekCard = "week_card"
) )
const ( const (
@ -214,3 +215,7 @@ func GetRedisKeyPdd(uid int) string {
func GetRedisKeyShare(uid int) string { func GetRedisKeyShare(uid int) string {
return fmt.Sprintf("%v:%v", RedisKeyShare, uid) return fmt.Sprintf("%v:%v", RedisKeyShare, uid)
} }
func GetRedisKeyWeekCard(uid int) string {
return fmt.Sprintf("%v:%v", RedisKeyWeekCard, uid)
}

@ -150,6 +150,7 @@ func MigrateDB() {
new(common.ShareRankData), new(common.ShareRankData),
new(common.LuckyWheelReward), new(common.LuckyWheelReward),
new(common.ConfigWeekCard), new(common.ConfigWeekCard),
new(common.WeekCardData),
) )
if err != nil { if err != nil {
panic("Migrate db fail") panic("Migrate db fail")

@ -2,6 +2,7 @@ package app
import ( import (
"fmt" "fmt"
"github.com/liangdas/mqant/log"
"server/call" "server/call"
"server/common" "server/common"
"server/db" "server/db"
@ -57,11 +58,13 @@ func (g *Gin) CheckWithdrawCondition(amount int64, t common.CurrencyType) (ok bo
} }
// CanBuyProduct 判断是否满足可以购买该商品 // CanBuyProduct 判断是否满足可以购买该商品
func (g *Gin) CanBuyProduct(actID, pid int) (can bool) { func (g *Gin) CanBuyProduct(actID, pid int) (can bool, product *common.ConfigPayProduct) {
if actID == 0 || actID < common.ProductTypeAll { if actID == 0 {
return true return
} }
if !g.CheckActivityExpire(actID) { productList := call.GetConfigPayProductByActivityID(actID)
if len(productList) == 0 {
log.Debug("get activity[%d] product is nil", actID)
return return
} }
switch actID { switch actID {
@ -72,6 +75,25 @@ func (g *Gin) CanBuyProduct(actID, pid int) (can bool) {
g.Code = values.CodeBuyLimit g.Code = values.CodeBuyLimit
return return
} }
case common.ActivityIDWeekCard:
configWeekCard := call.GetConfigWeekCard()
if configWeekCard == nil {
return
}
weekCardData, err := call.GetWeekCardData(g.UID)
if err != nil {
return
}
if weekCardData.BeginAt > 0 { // 还在周期中,不能购买
return
}
for _, v := range productList {
if configWeekCard.Amount*common.DecimalDigits == v.Amount {
can = true
product = v
return
}
}
} }
return true return
} }

@ -167,7 +167,7 @@ func FirstPageNew(c *gin.Context) {
Multiple: item.Multiple / 100, Multiple: item.Multiple / 100,
}) })
} }
configGameTags := call.GetConfigGameTagByIds(call.GetConfigShowGameTagIds()) configGameTags := call.GetConfigGameTagByIds(call.GetConfigShowGameTagIds(), false)
tags := make([]values.Tag, 0, len(configGameTags)) tags := make([]values.Tag, 0, len(configGameTags))
for _, v := range configGameTags { for _, v := range configGameTags {
tags = append(tags, values.Tag{ tags = append(tags, values.Tag{

@ -98,7 +98,7 @@ func GameTag(c *gin.Context) {
return return
} }
showGameTag := showGameTags[0] showGameTag := showGameTags[0]
configGameTags := call.GetConfigGameTagByIds(showGameTag.ShowTagIdsInt) configGameTags := call.GetConfigGameTagByIds(showGameTag.ShowTagIdsInt, true)
tags := make([]values.TagWithGameList, 0, len(configGameTags)) tags := make([]values.TagWithGameList, 0, len(configGameTags))
for _, v := range configGameTags { for _, v := range configGameTags {
showCount := v.ShowCount showCount := v.ShowCount

@ -232,6 +232,16 @@ func PlayerRecharge(c *gin.Context) {
return return
} }
req.Amount = product.Amount req.Amount = product.Amount
req.ActivityID = product.ActivityID
if product.ActivityID > 0 {
can, _ := a.CanBuyProduct(req.ActivityID, req.ProductID)
if !can {
a.Code = values.CodeRetry
a.Msg = "Buy limit"
return
}
req.Bonus = false
}
} else { } else {
req.Amount = common.RoundCurrency(req.CurrencyType, req.Amount) req.Amount = common.RoundCurrency(req.CurrencyType, req.Amount)
} }
@ -290,7 +300,6 @@ func NewRechargeImp(req *values.RechargeReq, uid, cid int, ip string) *RechargeI
return nil return nil
} }
order := &common.RechargeOrder{ order := &common.RechargeOrder{
// ProductID: product.ProductID, Amount: product.Amount,
CreateTime: time.Now().Unix(), CreateTime: time.Now().Unix(),
CurrencyType: req.CurrencyType, CurrencyType: req.CurrencyType,
Amount: req.Amount, Amount: req.Amount,
@ -300,8 +309,16 @@ func NewRechargeImp(req *values.RechargeReq, uid, cid int, ip string) *RechargeI
Event: int(common.CurrencyEventReCharge), Event: int(common.CurrencyEventReCharge),
UPI: req.PayChannel, UPI: req.PayChannel,
ProductID: req.ProductID, ProductID: req.ProductID,
ActivityID: req.ActivityID,
}
if req.ActivityID > 0 {
switch req.ActivityID {
case common.ActivityIDWeekCard:
order.Event = int(common.CurrencyEventActivityWeekCard)
}
} }
// 只有商城购买才能使用优惠券 // 只有商城购买才能使用优惠券
// todo activityId为0才是商城购买
if req.ProductID == 0 && req.DiscountTicketId > 0 { if req.ProductID == 0 && req.DiscountTicketId > 0 {
// 判断是否有折扣券 // 判断是否有折扣券
ticket := call.GetItem(req.DiscountTicketId) ticket := call.GetItem(req.DiscountTicketId)

@ -4,17 +4,14 @@ import (
"fmt" "fmt"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/liangdas/mqant/log" "github.com/liangdas/mqant/log"
"github.com/olivere/elastic/v7"
"gorm.io/gorm" "gorm.io/gorm"
"math/rand"
"server/call" "server/call"
"server/common" "server/common"
"server/config"
"server/db" "server/db"
"server/modules/web/app" "server/modules/web/app"
"server/modules/web/values" "server/modules/web/values"
"server/pb"
"server/util" "server/util"
"sort"
"time" "time"
) )
@ -24,78 +21,60 @@ func WeekCardInfo(c *gin.Context) {
a.Response() a.Response()
}() }()
a.GetUID() a.GetUID()
if !a.CheckActivityExpire(common.ActivityIDWeekCard) { resp := &values.WeekCardInfoResp{}
return
}
resp := &values.ActivityWeekCardInfoResp{}
a.Data = resp a.Data = resp
uid := a.UID
cons := call.GetConfigWeekCard() cons := call.GetConfigWeekCard()
_ = cons if cons == nil {
cardInfo := new(common.ActivityWeekCardData) a.Code = values.CodeRetry
if a.UID > 0 { return
cardInfo = call.GetUserWeekCard(a.UID) }
} weekCardData, err := call.GetWeekCardData(uid)
var rewardList []int64 if err != nil {
var err error log.Error("get week card data err, %s", err.Error())
_ = err a.Code = values.CodeRetry
//rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5) return
//if err != nil { }
// log.Error("err:%v", err) resp.Amount = cons.Amount
//} resp.List = make([]values.WeekCardDay, 0, len(cons.AwardDetails))
//rewardList = append([]int64{cons.DayOneReward}, rewardList...) now := time.Now()
//rewardList = append(rewardList, 0) for index := 1; index <= 7; index++ {
//if cardInfo.ID <= 0 || len(cardInfo.Rewards) == 0 { var state int
// cardInfo.Day = 0 if weekCardData != nil && weekCardData.ID != 0 && weekCardData.BeginAt != 0 { // 已经购买周卡的情况下
// rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5) resp.IsUnlock = true
// if err != nil { if util.IsSameDayTimeStamp(now.Unix(), weekCardData.AwardAt) {
// log.Error("err:%v", err) resp.Time = int64(util.GetZeroTime(now.AddDate(0, 0, 1)).Sub(now).Seconds())
// } }
// rewardList = append([]int64{cons.DayOneReward}, rewardList...) if weekCardData.AwardTimes >= index {
// rewardList = append(rewardList, 0) state = 2
// if cardInfo.ID <= 0 { } else if weekCardData.AwardTimes < index {
// cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",") state = 0
// if a.UID > 0 { if !util.IsSameDayTimeStamp(now.Unix(), weekCardData.AwardAt) &&
// db.Mysql().Create(cardInfo) weekCardData.AwardTimes+1 == index {
// } state = 1
// } else { }
// cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",") }
// db.Mysql().Update(&common.ActivityWeekCardData{UID: a.UID}, map[string]interface{}{ }
// "rewards": cardInfo.Rewards, award := cons.AwardDetails[index]
// }) var coinDesc string
// } if award.AwardLower == award.AwardUpper || award.AwardUpper == 0 {
//} coinDesc = fmt.Sprintf("₹%d", award.AwardLower)
} else {
if rewardList == nil { coinDesc = fmt.Sprintf("₹%d-₹%d", award.AwardLower, award.AwardUpper)
rewardList, _ = util.StringToInt64Slice(cardInfo.Rewards, ",")
}
if cardInfo.RechargeTime != 0 {
resp.RechargeStatus = true
}
// step:签完7天就重置
if cardInfo.Day >= len(rewardList) {
resp.RechargeStatus = false
}
for _, item := range rewardList {
_ = item
//resp.RewardList = append(resp.RewardList, values.WeekCardInfo{
// Min: cons.MiniLimit,
// Max: cons.RewardAmount - cons.MiniLimit*4,
// Val: item,
//})
}
resp.Status = true
if config.GetBase().Release {
if util.IsSameDayTimeStamp(time.Now().Unix(), cardInfo.LastDraw) {
resp.Status = false
} }
resp.List = append(resp.List, values.WeekCardDay{
State: state,
Coin: coinDesc,
})
} }
resp.RewardDay = cardInfo.Day
resp.ChannelList = call.GetConfigPayChannelsByID(common.CurrencyINR) products := call.GetConfigPayProductByActivityID(common.ActivityIDWeekCard)
resp.ProductList = call.GetConfigPayProductByActivityID(common.ActivityIDWeekCard) for _, v := range products {
if resp.Status && resp.RechargeStatus { if v.Amount == resp.Amount*common.DecimalDigits {
call.PushRed(a.UID, pb.RedPointModule_RedPointWeekCard, 1) resp.ProductId = v.ProductID
break
}
} }
call.UploadActivityData(a.UID, common.ActivityIDSign, common.ActivityDataClick, 0)
} }
func WeekCardDraw(c *gin.Context) { func WeekCardDraw(c *gin.Context) {
@ -103,123 +82,136 @@ func WeekCardDraw(c *gin.Context) {
defer func() { defer func() {
a.Response() a.Response()
}() }()
if !a.CheckActivityExpire(common.ActivityIDWeekCard) { req := new(values.WeekCardDrawReq)
return
}
req := new(values.ActivityWeekCardDrawReq)
if !a.S(req) { if !a.S(req) {
return return
} }
resp := &values.ActivityWeekCardDrawResp{} resp := &values.WeekCardDrawResp{}
a.Data = resp a.Data = resp
// conf := call.GetConfigActivityWeekCard() uid := a.UID
card := call.GetUserWeekCard(a.UID)
if card.ID == 0 { if !db.Redis().Lock(common.GetRedisKeyWeekCard(uid)) {
a.Code = values.CodeRetry a.Code = values.CodeRetry
return return
} }
now := time.Now().Unix() defer func() {
if config.GetBase().Release { db.Redis().UnLock(common.GetRedisKeyWeekCard(uid))
if util.IsSameDayTimeStamp(now, card.LastDraw) { }()
a.Code = values.CodeRetry
a.Msg = "today has reward" configWeekCard := call.GetConfigWeekCard()
return if configWeekCard == nil {
} log.Error("get week card config is nil")
a.Code = values.CodeRetry
a.Msg = "Illegal request"
return
} }
rewards, _ := util.StringToInt64Slice(card.Rewards, ",")
if card.Day >= len(rewards) { weekCardData, err := call.GetWeekCardData(uid)
if err != nil {
log.Error("get week card data err, %s", err.Error())
a.Code = values.CodeRetry a.Code = values.CodeRetry
a.Msg = "The weekly card has been collected"
return return
} }
rows, err := db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: a.UID}, now := time.Now()
map[string]interface{}{"day": gorm.Expr("day + 1"), "last_draw": now}) if weekCardData.ID == 0 || weekCardData.BeginAt == 0 {
if rows == 0 || err != nil {
log.Error("err:%v", err)
a.Code = values.CodeRetry a.Code = values.CodeRetry
a.Msg = "Not unlocked Week Card"
return return
} }
var reward int64
if card.Day < 6 { if util.IsSameDayTimeStamp(now.Unix(), weekCardData.AwardAt) {
reward = rewards[card.Day] * common.DecimalDigits a.Code = values.CodeRetry
a.Msg = "Already received today"
return
}
if req.Index != weekCardData.AwardTimes+1 {
a.Code = values.CodeRetry
a.Msg = "Illegal request"
return
}
var awardCount int64
maxAwardCount := weekCardData.CardPrice * 2 * common.DecimalDigits // 总奖励金额
lessAwardCount := maxAwardCount - weekCardData.AwardTotal // 剩余奖励金额
if req.Index == 7 { // 最后一天
awardCount = int64(maxAwardCount - weekCardData.AwardTotal)
} else { } else {
// 第几天折扣券 tryCount := 10
// 用户画像一:6天内充值3笔及以上用户 awardOffset := 0
// 推送当前最高额度向上一档充值满减卷 lessMinAwardCount := 0 // 剩下每天的最低金额
// 用户画像二:只解锁周卡,未充值的玩家 lessMaxAwardCount := 0 // 剩下每天的最大金额
// 推送当前额度向下一档充值满减卷,最低300 for index := req.Index + 1; index <= 7; index++ {
var list []common.CurrencyBalance lessMinAwardCount += configWeekCard.AwardDetails[index].AwardLower * common.DecimalDigits
q := elastic.NewBoolQuery() lessMaxAwardCount += configWeekCard.AwardDetails[index].AwardUpper * common.DecimalDigits
q.Filter(elastic.NewRangeQuery("time").Gte(card.RechargeTime)) }
q.Filter(elastic.NewRangeQuery("time").Lte(now)) try:
q.Filter(elastic.NewRangeQuery("event").Gte(common.CurrencyEventReCharge)) awardDetail := configWeekCard.AwardDetails[req.Index]
q.Must(elastic.NewTermsQuery("uid", a.UID)) if awardDetail.AwardUpper == awardDetail.AwardLower || awardDetail.AwardUpper == 0 {
db.ES().QueryList(common.ESIndexBalance, 0, 100, q, &list, "time", true) awardCount = int64(awardDetail.AwardUpper * common.DecimalDigits)
up := false } else {
maxAmount := card.RechargeAmount randValue := (awardDetail.AwardUpper - awardDetail.AwardLower) + awardOffset
if len(list) >= 3 { if randValue < 0 {
up = true randValue = 1
for _, item := range list {
if item.Value > maxAmount {
maxAmount = item.Value
}
} }
awardCount = int64((rand.Intn(randValue) + awardDetail.AwardLower) * common.DecimalDigits)
} }
log.Info("maxAmount:%v", maxAmount) if lessMinAwardCount+int(awardCount) > lessAwardCount ||
ticket := call.GetConfigDiscountTicketByAmount(maxAmount) lessMaxAwardCount+int(awardCount) < lessAwardCount { // 当前金额+之后每天最低金额比剩余金额还大的时候
log.Info("ticket:%v", ticket) if tryCount > 0 {
if ticket.ID > 0 { tryCount--
// 赠送优惠券 if lessMinAwardCount+int(awardCount) > lessAwardCount {
tickets := call.GetConfigDiscountTicket() awardOffset -= 10 * common.DecimalDigits
sort.Slice(tickets, func(i, j int) bool { } else if lessMaxAwardCount+int(awardCount) < lessAwardCount {
return tickets[i].RechargeAmount < tickets[j].RechargeAmount awardOffset += 10 * common.DecimalDigits
})
// 获取下一档
nextIdx := -1
for idx, item := range tickets {
if item.RechargeAmount == maxAmount {
if up {
nextIdx = idx + 1
} else if item.RechargeAmount >= 300*common.DecimalDigits {
nextIdx = idx - 1
}
break
} }
goto try
} }
var nextTicket = ticket log.Error("uid:%d weekCard draw err, lessAward:%d lessMinAward:%d lessMaxAward:%d | awardCount:%d awardOffset:%d", uid, lessAwardCount, lessMinAwardCount, lessMaxAwardCount, awardCount, awardOffset)
if len(tickets) > nextIdx && nextIdx != -1 { a.Code = values.CodeRetry
nextTicket = tickets[nextIdx] return
}
if up {
call.AddUserDiscountTicket(a.UID, ticket.DiscountAmount, ticket.RechargeAmount, -1, 0, false)
call.SendMailWithContent(a.UID, call.SystemTitle, fmt.Sprintf(call.EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits))
resp.DiscountTicket = ticket.DiscountAmount
resp.Amount = ticket.RechargeAmount
} else if nextTicket.ID > 0 {
call.AddUserDiscountTicket(a.UID, nextTicket.DiscountAmount, nextTicket.RechargeAmount, -1, 1, false)
call.SendMailWithContent(a.UID, call.SystemTitle, fmt.Sprintf(call.EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits))
resp.DiscountTicket = nextTicket.DiscountAmount
resp.Amount = nextTicket.RechargeAmount
}
} }
} }
resource := common.CurrencyResourceWeekCard
if card.Day > 0 { if int(awardCount)+weekCardData.AwardTotal > maxAwardCount {
resource = common.CurrencyResourceBonus awardCount = int64(maxAwardCount - weekCardData.AwardTotal)
} }
resp.Reward = reward
if reward > 0 { if awardCount <= 0 {
call.UpdateCurrencyPro(&common.UpdateCurrency{ a.Code = values.CodeRetry
CurrencyBalance: &common.CurrencyBalance{ return
UID: a.UID, }
Type: common.CurrencyINR,
Value: reward, _, err = call.UpdateCurrencyPro(&common.UpdateCurrency{
Event: common.CurrencyEventActivityWeekCard, CurrencyBalance: &common.CurrencyBalance{
ChannelID: a.Channel, UID: a.UID,
NeedBet: call.GetConfigCurrencyResourceNeedBet(resource, reward), Type: common.CurrencyINR,
}, Value: awardCount,
}) Event: common.CurrencyEventActivityWeekCard,
ChannelID: a.Channel,
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, awardCount, configWeekCard.BetMultiples),
},
})
if err != nil {
log.Error("update currency err, %s", err.Error())
return
}
updates := make(map[string]interface{})
if req.Index == 7 {
updates["begin_at"] = 0
updates["award_times"] = 0
updates["award_at"] = 0
updates["award_total"] = 0
updates["card_price"] = 0
updates["award_total_history"] = gorm.Expr("`award_total_history` + ?", awardCount)
} else {
updates["award_total"] = gorm.Expr("award_total + ?", awardCount)
updates["award_times"] = gorm.Expr("`award_times` + ?", 1)
updates["award_at"] = now.Unix()
updates["award_total_history"] = gorm.Expr("`award_total_history` + ?", awardCount)
}
err = db.Mysql().C().Model(&common.WeekCardData{}).Where("id = ?", weekCardData.ID).Updates(updates).Error
if err != nil {
log.Error("update week card data err, %s", err.Error())
} }
call.PushRed(a.UID, pb.RedPointModule_RedPointWeekCard, 0) resp.Reward = awardCount
call.UploadActivityData(a.UID, common.ActivityIDSign, common.ActivityDataJoin, reward) return
} }

@ -83,6 +83,8 @@ type BetReq struct {
SessionID string // 轮次id SessionID string // 轮次id
Time int64 Time int64
VoidType int64 // 注单无效原因 VoidType int64 // 注单无效原因
// todo
IsFinish int // (为0不处理,1:未结束,2:结束)
// SettleWithoutBet bool // 如果为true,代表结算的时候settle值为玩家实际加减值,不需要扣除下注 // SettleWithoutBet bool // 如果为true,代表结算的时候settle值为玩家实际加减值,不需要扣除下注
} }

@ -3,12 +3,6 @@ package sn
// Success Codes // Success Codes
const ( const (
CodeSuccess = 0 // 操作成功 CodeSuccess = 0 // 操作成功
SnAccount = "wjA77Game_N601"
DefaultLanguage = "en"
AgentId = 320
SnId = 135
SignKey = "2e0af20e8f0444a7decde7ae4c382dec"
) )
// Request Error Codes // Request Error Codes

@ -25,12 +25,24 @@ func (s *Sub) Init() {
API = APITest API = APITest
APICreate = APICreateUserTest APICreate = APICreateUserTest
APIControl = APIControlTest APIControl = APIControlTest
AgentMap = AgentMapTest SnAccount = TestSnAccount
DefaultLanguage = TestDefaultLanguage
ApiKey = TestApiKey
WalletKey = TestWalletKey
ControlKey = TestControlKey
AgentId = TestAgentId
SnId = TestSnId
if config.GetBase().Release { if config.GetBase().Release {
API = APIRlease API = APIRlease
APICreate = APICreateUserRlease APICreate = APICreateUserRlease
APIControl = APIControlRlease APIControl = APIControlRlease
AgentMap = AgentMapRelease SnAccount = ReleaseSnAccount
DefaultLanguage = ReleaseDefaultLanguage
ApiKey = ReleaseApiKey
WalletKey = ReleaseWalletKey
ControlKey = ReleaseControlKey
AgentId = ReleaseAgentId
SnId = ReleaseSnId
} }
} }
@ -105,7 +117,7 @@ func (s *Sub) EnterGame() string {
reqBody, _ := json.Marshal(req) reqBody, _ := json.Marshal(req)
var tmpValue map[string]interface{} var tmpValue map[string]interface{}
json.Unmarshal(reqBody, &tmpValue) json.Unmarshal(reqBody, &tmpValue)
req.Sign = GeneratedSign(tmpValue, SignKey) req.Sign = GeneratedSign(tmpValue, ApiKey)
var resp EnterResp var resp EnterResp
err := util.HttpPost(API, req, &resp, nil) err := util.HttpPost(API, req, &resp, nil)
@ -143,7 +155,7 @@ func (s *Sub) createUser() error {
reqBody, _ := json.Marshal(req) reqBody, _ := json.Marshal(req)
var tmpValue map[string]interface{} var tmpValue map[string]interface{}
json.Unmarshal(reqBody, &tmpValue) json.Unmarshal(reqBody, &tmpValue)
req.Sign = GeneratedSign(tmpValue, SignKey) req.Sign = GeneratedSign(tmpValue, ApiKey)
var resp CreateUserResp var resp CreateUserResp
err := util.HttpPost(APICreate, req, &resp, nil) err := util.HttpPost(APICreate, req, &resp, nil)

@ -40,7 +40,8 @@ func GetBalance(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
log.Debug("sn get balance:%s", string(body)) account := c.GetHeader("account")
log.Debug("sn get balance, %s:%s", account, string(body))
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
log.Error("unmarshal err, %s", err.Error()) log.Error("unmarshal err, %s", err.Error())
@ -48,7 +49,6 @@ func GetBalance(c *gin.Context) {
return return
} }
account := c.GetHeader("account")
headers := make(map[string]string) headers := make(map[string]string)
for key, values := range c.Request.Header { for key, values := range c.Request.Header {
if len(values) > 0 { if len(values) > 0 {
@ -61,7 +61,7 @@ func GetBalance(c *gin.Context) {
newBody, _ := json.Marshal(req) newBody, _ := json.Marshal(req)
var tmpValue map[string]interface{} var tmpValue map[string]interface{}
json.Unmarshal(newBody, &tmpValue) json.Unmarshal(newBody, &tmpValue)
tmpSign := GeneratedSign(tmpValue, SignKey) tmpSign := GeneratedSign(tmpValue, WalletKey)
if tmpSign != req.Sign { if tmpSign != req.Sign {
log.Error("sign is wrong, %+v", req) log.Error("sign is wrong, %+v", req)
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
@ -84,7 +84,7 @@ func GetBalance(c *gin.Context) {
resp.Msg = "success" resp.Msg = "success"
resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 0) * common.DecimalDigits) resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 0) * common.DecimalDigits)
log.Debug("GetBalanceResp:%+v", resp) log.Debug("sn getBalanceResp, %s:%+v", account, resp)
} }
func GameBet(c *gin.Context) { func GameBet(c *gin.Context) {
@ -101,14 +101,14 @@ func GameBet(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
log.Debug("sn game bet:%s", string(body)) account := c.GetHeader("account")
log.Debug("sn game bet, %s:%s", account, string(body))
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
log.Error("unmarshal err, %s", err.Error()) log.Error("unmarshal err, %s", err.Error())
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
account := c.GetHeader("account")
headers := make(map[string]string) headers := make(map[string]string)
for key, values := range c.Request.Header { for key, values := range c.Request.Header {
if len(values) > 0 { if len(values) > 0 {
@ -126,7 +126,7 @@ func GameBet(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
tmpSign := GeneratedSign(tmpValue, SignKey) tmpSign := GeneratedSign(tmpValue, WalletKey)
if tmpSign != req.Sign { if tmpSign != req.Sign {
log.Error("sign is wrong, %+v", req) log.Error("sign is wrong, %+v", req)
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
@ -158,8 +158,8 @@ func GameBet(c *gin.Context) {
GameID: req.GameId, GameID: req.GameId,
GameName: configGame.GameCode, GameName: configGame.GameCode,
Provider: provider, Provider: provider,
BetID: req.BetId, BetID: req.OrderId,
SessionID: req.OrderId, SessionID: req.BetId,
Time: now, Time: now,
BetAmount: int64(betAmount), BetAmount: int64(betAmount),
TurnOver: int64(betAmount), TurnOver: int64(betAmount),
@ -180,7 +180,7 @@ func GameBet(c *gin.Context) {
resp.Data.DeductionAmount = betAmount resp.Data.DeductionAmount = betAmount
resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits) resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits)
resp.Msg = "success" resp.Msg = "success"
log.Debug("GameBetResp:%+v", resp) log.Debug("sn gameBetResp, %s:%+v", account, resp)
a.Data = resp a.Data = resp
} }
@ -198,14 +198,14 @@ func Settle(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
log.Debug("sn settle:%s", string(body)) account := c.GetHeader("account")
log.Debug("sn settle, %s:%s", account, string(body))
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
log.Error("unmarshal err, %s", err.Error()) log.Error("unmarshal err, %s", err.Error())
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
account := c.GetHeader("account")
headers := make(map[string]string) headers := make(map[string]string)
for key, values := range c.Request.Header { for key, values := range c.Request.Header {
if len(values) > 0 { if len(values) > 0 {
@ -222,7 +222,7 @@ func Settle(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
tmpSign := GeneratedSign(tmpValue, SignKey) tmpSign := GeneratedSign(tmpValue, WalletKey)
if tmpSign != req.Sign { if tmpSign != req.Sign {
log.Error("sign is wrong, %+v", req) log.Error("sign is wrong, %+v", req)
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
@ -236,17 +236,23 @@ func Settle(c *gin.Context) {
return return
} }
provider := call.GetConfigGameProvider(common.ProviderSn) provider := call.GetConfigGameProvider(common.ProviderSn)
{ // 订单是否合法
var betId string
if len(req.Details) > 0 {
betId = req.Details[0].BetId
}
{ // todo 订单是否合法
record := &common.ProviderBetRecord{ record := &common.ProviderBetRecord{
UID: uid, UID: uid,
Provider: provider.ProviderID, Provider: provider.ProviderID,
Type: base.SessionTypeBet, Type: base.SessionTypeBet,
SessionID: req.OrderId, SessionID: betId,
} }
db.Mysql().Get(record) db.Mysql().Get(record)
if record.ID == 0 { if record.ID == 0 {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits) resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits)
log.Debug("sn settleResp, %s:%+v", account, resp)
return return
} }
} }
@ -257,10 +263,7 @@ func Settle(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
var betId string
if len(req.Details) > 0 {
betId = req.Details[0].BetId
}
settleAmount := int64(req.JpBonus + req.BackAmount) settleAmount := int64(req.JpBonus + req.BackAmount)
betReq := &base.BetReq{ betReq := &base.BetReq{
UID: uid, UID: uid,
@ -269,13 +272,18 @@ func Settle(c *gin.Context) {
GameID: req.GameId, GameID: req.GameId,
GameName: configGame.GameCode, GameName: configGame.GameCode,
Provider: provider, Provider: provider,
BetID: betId, BetID: req.OrderId,
SessionID: req.OrderId, SessionID: betId,
Time: now, Time: now,
} }
isFinish := 1
for _, detail := range req.Details { for _, detail := range req.Details {
settleAmount += int64(detail.WinAmount) settleAmount += int64(detail.WinAmount)
if detail.IsFinish {
isFinish = 2
}
} }
betReq.IsFinish = isFinish
betReq.SettleAmount = settleAmount betReq.SettleAmount = settleAmount
betResp := base.SessionBet(betReq) betResp := base.SessionBet(betReq)
if betResp.Code != base.CodeOk { if betResp.Code != base.CodeOk {
@ -287,13 +295,13 @@ func Settle(c *gin.Context) {
} else { } else {
resp.Msg = "operation failed." resp.Msg = "operation failed."
} }
log.Error("GameBetResp err:%v", resp.Code) log.Error("sn gameBetResp err, %s:%+v", account, betResp)
return return
} }
resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits) resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits)
resp.Msg = "success" resp.Msg = "success"
log.Debug("SettleResp:%+v", resp) log.Debug("sn settleResp, %s:%+v", account, resp)
a.Data = resp a.Data = resp
} }
@ -311,14 +319,14 @@ func Rollback(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
log.Debug("sn rollback:%s", string(body)) account := c.GetHeader("account")
log.Debug("sn rollback, %s:%s", account, string(body))
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
log.Error("unmarshal err, %s", err.Error()) log.Error("unmarshal err, %s", err.Error())
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
account := c.GetHeader("account")
headers := make(map[string]string) headers := make(map[string]string)
for key, values := range c.Request.Header { for key, values := range c.Request.Header {
if len(values) > 0 { if len(values) > 0 {
@ -335,7 +343,7 @@ func Rollback(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
tmpSign := GeneratedSign(tmpValue, SignKey) tmpSign := GeneratedSign(tmpValue, WalletKey)
if tmpSign != req.Sign { if tmpSign != req.Sign {
log.Error("sign is wrong, %+v", req) log.Error("sign is wrong, %+v", req)
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
@ -399,7 +407,7 @@ func Rollback(c *gin.Context) {
} }
resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits) resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits)
resp.Msg = "success" resp.Msg = "success"
log.Debug("rollback:%+v", resp) log.Debug("sn rollback, %s:%+v", account, resp)
a.Data = resp a.Data = resp
} }
@ -417,14 +425,14 @@ func Update(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
log.Debug("sn update:%s", string(body)) account := c.GetHeader("account")
log.Debug("sn update, %s:%s", account, string(body))
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
log.Error("unmarshal err, %s", err.Error()) log.Error("unmarshal err, %s", err.Error())
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
account := c.GetHeader("account")
headers := make(map[string]string) headers := make(map[string]string)
for key, values := range c.Request.Header { for key, values := range c.Request.Header {
if len(values) > 0 { if len(values) > 0 {
@ -441,7 +449,7 @@ func Update(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
tmpSign := GeneratedSign(tmpValue, SignKey) tmpSign := GeneratedSign(tmpValue, WalletKey)
if tmpSign != req.Sign { if tmpSign != req.Sign {
log.Error("sign is wrong, %+v", req) log.Error("sign is wrong, %+v", req)
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
@ -529,7 +537,7 @@ func Update(c *gin.Context) {
} }
resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits) resp.Data.Chips = int(call.GetUserCurrencyFloat(uid, common.CurrencyType(0), 0) * common.DecimalDigits)
resp.Msg = "success" resp.Msg = "success"
log.Debug("rollback:%+v", resp) log.Debug("sn rollback, %s:%+v", account, resp)
a.Data = resp a.Data = resp
} }
@ -547,14 +555,14 @@ func GameControlCallback(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
log.Debug("sn gameControlCallback:%s", string(body)) account := c.GetHeader("account")
log.Debug("sn gameControlCallback, %s:%s", account, string(body))
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
log.Error("unmarshal err, %s", err.Error()) log.Error("unmarshal err, %s", err.Error())
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
account := c.GetHeader("account")
headers := make(map[string]string) headers := make(map[string]string)
for key, values := range c.Request.Header { for key, values := range c.Request.Header {
if len(values) > 0 { if len(values) > 0 {
@ -571,7 +579,7 @@ func GameControlCallback(c *gin.Context) {
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
return return
} }
tmpSign := GeneratedSign(tmpValue, SignKey) tmpSign := GeneratedSign(tmpValue, ControlKey)
if tmpSign != req.Sign { if tmpSign != req.Sign {
log.Error("sign is wrong, %+v", req) log.Error("sign is wrong, %+v", req)
resp.Code = INVALIDREQUESTERR resp.Code = INVALIDREQUESTERR
@ -624,7 +632,7 @@ func Control(uid int, controlId int) error {
reqBody, _ := json.Marshal(req) reqBody, _ := json.Marshal(req)
var tmpValue map[string]interface{} var tmpValue map[string]interface{}
json.Unmarshal(reqBody, &tmpValue) json.Unmarshal(reqBody, &tmpValue)
req.Sign = GeneratedSign(tmpValue, SignKey) req.Sign = GeneratedSign(tmpValue, ApiKey)
var resp ControlResp var resp ControlResp
err := util.HttpPost(APIControl, req, &resp, nil) err := util.HttpPost(APIControl, req, &resp, nil)

@ -11,18 +11,30 @@ import (
) )
const ( const (
APIRlease = "https://api.nbetps.com/v2/launch_game" APIRlease = "https://ve-api.1betnbet.com/v2/launch_game"
APITest = "https://api.nbetps.com/v2/launch_game" APITest = "https://api.nbetps.com/v2/launch_game"
APICreateUserRlease = "https://api.nbetps.com/v1/create_user" APICreateUserRlease = "https://ve-api.1betnbet.com/v1/create_user"
APICreateUserTest = "https://api.nbetps.com/v1/create_user" APICreateUserTest = "https://api.nbetps.com/v1/create_user"
APIControlRlease = "https://api.nbetps.com/v1/control" APIControlRlease = "https://ve-api.1betnbet.com/v1/control"
APIControlTest = "https://api.nbetps.com/v1/control" APIControlTest = "https://api.nbetps.com/v1/control"
// LaunchGameURL = "/api/usr/ingame" TestSnAccount = "wjA77Game_N601"
// GetGameListURL = "/api/game/loadlist" TestDefaultLanguage = "en"
// Lang = "hi" TestAgentId = 320
TestSnId = 135
TestApiKey = "2e0af20e8f0444a7decde7ae4c382dec"
TestWalletKey = "2e0af20e8f0444a7decde7ae4c382dec"
TestControlKey = "2e0af20e8f0444a7decde7ae4c382dec"
ReleaseSnAccount = "veveA77Game_603"
ReleaseDefaultLanguage = "en"
ReleaseAgentId = 338
ReleaseSnId = 141
ReleaseApiKey = "f5b7582b32420f7a602b47c0e99a69b7"
ReleaseWalletKey = "2e0af20e8f0444a7decde7ae4c382dec"
ReleaseControlKey = "2e0af20e8f0444a7decde7ae4c382dec"
) )
type Agent struct { type Agent struct {
@ -31,18 +43,11 @@ type Agent struct {
} }
var ( var (
API = "" API = ""
APICreate = "" APICreate = ""
APIControl = "" APIControl = ""
AgentMap Agent SnAccount, DefaultLanguage, ApiKey, WalletKey, ControlKey string
AgentMapTest = Agent{ AgentId, SnId int
MchId: "slotgolden777test",
Key: "010804d1-7bbf-4ed5-9b50-60fbd2b22e34",
}
AgentMapRelease = Agent{
MchId: "slotgolden777",
Key: "ddeaeb76-5624-41fe-a6ea-7ad9307d7701",
}
) )
func getSignStr(str string, pass ...string) string { func getSignStr(str string, pass ...string) string {

@ -144,31 +144,28 @@ type OneWeekCard struct {
TotalReward int64 TotalReward int64
} }
type WeekCardInfo struct { type WeekCardDay struct {
Min int64 State int `json:"state"` // 0没领取,1可领取,2已经领取
Val int64 Coin string `json:"coin"` // 金币数值
Max int64
} }
type ActivityWeekCardInfoResp struct {
RewardList []WeekCardInfo // 奖励列表 type WeekCardInfoResp struct {
RewardDay int // 领取天数 List []WeekCardDay `json:"list"` // 奖励配置
Status bool // 是否可领取 Amount int64 `json:"tAmount"` // 周卡价格
RechargeStatus bool // 是否充值 IsUnlock bool `json:"isUnlock"` // 是否解锁
ChannelList []*common.ConfigPayChannels Time int64 `json:"time"` // 下次领取任务倒计时/可领取奖励
ProductList []*common.ConfigPayProduct ProductId int `json:"productId"` // 商品id
} }
// Level 领取的周卡的等级 // Level 领取的周卡的等级
type ActivityWeekCardDrawReq struct { type WeekCardDrawReq struct {
Level int Index int `json:"index"`
} }
// Reward 获得的奖励 // Reward 获得的奖励
// DiscountTicket 获得的折扣券折扣 // DiscountTicket 获得的折扣券折扣
type ActivityWeekCardDrawResp struct { type WeekCardDrawResp struct {
Reward int64 Reward int64
DiscountTicket int64
Amount int64
} }
// Spin 可转次数 // Spin 可转次数

@ -56,9 +56,10 @@ type RechargeReq struct {
DiscountTicketId int `json:"DiscountTicketId"` // 折扣券ID DiscountTicketId int `json:"DiscountTicketId"` // 折扣券ID
Amount int64 `json:"amount"` Amount int64 `json:"amount"`
Bonus bool `json:"bonus"` Bonus bool `json:"bonus"`
ProductID int `json:"productId"` ProductID int `json:"productId"`
ActivityID int `json:"activityID"`
UserName *string `json:"userName"` // 用户姓名 UserName *string `json:"userName"` // 用户姓名
UserPhone string `json:"userPhone"` // 用户手机号 UserPhone string `json:"userPhone"` // 用户手机号

Loading…
Cancel
Save