diff --git a/call/config.go b/call/config.go index b8130ef..e688618 100644 --- a/call/config.go +++ b/call/config.go @@ -1574,11 +1574,12 @@ func GetConfigDiscountTicket() []common.ConfigDiscountTicket { return configDiscountTicket } -func GetConfigDiscountTicketByAmount(amount int64) common.ConfigDiscountTicket { +// GetConfigDiscountTicketByAmount 不存在就获取小一档的 +func GetConfigDiscountTicketByAmount(amount int64) (ret common.ConfigDiscountTicket) { for _, item := range configDiscountTicket { - if item.RechargeAmount == amount { - return item + if item.RechargeAmount <= amount { + ret = item } } - return common.ConfigDiscountTicket{} + return } diff --git a/call/item.go b/call/item.go index 89cbe5c..05d028b 100644 --- a/call/item.go +++ b/call/item.go @@ -42,10 +42,12 @@ func GetUserBestDiscountTicket(uid int) *common.PlayerItems { return nil } -func AddUserDiscountTicket(uid int, exi1, exi2, t int64) { - err := db.Mysql().Create(&common.PlayerItems{UID: uid, ItemID: common.ItemDiscountTicket, Time: t, Status: common.ItemStatusNormal, Exi1: exi1, Exi2: exi2}) +func AddUserDiscountTicket(uid int, exi1, exi2, t, exi3 int64, notify bool) { + err := db.Mysql().Create(&common.PlayerItems{UID: uid, ItemID: common.ItemDiscountTicket, Time: t, Status: common.ItemStatusNormal, Exi1: exi1, Exi2: exi2, Exi3: exi3}) if err != nil { log.Error("AddUserDiscountTicket err:%v", err) } - SendNR(uid, int(pb.ServerCommonResp_CommonDisCountTicketResp), &pb.DiscountTicketNotify{Discount: exi1, Amount: exi2}, "common") + if notify { + SendNR(uid, int(pb.ServerCommonResp_CommonDisCountTicketResp), &pb.DiscountTicketNotify{Discount: exi1, Amount: exi2}, "common") + } } diff --git a/call/mail.go b/call/mail.go index 6eb4af9..ce9ee28 100644 --- a/call/mail.go +++ b/call/mail.go @@ -80,5 +80,5 @@ func SendMailWithContent(uid int, title, content string) { } func SendMail(mail *common.Mail) { db.Mysql().Create(mail) - UpsertRedPointAndNotify(mail.Receiver, 1, ModuleMail) + // UpsertRedPointAndNotify(mail.Receiver, 1, ModuleMail) } diff --git a/call/pay.go b/call/pay.go index 5d607b0..e22bbbd 100644 --- a/call/pay.go +++ b/call/pay.go @@ -212,6 +212,7 @@ func RechargeCallback(r *common.RechargeOrder, success bool, payAccount, extra s // 以上逻辑为处理订单,更新玩家充值信息,给玩家加钱。 // 下面逻辑处理活动,数据统计等,不影响以上效率,接下来逻辑并发执行 util.Go(func() { + SendNR(r.UID, int(pb.ServerCommonResp_CommonUserInfoResp), &pb.PlayerBalanceResp{}, "common") // 更新活动数据上传 if bonus > 0 { UploadActivityData(uid, common.ActivityIDRecharge, common.ActivityDataJoin, bonus) @@ -238,14 +239,16 @@ func RechargeCallback(r *common.RechargeOrder, success bool, payAccount, extra s } log.Info("nextTicket:%v", nextTicket) count := ticket.CurProb + ticket.NextProb - val := rand.Intn(count) - log.Info("val:%v", val) - if val <= ticket.CurProb { - AddUserDiscountTicket(uid, ticket.DiscountAmount, ticket.RechargeAmount, -1) - SendMailWithContent(uid, SystemTitle, fmt.Sprintf(EmailDiscount, ticket.RechargeAmount/common.DecimalDigits, ticket.DiscountAmount/common.DecimalDigits)) - } else if nextTicket.Id > 0 { - AddUserDiscountTicket(uid, ticket.DiscountAmount, ticket.RechargeAmount, -1) - SendMailWithContent(uid, SystemTitle, fmt.Sprintf(EmailDiscount, ticket.RechargeAmount/common.DecimalDigits, ticket.DiscountAmount/common.DecimalDigits)) + if count > 0 { + val := rand.Intn(count) + log.Info("val:%v", val) + if val <= ticket.CurProb { + AddUserDiscountTicket(uid, ticket.DiscountAmount, ticket.RechargeAmount, -1, 0, true) + SendMailWithContent(uid, SystemTitle, fmt.Sprintf(EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits)) + } else if nextTicket.Id > 0 { + AddUserDiscountTicket(uid, nextTicket.DiscountAmount, nextTicket.RechargeAmount, -1, 1, true) + SendMailWithContent(uid, SystemTitle, fmt.Sprintf(EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits)) + } } } } diff --git a/call/redpoint.go b/call/redpoint.go index 71ceb8b..0e432b0 100644 --- a/call/redpoint.go +++ b/call/redpoint.go @@ -47,10 +47,11 @@ func UpsertRedPointAndNotify(uid, num int, module string) { func PushMailRed(uid int) { redPoints := &common.PlayerRed{UID: uid} db.Mysql().Get(redPoints) - checkMail(uid, redPoints) - one := new(pb.RedPoint) - one.List = append(one.List, &pb.RedInfo{ModuleName: pb.RedPointModule_RedPointMail, Num: uint32(redPoints.Mail)}) - SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), one, "common") + if redPoints.Mail > 0 { + one := new(pb.RedPoint) + one.List = append(one.List, &pb.RedInfo{ModuleName: pb.RedPointModule_RedPointMail, Num: uint32(redPoints.Mail)}) + SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), one, "common") + } } func PushRed(uid int, module pb.RedPointModule, num uint32) { diff --git a/common/player.go b/common/player.go index a648ef2..23de945 100644 --- a/common/player.go +++ b/common/player.go @@ -176,6 +176,7 @@ type PlayerItems struct { Status int `gorm:"column:status;type:int(11);default:0;comment:物品状态"` Exi1 int64 `gorm:"column:exi1;type:bigint(20);default:0;comment:物品标识字段1"` Exi2 int64 `gorm:"column:exi2;type:bigint(20);default:0;comment:物品标识字段2"` + Exi3 int64 `gorm:"column:exi3;type:bigint(20);default:0;comment:物品标识字段3"` } func (p *PlayerItems) TableName() string { diff --git a/modules/backend/handler/examine/examine.go b/modules/backend/handler/examine/examine.go index fbe317a..22c052e 100644 --- a/modules/backend/handler/examine/examine.go +++ b/modules/backend/handler/examine/examine.go @@ -178,6 +178,7 @@ func WithdrawExamine(c *gin.Context) { if err != nil { log.Error(err.Error()) } + call.SendMailWithContent(one.UID, call.SystemTitle, fmt.Sprintf(call.EmailWithdrawFail, one.OrderID, one.Amount/common.DecimalDigits)) return } call.SendMailWithContent(one.UID, call.SystemTitle, fmt.Sprintf(call.EmailWithdrawPass, one.OrderID, one.Amount/common.DecimalDigits)) diff --git a/modules/pay/base/callback.go b/modules/pay/base/callback.go index 08fe752..1d3ed2c 100644 --- a/modules/pay/base/callback.go +++ b/modules/pay/base/callback.go @@ -96,7 +96,6 @@ func (b *Base) WithdrawCallback(c *gin.Context) { } if !success { values.WithdrawAmount(values.PayWay(or.PayChannel), false, or.Amount*100) - call.SendMailWithContent(or.UID, call.SystemTitle, fmt.Sprintf(call.EmailWithdrawFail, or.OrderID, or.Amount/common.DecimalDigits)) } else { values.WithdrawSuccess(values.PayWay(or.PayChannel)) call.SendMailWithContent(or.UID, call.SystemTitle, fmt.Sprintf(call.EmailWithdrawSuccess, or.OrderID, or.Amount/common.DecimalDigits)) diff --git a/modules/web/handler/activity.go b/modules/web/handler/activity.go index 6cba84c..574116c 100644 --- a/modules/web/handler/activity.go +++ b/modules/web/handler/activity.go @@ -1353,7 +1353,7 @@ func ActivityWeekCardInfo(c *gin.Context) { resp.RewardDay = cardInfo.Day resp.ChannelList = call.GetConfigPayChannelsByID(common.CurrencyINR) resp.ProductList = call.GetConfigPayProductByActivityID(common.ActivityIDWeekCard) - if resp.Status { + if resp.Status && resp.RechargeStatus { call.PushRed(a.UID, pb.RedPointModule_RedPointWeekCard, 1) } } @@ -1408,44 +1408,60 @@ func ActivityWeekCardDraw(c *gin.Context) { // 推送当前最高额度向上一档充值满减卷 // 用户画像二:只解锁周卡,未充值的玩家 // 推送当前额度向下一档充值满减卷,最低300 + var list []common.CurrencyBalance q := elastic.NewBoolQuery() q.Filter(elastic.NewRangeQuery("time").Gte(card.RechargeTime)) q.Filter(elastic.NewRangeQuery("time").Lte(now)) q.Filter(elastic.NewRangeQuery("event").Gte(common.CurrencyEventReCharge)) q.Must(elastic.NewTermsQuery("uid", a.UID)) - count := db.ES().Count(common.ESIndexBalance, q) + db.ES().QueryList(common.ESIndexBalance, 0, 100, q, &list, "time", true) up := false - if count >= 3 { + maxAmount := card.RechargeAmount + if len(list) >= 3 { up = true + for _, item := range list { + if item.Value > maxAmount { + maxAmount = item.Value + } + } } - ticket := call.GetConfigDiscountTicketByAmount(int64(300) * common.DecimalDigits) + log.Info("maxAmount:%v", maxAmount) + ticket := call.GetConfigDiscountTicketByAmount(maxAmount) log.Info("ticket:%v", ticket) if ticket.Id > 0 { // 赠送优惠券 - products := call.GetConfigPayProductByActivityID(0) - nextProduct := &common.ConfigPayProduct{} - for _, product := range products { - if product.Amount > card.RechargeAmount && nextProduct.Amount < product.Amount { - nextProduct = product - } else if product.Amount < card.RechargeAmount && nextProduct.Amount > product.Amount { - nextProduct = product + tickets := call.GetConfigDiscountTicket() + sort.Slice(tickets, func(i, j int) bool { + return tickets[i].RechargeAmount < tickets[j].RechargeAmount + }) + // 获取下一档 + 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 } } - var nextTicket common.ConfigDiscountTicket - if nextProduct != nil { - nextTicket = call.GetConfigDiscountTicketByAmount(nextProduct.Amount) + var nextTicket = ticket + if len(tickets) > nextIdx && nextIdx != -1 { + nextTicket = tickets[nextIdx] } if up { - call.AddUserDiscountTicket(a.UID, ticket.DiscountAmount, ticket.RechargeAmount, -1) - call.SendMailWithContent(a.UID, call.SystemTitle, fmt.Sprintf(call.EmailDiscount, ticket.RechargeAmount/common.DecimalDigits, ticket.DiscountAmount/common.DecimalDigits)) + 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) - call.SendMailWithContent(a.UID, call.SystemTitle, fmt.Sprintf(call.EmailDiscount, ticket.RechargeAmount/common.DecimalDigits, ticket.DiscountAmount/common.DecimalDigits)) + 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 } - resp.DiscountTicket = ticket.DiscountAmount - resp.Amount = ticket.RechargeAmount } - } resource := common.CurrencyResourceWeekCard if card.Day > 0 { diff --git a/modules/web/handler/mail.go b/modules/web/handler/mail.go index f04979e..4e4b45a 100644 --- a/modules/web/handler/mail.go +++ b/modules/web/handler/mail.go @@ -43,6 +43,9 @@ func MailList(c *gin.Context) { } a.Data = resp call.PushRed(a.UID, pb.RedPointModule_RedPointMail, 0) + db.Mysql().Update(&common.PlayerRed{UID: a.UID}, map[string]interface{}{ + "mail": 0, + }) } func ReadMail(c *gin.Context) { @@ -73,8 +76,9 @@ func ReadMail(c *gin.Context) { a.Code = values.CodeRetry return } - call.UpsertRedPointAndNotify(a.UID, -1, call.ModuleMail) + // call.UpsertRedPointAndNotify(a.UID, -1, call.ModuleMail) a.Data = values.ReadMailResp{Mail: *one} + } // func DrawMail(c *gin.Context) { @@ -147,7 +151,6 @@ func DeleteMail(c *gin.Context) { if !a.S(req) { return } - count := 0 for _, v := range req.ID { // id, err := strconv.Atoi(v) // if err != nil { @@ -173,9 +176,6 @@ func DeleteMail(c *gin.Context) { count++ } } - if count > 0 { - call.UpsertRedPointAndNotify(a.UID, -count, call.ModuleMail) - } } func DeleteMailAll(c *gin.Context) { @@ -188,5 +188,4 @@ func DeleteMailAll(c *gin.Context) { a.Code = values.CodeRetry return } - call.UpsertRedPointAndNotify(a.UID, 0, call.ModuleMail) } diff --git a/pb/proto/platform.proto b/pb/proto/platform.proto index cf3747a..f9c68d0 100644 --- a/pb/proto/platform.proto +++ b/pb/proto/platform.proto @@ -113,6 +113,7 @@ enum ServerCommonResp{ CommonVipResp = 5; // 活动获得物品通知 ActivityResp CommonBroadcastResp = 6; // 广播 CommonDisCountTicketResp = 7; // 折扣券 + CommonUserInfoResp = 8; // 刷新用户信息 } // 获取用户余额