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, } }