excel-export/biz/card.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"),
}
}