From 3ce53f75a588c73d7c860ed0031acc47e1ffae6d Mon Sep 17 00:00:00 2001 From: mofangmin Date: Thu, 11 Jul 2024 09:46:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E7=AD=BE=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- call/config.go | 9 ++ call/user.go | 11 ++ common/activity.go | 23 +-- common/player.go | 2 + modules/web/handler/activity.go | 177 ++++++++++++++++++++++++ modules/web/middleware/token.go | 1 + modules/web/routers/routers_activity.go | 3 + modules/web/values/activity.go | 12 +- 8 files changed, 226 insertions(+), 12 deletions(-) diff --git a/call/config.go b/call/config.go index 05f68c2..ee9eb56 100644 --- a/call/config.go +++ b/call/config.go @@ -1260,6 +1260,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 { diff --git a/call/user.go b/call/user.go index 850ce01..d9a5952 100644 --- a/call/user.go +++ b/call/user.go @@ -586,10 +586,21 @@ 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"] = 0 + } else { + updates["day_bet"] = gorm.Expr("bet + ?", bet) + } + db.Mysql().Update(&common.PlayerData{UID: uid}, updates) }) // 写入es diff --git a/common/activity.go b/common/activity.go index 09003f1..c19b8e5 100644 --- a/common/activity.go +++ b/common/activity.go @@ -258,10 +258,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 +272,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 { 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/modules/web/handler/activity.go b/modules/web/handler/activity.go index 02a0319..afdfecd 100644 --- a/modules/web/handler/activity.go +++ b/modules/web/handler/activity.go @@ -809,6 +809,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 +986,172 @@ 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} + db.Mysql().Get(data) + if data.ID == 0 { + user, _ := call.GetUserXInfo(uid, "birth") + db.Mysql().Create(&common.ActivitySignData{UID: uid, Time: user.Birth}) + data.Time = user.Birth + } + 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 + } + 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 + } + // 更新状态 + 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 + 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 + return + } + now := time.Now() + if util.IsSameDayTimeStamp(now.Unix(), data.SignTime) { + // 已经签到 + a.Code = values.CodeParam + a.Msg = "Check-in repetido." + return + } + + // 获取签到了几天 + day := GetSignDay(data.Sign) + 1 + var reward int64 + for _, v := range list { + if v.Day == day && data.Wheel >= v.WheelStart && data.Wheel <= v.WheelEnd { + 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 + return + } + break + + } + } + if reward == 0 { + a.Code = values.CodeRetry + return + } + + // 如果签到了7天就重置 + if day > 7 { + rows, err := db.Mysql().UpdateRes(&common.ActivitySignData{UID: a.UID, Sign: data.Sign}, map[string]interface{}{"sign": 0, "wheel": gorm.Expr("wheel + ?", 1)}) + if rows == 0 || err != nil { + log.Error("err:%v", err) + a.Code = values.CodeRetry + return + } + } + // ok + newSign := Sign(day) + rows, err := db.Mysql().UpdateRes(&common.ActivitySignData{UID: a.UID, Sign: data.Sign}, map[string]interface{}{"sign": newSign, "finish": false, "reward": gorm.Expr("reward + ?", reward), "sign_time": now.Unix()}) + 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) diff --git a/modules/web/middleware/token.go b/modules/web/middleware/token.go index 241453d..d3dc042 100644 --- a/modules/web/middleware/token.go +++ b/modules/web/middleware/token.go @@ -51,6 +51,7 @@ var ( "/activity/sign/info": {}, "/ad/uploadFB": {}, "/activity/slots/info": {}, + "/activity/sign/new/info": {}, } ) diff --git a/modules/web/routers/routers_activity.go b/modules/web/routers/routers_activity.go index 6109d5a..d4bea0b 100644 --- a/modules/web/routers/routers_activity.go +++ b/modules/web/routers/routers_activity.go @@ -25,6 +25,9 @@ func activity(e *gin.RouterGroup) { 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/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) diff --git a/modules/web/values/activity.go b/modules/web/values/activity.go index 99338b0..9721c5f 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 {