package biz import ( "context" "excel_export/data" "excel_export/export" "fmt" "time" ) func NewOrderBiz(repo *data.OrderRepo, historyRepo *data.HistoryOrderRepo, opts *ExportOpts) *OrderBiz { biz := &OrderBiz{ repo: repo, historyRepo: historyRepo, } biz.opts = DefaultOpts if opts != nil { biz.opts = opts } return biz } type OrderBiz struct { repo *data.OrderRepo historyRepo *data.HistoryOrderRepo baseExportBiz } func (e *OrderBiz) 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.Orders{}.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 *OrderBiz) 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].OrderNumber } return nil } func (e *OrderBiz) 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 OrderBiz) Transforms(data []data.Order) export.Orders { result := make(export.Orders, len(data)) for i, val := range data { result[i] = e.Transform(val) } return result } func (e OrderBiz) Transform(order data.Order) *export.Order { return &export.Order{ OrderNumber: order.OrderNumber, ResellerId: order.ResellerId, ResellerName: order.Reseller.Name, ResellerOrderNumber: order.ResellerOrderNumber, Amount: order.Amount, Account: order.Account, Quantity: order.Quantity, Status: order.Status, PayStatus: order.PayStatus, CreateTime: time.Unix(order.CreateTime, 0).Format("2006-01-02 15:04:05"), FinishTime: time.Unix(order.FinishTime, 0).Format("2006-01-02 15:04:05"), OursProductId: order.Item.OursProductId, OursProductTitle: order.Item.OursProductTitle, Remark: order.Remark.Remark, } } func (e OrderBiz) HistoryTransforms(data []data.HistoryOrder) export.Orders { result := make(export.Orders, len(data)) for i, val := range data { result[i] = e.HistoryTransform(val) } return result } func (e OrderBiz) HistoryTransform(order data.HistoryOrder) *export.Order { return &export.Order{ OrderNumber: order.OrderNumber, ResellerId: order.ResellerId, ResellerName: order.Reseller.Name, ResellerOrderNumber: order.ResellerOrderNumber, Amount: order.Amount, Account: order.Account, Quantity: order.Quantity, Status: order.Status, PayStatus: order.PayStatus, CreateTime: order.CreateTime.Format("2006-01-02 15:04:05"), FinishTime: order.FinishTime.Format("2006-01-02 15:04:05"), OursProductId: order.Item.OursProductId, OursProductTitle: order.Item.OursProductTitle, Remark: order.Remark.Remark, } }