Browse Source

新增同步计算指标

tuoling805 1 year ago
parent
commit
6d85e054a3
4 changed files with 211 additions and 4 deletions
  1. 46 2
      models/edb_info.go
  2. 30 0
      models/edb_info_calculate_mapping.go
  3. 133 2
      services/init_calculate_index.go
  4. 2 0
      services/task.go

+ 46 - 2
models/edb_info.go

@@ -41,12 +41,12 @@ type EdbInfoResp struct {
 		ChartImage       string    `json:"ChartImage"`
 		Calendar         string    `json:"Calendar"`
 		DataDateType     string    `json:"DataDateType"`
-		CalculateList    []*EdbInfoCalculateMapping
+		CalculateList    []*EdbInfoCalculateMappingDetail
 	} `json:"Data"`
 	Success bool `json:"Success"`
 }
 
-type EdbInfoCalculateMapping struct {
+type EdbInfoCalculateMappingDetail struct {
 	EdbCode         string                         `description:"指标编码"`
 	BaseEdbInfoCode []*EdbInfoCalculateBaseEdbInfo `description:"依赖的基础指标编码"`
 }
@@ -54,3 +54,47 @@ type EdbInfoCalculateMapping struct {
 type EdbInfoCalculateBaseEdbInfo struct {
 	FromEdbCode string `description:"指标编码"`
 }
+
+type EdbInfoItemResp struct {
+	Ret     int    `json:"Ret"`
+	Msg     string `json:"Msg"`
+	ErrMsg  string `json:"ErrMsg"`
+	ErrCode string `json:"ErrCode"`
+	Data    struct {
+		EdbInfoId        int    `orm:"column(edb_info_id);pk"`
+		EdbInfoType      int    `description:"指标类型,0:普通指标,1:预测指标"`
+		SourceName       string `description:"来源名称"`
+		Source           int    `description:"来源id"`
+		EdbCode          string `description:"指标编码"`
+		EdbName          string `description:"指标名称"`
+		EdbNameEn        string `description:"英文指标名称"`
+		EdbNameSource    string `description:"指标名称来源"`
+		Frequency        string `description:"频率"`
+		Unit             string `description:"单位"`
+		UnitEn           string `description:"英文单位"`
+		StartDate        string `description:"起始日期"`
+		EndDate          string `description:"终止日期"`
+		ClassifyId       int    `description:"分类id"`
+		SysUserId        int
+		SysUserRealName  string
+		UniqueCode       string `description:"指标唯一编码"`
+		CreateTime       time.Time
+		ModifyTime       time.Time
+		MinValue         float64 `description:"指标最小值"`
+		MaxValue         float64 `description:"指标最大值"`
+		CalculateFormula string  `description:"计算公式"`
+		EdbType          int     `description:"指标类型:1:基础指标,2:计算指标"`
+		IsUpdate         int     `description:"当天是否已更新,1:未更新,2:已更新"`
+		Sort             int     `description:"排序字段"`
+		LatestDate       string  `description:"数据最新日期"`
+		LatestValue      float64 `description:"数据最新值"`
+		MoveType         int     `description:"移动方式:1:领先(默认),2:滞后"`
+		MoveFrequency    string  `description:"移动频度"`
+		NoUpdate         int8    `description:"是否停止更新,0:继续更新;1:停止更新"`
+		ServerUrl        string  `description:"服务器地址"`
+		ChartImage       string  `description:"图表图片"`
+		Calendar         string  `description:"公历/农历" orm:"default(公历);"`
+		DataDateType     string  `orm:"column(data_date_type);size(255);null;default(交易日)"`
+	} `json:"Data"`
+	Success bool `json:"Success"`
+}

+ 30 - 0
models/edb_info_calculate_mapping.go

@@ -0,0 +1,30 @@
+package models
+
+import "time"
+
+type EdbInfoCalculateMapping struct {
+	EdbInfoCalculateMappingId int       `orm:"column(edb_info_calculate_mapping_id);pk"`
+	EdbInfoId                 int       `description:"计算指标id"`
+	Source                    int       `description:"计算指标来源"`
+	SourceName                string    `description:"计算指标来源名称"`
+	EdbCode                   string    `description:"计算指标编码"`
+	FromEdbInfoId             int       `description:"基础指标id"`
+	FromEdbCode               string    `description:"基础指标编码"`
+	FromEdbName               string    `description:"基础指标名称"`
+	FromSource                int       `description:"基础指标来源"`
+	FromSourceName            string    `description:"基础指标来源名称"`
+	FromTag                   string    `description:"来源指标标签"`
+	MoveValue                 int       `description:"移动的值,小于0是提前,0是不变,大于0是滞后"`
+	Sort                      int       `description:"计算指标名称排序"`
+	CreateTime                time.Time `description:"创建时间"`
+	ModifyTime                time.Time `description:"修改时间"`
+}
+
+type EdbInfoCalculateMappingResp struct {
+	Ret     int                        `json:"Ret"`
+	Msg     string                     `json:"Msg"`
+	ErrMsg  string                     `json:"ErrMsg"`
+	ErrCode string                     `json:"ErrCode"`
+	Data    []*EdbInfoCalculateMapping `json:"Data"`
+	Success bool                       `json:"Success"`
+}

+ 133 - 2
services/init_calculate_index.go

@@ -27,6 +27,7 @@ import (
 
 const (
 	HZ_DATA_API = "https://hzdataapi.hzinsights.com/hzdataapi/"
+	ClassifyId  = 685
 )
 
 func InitCalculateIndex() {
@@ -66,7 +67,7 @@ func InitCalculateIndex() {
 		return
 	}
 
-	method := "edb_index/detail"
+	hzMethod := "edb_index/detail"
 	edbLibIndexMethod := "/edb_info/detail"
 	var needAddIndexArr []string
 
@@ -90,7 +91,7 @@ func InitCalculateIndex() {
 
 		params := make(map[string]interface{})
 		params["EdbCode"] = indexCode
-		result, err := hzDataHttpPost(method, params)
+		result, err := hzDataHttpPost(hzMethod, params)
 		if err != nil {
 			fmt.Println("hzDataHttpPost Err:" + err.Error())
 			return
@@ -153,8 +154,138 @@ func InitCalculateIndex() {
 	}
 	f.Save()
 
+	hzIndexMethod := "edb_index/item"
+	hzCalculateIndexMethod := "edb_info_calculate/item"
+
+	edbLibIndexMethod = "edb_info/copy/from/hz"
+	edbLibCalculateIndexMethod := "edb_info/copy/from/hz"
+
 	for k, v := range needAddIndexArr { //需要同步的计算指标
 		fmt.Println(k, v)
+
+		params := make(map[string]interface{})
+		params["EdbCode"] = v
+		hzResult, err := hzDataHttpPost(hzIndexMethod, params)
+		if err != nil {
+			fmt.Println("hzDataHttpPost Err:" + err.Error())
+			return
+		}
+		hzResp := new(models.EdbInfoItemResp)
+		err = json.Unmarshal([]byte(hzResult), &hzResp)
+		if err != nil {
+			fmt.Println("json.Unmarshal Err:" + err.Error())
+			return
+		}
+		if hzResp.Ret != 200 {
+			fmt.Println("resp Err:" + hzResp.ErrMsg)
+			return
+		}
+		edbInfo := hzResp.Data
+		//新增指标信息
+		indexMap := make(map[string]interface{})
+		indexMap["EdbInfoType"] = edbInfo.EdbInfoType
+		indexMap["SourceName"] = edbInfo.SourceName
+		indexMap["Source"] = edbInfo.Source
+		indexMap["EdbCode"] = edbInfo.EdbCode
+		indexMap["EdbName"] = edbInfo.EdbName
+		indexMap["EdbNameEn"] = edbInfo.EdbNameEn
+		indexMap["EdbNameSource"] = edbInfo.EdbNameSource
+		indexMap["Frequency"] = edbInfo.Frequency
+		indexMap["Unit"] = edbInfo.Unit
+		indexMap["UnitEn"] = edbInfo.UnitEn
+		indexMap["StartDate"] = edbInfo.StartDate
+		indexMap["EndDate"] = edbInfo.EndDate
+		indexMap["ClassifyId"] = ClassifyId
+		indexMap["SysUserId"] = 0
+		indexMap["SysUserRealName"] = ""
+		indexMap["UniqueCode"] = edbInfo.UniqueCode
+		indexMap["CreateTime"] = time.Now()
+		indexMap["ModifyTime"] = time.Now()
+		indexMap["MinValue"] = edbInfo.MinValue
+		indexMap["MaxValue"] = edbInfo.MaxValue
+		indexMap["CalculateFormula"] = edbInfo.CalculateFormula
+		indexMap["EdbType"] = edbInfo.EdbType
+		indexMap["IsUpdate"] = 1
+		indexMap["Sort"] = edbInfo.Sort
+		indexMap["LatestDate"] = edbInfo.LatestDate
+		indexMap["LatestValue"] = edbInfo.LatestValue
+		indexMap["MoveType"] = edbInfo.MoveType
+		indexMap["MoveFrequency"] = edbInfo.MoveFrequency
+		indexMap["NoUpdate"] = edbInfo.NoUpdate
+		indexMap["ServerUrl"] = edbInfo.ServerUrl
+		indexMap["ChartImage"] = edbInfo.ChartImage
+		indexMap["Calendar"] = edbInfo.Calendar
+		indexMap["DataDateType"] = edbInfo.DataDateType
+
+		edbLibResult, err := PostEdbLib(indexMap, edbLibIndexMethod)
+		if err != nil {
+			utils.FileLog.Info("新增计算指标失败:" + err.Error() + " result:" + string(edbLibResult))
+			return
+		}
+		baseResp := new(models.BaseResponse)
+		err = json.Unmarshal([]byte(edbLibResult), &baseResp)
+		if err != nil {
+			fmt.Println("edbLibResult json.Unmarshal Err:" + err.Error())
+			return
+		}
+		if baseResp.Ret != 200 {
+			fmt.Println("PostEdbLib resp Err:" + hzResp.ErrMsg)
+			return
+		}
+
+		//新增计算指标映射关系
+		calculateParams := make(map[string]interface{})
+		calculateParams["EdbCode"] = v
+		hzResult, err = hzDataHttpPost(hzCalculateIndexMethod, calculateParams)
+		if err != nil {
+			fmt.Println("hzDataHttpPost calculate Err:" + err.Error())
+			return
+		}
+		hzCalculateResp := new(models.EdbInfoCalculateMappingResp)
+		err = json.Unmarshal([]byte(hzResult), &hzCalculateResp)
+		if err != nil {
+			fmt.Println("calculate json.Unmarshal Err:" + err.Error())
+			return
+		}
+		if hzResp.Ret != 200 {
+			fmt.Println("calculate resp Err:" + hzResp.ErrMsg)
+			return
+		}
+		for _, cv := range hzCalculateResp.Data {
+			//新增指标信息
+			indexCalculateMap := make(map[string]interface{})
+			indexCalculateMap["EdbInfoId"] = cv.EdbInfoId
+			indexCalculateMap["Source"] = cv.Source
+			indexCalculateMap["SourceName"] = cv.SourceName
+			indexCalculateMap["EdbCode"] = cv.EdbCode
+			indexCalculateMap["FromEdbInfoId"] = cv.FromEdbInfoId
+			indexCalculateMap["FromEdbCode"] = cv.FromEdbCode
+			indexCalculateMap["FromEdbName"] = cv.FromEdbName
+			indexCalculateMap["FromSource"] = cv.FromSource
+			indexCalculateMap["FromSourceName"] = cv.FromSourceName
+			indexCalculateMap["MoveValue"] = cv.MoveValue
+			indexCalculateMap["Sort"] = cv.Sort
+			indexCalculateMap["CreateTime"] = time.Now()
+			indexCalculateMap["ModifyTime"] = time.Now()
+			indexCalculateMap["FromTag"] = cv.EdbInfoId
+
+			edbLibResult, err := PostEdbLib(indexCalculateMap, edbLibCalculateIndexMethod)
+			if err != nil {
+				utils.FileLog.Info("新增计算指标映射关系失败:" + err.Error() + " result:" + string(edbLibResult))
+				return
+			}
+			baseResp := new(models.BaseResponse)
+			err = json.Unmarshal([]byte(edbLibResult), &baseResp)
+			if err != nil {
+				fmt.Println("edbLibResult mapping json.Unmarshal Err:" + err.Error())
+				return
+			}
+			if baseResp.Ret != 200 {
+				fmt.Println("PostEdbLib mapping resp Err:" + hzResp.ErrMsg)
+				return
+			}
+		}
+		time.Sleep(1 * time.Second)
 	}
 }
 

+ 2 - 0
services/task.go

@@ -23,8 +23,10 @@ func Task() {
 	IndexSourceMap["wind"] = utils.DATA_SOURCE_WIND
 
 	time.Sleep(3 * time.Second)
+
 	fmt.Println("start InitCalculateIndex")
 	InitCalculateIndex()
 	fmt.Println("end InitCalculateIndex")
+
 	fmt.Println("task end")
 }