78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
package pay
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"qnc-server/app/main/api/internal/svc"
|
|
"qnc-server/app/main/api/internal/types"
|
|
"qnc-server/common/xerr"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type PaymentCheckLogic struct {
|
|
logx.Logger
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
func NewPaymentCheckLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PaymentCheckLogic {
|
|
return &PaymentCheckLogic{
|
|
Logger: logx.WithContext(ctx),
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
}
|
|
}
|
|
|
|
func (l *PaymentCheckLogic) PaymentCheck(req *types.PaymentCheckReq) (resp *types.PaymentCheckResp, err error) {
|
|
// 根据订单号前缀判断订单类型
|
|
// 白名单下架订单:前缀 W_
|
|
if strings.HasPrefix(req.OrderNo, "W_") {
|
|
whitelistOrder, err := l.svcCtx.WhitelistOrderModel.FindOneByOrderNo(l.ctx, req.OrderNo)
|
|
if err != nil {
|
|
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询白名单订单失败: %v", err)
|
|
}
|
|
|
|
status := "pending"
|
|
switch whitelistOrder.Status {
|
|
case 1:
|
|
status = "pending"
|
|
case 2:
|
|
status = "paid"
|
|
case 3:
|
|
status = "closed"
|
|
default:
|
|
status = "pending"
|
|
}
|
|
|
|
return &types.PaymentCheckResp{
|
|
Type: "whitelist",
|
|
Status: status,
|
|
}, nil
|
|
}
|
|
|
|
// 升级订单:前缀 U_
|
|
if strings.HasPrefix(req.OrderNo, "U_") {
|
|
order, err := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, req.OrderNo)
|
|
if err != nil {
|
|
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询升级订单失败: %v", err)
|
|
}
|
|
return &types.PaymentCheckResp{
|
|
Type: "agent_upgrade",
|
|
Status: order.Status,
|
|
}, nil
|
|
}
|
|
|
|
// 其他视为常规查询订单(包括代理推广查询)
|
|
order, err := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, req.OrderNo)
|
|
if err != nil {
|
|
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询订单失败: %v", err)
|
|
}
|
|
return &types.PaymentCheckResp{
|
|
Type: "query",
|
|
Status: order.Status,
|
|
}, nil
|
|
}
|