替换通道成功权重翻倍

dev_aagame_provider
zhora 1 month ago
parent 755122a852
commit 1204e26e61
  1. 1
      common/recharge.go
  2. 10
      modules/pay/base/base.go
  3. 2
      modules/pay/base/callback.go
  4. 4
      modules/pay/handler.go
  5. 6
      modules/pay/moneydealer/base.go
  6. 6
      modules/pay/moneydealernative/base.go
  7. 2
      modules/pay/timer.go
  8. 5
      modules/pay/values/values.go
  9. 4
      modules/web/handler/recharge.go
  10. 1
      pb/proto/pay.proto

@ -145,6 +145,7 @@ type RechargeOrder struct {
Times int `gorm:"column:times;not null;type:int(11);comment:额度购买次数"`
Scene int `gorm:"column:scene;type:int(11);default:0;comment:支付场景"`
WithdrawCash int64 `gorm:"column:withdraw_cash;type:bigint(20);default:0;comment:提现扣除的金币" json:"withdraw_cash" redis:"withdraw_cash"`
IsReplace int `gorm:"column:is_replace;not null;default:0;type:int(11);comment:是否替换通道"`
}
func (r *RechargeOrder) TableName() string {

@ -78,7 +78,7 @@ type Base struct {
QueryWithdrawResp QueryResp
QueryPayResp QueryResp
Sub
SubReq func() ([]byte, error) // 特殊处理一些非常规请求
SubReq func(bool) ([]byte, error) // 特殊处理一些非常规请求
SubCallbackDecode func([]byte) (string, error) // 特殊处理回调解析的方法
SignPassStr []string // 不参与签名的字段
KeyName string // 有时候有些渠道签名字段不一样
@ -169,9 +169,9 @@ func (b *Base) PackHeader(header http.Header) {
b.Sub.PackHeader(header)
}
func (b *Base) Req() ([]byte, error) {
func (b *Base) Req(isReplace bool) ([]byte, error) {
if b.SubReq != nil {
return b.SubReq()
return b.SubReq(isReplace)
}
send := b.Sub.PackReq()
if send == nil {
@ -196,6 +196,10 @@ func (b *Base) Req() ([]byte, error) {
log.Error("err:%v", err)
return nil, err
}
switch v := ret.(type) {
case *pb.InnerRechargeResp:
v.IsReplace = isReplace
}
data, _ := proto.Marshal(ret)
return data, nil
}

@ -50,7 +50,7 @@ func (b *Base) PayCallback(c *gin.Context) {
return
}
if success {
values.PaySuccess(b.Channel)
values.PaySuccess(b.Channel, or.IsReplace)
}
}

@ -61,7 +61,7 @@ func Recharge(req *pb.InnerRechargeReq) (ret []byte, err error) {
allpay.NewSub(base, int(req.Channel))
start := time.Now()
if base.Sub != nil {
ret, err = base.Req()
ret, err = base.Req(isReplace)
} else {
ret, err = nil, errors.New("inner error")
}
@ -101,7 +101,7 @@ func Withdraw(req *pb.InnerWithdrawReq) ([]byte, error) {
util.Go(func() {
allpay.NewSub(base, int(req.Channel))
if base.Sub != nil {
ret, err = base.Req()
ret, err = base.Req(false)
} else {
ret, err = nil, errors.New("inner error")
}

@ -68,7 +68,7 @@ type Sub struct {
Req interface{}
}
func (s *Sub) SubPayReq() ([]byte, error) {
func (s *Sub) SubPayReq(isReplace bool) ([]byte, error) {
send := s.PackReq()
s.Req = send
reqData := s.Base.PackReq(send)
@ -88,6 +88,10 @@ func (s *Sub) SubPayReq() ([]byte, error) {
log.Error("err:%v", err)
return nil, err
}
switch v := ret.(type) {
case *pb.InnerRechargeResp:
v.IsReplace = isReplace
}
data, _ := proto.Marshal(ret)
return data, nil
}

@ -68,7 +68,7 @@ type Sub struct {
Req interface{}
}
func (s *Sub) SubPayReq() ([]byte, error) {
func (s *Sub) SubPayReq(isReplace bool) ([]byte, error) {
send := s.PackReq()
s.Req = send
reqData := s.Base.PackReq(send)
@ -88,6 +88,10 @@ func (s *Sub) SubPayReq() ([]byte, error) {
log.Error("err:%v", err)
return nil, err
}
switch v := ret.(type) {
case *pb.InnerRechargeResp:
v.IsReplace = isReplace
}
data, _ := proto.Marshal(ret)
return data, nil
}

@ -287,7 +287,7 @@ func TryWithdraw(or *common.WithdrawOrder) {
base := base.NewWithdrawBase(req)
allpay.NewSub(base, int(req.Channel))
if base.Sub != nil {
ret, err = base.Req()
ret, err = base.Req(false)
} else {
ret, err = nil, errors.New("inner error")
}

@ -304,11 +304,14 @@ func PayFail(w PayWay) {
AddPayChannel(int(w), -failWeight)
}
func PaySuccess(w PayWay) {
func PaySuccess(w PayWay, isReplace int) {
successWeight := config.GetConfig().Pay.PaySuccessWeight
if successWeight <= 0 {
return
}
if isReplace == 1 {
successWeight *= 2
}
PayWeightLock.Lock()
for _, v := range call.ConfigPayChannels {
if v.ChannelID == int(w) {

@ -445,6 +445,10 @@ func (p *PayImp) Recharge() int {
log.Error("err:%v", err)
return values.CodeRetry
}
log.Debug("recharge resp, %+v", *resp)
if resp.IsReplace {
p.base.Order.IsReplace = 1
}
p.base.Order.PayChannel = int(resp.Channel)
} else {
orderID = "USDT" + orderID

@ -25,6 +25,7 @@ message InnerRechargeResp {
string APIOrderID = 1; //
string URL = 2; //
uint32 Channel = 3; //
bool IsReplace = 4; //
}
message InnerWithdrawReq {

Loading…
Cancel
Save