印度包网
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

433 lines
11 KiB

package handler
import (
"fmt"
"server/call"
"server/common"
"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"
"gorm.io/gorm"
)
// func ShareInfo(c *gin.Context) {
// a := app.NewApp(c)
// defer func() {
// a.Response()
// }()
// shareInfo := &common.ShareInfo{}
// resp := &values.ShareInfoResp{
// ShareConfig: call.GetConfigShare(),
// }
// a.Data = resp
// a.GetUID()
// if a.UID > 0 {
// shareInfo = call.GetShareInfo(a.UID)
// resp.Today = values.ShareRecord{
// Regist: shareInfo.TodayAgents,
// Real: shareInfo.TodayRealAgents,
// Bet: shareInfo.TodayAgentsBet,
// Reward: shareInfo.TodayReward,
// }
// resp.Total = values.ShareRecord{
// Regist: shareInfo.TotalAgents,
// Real: shareInfo.TotalRealAgents,
// Bet: shareInfo.TotalAgentsBet,
// Reward: shareInfo.TotalReward,
// }
// resp.Rewards = values.RewardRecord{
// Level: shareInfo.Level,
// TotalWithdraw: shareInfo.TotalReward - shareInfo.AvailableReward,
// Available: shareInfo.AvailableReward,
// }
// }
// channel := call.GetChannelByID(a.Channel)
// if channel != nil {
// resp.ShareLink = channel.URL + "?code=" + shareInfo.Share
// if a.Prefix != "" {
// resp.ShareLink = a.Prefix + "." + resp.ShareLink
// } else {
// resp.ShareLink = "www." + resp.ShareLink
// }
// if shareInfo.Share == "" {
// resp.ShareLink += "xxxxxx"
// }
// }
// con := call.GetConfigShareSys()
// if con != nil {
// resp.Rewards.WithdrawLimit = con.WithdrawLimit
// }
// }
func ShareInfo(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
resp := &values.ShareInfoResp{
InviteRecharge: call.GetConfigShareSys().ShareRecharge,
PlatformInviteReward: values.ShareTotalInviteReward + call.GetConfigShareSys().FakeInviteReward,
PlatformBetReward: values.ShareTotalBetReward + call.GetConfigShareSys().FakeBetReward,
Rank: values.ShareRank,
}
a.Data = resp
resp.PlatformTotalReward = resp.PlatformInviteReward + resp.PlatformBetReward
for _, v := range call.GetConfigShare() {
resp.BetPer = append(resp.BetPer, util.FormatFloat(float64(v.Per)/10, 2)+"%")
}
channel := call.GetChannelByID(a.Channel)
if channel != nil {
resp.ShareLink += channel.URL + "?code=" + "xxxxxx"
if a.Prefix != "" {
resp.ShareLink = a.Prefix + "." + resp.ShareLink
} else {
resp.ShareLink = "www." + resp.ShareLink
}
resp.ShareLink = "https://" + resp.ShareLink
}
a.GetUID()
if a.UID <= 0 {
return
}
shareInfo := call.GetShareInfo(a.UID)
resp.InviteReward = shareInfo.InviteReward
resp.BetReward = shareInfo.BetReward
resp.Invites = shareInfo.Invites
resp.InvalidInvites = shareInfo.InvaidInvites
resp.TotalReward = resp.InviteReward + resp.BetReward
resp.AvailableReward = shareInfo.AvailableReward
resp.RechargeCount = call.GetUserShareRecharges(a.UID, 1)
resp.TotalRecharge = call.GetUserShareRechargeAmount(a.UID, 1)
if channel != nil {
resp.ShareLink = channel.URL + "?code=" + shareInfo.Share + "&ch=" + fmt.Sprintf("%d", channel.ChannelID)
if a.Prefix != "" {
resp.ShareLink = a.Prefix + "." + resp.ShareLink
} else {
resp.ShareLink = "www." + resp.ShareLink
}
resp.ShareLink = "https://" + resp.ShareLink
}
num := 0
if resp.AvailableReward > 0 {
num = 1
}
if num > 0 {
call.PushRed(a.UID, pb.RedPointModule_RedPointShare, uint32(num))
}
}
func GetActivityCode(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.GetActivityCodeReq)
if !a.S(req) {
return
}
resp := &values.GetActivityCodeResp{}
a.Data = resp
channel := call.GetChannelByID(a.Channel)
if channel != nil {
resp.ShareLink += channel.URL + "?code=" + "xxxxxx"
}
a.GetUID()
if a.UID <= 0 {
return
}
code, err := call.GetActivityShareCode(a.UID, req.ActivityId)
if err != nil {
a.Code = values.CodeRetry
return
}
if channel != nil {
resp.ShareLink = channel.URL + "?code=" + code
if a.Prefix != "" {
resp.ShareLink = a.Prefix + "." + resp.ShareLink
} else {
resp.ShareLink = "www." + resp.ShareLink
}
}
}
func SharePlatformInfo(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
resp := &values.SharePlatformResp{
InviteReward: values.ShareTotalInviteReward,
BetReward: values.ShareTotalBetReward,
}
a.Data = resp
resp.TotalReward = resp.InviteReward + resp.BetReward
resp.Rank = values.ShareRank
}
func ShareWithdraw(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.ShareWithdrawReq)
if !a.S(req) {
return
}
if req.Opt < 1 || req.Opt > 2 {
a.Code = values.CodeParam
return
}
con := call.GetConfigShareSys()
log.Debug("player %d ShareWithdraw,con:%+v", a.UID, con)
if con == nil {
a.Code = values.CodeRetry
return
}
shareInfo := call.GetShareInfo(a.UID)
if shareInfo.ID <= 0 {
a.Code = values.CodeParam
return
}
availableReward := shareInfo.AvailableReward
if availableReward < con.WithdrawLimit {
a.Code = values.CodeParam
a.Msg = fmt.Sprintf("Minimum withdrawal requirement is %d.", con.WithdrawLimit/common.DecimalDigits)
return
}
if req.Amount > availableReward {
a.Code = values.CodeParam
return
}
// 直接到余额
if req.Opt == 1 {
rows, err := db.Mysql().UpdateResW(&common.ShareInfo{}, map[string]interface{}{"available_reward": gorm.Expr("available_reward - ?", req.Amount)},
fmt.Sprintf("available_reward = %d and uid = %d", availableReward, a.UID))
if err != nil {
log.Error("err:%v", err)
a.Code = values.CodeRetry
return
}
if rows == 0 {
a.Code = values.CodeRetry
return
}
call.UpdateCurrencyPro(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{
UID: a.UID,
Type: common.CurrencyINR,
ChannelID: a.Channel,
Value: req.Amount,
Event: common.CurrencyEventShareWithdraw,
},
})
return
}
ip := a.GetRemoteIP()
payInfo, code := NewWithdraw(&values.WithdrawReq{PayAccount: req.PayAccount}, a.UID, ip, a.UUID)
if code != values.CodeOK {
a.Code = code
a.Msg = payInfo
return
}
if len(payInfo) > 500 {
a.Code = values.CodeParam
a.Msg = "Withdrawal information too long."
return
}
re := call.GetRechargeInfo(a.UID)
now := time.Now().Unix()
if re.ID == 0 {
re.LastWithdraw = now
if err := db.Mysql().Create(re); err != nil {
a.Code = values.CodeRetry
return
}
} else {
u := map[string]interface{}{"last_withdraw": now}
if !util.IsSameDayTimeStamp(now, re.LastWithdraw) {
u["withdraw_count"] = 0
u["day_withdraw"] = 0
}
rows, err := db.Mysql().UpdateRes(&common.RechargeInfo{UID: a.UID, LastWithdraw: re.LastWithdraw}, u)
if err != nil || rows == 0 {
a.Code = values.CodeRetry
return
}
}
orderID := util.NewOrderID(a.UID)
vipCon := call.GetVipCon(a.UID)
realAmount := req.Amount // 实际打款
if con != nil && vipCon.Fee > 0 {
realAmount = common.RoundCurrency(common.CurrencyINR, (1000-int64(vipCon.Fee))*realAmount/1000)
}
rows, err := db.Mysql().UpdateResW(&common.ShareInfo{}, map[string]interface{}{"available_reward": gorm.Expr("available_reward - ?", req.Amount)},
fmt.Sprintf("available_reward = %d and uid = %d", availableReward, a.UID))
if err != nil {
log.Error("err:%v", err)
a.Code = values.CodeRetry
return
}
if rows == 0 {
a.Code = values.CodeRetry
return
}
order := &common.WithdrawOrder{
UID: int(a.UID),
OrderID: orderID,
APIPayID: "",
// ProductID: one.ID,
CreateTime: time.Now().Unix(),
Amount: realAmount,
WithdrawCash: req.Amount,
Status: uint8(common.StatusROrderCreate),
PaySource: common.PaySourceModulePay,
Event: int(common.CurrencyEventWithDraw),
CurrencyType: common.CurrencyINR,
PayAccount: payInfo,
ChannelID: a.Channel,
UPI: -1,
OrderType: common.WithdrawOrderTypeShare,
}
if err := db.Mysql().Create(order); err != nil {
log.Error("player %v create withdraw order fail err:%v", a.UID, err)
a.Code = values.CodeRetry
return
}
u := map[string]interface{}{}
u["withdrawing_cash"] = gorm.Expr("withdrawing_cash + ?", req.Amount)
u["withdraw_count"] = gorm.Expr("withdraw_count + ?", 1)
u["total_withdrawing"] = gorm.Expr("total_withdrawing + ?", realAmount)
u["day_withdraw"] = gorm.Expr("day_withdraw + ?", realAmount)
db.Mysql().Update(&common.RechargeInfo{UID: a.UID}, u)
a.Data = values.ShareWithdrawResp{Available: availableReward - req.Amount}
call.PushRed(a.UID, pb.RedPointModule_RedPointShare, uint32(0))
}
// func ShareReference(c *gin.Context) {
// a := app.NewApp(c)
// defer func() {
// a.Response()
// }()
// req := new(values.ShareReferenceReq)
// if !a.S(req) {
// return
// }
// if req.Num > 100 {
// req.Num = 100
// }
// resp := &values.ShareReferenceResp{}
// a.Data = resp
// a.GetUID()
// if a.UID == 0 {
// return
// }
// q := elastic.NewBoolQuery()
// if req.Start > 0 {
// q.Filter(elastic.NewRangeQuery("Time").Gte(req.Start))
// }
// if req.End > 0 {
// q.Filter(elastic.NewRangeQuery("Time").Lt(req.End))
// }
// q.Filter(elastic.NewTermQuery("Up", a.UID))
// db.ES().QueryList(common.ESIndexShareProfitRecord, req.Page, req.Num, q, &resp.List)
// resp.TotalBet = db.ES().SumByInt64(common.ESIndexShareProfitRecord, "DownBet", q) + db.ES().SumByInt64(common.ESIndexShareProfitRecord, "Bet", q)
// resp.TotalReward = db.ES().SumByInt64(common.ESIndexShareProfitRecord, "Reward", q)
// }
// func ShareReport(c *gin.Context) {
// a := app.NewApp(c)
// defer func() {
// a.Response()
// }()
// req := new(values.ShareReportReq)
// if !a.S(req) {
// return
// }
// if req.Num > 100 {
// req.Num = 100
// }
// resp := &values.ShareReportResp{}
// a.Data = resp
// a.GetUID()
// if a.UID == 0 {
// return
// }
// q := elastic.NewBoolQuery()
// if req.Start > 0 {
// q.Filter(elastic.NewRangeQuery("Time").Gte(req.Start))
// }
// if req.End > 0 {
// q.Filter(elastic.NewRangeQuery("Time").Lt(req.End))
// }
// q.Filter(elastic.NewTermQuery("UID", a.UID))
// db.ES().QueryList(common.ESIndexShareProfitReport, req.Page, req.Num, q, &resp.List, "Time", false)
// today := &common.ShareInfo{UID: a.UID}
// db.Mysql().Get(today)
// if today.TodayAgents > 0 {
// resp.List = append([]common.ESShareProfitReport{{
// UID: a.UID,
// Regist: today.TodayAgents,
// Bet: today.TodayAgentsBet,
// Level: today.Level,
// Reward: today.TodayReward,
// Date: time.Now().Format("20060102"),
// Time: time.Now().Unix(),
// }}, resp.List...)
// }
// }
// func ShareTransfer(c *gin.Context) {
// a := app.NewApp(c)
// defer func() {
// a.Response()
// }()
// req := new(values.ShareTransferReq)
// if !a.S(req) {
// return
// }
// if req.Num > 100 {
// req.Num = 100
// }
// resp := &values.ShareTransferResp{}
// a.Data = resp
// a.GetUID()
// if a.UID == 0 {
// return
// }
// sql := fmt.Sprintf("uid = %d", a.UID)
// // q := elastic.NewBoolQuery()
// if req.Start > 0 {
// // q.Filter(elastic.NewRangeQuery("Time").Gte(req.Start))
// sql += fmt.Sprintf(" and create_time>=%d", req.Start)
// }
// if req.End > 0 {
// sql += fmt.Sprintf(" and create_time<%d", req.End)
// // q.Filter(elastic.NewRangeQuery("Time").Lt(req.End))
// }
// // q.Filter(elastic.NewTermQuery("UID", a.UID))
// db.Mysql().QueryListW(req.Page, req.Num, "create_time desc", &common.ShareOrder{}, &resp.List, sql)
// // db.ES().QueryList(common.ESIndexShareProfitTransfer, req.Page, req.Num, q, &resp.List)
// }