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.
288 lines
7.3 KiB
288 lines
7.3 KiB
package pgsoft |
|
|
|
import ( |
|
"fmt" |
|
"server/call" |
|
"server/common" |
|
"server/db" |
|
"server/modules/web/app" |
|
"server/modules/web/providers/base" |
|
"server/util" |
|
"strconv" |
|
"strings" |
|
"time" |
|
|
|
"github.com/gin-gonic/gin" |
|
"github.com/liangdas/mqant/log" |
|
) |
|
|
|
func PGSoft(e *gin.RouterGroup) { |
|
e.POST("/VerifySession", verifySession) |
|
e.POST("/Cash/Get", cashGet) |
|
e.POST("/Cash/TransferInOut", transInOut) |
|
e.POST("/Cash/Adjustment", adjsutment) |
|
} |
|
|
|
func verifySession(c *gin.Context) { |
|
a := app.NewApp(c) |
|
resp := &CommonResp{} |
|
a.RetData = resp |
|
thisRet := new(verifySessionResp) |
|
errCode := "" |
|
defer func() { |
|
if errCode != "" { |
|
resp.Error = &Error{ |
|
Code: errCode, |
|
} |
|
} else { |
|
resp.Data = thisRet |
|
} |
|
a.ResponseB() |
|
}() |
|
log.Debug("pgsoft VerifySession req:%+v,traceID:%v", c.Request.Form, c.Query("trace_id")) |
|
req := new(verifySessionReq) |
|
c.Request.ParseForm() |
|
util.ParseFormReq(c.Request.PostForm, req) |
|
if req.OperatorToken != OperatorToken || req.SecretKey != SecretKey { |
|
errCode = "1034" |
|
return |
|
} |
|
// 验证token |
|
uid, _ := db.Redis().GetInt(common.GetRedisKeyToken(req.OperatorPlayerSession)) |
|
if uid == 0 { |
|
errCode = "1034" |
|
return |
|
} |
|
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid)) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
errCode = "1034" |
|
return |
|
} |
|
p, _ := call.GetUserXInfo(uid, "nick") |
|
thisRet.PlayerName = fmt.Sprintf("%v", uid) |
|
thisRet.Currency = strings.ToUpper(common.CurrencyType(currency).GetCurrencyName()) |
|
thisRet.Nickname = p.Nick |
|
log.Debug("thisRet:%+v", thisRet) |
|
} |
|
|
|
func cashGet(c *gin.Context) { |
|
a := app.NewApp(c) |
|
resp := &CommonResp{} |
|
a.RetData = resp |
|
thisRet := new(CashGetResp) |
|
errCode := "" |
|
defer func() { |
|
if errCode != "" { |
|
resp.Error = &Error{ |
|
Code: errCode, |
|
} |
|
} else { |
|
resp.Data = thisRet |
|
} |
|
a.ResponseB() |
|
}() |
|
req := new(CashGetReq) |
|
c.Request.ParseForm() |
|
util.ParseFormReq(c.Request.PostForm, req) |
|
log.Debug("pgsoft cashGet req:%+v,traceID:%v", req, c.Query("trace_id")) |
|
if req.OperatorToken != OperatorToken || req.SecretKey != SecretKey { |
|
errCode = "1034" |
|
return |
|
} |
|
// 验证token |
|
uid, _ := db.Redis().GetInt(common.GetRedisKeyToken(req.OperatorPlayerSession)) |
|
if uid == 0 { |
|
errCode = "1034" |
|
return |
|
} |
|
reqUID, err := strconv.Atoi(req.PlayerName) |
|
if err != nil || reqUID != uid { |
|
errCode = "1034" |
|
return |
|
} |
|
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid)) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
errCode = "1034" |
|
return |
|
} |
|
ct := common.CurrencyType(currency) |
|
thisRet.CurrencyCode = strings.ToUpper(ct.GetCurrencyName()) |
|
thisRet.BalanceAmount = call.GetUserCurrencyFloat(uid, ct, 2) |
|
thisRet.UpdatedTime = time.Now().Unix() |
|
} |
|
|
|
func transInOut(c *gin.Context) { |
|
a := app.NewApp(c) |
|
resp := &CommonResp{} |
|
a.RetData = resp |
|
thisRet := new(TransInOutResp) |
|
errCode := "" |
|
defer func() { |
|
if errCode != "" { |
|
resp.Error = &Error{ |
|
Code: errCode, |
|
} |
|
} else { |
|
resp.Data = thisRet |
|
} |
|
a.ResponseB() |
|
}() |
|
req := new(TransInOutReq) |
|
c.Request.ParseForm() |
|
util.ParseFormReq(c.Request.PostForm, req) |
|
log.Debug("pgsoft transInOut req:%+v,traceID:%v", req, c.Query("trace_id")) |
|
if req.OperatorToken != OperatorToken || req.SecretKey != SecretKey { |
|
errCode = "1034" |
|
return |
|
} |
|
// 验证token |
|
// uid, _ := db.Redis().GetInt(common.GetRedisKeyToken(req.OperatorPlayerSession)) |
|
// if uid == 0 { |
|
// errCode = "1034" |
|
// return |
|
// } |
|
uid, err := strconv.Atoi(req.PlayerName) |
|
if err != nil { |
|
errCode = "1034" |
|
return |
|
} |
|
if !db.Mysql().Exist(&common.PlayerDBInfo{Id: uid}) { |
|
errCode = "1034" |
|
return |
|
} |
|
currency := common.GetCurrencyID(req.CurrencyCode) |
|
if !currency.IsValid() { |
|
log.Error("unknown currency:%v", currency) |
|
errCode = "1034" |
|
return |
|
} |
|
ct := common.CurrencyType(currency) |
|
st := base.SessionTypeBet |
|
if !req.IsWager { |
|
st = base.SessionTypeSettle |
|
} |
|
provider := call.GetConfigGameProvider(common.ProviderPGSoft) |
|
if provider == nil { |
|
errCode = "1034" |
|
return |
|
} |
|
if req.BetAmount == 0 && req.TransferAmount == 0 { |
|
thisRet.CurrencyCode = strings.ToUpper(ct.GetCurrencyName()) |
|
thisRet.BalanceAmount = call.GetUserCurrencyFloat(uid, ct, 2) |
|
thisRet.UpdatedTime = req.UpdatedTime |
|
return |
|
} |
|
betResp := base.SessionBet(&base.BetReq{ |
|
UID: uid, |
|
CurrencyType: ct, |
|
SettleAmount: int64(req.WinAmount * common.DecimalDigits), |
|
BetAmount: int64(req.BetAmount * common.DecimalDigits), |
|
TurnOver: int64(req.BetAmount * common.DecimalDigits), |
|
SessionType: st, |
|
GameID: req.GameID, |
|
Provider: provider, |
|
BetID: req.TansactionID, |
|
SessionID: req.ParentBetID, |
|
Time: req.UpdatedTime, |
|
// SettleWithoutBet: true, |
|
}) |
|
log.Debug("betResp:%+v", betResp) |
|
if betResp.Code != 0 { |
|
if betResp.Code == base.CodeAccepted { |
|
thisRet.BalanceAmount = call.GetUserCurrencyFloat(uid, ct, 2) |
|
thisRet.CurrencyCode = strings.ToUpper(ct.GetCurrencyName()) |
|
thisRet.UpdatedTime = req.UpdatedTime |
|
} else { |
|
errCode = "1034" |
|
if betResp.Code == base.CodeNotEnoughAmount { |
|
errCode = "3202" |
|
} |
|
} |
|
return |
|
} |
|
|
|
thisRet.CurrencyCode = strings.ToUpper(ct.GetCurrencyName()) |
|
thisRet.BalanceAmount = util.Decimal(float64(betResp.Balance)/common.DecimalDigits, 2) |
|
thisRet.UpdatedTime = req.UpdatedTime |
|
} |
|
|
|
func adjsutment(c *gin.Context) { |
|
a := app.NewApp(c) |
|
resp := &CommonResp{} |
|
a.RetData = resp |
|
thisRet := new(AdjustmentResp) |
|
errCode := "" |
|
defer func() { |
|
if errCode != "" { |
|
resp.Error = &Error{ |
|
Code: errCode, |
|
} |
|
} else { |
|
resp.Data = thisRet |
|
} |
|
a.ResponseB() |
|
}() |
|
req := new(AdjustmentReq) |
|
c.Request.ParseForm() |
|
util.ParseFormReq(c.Request.PostForm, req) |
|
log.Debug("pgsoft adjsutment req:%+v,traceID:%v", req, c.Query("trace_id")) |
|
if req.OperatorToken != OperatorToken || req.SecretKey != SecretKey { |
|
errCode = "1034" |
|
return |
|
} |
|
uid, err := strconv.Atoi(req.PlayerName) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
errCode = "1034" |
|
return |
|
} |
|
if !db.Mysql().Exist(&common.PlayerDBInfo{Id: uid}) { |
|
errCode = "1034" |
|
return |
|
} |
|
|
|
ct := common.GetCurrencyID(req.CurrencyCode) |
|
if !ct.IsValid() { |
|
log.Error("unknown currency:%v", ct) |
|
errCode = "1034" |
|
return |
|
} |
|
|
|
provider := call.GetConfigGameProvider(common.ProviderPGSoft) |
|
if provider == nil { |
|
errCode = "1034" |
|
return |
|
} |
|
if req.TransferAmount != 0 { |
|
adjustResp := base.Adjustment(&base.AdjustmentReq{ |
|
UID: uid, |
|
CurrencyType: ct, |
|
Amount: int64(req.TransferAmount * common.DecimalDigits), |
|
Provider: provider, |
|
BetID: req.AdjustmentTransaction, |
|
Time: req.AdjustmentTime / 1000, |
|
Ess: req.TransactionType, |
|
Type: base.SessionTypeAdjustment, |
|
}) |
|
if adjustResp.Code == base.CodeAccepted { |
|
thisRet.BalanceAfter = call.GetUserCurrencyFloat(uid, ct, 2) |
|
thisRet.BalanceBefore = thisRet.BalanceAfter - req.TransferAmount |
|
} else if adjustResp.Code != base.CodeOk { |
|
errCode = "1034" |
|
if adjustResp.Code == base.CodeNotEnoughAmount { |
|
errCode = "3202" |
|
} |
|
return |
|
} else { |
|
thisRet.BalanceBefore = util.Decimal(float64(adjustResp.BeforeBalance)/common.DecimalDigits, 2) |
|
thisRet.BalanceAfter = util.Decimal(float64(adjustResp.Balance)/common.DecimalDigits, 2) |
|
} |
|
} else { |
|
thisRet.BalanceBefore = call.GetUserCurrencyFloat(uid, ct, 2) |
|
thisRet.BalanceAfter = thisRet.BalanceBefore |
|
} |
|
thisRet.AdjustAmount = req.TransferAmount |
|
thisRet.UpdatedTime = time.Now().Unix() |
|
}
|
|
|