Merge pull request 'dev' (#9) from dev into release

7.16版本
pull/10/head
mfangming 1 year ago
commit b3d657fe8e
  1. 37
      call/config.go
  2. 11
      call/reload.go
  3. 18
      call/user.go
  4. 3
      cmd/build.sh
  5. 0
      cmd/fieldalignment.sh
  6. 48
      cmd/gener_code.sh
  7. 0
      cmd/reboot.sh
  8. 0
      cmd/start.sh
  9. 0
      cmd/stop.sh
  10. 0
      cmd/swagger.sh
  11. 34
      common/activity.go
  12. 15
      common/config.go
  13. 1
      common/currency.go
  14. 8
      common/es.go
  15. 2
      common/player.go
  16. 2
      common/task.go
  17. 3
      modules/backend/handler/common/common.go
  18. 2
      modules/backend/migrate.go
  19. 2
      modules/backend/values/gm.go
  20. 1
      modules/web/app/account.go
  21. 6
      modules/web/handler/account.go
  22. 309
      modules/web/handler/activity.go
  23. 1
      modules/web/handler/h5.go
  24. 3
      modules/web/middleware/token.go
  25. 2
      modules/web/providers/gs/api.go
  26. 11
      modules/web/routers/routers_activity.go
  27. 36
      modules/web/values/activity.go
  28. 21
      util/time.go

@ -62,6 +62,7 @@ var (
configActivitySevenDayBox []*common.ConfigActivitySevenDayBox configActivitySevenDayBox []*common.ConfigActivitySevenDayBox
configActivitySuper []*common.ConfigActivitySuper configActivitySuper []*common.ConfigActivitySuper
configTgRobot []*common.ConfigTgRobot configTgRobot []*common.ConfigTgRobot
configBetDraw []*common.ConfigActivityBetDraw
) )
var ( var (
@ -1260,6 +1261,15 @@ func GetConfigActivitySign() []*common.ConfigActivitySign {
return configActivitySign return configActivitySign
} }
func GetConfigActivitySignByWheel(wheel int) (ret []*common.ConfigActivitySign) {
for _, conf := range configActivitySign {
if wheel >= conf.WheelStart && wheel <= conf.WheelEnd {
ret = append(ret, conf)
}
}
return
}
func LoadConfigActivityBreakGift() (err error) { func LoadConfigActivityBreakGift() (err error) {
list := []*common.ConfigActivityBreakGift{} list := []*common.ConfigActivityBreakGift{}
if _, err = db.Mysql().QueryAll("", "recharge_down", &common.ConfigActivityBreakGift{}, &list); err != nil { if _, err = db.Mysql().QueryAll("", "recharge_down", &common.ConfigActivityBreakGift{}, &list); err != nil {
@ -1487,3 +1497,30 @@ func LoadConfigTgRobot() (err error) {
func GetConfigTgRobot() []*common.ConfigTgRobot { func GetConfigTgRobot() []*common.ConfigTgRobot {
return configTgRobot return configTgRobot
} }
// LoadBetDraw 加载 BetDraw 的配置
func LoadBetDraw() (err error) {
var list []*common.ConfigActivityBetDraw
if _, err = db.Mysql().QueryAll("", "", &common.ConfigActivityBetDraw{}, &list); err != nil {
log.Error("err:%v", err)
return err
}
configBetDraw = list
return nil
}
func GetConfigBetDraw() []*common.ConfigActivityBetDraw {
return configBetDraw
}
func GetConfigBetDrawByType(t int) ([]*common.ConfigActivityBetDraw, []int64) {
var ret []*common.ConfigActivityBetDraw
var weight []int64
for _, conf := range configBetDraw {
if conf.Type == t {
weight = append(weight, conf.Weight)
ret = append(ret, conf)
}
}
return ret, weight
}

@ -448,4 +448,15 @@ func CommonReload(c map[int][]func(*pb.ReloadGameConfig) error) {
return nil return nil
}} }}
} }
// 为 BetDraw 注册重新加载函数
if _, ok := c[common.ReloadConfigBetDraw]; !ok {
c[common.ReloadConfigBetDraw] = []func(*pb.ReloadGameConfig) error{func(rgc *pb.ReloadGameConfig) error {
if err := LoadBetDraw(); err != nil {
log.Error("error : [%s]", err.Error())
return err
}
return nil
}}
}
} }

@ -586,10 +586,24 @@ func UpdatePlayerProfile(data *common.ESGameData) error {
} }
util.Go(func() { util.Go(func() {
now := time.Now()
// 更新vip // 更新vip
UpdateVip(uid, 0, bet, settle) UpdateVip(uid, 0, bet, settle)
// 检查任务 // 检查任务
CheckTask(Task{Uid: uid, Value: bet / 100, Types: []common.TaskType{common.TaskTypePlayGame, common.TaskTypeBet1000, common.TaskTypeBet10000}}) CheckTask(Task{Uid: uid, Value: bet / 100, Types: []common.TaskType{common.TaskTypePlayGame, common.TaskTypeBet1000, common.TaskTypeBet10000}})
// 日打码量
playerData := GetPlayerData(uid)
updates := make(map[string]interface{})
if !util.IsSameDayTimeStamp(now.Unix(), playerData.DayBetTime) {
updates["day_bet_time"] = now.Unix()
updates["day_bet"] = bet / 100
} else {
updates["day_bet"] = gorm.Expr("day_bet + ?", bet/100)
}
db.Mysql().Update(&common.PlayerData{UID: uid}, updates)
db.Mysql().Update(&common.ActivityBetDrawData{UID: uid}, map[string]interface{}{
"lucky": gorm.Expr("lucky + ?", bet/100),
})
}) })
// 写入es // 写入es
@ -602,6 +616,10 @@ func UpdatePlayerProfile(data *common.ESGameData) error {
func GetPlayerData(uid int) *common.PlayerData { func GetPlayerData(uid int) *common.PlayerData {
data := &common.PlayerData{UID: uid} data := &common.PlayerData{UID: uid}
db.Mysql().Get(data) db.Mysql().Get(data)
now := time.Now()
if !util.IsSameDayTimeStamp(now.Unix(), data.DayBetTime) {
data.DayBetTime = 0
}
return data return data
} }

@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
cd ..
set -e set -e
cd pb/proto cd pb/proto
./gener.sh ./gener.sh
@ -7,4 +8,4 @@ cd pb/proto
# go generate # go generate
cd ../.. cd ../..
#go build main.go #go build main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o gameserver main.go CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o indiaprovider main.go

@ -0,0 +1,48 @@
#!/bin/bash
# 检查是否提供了参数
if [ $# -eq 0 ]; then
echo "请输入输入值。"
exit 1
fi
# 输入值
input_value=$1
# 生成 Go 代码
cat <<EOF >generated_code.go
var config$input_value []*common.Config$input_value
// Load$input_value 加载 $input_value 的配置
func Load$input_value() (err error) {
conf := common.ConfigCommon{ConfigType: common.Config$input_value{}.ConfigName()}
if err = db.Mysql().Get(&conf); err != nil {
log.Error("err:%v", err)
return err
}
if err = json.Unmarshal([]byte(conf.TableContent), &config$input_value); err != nil {
log.Error("err:%v", err)
return err
}
return nil
}
func GetConfig$input_value() []*common.Config$input_value {
return config$input_value
}
ReloadConfig$input_value
// 为 $input_value 注册重新加载函数
if _, ok := c[common.ReloadConfig$input_value]; !ok {
c[common.ReloadConfig$input_value] = []func(*pb.ReloadGameConfig) error{func(rgc *pb.ReloadGameConfig) error {
if err := Load$input_value(); err != nil {
log.Error("error : [%s]", err.Error())
return err
}
return nil
}}
}
EOF
echo "Go 代码已成功生成至 generated_code.go 文件。"

@ -19,6 +19,7 @@ const (
ActivityIDLuckyShop // 幸运商店活动 ActivityIDLuckyShop // 幸运商店活动
ActivityIDSevenDayBox // 7日签到宝箱 ActivityIDSevenDayBox // 7日签到宝箱
ActivityIDSuper // 超级1+2 ActivityIDSuper // 超级1+2
ActivityIDBetDraw // 下注抽奖活动
) )
@ -258,10 +259,13 @@ func (c *ActivityLuckyCode) TableName() string {
} }
type ConfigActivitySign struct { type ConfigActivitySign struct {
ID int `gorm:"primarykey"` ID int `gorm:"primarykey"`
Day int `gorm:"column:day;type:int(11);default:1;comment:签到天数" web:"day"` Day int `gorm:"column:day;type:int(11);default:1;comment:签到天数" web:"day"`
Reward int64 `gorm:"column:reward;not null;type:bigint(20);comment:奖励" web:"reward"` WheelStart int `gorm:"column:wheel_start;type:int(11);default:1;comment:开始期数" web:"wheel_start"`
Recharge int64 `gorm:"column:recharge;type:bigint(20);default:0;comment:所需充值金额" web:"recharge"` WheelEnd int `gorm:"column:wheel_end;type:int(11);default:1;comment:结束期数" web:"wheel_end"`
Reward int64 `gorm:"column:reward;not null;type:bigint(20);comment:奖励" web:"reward"`
Recharge int64 `gorm:"column:recharge;type:bigint(20);default:0;comment:所需充值金额" web:"recharge"`
Bet int64 `gorm:"column:bet;type:bigint(20);default:0;comment:打码量" web:"bet"`
} }
func (c *ConfigActivitySign) TableName() string { func (c *ConfigActivitySign) TableName() string {
@ -269,10 +273,14 @@ func (c *ConfigActivitySign) TableName() string {
} }
type ActivitySignData struct { type ActivitySignData struct {
ID int `gorm:"primarykey"` ID int `gorm:"primarykey"`
UID int `gorm:"column:uid;type:int(11);uniqueIndex:uid"` UID int `gorm:"column:uid;type:int(11);uniqueIndex:uid"`
Sign int `gorm:"column:sign;type:int(11);comment:签到天数,二进制"` Sign int `gorm:"column:sign;type:int(11);comment:签到天数,二进制"`
Time int64 `gorm:"column:time;type:bigint(20);comment:首次参与时间"` Wheel int `gorm:"column:wheel;type:int(11);default:1;comment:第几轮签到"`
Time int64 `gorm:"column:time;type:bigint(20);comment:首次参与时间"`
Finish bool `gorm:"column:finish;type:tinyint;default:0;comment:当前签到状态"`
Reward int64 `gorm:"column:reward;type:bigint(20);default:0;comment:累计领取奖励"`
SignTime int64 `gorm:"column:sign_time;type:bigint(20);comment:签到时间"`
} }
func (c *ActivitySignData) TableName() string { func (c *ActivitySignData) TableName() string {
@ -483,3 +491,13 @@ type ActivitySuperData struct {
func (c *ActivitySuperData) TableName() string { func (c *ActivitySuperData) TableName() string {
return "activity_super_data" return "activity_super_data"
} }
type ActivityBetDrawData struct {
ID int `gorm:"primarykey"`
UID int `gorm:"column:uid;not null;type:int(11);uniqueIndex:uid"`
Lucky int64 `gorm:"column:lucky;;not null;type:bigint(20);comment:幸运值" web:"lucky"`
}
func (c *ActivityBetDrawData) TableName() string {
return "config_betdraw_data"
}

@ -50,6 +50,7 @@ const (
ReloadConfigActivitySevenDayBox // 7日宝箱活动 ReloadConfigActivitySevenDayBox // 7日宝箱活动
ReloadConfigActivitySuper // 超级1+2 ReloadConfigActivitySuper // 超级1+2
ReloadConfigTgRobot // tg机器人配置 ReloadConfigTgRobot // tg机器人配置
ReloadConfigBetDraw // 下注抽奖
) )
// GetConfigStructByType 获取相应配置的结构 // GetConfigStructByType 获取相应配置的结构
@ -137,6 +138,8 @@ func GetConfigStructByType(t int) (interface{}, interface{}) {
return &ConfigActivitySuper{}, &[]ConfigActivitySuper{} return &ConfigActivitySuper{}, &[]ConfigActivitySuper{}
case ReloadConfigTgRobot: case ReloadConfigTgRobot:
return &ConfigTgRobot{}, &[]ConfigTgRobot{} return &ConfigTgRobot{}, &[]ConfigTgRobot{}
case ReloadConfigBetDraw:
return &ConfigActivityBetDraw{}, &[]ConfigActivityBetDraw{}
default: default:
return nil, nil return nil, nil
} }
@ -567,3 +570,15 @@ type ConfigTgRobot struct {
func (c *ConfigTgRobot) TableName() string { func (c *ConfigTgRobot) TableName() string {
return "config_tg_robot" return "config_tg_robot"
} }
type ConfigActivityBetDraw struct {
ID int `gorm:"primarykey"`
Type int `gorm:"column:type;type:int(11);default:0;comment:转盘类型" web:"type"`
Cost int64 `gorm:"column:cost;type:int(11);default:0;comment:消耗幸运值" web:"cost"`
Reward int64 `gorm:"column:reward;type:bigint(20);comment:奖励" web:"reward"`
Weight int64 `gorm:"column:weight;type:bigint(20);comment:权重" web:"weight"`
}
func (c *ConfigActivityBetDraw) TableName() string {
return "config_activity_betdraw"
}

@ -95,6 +95,7 @@ const (
CurrencyEventActivityWeekCard // 周卡 CurrencyEventActivityWeekCard // 周卡
CurrencyEventActivitySlots // slots奖池 CurrencyEventActivitySlots // slots奖池
CurrencyEventActivitySuper // 超级1+2 CurrencyEventActivitySuper // 超级1+2
CurrencyEventActivityBetDraw // 下注抽奖
CurrencyEventAll CurrencyEventAll
CurrencyEventGM = 1000 // 后台修改货币 CurrencyEventGM = 1000 // 后台修改货币

@ -32,6 +32,7 @@ const (
ESIndexBackPddRecord = "back_pdd_record" ESIndexBackPddRecord = "back_pdd_record"
ESIndexBackFeedback = "back_feedback" ESIndexBackFeedback = "back_feedback"
ESIndexBackActivity = "back_activity" ESIndexBackActivity = "back_activity"
ESIndexBackBetDraw = "back_betdraw" // 下注抽奖
) )
// GroupBuckets group聚合查询对象 // GroupBuckets group聚合查询对象
@ -329,3 +330,10 @@ type ESActivity struct {
Type int // 1点击 2参与 Type int // 1点击 2参与
Amount int64 // 赠送金额 Amount int64 // 赠送金额
} }
type ESActivityBetDraw struct {
UID int
Time int64
Reward int64
Type int // 转盘类型
}

@ -134,6 +134,8 @@ type PlayerData struct {
LastSysEmailDraw int64 `gorm:"column:last_sys_email_draw;type:bigint(20);default:0;comment:最近一次接收系统邮件的时间"` LastSysEmailDraw int64 `gorm:"column:last_sys_email_draw;type:bigint(20);default:0;comment:最近一次接收系统邮件的时间"`
LastAppSpinDraw int64 `gorm:"column:last_app_spin_draw;type:bigint(20);default:0;comment:上次领取app下载转盘的时间"` LastAppSpinDraw int64 `gorm:"column:last_app_spin_draw;type:bigint(20);default:0;comment:上次领取app下载转盘的时间"`
FeedbackTime int64 `gorm:"column:feedback_time;type:bigint(20);default:0;comment:完成问卷调查的时间"` FeedbackTime int64 `gorm:"column:feedback_time;type:bigint(20);default:0;comment:完成问卷调查的时间"`
DayBet int64 `gorm:"column:day_bet;type:bigint(20);default:0;comment:日打码"`
DayBetTime int64 `gorm:"column:day_bet_time;type:bigint(20);default:0;comment:修改时间"`
} }
func (u *PlayerData) TableName() string { func (u *PlayerData) TableName() string {

@ -9,7 +9,7 @@ const (
TaskTypePlayGame // 参与一次牌局 TaskTypePlayGame // 参与一次牌局
TaskTypeBet1000 // 累计下注1000 TaskTypeBet1000 // 累计下注1000
TaskTypeBet10000 // 累计下注10000 TaskTypeBet10000 // 累计下注10000
TaskTypeDownload // 下载 TaskTypeDownload // app下载
TaskTypeAll TaskTypeAll
) )

@ -92,7 +92,6 @@ func UploadOSS(c *gin.Context) {
}() }()
ossConf := config.GetConfig().Backend.Oss ossConf := config.GetConfig().Backend.Oss
req := new(values.UploadOSSReq) req := new(values.UploadOSSReq)
req.ObjectName = c.PostForm("ObjectName")
req.Folder = c.PostForm("folder") req.Folder = c.PostForm("folder")
if req.Folder != "" && !strings.HasSuffix(req.Folder, "/") { if req.Folder != "" && !strings.HasSuffix(req.Folder, "/") {
req.Folder += "/" req.Folder += "/"
@ -132,5 +131,5 @@ func UploadOSS(c *gin.Context) {
log.Error("UploadOSS PutObject err:%v", err) log.Error("UploadOSS PutObject err:%v", err)
return return
} }
rsp.Url = fmt.Sprintf("https://%s/%s", ossConf.Domain, ossConf.ObjectName+req.Folder+file.Filename) rsp.Url = fmt.Sprintf("https://%s/%s%s%s", ossConf.Domain, ossConf.ObjectName, req.Folder, file.Filename)
} }

@ -111,6 +111,8 @@ func MigrateDB() {
new(common.ActivitySuperData), new(common.ActivitySuperData),
new(common.ShareActivityCode), new(common.ShareActivityCode),
new(common.ConfigTgRobot), new(common.ConfigTgRobot),
new(common.ConfigActivityBetDraw),
new(common.ActivityBetDrawData),
) )
if err != nil { if err != nil {
panic("Migrate db fail") panic("Migrate db fail")

@ -158,6 +158,8 @@ func GetControlType(path string) int {
return common.ReloadConfigActivitySuper return common.ReloadConfigActivitySuper
case "tgRobot": case "tgRobot":
return common.ReloadConfigTgRobot return common.ReloadConfigTgRobot
case "betDraw":
return common.ReloadConfigBetDraw
default: default:
return 0 return 0
} }

@ -82,6 +82,7 @@ func (g *Gin) QueryUser(req values.CommonLogin) (user *common.PlayerDBInfo, isNe
g.Code = values.CodeRetry g.Code = values.CodeRetry
if err.Error() == "ip" { if err.Error() == "ip" {
g.Code = values.CodeAccountIPLimit g.Code = values.CodeAccountIPLimit
g.Msg = "ip limit"
} }
return return
} }

@ -44,7 +44,11 @@ func onLogin(user *common.PlayerDBInfo, a *app.Gin, isNew bool) {
} }
// log.Debug("scheme:%v", a.Context.GetHeader("X-Forwarded-Proto")) // log.Debug("scheme:%v", a.Context.GetHeader("X-Forwarded-Proto"))
// if a.Context.Request.URL.Scheme == "https" { // if a.Context.Request.URL.Scheme == "https" {
gateURL = "wss://" + gateURL if config.GetBase().Release {
gateURL = "wss://" + gateURL
} else {
gateURL = "wss://" + gateURL + ":26615"
}
// } else { // } else {
// gateURL = "ws://" + gateURL // gateURL = "ws://" + gateURL
// } // }

@ -704,7 +704,6 @@ func ActivityLuckyCodeDraw(c *gin.Context) {
if !a.CheckActivityExpire(common.ActivityIDLuckyCode) { if !a.CheckActivityExpire(common.ActivityIDLuckyCode) {
return return
} }
req := new(values.ActivityLuckyCodeDrawReq) req := new(values.ActivityLuckyCodeDrawReq)
if !a.S(req) { if !a.S(req) {
return return
@ -733,7 +732,8 @@ func ActivityLuckyCodeDraw(c *gin.Context) {
total := call.GetConfigAcitivityLuckyCodeTotalWeight(codeType) total := call.GetConfigAcitivityLuckyCodeTotalWeight(codeType)
if total == 0 { if total == 0 {
log.Error("con:%+v invalid,uid:%d", con, a.UID) log.Error("con:%+v invalid,uid:%d", con, a.UID)
a.Code = values.CodeRetry a.Code = values.CodeParam
a.Msg = "रतरण कड ति"
return return
} }
if data.ID == 0 { if data.ID == 0 {
@ -788,6 +788,7 @@ func ActivityLuckyCodeDraw(c *gin.Context) {
if err != nil { if err != nil {
log.Error("err:%v", err) log.Error("err:%v", err)
a.Code = values.CodeRetry a.Code = values.CodeRetry
a.Msg = "रतरण कड ति"
return return
} }
call.UploadActivityData(a.UID, common.ActivityIDLuckyCode, common.ActivityDataJoin, reward) call.UploadActivityData(a.UID, common.ActivityIDLuckyCode, common.ActivityDataJoin, reward)
@ -809,6 +810,17 @@ func Sign(day int) int {
return ret return ret
} }
// GetSignDay 获取签到天数
func GetSignDay(sign int) (day int) {
for i := 0; i < 7; i++ {
if sign&1 == 1 {
day++
}
sign >>= 1
}
return
}
// CanSignDays 返回可以签到的天数 // CanSignDays 返回可以签到的天数
func CanSignDays(sign, day int) (ret []int) { func CanSignDays(sign, day int) (ret []int) {
for i := 0; i < day; i++ { for i := 0; i < day; i++ {
@ -975,6 +987,187 @@ func ActivitySignDraw(c *gin.Context) {
call.UploadActivityData(a.UID, common.ActivityIDSign, common.ActivityDataJoin, reward) call.UploadActivityData(a.UID, common.ActivityIDSign, common.ActivityDataJoin, reward)
} }
func GetSignNewInfo(uid int) (resp *values.ActivitySignInfoResp) {
if !call.IsActivityValid(common.ActivityIDSign) {
return
}
data := &common.ActivitySignData{UID: uid}
if uid > 0 {
db.Mysql().Get(data)
if data.ID == 0 {
user, _ := call.GetUserXInfo(uid, "birth")
data.Wheel = 1
db.Mysql().Create(&common.ActivitySignData{UID: uid, Time: user.Birth})
data.Time = user.Birth
}
} else {
data.Wheel = 1
}
list := call.GetConfigActivitySignByWheel(data.Wheel)
if len(list) == 0 {
return
}
resp = &values.ActivitySignInfoResp{List: list}
if uid == 0 {
resp.Day = 1
resp.CanSign = true
return
}
re := call.GetRechargeInfo(uid)
playerData := call.GetPlayerData(uid)
resp.RewardCount = data.Reward
resp.LatestSignTime = data.SignTime
resp.Recharge = re.DayRecharge
resp.Bet = playerData.DayBet
signDay := GetSignDay(data.Sign)
resp.Sign = 7*(data.Wheel-1) + signDay
resp.Day = signDay + 1
now := time.Now()
if data.Finish || util.IsSameDayTimeStamp(now.Unix(), data.SignTime) {
for _, v := range resp.List {
if v.Day == signDay && data.Wheel >= v.WheelStart && data.Wheel <= v.WheelEnd {
resp.Recharge = v.Recharge
resp.Bet = v.Bet
break
}
}
}
if util.IsSameDayTimeStamp(now.Unix(), data.SignTime) {
return
}
if resp.Day > 7 {
if len(call.GetConfigActivitySignByWheel(data.Wheel+1)) > 0 {
if err := db.Mysql().Update(&common.ActivitySignData{UID: data.UID}, map[string]interface{}{"sign": 0, "wheel": gorm.Expr("wheel + ?", 1)}); err != nil {
log.Error("err:%v", err)
resp.CanSign = false
return
}
resp.Sign = 7 * (data.Wheel)
resp.Day = 1
}
}
resp.CanSign = true
if !data.Finish {
for _, v := range resp.List {
if v.Day == resp.Day && data.Wheel >= v.WheelStart && data.Wheel <= v.WheelEnd {
if re.DayRecharge < v.Recharge || playerData.DayBet < v.Bet {
resp.CanSign = false
} else {
// 更新状态
if err := db.Mysql().Update(&common.ActivitySignData{UID: data.UID}, map[string]interface{}{"finish": true}); err != nil {
log.Error("err:%v", err)
resp.CanSign = false
}
}
break
}
}
}
return
}
func ActivitySignNewInfo(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
if !a.CheckActivityExpire(common.ActivityIDSign) {
return
}
a.GetUID()
resp := GetSignNewInfo(a.UID)
if resp == nil {
a.Code = values.CodeRetry
a.Msg = "परत न कर"
return
}
a.Data = resp
}
func ActivitySignNewDraw(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
if !a.CheckActivityExpire(common.ActivityIDSign) {
return
}
data := &common.ActivitySignData{UID: a.UID}
db.Mysql().Get(data)
if data.ID == 0 {
user, _ := call.GetUserXInfo(a.UID, "birth")
db.Mysql().Create(&common.ActivitySignData{UID: a.UID, Time: user.Birth})
data.Time = user.Birth
}
list := call.GetConfigActivitySignByWheel(data.Wheel)
if len(list) == 0 {
a.Code = values.CodeRetry
a.Msg = "शर नहि"
return
}
now := time.Now()
if util.IsSameDayTimeStamp(now.Unix(), data.SignTime) {
// 已经签到
a.Code = values.CodeParam
a.Msg = "आज म हसषर किए"
return
}
// 获取签到了几天
day := GetSignDay(data.Sign) + 1
var reward int64
for _, v := range list {
if v.Day == day {
reward = v.Reward
re := call.GetRechargeInfo(a.UID)
playerData := call.GetPlayerData(a.UID)
if re.DayRecharge < v.Recharge || playerData.DayBet < v.Bet {
a.Code = values.CodeParam
a.Msg = "शर नहि"
log.Error("uid:%v,conf:%v", a.UID, v)
return
}
break
}
}
if reward == 0 {
a.Code = values.CodeRetry
log.Error("reward == 0")
return
}
// ok
newSign := Sign(day)
updates := map[string]interface{}{"sign": newSign, "finish": false, "reward": gorm.Expr("reward + ?", reward)}
if config.GetBase().Release {
updates["sign_time"] = now.Unix()
}
rows, err := db.Mysql().UpdateRes(&common.ActivitySignData{UID: a.UID, Sign: data.Sign}, updates)
if rows == 0 || err != nil {
log.Error("err:%v", err)
a.Code = values.CodeRetry
return
}
_, err = call.UpdateCurrencyPro(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{
UID: a.UID,
Type: common.CurrencyINR,
ChannelID: a.Channel,
Value: reward,
Event: common.CurrencyEventActivitySign,
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward),
},
})
if err != nil {
log.Error("err:%v", err)
a.Code = values.CodeRetry
return
}
a.Data = values.ActivitySignDrawResp{Reward: reward, Day: day, Sign: newSign}
call.UploadActivityData(a.UID, common.ActivityIDSign, common.ActivityDataJoin, reward)
}
// 破产礼包活动 // 破产礼包活动
func ActivityBreakGiftInfo(c *gin.Context) { func ActivityBreakGiftInfo(c *gin.Context) {
a := app.NewApp(c) a := app.NewApp(c)
@ -992,7 +1185,6 @@ func ActivityBreakGiftInfo(c *gin.Context) {
if call.GetUserCurrency(a.UID, common.CurrencyINR) > limit { if call.GetUserCurrency(a.UID, common.CurrencyINR) > limit {
return return
} }
payData := call.GetPlayerPayData(a.UID) payData := call.GetPlayerPayData(a.UID)
re := call.GetRechargeInfo(a.UID) re := call.GetRechargeInfo(a.UID)
con := call.GetConfigActivityBreakGiftByRecharge(re.TotalRecharge, payData) con := call.GetConfigActivityBreakGiftByRecharge(re.TotalRecharge, payData)
@ -1000,7 +1192,6 @@ func ActivityBreakGiftInfo(c *gin.Context) {
if con == nil { if con == nil {
return return
} }
if util.SliceContain(payData.SubBreakGift, con.Level) { if util.SliceContain(payData.SubBreakGift, con.Level) {
return return
} }
@ -1566,3 +1757,113 @@ func ActivitySuperDraw(c *gin.Context) {
}, },
} }
} }
func ActivityBetDrawInfo(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
if !a.CheckActivityExpire(common.ActivityIDBetDraw) {
return
}
a.GetUID()
drawInfo := &common.ActivityBetDrawData{UID: a.UID}
if a.UID > 0 {
db.Mysql().Get(drawInfo)
if drawInfo.ID == 0 {
db.Mysql().Create(drawInfo)
}
}
a.Data = &values.ActivityBetDrawInfoResp{
List: call.GetConfigBetDraw(),
Lucky: drawInfo.Lucky,
}
call.UploadActivityData(a.UID, common.ActivityIDBetDraw, common.ActivityDataClick, 0)
}
func ActivityBetDrawDraw(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := values.ActivityBetDrawDrawReq{}
if !a.S(&req) {
return
}
if !a.CheckActivityExpire(common.ActivityIDBetDraw) {
return
}
configList, weightList := call.GetConfigBetDrawByType(req.WheelType)
if len(configList) == 0 {
a.Code = values.CodeRetry
return
}
conf := configList[0]
drawInfo := common.ActivityBetDrawData{UID: a.UID}
db.Mysql().Get(&drawInfo)
if drawInfo.Lucky < conf.Cost {
a.Code = values.CodeRetry
a.Msg = "lucky not enough"
return
}
// 计算权重
idx := util.RandWeight(weightList)
if idx < 0 {
a.Code = values.CodeRetry
return
}
rewardConf := configList[idx]
reward := rewardConf.Reward
err := db.Mysql().Update(&drawInfo, map[string]interface{}{
"lucky": gorm.Expr("lucky - ?", conf.Cost),
})
if err != nil {
a.Code = values.CodeRetry
log.Error("ActivityBetDrawDraw err:%v", err)
return
}
if reward > 0 {
_, _ = call.UpdateCurrencyPro(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{
UID: a.UID,
Event: common.CurrencyEventActivityAppSpin,
Type: common.CurrencyINR,
Value: reward,
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward),
},
})
}
call.UploadActivityData(a.UID, common.ActivityIDBetDraw, common.ActivityDataJoin, reward)
db.ES().InsertToESGO(common.ESIndexBackBetDraw, common.ESActivityBetDraw{
UID: a.UID,
Time: time.Now().Unix(),
Reward: reward,
Type: req.WheelType,
})
a.Data = &values.ActivityBetDrawDrawResp{
Reward: reward,
}
}
func ActivityBetDrawHistory(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
a.GetUID()
req := values.ActivityBetDrawRecordReq{}
if !a.S(&req) {
return
}
resp := new(values.ActivityBetDrawRecordResp)
if !a.CheckActivityExpire(common.ActivityIDBetDraw) {
return
}
q := elastic.NewBoolQuery()
q.Filter(elastic.NewTermQuery("Type", req.WheelType))
_, _ = db.ES().QueryList(common.ESIndexBackBetDraw, req.Page-1, req.Num, q, &resp.RecordList, "Time", false)
q.Filter(elastic.NewTermQuery("UID", a.UID))
_, _ = db.ES().QueryList(common.ESIndexBackBetDraw, 0, 5000, q, &resp.SelfList, "Time", false)
a.Data = resp
}

@ -98,4 +98,5 @@ func H5DownloadDraw(c *gin.Context) {
// Event: common.CurrencyEventH5Download, // Event: common.CurrencyEventH5Download,
// }, // },
// }, true, true) // }, true, true)
call.CheckTask(call.Task{Uid: a.UID, Value: 0, Types: []common.TaskType{common.TaskTypeDownload}})
} }

@ -51,6 +51,9 @@ var (
"/activity/sign/info": {}, "/activity/sign/info": {},
"/ad/uploadFB": {}, "/ad/uploadFB": {},
"/activity/slots/info": {}, "/activity/slots/info": {},
"/activity/sign/new/info": {},
"/activity/betDraw/info": {},
"/activity/betDraw/record": {},
} }
) )

@ -40,6 +40,8 @@ type GameListResp struct {
} }
func GetGameList(provider int) *GameListResp { func GetGameList(provider int) *GameListResp {
API = APIRlease
AgentMap = AgentMapRelease
opCode := AgentMap["E467"].OperatorCode opCode := AgentMap["E467"].OperatorCode
sk := AgentMap["E467"].SecretKey sk := AgentMap["E467"].SecretKey
req := &GameListReq{ req := &GameListReq{

@ -23,8 +23,11 @@ func activity(e *gin.RouterGroup) {
e.POST("/activity/firstRechargeBack/draw", handler.ActivityFirstRechargeBackDraw) e.POST("/activity/firstRechargeBack/draw", handler.ActivityFirstRechargeBackDraw)
e.POST("/activity/luckyCode/info", handler.ActivityLuckyCodeInfo) e.POST("/activity/luckyCode/info", handler.ActivityLuckyCodeInfo)
e.POST("/activity/luckyCode/draw", handler.ActivityLuckyCodeDraw) e.POST("/activity/luckyCode/draw", handler.ActivityLuckyCodeDraw)
e.POST("/activity/sign/info", handler.ActivitySignInfo) // e.POST("/activity/sign/info", handler.ActivitySignInfo)
e.POST("/activity/sign/draw", handler.ActivitySignDraw) // e.POST("/activity/sign/draw", handler.ActivitySignDraw)
// 新版签到
e.POST("/activity/sign/new/info", handler.ActivitySignNewInfo)
e.POST("/activity/sign/new/draw", handler.ActivitySignNewDraw)
e.POST("/activity/breakGift/info", handler.ActivityBreakGiftInfo) e.POST("/activity/breakGift/info", handler.ActivityBreakGiftInfo)
e.POST("/activity/weekCard/info", handler.ActivityWeekCardInfo) e.POST("/activity/weekCard/info", handler.ActivityWeekCardInfo)
e.POST("/activity/weekCard/draw", handler.ActivityWeekCardDraw) e.POST("/activity/weekCard/draw", handler.ActivityWeekCardDraw)
@ -36,4 +39,8 @@ func activity(e *gin.RouterGroup) {
e.POST("/activity/sevenDayBox/draw", handler.ActivitySevenDayBoxDraw) e.POST("/activity/sevenDayBox/draw", handler.ActivitySevenDayBoxDraw)
e.POST("/activity/super/info", handler.ActivitySuperInfo) e.POST("/activity/super/info", handler.ActivitySuperInfo)
e.POST("/activity/super/draw", handler.ActivitySuperDraw) e.POST("/activity/super/draw", handler.ActivitySuperDraw)
// 下注抽奖
e.POST("/activity/betDraw/info", handler.ActivityBetDrawInfo)
e.POST("/activity/betDraw/draw", handler.ActivityBetDrawDraw)
e.POST("/activity/betDraw/record", handler.ActivityBetDrawHistory)
} }

@ -82,10 +82,14 @@ type ActivityLuckyCodeDrawResp struct {
// Day 当前天数 // Day 当前天数
// CanSign 能否签到 // CanSign 能否签到
type ActivitySignInfoResp struct { type ActivitySignInfoResp struct {
List []*common.ConfigActivitySign List []*common.ConfigActivitySign
Sign int Sign int // 累计天数
Day int Day int
CanSign bool CanSign bool
Recharge int64 // 充值金额
Bet int64 // 下注额度
RewardCount int64 // 累计奖金
LatestSignTime int64 // 最新签到时间
} }
type ActivitySignDrawResp struct { type ActivitySignDrawResp struct {
@ -251,3 +255,27 @@ type ActivitySuperDrawReq struct {
type ActivitySuperDrawResp struct { type ActivitySuperDrawResp struct {
Reward ActivitySuperOneReward Reward ActivitySuperOneReward
} }
type ActivityBetDrawInfoResp struct {
List []*common.ConfigActivityBetDraw // 配置
Lucky int64 // 幸运值
}
type ActivityBetDrawDrawReq struct {
WheelType int // 转盘类型
}
type ActivityBetDrawDrawResp struct {
Reward int64 // 奖励
}
type ActivityBetDrawRecordReq struct {
WheelType int // 转盘类型
Page int
Num int
}
type ActivityBetDrawRecordResp struct {
RecordList []*common.ESActivityBetDraw // 历史记录
SelfList []*common.ESActivityBetDraw // 个人记录
}

@ -1,6 +1,9 @@
package util package util
import "time" import (
"math/rand"
"time"
)
func IsSameDay(t1 time.Time, t2 time.Time) bool { func IsSameDay(t1 time.Time, t2 time.Time) bool {
return t1.Year() == t2.Year() && t1.Month() == t2.Month() && t1.Day() == t2.Day() return t1.Year() == t2.Year() && t1.Month() == t2.Month() && t1.Day() == t2.Day()
@ -103,3 +106,19 @@ func IsSingleDay() bool {
} }
return day%2 == 1 return day%2 == 1
} }
func RandWeight(weightList []int64) int {
var weightCount int64
for _, weight := range weightList {
weightCount += weight
}
sum := int64(0)
randVal := rand.Int63n(weightCount)
for idx, weight := range weightList {
sum += weight
if randVal < sum {
return idx
}
}
return -1
}

Loading…
Cancel
Save