91 lines
1.9 KiB
Go
91 lines
1.9 KiB
Go
package biz
|
|
|
|
import (
|
|
"context"
|
|
"excel_export/data"
|
|
"excel_export/export"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func NewCardBiz(repo *data.CardRepo, opts *ExportOpts) *CardBiz {
|
|
biz := &CardBiz{
|
|
repo: repo,
|
|
}
|
|
|
|
if opts == nil {
|
|
opts = DefaultOpts
|
|
}
|
|
opts.Tag = "card"
|
|
biz.opts = opts
|
|
return biz
|
|
}
|
|
|
|
type CardBiz struct {
|
|
repo *data.CardRepo
|
|
baseExportBiz
|
|
}
|
|
|
|
func (e *CardBiz) Export(begin, end time.Time) error {
|
|
e.setFileArg(begin)
|
|
file := export.NewExport(e.fileName, e.opts.ExcelMaxRow)
|
|
|
|
if err := file.Open(); err != nil {
|
|
return err
|
|
}
|
|
if err := file.Title(export.Cards{}.Title()); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := e.exportData(file, begin, end); err != nil {
|
|
return err
|
|
}
|
|
|
|
e.fileSize = file.Index()
|
|
return nil
|
|
}
|
|
|
|
func (e *CardBiz) exportData(export *export.Export, begin, end time.Time) error {
|
|
var last string
|
|
for true {
|
|
//导出最近7天数据
|
|
data, err := e.repo.List(context.Background(), begin, end, e.opts.QueryLimit, last)
|
|
if err != nil {
|
|
return fmt.Errorf("获取导出数据错误:%w", err)
|
|
}
|
|
|
|
if err := export.Export(e.Transforms(data)); err != nil {
|
|
return err
|
|
}
|
|
if len(data) < e.opts.QueryLimit {
|
|
return nil
|
|
}
|
|
last = data[len(data)-1].OrderNumber
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (e CardBiz) Transforms(data []data.Card) export.Cards {
|
|
result := make(export.Cards, len(data))
|
|
for i, val := range data {
|
|
result[i] = e.Transform(val)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (e CardBiz) Transform(data data.Card) *export.Card {
|
|
return &export.Card{
|
|
OrderNumber: data.OrderNumber,
|
|
ResellerOrderNumber: data.ResellerOrderNumber,
|
|
Amount: data.Amount,
|
|
Quantity: data.Quantity,
|
|
Status: data.Status,
|
|
ResellerId: data.ResellerId,
|
|
ResellerName: data.Reseller.Name,
|
|
OursProductId: data.OursProductId,
|
|
OursProductTitle: data.OurProduct.Name,
|
|
CreateTime: time.Unix(data.CreateTime, 0).Format("2006-01-02 15:04:05"),
|
|
}
|
|
}
|