62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package export
|
|
|
|
import "fmt"
|
|
|
|
type CSVExporter struct {
|
|
mFetcher DataFetcher
|
|
file FileAdapter
|
|
count int
|
|
last interface{}
|
|
}
|
|
|
|
func NewCVSExporter(fetcher DataFetcher, file FileAdapter) DataExporter {
|
|
return &CSVExporter{
|
|
mFetcher: fetcher,
|
|
file: file,
|
|
}
|
|
}
|
|
|
|
func (ee *CSVExporter) Fetcher(fetcher DataFetcher) {
|
|
ee.mFetcher = fetcher
|
|
}
|
|
|
|
func (ee *CSVExporter) File(file FileAdapter) {
|
|
ee.file = file
|
|
}
|
|
|
|
func (ee *CSVExporter) Export(sql, pk string) error {
|
|
data, err := ee.mFetcher.Fetch(sql)
|
|
if err != nil {
|
|
return fmt.Errorf("数据获取错误:%w", err)
|
|
}
|
|
ee.count = len(data.Data)
|
|
//fmt.Printf("Excel Exporter.Excel, got %v data\n", len(data))
|
|
//ee.file.Open()
|
|
ee.file.WriteTitle(data.Title)
|
|
var last interface{}
|
|
for _, val := range data.Data {
|
|
last = val
|
|
ee.file.Write(last)
|
|
}
|
|
|
|
if row, ok := last.([]interface{}); ok {
|
|
ee.last = row[ee.getPkIndex(data.Title, pk)]
|
|
}
|
|
|
|
//ee.file.Close()
|
|
return nil
|
|
}
|
|
|
|
func (ee *CSVExporter) Last() (int, interface{}) {
|
|
return ee.count, ee.last
|
|
}
|
|
|
|
func (ee *CSVExporter) getPkIndex(titles []string, pk string) int {
|
|
for i, title := range titles {
|
|
if title == pk {
|
|
return i
|
|
}
|
|
}
|
|
return -1
|
|
}
|