|
|
|
|
|
package handler
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"server/call"
|
|
|
|
|
|
"server/common"
|
|
|
|
|
|
"server/config"
|
|
|
|
|
|
"server/db"
|
|
|
|
|
|
"server/modules/web/app"
|
|
|
|
|
|
"server/modules/web/values"
|
|
|
|
|
|
"server/pb"
|
|
|
|
|
|
"server/util"
|
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
|
"github.com/liangdas/mqant/log"
|
|
|
|
|
|
"github.com/olivere/elastic/v7"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func GetVipInfo(c *gin.Context) {
|
|
|
|
|
|
a := app.NewApp(c)
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
a.Response()
|
|
|
|
|
|
}()
|
|
|
|
|
|
req := new(values.VipInfoReq)
|
|
|
|
|
|
ok, _ := util.CheckRequestBody(c)
|
|
|
|
|
|
if ok && !a.S(req) {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if req.Num > 100 {
|
|
|
|
|
|
req.Num = 100
|
|
|
|
|
|
}
|
|
|
|
|
|
resp := &values.VipInfoResp{
|
|
|
|
|
|
List: call.GetConfigVIP(),
|
|
|
|
|
|
}
|
|
|
|
|
|
a.Data = resp
|
|
|
|
|
|
a.GetUID()
|
|
|
|
|
|
if a.UID == 0 {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
resp.Info = call.GetVIP(a.UID)
|
|
|
|
|
|
con := call.GetConfigVIPByLevel(resp.Info.Level)
|
|
|
|
|
|
if con == nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if resp.Info.Profit < 0 {
|
|
|
|
|
|
resp.Info.Profit = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
reset := false
|
|
|
|
|
|
now := time.Now()
|
|
|
|
|
|
if config.GetBase().Release {
|
|
|
|
|
|
reset = !util.IsSameDayTimeStamp(now.Unix(), resp.Info.ProfitTime)
|
|
|
|
|
|
if reset {
|
|
|
|
|
|
if util.GetZeroTime(now).Unix()-resp.Info.ProfitTime > 24*3600 { // 超时未领取直接归零
|
|
|
|
|
|
db.Mysql().UpdateResW(&common.VipData{}, map[string]interface{}{"profit_time": now.Unix(), "cashback": 0, "profit": 0},
|
|
|
|
|
|
fmt.Sprintf("uid = %v and profit_time = %v", a.UID, resp.Info.ProfitTime))
|
|
|
|
|
|
resp.Info.Cashback = 0
|
|
|
|
|
|
resp.Info.Profit = 0
|
|
|
|
|
|
} else {
|
|
|
|
|
|
cashback := resp.Info.Profit * con.Cashback / 1000
|
|
|
|
|
|
if cashback < 0 {
|
|
|
|
|
|
cashback = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
resp.Info.Cashback = cashback
|
|
|
|
|
|
db.Mysql().UpdateResW(&common.VipData{}, map[string]interface{}{"profit_time": now.Unix(), "cashback": cashback, "profit": 0},
|
|
|
|
|
|
fmt.Sprintf("uid = %v and profit_time = %v", a.UID, resp.Info.ProfitTime))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
reset = util.GetNext5MinUnix()-resp.Info.ProfitTime >= 5*60
|
|
|
|
|
|
if reset {
|
|
|
|
|
|
if util.GetNext5MinUnix()-resp.Info.ProfitTime > 2*5*60 { // 超时未领取直接归零
|
|
|
|
|
|
db.Mysql().UpdateResW(&common.VipData{}, map[string]interface{}{"profit_time": now.Unix(), "cashback": 0, "profit": 0},
|
|
|
|
|
|
fmt.Sprintf("uid = %v and profit_time = %v", a.UID, resp.Info.ProfitTime))
|
|
|
|
|
|
resp.Info.Cashback = 0
|
|
|
|
|
|
resp.Info.Profit = 0
|
|
|
|
|
|
} else {
|
|
|
|
|
|
cashback := resp.Info.Profit * con.Cashback / 1000
|
|
|
|
|
|
if cashback < 0 {
|
|
|
|
|
|
cashback = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
resp.Info.Cashback = cashback
|
|
|
|
|
|
db.Mysql().UpdateResW(&common.VipData{}, map[string]interface{}{"profit_time": now.Unix(), "cashback": cashback, "profit": 0},
|
|
|
|
|
|
fmt.Sprintf("uid = %v and profit_time = %v", a.UID, resp.Info.ProfitTime))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if resp.Info.Cashback == 0 && resp.Info.Level > 0 {
|
|
|
|
|
|
con := call.GetVipCon(a.UID)
|
|
|
|
|
|
resp.Info.Cashback = resp.Info.Profit * con.Cashback / 1000
|
|
|
|
|
|
if config.GetBase().Release {
|
|
|
|
|
|
resp.NextCashback = util.GetZeroTime(now.AddDate(0, 0, 1)).Unix() - now.Unix()
|
|
|
|
|
|
} else {
|
|
|
|
|
|
resp.NextCashback = util.GetNext5MinUnix() - now.Unix()
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if resp.Info.Cashback < 0 {
|
|
|
|
|
|
resp.Info.Cashback = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
resp.CashbackList = []common.CurrencyBalance{}
|
|
|
|
|
|
q := elastic.NewBoolQuery()
|
|
|
|
|
|
q.Filter(elastic.NewTermQuery("uid", a.UID))
|
|
|
|
|
|
q.Filter(elastic.NewTermQuery("event", common.CurrencyEventVIPCashback))
|
|
|
|
|
|
resp.TotalCashback = db.ES().SumByInt64(common.ESIndexBalance, "value", q)
|
|
|
|
|
|
// db.ES().QueryList(common.ESIndexBalance, req.Page, req.Num, q, &resp.CashbackList, "time", false)
|
|
|
|
|
|
num := 0
|
|
|
|
|
|
if resp.Info.Cashback > 0 {
|
|
|
|
|
|
num = 1
|
|
|
|
|
|
}
|
|
|
|
|
|
if num > 0 {
|
|
|
|
|
|
call.PushRed(a.UID, pb.RedPointModule_RedPointVipCashback, uint32(num))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func DrawVipBonus(c *gin.Context) {
|
|
|
|
|
|
a := app.NewApp(c)
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
a.Response()
|
|
|
|
|
|
}()
|
|
|
|
|
|
req := new(values.DrawVipBonusReq)
|
|
|
|
|
|
if !a.S(req) {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
cons := call.GetConfigVIP()
|
|
|
|
|
|
if len(cons) == 0 {
|
|
|
|
|
|
a.Code = values.CodeRetry
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if req.Level < 0 || req.Level > cons[len(cons)-1].Level {
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "VIP level is insufficient"
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
vip := call.GetVIP(a.UID)
|
|
|
|
|
|
if vip.Level < req.Level {
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "VIP level is insufficient"
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
flag := int64(1 << req.Level)
|
|
|
|
|
|
if vip.Draws&int64(flag) > 0 {
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "reward has been claimed"
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
con := call.GetConfigVIPByLevel(req.Level)
|
|
|
|
|
|
if con == nil {
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "VIP level is insufficient"
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
bonus := con.Bonus
|
|
|
|
|
|
if bonus <= 0 {
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "इनाम अमान्य"
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
newDraws := vip.Draws | flag
|
|
|
|
|
|
rows, err := db.Mysql().UpdateResW(&common.VipData{}, map[string]interface{}{"draws": newDraws}, fmt.Sprintf("uid = %d and draws = %v", a.UID, vip.Draws))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
log.Error("err:%v", err)
|
|
|
|
|
|
a.Code = values.CodeRetry
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if rows == 0 {
|
|
|
|
|
|
a.Code = values.CodeRetry
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
_, err = call.UpdateCurrencyPro(&common.UpdateCurrency{
|
|
|
|
|
|
CurrencyBalance: &common.CurrencyBalance{
|
|
|
|
|
|
UID: a.UID,
|
|
|
|
|
|
Event: common.CurrencyEventVIPBonus,
|
|
|
|
|
|
Type: common.CurrencyINR,
|
|
|
|
|
|
ChannelID: a.Channel,
|
|
|
|
|
|
Value: bonus,
|
|
|
|
|
|
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, bonus),
|
|
|
|
|
|
},
|
|
|
|
|
|
})
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
log.Error("err:%v", err)
|
|
|
|
|
|
a.Code = values.CodeRetry
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
vip = call.GetVIP(a.UID)
|
|
|
|
|
|
if vip.Draws == 0 {
|
|
|
|
|
|
call.PushRed(a.UID, pb.RedPointModule_RedPointVipReward, uint32(0))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func DrawVipCashback(c *gin.Context) {
|
|
|
|
|
|
a := app.NewApp(c)
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
a.Response()
|
|
|
|
|
|
}()
|
|
|
|
|
|
vip := call.GetVIP(a.UID)
|
|
|
|
|
|
cashback := vip.Cashback
|
|
|
|
|
|
con := call.GetConfigVIPByLevel(vip.Level)
|
|
|
|
|
|
reset := false
|
|
|
|
|
|
now := time.Now()
|
|
|
|
|
|
update := map[string]interface{}{"cashback": 0}
|
|
|
|
|
|
if config.GetBase().Release {
|
|
|
|
|
|
reset = !util.IsSameDayTimeStamp(now.Unix(), vip.ProfitTime)
|
|
|
|
|
|
if reset {
|
|
|
|
|
|
if util.GetZeroTime(now).Unix()-vip.ProfitTime > 24*3600 { // 超时未领取直接归零
|
|
|
|
|
|
db.Mysql().UpdateResW(&common.VipData{}, map[string]interface{}{"profit_time": now.Unix(), "cashback": 0, "profit": 0},
|
|
|
|
|
|
fmt.Sprintf("uid = %v and profit_time = %v", a.UID, vip.ProfitTime))
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "इनाम अमान्य"
|
|
|
|
|
|
return
|
|
|
|
|
|
} else {
|
|
|
|
|
|
cashback = vip.Profit * con.Cashback / 1000
|
|
|
|
|
|
update["profit"] = 0
|
|
|
|
|
|
update["profit_time"] = time.Now().Unix()
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
reset = util.GetNext5MinUnix()-vip.ProfitTime >= 5*60
|
|
|
|
|
|
if reset {
|
|
|
|
|
|
if util.GetNext5MinUnix()-vip.ProfitTime > 2*5*60 { // 超时未领取直接归零
|
|
|
|
|
|
db.Mysql().UpdateResW(&common.VipData{}, map[string]interface{}{"profit_time": now.Unix(), "cashback": 0, "profit": 0},
|
|
|
|
|
|
fmt.Sprintf("uid = %v and profit_time = %v", a.UID, vip.ProfitTime))
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "इनाम अमान्य"
|
|
|
|
|
|
return
|
|
|
|
|
|
} else {
|
|
|
|
|
|
cashback = vip.Profit * con.Cashback / 1000
|
|
|
|
|
|
update["profit"] = 0
|
|
|
|
|
|
update["profit_time"] = time.Now().Unix()
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if cashback <= 0 {
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "इनाम अमान्य"
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
q := elastic.NewBoolQuery()
|
|
|
|
|
|
q.Filter(elastic.NewTermQuery("uid", a.UID))
|
|
|
|
|
|
q.Filter(elastic.NewTermQuery("event", common.CurrencyEventVIPCashback))
|
|
|
|
|
|
totalCashback := db.ES().SumByInt64(common.ESIndexBalance, "value", q)
|
|
|
|
|
|
|
|
|
|
|
|
rows, err := db.Mysql().UpdateResW(&common.VipData{}, update, fmt.Sprintf("uid = %v and cashback = %v", a.UID, vip.Cashback))
|
|
|
|
|
|
if err != nil || rows == 0 {
|
|
|
|
|
|
log.Error("err:%v", err)
|
|
|
|
|
|
a.Code = values.CodeParam
|
|
|
|
|
|
a.Msg = "इनाम अमान्य"
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
_, err = call.UpdateCurrencyPro(&common.UpdateCurrency{
|
|
|
|
|
|
CurrencyBalance: &common.CurrencyBalance{
|
|
|
|
|
|
UID: a.UID,
|
|
|
|
|
|
Event: common.CurrencyEventVIPCashback,
|
|
|
|
|
|
Type: common.CurrencyINR,
|
|
|
|
|
|
ChannelID: a.Channel,
|
|
|
|
|
|
Value: cashback,
|
|
|
|
|
|
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, cashback),
|
|
|
|
|
|
},
|
|
|
|
|
|
})
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
log.Error("err:%v", err)
|
|
|
|
|
|
a.Code = values.CodeRetry
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
resp := values.DrawCashbackResp{
|
|
|
|
|
|
TotalCashback: totalCashback + cashback,
|
|
|
|
|
|
Balance: 0,
|
|
|
|
|
|
}
|
|
|
|
|
|
if config.GetBase().Release {
|
|
|
|
|
|
resp.NextCashback = util.GetZeroTime(now.AddDate(0, 0, 1)).Unix() - now.Unix()
|
|
|
|
|
|
} else {
|
|
|
|
|
|
resp.NextCashback = util.GetNext5MinUnix() - now.Unix()
|
|
|
|
|
|
}
|
|
|
|
|
|
a.Data = resp
|
|
|
|
|
|
call.PushRed(a.UID, pb.RedPointModule_RedPointVipCashback, uint32(0))
|
|
|
|
|
|
}
|