补充红点推送;修复bug

dev_aagame
zhora 1 week ago
parent 10984d9d1a
commit c1db0efca3
  1. 61
      call/luckyWheel.go
  2. 2
      call/pay.go
  3. 11
      call/pdd.go
  4. 22
      call/task.go
  5. 19
      common/task.go
  6. 3
      modules/hall/player.go
  7. 37
      modules/web/handler/activity.go
  8. 68
      modules/web/handler/luckyWheel.go
  9. 15
      modules/web/handler/task.go
  10. 12
      modules/web/handler/user.go
  11. 1
      pb/proto/platform.proto

@ -1,9 +1,12 @@
package call package call
import ( import (
"encoding/json"
"fmt"
"github.com/liangdas/mqant/log" "github.com/liangdas/mqant/log"
"server/common" "server/common"
"server/db" "server/db"
"server/pb"
"time" "time"
) )
@ -58,3 +61,61 @@ func GetLuckWheelRecords(uid, withoutUid, page, pageSize int) (
} }
return return
} }
func CheckLuckyWheel(uid int, unPush ...bool) {
if !db.Redis().Lock(common.GetRedisKeyLuckyWheel(uid)) {
return
}
defer func() {
db.Redis().UnLock(common.GetRedisKeyLuckyWheel(uid))
}()
luckyWheel := GetConfigLuckyWheel()
if luckyWheel == nil {
return
}
rechargeInfo := GetRechargeInfo(uid)
playerData := GetPlayerData(uid)
if rechargeInfo.TotalRechargeCount < int64(luckyWheel.RechargeCount) {
return
}
var (
update bool
lessCount int
)
for _, wheelCfg := range luckyWheel.WheelCfgStr {
lessKey := fmt.Sprintf("l%d", wheelCfg.LuckyType)
for _, rechargeAmount := range wheelCfg.RechargeAmount {
if rechargeAmount == 0 {
continue
}
freeKey := fmt.Sprintf("f%d_%d", wheelCfg.LuckyType, rechargeAmount)
if rechargeInfo.TotalRecharge >= int64(rechargeAmount)*common.DecimalDigits &&
playerData.LuckyWheelMap[freeKey] == 0 {
playerData.LuckyWheelMap[freeKey] = 1
playerData.LuckyWheelMap[lessKey] += 1
update = true
}
lessCount += playerData.LuckyWheelMap[lessKey]
}
}
if update {
luckyWheelBytes, err := json.Marshal(playerData.LuckyWheelMap)
if err != nil {
log.Error("marshal err, %s", err.Error())
return
}
err = db.Mysql().C().Model(&common.PlayerData{}).Where("uid = ?", uid).Updates(map[string]interface{}{
"lucky_wheel": string(luckyWheelBytes),
}).Error
if err != nil {
log.Error("update err, %s", err.Error())
return
}
}
if len(unPush) > 0 && unPush[0] {
return
}
if lessCount > 0 {
PushRed(uid, pb.RedPointModule_RedPointLuckyWheel, 1)
}
}

@ -582,6 +582,8 @@ func PayActivity(r *common.RechargeOrder, notCharge bool, user *common.PlayerDBI
UpdateVip(r.UID, r.Amount, 0, 0) UpdateVip(r.UID, r.Amount, 0, 0)
// 检查任务 // 检查任务
CheckTask(Task{r.UID, 1, []common.TaskType{common.TaskTypeRecharge}}) CheckTask(Task{r.UID, 1, []common.TaskType{common.TaskTypeRecharge}})
// 检测转盘
CheckLuckyWheel(r.UID)
// 检查所有活动 // 检查所有活动
CheckAllActivity(r) CheckAllActivity(r)

@ -4,6 +4,7 @@ import (
"github.com/liangdas/mqant/log" "github.com/liangdas/mqant/log"
"server/common" "server/common"
"server/db" "server/db"
"server/pb"
"time" "time"
) )
@ -56,3 +57,13 @@ func GetWeekCardData(uid int) (result *common.WeekCardData, err error) {
} }
return return
} }
func CheckPdd(uid int) {
pddData, err := GetPddData(uid)
if err != nil {
return
}
if pddData.Spin > 0 {
PushRed(uid, pb.RedPointModule_RedPointPdd, uint32(pddData.Spin))
}
}

@ -3,6 +3,7 @@ package call
import ( import (
"server/common" "server/common"
"server/db" "server/db"
"server/pb"
"time" "time"
"github.com/liangdas/mqant/log" "github.com/liangdas/mqant/log"
@ -16,9 +17,25 @@ type Task struct {
Types []common.TaskType // 任务类型 Types []common.TaskType // 任务类型
} }
func CheckTask(task Task) (taskId int) { func CheckTask(task Task, onlyCheck ...bool) (taskId int) {
log.Info("checkTask task:%v", task) log.Info("checkTask task:%v, onlyCheck:%+v", task, onlyCheck)
now := time.Now() now := time.Now()
push := func() {
var doneCount int64
err := db.Mysql().C().Model(&common.TaskData{}).
Where("uid = ? and task_status = 0 and (end_at >= ? or end_at = -1) and task_value >= target_value", task.Uid, now.Unix()).
Count(&doneCount).Error
if err != nil {
log.Error("get task done count err, %s", err.Error())
}
if doneCount > 0 {
PushRed(task.Uid, pb.RedPointModule_RedPointTaskDraw, uint32(doneCount))
}
}
if len(onlyCheck) > 0 && onlyCheck[0] {
push()
return
}
for _, taskType := range task.Types { for _, taskType := range task.Types {
err := db.Mysql().C().Model(&common.TaskData{}). err := db.Mysql().C().Model(&common.TaskData{}).
Where("uid = ? and task_type = ? and task_status = 0 and (end_at >= ? or end_at = -1)", task.Uid, taskType, now.Unix()). Where("uid = ? and task_type = ? and task_status = 0 and (end_at >= ? or end_at = -1)", task.Uid, taskType, now.Unix()).
@ -30,5 +47,6 @@ func CheckTask(task Task) (taskId int) {
continue continue
} }
} }
push()
return return
} }

@ -83,15 +83,16 @@ func (c *ConfigTask) TableName() string {
} }
type TaskData struct { type TaskData struct {
ID int64 `gorm:"primary_key;AUTO_INCREMENT;column:id"` // 自增id ID int64 `gorm:"primary_key;AUTO_INCREMENT;column:id"` // 自增id
UID int `gorm:"column:uid;type:int(11);not null;uniqueIndex:task_idx,priority:1;comment:玩家id" json:"uid"` // 玩家id UID int `gorm:"column:uid;type:int(11);not null;uniqueIndex:task_idx,priority:1;comment:玩家id" json:"uid"` // 玩家id
TaskID int `gorm:"column:task_id;type:int(11);not null;uniqueIndex:task_idx,priority:2;comment:任务id" json:"task_id"` // 任务id TaskID int `gorm:"column:task_id;type:int(11);not null;uniqueIndex:task_idx,priority:2;comment:任务id" json:"task_id"` // 任务id
TaskType int `gorm:"column:task_type;type:int(11);not null;comment:任务类型(1:邀请玩家注册,2:充值,3:下注额,4:解锁周卡,5:订阅频道)" json:"task_type"` // 任务类型(1:邀请玩家注册,2:充值,3:下注额,4:解锁周卡,5:订阅频道) TaskType int `gorm:"column:task_type;type:int(11);not null;comment:任务类型(1:邀请玩家注册,2:充值,3:下注额,4:解锁周卡,5:订阅频道)" json:"task_type"` // 任务类型(1:邀请玩家注册,2:充值,3:下注额,4:解锁周卡,5:订阅频道)
TaskValue int `gorm:"column:task_value;type:int(11);not null;comment:任务值" json:"task_value"` // 任务值 TaskValue int `gorm:"column:task_value;type:int(11);not null;comment:任务值" json:"task_value"` // 任务值
TaskStatus int `gorm:"column:task_status;type:int(11);not null;comment:任务状态(-1:未开启,0:未完成,1:已完成,2:已领取)" json:"task_status"` // 任务状态(-1:未开启,0:未完成,1:已完成,2:已领取) TargetValue int `gorm:"column:target_value;type:int(11);not null;comment:目标值" json:"target_value"` // 目标值
EndAt int64 `gorm:"column:end_at;type:bigint(20);not null;comment:任务终止时间" json:"end_at"` // 任务终止时间 TaskStatus int `gorm:"column:task_status;type:int(11);not null;comment:任务状态(-1:未开启,0:未完成,1:已完成,2:已领取)" json:"task_status"` // 任务状态(-1:未开启,0:未完成,1:已完成,2:已领取)
CreatedAt time.Time `gorm:"column:created_at;type:datetime;not null;comment:创建时间" json:"created_at"` // 创建时间 EndAt int64 `gorm:"column:end_at;type:bigint(20);not null;comment:任务终止时间" json:"end_at"` // 任务终止时间
UpdatedAt time.Time `gorm:"column:updated_at;type:datetime;not null;comment:更新时间" json:"updated_at"` // 更新时间 CreatedAt time.Time `gorm:"column:created_at;type:datetime;not null;comment:创建时间" json:"created_at"` // 创建时间
UpdatedAt time.Time `gorm:"column:updated_at;type:datetime;not null;comment:更新时间" json:"updated_at"` // 更新时间
} }
func (c *TaskData) TableName() string { func (c *TaskData) TableName() string {

@ -21,6 +21,9 @@ type player struct {
func (p *player) PushRedPoint() { func (p *player) PushRedPoint() {
call.PushRed(p.db.Id, pb.RedPointModule_RedPointFreeCash, uint32(1)) call.PushRed(p.db.Id, pb.RedPointModule_RedPointFreeCash, uint32(1))
call.CheckTask(call.Task{Uid: p.db.Id}, true)
call.CheckLuckyWheel(p.db.Id)
call.CheckPdd(p.db.Id)
call.PushMailRed(p.db.Id) call.PushMailRed(p.db.Id)
call.PushVipRed(p.db.Id) call.PushVipRed(p.db.Id)
call.PushWeekCard(p.db.Id) call.PushWeekCard(p.db.Id)

@ -51,14 +51,15 @@ func GetUserTaskStatus(a *app.Gin) (ret []*values.OneTask) {
if !v.Exist { // 不存在/失效的 则创建/更新 if !v.Exist { // 不存在/失效的 则创建/更新
update = true update = true
task := &common.TaskData{ task := &common.TaskData{
UID: a.UID, UID: a.UID,
TaskID: v.TaskID, TaskID: v.TaskID,
TaskType: int(v.Type), TaskType: int(v.Type),
TaskValue: 0, TargetValue: int(v.Target),
TaskStatus: 0, TaskValue: 0,
EndAt: 0, TaskStatus: 0,
CreatedAt: time.Now(), EndAt: 0,
UpdatedAt: time.Now(), CreatedAt: time.Now(),
UpdatedAt: time.Now(),
} }
switch v.Cycle { switch v.Cycle {
case 1: case 1:
@ -73,11 +74,12 @@ func GetUserTaskStatus(a *app.Gin) (ret []*values.OneTask) {
err := db.Mysql().C().Model(&common.TaskData{}).Clauses(clause.OnConflict{ err := db.Mysql().C().Model(&common.TaskData{}).Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "uid"}, {Name: "task_id"}}, Columns: []clause.Column{{Name: "uid"}, {Name: "task_id"}},
DoUpdates: clause.Assignments(map[string]interface{}{ DoUpdates: clause.Assignments(map[string]interface{}{
"task_type": task.TaskType, "task_type": task.TaskType,
"task_value": task.TaskValue, "task_value": task.TaskValue,
"task_status": task.TaskStatus, "target_value": task.TargetValue,
"end_at": task.EndAt, "task_status": task.TaskStatus,
"updated_at": task.UpdatedAt, "end_at": task.EndAt,
"updated_at": task.UpdatedAt,
}), }),
}).Create(task).Error }).Create(task).Error
if err != nil { if err != nil {
@ -141,15 +143,6 @@ func GetPromotions(c *gin.Context) {
a.GetUID() a.GetUID()
ret.ActivityList = call.GetConfigActivityActiveAll(a.UID) ret.ActivityList = call.GetConfigActivityActiveAll(a.UID)
ret.TaskList = GetUserTaskStatus(a) ret.TaskList = GetUserTaskStatus(a)
num := 0
for _, task := range ret.TaskList {
if task.Status == 1 {
num++
}
}
if num > 0 {
//call.PushRed(a.UID, pb.RedPointModule_RedPointTask, uint32(num))
}
} }
func UploadActivityData(c *gin.Context) { func UploadActivityData(c *gin.Context) {

@ -24,14 +24,14 @@ func LuckyWheelCfg(c *gin.Context) {
return return
} }
uid := a.UID uid := a.UID
call.CheckLuckyWheel(uid, true)
if !db.Redis().Lock(common.GetRedisKeyLuckyWheel(uid)) { //if !db.Redis().Lock(common.GetRedisKeyLuckyWheel(uid)) {
a.Code = values.CodeRetry // a.Code = values.CodeRetry
return // return
} //}
defer func() { //defer func() {
db.Redis().UnLock(common.GetRedisKeyLuckyWheel(uid)) // db.Redis().UnLock(common.GetRedisKeyLuckyWheel(uid))
}() //}()
resp := &values.LuckyWheelCfgResp{} resp := &values.LuckyWheelCfgResp{}
a.Data = resp a.Data = resp
@ -44,9 +44,9 @@ func LuckyWheelCfg(c *gin.Context) {
if rechargeInfo.TotalRechargeCount < int64(luckyWheel.RechargeCount) { if rechargeInfo.TotalRechargeCount < int64(luckyWheel.RechargeCount) {
return return
} }
var ( //var (
update bool // update bool
) //)
for _, wheelCfg := range luckyWheel.WheelCfgStr { for _, wheelCfg := range luckyWheel.WheelCfgStr {
//if wheelCfg.LuckyType == 4 && //if wheelCfg.LuckyType == 4 &&
// rechargeInfo.TotalRecharge < int64(wheelCfg.RechargeAmount[0]*common.DecimalDigits) { // 特殊转盘达到了才能看见 // rechargeInfo.TotalRecharge < int64(wheelCfg.RechargeAmount[0]*common.DecimalDigits) { // 特殊转盘达到了才能看见
@ -57,35 +57,35 @@ func LuckyWheelCfg(c *gin.Context) {
if rechargeAmount == 0 { if rechargeAmount == 0 {
continue continue
} }
freeKey := fmt.Sprintf("f%d_%d", wheelCfg.LuckyType, rechargeAmount) //freeKey := fmt.Sprintf("f%d_%d", wheelCfg.LuckyType, rechargeAmount)
if rechargeInfo.TotalRecharge >= int64(rechargeAmount)*common.DecimalDigits && //if rechargeInfo.TotalRecharge >= int64(rechargeAmount)*common.DecimalDigits &&
playerData.LuckyWheelMap[freeKey] == 0 { // playerData.LuckyWheelMap[freeKey] == 0 {
playerData.LuckyWheelMap[freeKey] = 1 // playerData.LuckyWheelMap[freeKey] = 1
playerData.LuckyWheelMap[lessKey] += 1 // playerData.LuckyWheelMap[lessKey] += 1
update = true // update = true
} //}
} }
resp.LuckyWheel = append(resp.LuckyWheel, values.LuckyWheel{ resp.LuckyWheel = append(resp.LuckyWheel, values.LuckyWheel{
LuckyWheel: wheelCfg, LuckyWheel: wheelCfg,
LessDrawCount: playerData.LuckyWheelMap[lessKey], LessDrawCount: playerData.LuckyWheelMap[lessKey],
}) })
} }
if update { //if update {
luckyWheelBytes, err := json.Marshal(playerData.LuckyWheelMap) // luckyWheelBytes, err := json.Marshal(playerData.LuckyWheelMap)
if err != nil { // if err != nil {
log.Error("marshal err, %s", err.Error()) // log.Error("marshal err, %s", err.Error())
a.Code = values.CodeRetry // a.Code = values.CodeRetry
return // return
} // }
err = db.Mysql().C().Model(&common.PlayerData{}).Where("uid = ?", uid).Updates(map[string]interface{}{ // err = db.Mysql().C().Model(&common.PlayerData{}).Where("uid = ?", uid).Updates(map[string]interface{}{
"lucky_wheel": string(luckyWheelBytes), // "lucky_wheel": string(luckyWheelBytes),
}).Error // }).Error
if err != nil { // if err != nil {
log.Error("update err, %s", err.Error()) // log.Error("update err, %s", err.Error())
a.Code = values.CodeRetry // a.Code = values.CodeRetry
return // return
} // }
} //}
a.Data = resp a.Data = resp
} }

@ -8,7 +8,6 @@ import (
"server/db" "server/db"
"server/modules/web/app" "server/modules/web/app"
"server/modules/web/values" "server/modules/web/values"
"server/pb"
"time" "time"
) )
@ -28,12 +27,13 @@ func GetTaskInfo(c *gin.Context) {
num := 0 num := 0
for _, task := range resp.TaskList { for _, task := range resp.TaskList {
if task.Status == 1 { if task.Status == 1 {
//log.Debug("uid:%d task:%+v", a.UID, *task)
num++ num++
} }
} }
if num > 0 { //if num > 0 {
call.PushRed(a.UID, pb.RedPointModule_RedPointTaskDraw, uint32(num)) // call.PushRed(a.UID, pb.RedPointModule_RedPointTaskDraw, uint32(num))
} //}
} }
type DrawTaskReq struct { type DrawTaskReq struct {
@ -117,13 +117,6 @@ func DrawTask(c *gin.Context) {
Award: TaskComplete(a, req), Award: TaskComplete(a, req),
} }
a.Data = resp a.Data = resp
num := 0
for _, task := range GetUserTaskStatus(a) {
if task.Status == 1 {
num++
}
}
call.PushRed(a.UID, pb.RedPointModule_RedPointTaskDraw, uint32(num))
} }
type JoinChannelReq struct { type JoinChannelReq struct {

@ -9,6 +9,7 @@ import (
"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"
"time" "time"
@ -364,7 +365,16 @@ func newContext(c *gin.Context) *gin.Context {
// CheckTask 完成任务 // CheckTask 完成任务
func CheckTask(a *app.Gin) { func CheckTask(a *app.Gin) {
GetUserTaskStatus(a) taskList := GetUserTaskStatus(a)
num := 0
for _, task := range taskList {
if task.Status == 1 {
num++
}
}
if num > 0 {
call.PushRed(a.UID, pb.RedPointModule_RedPointTaskDraw, uint32(num))
}
//var taskList []*values.OneTask //var taskList []*values.OneTask
//tasks := call.GetConfigTask() //tasks := call.GetConfigTask()
//for _, v := range tasks { //for _, v := range tasks {

@ -73,6 +73,7 @@ enum RedPointModule{
RedPointPdd = 8; // pdd次数 RedPointPdd = 8; // pdd次数
RedPointMailPersonal = 9; // - RedPointMailPersonal = 9; // -
RedPointTaskDraw = 10; // RedPointTaskDraw = 10; //
RedPointLuckyWheel = 11; //
} }
message RedInfo { message RedInfo {

Loading…
Cancel
Save