package biz import ( "context" "excel_export/data" "excel_export/export" "fmt" "time" ) func NewCardBiz(repo *data.CardRepo, opts *ExportOpts) *CardBiz { biz := &CardBiz{ repo: repo, } if opts == nil { opts = DefaultOpts } opts.Tag = "card" biz.opts = opts return biz } type CardBiz struct { repo *data.CardRepo baseExportBiz } func (e *CardBiz) 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.Cards{}.Title()); err != nil { return err } if err := e.exportData(file, begin, end); err != nil { return err } e.fileSize = file.Index() return nil } func (e *CardBiz) 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 CardBiz) Transforms(data []data.Card) export.Cards { result := make(export.Cards, len(data)) for i, val := range data { result[i] = e.Transform(val) } return result } func (e CardBiz) Transform(data data.Card) *export.Card { return &export.Card{ OrderNumber: data.OrderNumber, ResellerOrderNumber: data.ResellerOrderNumber, Amount: data.Amount, Quantity: data.Quantity, Status: data.Status, ResellerId: data.ResellerId, ResellerName: data.Reseller.Name, OursProductId: data.OursProductId, OursProductTitle: data.OurProduct.Name, CreateTime: time.Unix(data.CreateTime, 0).Format("2006-01-02 15:04:05"), } }