Browse Source

Merge remote-tracking branch 'origin/master'

Roc 1 year ago
parent
commit
dd76d64e22

+ 129 - 0
models/data_manage/base_from_icpi.go

@@ -0,0 +1,129 @@
+package data_manage
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
+)
+
+type BaseFromIcpiIndex struct {
+	BaseFromIcpiIndexId    int       `orm:"column(base_from_icpi_index_id);pk"`
+	BaseFromIcpiClassifyId int       `description:"分类id"`
+	IndexCode              string    `description:"指标编码"`
+	IndexName              string    `description:"指标名称"`
+	Frequency              string    `description:"频度"`
+	StartDate              time.Time `description:"开始日期"`
+	EndDate                time.Time `description:"结束日期"`
+	CreateTime             time.Time `description:"创建时间"`
+	ModifyTime             time.Time `description:"修改时间"`
+}
+
+func GetBaseFromIcpiIndexMaxDate() (max_date time.Time, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT max(a.data_time)as max_date FROM base_from_icpi_data as a `
+	err = o.Raw(sql).QueryRow(&max_date)
+	return
+}
+
+type IcpiIndexResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    []*BaseFromIcpiIndex
+}
+
+func GetBaseFromIcpiIndexAll(dateStr string) (list []*BaseFromIcpiIndex, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_icpi_index WHERE end_date>=?`
+	_, err = o.Raw(sql, dateStr).QueryRows(&list)
+	return
+}
+
+func (obj *BaseFromIcpiIndex) AddBaseFromIcpiIndex(item *BaseFromIcpiIndex) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+type BaseFromIcpiClassify struct {
+	BaseFromIcpiClassifyId int    `orm:"column(base_from_icpi_classify_id);pk"`
+	ClassifyName           string `description:"分类名称"`
+	ClassifyNameEn         string `description:"英文名称"`
+	ParentId               int    `description:"上级id"`
+	CreateTime             string `description:"创建时间"`
+	ModifyTime             string `description:"修改时间"`
+}
+
+type IcpiClassifyResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    []*BaseFromIcpiClassify
+}
+
+func GetBaseFromIcpiClassifyAll() (list []*BaseFromIcpiClassify, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_icpi_classify `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+func AddBaseFromIcpiClassify(item *BaseFromIcpiClassify) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+// GetBaseFromComTradeMaxDate 获取ICPI消费者指数最大数据
+func GetBaseFromIcpiMaxDate() (max_date time.Time, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT max(a.create_time)as max_date FROM base_from_icpi_data as a `
+	err = o.Raw(sql).QueryRow(&max_date)
+	return
+}
+
+type BaseFromIcpiData struct {
+	BaseFromIcpiDataId  int       `orm:"column(base_from_icpi_data_id);pk"`
+	BaseFromIcpiIndexId int       `description:"指标id"`
+	IndexCode           string    `description:"指标编码"`
+	DataTime            string    `description:"日期"`
+	Value               string    `description:"值"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"修改时间"`
+}
+
+// GetAllComTradeDataList 获取ICPI消费者指数数据
+func GetAllBaseFromIcpiDataList(startDate string) (list []*BaseFromIcpiData, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_icpi_data WHERE create_time>=?  ORDER BY base_from_icpi_data_id ASC `
+	_, err = o.Raw(sql, startDate).QueryRows(&list)
+	return
+}
+
+type BaseFromIcpiDataResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    BaseFromIcpiDataIndexAndDataResp
+}
+
+// ComTradeIndexDataResp 分页列表响应体
+type BaseFromIcpiDataIndexAndDataResp struct {
+	List   []*BaseFromIcpiData
+	Paging *paging.PagingItem `description:"分页数据"`
+}
+
+// MultiAddBaseFromComTradeData 批量添加数据
+func MultiAddBaseFromIcpiDataIndex(items []*BaseFromIcpiData) (lastId int64, err error) {
+	num := len(items)
+	if num <= 0 {
+		return
+	}
+	o := orm.NewOrm()
+	lastId, err = o.InsertMulti(num, items)
+
+	return
+}

+ 154 - 0
models/data_manage/base_from_trade_guangzhou.go

@@ -0,0 +1,154 @@
+package data_manage
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
+)
+
+type BaseFromTradeGuangzhouIndex struct {
+	BaseFromTradeGuangzhouIndexId    int       `orm:"column(base_from_trade_guangzhou_index_id);pk"`
+	BaseFromTradeGuangzhouClassifyId int       `description:"分类id"`
+	IndexCode                        string    `description:"指标编码"`
+	IndexName                        string    `description:"指标名称"`
+	Frequency                        string    `description:"频率"`
+	Unit                             string    `description:"单位"`
+	StartDate                        string    `description:"开始日期"`
+	EndDate                          string    `description:"结束日期"`
+	CreateTime                       time.Time `description:"创建日期"`
+	ModifyTime                       time.Time `description:"修改日期"`
+}
+
+func AddBaseFromTradeGuangzhouIndex(item *BaseFromTradeGuangzhouIndex) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+func GetBaseFromTradeGuangzhouIndexAll() (list []*BaseFromTradeGuangzhouIndex, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_trade_guangzhou_index `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+type GuangzhouIndexResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    []*BaseFromTradeGuangzhouIndex
+}
+
+type BaseFromTradeGuangzhouClassify struct {
+	BaseFromTradeGuangzhouClassifyId int       `orm:"column(base_from_trade_guangzhou_classify_id);pk"`
+	ClassifyName                     string    `description:"分类名称"`
+	ClassifyCode                     string    `description:"分类编码"`
+	ParentId                         int       `description:"分类父级id"`
+	ModifyTime                       time.Time `description:"修改时间"`
+	CreateTime                       time.Time `description:"创建时间"`
+}
+
+type GuangzhouClassifyResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    []*BaseFromTradeGuangzhouClassify
+}
+
+func GetBaseFromTradeGuangzhouClassifyAll() (list []*BaseFromTradeGuangzhouClassify, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_trade_guangzhou_classify `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+func AddBaseFromTradeGuangzhouClassify(item *BaseFromTradeGuangzhouClassify) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}
+
+type BaseFromTradeGuangzhouContract struct {
+	BaseFromTradeGuangzhouContractId int    `orm:"column(base_from_trade_guangzhou_contract_id);pk"`
+	BaseFromTradeGuangzhouClassifyId int    `description:"分类id"`
+	ClassifyCode                     string `description:"分类编码"`
+	Contract                         string `description:"合约编码"`
+	TradeDate                        string `description:"合约日期"`
+}
+
+// 新增合约
+func (obj *BaseFromTradeGuangzhouIndex) AddBaseFromTradeGuangzhouContract(item *BaseFromTradeGuangzhouContract) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Insert(item)
+	return
+}
+
+type GuangzhouContractResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    []*BaseFromTradeGuangzhouContract
+}
+
+func GetBaseFromTradeGuangzhouContractAll() (list []*BaseFromTradeGuangzhouContract, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_trade_guangzhou_contract `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// GetBaseFromComTradeMaxDate 获取广州期货交易所最大数据
+func GetBaseFromTradeGuangzhouMaxDate() (max_date time.Time, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT max(a.create_time)as max_date FROM base_from_trade_guangzhou_data as a `
+	err = o.Raw(sql).QueryRow(&max_date)
+	return
+}
+
+type BaseFromTradeGuangzhouData struct {
+	BaseFromTradeGuangzhouDataId  int       `orm:"column(base_from_trade_guangzhou_data_id);pk"`
+	BaseFromTradeGuangzhouIndexId int       `description:"指标id"`
+	IndexCode                     string    `description:"指标编码"`
+	DataTime                      string    `description:"数据日期"`
+	Value                         float64   `description:"数据值"`
+	QtySub                        float64   `description:"增减"`
+	CreateTime                    time.Time `description:"创建日期"`
+	ModifyTime                    time.Time `description:"修改日期"`
+}
+
+// GetAllComTradeDataList 获取广州期货交易所数据
+func GetAllBaseFromTradeGuangzhouDataList(startDate string) (list []*BaseFromTradeGuangzhouData, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM base_from_trade_guangzhou_data WHERE create_time>=?  ORDER BY base_from_trade_guangzhou_data_id ASC `
+	_, err = o.Raw(sql, startDate).QueryRows(&list)
+	return
+}
+
+type BaseFromTradeGuangzhouDataResp struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    BaseFromTradeGuangzhouIndexAndDataResp
+}
+
+// ComTradeIndexDataResp 分页列表响应体
+type BaseFromTradeGuangzhouIndexAndDataResp struct {
+	List   []*BaseFromTradeGuangzhouData
+	Paging *paging.PagingItem `description:"分页数据"`
+}
+
+// MultiAddBaseFromComTradeData 批量添加数据
+func MultiAddBaseFromTradeGuangzhouData(items []*BaseFromTradeGuangzhouData) (lastId int64, err error) {
+	num := len(items)
+	if num <= 0 {
+		return
+	}
+	o := orm.NewOrm()
+	lastId, err = o.InsertMulti(num, items)
+
+	return
+}

+ 10 - 0
models/db.go

@@ -111,6 +111,16 @@ func initEdbDataTable() {
 		new(data_manage.ComTradeCodeMapping),  // 联合国指标关系表
 		new(data_manage.ComTradeData),         // 联合国数据表
 		new(data_manage.MeetingProbabilities), // 联储加息概率
+
+		//广期所
+		new(data_manage.BaseFromTradeGuangzhouClassify),
+		new(data_manage.BaseFromTradeGuangzhouContract),
+		new(data_manage.BaseFromTradeGuangzhouIndex),
+		new(data_manage.BaseFromTradeGuangzhouData),
+		//ICPI
+		new(data_manage.BaseFromIcpiIndex),
+		new(data_manage.BaseFromIcpiClassify),
+		new(data_manage.BaseFromIcpiData),
 	)
 }
 

+ 2 - 0
services/data/base_edb_lib.go

@@ -74,6 +74,8 @@ func RefreshEdbData(edbInfoId, source, subSource int, edbCode, startDate string)
 		urlStr = "national_statistics/refresh"
 	case utils.DATA_SOURCE_FUBAO:
 		urlStr = "fubao/refresh"
+	case utils.DATA_SOURCE_GFEX:
+		urlStr = "gz/refresh"
 	default:
 		urlStr = data_manage.EdbDataRefreshMethodMap[source] // 没有对应的从edb_source中取
 	}

+ 44 - 0
services/data/edb_info.go

@@ -1195,3 +1195,47 @@ func RefreshDataFromFubao(wg *sync.WaitGroup) (err error) {
 	fmt.Println("Fubao刷新结束")
 	return err
 }
+
+// RefreshDataFromDl 刷新广期所数据
+func RefreshDataFromGz(wg *sync.WaitGroup) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("RefreshDataFromGz Err:" + err.Error())
+			go alarm_msg.SendAlarmMsg("RefreshDataFromGz ErrMsg:"+err.Error(), 3)
+		}
+		wg.Done()
+	}()
+	var condition string
+	var pars []interface{}
+	condition += " AND source=? "
+	pars = append(pars, utils.DATA_SOURCE_GFEX)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars, 0)
+	if err != nil {
+		return errors.New("GetEdbInfoByCondition:" + err.Error())
+	}
+
+	for _, v := range items {
+		startDate := ""
+		if v.Frequency == "日度" {
+			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		} else if v.Frequency == "周度" {
+			startDate = v.EndDate.AddDate(0, 0, -(utils.DATA_REFRESH * 7)).Format(utils.FormatDate)
+		} else if v.Frequency == "月度" {
+			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH, 0).Format(utils.FormatDate)
+		} else if v.Frequency == "季度" {
+			startDate = v.EndDate.AddDate(0, -utils.DATA_REFRESH*3, 0).Format(utils.FormatDate)
+		} else if v.Frequency == "年度" {
+			startDate = v.EndDate.AddDate(-utils.DATA_REFRESH, 0, 0).Format(utils.FormatDate)
+		} else {
+			startDate = v.EndDate.AddDate(0, 0, -utils.DATA_REFRESH).Format(utils.FormatDate)
+		}
+		resp, err := RefreshEdbData(v.EdbInfoId, v.Source, v.SubSource, v.EdbCode, startDate)
+		if err != nil {
+			return errors.New("RefreshEdbData Err:" + err.Error())
+		}
+		if resp.Ret != 200 {
+			return errors.New("RefreshEdbData Err:" + resp.Msg + ";ErrMsg:" + resp.ErrMsg)
+		}
+	}
+	return err
+}

+ 174 - 0
services/icpi.go

@@ -0,0 +1,174 @@
+package services
+
+import (
+	"encoding/json"
+	"errors"
+	"eta/eta_task/models/data_manage"
+	"eta/eta_task/utils"
+	"fmt"
+	"time"
+)
+
+// ICPI消费指数指标数据同步
+func SyncBaseFromIcpi() (err error) {
+	var startDate string
+	maxDate, err := data_manage.GetBaseFromIcpiIndexMaxDate()
+	if err != nil || maxDate.IsZero() {
+		startDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDate) + " 00:00:00"
+	} else {
+		startDate = maxDate.AddDate(0, 0, 1).Format(utils.FormatDate) + " 00:00:00"
+	}
+
+	method := `index/list`
+	data := make(map[string]interface{})
+	data["Source"] = utils.DATA_SOURCE_ICPI
+	data["StartDate"] = startDate
+	//data["EndDate"] = endDate
+	result, err := HttpPost("SyncRankingFromIcpi", method, data)
+	utils.FileLog.Info(result)
+	fmt.Println(result)
+
+	respObj := new(data_manage.IcpiIndexResp)
+	err = json.Unmarshal([]byte(result), &respObj)
+	if err != nil {
+		return err
+	}
+	//获取所有指标信息  某一天的
+	allIndex, err := data_manage.GetBaseFromIcpiIndexAll(startDate)
+	if err != nil {
+		return
+	}
+
+	existIndexMap := make(map[int]*data_manage.BaseFromIcpiIndex)
+	for _, v := range allIndex {
+		existIndexMap[v.BaseFromIcpiIndexId] = v
+	}
+
+	icpiObj := new(data_manage.BaseFromIcpiIndex)
+
+	for _, zv := range respObj.Data {
+		if _, ok := existIndexMap[zv.BaseFromIcpiIndexId]; !ok {
+			newID, err := icpiObj.AddBaseFromIcpiIndex(zv)
+			if err != nil {
+				fmt.Println("insert error:", err)
+			}
+			fmt.Println("insert new indexID:", newID)
+		}
+	}
+	return err
+}
+
+// ICPI消费指数-分类
+func SyncBaseFromIcpiClassify() (err error) {
+	data := make(map[string]interface{})
+	data["Source"] = utils.DATA_SOURCE_ICPI
+	method := `classify/list`
+	result, err := HttpPost("SyncBaseFromIcpiClassify", method, data)
+	if err != nil {
+		fmt.Println("SyncBaseFromIcpiClassify HttpPost Err:", err.Error())
+	}
+	utils.FileLog.Info(result)
+	fmt.Println("SyncBaseFromIcpiClassify result:", result)
+
+	respObj := new(data_manage.IcpiClassifyResp)
+	err = json.Unmarshal([]byte(result), &respObj)
+	if err != nil {
+		return err
+	}
+	//获取所有分类
+	allClassify, err := data_manage.GetBaseFromIcpiClassifyAll()
+	if err != nil {
+		return
+	}
+
+	existIndexMap := make(map[int]*data_manage.BaseFromIcpiClassify)
+	for _, v := range allClassify {
+		existIndexMap[v.BaseFromIcpiClassifyId] = v
+	}
+
+	for _, item := range respObj.Data {
+		if _, ok := existIndexMap[item.BaseFromIcpiClassifyId]; !ok {
+			newID, err := data_manage.AddBaseFromIcpiClassify(item)
+			if err != nil {
+				fmt.Println("AddBaseFromIcpiClassify error:", err)
+			}
+			fmt.Println("AddBaseFromIcpiClassify new indexID:", newID)
+		}
+	}
+	return err
+}
+
+// ICPI消费指数-数据
+func SyncBaseFromIcpiData() (err error) {
+	startDate := time.Now().Format(utils.FormatDate) + " 00:00:00"
+	//var startDate string
+	maxDate, err := data_manage.GetBaseFromIcpiMaxDate()
+	if err != nil || maxDate.IsZero() {
+		startDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDate) + " 00:00:00"
+	} else {
+		startDate = maxDate.AddDate(0, 0, 1).Format(utils.FormatDate) + " 00:00:00"
+	}
+
+	method := `index/data/list_page`
+
+	existDataMap := make(map[string]*data_manage.BaseFromIcpiData)
+	allData, err1 := data_manage.GetAllBaseFromIcpiDataList(startDate)
+	if err1 != nil {
+		fmt.Println("get GetAllBaseFromIcpiDataList err:" + err1.Error())
+		return
+	}
+	for _, dv := range allData {
+		tmpKey := dv.IndexCode + "_" + dv.DataTime
+		existDataMap[tmpKey] = dv
+	}
+
+	//获取所有指标信息  某一天的
+	maxPage := 1
+
+	for currPage := 0; currPage < maxPage; currPage++ {
+		data := make(map[string]interface{})
+		data["Source"] = utils.DATA_SOURCE_ICPI
+		data["StartDate"] = startDate
+		data["CurrPage"] = currPage
+		data["PageSize"] = 500 //
+
+		var result string
+		result, err = HttpPost("SyncBaseFromIcpiData", method, data)
+		utils.FileLog.Info(result)
+		fmt.Println(result)
+
+		respObj := new(data_manage.BaseFromIcpiDataResp)
+		err = json.Unmarshal([]byte(result), &respObj)
+		if err != nil {
+			fmt.Println("json.Unmarshal err:" + err.Error())
+			return err
+		}
+		if respObj.Ret != 200 {
+			err = errors.New(respObj.ErrMsg)
+			return
+		}
+		// 总页码数
+		maxPage = respObj.Data.Paging.Pages
+
+		addDataList := make([]*data_manage.BaseFromIcpiData, 0)
+		if respObj.Data.List != nil && len(respObj.Data.List) > 0 {
+			for _, dv := range respObj.Data.List {
+				tmpKey := dv.IndexCode + "_" + dv.DataTime
+				if _, ok := existDataMap[tmpKey]; !ok {
+					addDataList = append(addDataList, dv)
+					existDataMap[tmpKey] = dv
+				}
+			}
+		}
+
+		// 最后如果还有数据未插入,那么继续插入吧
+		if len(addDataList) > 0 {
+			_, err = data_manage.MultiAddBaseFromIcpiDataIndex(addDataList)
+			if err != nil {
+				fmt.Println("MultiAddBaseFromIcpiDataIndex error:", err)
+			}
+		}
+	}
+
+	return err
+}

+ 51 - 0
services/sync_hz_data.go

@@ -73,8 +73,58 @@ func SyncHzDataIndex(cont context.Context) (err error) {
 		return
 	}
 
+	//广期所
+	{
+		//分类信息
+		err = SyncFromGuangzhouClassify()
+		if err != nil {
+			fmt.Println("SyncFromGuangzhouClassify Err:" + err.Error())
+			return
+		}
+		//合约信息
+		err = SyncFromGuangzhouContract()
+		if err != nil {
+			fmt.Println("SyncFromGuangzhouContract Err:" + err.Error())
+			return
+		}
+		//指标信息
+		err = SyncFromGuangzhouIndex()
+		if err != nil {
+			fmt.Println("SyncFromGuangzhouIndex Err:" + err.Error())
+			return
+		}
+		//数据
+		err = SyncFromGuangzhouTradeData()
+		if err != nil {
+			fmt.Println("SyncFromGuangzhouTradeData Err:" + err.Error())
+			return
+		}
+	}
+
+	//ICPI
+	{
+		//分类信息
+		err = SyncBaseFromIcpiClassify()
+		if err != nil {
+			fmt.Println("SyncBaseFromIcpiClassify Err:" + err.Error())
+			return
+		}
+		//指标信息
+		err = SyncBaseFromIcpi()
+		if err != nil {
+			fmt.Println("SyncBaseFromIcpi Err:" + err.Error())
+			return
+		}
+		err = SyncBaseFromIcpiData()
+		if err != nil {
+			fmt.Println("SyncBaseFromIcpiData Err:" + err.Error())
+			return
+		}
+	}
+
 	// 同步指标数据
 	SyncHzDataIndexData()
+
 	fmt.Println("SyncHzDataIndex end:", time.Now().Format(utils.FormatDateTime))
 	return err
 }
@@ -96,5 +146,6 @@ func SyncHzDataIndexData() {
 		return
 	}
 
+	//
 	fmt.Println(err)
 }

+ 3 - 1
services/task.go

@@ -196,7 +196,7 @@ func RefreshFutureGoodData(cont context.Context) (err error) {
 // RefreshTradeData 刷新交易所数据
 func RefreshTradeData(cont context.Context) (err error) {
 	wg := sync.WaitGroup{}
-	wg.Add(5)
+	wg.Add(6)
 
 	//郑商所
 	go data.RefreshDataFromZz(&wg)
@@ -208,6 +208,8 @@ func RefreshTradeData(cont context.Context) (err error) {
 	go data.RefreshDataFromCffex(&wg)
 	//大商所
 	go data.RefreshDataFromDl(&wg)
+	//大商所
+	go data.RefreshDataFromGz(&wg)
 	wg.Wait()
 	//计算指标
 	data.RefreshDataFromCalculateAll()

+ 207 - 0
services/trade_guangzhou.go

@@ -0,0 +1,207 @@
+package services
+
+import (
+	"encoding/json"
+	"errors"
+	"eta/eta_task/models/data_manage"
+	"eta/eta_task/utils"
+	"fmt"
+	"time"
+)
+
+// 广州商品交易所-分类
+func SyncFromGuangzhouClassify() (err error) {
+	data := make(map[string]interface{})
+	data["Source"] = utils.DATA_SOURCE_GFEX
+	method := `classify/list`
+	result, err := HttpPost("SyncFromGuangzhouClassify", method, data)
+	if err != nil {
+		fmt.Println("SyncFromGuangzhouClassify HttpPost Err:", err.Error())
+	}
+	utils.FileLog.Info(result)
+	fmt.Println("SyncFromGuangzhouClassify result:", result)
+
+	respObj := new(data_manage.GuangzhouClassifyResp)
+	err = json.Unmarshal([]byte(result), &respObj)
+	if err != nil {
+		return err
+	}
+	//获取所有指标信息  某一天的
+	allClassify, err := data_manage.GetBaseFromTradeGuangzhouClassifyAll()
+	if err != nil {
+		return
+	}
+
+	existIndexMap := make(map[int]*data_manage.BaseFromTradeGuangzhouClassify)
+	for _, v := range allClassify {
+		existIndexMap[v.BaseFromTradeGuangzhouClassifyId] = v
+	}
+
+	for _, item := range respObj.Data {
+		if _, ok := existIndexMap[item.BaseFromTradeGuangzhouClassifyId]; !ok {
+			newID, err := data_manage.AddBaseFromTradeGuangzhouClassify(item)
+			if err != nil {
+				fmt.Println("AddBaseFromTradeGuangzhouClassify error:", err)
+			}
+			fmt.Println("AddBaseFromTradeGuangzhouClassify new indexID:", newID)
+		}
+	}
+	return err
+}
+
+// 广州商品交易所-指标信息
+func SyncFromGuangzhouIndex() (err error) {
+	method := `index/list`
+	data := make(map[string]interface{})
+	data["Source"] = utils.DATA_SOURCE_GFEX
+	result, err := HttpPost("SyncFromGuangzhou", method, data)
+	if err != nil {
+		fmt.Println("SyncFromGuangzhou HttpPost Err:", err.Error())
+	}
+	utils.FileLog.Info(result)
+	fmt.Println("SyncFromGuangzhou result:", result)
+
+	respObj := new(data_manage.GuangzhouIndexResp)
+	err = json.Unmarshal([]byte(result), &respObj)
+	if err != nil {
+		return err
+	}
+	//获取所有指标信息  某一天的
+	allIndex, err := data_manage.GetBaseFromTradeGuangzhouIndexAll()
+	if err != nil {
+		return
+	}
+
+	existIndexMap := make(map[int]*data_manage.BaseFromTradeGuangzhouIndex)
+	for _, v := range allIndex {
+		existIndexMap[v.BaseFromTradeGuangzhouIndexId] = v
+	}
+
+	for _, item := range respObj.Data {
+		if _, ok := existIndexMap[item.BaseFromTradeGuangzhouIndexId]; !ok {
+			newID, err := data_manage.AddBaseFromTradeGuangzhouIndex(item)
+			if err != nil {
+				fmt.Println("insert error:", err)
+			}
+			fmt.Println("insert new indexID:", newID)
+		}
+	}
+	return err
+}
+
+// 广州商品交易所-合约
+func SyncFromGuangzhouContract() (err error) {
+	data := make(map[string]interface{})
+	data["Source"] = utils.DATA_SOURCE_GFEX
+	method := `contract/list`
+	result, err := HttpPost("SyncFromGuangzhouContract", method, data)
+	if err != nil {
+		fmt.Println("SyncFromGuangzhouContract HttpPost Err:", err.Error())
+	}
+	utils.FileLog.Info(result)
+	fmt.Println("SyncFromGuangzhouContract result:", result)
+
+	respObj := new(data_manage.GuangzhouContractResp)
+	err = json.Unmarshal([]byte(result), &respObj)
+	if err != nil {
+		return err
+	}
+	//获取所有指标信息  某一天的
+	allClassify, err := data_manage.GetBaseFromTradeGuangzhouContractAll()
+	if err != nil {
+		return
+	}
+
+	existContractMap := make(map[int]*data_manage.BaseFromTradeGuangzhouContract)
+	for _, v := range allClassify {
+		existContractMap[v.BaseFromTradeGuangzhouContractId] = v
+	}
+
+	obj := new(data_manage.BaseFromTradeGuangzhouIndex)
+
+	for _, item := range respObj.Data {
+		if _, ok := existContractMap[item.BaseFromTradeGuangzhouClassifyId]; !ok {
+			err = obj.AddBaseFromTradeGuangzhouContract(item)
+			if err != nil {
+				fmt.Println("AddBaseFromTradeGuangzhouContract error:", err)
+			}
+			fmt.Println("AddBaseFromTradeGuangzhouContract new indexID:")
+		}
+	}
+	return err
+}
+
+// SyncComTradeData 同步UN指标数据
+func SyncFromGuangzhouTradeData() (err error) {
+	startDate := time.Now().Format(utils.FormatDate) + " 00:00:00"
+	//var startDate string
+	maxDate, err := data_manage.GetBaseFromTradeGuangzhouMaxDate()
+	if err != nil || maxDate.IsZero() {
+		startDate = time.Now().AddDate(0, 0, -1).Format(utils.FormatDate) + " 00:00:00"
+	} else {
+		startDate = maxDate.AddDate(0, 0, 1).Format(utils.FormatDate) + " 00:00:00"
+	}
+
+	method := `index/data/list_page`
+
+	existDataMap := make(map[string]*data_manage.BaseFromTradeGuangzhouData)
+	allData, err1 := data_manage.GetAllBaseFromTradeGuangzhouDataList(startDate)
+	if err1 != nil {
+		fmt.Println("get GetAllBaseFromTradeGuangzhouDataList err:" + err1.Error())
+		return
+	}
+	for _, dv := range allData {
+		tmpKey := dv.IndexCode + "_" + dv.DataTime
+		existDataMap[tmpKey] = dv
+	}
+
+	//获取所有指标信息  某一天的
+	maxPage := 1
+
+	for currPage := 0; currPage < maxPage; currPage++ {
+		data := make(map[string]interface{})
+		data["Source"] = utils.DATA_SOURCE_GFEX
+		data["StartDate"] = startDate
+		data["CurrPage"] = currPage
+		data["PageSize"] = 500 //
+
+		var result string
+		result, err = HttpPost("SyncFromGuangzhouTradeData", method, data)
+		utils.FileLog.Info(result)
+		fmt.Println(result)
+
+		respObj := new(data_manage.BaseFromTradeGuangzhouDataResp)
+		err = json.Unmarshal([]byte(result), &respObj)
+		if err != nil {
+			fmt.Println("json.Unmarshal err:" + err.Error())
+			return err
+		}
+		if respObj.Ret != 200 {
+			err = errors.New(respObj.ErrMsg)
+			return
+		}
+		// 总页码数
+		maxPage = respObj.Data.Paging.Pages
+
+		addDataList := make([]*data_manage.BaseFromTradeGuangzhouData, 0)
+		if respObj.Data.List != nil && len(respObj.Data.List) > 0 {
+			for _, dv := range respObj.Data.List {
+				tmpKey := dv.IndexCode + "_" + dv.DataTime
+				if _, ok := existDataMap[tmpKey]; !ok {
+					addDataList = append(addDataList, dv)
+					existDataMap[tmpKey] = dv
+				}
+			}
+		}
+
+		// 最后如果还有数据未插入,那么继续插入吧
+		if len(addDataList) > 0 {
+			_, err = data_manage.MultiAddBaseFromTradeGuangzhouData(addDataList)
+			if err != nil {
+				fmt.Println("MultiAddBaseFromTradeGuangzhouData error:", err)
+			}
+		}
+	}
+
+	return err
+}

+ 2 - 1
utils/constants.go

@@ -100,7 +100,8 @@ const (
 	DATA_SOURCE_PREDICT_CALCULATE_ZSXY                          // 预测指数修匀->73
 	DATA_SOURCE_CALCULATE_ZDYFX                                 // 自定义分析->74
 	DATA_SOURCE_CALCULATE_RJZ                                   // 日均值计算->75
-
+	DATA_SOURCE_GFEX                                 = 78       // 广州期货交易所->78
+	DATA_SOURCE_ICPI                                 = 79       // ICPI消费价格指数->79
 )
 
 // 数据刷新频率