印度包网
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.

289 lines
7.3 KiB

1 year ago
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"))
1 year ago
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)
1 year ago
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
}
1 year ago
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
1 year ago
if !req.IsWager {
st = base.SessionTypeSettle
1 year ago
}
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),
1 year ago
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),
1 year ago
Provider: provider,
BetID: req.AdjustmentTransaction,
Time: req.AdjustmentTime / 1000,
Ess: req.TransactionType,
Type: base.SessionTypeAdjustment,
1 year ago
})
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()
}