完善套餐与账单接口 & 完善支付数据保存,记录实付价格并关联优惠券

This commit is contained in:
2026-03-26 14:39:19 +08:00
parent 5ffa151f58
commit 75ad12efb3
23 changed files with 706 additions and 613 deletions

View File

@@ -109,53 +109,38 @@ func TradeCreate(c *fiber.Ctx) error {
if err := g.Validator.ParseBody(c, req); err != nil {
return err
}
var product s.ProductInfo
switch req.Type {
case m.TradeTypePurchase:
if req.Resource == nil {
return core.NewBizErr("购买信息不能为空")
}
product, err = s.NewCreateResourceByTradeData(req.Resource)
if err != nil {
return core.NewServErr("处理购买产品信息失败", err)
}
case m.TradeTypeRecharge:
if req.Recharge == nil {
return core.NewBizErr("充值信息不能为空")
}
product = req.Recharge
}
// 创建交易
result, err := s.Trade.CreateTrade(authCtx.User.ID, time.Now(), &req.CreateTradeData, product)
// 处理订单
uid := authCtx.User.ID
result, err := s.Trade.Create(uid, req.CreateTradeData, req.Resource)
if err != nil {
slog.Error("创建交易失败", "error", err)
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "创建交易失败"})
return core.NewServErr("处理购买产品信息失败", err)
}
return c.JSON(&TradeCreateResp{
PayUrl: result.PaymentUrl,
TradeNo: result.TradeNo,
})
return c.JSON(result)
}
type TradeCreateReq struct {
s.CreateTradeData
Type m.TradeType `json:"type" validate:"required"`
Resource *s.CreateResourceData `json:"resource,omitempty"`
Recharge *s.RechargeProductInfo `json:"recharge,omitempty"`
}
type TradeCreateResp struct {
PayUrl string `json:"pay_url"`
TradeNo string `json:"trade_no"`
*s.CreateTradeData
Type m.TradeType `json:"type" validate:"required"`
Resource *s.CreateResourceData `json:"resource,omitempty"`
Recharge *s.UpdateBalanceData `json:"recharge,omitempty"`
}
// 完成订单
func TradeComplete(c *fiber.Ctx) error {
// 检查权限
_, err := auth.GetAuthCtx(c).PermitUser()
authCtx, err := auth.GetAuthCtx(c).PermitUser()
if err != nil {
return err
}
@@ -167,7 +152,7 @@ func TradeComplete(c *fiber.Ctx) error {
}
// 检查订单状态
err = s.Trade.CompleteTrade(&req.ModifyTradeData)
err = s.Trade.CompleteTrade(authCtx.User, &req.TradeRef)
if err != nil {
return err
}
@@ -176,7 +161,7 @@ func TradeComplete(c *fiber.Ctx) error {
}
type TradeCompleteReq struct {
s.ModifyTradeData
s.TradeRef
}
// 取消订单
@@ -194,7 +179,7 @@ func TradeCancel(c *fiber.Ctx) error {
}
// 取消交易
err = s.Trade.CancelTrade(&req.ModifyTradeData, time.Now())
err = s.Trade.CancelTrade(&req.TradeRef)
if err != nil {
slog.Error("取消交易失败", "trade_no", req.TradeNo, "error", err)
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "取消交易失败"})
@@ -204,7 +189,7 @@ func TradeCancel(c *fiber.Ctx) error {
}
type TradeCancelReq struct {
s.ModifyTradeData
s.TradeRef
}
// 检查订单
@@ -225,7 +210,7 @@ func TradeCheck(c *fiber.Ctx) error {
interval := 5
for range expire / interval {
// 检查订单状态
result, err := s.Trade.CheckTrade(&req.ModifyTradeData)
result, err := s.Trade.CheckTrade(&req.TradeRef)
if err != nil {
slog.Error("检查订单状态失败", "trade_no", req.TradeNo, "error", err)
return
@@ -256,5 +241,5 @@ func TradeCheck(c *fiber.Ctx) error {
}
type TradeCheckReq struct {
s.ModifyTradeData
s.TradeRef
}