// Package export 导出组件的封装,一般导出的话csv性能是360插件的xlsx的几十倍 // 但是xlsx可以更加丰富样式,所以没有样式的情况下,用csv性能更高 package export import ( "context" "fmt" "github.com/rs/xid" "os" ) type HeaderFieldOne struct { Field string //数据对应的字段名称 Title string //表头名称 } type HeaderField []HeaderFieldOne type Export interface { FileSuffix() string //文件后缀 ExportFile(data []RowData) error //导出数据 } type BaseExport struct { Ctx context.Context hashMark string //导出任务的唯一hash Header HeaderField //表头数据 Total int64 //需要导出的总数 filename string //文件名称 fullPath string //文件存储路径 customFile bool //是否自定义文件 } // Init 实例化导出 // @params // // header HeaderField excel表头 // total int64 导出数据的总量条数 // hashMark string 自定义的唯一标识 func (e *BaseExport) Init(ctx context.Context, header HeaderField, total int64, opts ...Option) { e.Ctx = ctx e.Total = total e.Header = header e.hashMark = BuildHashMark() //设置参数 for _, opt := range opts { opt(e) } } // GetHashMark 获取导出的唯一标识 func (e *BaseExport) GetHashMark() string { return e.hashMark } // GetBasePath 获取基础路径 func (e *BaseExport) GetBasePath() string { path, _ := os.Getwd() return path + "/tmp/export/" } // SetFilename 设置文件名称 func (e *BaseExport) SetFilename(ept Export) { if e.filename != "" { //已经设置好了就不设置了 return } e.filename = e.GetHashMark() + "." + ept.FileSuffix() e.fullPath = e.GetBasePath() + e.filename } // GetFilename 获取文件名称 func (e *BaseExport) GetFilename() string { return e.filename } // GetFullPath 获取文件全路径 func (e *BaseExport) GetFullPath() string { return e.fullPath } // IsCustomerFile 文件是否已经存在 func (e *BaseExport) IsCustomerFile() bool { return e.customFile } // BuildHashMark 初始化当前导出任务的唯一标识 func BuildHashMark() string { return fmt.Sprintf("ept_%s", xid.New().String()) }