Răsfoiți Sursa

Merge remote-tracking branch 'origin/chart/11.2'

# Conflicts:
#	models/db.go
#	services/task.go
Roc 1 an în urmă
părinte
comite
d814eb2d54
5 a modificat fișierele cu 1412 adăugiri și 0 ștergeri
  1. 44 0
      models/com_trade_country.go
  2. 230 0
      models/com_trade_data.go
  3. 3 0
      models/db.go
  4. 1126 0
      services/com_trade.go
  5. 9 0
      services/task.go

+ 44 - 0
models/com_trade_country.go

@@ -0,0 +1,44 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// ComTradeCountry 联合国商品贸易数据库的国家编码表
+type ComTradeCountry struct {
+	Id                   int       `orm:"column(id);pk"`
+	ThirdId              int       `description:"第三方的国家id"`
+	Name                 string    `description:"国家名称(英文)"`
+	NameCn               string    `description:"国家名称(中文)"`
+	TogetherCountry      int       `description:"合并其他国家查询的个数,如果大于0,代表可以合并其他国家查询"`
+	MonthTogetherCountry int       `description:"月度合并其他国家查询的个数,如果大于0,代表可以合并其他国家查询"`
+	ModifyTime           time.Time `description:"修改时间"`
+	CreateTime           time.Time `description:"创建时间"`
+}
+
+// Update 更新基础信息
+func (item *ComTradeCountry) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(item, cols...)
+	return
+}
+
+// AddComTradeCountry 添加联合国商品贸易数据库的国家编码
+func AddComTradeCountry(item *ComTradeCountry) (lastId int64, err error) {
+	o := orm.NewOrmUsingDB("data")
+	lastId, err = o.Insert(item)
+	if err != nil {
+		return
+	}
+	item.Id = int(lastId)
+	return
+}
+
+// GetComTradeCountryAll 获取所有的国家
+func GetComTradeCountryAll() (list []*ComTradeCountry, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM com_trade_country where id !=1`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}

+ 230 - 0
models/com_trade_data.go

@@ -0,0 +1,230 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/shopspring/decimal"
+	"time"
+)
+
+// ComTradeIndex 联合国商品贸易数据指标表
+type ComTradeIndex struct {
+	ComTradeId  int       `orm:"column(com_trade_id);pk"`
+	IndexCode   string    `description:"联合国商品贸易编码"`
+	IndexName   string    `description:"联合国商品名称"`
+	IndexNameCn string    `description:"联合国商品名称(中文)"`
+	CreateTime  time.Time `description:"创建时间"`
+}
+
+// GetComTradeIndexList 获取指标数据列表
+func GetComTradeIndexList(condition string, pars []interface{}) (list []*ComTradeIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM com_trade_index WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += `ORDER BY com_trade_id DESC `
+	_, err = o.Raw(sql, pars).QueryRows(&list)
+	return
+}
+
+// GetAllComTradeIndexList 获取指标数据列表
+func GetAllComTradeIndexList() (list []*ComTradeIndex, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM com_trade_index WHERE 1=1  ORDER BY com_trade_id DESC `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// ComTradeCodeMapping 联合国商品贸易数据指标编码与分类编码的关系表
+type ComTradeCodeMapping struct {
+	Code       string    `orm:"column(code);pk"`
+	IndexCode  string    `description:"联合国商品贸易编码"`
+	Type       int       `description:"1:价格;2:重量"`
+	Name       string    `description:"指标名称"`
+	CreateTime time.Time `description:"创建时间"`
+}
+
+// GetAllComTradeCodeMappingList 获取联合国商品贸易数据指标编码与分类编码的关系列表
+func GetAllComTradeCodeMappingList() (list []*ComTradeCodeMapping, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM com_trade_code_mapping WHERE 1=1  ORDER BY create_time ASC `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+func AddComTradeCodeMapping(item *ComTradeCodeMapping) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Insert(item)
+	if err != nil {
+		return
+	}
+	return
+}
+
+func UpdateComTradeCodeMapping(item *ComTradeCodeMapping,cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(item, cols...)
+	if err != nil {
+		return
+	}
+	return
+}
+
+func AddMultiComTradeCodeMapping(items []*ComTradeCodeMapping) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.InsertMulti(len(items), items)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// ComTradeData 联合国商品贸易数据表
+type ComTradeData struct {
+	ComTradeDataId     int       `orm:"column(com_trade_data_id);pk"`
+	ComTradeId         int       `description:"指标id"`
+	IndexCode          string    `description:"联合国商品贸易编码"`
+	Flow               string    `description:"贸易流向:X(Export:出口);M(Import:进口)"`
+	ReporterCode       int       `description:"出口国id"`
+	ReporterName       string    `description:"出口国名称"`
+	PartnerCode        int       `description:"进口国id"`
+	PartnerName        string    `description:"进口国名称"`
+	Partner2Code       int       `description:"第二进口国id"`
+	Partner2Name       string    `description:"第二进口国名称"`
+	DateType           int       `description:"日期类型,1:年度,2:月度"`
+	DataTime           string    `description:"数据日期"`
+	IndexTradeCode     string    `description:"离岸价编码"`
+	TradeValue         float64   `description:"离岸价(美元)"`
+	IndexNetWeightCode string    `description:"净重编码"`
+	NetWeightValue     float64   `description:"净重/公斤"`
+	ModifyTime         time.Time `description:"最新更新时间"`
+	CreateTime         time.Time `description:"创建时间"`
+}
+
+// Update 更新基础信息
+func (item *ComTradeData) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(item, cols...)
+	return
+}
+
+//HandleComTradeData 数据处理
+func HandleComTradeData(dataList []*ComTradeData, indexCode, flowCode, dataTime, partnerCode string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			to.Rollback()
+		} else {
+			to.Commit()
+		}
+	}()
+	var existList []*ComTradeData
+	sql := `SELECT * FROM com_trade_data WHERE index_code = ? and flow = ? and partner_code = ? and data_time = ? order by data_time asc`
+	_, err = to.Raw(sql, indexCode, flowCode, partnerCode, dataTime).QueryRows(&existList)
+	if err != nil {
+		return err
+	}
+
+	existMap := make(map[string]*ComTradeData)
+	for _, v := range existList {
+		existMap[v.IndexTradeCode] = v
+	}
+
+	// 待添加的数据列表
+	addDataList := make([]*ComTradeData, 0)
+
+	for _, v := range dataList {
+		existData, ok := existMap[v.IndexTradeCode]
+		if !ok {
+			v.IndexTradeCode = v.IndexTradeCode
+			v.IndexNetWeightCode = v.IndexNetWeightCode
+			addDataList = append(addDataList, v)
+		} else {
+			existTradeValue := decimal.NewFromFloat(existData.TradeValue)
+			existNetWeightValue := decimal.NewFromFloat(existData.NetWeightValue)
+			nowTradeValue := decimal.NewFromFloat(v.TradeValue)
+			nowNetWeightValue := decimal.NewFromFloat(v.NetWeightValue)
+
+			updateColStr := make([]string, 0)
+			//fmt.Println(date, "=========", nowVal.Equal(valDecimal))
+			if !existTradeValue.Equal(nowTradeValue) {
+				existData.TradeValue = v.TradeValue
+			}
+			if !existNetWeightValue.Equal(nowNetWeightValue) {
+				existData.NetWeightValue = v.NetWeightValue
+			}
+			if len(updateColStr) > 0 {
+				_, err = to.Update(existData, updateColStr...)
+				if err != nil {
+					return
+				}
+			}
+		}
+		delete(existMap, v.DataTime)
+	}
+
+	lenAddDataList := len(addDataList)
+	if lenAddDataList > 0 {
+		_, err = to.InsertMulti(lenAddDataList, addDataList)
+	}
+
+	//existMapNum := len(existMap)
+	//if existMapNum > 0 {
+	//	idList := make([]int, 0)
+	//	for _, v := range existMap {
+	//		idList = append(idList, v.BaseFromEiaSteoDataId)
+	//	}
+	//
+	//	sql = `DELETE FROM base_from_eia_steo_data WHERE base_from_eia_steo_data_id in(` + utils.GetOrmInReplace(existMapNum) + `) `
+	//	_, err = to.Raw(sql, idList).Exec()
+	//	if err != nil {
+	//		return err
+	//	}
+	//}
+
+	// 更新指标信息
+	sql = `UPDATE com_trade_index SET update_time = now() WHERE index_code = ? `
+	_, err = to.Raw(sql, indexCode).Exec()
+	if err != nil {
+		return err
+	}
+	//{
+	//	isUpdateIndexDate := false
+	//	if endDate.After(indexInfo.EndDate) {
+	//		isUpdateIndexDate = true
+	//		indexInfo.EndDate = endDate
+	//	}
+	//	if startDate.Before(indexInfo.StartDate) {
+	//		isUpdateIndexDate = true
+	//		indexInfo.StartDate = startDate
+	//	}
+	//	if isUpdateIndexDate {
+	//		_, err = to.Update(indexInfo, "StartDate", "EndDate")
+	//		if err != nil {
+	//			return
+	//		}
+	//	}
+	//}
+	return
+}
+
+// GetAllComTradeDataList 获取联合国商品贸易数据指标编码与分类编码的关系列表
+func GetAllComTradeDataList() (list []*ComTradeData, err error) {
+	o := orm.NewOrmUsingDB("data")
+	//sql := `SELECT * FROM com_trade_data WHERE 1=1  ORDER BY create_time ASC `
+	sql := `SELECT  * FROM com_trade_data WHERE 1=1 GROUP BY index_trade_code`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// UpdateComTradeData 更新
+func UpdateComTradeData(indexTradeCode, indexNetWeightCode, oldIndexTradeCode string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE com_trade_data SET index_trade_code = ?,index_net_weight_code=?  WHERE index_trade_code = ? ORDER BY create_time ASC `
+	_, err = o.Raw(sql, indexTradeCode, indexNetWeightCode, oldIndexTradeCode).Exec()
+	return
+}

+ 3 - 0
models/db.go

@@ -49,6 +49,9 @@ func init() {
 		new(BaseFromEiaSteoIndex),
 		new(BaseFromEiaSteoData),
 		new(BaseFromEiaSteoClassify),
+		new(ComTradeCountry),
+		new(ComTradeData),
+		new(ComTradeCodeMapping),
 		new(BaseFromNationalStatisticsClassify),
 		new(BaseFromNationalStatisticsIndex),
 		new(BaseFromNationalStatisticsData),

+ 1126 - 0
services/com_trade.go

@@ -0,0 +1,1126 @@
+package services
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"hongze/hongze_data_crawler/models"
+	"hongze/hongze_data_crawler/services/alarm_msg"
+	"hongze/hongze_data_crawler/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+func SyncComTradeData(cont context.Context) (err error) {
+	//comTradeId := 1
+	//indexCode := "270730"
+	//flowCode := "X"
+	//year := 2021
+	//partnerCode := 842
+	//err = syncComTradeData(comTradeId, indexCode, flowCode, partnerCode, year)
+	return
+}
+
+const ComTradeUrl = "https://comtradeapi.un.org/public/v1/preview/C/A/HS?"
+const ComTradeMonthUrl = "https://comtradeapi.un.org/public/v1/preview/C/M/HS?"
+
+//func sync() {
+//	//yearList := []int{2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000}
+//	yearList := []int{2022}
+//	flowCodeList := []string{"X", "M"}
+//
+//	for _, year := range yearList {
+//		for _, flow := range flowCodeList {
+//			fmt.Println("开始", year, "的", flow)
+//			syncAllComTradeData2(year, 0, flow, "year")
+//			fmt.Println("结束", year, "的", flow)
+//		}
+//	}
+//}
+//
+//func sync2() {
+//	defer func() {
+//		//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCoalCoastal ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+//		msg := "UN数据同步完成"
+//		go alarm_msg.SendAlarmMsg(msg, 3)
+//	}()
+//	//yearList := []int{2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000}
+//	//yearList := []int{2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010}
+//	yearList := []int{2023}
+//	//monthList := []int{12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}
+//	monthList := []int{1, 2, 3, 4, 5, 6}
+//	flowCodeList := []string{"X", "M"}
+//
+//	for _, year := range yearList {
+//		for _, month := range monthList {
+//			for _, flow := range flowCodeList {
+//				fmt.Println("开始", year, month, "的", flow)
+//				syncAllComTradeData2(year, month, flow, "month")
+//				fmt.Println("结束", year, "的", flow)
+//			}
+//		}
+//	}
+//}
+
+// SyncYearComTrade 同步年度数据
+func SyncYearComTrade(cont context.Context) (err error) {
+	errMsg := make([]string, 0)
+	defer func() {
+		if len(errMsg) > 0 {
+			go alarm_msg.SendAlarmMsg("UN年度度数据同步失败:"+strings.Join(errMsg, "\n"), 3)
+		}
+	}()
+	flowCodeList := []string{"X", "M"}
+	year := time.Now().Year()
+	for _, flow := range flowCodeList {
+		fmt.Println("开始", year, "的", flow)
+		err = syncAllComTradeData2(year, 0, flow, "year")
+		if err != nil {
+			errMsg = append(errMsg, fmt.Sprint(year, "的", flow, "数据爬取失败:", err.Error()))
+		}
+		fmt.Println("结束", year, "的", flow)
+	}
+
+	return
+}
+
+// SyncYearMonthComTrade 同步月度数据
+func SyncYearMonthComTrade(cont context.Context) (err error) {
+	errMsg := make([]string, 0)
+	defer func() {
+		if len(errMsg) > 0 {
+			go alarm_msg.SendAlarmMsg("UN月度数据同步失败:"+strings.Join(errMsg, "\n"), 3)
+		}
+	}()
+	flowCodeList := []string{"X", "M"}
+
+	year := time.Now().Year()
+	month := int(time.Now().Month())
+	for _, flow := range flowCodeList {
+		fmt.Println("开始", year, month, "的", flow)
+		err := syncAllComTradeData2(year, month, flow, "month")
+		if err != nil {
+			errMsg = append(errMsg, fmt.Sprint(year, month, "的", flow, "数据爬取失败:", err.Error()))
+		}
+		fmt.Println("结束", year, "的", flow)
+	}
+
+	return
+}
+
+type TmpStruct struct {
+	IndexCode   string
+	Year        int
+	Month       int
+	FlowCode    string
+	PartnerCode string
+}
+
+func sync3() {
+	defer func() {
+		//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "RefreshDataFromCoalCoastal ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		//msg := "UN数据同步完成"
+		//go alarm_msg.SendAlarmMsg(msg, 3)
+	}()
+	str := `2023/01/04 15:16:51.837  [I] [com_trade.go:183]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2022;月份:10;flow:M;partnerCode:170,410,246,703,826,233,699,784
+2023/01/04 15:16:53.139  [I] [com_trade.go:183]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2022;月份:10;flow:M;partnerCode:757,218,764,710,124,579,70,528
+2023/01/04 15:25:22.880  [I] [com_trade.go:183]  290121获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2022;月份:9;flow:X;partnerCode:178,275,328,768,748,84,762,496,108,270,533,894,136,670,418,174,478,446,462,72,204,690,854,562,417,678,104,60,716,52,882
+2023/01/04 15:25:24.233  [I] [com_trade.go:183]  290121获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2022;月份:9;flow:X;partnerCode:470,222,400,268,450,686,860,96,484,352,68,480,512,591,740,780,508,24,858,558,634,646,242,834,340,807,308,116,524,231
+2023/01/04 15:25:25.609  [I] [com_trade.go:183]  381900获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2022;月份:9;flow:X;partnerCode:392,458,600,40,300,608,498,191,360,214,36,100,704,376,32,348
+2023/01/04 15:45:47.877  [I] [com_trade.go:183]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2022;月份:8;flow:M;partnerCode:156,170,804,764,246
+2023/01/04 15:45:49.197  [I] [com_trade.go:183]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2022;月份:8;flow:M;partnerCode:440,100,196,31,498,36,392,348,376,40,208,360,76,682,191,214
+2023/01/04 15:45:50.491  [I] [com_trade.go:183]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2022;月份:8;flow:M;partnerCode:300,600,32,458,554,608,704,112
+2022/12/30 08:31:53.846  [I] [com_trade.go:176]  270730获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2019;月份:1;flow:X;partnerCode:458,36,360,376,76,214,40,348,608,498,112,682,208,600,392,196
+2022/12/30 08:31:55.167  [I] [com_trade.go:176]  270730获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2019;月份:1;flow:X;partnerCode:100,554,191,300,32,704,31,440
+2022/12/30 08:53:56.893  [I] [com_trade.go:176]  290230获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:12;flow:X;partnerCode:882,72,136,894,178,417,854,174,670,690,748,496,328,418,104,762,533,678,462,446,716,52,478,270,562,768,275,84,60,204,108
+2022/12/30 08:53:59.079  [I] [com_trade.go:176]  290230获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:12;flow:X;partnerCode:40,458,600,76,376,682,608,31,32,348,704,100,300,498,392,360
+2022/12/30 09:16:34.790  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:11;flow:X;partnerCode:703,826,702,757,218,428,752,56
+2022/12/30 09:16:36.185  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:11;flow:X;partnerCode:410,842,528,246,170,70,579,792
+2022/12/30 09:16:37.641  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:11;flow:X;partnerCode:156,620,251,616,764
+2022/12/30 09:23:56.668  [I] [com_trade.go:176]  290244获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:11;flow:X;partnerCode:624,368,891,837,266,527,50,278,500,662,180,226,238,638,312,175,532,492,666,698,434,868,254,674,90,4,184,577,776,140,588,296,890,388,706,899,866,288,800,850,697,720,472,316,221,336,585,64,292,48,200,258,332,466,548,454,879,408,356,836,516,568,334,637,728,120,290,239,86,647,426,459,12,232,583,262,772,849,92,582,574,534,16,660,398,520,862,535,166,473,10,471,234,760,570,457,28,129,230,58,192,364,304,430,732,581,148,461,711,796,798,590,717,598,8,474,658,729,654,20,384,736,835,626,531,592,260,324,841,580,530,132,414,536,652,74,212,612,540,887,694,162,886,659,795,876,44,80,280,839,810,838,584,636
+2022/12/30 09:23:58.075  [I] [com_trade.go:176]  290244获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:11;flow:X;partnerCode:705,710,642,699,490,724,442,784
+2022/12/30 09:31:23.532  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:11;flow:M;partnerCode:757,752,620,642,702
+2022/12/30 09:31:24.940  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:11;flow:M;partnerCode:174,328,748,84,562,882,204,104,670,60,418,678,108,768,178,275,533,462,690,446,496,716,270,478,894,417,854,72,762,52,136
+2022/12/30 10:17:07.994  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:8;flow:X;partnerCode:583,368,711,810,838,28,652,666,849,868,772,175,304,570,577,638,12,80,592,580,798,132,288,356,332,239,492,461,4,180,588,887,474,516,659,534,886,312,760,862,58,527,582,732,472,324,520,662,729,166,531,698,90,388,879,674,624,500,891,626,140,795,20,200,736,316,568,234,426,162,336,850,636,776,530,64,148,835,800,184,262,612,120,260,232,890,414,796,585,292,540,192,258,10,44,384,536,654,658,899,590,841,876,334,50,697,278,74,836,434,454,647,837,408,266,457,8,86,296,866,584,212,728,535,471,129,398,430,459,48,238,706,581,473,466,694,92,226,548,364,574,660,720,230,717,598,221,839,280,532,290,637,16,254
+2022/12/30 10:46:04.444  [I] [com_trade.go:176]  290244获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:7;flow:X;partnerCode:780,340,116,834,858,558,524,24,686,400,860,512,268,96,508,242,222,231,646,740,470,634,480,484,308,68,352,450,591,807
+2022/12/30 10:46:05.864  [I] [com_trade.go:176]  290244获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:7;flow:X;partnerCode:682,76,704,348,376,498,600,608,360,214,300,392,100,40,32,31
+2022/12/30 11:22:44.563  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:5;flow:M;partnerCode:276,688,784,792,56,616,124,703
+2022/12/30 11:22:45.936  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:5;flow:M;partnerCode:428,579,702,170,620,528,643,764
+2022/12/30 11:40:43.264  [I] [com_trade.go:176]  290244获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:4;flow:M;partnerCode:56,703,218,490,170,156,616,410
+2022/12/30 11:40:44.553  [I] [com_trade.go:176]  290244获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2018;月份:4;flow:M;partnerCode:784,70,579,251,699,233,705,752
+2022/12/30 22:41:22.216  [I] [com_trade.go:176]  290230获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:7;flow:M;partnerCode:528,642,70,784,792,710,842,56
+2022/12/30 22:41:23.516  [I] [com_trade.go:176]  290230获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:7;flow:M;partnerCode:246,705,251,218,757
+2022/12/30 22:41:24.824  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:7;flow:M;partnerCode:0
+2022/12/30 22:41:26.138  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:7;flow:M;partnerCode:68,512,470,222,558,858,508,308,352,591,231,242,780,24,484,807,740,646,524,686,340,268,116,634,860,480,96,400,450,834
+2022/12/30 22:41:27.457  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:7;flow:M;partnerCode:304,624,332,654,795,841,258,577,879,732,835,527,647,86,866,706,232,796,638,4,80,717,12,492,454,798,180,44,697,838,520,776,262,473,887,16,540,129,192,772,850,280,637,581,570,839,810,90,20,334,474,459,230,388,662,534,50,120,288,466,530,531,590,316,398,471,221,175,74,580,891,711,212,720,598,666,800,886,8,238,414,28,64,312,658,296,849,408,278,694,568,698,48,140,584,461,736,836,292,430,659,760,336,472,899,583,536,636,588,239,166,384,457,516,574,837,58,868,254,368,652,226,612,862,266,434,728,200,592,290,674,548,585,729,92,162,364,532,626,10,184,426,148,660,535,234,324,500,356,132,582,890,260,876
+2022/12/30 23:13:14.705  [I] [com_trade.go:176]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:6;flow:M;partnerCode:200,624,636,776,384,140,266,304,12,278,28,260,835,674,531,841,837,430,659,296,472,612,474,520,86,120,457,10,74,500,132,368,637,454,316,434,221,536,459,839,585,810,890,706,862,148,582,698,492,336,795,581,592,577,80,162,548,868,232,426,568,626,262,580,570,654,729,866,175,598,732,64,717,736,838,899,720,398,290,658,212,292,527,638,129,8,92,662,728,879,588,234,58,414,711,760,408,324,388,583,584,534,530,471,192,886,666,697,574,184,90,4,20,516,647,312,364,473,652,694,48,50,590,254,258,772,796,230,288,332,334,849,876,660,540,887,16,466,891,44,166,180,532,850,800,535,226,238,356,239,798,836,461,280
+2022/12/30 23:13:16.091  [I] [com_trade.go:176]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:6;flow:M;partnerCode:222,524,470,231,634,740,24,780,512,508,807,340,484,686,834,352,558,268,68,242,96,116,860,480,858,591,450,646,308,400
+2022/12/30 23:13:17.486  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:6;flow:M;partnerCode:608,498,112,36,682,704,40,348,208,392,600,554,300,440,196,458
+2022/12/31 00:05:18.625  [I] [com_trade.go:176]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:3;flow:M;partnerCode:826,56,757,724,233,251,752,702
+2022/12/31 00:05:19.966  [I] [com_trade.go:176]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:3;flow:M;partnerCode:410,688,703,616,276,620,579,380
+2022/12/31 00:05:21.315  [I] [com_trade.go:176]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:3;flow:M;partnerCode:170,710,528,490,699,428,124,792
+2022/12/31 00:46:55.568  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:2;flow:M;partnerCode:0
+2022/12/31 00:46:56.919  [I] [com_trade.go:176]  290121获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:2;flow:M;partnerCode:697,886,254,80,166,536,324,426,839,796,50,221,800,12,461,364,728,16,48,132,230,660,212,798,548,568,662,184,585,414,500,760,772,527,86,574,288,459,534,590,582,850,368,570,666,408,334,530,336,866,810,90,887,588,332,148,581,612,532,260,388,838,659,472,238,520,795,180,835,296,706,652,278,836,698,717,540,531,862,8,384,290,434,454,636,736,535,262,473,292,624,140,162,304,776,74,234,266,891,20,899,58,841,879,120,654,694,44,466,356,474,658,674,457,10,258,890,647,729,583,638,876,92,471,129,626,732,280,398,637,430,516,200,232,192,312,175,239,837,720,711,849,64,580,4,592,28,577,492,316,584,598,226,868
+2022/12/31 00:46:58.356  [I] [com_trade.go:176]  290121获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2017;月份:2;flow:M;partnerCode:246,643,156,688,826,528,804,616
+2022/12/31 04:15:22.974  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2016;月份:10;flow:M;partnerCode:404,372,604,422,504,788,344,188,51,320,566,586,144,152,818,499
+2022/12/31 04:15:24.490  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2016;月份:10;flow:M;partnerCode:234,296,58,192,16,212,772,694,659,536,457,92,612,760,798,837,527,654,132,592,12,408,582,568,711,384,879,364,532,162,166,200,638,20,574,891,254,535,492,466,266,140,890,74,86,4,660,44,540,776,584,580,585,80,221,796,570,534,239,414,500,636,148,238,312,666,129,232,64,332,292,48,262,581,471,862,304,278,583,530,626,8,520,838,280,800,90,588,28,324,473,662,697,652,720,290,334,598,474,10,899,368,461,180,388,430,835,184,531,647,728,732,288,454,850,624,434,698,398,868,839,356,226,472,336,120,230,717,887,637,577,795,674,706,548,516,50,810,729,836,459,886,258,590,260,866,849,316,426,658,175,841,876,736
+2022/12/31 04:15:26.001  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2016;月份:10;flow:M;partnerCode:231,646,834,591,340,480,68,524,24,308,558,400,352,268,450,116,96,740,860,222,634,780,484,512,242,807,858,470,508,686
+2022/12/31 08:06:11.934  [I] [com_trade.go:176]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2015;月份:12;flow:M;partnerCode:699,642,705,380,579,490,643,703
+2022/12/31 08:06:13.619  [I] [com_trade.go:176]  271114获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2015;月份:12;flow:M;partnerCode:724,710,156,428,620,70,784,616
+2022/12/31 09:51:10.568  [I] [com_trade.go:176]  290244获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2015;月份:4;flow:X;partnerCode:826,70,156,702,428,705,792,764
+2022/12/31 09:51:12.117  [I] [com_trade.go:176]  290244获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2015;月份:4;flow:X;partnerCode:642,203,579,620,752,410,528,804
+2022/12/31 09:58:54.330  [I] [com_trade.go:176]  381900获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2015;月份:4;flow:M;partnerCode:218,276,826,842,764,699,124,643
+2023/01/03 22:26:25.230  [I] [com_trade.go:176]  270730获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:8;flow:X;partnerCode:682,31,348,40,208,458,704,376,32,191,392,360,36,196,554,600
+2023/01/03 22:34:20.413  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:8;flow:M;partnerCode:591,308,352,268,450,524,231,484,807,558,68,646,24,834,740,222,480,470,96,508,858,400,116,340,634,780,242,860,512,686
+2023/01/03 22:34:22.005  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:8;flow:M;partnerCode:894,174,104,84,108,270,418,678,716,204,178,462,496,478,670,60,328,690,533,136,446,768,417,762,562,72,748,854,882,275,52
+2023/01/03 22:47:23.927  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:7;flow:M;partnerCode:591,646,508,24,308,268,558,634,807,480,512,834,780,242,524,352,450,484,470,96,686,116,231,858,340,740,222,860,400,68
+2023/01/03 22:47:25.509  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:7;flow:M;partnerCode:32,214,704,376,208,360,191,112,600,348,554,300,100,76,40,196
+2023/01/03 22:47:26.957  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:7;flow:M;partnerCode:682,392,36,608,440,31,458,498
+2023/01/03 22:56:11.582  [I] [com_trade.go:176]  290230获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:6;flow:X;partnerCode:68,508,400,860,231,740,242,512,96,807,470,268,858,524,222,450,308,646,686,591,480,558,780,634,834,24,340,116,484,352
+2023/01/03 22:56:12.894  [I] [com_trade.go:176]  290230获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:6;flow:X;partnerCode:136,446,496,882,690,204,60,275,462,533,108,178,670,716,52,104,762,328,418,270,84,894,768,72,854,174,417,562,678,478,748
+2023/01/03 23:09:42.931  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:5;flow:M;partnerCode:608,112,40,214,682,392,458,31,348,498,76,600,554,704,191,300
+2023/01/03 23:09:44.481  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:5;flow:M;partnerCode:32,36,360,440,208,196,100,376
+2023/01/03 23:17:27.853  [I] [com_trade.go:176]  270730获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:5;flow:M;partnerCode:608,112,40,214,682,392,458,31,348,498,76,600,554,704,191,300
+2023/01/03 23:17:29.534  [I] [com_trade.go:176]  270730获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:5;flow:M;partnerCode:32,36,360,440,208,196,100,376
+2023/01/03 23:25:00.828  [I] [com_trade.go:176]  381900获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2003;月份:4;flow:M;partnerCode:40,76,704,208,458,608,214,31,300,112,196,191,600,360,348,682
+2023/01/04 01:02:18.808  [I] [com_trade.go:176]  290230获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2002;月份:6;flow:M;partnerCode:835,92,772,230,624,694,192,527,899,384,534,711,80,226,520,647,887,10,434,536,570,254,278,332,530,166,584,876,44,368,414,221,810,636,471,180,583,388,585,64,836,736,212,532,638,706,866,334,408,839,548,292,74,304,598,891,28,426,20,398,473,238,540,666,796,862,4,868,175,492,890,500,850,262,461,290,472,336,296,580,577,459,232,457,8,886,717,90,776,129,430,652,48,760,50,720,728,588,590,637,654,732,474,260,612,581,841,531,837,132,697,592,266,316,140,148,184,356,454,12,364,466,698,795,658,674,838,568,312,86,582,729,879,16,200,288,120,234,574,535,662,798,162,258,239,660,280,659,800,58,516,626,849,324
+2023/01/04 01:02:20.180  [I] [com_trade.go:176]  290230获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2002;月份:6;flow:M;partnerCode:32,31,191,554,76,300,100,348,458,214,40,196,392,704,376,360
+2023/01/04 01:09:53.528  [I] [com_trade.go:176]  290121获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2002;月份:5;flow:X;partnerCode:233,428,203,528,724,792,703,380
+2023/01/04 01:52:58.039  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2002;月份:1;flow:X;partnerCode:0
+2023/01/04 02:00:21.549  [I] [com_trade.go:176]  290122获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2002;月份:1;flow:M;partnerCode:0
+2023/01/04 02:12:09.179  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:12;flow:X;partnerCode:688,579,752,380,764,842,156,70
+2023/01/04 02:29:32.109  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:11;flow:M;partnerCode:710,442,699,616,703
+2023/01/04 02:29:33.532  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:11;flow:M;partnerCode:0
+2023/01/04 02:29:34.888  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:11;flow:M;partnerCode:768,204,84,854,60,72,716,136,275,748,178,762,562,496,446,690,104,678,894,478,52,328,533,882,108,270,462,417,670,418,174
+2023/01/04 02:37:00.528  [I] [com_trade.go:176]  381900获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:10;flow:X;partnerCode:152,372,504,188,499,818,344,404,422,566,144,604,320,51,788,586
+2023/01/04 02:37:01.816  [I] [com_trade.go:176]  381900获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:10;flow:X;partnerCode:882,533,690,84,270,275,496,446,104,462,60,762,204,417,418,328,748,478,72,52,854,136,178,562,670,716,108,678,894,174,768
+2023/01/04 02:37:03.143  [I] [com_trade.go:176]  381900获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:10;flow:X;partnerCode:0
+2023/01/04 02:44:23.164  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:10;flow:M;partnerCode:528,710,688,642,784,442,124,705
+2023/01/04 02:44:24.971  [I] [com_trade.go:176]  290243获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:10;flow:M;partnerCode:616,410,724,804,490,826,380,620
+2023/01/04 02:58:29.473  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:9;flow:M;partnerCode:498,682,600,458,392,32,440,360
+2023/01/04 02:58:31.133  [I] [com_trade.go:176]  270750获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:9;flow:M;partnerCode:566,422,144,788,504,404,152,188,604,372,818,320,586,499,51,344
+2023/01/04 03:24:13.204  [I] [com_trade.go:176]  270730获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:7;flow:M;partnerCode:604,144,320,372,586,566,422,344,499,188,788,504,818,51,404,152
+2023/01/04 03:24:14.661  [I] [com_trade.go:176]  270730获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:7;flow:M;partnerCode:882,72,462,768,270,690,678,894,478,108,52,104,84,60,670,762,496,446,417,204,562,533,328,716,174,178,418,275,854,136,748
+2023/01/04 03:33:55.137  [I] [com_trade.go:176]  270730获取数据失败,err:map[error:Something went wrong. Please try again or contact comtrade@un.org];errObject:<nil>;年份:2001;月份:6;flow:M;partnerCode:191,360,682,600,704,440,554,392,196,40,36,100,32,76,112,214`
+	tmpList := strings.Split(str, "\n")
+
+	list := make([]TmpStruct, 0)
+
+	for _, v := range tmpList {
+		//fmt.Println(v)
+		tmp := strings.Split(v, "获取数据失败")
+		//fmt.Println(tmp)
+
+		// 指标编码
+		codeList := strings.Split(tmp[0], "  ")
+		indexCode := codeList[2]
+		//fmt.Println(indexCode)
+
+		// 年度
+		//年份:2001;月份:6;flow:M;partnerCode:191,360,682,600,704,440,554,392,196,40,36,100,32,76,112,214`
+		tmp = strings.Split(tmp[1], "年份:")
+		// 指标编码
+		tmpList2 := strings.Split(tmp[1], ";")
+		yearStr := tmpList2[0]
+		year, _ := strconv.Atoi(yearStr)
+		//fmt.Println(year)
+
+		// 月度
+		//月份:6;flow:M;partnerCode:191,360,682,600,704,440,554,392,196,40,36,100,32,76,112,214`
+		tmp = strings.Split(tmp[1], "月份:")
+		// 指标编码
+		tmpList2 = strings.Split(tmp[1], ";")
+		monthStr := tmpList2[0]
+		month, _ := strconv.Atoi(monthStr)
+		//fmt.Println(month)
+
+		// flow
+		//flow:M;partnerCode:191,360,682,600,704,440,554,392,196,40,36,100,32,76,112,214`
+		tmp = strings.Split(tmp[1], "flow:")
+		// 指标编码
+		tmpList2 = strings.Split(tmp[1], ";")
+		flowCode := tmpList2[0]
+		//fmt.Println(flowCode)
+
+		// partnerCode
+		//flow:M;partnerCode:191,360,682,600,704,440,554,392,196,40,36,100,32,76,112,214`
+		tmp = strings.Split(tmp[1], "partnerCode:")
+		// 指标编码
+		partnerCode := tmp[1]
+		//fmt.Println(partnerCode)
+
+		list = append(list, TmpStruct{
+			IndexCode:   indexCode,
+			Year:        year,
+			Month:       month,
+			FlowCode:    flowCode,
+			PartnerCode: partnerCode,
+		})
+	}
+
+	//year := 2021
+	//month := 6
+	//flowCode := "M"
+	//comTradeId := 6
+	//indexCode := `381900`
+	//indexNameCn := `石脑油(出口退税率0%)`
+	//thirdIdStr := `636,278,624,839,384,234,296,694,866,835,50,230,662,48,697,290,12,388,454,457,582,798,80,364,674,58,836,838,44,86,500,471,90,368,795,647,899,720,336,520,226,800,612,548,16,531,332,398,652,472,473,581,430,536,568,879,717,598,706,8,258,638,886,810,312,334,534,254,324,841,120,492,148,577,760,592,666`
+	//thirdIdStr := `588,583,316,849,887,626,129,580,530,288,414,796,466,584,891,292,356,426,540,74,184,459,10,535,166,4,266,585,658,862,660,232,92,239,0,776,474,280,736,64,221,516,132,698,162,434,461,180,654,262,570,850,238,175,659,637,711,527,732,20,140,868,532,200,728,729,772,192,260,28,212,890,876,837,590,408,304,574`
+	//thirdIdStr := `203,218,276,757`
+	//thirdIdStr := `380,784,56,528`
+	dateType := `month`
+	//codeList := []string{
+	//	`835,729,120,221,500,184,200,0,666,258,624,426,532,574,720,536,534,471,581,312,434,568,659,408,334,590,162,296,530,140,80,90,8,711`,
+	//	`866,732,736,364,459,698,706,12,674,234,516,891,849,260,304,388,899,492,612,660,772,694,862,697,592,472,324,531,226,92,28,232,583,647,654,166,64,838,336,430,58`,
+	//}
+
+	codeMappingListMap := make(map[string]string)
+	codeMappingList, err := models.GetAllComTradeCodeMappingList()
+	if err != nil {
+		return
+	}
+	for _, v := range codeMappingList {
+		codeMappingListMap[v.Code] = v.Name
+	}
+
+	countryMap, err := GetAllCountry()
+
+	comTradeList, err := models.GetAllComTradeIndexList()
+	if err != nil {
+		return
+	}
+	comTradeMap := make(map[string]*models.ComTradeIndex)
+	for _, v := range comTradeList {
+		comTradeMap[v.IndexCode] = v
+	}
+
+	for key, v := range list {
+		comTradeInfo, ok := comTradeMap[v.IndexCode]
+		if !ok {
+			fmt.Println("找不到指标")
+		}
+		//fmt.Println(v)
+		fmt.Println(key, ";开始:", ";code:", v.IndexCode, ";年份:", v.Year, ";月份:", v.Month, "的", v.FlowCode, ";国家:", v.PartnerCode)
+		syncComTradeData(comTradeInfo.ComTradeId, v.IndexCode, comTradeInfo.IndexNameCn, v.FlowCode, v.PartnerCode, dateType, v.Year, v.Month, codeMappingListMap, countryMap)
+		fmt.Println(key, ";结束:", ";code:", v.IndexCode, ";年份:", v.Year, ";月份:", v.Month, "的", v.FlowCode, ";国家:", v.PartnerCode)
+		time.Sleep(1 * time.Second)
+	}
+}
+
+func syncAllComTradeData2(year, month int, flowCode, dateType string) (err error) {
+	codeMappingListMap := make(map[string]string)
+	codeMappingList, err := models.GetAllComTradeCodeMappingList()
+	if err != nil {
+		return
+	}
+	for _, v := range codeMappingList {
+		codeMappingListMap[v.Code] = v.Name
+	}
+
+	comTradeList, err := models.GetAllComTradeIndexList()
+	if err != nil {
+		return
+	}
+	lenComTradeList := len(comTradeList)
+
+	countryMap, err := GetAllCountry()
+	if err != nil {
+		return
+	}
+
+	countryGroup := make(map[int][]models.ComTradeCountry)
+	for _, v := range countryMap {
+		togetherCountry := v.TogetherCountry
+		if dateType == "month" {
+			togetherCountry = v.MonthTogetherCountry
+		}
+		tmpList, ok := countryGroup[togetherCountry]
+		if !ok {
+			tmpList = make([]models.ComTradeCountry, 0)
+		}
+		countryGroup[togetherCountry] = append(tmpList, v)
+	}
+	//fmt.Println(countryGroup)
+	i := 0
+	startTime := time.Now()
+	fmt.Println("整体开始了=============")
+	for _, v := range comTradeList {
+		fmt.Println("剩余", lenComTradeList-i, "个指标=============")
+		syncSingleComTradeData(v.ComTradeId, year, month, flowCode, v.IndexCode, v.IndexNameCn, dateType, countryMap, codeMappingListMap, countryGroup)
+		i++
+	}
+	fmt.Println("整体结束了=============")
+	fmt.Println("耗时", time.Now().Sub(startTime).String())
+	return
+}
+
+func syncAllComTradeData() (err error) {
+	codeMappingListMap := make(map[string]string)
+	codeMappingList, err := models.GetAllComTradeCodeMappingList()
+	if err != nil {
+		return
+	}
+	for _, v := range codeMappingList {
+		codeMappingListMap[v.Code] = v.Name
+	}
+
+	comTradeList, err := models.GetAllComTradeIndexList()
+	if err != nil {
+		return
+	}
+	lenComTradeList := len(comTradeList)
+
+	countryMap, err := GetAllCountry()
+	if err != nil {
+		return
+	}
+
+	countryGroup := make(map[int][]models.ComTradeCountry)
+	for _, v := range countryMap {
+		tmpList, ok := countryGroup[v.TogetherCountry]
+		if !ok {
+			tmpList = make([]models.ComTradeCountry, 0)
+		}
+		countryGroup[v.TogetherCountry] = append(tmpList, v)
+	}
+	//fmt.Println(countryGroup)
+	//flowCode := "X"
+	flowCode := "M"
+	year := 2022
+	i := 0
+	startTime := time.Now()
+	fmt.Println("整体开始了=============")
+	for _, v := range comTradeList {
+		fmt.Println("剩余", lenComTradeList-i, "个指标=============")
+		syncSingleComTradeData(v.ComTradeId, year, 0, flowCode, v.IndexCode, v.IndexNameCn, "year", countryMap, codeMappingListMap, countryGroup)
+		i++
+	}
+	fmt.Println("整体结束了=============")
+	fmt.Println("耗时", time.Now().Sub(startTime).String())
+	return
+}
+
+func syncSingleComTradeData(comTradeId, year, month int, flowCode, indexCode, indexNameCn, dateType string, countryMap map[int]models.ComTradeCountry, codeMappingListMap map[string]string, countryGroup map[int][]models.ComTradeCountry) {
+	////flowCode := "X"
+	//flowCode := "M"
+	//year := 2020
+	//partnerCode := 842
+	lenCountry := len(countryMap)
+
+	i := 0
+	fmt.Println(indexCode, "开始了")
+
+	for needMergeNum, countryList := range countryGroup {
+		mergeNum := 0
+		thirdIdList := make([]string, 0)
+		lenCountryList := len(countryList) - 1
+
+		for countryIndex, v := range countryList {
+			fmt.Println(indexCode, "剩余", lenCountry-i, "条数据")
+			i++
+
+			// 开始处理
+			mergeNum++
+			thirdIdList = append(thirdIdList, strconv.Itoa(v.ThirdId))
+			if mergeNum < needMergeNum && countryIndex < lenCountryList {
+				continue
+			}
+			syncComTradeData(comTradeId, indexCode, indexNameCn, flowCode, strings.Join(thirdIdList, ","), dateType, year, month, codeMappingListMap, countryMap)
+
+			// 重置
+			mergeNum = 0
+			thirdIdList = make([]string, 0)
+
+			time.Sleep(1 * time.Second)
+		}
+
+	}
+	fmt.Println(indexCode, "结束了")
+}
+
+func SyncSingleComTradeData3() {
+	comTradeId := 7
+	year := 2022
+	month := 11
+	flowCode := "M"
+	indexCode := "290121"
+	indexNameCn := `乙烯(出口退税率13%)`
+	dateType := `month`
+	codeMappingListMap := make(map[string]string)
+	codeMappingList, err := models.GetAllComTradeCodeMappingList()
+	if err != nil {
+		return
+	}
+	for _, v := range codeMappingList {
+		codeMappingListMap[v.Code] = v.Name
+	}
+
+	countryMap, err := GetAllCountry()
+	if err != nil {
+		return
+	}
+
+	countryGroup := make(map[int][]models.ComTradeCountry)
+	for _, v := range countryMap {
+		togetherCountry := v.TogetherCountry
+		if dateType == "month" {
+			togetherCountry = v.MonthTogetherCountry
+		}
+		tmpList, ok := countryGroup[togetherCountry]
+		if !ok {
+			tmpList = make([]models.ComTradeCountry, 0)
+		}
+		countryGroup[togetherCountry] = append(tmpList, v)
+	}
+	//fmt.Println(countryGroup)
+
+	fmt.Println(indexCode, "开始了")
+
+	thirdIdStr := `849,192,12,296,212,473,234,364,879,580,698,20,582,850,316,568,459,697,866,540,4,280,288,461,658,44,430,598,798,868,92,180,536,810,574,266,841,16,140,148,652,334,637,660,232,760,471,332,520,548,516,839,414,531,200,64,166,581,837,221,592,500,466,292,336,48,886,290,80,120,262,583,795,612,836,258,530,736,838,368,8,28,129,278,90,800,184,674,588,492,887,230,570,534,776,239,527,891,0,356,729,226,324,876,626,720,426,654,590,312,772,706,50,304,457,796,408,434,624,454,474,254,532,584,10,132,835,662,666,717,260,728,398,711,238,890,899,74,388,585,472,58,577,647,659,638,862,732,535,86,175,636,694,162,384`
+
+	syncComTradeData(comTradeId, indexCode, indexNameCn, flowCode, thirdIdStr, dateType, year, month, codeMappingListMap, countryMap)
+
+	fmt.Println(indexCode, "结束了")
+}
+
+func syncComTradeData(comTradeId int, indexCode, indexNameCn, flowCode, partnerCode, dateType string, year, month int, codeMappingListMap map[string]string, countryMap map[int]models.ComTradeCountry) (err error) {
+	// 获取数据
+
+	//https://comtradeapi.un.org/public/v1/preview/C/A/HS?period=2021&partnerCode=842&cmdCode=290244&flowCode=X&customsCode=C00&motCode=0
+	params := make(map[string]string)
+	//period=2021&partnerCode=842
+	params["motCode"] = "0"       //运输方式
+	params["customsCode"] = "C00" //海关编码
+
+	params["cmdCode"] = indexCode       //指标code
+	params["flowCode"] = flowCode       //贸易流向,X:出口(Export);M:进口(Import)
+	params["partnerCode"] = partnerCode //进口国id
+
+	params["period"] = strconv.Itoa(year) //年份(月份)
+	dataTime := fmt.Sprint(year, "-12-31")
+	codeStr := "Y"
+	dataType := 1
+	if dateType == "month" {
+		monthStr := strconv.Itoa(month)
+		if month < 10 {
+			monthStr = "0" + monthStr
+		}
+		params["period"] = strconv.Itoa(year) + monthStr //年份(月份)
+		dataTime = fmt.Sprint(year, "-", monthStr, "-01")
+		dataTimeT, tmpErr := time.ParseInLocation(utils.FormatDate, dataTime, time.Local)
+		if tmpErr != nil {
+			fmt.Println(dataTime, "时间转换异常")
+			return
+		}
+		dataTime = dataTimeT.AddDate(0, 1, -1).Format(utils.FormatDate)
+		codeStr = "M"
+		dataType = 2
+	}
+	// 这是获取数据的链接(月度的)
+	comeData, err := queryComeTradeData(params, dateType)
+	if err != nil {
+		fmt.Println("读取失败", err)
+		return
+	}
+	//fmt.Println(comeData)
+	if comeData.Count >= 500 {
+		msg := fmt.Sprint(indexCode, ";数据超限了", ";年份:", year, ";月份:", month, ";flow:", flowCode, ";partnerCode:", partnerCode)
+		fmt.Println(msg)
+		fmt.Println(comeData.Count)
+		utils.FileLog.Info(msg)
+	} else if comeData.Count == -1 {
+		msg := fmt.Sprint(indexCode, ";获取数据失败,err:", comeData.Error, ";errObject:", comeData.ErrorObject, ";年份:", year, ";月份:", month, ";flow:", flowCode, ";partnerCode:", partnerCode)
+		fmt.Println(msg, comeData)
+		utils.FileLog.Info(msg)
+		return
+	}
+
+	listMap := make(map[string][]*models.ComTradeData, 0)
+	for _, v := range comeData.Data {
+		//fmt.Println(v)
+		var reporterName, partnerName, partner2Name, reporterCnName, partnerCnName, partner2CnName string
+		if reporter, ok := countryMap[v.ReporterCode]; ok {
+			reporterCnName = reporter.NameCn
+			reporterName = reporter.Name
+		}
+		if partner, ok := countryMap[v.PartnerCode]; ok {
+			partnerCnName = partner.NameCn
+			partnerName = partner.Name
+		}
+		if partner, ok := countryMap[v.Partner2Code]; ok {
+			partner2CnName = partner.NameCn
+			partner2Name = partner.Name
+		}
+
+		//ValueCode:HS+Reporter+trade flow+Partner+Value  例如:270730ChinaXUSAValue
+		//WeightCode:HS+Reporter+trade flow+Partner+Weight  ,例如:270730ChinaXUSAWeight
+		tmpIndexTradeCode := utils.TrimStr(fmt.Sprint(v.CmdCode, codeStr, reporterName, flowCode, partnerName, "2nd", partner2Name, "Value"))
+		tmpIndexNetWeightCode := utils.TrimStr(fmt.Sprint(v.CmdCode, codeStr, reporterName, flowCode, partnerName, "2nd", partner2Name, "Weight"))
+		tmpData := &models.ComTradeData{
+			ComTradeDataId:     0,
+			ComTradeId:         comTradeId,
+			IndexCode:          v.CmdCode,
+			Flow:               flowCode,
+			ReporterCode:       v.ReporterCode,
+			ReporterName:       reporterCnName,
+			PartnerCode:        v.PartnerCode,
+			PartnerName:        partnerCnName,
+			Partner2Code:       v.Partner2Code,
+			Partner2Name:       partner2CnName,
+			DateType:           dataType,
+			DataTime:           dataTime,
+			IndexTradeCode:     tmpIndexTradeCode,
+			TradeValue:         v.PrimaryValue,
+			IndexNetWeightCode: tmpIndexNetWeightCode,
+			NetWeightValue:     v.NetWgt,
+			ModifyTime:         time.Now(),
+			CreateTime:         time.Now(),
+		}
+
+		tmpList, ok := listMap[v.CmdCode]
+		if !ok {
+			tmpList = make([]*models.ComTradeData, 0)
+		}
+		listMap[v.CmdCode] = append(tmpList, tmpData)
+
+		//指标关系
+		{
+
+			tmpName := indexNameCn + "年度" + reporterCnName
+			if dateType == "month" {
+				tmpName = indexNameCn + "月度" + reporterCnName
+			}
+
+			flow := ``
+			if tmpData.Flow == `X` {
+				flow = "出口"
+			} else {
+				flow = "进口"
+			}
+			tmpName += flow
+
+			finalpartnerName := ``
+			if partnerCnName == partner2CnName {
+				if partnerCnName == "世界" {
+					//若对手国和第二对手国是world时,则翻译为总量;
+					finalpartnerName = "总量"
+				} else {
+					//若对手国或第二对手国是相同的,只需翻译一个;
+					finalpartnerName = partnerCnName
+				}
+			} else {
+				if partnerCnName == "世界" || partner2CnName == "世界" {
+					//若对手国或第二对手国是world的,只需翻译非world的对手国;
+					if partnerCnName == "世界" {
+						finalpartnerName = partner2CnName
+					} else {
+						finalpartnerName = partnerCnName
+					}
+				} else {
+					//若对手国和第二对手国不一样,翻译成:对手国和第二对手国
+					finalpartnerName = partnerCnName + "和" + partner2CnName
+				}
+			}
+			tmpName += finalpartnerName
+			//fmt.Println(tmpData.IndexTradeCode)
+			//fmt.Println(tmpName)
+
+			valueName := tmpName + "贸易金额"
+			weightName := tmpName + "贸易重量"
+
+			if name, ok := codeMappingListMap[tmpData.IndexTradeCode]; !ok {
+				comTradeCodeMappingType := 1
+				if codeStr == "M" {
+					comTradeCodeMappingType = 3
+				}
+				tmpComTradeCodeMapping := &models.ComTradeCodeMapping{
+					Code:       tmpData.IndexTradeCode,
+					IndexCode:  tmpData.IndexCode,
+					Type:       comTradeCodeMappingType,
+					Name:       valueName,
+					CreateTime: time.Now(),
+				}
+
+				tmpErr := models.AddComTradeCodeMapping(tmpComTradeCodeMapping)
+				if tmpErr != nil {
+					fmt.Println(indexCode, "添加贸易金额失败,err:", err)
+				} else {
+					codeMappingListMap[tmpData.IndexTradeCode] = valueName
+				}
+			} else {
+				if name != valueName {
+					tmpComTradeCodeMapping := &models.ComTradeCodeMapping{
+						Code: tmpData.IndexTradeCode,
+						Name: valueName,
+					}
+					e := models.UpdateComTradeCodeMapping(tmpComTradeCodeMapping, []string{"Name"})
+					if e != nil {
+						err = e
+						return
+					}
+					utils.FileLog.Info("更新指标名称", "旧:"+name, "新:"+valueName, "code:"+tmpData.IndexTradeCode)
+					fmt.Println("更新指标名称", "旧:"+name, "新:"+valueName)
+				}
+			}
+
+			if name, ok := codeMappingListMap[tmpData.IndexNetWeightCode]; !ok {
+				comTradeCodeMappingType := 2
+				if codeStr == "M" {
+					comTradeCodeMappingType = 3
+				}
+				tmpComTradeCodeMapping := &models.ComTradeCodeMapping{
+					Code:       tmpData.IndexNetWeightCode,
+					IndexCode:  tmpData.IndexCode,
+					Type:       comTradeCodeMappingType,
+					Name:       weightName,
+					CreateTime: time.Now(),
+				}
+				tmpErr := models.AddComTradeCodeMapping(tmpComTradeCodeMapping)
+				if tmpErr != nil {
+					fmt.Println(indexCode, "添加贸易重量失败,err:", err)
+				} else {
+					codeMappingListMap[tmpData.IndexNetWeightCode] = weightName
+				}
+			} else {
+				if name != weightName {
+					tmpComTradeCodeMapping := &models.ComTradeCodeMapping{
+						Code: tmpData.IndexTradeCode,
+						Name: valueName,
+					}
+					e := models.UpdateComTradeCodeMapping(tmpComTradeCodeMapping, []string{"Name"})
+					if e != nil {
+						err = e
+						return
+					}
+					utils.FileLog.Info("更新指标名称", "旧:"+name, "新:"+valueName, "code:"+tmpData.IndexNetWeightCode)
+					fmt.Println("更新指标名称", "旧:"+name, "新:"+valueName)
+				}
+			}
+		}
+	}
+
+	for indexCode, list := range listMap {
+		models.HandleComTradeData(list, indexCode, flowCode, dataTime, partnerCode)
+	}
+
+	return
+}
+
+// queryComeTradeData 接口请求网站数据
+func queryComeTradeData(params map[string]string, dateType string) (comTradeResp ComTradeResp, err error) {
+	//ComTradeUrl
+	// 待签名字符串
+	paramStr := ``
+	for index, val := range params {
+		paramStr += index + `=` + val + `&`
+	}
+	paramStr = paramStr[:len(paramStr)-1]
+	urlStr := ComTradeUrl + paramStr
+	if dateType == "month" {
+		urlStr = ComTradeMonthUrl + paramStr
+	}
+	//fmt.Println("urlStr:", urlStr)
+	body, err := http.Get(urlStr)
+	if err != nil {
+		fmt.Println("err:", err)
+	}
+	//utils.FileLog.Info("queryComeTradeData 数据:" + ComTradeUrl + paramStr)
+	err = json.Unmarshal(body, &comTradeResp)
+	return
+}
+
+type ComTradeResp struct {
+	ElapsedTime string `json:"elapsedTime"`
+	Count       int    `json:"count"`
+	Data        []struct {
+		TypeCode                 string      `json:"typeCode"`
+		FreqCode                 string      `json:"freqCode"`
+		RefPeriodId              int         `json:"refPeriodId"`
+		RefYear                  int         `json:"refYear"`
+		RefMonth                 int         `json:"refMonth"`
+		Period                   string      `json:"period"`
+		ReporterCode             int         `json:"reporterCode"`
+		ReporterISO              interface{} `json:"reporterISO"`
+		ReporterDesc             interface{} `json:"reporterDesc"`
+		FlowCode                 string      `json:"flowCode"`
+		FlowDesc                 interface{} `json:"flowDesc"`
+		PartnerCode              int         `json:"partnerCode"`
+		PartnerISO               interface{} `json:"partnerISO"`
+		PartnerDesc              interface{} `json:"partnerDesc"`
+		Partner2Code             int         `json:"partner2Code"`
+		Partner2ISO              interface{} `json:"partner2ISO"`
+		Partner2Desc             interface{} `json:"partner2Desc"`
+		ClassificationCode       string      `json:"classificationCode"`
+		ClassificationSearchCode string      `json:"classificationSearchCode"`
+		IsOriginalClassification bool        `json:"isOriginalClassification"`
+		CmdCode                  string      `json:"cmdCode"`
+		CmdDesc                  interface{} `json:"cmdDesc"`
+		AggrLevel                int         `json:"aggrLevel"`
+		IsLeaf                   interface{} `json:"isLeaf"`
+		CustomsCode              string      `json:"customsCode"`
+		CustomsDesc              interface{} `json:"customsDesc"`
+		MosCode                  string      `json:"mosCode"`
+		MotCode                  int         `json:"motCode"`
+		MotDesc                  interface{} `json:"motDesc"`
+		QtyUnitCode              int         `json:"qtyUnitCode"`
+		QtyUnitAbbr              interface{} `json:"qtyUnitAbbr"`
+		Qty                      float64     `json:"qty"`
+		IsQtyEstimated           bool        `json:"isQtyEstimated"`
+		AltQtyUnitCode           int         `json:"altQtyUnitCode"`
+		AltQtyUnitAbbr           interface{} `json:"altQtyUnitAbbr"`
+		AltQty                   float64     `json:"altQty"`
+		IsAltQtyEstimated        bool        `json:"isAltQtyEstimated"`
+		NetWgt                   float64     `json:"netWgt"`
+		IsNetWgtEstimated        bool        `json:"isNetWgtEstimated"`
+		GrossWgt                 float64     `json:"grossWgt"`
+		IsGrossWgtEstimated      bool        `json:"isGrossWgtEstimated"`
+		Cifvalue                 float64     `json:"cifvalue"`
+		Fobvalue                 float64     `json:"fobvalue"`
+		PrimaryValue             float64     `json:"primaryValue"`
+		LegacyEstimationFlag     int         `json:"legacyEstimationFlag"`
+		IsReported               bool        `json:"isReported"`
+		IsAggregate              bool        `json:"isAggregate"`
+	} `json:"data"`
+	Error       interface{} `json:"error"`
+	ErrorObject interface{} `json:"errorObject"`
+}
+
+func GetAllCountry() (countryMap map[int]models.ComTradeCountry, err error) {
+	countryMap = make(map[int]models.ComTradeCountry)
+	tmpList, err := models.GetComTradeCountryAll()
+	if err != nil {
+		return
+	}
+
+	for _, v := range tmpList {
+		countryMap[v.ThirdId] = *v
+	}
+
+	return
+}
+
+func syncAllComTradeMapping() (err error) {
+	codeMappingListMap := make(map[string]bool)
+	codeMappingList, err := models.GetAllComTradeCodeMappingList()
+	if err != nil {
+		return
+	}
+	for _, v := range codeMappingList {
+		codeMappingListMap[v.Code] = true
+	}
+
+	comTradeIndexMap := make(map[string]string)
+	comTradeIndexList, err := models.GetAllComTradeIndexList()
+	if err != nil {
+		return
+	}
+	for _, v := range comTradeIndexList {
+		comTradeIndexMap[v.IndexCode] = v.IndexNameCn
+	}
+
+	list, err := models.GetAllComTradeDataList()
+	if err != nil {
+		return
+	}
+
+	countryMap, err := GetAllCountry()
+	if err != nil {
+		return
+	}
+
+	lenList := len(list)
+	fmt.Println("总共", lenList, "条")
+	for k, v := range list {
+		fmt.Println("剩余:", lenList-k-1, "条")
+		var reporterName, partnerName, partner2Name string
+		if reporter, ok := countryMap[v.ReporterCode]; ok {
+			reporterName = reporter.Name
+		}
+		if partner, ok := countryMap[v.PartnerCode]; ok {
+			partnerName = partner.Name
+		}
+		if partner, ok := countryMap[v.Partner2Code]; ok {
+			partner2Name = partner.Name
+		}
+
+		tmpValueCode := fmt.Sprint(v.IndexCode, "Y", reporterName, v.Flow, partnerName, "2nd", partner2Name, "Value")
+		tmpNetWeightCode := fmt.Sprint(v.IndexCode, "Y", reporterName, v.Flow, partnerName, "2nd", partner2Name, "Weight")
+		//v.IndexTradeCode = utils.TrimStr(tmpValueCode)
+		//v.IndexNetWeightCode = utils.TrimStr(tmpNetWeightCode)
+		//v.Update([]string{"IndexTradeCode", "IndexNetWeightCode"})
+
+		models.UpdateComTradeData(utils.TrimStr(tmpValueCode), utils.TrimStr(tmpNetWeightCode), v.IndexTradeCode)
+	}
+	fmt.Println("整体结束了=============")
+	return
+}
+
+func syncAllComTradeMapping2() (err error) {
+	codeMappingListMap := make(map[string]bool)
+	codeMappingList, err := models.GetAllComTradeCodeMappingList()
+	if err != nil {
+		return
+	}
+	for _, v := range codeMappingList {
+		codeMappingListMap[v.Code] = true
+	}
+
+	comTradeIndexMap := make(map[string]string)
+	comTradeIndexList, err := models.GetAllComTradeIndexList()
+	if err != nil {
+		return
+	}
+	for _, v := range comTradeIndexList {
+		comTradeIndexMap[v.IndexCode] = v.IndexNameCn
+	}
+
+	list, err := models.GetAllComTradeDataList()
+	if err != nil {
+		return
+	}
+
+	countryMap, err := GetAllCountry()
+	if err != nil {
+		return
+	}
+
+	lenList := len(list)
+	fmt.Println("总共", lenList, "条")
+
+	dataList := make([]*models.ComTradeCodeMapping, 0)
+	for k, v := range list {
+		fmt.Println("剩余:", lenList-k-1, "条")
+		var reporterName string
+		if reporter, ok := countryMap[v.ReporterCode]; ok {
+			reporterName = reporter.NameCn
+		}
+		tmpName := ``
+		if comTradeIndexName, ok := comTradeIndexMap[v.IndexCode]; ok {
+			tmpName = comTradeIndexName
+		}
+		tmpName += reporterName
+
+		flow := ``
+		if v.Flow == `X` {
+			flow = "出口"
+		} else {
+			flow = "进口"
+		}
+		tmpName += flow
+
+		valueName := tmpName + "贸易金额"
+		weightName := tmpName + "贸易重量"
+
+		if _, ok := codeMappingListMap[v.IndexTradeCode]; !ok {
+			tmpData := &models.ComTradeCodeMapping{
+				Code:       v.IndexTradeCode,
+				IndexCode:  v.IndexCode,
+				Type:       1,
+				Name:       valueName,
+				CreateTime: time.Now(),
+			}
+			dataList = append(dataList, tmpData)
+			codeMappingListMap[v.IndexTradeCode] = true
+			//tmpErr := models.AddComTradeCodeMapping(tmpData)
+			//if tmpErr != nil {
+			//	fmt.Println(indexCode, "添加贸易金额失败,err:", err)
+			//} else {
+			//	codeMappingListMap[v.IndexTradeCode] = true
+			//}
+		}
+
+		if _, ok := codeMappingListMap[v.IndexNetWeightCode]; !ok {
+			tmpData := &models.ComTradeCodeMapping{
+				Code:       v.IndexNetWeightCode,
+				IndexCode:  v.IndexCode,
+				Type:       2,
+				Name:       weightName,
+				CreateTime: time.Now(),
+			}
+			dataList = append(dataList, tmpData)
+			codeMappingListMap[v.IndexNetWeightCode] = true
+			//tmpErr := models.AddComTradeCodeMapping(tmpData)
+			//if tmpErr != nil {
+			//	fmt.Println(indexCode, "添加贸易重量失败,err:", err)
+			//} else {
+			//	codeMappingListMap[v.IndexNetWeightCode] = true
+			//}
+		}
+
+		if len(dataList) >= 2000 {
+			tmpErr := models.AddMultiComTradeCodeMapping(dataList)
+			if tmpErr != nil {
+				fmt.Println(indexCode, "添加贸易重量失败,err:", tmpErr)
+			}
+			dataList = make([]*models.ComTradeCodeMapping, 0)
+		}
+	}
+
+	if len(dataList) > 0 {
+		tmpErr := models.AddMultiComTradeCodeMapping(dataList)
+		if tmpErr != nil {
+			fmt.Println(indexCode, "添加贸易重量失败,err:", tmpErr)
+		}
+		dataList = make([]*models.ComTradeCodeMapping, 0)
+	}
+	fmt.Println("整体结束了=============")
+	return
+}
+
+func syncAllComTradeMapping3() {
+	codeMappingListMap := make(map[string]*models.ComTradeCodeMapping)
+	codeMappingList, err := models.GetAllComTradeCodeMappingList()
+	if err != nil {
+		return
+	}
+	for _, v := range codeMappingList {
+		codeMappingListMap[v.Code] = v
+	}
+
+	comTradeIndexMap := make(map[string]string)
+	comTradeIndexList, err := models.GetAllComTradeIndexList()
+	if err != nil {
+		return
+	}
+	for _, v := range comTradeIndexList {
+		comTradeIndexMap[v.IndexCode] = v.IndexNameCn
+	}
+
+	list, err := models.GetAllComTradeDataList()
+	if err != nil {
+		return
+	}
+
+	countryMap, err := GetAllCountry()
+	if err != nil {
+		return
+	}
+
+	lenList := len(list)
+	fmt.Println("总共", lenList, "条")
+
+	dataList := make([]*models.ComTradeCodeMapping, 0)
+	for k, v := range list {
+		fmt.Println("剩余:", lenList-k-1, "条")
+		var reporterCnName, partnerCnName, partner2CnName string
+		if reporter, ok := countryMap[v.ReporterCode]; ok {
+			reporterCnName = reporter.NameCn
+		}
+		if partner, ok := countryMap[v.PartnerCode]; ok {
+			partnerCnName = partner.NameCn
+		}
+		if partner, ok := countryMap[v.Partner2Code]; ok {
+			partner2CnName = partner.NameCn
+		}
+
+		indexNameCn := comTradeIndexMap[v.IndexCode]
+		if indexNameCn == "" {
+			fmt.Println(indexNameCn)
+			fmt.Println(v.IndexCode)
+		}
+		codeStr := "Y"
+		tmpName := indexNameCn + "年度" + reporterCnName
+		if v.DateType == 2 {
+			codeStr = "M"
+			tmpName = indexNameCn + "月度" + reporterCnName
+		}
+		flow := ``
+		if v.Flow == `X` {
+			flow = "出口"
+		} else {
+			flow = "进口"
+		}
+		tmpName += flow
+
+		finalpartnerName := ``
+		if partnerCnName == partner2CnName {
+			if partnerCnName == "世界" {
+				//若对手国和第二对手国是world时,则翻译为总量;
+				finalpartnerName = "总量"
+			} else {
+				//若对手国或第二对手国是相同的,只需翻译一个;
+				finalpartnerName = partnerCnName
+			}
+		} else {
+			if partnerCnName == "世界" || partner2CnName == "世界" {
+				//若对手国或第二对手国是world的,只需翻译非world的对手国;
+				if partnerCnName == "世界" {
+					finalpartnerName = partner2CnName
+				} else {
+					finalpartnerName = partnerCnName
+				}
+			} else {
+				//若对手国和第二对手国不一样,翻译成:对手国和第二对手国
+				finalpartnerName = partnerCnName + "和" + partner2CnName
+			}
+		}
+		tmpName += finalpartnerName
+
+		valueName := tmpName + "贸易金额"
+		weightName := tmpName + "贸易重量"
+
+		if _, ok := codeMappingListMap[v.IndexTradeCode]; !ok {
+			comTradeCodeMappingType := 1
+			if codeStr == "M" {
+				comTradeCodeMappingType = 3
+			}
+			tmpData := &models.ComTradeCodeMapping{
+				Code:       v.IndexTradeCode,
+				IndexCode:  v.IndexCode,
+				Type:       comTradeCodeMappingType,
+				Name:       valueName,
+				CreateTime: time.Now(),
+			}
+			dataList = append(dataList, tmpData)
+			codeMappingListMap[v.IndexTradeCode] = tmpData
+			//tmpErr := models.AddComTradeCodeMapping(tmpData)
+			//if tmpErr != nil {
+			//	fmt.Println(indexCode, "添加贸易金额失败,err:", err)
+			//} else {
+			//	codeMappingListMap[v.IndexTradeCode] = true
+			//}
+		}
+
+		if _, ok := codeMappingListMap[v.IndexNetWeightCode]; !ok {
+			comTradeCodeMappingType := 2
+			if codeStr == "M" {
+				comTradeCodeMappingType = 4
+			}
+			tmpData := &models.ComTradeCodeMapping{
+				Code:       v.IndexNetWeightCode,
+				IndexCode:  v.IndexCode,
+				Type:       comTradeCodeMappingType,
+				Name:       weightName,
+				CreateTime: time.Now(),
+			}
+			dataList = append(dataList, tmpData)
+			codeMappingListMap[v.IndexNetWeightCode] = tmpData
+			//tmpErr := models.AddComTradeCodeMapping(tmpData)
+			//if tmpErr != nil {
+			//	fmt.Println(indexCode, "添加贸易重量失败,err:", err)
+			//} else {
+			//	codeMappingListMap[v.IndexNetWeightCode] = true
+			//}
+		}
+
+		if len(dataList) >= 2000 {
+			tmpErr := models.AddMultiComTradeCodeMapping(dataList)
+			if tmpErr != nil {
+				fmt.Println(indexCode, "添加贸易重量失败,err:", tmpErr)
+			}
+			dataList = make([]*models.ComTradeCodeMapping, 0)
+		}
+	}
+
+	if len(dataList) > 0 {
+		tmpErr := models.AddMultiComTradeCodeMapping(dataList)
+		if tmpErr != nil {
+			fmt.Println(indexCode, "添加贸易重量失败,err:", tmpErr)
+		}
+		dataList = make([]*models.ComTradeCodeMapping, 0)
+	}
+	fmt.Println("整体结束了=============")
+	return
+}

+ 9 - 0
services/task.go

@@ -7,6 +7,11 @@ import (
 )
 
 func Task() {
+	//sync3()
+	//syncAllComTradeMapping()
+	//syncAllComTradeMapping2()
+	//syncAllComTradeMapping3()
+	//return
 	fmt.Println("start crawler")
 	SyncRankingFromShangHai()
 	FileCoalCoastal()
@@ -16,6 +21,8 @@ func Task() {
 	refreshCoal := task.NewTask("refreshData", "0 0,30 17-23 * * *", RefreshCoal)
 	refreshVisitors := task.NewTask("RefreshChangesVisitorsCovid", "0 30 2-22/10 * * *", RefreshChangesVisitorsCovid)
 	syncEiaSteoData := task.NewTask("SyncEiaSteoData", "0 0 22 * * *", SyncEiaSteoData)
+	syncYearComTrade := task.NewTask("SyncEiaSteoData", "0 0 3 1 1 *", SyncYearComTrade)           // 每年一月一号同步
+	syncYearMonthComTrade := task.NewTask("SyncEiaSteoData", "0 0 3 1 * *", SyncYearMonthComTrade) // 每月1号同步
 
 	// 统计局-分月季年爬
 	//refreshNationalMonthA := task.NewTask("RefreshNationalMonthDbA", "0 15 2 10 * *", national_data.RefreshNationalMonthDbA)
@@ -29,6 +36,8 @@ func Task() {
 	task.AddTask("中国煤炭网爬取", refreshCoal)
 	task.AddTask("谷歌出行指数爬取", refreshVisitors)
 	task.AddTask("eia steo报告", syncEiaSteoData) //每天22点爬一次
+	task.AddTask("UN年度数据", syncYearComTrade)      //每年一月一号的3点同步
+	task.AddTask("UN月度数据", syncYearMonthComTrade) //每月1号的3点同步
 
 	//task.AddTask("统计局数据爬取-月度A", refreshNationalMonthA) // 每月10号2:15执行
 	//task.AddTask("统计局数据爬取-月度B", refreshNationalMonthB) // 每月16号2:15执行