160 lines
4.3 KiB
Go
160 lines
4.3 KiB
Go
package biz
|
|
|
|
import (
|
|
"context"
|
|
"excel_export/data"
|
|
"excel_export/export"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func NewDirectBiz(repo *data.DirectRepo, historyRepo *data.HistoryDirectRepo, opts *ExportOpts) *DirectBiz {
|
|
biz := &DirectBiz{
|
|
repo: repo,
|
|
historyRepo: historyRepo,
|
|
}
|
|
if opts == nil {
|
|
opts = DefaultOpts
|
|
}
|
|
opts.Tag = "direct"
|
|
biz.opts = opts
|
|
return biz
|
|
}
|
|
|
|
type DirectBiz struct {
|
|
repo *data.DirectRepo
|
|
historyRepo *data.HistoryDirectRepo
|
|
baseExportBiz
|
|
}
|
|
|
|
func (e *DirectBiz) FileSize() int {
|
|
return e.fileSize
|
|
}
|
|
|
|
func (e *DirectBiz) 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.Directs{}.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 *DirectBiz) 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].SerialNumber
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (e *DirectBiz) 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].SerialNumber
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (e DirectBiz) Transforms(data []data.Direct) export.Directs {
|
|
result := make(export.Directs, len(data))
|
|
for i, val := range data {
|
|
result[i] = e.Transform(val)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (e DirectBiz) Transform(data data.Direct) *export.Direct {
|
|
return &export.Direct{
|
|
ResellerId: data.Order.ResellerId,
|
|
ResellerName: data.Order.Reseller.Name,
|
|
ResellerOrderNumber: data.Order.ResellerOrderNumber,
|
|
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.Order.Remark.Remark,
|
|
}
|
|
}
|
|
|
|
func (e DirectBiz) HistoryTransforms(data []data.HistoryDirect) export.Directs {
|
|
result := make(export.Directs, len(data))
|
|
for i, val := range data {
|
|
result[i] = e.HistoryTransform(val)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (e DirectBiz) HistoryTransform(data data.HistoryDirect) *export.Direct {
|
|
return &export.Direct{
|
|
ResellerId: data.Order.ResellerId,
|
|
ResellerName: data.Order.Reseller.Name,
|
|
ResellerOrderNumber: data.Order.ResellerOrderNumber,
|
|
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.Order.Remark.Remark,
|
|
}
|
|
}
|