excel-export/biz/order.go

151 lines
3.8 KiB
Go

package biz
import (
"context"
"excel_export/data"
"excel_export/export"
"fmt"
"time"
)
func NewOrderBiz(repo *data.OrderRepo, historyRepo *data.HistoryOrderRepo, opts *ExportOpts) *OrderBiz {
biz := &OrderBiz{
repo: repo,
historyRepo: historyRepo,
}
biz.opts = DefaultOpts
if opts != nil {
biz.opts = opts
}
return biz
}
type OrderBiz struct {
repo *data.OrderRepo
historyRepo *data.HistoryOrderRepo
baseExportBiz
}
func (e *OrderBiz) 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.Orders{}.Title()); err != nil {
return err
}
//导出历史订单数据
if err := e.exportHistoryData(file, begin, end); err != nil {
return err
}
//导出最近7天数据
if err := e.exportData(file, begin, end); err != nil {
return err
}
e.fileSize = file.Index()
return nil
}
func (e *OrderBiz) exportHistoryData(export *export.Export, begin, end time.Time) error {
var last string
for true {
//导出最近7天数据
data, err := e.historyRepo.List(context.Background(), begin, end, e.opts.QueryLimit, last)
if err != nil {
return fmt.Errorf("获取导出数据错误:%w", err)
}
if err := export.Export(e.HistoryTransforms(data)); err != nil {
return err
}
if len(data) < e.opts.QueryLimit {
return nil
}
last = data[len(data)-1].OrderNumber
}
return nil
}
func (e *OrderBiz) 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 OrderBiz) Transforms(data []data.Order) export.Orders {
result := make(export.Orders, len(data))
for i, val := range data {
result[i] = e.Transform(val)
}
return result
}
func (e OrderBiz) Transform(order data.Order) *export.Order {
return &export.Order{
OrderNumber: order.OrderNumber,
ResellerId: order.ResellerId,
ResellerName: order.Reseller.Name,
ResellerOrderNumber: order.ResellerOrderNumber,
Amount: order.Amount,
Account: order.Account,
Quantity: order.Quantity,
Status: order.Status,
PayStatus: order.PayStatus,
CreateTime: time.Unix(order.CreateTime, 0).Format("2006-01-02 15:04:05"),
FinishTime: time.Unix(order.FinishTime, 0).Format("2006-01-02 15:04:05"),
OursProductId: order.Item.OursProductId,
OursProductTitle: order.Item.OursProductTitle,
Remark: order.Remark.Remark,
}
}
func (e OrderBiz) HistoryTransforms(data []data.HistoryOrder) export.Orders {
result := make(export.Orders, len(data))
for i, val := range data {
result[i] = e.HistoryTransform(val)
}
return result
}
func (e OrderBiz) HistoryTransform(order data.HistoryOrder) *export.Order {
return &export.Order{
OrderNumber: order.OrderNumber,
ResellerId: order.ResellerId,
ResellerName: order.Reseller.Name,
ResellerOrderNumber: order.ResellerOrderNumber,
Amount: order.Amount,
Account: order.Account,
Quantity: order.Quantity,
Status: order.Status,
PayStatus: order.PayStatus,
CreateTime: order.CreateTime.Format("2006-01-02 15:04:05"),
FinishTime: order.FinishTime.Format("2006-01-02 15:04:05"),
OursProductId: order.Item.OursProductId,
OursProductTitle: order.Item.OursProductTitle,
Remark: order.Remark.Remark,
}
}