Files
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

202 lines
6.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package withdrawctrl
import (
"91porn-server/app/service/withdrawser"
"91porn-server/common"
"91porn-server/common/log"
"91porn-server/common/stderr"
"91porn-server/models/commod"
"91porn-server/models/v/txnactmod"
"91porn-server/models/v/usermod"
"91porn-server/models/v/wdordmod"
"github.com/gin-gonic/gin"
)
// Withdraw doc
// @Summary 提现
// @Description 提现
// @Tags 钱包
// @Accept mpfd,json
// @Produce json,html
// @Param money formData int true "提现金额"
// @Param payType formData string true "提现方式(alipaybankcard)"
// @Param withdrawType formData int true "提现类型(0代理提现/1金币提现)"
// @Param actName formData string true "交易账户持有人"
// @Param act formData string true "交易账户"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /withdraw [post]
func Withdraw(ctx *gin.Context) {
uid, err := common.GetUID(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.ErrNoToken, err.Error())
return
}
p := wdordmod.WithdrawReq{}
if err = ctx.ShouldBind(&p); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, err.Error())
return
}
//类型校验
if p.PayType != wdordmod.TypeBankCard && p.PayType != wdordmod.TypeAlipay && p.PayType != wdordmod.TypeUsdt {
common.ServeJSON(ctx, stderr.ExchangeCodeInvalid, err.Error())
return
}
w := wdordmod.WithdrawOrder{
UID: uid,
UserIP: common.GetIP(ctx),
Money: p.Money,
PayType: p.PayType,
ActName: p.ActName,
Act: p.Act,
ProductType: p.ProductType,
}
if p.PayType == wdordmod.TypeBankCard {
user, err := usermod.FindUserByUID(uid)
if err != nil {
common.ServeJSON(ctx, stderr.ErrNetWorkBusy, err)
return
}
if user.BankActName != "" && user.BankActName != p.ActName {
common.ServeJSON(ctx, stderr.DifferentBankActName, err)
return
}
typeAct := txnactmod.Bank
act, err := txnactmod.FindOne(txnactmod.Query{
Act: &(p.Act),
AType: &typeAct,
})
if err != nil {
log.Error("txnactmod.FindOne", log.Any("req", p), log.E(err))
common.ServeJSON(ctx, stderr.ErrNetWorkBusy, err)
return
}
if act.ID.IsZero() {
log.Warn("zero act id", log.Any("req", p), log.Any("act", act))
common.ServeJSON(ctx, stderr.ErrNetWorkBusy, "")
return
}
w.BankCode = act.BankCode
}
if p.Name != nil {
w.Name = *p.Name
}
if p.DevID != nil {
w.DevID = *p.DevID
}
if p.WithdrawType != nil {
w.WithdrawType = *p.WithdrawType
} else {
w.WithdrawType = 1
}
if err = withdrawser.WithDraw(&w); err != nil {
switch err.Error() {
case "Insufficient balance":
log.Error("WithDraw Insufficient balance", log.Any("error==>", err.Error()))
common.ServeJSON(ctx, stderr.InsufficientBalance, err.Error())
return
case "PayType Insufficient balance":
log.Error("WithDraw PayType Insufficient balance", log.Any("error==>", err.Error()))
common.ServeJSON(ctx, stderr.InsufficientBalance, err.Error())
return
case "illegal withdraw amount":
log.Error("Withdraw illegal withdraw amount", log.Any("order", w), log.E(err))
common.ServeJSON(ctx, stderr.WithDrawIllegalAmount, err.Error())
return
default:
common.ServeJSON(ctx, stderr.ErrDbQueryError, err.Error())
return
}
}
common.ServeJSON(ctx, stderr.Success, nil)
}
// WithdrawOrder doc
// @Summary 查看提现订单
// @Description 查看提现订单
// @Tags 钱包
// @Accept mpfd,json
// @Produce json,html
// @Param pageNumber formData int true "页码"
// @Param pageSize formData int true "条数"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /withdraw/order [get]
func WithdrawOrder(ctx *gin.Context) {
uid, err := common.GetUID(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.ErrNoToken, err.Error())
return
}
var arg struct {
commod.Page
}
if err = ctx.ShouldBind(&arg); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, err.Error())
return
}
total, data, hasNext, err := wdordmod.FindOrdersByUID(uid, arg.PageNumber, arg.PageSize)
if err != nil {
common.ServeJSON(ctx, stderr.ErrServerUnavailable, err.Error())
return
}
common.ServeJSON(ctx, stderr.Success, map[string]interface{}{
"total": total,
"result": data,
"list": data,
"hasNext": hasNext,
})
}
// GetType doc
// @Summary 提现方式获取
// @Description
// @Tags 钱包
// @Accept mpfd,json
// @Produce json,html
// @Param payType formData string true "提现方式(银行卡/支付宝)"
// @Param pageSize formData int true "条数"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /app/withdraw/type [get]
func GetType(ctx *gin.Context) {
uid, err := common.GetUID(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.ErrNoToken, err.Error())
return
}
var arg struct {
Type string `json:"payType" form:"payType"`
}
if err := ctx.ShouldBind(&arg); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, err.Error())
return
}
u, err := usermod.FindUserByUID(uid)
if err != nil || u == nil {
common.ServeJSON(ctx, stderr.ErrParamError, err.Error())
return
}
data, err := withdrawser.WithdrawType(u.SnapVip, arg.Type)
if err != nil {
common.ServeJSON(ctx, stderr.ErrServerUnavailable, err.Error())
return
}
common.ServeJSON(ctx, stderr.Success, data)
}
// GetWithdrawCfg doc
// @Summary 提现配置获取
// @Description
// @Tags 钱包
// @Accept mpfd,json
// @Produce json,html
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /withdraw/cfg [get]
func GetWithdrawCfg(ctx *gin.Context) {
data := withdrawser.GetWithdrawCfg()
common.ServeJSON(ctx, stderr.Success, data)
}