151 lines
3.8 KiB
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,
|
|
}
|
|
}
|