excel-export/biz/batch.go

154 lines
4.1 KiB
Go

package biz
import (
"context"
"excel_export/data"
"excel_export/export"
"fmt"
"time"
)
func NewBatchBiz(repo *data.DirectRepo, historyRepo *data.HistoryDirectRepo, opts *ExportOpts) *BatchBiz {
biz := &BatchBiz{
repo: repo,
historyRepo: historyRepo,
}
biz.opts = DefaultOpts
if opts != nil {
biz.opts = opts
}
biz.opts.Tag = "batch"
return biz
}
type BatchBiz struct {
repo *data.DirectRepo
historyRepo *data.HistoryDirectRepo
baseExportBiz
}
func (e *BatchBiz) 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.Batchs{}.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 *BatchBiz) exportHistoryData(export *export.Export, begin, end time.Time) error {
var last string
for true {
//导出最近7天数据
data, err := e.historyRepo.BatchList(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].SerialNumber
}
return nil
}
func (e *BatchBiz) exportData(export *export.Export, begin, end time.Time) error {
var last string
for true {
//导出最近7天数据
data, err := e.repo.BatchList(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].SerialNumber
}
return nil
}
func (e BatchBiz) Transforms(data []data.Direct) export.Batchs {
result := make(export.Batchs, len(data))
for i, val := range data {
result[i] = e.Transform(val)
}
return result
}
func (e BatchBiz) Transform(data data.Direct) *export.Batch {
return &export.Batch{
ResellerId: data.Batch.ResellerId,
ResellerName: data.Batch.Reseller.Name,
OursProductId: data.OursProductId,
OursProductTitle: data.OrderItem.OursProductTitle,
PlatformName: data.PlatformProduct.Platform.Name,
PlatformProductCode: data.PlatformProduct.Code,
PlatformProductName: data.PlatformProduct.Name,
Status: data.Status,
OrderOrderNumber: data.OrderOrderNumber,
SerialNumber: data.SerialNumber,
TerminalAccount: data.TerminalAccount,
TradePrice: data.TradePrice,
PlatformPrice: data.PlatformPrice,
CreateTime: data.CreateTime.Format("2006-01-02 15:04:05"),
ExecuteTime: data.ExecuteTime.Format("2006-01-02 15:04:05"),
Remark: data.Batch.Remark,
}
}
func (e BatchBiz) HistoryTransforms(data []data.HistoryDirect) export.Batchs {
result := make(export.Batchs, len(data))
for i, val := range data {
result[i] = e.HistoryTransform(val)
}
return result
}
func (e BatchBiz) HistoryTransform(data data.HistoryDirect) *export.Batch {
return &export.Batch{
ResellerId: data.Batch.ResellerId,
ResellerName: data.Batch.Reseller.Name,
OursProductId: data.OursProductId,
OursProductTitle: data.OrderItem.OursProductTitle,
PlatformName: data.PlatformProduct.Platform.Name,
PlatformProductCode: data.PlatformProduct.Code,
PlatformProductName: data.PlatformProduct.Name,
Status: data.Status,
OrderOrderNumber: data.OrderOrderNumber,
SerialNumber: data.SerialNumber,
TerminalAccount: data.TerminalAccount,
TradePrice: data.TradePrice,
PlatformPrice: data.PlatformPrice,
CreateTime: data.CreateTime.Format("2006-01-02 15:04:05"),
ExecuteTime: data.ExecuteTime.Format("2006-01-02 15:04:05"),
Remark: data.Batch.Remark,
}
}