You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
1.3 KiB
Go

package csv
import (
"joybuywork/internal/plugins/export"
)
const (
FlushNum = 200 // csv写入多少行后从缓冲区写入文件
)
type Task struct {
export.BaseTask
*Export
}
// UpgradeTask csv导出升级成任务模式
func (e *Export) UpgradeTask(opts ...export.TaskOption) (*Task, error) {
task := &Task{
Export: e,
}
//初始化任务
task.Init(e.Ctx, task, opts...)
//初始化任务文件
err := task.initFile()
if err != nil {
return nil, err
}
return task, nil
}
// 写入csv表格
func (t *Task) writeRow(v []string) error {
//写入文件
t.FrAdd()
//不能写入当前行数据
if !t.CanWriteRow() {
return nil
}
err := t.w.Write(v)
if err != nil {
return err
}
if t.GetFr()%FlushNum == 0 || t.GetFr() >= t.GetTotal() { // 到达缓冲区最大实现条数或者写入了最后一条
t.w.Flush()
}
//看看任务有没有完成
t.CheckFinish()
return nil
}
// WriteData 写入数据
func (t *Task) WriteData(data []export.RowData) (err error) {
list := t.getList(data)
for _, v := range list {
err = t.writeRow(v)
if err != nil {
return
}
}
return
}
// FileClose 关闭资源
func (t *Task) FileClose() {
_ = t.file.Close()
}
// GetTotal 获取导出总条数
func (t *Task) GetTotal() int64 {
return t.Total
}