diff --git a/call/config.go b/call/config.go index 05f68c2..ef7a4d5 100644 --- a/call/config.go +++ b/call/config.go @@ -62,6 +62,7 @@ var ( configActivitySevenDayBox []*common.ConfigActivitySevenDayBox configActivitySuper []*common.ConfigActivitySuper configTgRobot []*common.ConfigTgRobot + configBetDraw []*common.ConfigActivityBetDraw ) var ( @@ -1260,6 +1261,15 @@ func GetConfigActivitySign() []*common.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) { list := []*common.ConfigActivityBreakGift{} if _, err = db.Mysql().QueryAll("", "recharge_down", &common.ConfigActivityBreakGift{}, &list); err != nil { @@ -1487,3 +1497,30 @@ func LoadConfigTgRobot() (err error) { func GetConfigTgRobot() []*common.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 +} diff --git a/call/reload.go b/call/reload.go index b5a2f9a..87bad48 100644 --- a/call/reload.go +++ b/call/reload.go @@ -448,4 +448,15 @@ func CommonReload(c map[int][]func(*pb.ReloadGameConfig) error) { 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 + }} + } + } diff --git a/call/user.go b/call/user.go index 7530251..5750011 100644 --- a/call/user.go +++ b/call/user.go @@ -586,10 +586,24 @@ func UpdatePlayerProfile(data *common.ESGameData) error { } util.Go(func() { + now := time.Now() // 更新vip UpdateVip(uid, 0, bet, settle) // 检查任务 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 @@ -602,6 +616,10 @@ func UpdatePlayerProfile(data *common.ESGameData) error { func GetPlayerData(uid int) *common.PlayerData { data := &common.PlayerData{UID: uid} db.Mysql().Get(data) + now := time.Now() + if !util.IsSameDayTimeStamp(now.Unix(), data.DayBetTime) { + data.DayBetTime = 0 + } return data } diff --git a/build.sh b/cmd/build.sh similarity index 57% rename from build.sh rename to cmd/build.sh index a6aefd2..4b29610 100644 --- a/build.sh +++ b/cmd/build.sh @@ -1,4 +1,5 @@ #!/bin/bash +cd .. set -e cd pb/proto ./gener.sh @@ -7,4 +8,4 @@ cd pb/proto # go generate cd ../.. #go build main.go -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o gameserver main.go \ No newline at end of file +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o indiaprovider main.go \ No newline at end of file diff --git a/fieldalignment.sh b/cmd/fieldalignment.sh similarity index 100% rename from fieldalignment.sh rename to cmd/fieldalignment.sh diff --git a/cmd/gener_code.sh b/cmd/gener_code.sh new file mode 100644 index 0000000..e20ff91 --- /dev/null +++ b/cmd/gener_code.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# 检查是否提供了参数 +if [ $# -eq 0 ]; then + echo "请输入输入值。" + exit 1 +fi + +# 输入值 +input_value=$1 + +# 生成 Go 代码 +cat <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 文件。" \ No newline at end of file diff --git a/reboot.sh b/cmd/reboot.sh similarity index 100% rename from reboot.sh rename to cmd/reboot.sh diff --git a/start.sh b/cmd/start.sh similarity index 100% rename from start.sh rename to cmd/start.sh diff --git a/stop.sh b/cmd/stop.sh similarity index 100% rename from stop.sh rename to cmd/stop.sh diff --git a/swagger.sh b/cmd/swagger.sh similarity index 100% rename from swagger.sh rename to cmd/swagger.sh diff --git a/common/activity.go b/common/activity.go index 09003f1..eef29f7 100644 --- a/common/activity.go +++ b/common/activity.go @@ -19,6 +19,7 @@ const ( ActivityIDLuckyShop // 幸运商店活动 ActivityIDSevenDayBox // 7日签到宝箱 ActivityIDSuper // 超级1+2 + ActivityIDBetDraw // 下注抽奖活动 ) @@ -258,10 +259,13 @@ func (c *ActivityLuckyCode) TableName() string { } type ConfigActivitySign struct { - ID int `gorm:"primarykey"` - 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"` - Recharge int64 `gorm:"column:recharge;type:bigint(20);default:0;comment:所需充值金额" web:"recharge"` + ID int `gorm:"primarykey"` + Day int `gorm:"column:day;type:int(11);default:1;comment:签到天数" web:"day"` + WheelStart int `gorm:"column:wheel_start;type:int(11);default:1;comment:开始期数" web:"wheel_start"` + 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 { @@ -269,10 +273,14 @@ func (c *ConfigActivitySign) TableName() string { } type ActivitySignData struct { - ID int `gorm:"primarykey"` - UID int `gorm:"column:uid;type:int(11);uniqueIndex:uid"` - Sign int `gorm:"column:sign;type:int(11);comment:签到天数,二进制"` - Time int64 `gorm:"column:time;type:bigint(20);comment:首次参与时间"` + ID int `gorm:"primarykey"` + UID int `gorm:"column:uid;type:int(11);uniqueIndex:uid"` + Sign int `gorm:"column:sign;type:int(11);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 { @@ -483,3 +491,13 @@ type ActivitySuperData struct { func (c *ActivitySuperData) TableName() string { 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" +} diff --git a/common/config.go b/common/config.go index 937fcf7..2cf6e22 100644 --- a/common/config.go +++ b/common/config.go @@ -50,6 +50,7 @@ const ( ReloadConfigActivitySevenDayBox // 7日宝箱活动 ReloadConfigActivitySuper // 超级1+2 ReloadConfigTgRobot // tg机器人配置 + ReloadConfigBetDraw // 下注抽奖 ) // GetConfigStructByType 获取相应配置的结构 @@ -137,6 +138,8 @@ func GetConfigStructByType(t int) (interface{}, interface{}) { return &ConfigActivitySuper{}, &[]ConfigActivitySuper{} case ReloadConfigTgRobot: return &ConfigTgRobot{}, &[]ConfigTgRobot{} + case ReloadConfigBetDraw: + return &ConfigActivityBetDraw{}, &[]ConfigActivityBetDraw{} default: return nil, nil } @@ -567,3 +570,15 @@ type ConfigTgRobot struct { func (c *ConfigTgRobot) TableName() string { 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" +} diff --git a/common/currency.go b/common/currency.go index dce9c92..7a4cc00 100644 --- a/common/currency.go +++ b/common/currency.go @@ -95,6 +95,7 @@ const ( CurrencyEventActivityWeekCard // 周卡 CurrencyEventActivitySlots // slots奖池 CurrencyEventActivitySuper // 超级1+2 + CurrencyEventActivityBetDraw // 下注抽奖 CurrencyEventAll CurrencyEventGM = 1000 // 后台修改货币 diff --git a/common/es.go b/common/es.go index 961407b..2432192 100644 --- a/common/es.go +++ b/common/es.go @@ -32,6 +32,7 @@ const ( ESIndexBackPddRecord = "back_pdd_record" ESIndexBackFeedback = "back_feedback" ESIndexBackActivity = "back_activity" + ESIndexBackBetDraw = "back_betdraw" // 下注抽奖 ) // GroupBuckets group聚合查询对象 @@ -329,3 +330,10 @@ type ESActivity struct { Type int // 1点击 2参与 Amount int64 // 赠送金额 } + +type ESActivityBetDraw struct { + UID int + Time int64 + Reward int64 + Type int // 转盘类型 +} diff --git a/common/player.go b/common/player.go index 0c3ab39..fba1ea9 100644 --- a/common/player.go +++ b/common/player.go @@ -134,6 +134,8 @@ type PlayerData struct { 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下载转盘的时间"` 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 { diff --git a/common/task.go b/common/task.go index 24f7550..be24cab 100644 --- a/common/task.go +++ b/common/task.go @@ -9,7 +9,7 @@ const ( TaskTypePlayGame // 参与一次牌局 TaskTypeBet1000 // 累计下注1000 TaskTypeBet10000 // 累计下注10000 - TaskTypeDownload // 下载 + TaskTypeDownload // app下载 TaskTypeAll ) diff --git a/modules/backend/handler/common/common.go b/modules/backend/handler/common/common.go index c68c9f5..2ca7fdb 100644 --- a/modules/backend/handler/common/common.go +++ b/modules/backend/handler/common/common.go @@ -92,7 +92,6 @@ func UploadOSS(c *gin.Context) { }() ossConf := config.GetConfig().Backend.Oss req := new(values.UploadOSSReq) - req.ObjectName = c.PostForm("ObjectName") req.Folder = c.PostForm("folder") if req.Folder != "" && !strings.HasSuffix(req.Folder, "/") { req.Folder += "/" @@ -132,5 +131,5 @@ func UploadOSS(c *gin.Context) { log.Error("UploadOSS PutObject err:%v", err) 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) } diff --git a/modules/backend/migrate.go b/modules/backend/migrate.go index ee77c5e..0efab16 100644 --- a/modules/backend/migrate.go +++ b/modules/backend/migrate.go @@ -111,6 +111,8 @@ func MigrateDB() { new(common.ActivitySuperData), new(common.ShareActivityCode), new(common.ConfigTgRobot), + new(common.ConfigActivityBetDraw), + new(common.ActivityBetDrawData), ) if err != nil { panic("Migrate db fail") diff --git a/modules/backend/values/gm.go b/modules/backend/values/gm.go index ce7d473..9257f4a 100644 --- a/modules/backend/values/gm.go +++ b/modules/backend/values/gm.go @@ -158,6 +158,8 @@ func GetControlType(path string) int { return common.ReloadConfigActivitySuper case "tgRobot": return common.ReloadConfigTgRobot + case "betDraw": + return common.ReloadConfigBetDraw default: return 0 } diff --git a/modules/web/app/account.go b/modules/web/app/account.go index f84c3a0..cd2c6c7 100644 --- a/modules/web/app/account.go +++ b/modules/web/app/account.go @@ -82,6 +82,7 @@ func (g *Gin) QueryUser(req values.CommonLogin) (user *common.PlayerDBInfo, isNe g.Code = values.CodeRetry if err.Error() == "ip" { g.Code = values.CodeAccountIPLimit + g.Msg = "ip limit" } return } diff --git a/modules/web/handler/account.go b/modules/web/handler/account.go index b7ee29f..d3b7084 100644 --- a/modules/web/handler/account.go +++ b/modules/web/handler/account.go @@ -44,7 +44,11 @@ func onLogin(user *common.PlayerDBInfo, a *app.Gin, isNew bool) { } // log.Debug("scheme:%v", a.Context.GetHeader("X-Forwarded-Proto")) // if a.Context.Request.URL.Scheme == "https" { - gateURL = "wss://" + gateURL + if config.GetBase().Release { + gateURL = "wss://" + gateURL + } else { + gateURL = "wss://" + gateURL + ":26615" + } // } else { // gateURL = "ws://" + gateURL // } diff --git a/modules/web/handler/activity.go b/modules/web/handler/activity.go index 02a0319..8cd089d 100644 --- a/modules/web/handler/activity.go +++ b/modules/web/handler/activity.go @@ -704,7 +704,6 @@ func ActivityLuckyCodeDraw(c *gin.Context) { if !a.CheckActivityExpire(common.ActivityIDLuckyCode) { return } - req := new(values.ActivityLuckyCodeDrawReq) if !a.S(req) { return @@ -733,7 +732,8 @@ func ActivityLuckyCodeDraw(c *gin.Context) { total := call.GetConfigAcitivityLuckyCodeTotalWeight(codeType) if total == 0 { log.Error("con:%+v invalid,uid:%d", con, a.UID) - a.Code = values.CodeRetry + a.Code = values.CodeParam + a.Msg = "रूपांतरण कोड त्रुटि" return } if data.ID == 0 { @@ -788,6 +788,7 @@ func ActivityLuckyCodeDraw(c *gin.Context) { if err != nil { log.Error("err:%v", err) a.Code = values.CodeRetry + a.Msg = "रूपांतरण कोड त्रुटि" return } call.UploadActivityData(a.UID, common.ActivityIDLuckyCode, common.ActivityDataJoin, reward) @@ -809,6 +810,17 @@ func Sign(day int) int { return ret } +// GetSignDay 获取签到天数 +func GetSignDay(sign int) (day int) { + for i := 0; i < 7; i++ { + if sign&1 == 1 { + day++ + } + sign >>= 1 + } + return +} + // CanSignDays 返回可以签到的天数 func CanSignDays(sign, day int) (ret []int) { for i := 0; i < day; i++ { @@ -975,6 +987,187 @@ func ActivitySignDraw(c *gin.Context) { 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) { a := app.NewApp(c) @@ -992,7 +1185,6 @@ func ActivityBreakGiftInfo(c *gin.Context) { if call.GetUserCurrency(a.UID, common.CurrencyINR) > limit { return } - payData := call.GetPlayerPayData(a.UID) re := call.GetRechargeInfo(a.UID) con := call.GetConfigActivityBreakGiftByRecharge(re.TotalRecharge, payData) @@ -1000,7 +1192,6 @@ func ActivityBreakGiftInfo(c *gin.Context) { if con == nil { return } - if util.SliceContain(payData.SubBreakGift, con.Level) { 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 +} diff --git a/modules/web/handler/h5.go b/modules/web/handler/h5.go index 35242b8..0fb9c5e 100644 --- a/modules/web/handler/h5.go +++ b/modules/web/handler/h5.go @@ -98,4 +98,5 @@ func H5DownloadDraw(c *gin.Context) { // Event: common.CurrencyEventH5Download, // }, // }, true, true) + call.CheckTask(call.Task{Uid: a.UID, Value: 0, Types: []common.TaskType{common.TaskTypeDownload}}) } diff --git a/modules/web/middleware/token.go b/modules/web/middleware/token.go index 241453d..0a8ccbf 100644 --- a/modules/web/middleware/token.go +++ b/modules/web/middleware/token.go @@ -51,6 +51,9 @@ var ( "/activity/sign/info": {}, "/ad/uploadFB": {}, "/activity/slots/info": {}, + "/activity/sign/new/info": {}, + "/activity/betDraw/info": {}, + "/activity/betDraw/record": {}, } ) diff --git a/modules/web/providers/gs/api.go b/modules/web/providers/gs/api.go index c26557f..9d58c8d 100644 --- a/modules/web/providers/gs/api.go +++ b/modules/web/providers/gs/api.go @@ -40,6 +40,8 @@ type GameListResp struct { } func GetGameList(provider int) *GameListResp { + API = APIRlease + AgentMap = AgentMapRelease opCode := AgentMap["E467"].OperatorCode sk := AgentMap["E467"].SecretKey req := &GameListReq{ diff --git a/modules/web/routers/routers_activity.go b/modules/web/routers/routers_activity.go index 6109d5a..9c412cf 100644 --- a/modules/web/routers/routers_activity.go +++ b/modules/web/routers/routers_activity.go @@ -23,8 +23,11 @@ func activity(e *gin.RouterGroup) { e.POST("/activity/firstRechargeBack/draw", handler.ActivityFirstRechargeBackDraw) e.POST("/activity/luckyCode/info", handler.ActivityLuckyCodeInfo) e.POST("/activity/luckyCode/draw", handler.ActivityLuckyCodeDraw) - e.POST("/activity/sign/info", handler.ActivitySignInfo) - e.POST("/activity/sign/draw", handler.ActivitySignDraw) + // e.POST("/activity/sign/info", handler.ActivitySignInfo) + // 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/weekCard/info", handler.ActivityWeekCardInfo) 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/super/info", handler.ActivitySuperInfo) 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) } diff --git a/modules/web/values/activity.go b/modules/web/values/activity.go index 99338b0..eeb76ec 100644 --- a/modules/web/values/activity.go +++ b/modules/web/values/activity.go @@ -82,10 +82,14 @@ type ActivityLuckyCodeDrawResp struct { // Day 当前天数 // CanSign 能否签到 type ActivitySignInfoResp struct { - List []*common.ConfigActivitySign - Sign int - Day int - CanSign bool + List []*common.ConfigActivitySign + Sign int // 累计天数 + Day int + CanSign bool + Recharge int64 // 充值金额 + Bet int64 // 下注额度 + RewardCount int64 // 累计奖金 + LatestSignTime int64 // 最新签到时间 } type ActivitySignDrawResp struct { @@ -251,3 +255,27 @@ type ActivitySuperDrawReq struct { type ActivitySuperDrawResp struct { 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 // 个人记录 +} diff --git a/util/time.go b/util/time.go index 77ef363..54e8f7f 100644 --- a/util/time.go +++ b/util/time.go @@ -1,6 +1,9 @@ package util -import "time" +import ( + "math/rand" + "time" +) func IsSameDay(t1 time.Time, t2 time.Time) bool { return t1.Year() == t2.Year() && t1.Month() == t2.Month() && t1.Day() == t2.Day() @@ -103,3 +106,19 @@ func IsSingleDay() bool { } 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 +}