package data import ( "context" "gorm.io/gorm" "time" ) type Reseller struct { Id int64 `gorm:"primaryKey;column:id"` Name string } func (o Reseller) TableName() string { return "reseller" } type OrderItem struct { OrderNumber string `gorm:"primaryKey;column:order_order_number"` OursProductId int OursProductTitle string } func (o OrderItem) TableName() string { return "order_item" } type OrderRemark struct { OrderNumber string `gorm:"primaryKey;column:order_number"` Remark string } func (o OrderRemark) TableName() string { return "order_remark" } type Order struct { OrderNumber string `gorm:"primaryKey;column:order_number"` ResellerId int64 ResellerOrderNumber string Amount float32 Account string Quantity int Status int PayStatus int CreateTime int64 FinishTime int64 Item OrderItem `gorm:"foreignkey:order_order_number;references:order_number"` Remark OrderRemark `gorm:"foreignkey:order_number;references:order_number"` Reseller Reseller `gorm:"foreignkey:id;references:reseller_id"` } func (o Order) TableName() string { return "order" } type OrderRepo struct { db *gorm.DB } func NewOrderRepo(db *gorm.DB) *OrderRepo { return &OrderRepo{ db: db, } } func (repo OrderRepo) List(ctx context.Context, begin, end time.Time, limit int, last string) ([]Order, error) { var orders []Order db := repo.db.WithContext(ctx).Debug(). Preload("Reseller"). Preload("Item"). Preload("Remark"). Where("create_time BETWEEN ? AND ?", begin.Unix(), end.Unix()) if last != "" { db.Where("order_number > ?", last) } result := db.Order("create_time,order_number"). Limit(limit). Find(&orders) if result.Error != nil { return nil, result.Error } return orders, nil }