Browse Source

fix:新增路透社基础指标

Roc 3 years ago
parent
commit
5397a3087b

+ 3 - 1
models/data_manage/edb_data_base.go

@@ -2,8 +2,8 @@ package data_manage
 
 import (
 	"fmt"
-	"hongze/hongze_chart_lib/utils"
 	"github.com/rdlucklib/rdluck_tools/orm"
+	"hongze/hongze_chart_lib/utils"
 	"time"
 )
 
@@ -58,6 +58,8 @@ func GetEdbDataTableName(source int) (tableName string) {
 		tableName = "edb_data_calculate_time_shift"
 	case utils.DATA_SOURCE_CALCULATE_LJZTBPJ:
 		tableName = "edb_data_calculate_ljztbpj"
+	case utils.DATA_SOURCE_LT:
+		tableName = "edb_data_lt"
 	default:
 		tableName = ""
 	}

+ 178 - 0
models/data_manage/edb_data_lt.go

@@ -0,0 +1,178 @@
+package data_manage
+
+import (
+	"encoding/json"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"github.com/rdlucklib/rdluck_tools/orm"
+	"hongze/hongze_chart_lib/utils"
+	"reflect"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type EdbDataLt struct {
+	EdbDataId     int `orm:"column(edb_data_id);pk"`
+	EdbInfoId     int
+	EdbCode       string
+	DataTime      string
+	Value         float64
+	Status        int
+	CreateTime    time.Time
+	ModifyTime    time.Time
+	DataTimestamp int64
+}
+
+// AddEdbDataLtBySql 执行添加数据的sql
+func AddEdbDataLtBySql(sqlStr string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	_, err = o.Raw(sqlStr).Exec()
+	return
+}
+
+// ModifyEdbDataLt 修改路透社数据
+func ModifyEdbDataLt(edbInfoId int64, dataTime string, value float64) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_data_lt SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
+	return
+}
+
+func GetEdbDataLtMaxOrMinDate(edbCode string) (min_date, max_date string, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date FROM edb_data_lt WHERE edb_code=? `
+	err = o.Raw(sql, edbCode).QueryRow(&min_date, &max_date)
+	return
+}
+
+func GetEdbDataLtByCodeAndDate(edbCode string, startDate string) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT COUNT(1) AS count FROM edb_data_lt WHERE edb_code=? AND data_time=? `
+	err = o.Raw(sql, edbCode, startDate).QueryRow(&count)
+	return
+}
+
+func GetEdbDataLtByCode(edbCode string, size int) (items []*EdbInfoSearchData, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT * FROM edb_data_lt WHERE edb_code=? ORDER BY data_time DESC LIMIT ? `
+	_, err = o.Raw(sql, edbCode, size).QueryRows(&items)
+	return
+}
+
+//刷新所有数据
+func RefreshAllEdbDataByLt(edbInfoId, source int, edbCode, startDate, endDate string) (err error) {
+	// 获取路透社数据
+	ltDataList, err := QueryEdbDataByLt(edbCode, startDate, endDate)
+	if err != nil {
+		return
+	}
+
+	o := orm.NewOrm()
+	o.Using("data")
+	o.Begin()
+	defer func() {
+		if err != nil {
+			o.Rollback()
+		} else {
+			o.Commit()
+		}
+	}()
+
+	//获取指标所有数据
+	dataList := make([]*EdbDataBase, 0)
+	dataTableName := GetEdbDataTableName(source)
+	sql := `SELECT * FROM %s WHERE edb_info_id=? `
+	sql = fmt.Sprintf(sql, dataTableName)
+	_, err = o.Raw(sql, edbInfoId).QueryRows(&dataList)
+	if err != nil {
+		return err
+	}
+	dataMap := make(map[string]string)
+	for _, v := range dataList {
+		dataMap[v.DataTime] = v.Value
+	}
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+
+	addSql := ` INSERT INTO edb_data_lt(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+
+	for timestampInt, edbValue := range ltDataList {
+		dataTime := time.Unix(timestampInt/1000, 0)
+
+		//校验数据类型对不对
+		valType := reflect.TypeOf(edbValue)
+		if valType == nil {
+			continue
+		}
+		if valType.String() != "float64" {
+			continue
+		}
+		sValue := edbValue.(float64)
+
+		eDate := dataTime.Format(utils.FormatDate)
+		if err != nil {
+			return err
+		}
+
+		saveValue := utils.SubFloatToString(sValue, 30)
+		if existVal, ok := dataMap[eDate]; !ok {
+			timestamp := dataTime.UnixNano() / 1e6
+			timeStr := fmt.Sprintf("%d", timestamp)
+
+			addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, saveValue)
+			isAdd = true
+		} else {
+			if existVal != saveValue {
+				sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+				sql = fmt.Sprintf(sql, dataTableName)
+				_, err = o.Raw(sql, sValue, edbInfoId, eDate).Exec()
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			fmt.Println("RefreshAllEdbDataByLt add Err", err.Error())
+			return
+		}
+	}
+	return
+}
+
+type EdbDataFromLt struct {
+	Close map[int64]interface{} `json:"CLOSE"`
+}
+
+// QueryEdbDataByLt 获取路透社数据
+func QueryEdbDataByLt(edbCode, startDate, endDate string) (dataList map[int64]interface{}, err error) {
+	dataList = make(map[int64]interface{})
+
+	ltUrl := utils.Hz_Data_LT_Url + `edbInfo/ek?EdbCode=%s&StartDate=%s&EndDate=%s`
+	ltUrl = fmt.Sprintf(ltUrl, edbCode, startDate, endDate)
+	utils.FileLogData.Info("ltUrl:%s", ltUrl)
+	body, err := http.Get(ltUrl)
+	utils.FileLogData.Info("lt result:%s", string(body))
+
+	if err != nil {
+		return
+	}
+	//fmt.Println(string(body))
+	item := new(EdbDataFromLt)
+	err = json.Unmarshal(body, &item)
+
+	if err != nil {
+		return
+	}
+	dataList = item.Close
+	return
+}

+ 2 - 0
models/edb_data_base.go

@@ -54,6 +54,8 @@ func GetEdbDataTableName(source int) (tableName string) {
 		tableName = "edb_data_calculate_time_shift"
 	case utils.DATA_SOURCE_CALCULATE_LJZTBPJ:
 		tableName = "edb_data_calculate_ljztbpj"
+	case utils.DATA_SOURCE_LT:
+		tableName = "edb_data_lt"
 	default:
 		tableName = ""
 	}

+ 12 - 0
services/data/chart_info.go

@@ -100,6 +100,12 @@ func ChartInfoRefresh(chartInfoId int) (err error) {
 			if err != nil {
 				errmsg = "RefreshEdbDataByGl Err:" + err.Error()
 			}
+		}else if source == utils.DATA_SOURCE_LT {
+			endDate := time.Now().Format(utils.FormatDate)
+			err = data_manage.RefreshAllEdbDataByLt(edbInfoId, source, edbCode, startDate, endDate)
+			if err != nil {
+				errmsg = "RefreshAllEdbDataByLT Err:" + err.Error()
+			}
 		}
 
 		maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
@@ -388,6 +394,12 @@ func ChartInfoRefreshV1(chartInfoId int) (err error) {
 			if err != nil {
 				errmsg = "RefreshEdbDataByGl Err:" + err.Error()
 			}
+		}else if source == utils.DATA_SOURCE_LT {
+			endDate := time.Now().Format(utils.FormatDate)
+			err = data_manage.RefreshAllEdbDataByLt(edbInfoId, source, edbCode, startDate, endDate)
+			if err != nil {
+				errmsg = "RefreshAllEdbDataByLT Err:" + err.Error()
+			}
 		}
 
 		maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)

+ 18 - 0
services/data/edb_info.go

@@ -78,6 +78,12 @@ func EdbInfoRefreshFromCalculate(edbInfoId, source int) (err error) {
 			if err != nil {
 				errmsg = "RefreshEdbDataByLz Err:" + err.Error()
 			}
+		}else if source == utils.DATA_SOURCE_LT {
+			endDate := time.Now().Format(utils.FormatDate)
+			err = data_manage.RefreshAllEdbDataByLt(edbInfoId, source, edbCode, startDate, endDate)
+			if err != nil {
+				errmsg = "RefreshAllEdbDataByLT Err:" + err.Error()
+			}
 		}
 		maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
 		if err != nil && err.Error() != utils.ErrNoRow() {
@@ -596,6 +602,12 @@ func EdbInfoRefreshFromBase(edbInfoId int) (err error) {
 			if err != nil {
 				errmsg = "RefreshAllEdbDataByShfe Err:" + err.Error()
 			}
+		}else if source == utils.DATA_SOURCE_LT {
+			endDate := time.Now().Format(utils.FormatDate)
+			err = data_manage.RefreshAllEdbDataByLt(edbInfoId, source, edbCode, startDate, endDate)
+			if err != nil {
+				errmsg = "RefreshAllEdbDataByLT Err:" + err.Error()
+			}
 		}
 
 		maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
@@ -937,6 +949,12 @@ func EdbInfoRefreshAllFromBase(edbInfoId int) (err error) {
 			if err != nil {
 				errmsg = "RefreshAllEdbDataByShfe Err:" + err.Error()
 			}
+		}else if source == utils.DATA_SOURCE_LT {
+			endDate := time.Now().Format(utils.FormatDate)
+			err = data_manage.RefreshAllEdbDataByLt(edbInfoId, source, edbCode, startDate, endDate)
+			if err != nil {
+				errmsg = "RefreshAllEdbDataByLT Err:" + err.Error()
+			}
 		}
 
 		maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)

+ 2 - 0
utils/constants.go

@@ -56,6 +56,7 @@ const (
 	DATA_SOURCE_CALCULATE_TIME_SHIFT            //时间移位->22
 	DATA_SOURCE_CALCULATE_ZJPJ                  //直接拼接->23
 	DATA_SOURCE_CALCULATE_LJZTBPJ               //累计值同比拼接->24
+	DATA_SOURCE_LT                              //路透->25
 )
 
 //数据刷新频率
@@ -77,6 +78,7 @@ const (
 const (
 	Hz_Data_Url    = "http://datawind.hzinsights.com:8040/" //同花顺,万得接口服务地址
 	Hz_Data_PB_Url = "http://datapb.hzinsights.com:8040/"   //彭博接口地址
+	Hz_Data_LT_Url = "http://dataek.hzinsights.com:8040/"   //路透社接口地址
 	EDB_DATA_LIMIT = 10
 )