Files
quyun-v2/backend/app/http/tenant/dto/order_admin.go

88 lines
3.7 KiB
Go
Raw 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 dto
import (
"strings"
"time"
"quyun/v2/app/requests"
"quyun/v2/database/models"
"quyun/v2/pkg/consts"
)
// AdminOrderListFilter 租户管理员分页查询订单的过滤条件。
type AdminOrderListFilter struct {
// Pagination 分页参数page/limit通用
requests.Pagination `json:",inline" query:",inline"`
// UserID 下单用户ID可选按买家用户ID精确过滤。
UserID *int64 `json:"user_id,omitempty" query:"user_id"`
// Username 下单用户用户名关键字(可选):模糊匹配 users.usernamelike
Username *string `json:"username,omitempty" query:"username"`
// ContentID 内容ID可选通过 order_items 关联过滤。
ContentID *int64 `json:"content_id,omitempty" query:"content_id"`
// ContentTitle 内容标题关键字(可选):通过 order_items + contents 关联,模糊匹配 contents.titlelike
ContentTitle *string `json:"content_title,omitempty" query:"content_title"`
// Type 订单类型可选content_purchase/topup 等。
Type *consts.OrderType `json:"type,omitempty" query:"type"`
// Status 订单状态可选created/paid/refunding/refunded/canceled/failed。
Status *consts.OrderStatus `json:"status,omitempty" query:"status"`
// CreatedAtFrom 创建时间起可选created_at >= 该时间(用于按创建时间筛选)。
CreatedAtFrom *time.Time `json:"created_at_from,omitempty" query:"created_at_from"`
// CreatedAtTo 创建时间止可选created_at <= 该时间(用于按创建时间筛选)。
CreatedAtTo *time.Time `json:"created_at_to,omitempty" query:"created_at_to"`
// PaidAtFrom 支付时间起可选paid_at >= 该时间(用于按支付时间筛选)。
PaidAtFrom *time.Time `json:"paid_at_from,omitempty" query:"paid_at_from"`
// PaidAtTo 支付时间止可选paid_at <= 该时间(用于按支付时间筛选)。
PaidAtTo *time.Time `json:"paid_at_to,omitempty" query:"paid_at_to"`
// AmountPaidMin 实付金额下限可选amount_paid >= 该值(单位分)。
AmountPaidMin *int64 `json:"amount_paid_min,omitempty" query:"amount_paid_min"`
// AmountPaidMax 实付金额上限可选amount_paid <= 该值(单位分)。
AmountPaidMax *int64 `json:"amount_paid_max,omitempty" query:"amount_paid_max"`
}
// UsernameTrimmed 对 username 做统一处理,避免空白与大小写差异导致查询不一致。
func (f *AdminOrderListFilter) UsernameTrimmed() string {
if f == nil || f.Username == nil {
return ""
}
return strings.TrimSpace(*f.Username)
}
// ContentTitleTrimmed 对 content_title 做统一处理,避免空白与大小写差异导致查询不一致。
func (f *AdminOrderListFilter) ContentTitleTrimmed() string {
if f == nil || f.ContentTitle == nil {
return ""
}
return strings.TrimSpace(*f.ContentTitle)
}
// AdminOrderRefundForm 租户管理员退款的请求参数。
type AdminOrderRefundForm struct {
// Force indicates bypassing the default refund window check (paid_at + 24h).
// 强制退款true 表示绕过默认退款时间窗限制(需审计)。
Force bool `json:"force,omitempty"`
// Reason is the human-readable refund reason used for audit.
// 退款原因:建议必填(由业务侧校验);用于审计与追责。
Reason string `json:"reason,omitempty"`
// IdempotencyKey ensures refund request is processed at most once.
// 幂等键:同一笔退款重复请求时返回一致结果,避免重复退款/重复回滚。
IdempotencyKey string `json:"idempotency_key,omitempty"`
}
// AdminOrderDetail 租户管理员订单详情返回结构。
type AdminOrderDetail struct {
// Order is the order with items preloaded.
Order *models.Order `json:"order,omitempty"`
}