146 lines
6.0 KiB
Go
146 lines
6.0 KiB
Go
|
|
package model
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"time"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 订单状态常量
|
|||
|
|
const (
|
|||
|
|
OrderStatusPending = 1 // 未付款
|
|||
|
|
OrderStatusPaid = 2 // 已付款
|
|||
|
|
OrderStatusPreparing = 3 // 待发货
|
|||
|
|
OrderStatusShipped = 4 // 已发货
|
|||
|
|
OrderStatusReceiving = 5 // 待收货
|
|||
|
|
OrderStatusCompleted = 6 // 已完成
|
|||
|
|
OrderStatusCancelled = 7 // 已取消
|
|||
|
|
OrderStatusReturning = 8 // 退货中
|
|||
|
|
OrderStatusRefunded = 9 // 已退款
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// Cart 购物车
|
|||
|
|
type Cart struct {
|
|||
|
|
ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
|
|||
|
|
UserID uint `json:"user_id" gorm:"not null"`
|
|||
|
|
ProductID uint `json:"product_id" gorm:"not null"`
|
|||
|
|
SKUID *uint `json:"sku_id" gorm:"column:sk_uid"`
|
|||
|
|
Quantity int `json:"quantity" gorm:"not null"`
|
|||
|
|
Selected bool `json:"selected" gorm:"default:true"`
|
|||
|
|
CreatedAt time.Time `json:"created_at"`
|
|||
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|||
|
|
|
|||
|
|
// 关联数据
|
|||
|
|
User User `json:"user,omitempty" gorm:"foreignKey:UserID"`
|
|||
|
|
Product Product `json:"product,omitempty" gorm:"foreignKey:ProductID"`
|
|||
|
|
SKU ProductSKU `json:"sku,omitempty" gorm:"foreignKey:SKUID"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Order 订单
|
|||
|
|
type Order struct {
|
|||
|
|
ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
|
|||
|
|
OrderNo string `json:"order_no" gorm:"size:32;not null;uniqueIndex"`
|
|||
|
|
UserID uint `json:"user_id" gorm:"not null"`
|
|||
|
|
StoreID uint `json:"store_id" gorm:"default:1"`
|
|||
|
|
TotalAmount float64 `json:"total_amount" gorm:"type:decimal(10,2);not null"`
|
|||
|
|
PayAmount float64 `json:"pay_amount" gorm:"type:decimal(10,2);not null"`
|
|||
|
|
DiscountAmount float64 `json:"discount_amount" gorm:"type:decimal(10,2);default:0.00"`
|
|||
|
|
ShippingFee float64 `json:"shipping_fee" gorm:"type:decimal(10,2);default:0.00"`
|
|||
|
|
CouponID *uint `json:"coupon_id"`
|
|||
|
|
CouponAmount float64 `json:"coupon_amount" gorm:"type:decimal(10,2);default:0.00"`
|
|||
|
|
PointsAmount float64 `json:"points_amount" gorm:"type:decimal(10,2);default:0.00"`
|
|||
|
|
Status int `json:"status" gorm:"default:1"` // 统一状态:1未付款,2已付款,3待发货,4已发货,5待收货,6已完成,7已取消,8退货中,9已退款
|
|||
|
|
PayStatus int `json:"pay_status" gorm:"default:0"` // 兼容字段,建议使用Status统一管理
|
|||
|
|
PayMethod string `json:"pay_method" gorm:"size:20"`
|
|||
|
|
WechatOutTradeNo string `json:"wechat_out_trade_no" gorm:"size:64;index"` // 微信支付商户订单号,每次支付请求唯一
|
|||
|
|
WechatTransactionID string `json:"wechat_transaction_id" gorm:"size:64;index"` // 微信支付交易号,支付成功后由微信返回
|
|||
|
|
PayTime *time.Time `json:"pay_time"`
|
|||
|
|
ShippedAt *time.Time `json:"shipped_at" gorm:"column:shipped_at"`
|
|||
|
|
ReceiveTime *time.Time `json:"receive_time"`
|
|||
|
|
CancelTime *time.Time `json:"cancel_time"`
|
|||
|
|
CancelReason string `json:"cancel_reason" gorm:"size:255"`
|
|||
|
|
RefundAmount float64 `json:"refund_amount" gorm:"type:decimal(10,2);default:0.00"`
|
|||
|
|
RefundReason string `json:"refund_reason" gorm:"size:255"`
|
|||
|
|
RefundTime *time.Time `json:"refund_time"`
|
|||
|
|
RefundedAt *time.Time `json:"refunded_at"`
|
|||
|
|
ReceiverName string `json:"receiver_name" gorm:"size:50;not null"`
|
|||
|
|
ReceiverPhone string `json:"receiver_phone" gorm:"size:20;not null"`
|
|||
|
|
ReceiverAddress string `json:"receiver_address" gorm:"size:255;not null"`
|
|||
|
|
LogisticsCompany string `json:"logistics_company" gorm:"column:logistics_company;size:50"`
|
|||
|
|
LogisticsNo string `json:"logistics_no" gorm:"column:logistics_no;size:100"`
|
|||
|
|
Remark string `json:"remark" gorm:"size:255"`
|
|||
|
|
CreatedAt time.Time `json:"created_at"`
|
|||
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|||
|
|
|
|||
|
|
// 关联数据
|
|||
|
|
User User `json:"user,omitempty" gorm:"foreignKey:UserID"`
|
|||
|
|
Store Store `json:"store,omitempty" gorm:"foreignKey:StoreID"`
|
|||
|
|
Coupon Coupon `json:"coupon,omitempty" gorm:"foreignKey:CouponID"`
|
|||
|
|
OrderItems []OrderItem `json:"order_items,omitempty" gorm:"foreignKey:OrderID"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// OrderItem 订单项
|
|||
|
|
type OrderItem struct {
|
|||
|
|
ID uint `json:"id" gorm:"primaryKey;autoIncrement"`
|
|||
|
|
OrderID uint `json:"order_id" gorm:"not null"`
|
|||
|
|
ProductID uint `json:"product_id" gorm:"not null"`
|
|||
|
|
SpecID *uint `json:"spec_id" gorm:"column:spec_id"`
|
|||
|
|
SKUID *uint `json:"sku_id" gorm:"column:sk_uid"`
|
|||
|
|
Quantity int `json:"quantity" gorm:"not null"`
|
|||
|
|
Price float64 `json:"price" gorm:"type:decimal(10,2);not null"`
|
|||
|
|
TotalPrice float64 `json:"total_price" gorm:"type:decimal(10,2);not null"`
|
|||
|
|
ProductName string `json:"product_name" gorm:"size:100;not null"`
|
|||
|
|
ProductImage string `json:"product_image" gorm:"size:255"`
|
|||
|
|
SpecName string `json:"spec_name" gorm:"column:spec_name"`
|
|||
|
|
SpecValue string `json:"spec_value" gorm:"column:spec_value"`
|
|||
|
|
SpecInfo JSONMap `json:"spec_info" gorm:"type:json"`
|
|||
|
|
IsCommented bool `json:"is_commented" gorm:"default:false"`
|
|||
|
|
CreatedAt time.Time `json:"created_at"`
|
|||
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|||
|
|
|
|||
|
|
// 关联
|
|||
|
|
Order Order `json:"order,omitempty" gorm:"foreignKey:OrderID"`
|
|||
|
|
Product Product `json:"product,omitempty" gorm:"foreignKey:ProductID"`
|
|||
|
|
SKU ProductSKU `json:"sku,omitempty" gorm:"foreignKey:SKUID"`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// TableName 指定表名
|
|||
|
|
func (Cart) TableName() string {
|
|||
|
|
return "ai_carts"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TableName 指定表名
|
|||
|
|
func (Order) TableName() string {
|
|||
|
|
return "ai_orders"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// TableName 指定表名
|
|||
|
|
func (OrderItem) TableName() string {
|
|||
|
|
return "order_items"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// GetStatusText 获取订单状态文本
|
|||
|
|
func (o *Order) GetStatusText() string {
|
|||
|
|
switch o.Status {
|
|||
|
|
case OrderStatusPending:
|
|||
|
|
return "未付款"
|
|||
|
|
case OrderStatusPaid:
|
|||
|
|
return "已付款"
|
|||
|
|
case OrderStatusPreparing:
|
|||
|
|
return "待发货"
|
|||
|
|
case OrderStatusShipped:
|
|||
|
|
return "已发货"
|
|||
|
|
case OrderStatusReceiving:
|
|||
|
|
return "待收货"
|
|||
|
|
case OrderStatusCompleted:
|
|||
|
|
return "已完成"
|
|||
|
|
case OrderStatusCancelled:
|
|||
|
|
return "已取消"
|
|||
|
|
case OrderStatusReturning:
|
|||
|
|
return "退货中"
|
|||
|
|
case OrderStatusRefunded:
|
|||
|
|
return "已退款"
|
|||
|
|
default:
|
|||
|
|
return "未知状态"
|
|||
|
|
}
|
|||
|
|
}
|