123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package cfile
- import (
- "context"
- "encoding/csv"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/util/gconv"
- "os"
- "path"
- )
- var (
- headers = []string{
- "bid",
- "area",
- "city",
- "projectId",
- "title",
- "topType",
- "detail",
- "publishTime",
- "href",
- "jyHref",
- "projectName",
- "projectCode",
- "projectScope",
- "budget",
- "bidAmount",
- "buyer",
- "buyerCreditNo",
- "buyerPerson",
- "buyerTel",
- "agency",
- "agencyPerson",
- "agencyTel",
- "bidOpenTime",
- "bidEndTime",
- "topScopeClass",
- "winner",
- "winnerPerson",
- "winnerTel",
- "winnersCreditNo",
- "winnersEntPerson",
- "winnersEntTel",
- "winnersEntMail",
- }
- mapping = map[string]string{
- "topScopeClass": "s_topscopeclass",
- "winner": "s_winner",
- "winnerTel": "winnertel",
- "winnerPerson": "winnerperson",
- "bidEndTime": "bidendtime",
- "bidOpenTime": "bidopentime",
- "agencyTel": "agencytel",
- "agencyPerson": "agencyperson",
- "buyerTel": "buyertel",
- "buyerPerson": "buyerperson",
- "bidAmount": "bidamount",
- "publishTime": "publishtime",
- "topType": "toptype",
- }
- )
- func CreateFile(ctx context.Context, data []g.Map, out string) error {
- dir := path.Dir(out)
- if err := os.Mkdir(dir, 0755); err != nil {
- if !os.IsExist(err) {
- return err
- }
- }
- //生成文件
- file, err := os.Create(out)
- if err != nil {
- g.Log().Error(ctx, err)
- return err
- }
- defer file.Close()
- // 创建CSV写入器
- writer := csv.NewWriter(file)
- defer writer.Flush()
- // 写入标题行
- if err := writer.Write(headers); err != nil {
- g.Log().Errorf(ctx, "Failed to write headers: %v", err)
- }
- // 写入数据行
- c := splitData(data)
- for _, record := range c {
- if err := writer.Write(record); err != nil {
- g.Log().Errorf(ctx, "Failed to write record: %v", err)
- }
- }
- return nil
- }
- func splitData(arr []g.Map) (r [][]string) {
- for _, m := range arr {
- var t []string
- for _, filed := range headers {
- c, ok := mapping[filed]
- if ok && c != "" {
- filed = c
- }
- t = append(t, gconv.String(m[filed]))
- }
- r = append(r, t)
- }
- return r
- }
|