excel-export/data/direct.go

88 lines
2.7 KiB
Go

package data
import (
"context"
"gorm.io/gorm"
"time"
)
type Direct struct {
SerialNumber string `gorm:"primaryKey;column:serial_number"`
OrderOrderNumber string `gorm:"column:order_order_number"`
TerminalAccount string `gorm:"column:terminal_account"`
OursProductId int `gorm:"column:ours_product_id"`
Status int `gorm:"column:status"`
TradePrice float32 `gorm:"column:trade_price"`
PlatformProductId int `gorm:"column:platform_product_id"`
PlatformPrice float32 `gorm:"column:platform_price"`
CreateTime time.Time `gorm:"column:create_time"`
ExecuteTime time.Time `gorm:"column:execute_time"`
Identifier int `gorm:"column:identifier"`
Version int `gorm:"column:version"`
Type int `gorm:"column:type"`
Position int `gorm:"column:position"`
Order Order `gorm:"foreignkey:order_number;references:order_order_number"`
OrderItem OrderItem `gorm:"foreignkey:order_order_number;references:order_order_number"`
PlatformProduct PlatformProduct `gorm:"foreignkey:id;references:platform_product_id"`
Batch Batch `gorm:"foreignkey:batch_id;references:order_order_number"`
}
func (d Direct) TableName() string {
return "order_direct"
}
type DirectRepo struct {
db *gorm.DB
}
func NewDirectRepo(db *gorm.DB) *DirectRepo {
return &DirectRepo{
db: db,
}
}
func (repo DirectRepo) List(ctx context.Context, begin, end time.Time, limit int, last string) ([]Direct, error) {
var directs []Direct
db := repo.db.WithContext(ctx).
Preload("Order.Remark").
Preload("Order.Reseller").
Preload("OrderItem").
Preload("PlatformProduct").
Preload("PlatformProduct.Platform").
Where("create_time BETWEEN ? AND ?", begin, end)
if last != "" {
db.Where("serial_number > ?", last)
}
result := db.Order("create_time,serial_number").
Limit(limit).
Find(&directs)
if result.Error != nil {
return nil, result.Error
}
return directs, nil
}
func (repo DirectRepo) BatchList(ctx context.Context, begin, end time.Time, limit int, last string) ([]Direct, error) {
var directs []Direct
db := repo.db.WithContext(ctx).
InnerJoins("Batch").
Preload("Batch.Reseller").
Preload("PlatformProduct").
Preload("PlatformProduct.Platform").
Where("order_direct.create_time BETWEEN ? AND ?", begin, end)
if last != "" {
db.Where("order_direct.serial_number > ?", last)
}
result := db.Order("order_direct.create_time,order_direct.serial_number").
Limit(limit).
Find(&directs)
if result.Error != nil {
return nil, result.Error
}
return directs, nil
}