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