parent
cf5a2caa09
commit
5b33fb07ef
1 changed files with 225 additions and 0 deletions
@ -0,0 +1,225 @@ |
||||
package handler |
||||
|
||||
import ( |
||||
"fmt" |
||||
"github.com/gin-gonic/gin" |
||||
"github.com/liangdas/mqant/log" |
||||
"github.com/olivere/elastic/v7" |
||||
"gorm.io/gorm" |
||||
"server/call" |
||||
"server/common" |
||||
"server/config" |
||||
"server/db" |
||||
"server/modules/web/app" |
||||
"server/modules/web/values" |
||||
"server/pb" |
||||
"server/util" |
||||
"sort" |
||||
"time" |
||||
) |
||||
|
||||
func WeekCardInfo(c *gin.Context) { |
||||
a := app.NewApp(c) |
||||
defer func() { |
||||
a.Response() |
||||
}() |
||||
a.GetUID() |
||||
if !a.CheckActivityExpire(common.ActivityIDWeekCard) { |
||||
return |
||||
} |
||||
resp := &values.ActivityWeekCardInfoResp{} |
||||
a.Data = resp |
||||
cons := call.GetConfigWeekCard() |
||||
_ = cons |
||||
cardInfo := new(common.ActivityWeekCardData) |
||||
if a.UID > 0 { |
||||
cardInfo = call.GetUserWeekCard(a.UID) |
||||
} |
||||
var rewardList []int64 |
||||
var err error |
||||
_ = err |
||||
//rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5)
|
||||
//if err != nil {
|
||||
// log.Error("err:%v", err)
|
||||
//}
|
||||
//rewardList = append([]int64{cons.DayOneReward}, rewardList...)
|
||||
//rewardList = append(rewardList, 0)
|
||||
//if cardInfo.ID <= 0 || len(cardInfo.Rewards) == 0 {
|
||||
// cardInfo.Day = 0
|
||||
// rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5)
|
||||
// if err != nil {
|
||||
// log.Error("err:%v", err)
|
||||
// }
|
||||
// rewardList = append([]int64{cons.DayOneReward}, rewardList...)
|
||||
// rewardList = append(rewardList, 0)
|
||||
// if cardInfo.ID <= 0 {
|
||||
// cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",")
|
||||
// if a.UID > 0 {
|
||||
// db.Mysql().Create(cardInfo)
|
||||
// }
|
||||
// } else {
|
||||
// cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",")
|
||||
// db.Mysql().Update(&common.ActivityWeekCardData{UID: a.UID}, map[string]interface{}{
|
||||
// "rewards": cardInfo.Rewards,
|
||||
// })
|
||||
// }
|
||||
//}
|
||||
|
||||
if rewardList == nil { |
||||
rewardList, _ = util.StringToInt64Slice(cardInfo.Rewards, ",") |
||||
} |
||||
if cardInfo.RechargeTime != 0 { |
||||
resp.RechargeStatus = true |
||||
} |
||||
// step:签完7天就重置
|
||||
if cardInfo.Day >= len(rewardList) { |
||||
resp.RechargeStatus = false |
||||
} |
||||
for _, item := range rewardList { |
||||
_ = item |
||||
//resp.RewardList = append(resp.RewardList, values.WeekCardInfo{
|
||||
// Min: cons.MiniLimit,
|
||||
// Max: cons.RewardAmount - cons.MiniLimit*4,
|
||||
// Val: item,
|
||||
//})
|
||||
} |
||||
resp.Status = true |
||||
if config.GetBase().Release { |
||||
if util.IsSameDayTimeStamp(time.Now().Unix(), cardInfo.LastDraw) { |
||||
resp.Status = false |
||||
} |
||||
} |
||||
resp.RewardDay = cardInfo.Day |
||||
resp.ChannelList = call.GetConfigPayChannelsByID(common.CurrencyINR) |
||||
resp.ProductList = call.GetConfigPayProductByActivityID(common.ActivityIDWeekCard) |
||||
if resp.Status && resp.RechargeStatus { |
||||
call.PushRed(a.UID, pb.RedPointModule_RedPointWeekCard, 1) |
||||
} |
||||
call.UploadActivityData(a.UID, common.ActivityIDSign, common.ActivityDataClick, 0) |
||||
} |
||||
|
||||
func WeekCardDraw(c *gin.Context) { |
||||
a := app.NewApp(c) |
||||
defer func() { |
||||
a.Response() |
||||
}() |
||||
if !a.CheckActivityExpire(common.ActivityIDWeekCard) { |
||||
return |
||||
} |
||||
req := new(values.ActivityWeekCardDrawReq) |
||||
if !a.S(req) { |
||||
return |
||||
} |
||||
resp := &values.ActivityWeekCardDrawResp{} |
||||
a.Data = resp |
||||
// conf := call.GetConfigActivityWeekCard()
|
||||
card := call.GetUserWeekCard(a.UID) |
||||
if card.ID == 0 { |
||||
a.Code = values.CodeRetry |
||||
return |
||||
} |
||||
now := time.Now().Unix() |
||||
if config.GetBase().Release { |
||||
if util.IsSameDayTimeStamp(now, card.LastDraw) { |
||||
a.Code = values.CodeRetry |
||||
a.Msg = "today has reward" |
||||
return |
||||
} |
||||
} |
||||
rewards, _ := util.StringToInt64Slice(card.Rewards, ",") |
||||
if card.Day >= len(rewards) { |
||||
a.Code = values.CodeRetry |
||||
a.Msg = "The weekly card has been collected" |
||||
return |
||||
} |
||||
rows, err := db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: a.UID}, |
||||
map[string]interface{}{"day": gorm.Expr("day + 1"), "last_draw": now}) |
||||
if rows == 0 || err != nil { |
||||
log.Error("err:%v", err) |
||||
a.Code = values.CodeRetry |
||||
return |
||||
} |
||||
var reward int64 |
||||
if card.Day < 6 { |
||||
reward = rewards[card.Day] * common.DecimalDigits |
||||
} else { |
||||
// 第几天折扣券
|
||||
// 用户画像一:6天内充值3笔及以上用户
|
||||
// 推送当前最高额度向上一档充值满减卷
|
||||
// 用户画像二:只解锁周卡,未充值的玩家
|
||||
// 推送当前额度向下一档充值满减卷,最低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)) |
||||
db.ES().QueryList(common.ESIndexBalance, 0, 100, q, &list, "time", true) |
||||
up := false |
||||
maxAmount := card.RechargeAmount |
||||
if len(list) >= 3 { |
||||
up = true |
||||
for _, item := range list { |
||||
if item.Value > maxAmount { |
||||
maxAmount = item.Value |
||||
} |
||||
} |
||||
} |
||||
log.Info("maxAmount:%v", maxAmount) |
||||
ticket := call.GetConfigDiscountTicketByAmount(maxAmount) |
||||
log.Info("ticket:%v", ticket) |
||||
if ticket.ID > 0 { |
||||
// 赠送优惠券
|
||||
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 = ticket |
||||
if len(tickets) > nextIdx && nextIdx != -1 { |
||||
nextTicket = tickets[nextIdx] |
||||
} |
||||
if up { |
||||
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, 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 |
||||
} |
||||
} |
||||
} |
||||
resource := common.CurrencyResourceWeekCard |
||||
if card.Day > 0 { |
||||
resource = common.CurrencyResourceBonus |
||||
} |
||||
resp.Reward = reward |
||||
if reward > 0 { |
||||
call.UpdateCurrencyPro(&common.UpdateCurrency{ |
||||
CurrencyBalance: &common.CurrencyBalance{ |
||||
UID: a.UID, |
||||
Type: common.CurrencyINR, |
||||
Value: reward, |
||||
Event: common.CurrencyEventActivityWeekCard, |
||||
ChannelID: a.Channel, |
||||
NeedBet: call.GetConfigCurrencyResourceNeedBet(resource, reward), |
||||
}, |
||||
}) |
||||
} |
||||
call.PushRed(a.UID, pb.RedPointModule_RedPointWeekCard, 0) |
||||
call.UploadActivityData(a.UID, common.ActivityIDSign, common.ActivityDataJoin, reward) |
||||
} |
||||
Loading…
Reference in new issue