package admin import ( "quyun/app/models" "quyun/app/requests" "quyun/database/fields" "quyun/providers/wepay" "github.com/gofiber/fiber/v3" ) type OrderListQuery struct { OrderNumber *string `query:"order_number"` UserID *int64 `query:"user_id"` } // @provider type orders struct { wepay *wepay.Client } // List users // // @Router /admin/orders [get] // @Bind pagination query // @Bind query query func (ctl *orders) List(ctx fiber.Ctx, pagination *requests.Pagination, query *OrderListQuery) (*requests.Pager, error) { cond := models.Orders.BuildConditionWithKey(query.OrderNumber, query.UserID) return models.Orders.List(ctx.Context(), pagination, cond) } // Refund // @Router /admin/orders/{id}/refund [post] // @Bind id path func (ctl *orders) Refund(ctx fiber.Ctx, id int64) error { order, err := models.Orders.GetByID(ctx.Context(), id) if err != nil { return err } post, err := models.Posts.GetByID(ctx.Context(), order.PostID) if err != nil { return err } refundTotal := order.Price * int64(order.Discount) / 100 resp, err := ctl.wepay.Refund(ctx.Context(), func(bm *wepay.BodyMap) { bm. OutRefundNo(order.OrderNo). OutTradeNo(order.OrderNo). TransactionID(order.TransactionID). CNYRefundAmount(refundTotal, refundTotal). RefundReason("管理员退款"). RefundGoodsInfo(post.Title) }) if err != nil { return err } meta := order.Meta.Data meta.RefundResp = resp order.Meta = fields.ToJson(meta) order.RefundTransactionID = resp.RefundId if err := models.Orders.Update(ctx.Context(), order); err != nil { return err } return nil }