Browse Source

fix:切换商品数据到同花顺

Roc 2 years ago
parent
commit
8f8acf1c29

+ 4 - 15
controllers/future_good/future_good_edb_info.go

@@ -41,7 +41,7 @@ func (this *FutureGoodEdbInfoController) Add() {
 	}
 	req.EdbCode = utils.TrimStr(req.EdbCode)
 	cacheKey = utils.CACHE_EDB_DATA_ADD + "_futuregood_" + req.EdbCode
-	if !utils.Rc.IsExist(cacheKey) {
+	if true {
 		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
 		defer func() {
 			utils.Rc.Delete(cacheKey)
@@ -68,15 +68,7 @@ func (this *FutureGoodEdbInfoController) Add() {
 		}
 		endDate := time.Now().Format(utils.FormatDate)
 
-		windUrl := utils.Hz_Wind_Data_Url_LIST[0].Url
-
-		dataItem, errCode, err := services.GetFutureGoodDataFromThs( req.EdbCode, utils.BASE_START_DATE, endDate,0)
-		//dataItem, errCode, err := services.GetEdbDataFromWind(req.EdbCode, utils.BASE_START_DATE, endDate)
-		if errCode == 421 { //指标超限
-			br.Ret = 421
-			br.Msg = "指标超限!"
-			return
-		}
+		dataItem, err := services.GetFutureGoodDataFromThs(req.EdbCode, utils.BASE_START_DATE, endDate, 0)
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()
@@ -163,16 +155,13 @@ func (this *FutureGoodEdbInfoController) Refresh() {
 	}
 	endDate := endDateTime.Format(utils.FormatDate)
 
-	dataItem, errCode, err := services.GetFutureGoodDataFromThs(req.FutureGoodEdbCode, req.StartDate, endDate,0)
-	if errCode == 421 { //指标超限
-		br.Ret = 421
-	}
+	dataItem, err := services.GetFutureGoodDataFromThs(req.FutureGoodEdbCode, req.StartDate, endDate, 0)
 	if err != nil {
 		br.Msg = "获取指标信息失败!"
 		br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()
 		return
 	}
-	err = future_good.RefreshFutureGoodEdbDataFromWind(req.FutureGoodEdbInfoId, req.FutureGoodEdbCode, req.StartDate, dataItem)
+	err = future_good.RefreshFutureGoodEdbDataFromThs(req.FutureGoodEdbInfoId, req.FutureGoodEdbCode, req.StartDate, dataItem)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "刷新指标信息失败!"
 		br.ErrMsg = "刷新指标信息失败 RefreshEdbDataFromWind,Err:" + err.Error()

+ 65 - 46
models/future_good/future_good_edb_data.go

@@ -64,7 +64,7 @@ func GetFutureGoodEdbDataList(condition string, pars []interface{}) (list []*Fut
 }
 
 // AddEdbDataFromWind 添加wind商品指标数据
-func AddEdbDataFromWind(futureGoodEdbInfoId int, edbCode string, item *services.FutureGoodDataFromWind) (err error) {
+func AddEdbDataFromWind(futureGoodEdbInfoId int, edbCode string, item *services.FutureGoodDataFromThs) (err error) {
 	var errMsg string
 	o := orm.NewOrm()
 	defer func() {
@@ -76,23 +76,32 @@ func AddEdbDataFromWind(futureGoodEdbInfoId int, edbCode string, item *services.
 
 	var isAdd bool
 	addSql := ` INSERT INTO future_good_edb_data(future_good_edb_info_id,future_good_edb_code,data_time,trade_code,open,high,low,close,volume,amt,oi,settle,create_time,modify_time,data_timestamp) values `
-	for k, v := range item.Dt {
-		timeStr := fmt.Sprintf("%d", v)
-		v = v / 1000
-		t := time.Unix(v, 0)
-		dateTime := t.Format(utils.FormatDate)
-		tradeCode := item.TradeCode[k]
-		open := utils.SubFloatToString(item.Open[k], 20)
-		high := utils.SubFloatToString(item.High[k], 20)
-		low := utils.SubFloatToString(item.Low[k], 20)
-		closeVal := utils.SubFloatToString(item.Close[k], 20)
-		volume := utils.SubFloatToString(item.Volume[k], 20)
-		amt := utils.SubFloatToString(item.Amt[k], 20)
-		oi := utils.SubFloatToString(item.Oi[k], 20)
-		settle := utils.SubFloatToString(item.Settle[k], 20)
-		addSql += GetAddSql(strconv.Itoa(futureGoodEdbInfoId), edbCode, dateTime, tradeCode, open, high, low, closeVal, volume, amt, oi, settle, timeStr)
+
+	table := item.Tables
+	dataLen := len(table.Time)
+	for k := 0; k < dataLen; k++ {
+		eDate := table.Time[k]
+		dataTime, err := time.Parse(utils.FormatDate, eDate)
+		if err != nil {
+			errMsg = " time.Parse :" + err.Error()
+			return err
+		}
+		timestamp := dataTime.UnixNano() / 1e6
+		timeStr := fmt.Sprintf("%d", timestamp)
+
+		tradeCode := ``
+		open := utils.SubFloatToString(table.Open[k], 20)
+		high := utils.SubFloatToString(table.High[k], 20)
+		low := utils.SubFloatToString(table.Low[k], 20)
+		closeVal := utils.SubFloatToString(table.Close[k], 20)
+		volume := utils.SubFloatToString(table.Volume[k], 20)
+		amt := utils.SubFloatToString(table.Amount[k], 20)
+		oi := utils.SubFloatToString(table.Ccl[k], 20)
+		settle := utils.SubFloatToString(table.Settlement[k], 20)
+		addSql += GetAddSql(strconv.Itoa(futureGoodEdbInfoId), edbCode, eDate, tradeCode, open, high, low, closeVal, volume, amt, oi, settle, timeStr)
 
 		isAdd = true
+
 	}
 
 	if isAdd {
@@ -113,8 +122,8 @@ type RefreshFutureEdbEdbInfoReq struct {
 	StartDate           string `description:"开始日期"`
 }
 
-// RefreshFutureGoodEdbDataFromWind 刷新wind期货指标数据
-func RefreshFutureGoodEdbDataFromWind(futureGoodEdbInfoId int, edbCode, startDate string, item *services.FutureGoodDataFromThs) (err error) {
+// RefreshFutureGoodEdbDataFromThs 刷新wind期货指标数据
+func RefreshFutureGoodEdbDataFromThs(futureGoodEdbInfoId int, edbCode, startDate string, item *services.FutureGoodDataFromThs) (err error) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -159,26 +168,34 @@ func RefreshFutureGoodEdbDataFromWind(futureGoodEdbInfoId int, edbCode, startDat
 	var isAdd bool
 	addMap := make(map[string]string)
 
-	for k, v := range item.Dt {
-		timeStr := fmt.Sprintf("%d", v)
-		v = v / 1000
-		t := time.Unix(v, 0)
-		dateTime := t.Format(utils.FormatDate)
-		tradeCode := item.TradeCode[k]
-		open := utils.SubFloatToString(item.Open[k], 20)
-		high := utils.SubFloatToString(item.High[k], 20)
-		low := utils.SubFloatToString(item.Low[k], 20)
-		closeVal := utils.SubFloatToString(item.Close[k], 20)
-		volume := utils.SubFloatToString(item.Volume[k], 20)
-		amt := utils.SubFloatToString(item.Amount[k], 20)
-		oi := utils.SubFloatToString(item.Ccl[k], 20)
-		settle := utils.SubFloatToString(item.Settlement[k], 20)
-
-		if findItem, ok := existMap[dateTime]; !ok {
-			if _, existOk := addMap[dateTime]; !existOk {
-				addSql += GetAddSql(strconv.Itoa(futureGoodEdbInfoId), edbCode, dateTime, tradeCode, open, high, low, closeVal, volume, amt, oi, settle, timeStr)
-
-				addMap[dateTime] = "1"
+	table := item.Tables
+	dataLen := len(table.Time)
+	for k := 0; k < dataLen; k++ {
+		eDate := table.Time[k]
+		dataTime, tmpErr := time.Parse(utils.FormatDate, eDate)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		timestamp := dataTime.UnixNano() / 1e6
+		timeStr := fmt.Sprintf("%d", timestamp)
+
+		tradeCode := ``
+		open := utils.SubFloatToString(table.Open[k], 20)
+		high := utils.SubFloatToString(table.High[k], 20)
+		low := utils.SubFloatToString(table.Low[k], 20)
+		closeVal := utils.SubFloatToString(table.Close[k], 20)
+		volume := utils.SubFloatToString(table.Volume[k], 20)
+		amt := utils.SubFloatToString(table.Amount[k], 20)
+		oi := utils.SubFloatToString(table.Ccl[k], 20)
+		settle := utils.SubFloatToString(table.Settlement[k], 20)
+		addSql += GetAddSql(strconv.Itoa(futureGoodEdbInfoId), edbCode, eDate, tradeCode, open, high, low, closeVal, volume, amt, oi, settle, timeStr)
+
+		if findItem, ok := existMap[eDate]; !ok {
+			if _, existOk := addMap[eDate]; !existOk {
+				addSql += GetAddSql(strconv.Itoa(futureGoodEdbInfoId), edbCode, eDate, tradeCode, open, high, low, closeVal, volume, amt, oi, settle, timeStr)
+
+				addMap[eDate] = "1"
 			}
 			isAdd = true
 		} else {
@@ -189,35 +206,35 @@ func RefreshFutureGoodEdbDataFromWind(futureGoodEdbInfoId int, edbCode, startDat
 					updateCol = append(updateCol, "TradeCode")
 				}
 				if utils.SubFloatToString(findItem.Open, 30) != open {
-					findItem.Open = item.Open[k]
+					findItem.Open = table.Open[k]
 					updateCol = append(updateCol, "Open")
 				}
 				if utils.SubFloatToString(findItem.High, 30) != high {
-					findItem.High = item.High[k]
+					findItem.High = table.High[k]
 					updateCol = append(updateCol, "High")
 				}
 				if utils.SubFloatToString(findItem.Low, 30) != low {
-					findItem.Low = item.Low[k]
+					findItem.Low = table.Low[k]
 					updateCol = append(updateCol, "Low")
 				}
 				if utils.SubFloatToString(findItem.Close, 30) != closeVal {
-					findItem.Close = item.Close[k]
+					findItem.Close = table.Close[k]
 					updateCol = append(updateCol, "Close")
 				}
 				if utils.SubFloatToString(findItem.Volume, 30) != volume {
-					findItem.Volume = item.Volume[k]
+					findItem.Volume = table.Volume[k]
 					updateCol = append(updateCol, "Volume")
 				}
 				if utils.SubFloatToString(findItem.Amt, 30) != amt {
-					findItem.Amt = item.Amt[k]
+					findItem.Amt = table.Amount[k]
 					updateCol = append(updateCol, "Amt")
 				}
 				if utils.SubFloatToString(findItem.Oi, 30) != oi {
-					findItem.Oi = item.Oi[k]
+					findItem.Oi = table.Ccl[k]
 					updateCol = append(updateCol, "Oi")
 				}
 				if utils.SubFloatToString(findItem.Settle, 30) != settle {
-					findItem.Settle = item.Settle[k]
+					findItem.Settle = table.Settlement[k]
 					updateCol = append(updateCol, "Settle")
 				}
 
@@ -229,7 +246,9 @@ func RefreshFutureGoodEdbDataFromWind(futureGoodEdbInfoId int, edbCode, startDat
 				}
 			}
 		}
+
 	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()

+ 21 - 96
services/base_from_ths.go

@@ -6,7 +6,6 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/http"
 	"github.com/shopspring/decimal"
-	"hongze/hongze_edb_lib/services/alarm_msg"
 	"hongze/hongze_edb_lib/utils"
 	"reflect"
 )
@@ -136,7 +135,6 @@ type FutureGoodDataFromThsInterface struct {
 		ThsCode string   `json:"thscode"`
 		Time    []string `json:"time"`
 		Table   struct {
-			Time           []string  `json:"time"`
 			LastClose      []float64 `json:"lastclose"`
 			Open           []float64 `json:"open"`
 			High           []float64 `json:"high"`
@@ -163,11 +161,11 @@ type FutureGoodDataFromThsInterface struct {
 
 // FutureGoodDataFromThs 同花顺期货数据
 type FutureGoodDataFromThs struct {
-	DataVol   int64                  `json:"dataVol"`
-	Errmsg    string                 `json:"errmsg"`
-	Errorcode int64                  `json:"errorcode"`
-	Perf      interface{}            `json:"perf"`
-	Tables    []FutureGoodDataTables `json:"tables"`
+	DataVol   int64                `json:"dataVol"`
+	Errmsg    string               `json:"errmsg"`
+	Errorcode int64                `json:"errorcode"`
+	Perf      interface{}          `json:"perf"`
+	Tables    FutureGoodDataTables `json:"tables"`
 }
 
 // FutureGoodDataTables 同花顺表格数据
@@ -185,7 +183,7 @@ type FutureGoodDataTables struct {
 }
 
 // GetFutureGoodDataFromThs 通过url获取wind的商品数据
-func GetFutureGoodDataFromThs(edbCode, startDate, endDate string, num int) (item *FutureGoodDataFromThs, errorCode int, err error) {
+func GetFutureGoodDataFromThs(edbCode, startDate, endDate string, num int) (item *FutureGoodDataFromThs, err error) {
 	thsUrl := utils.Hz_Wind_Data_Url + `edbInfo/ths/future_good?EdbCode=%s&StartDate=%s&EndDate=%s`
 	thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
 	utils.FileLog.Info("thsUrl:" + thsUrl)
@@ -218,99 +216,26 @@ func GetFutureGoodDataFromThs(edbCode, startDate, endDate string, num int) (item
 		return
 	}
 
-	// 因为table里面的value有的时候返回的是string,有的是float64,所以需要用interface来反射取值
-	tablesList := make([]FutureGoodDataTables, 0)
-	for _, table := range tmpItems.Tables {
-		tableTimeList := make([]string, 0)
-		tableValueList := make([]float64, 0)
-		tableOpenList := make([]float64, 0)
-
-
-		Open       []float64 `json:"open"`
-		High       []float64 `json:"high"`
-		Low        []float64 `json:"low"`
-		Close      []float64 `json:"close"`
-		Volume     []float64 `json:"volume"`
-		Amount     []float64 `json:"amount"`
-		Ccl        []float64 `json:"ccl"`
-		Settlement []float64 `json:"settlement"`
-
-		for _, tableId := range table.ID {
-			tableIdList = append(tableIdList, tableId)
-		}
-		for _, tableTime := range table.Time {
-			tableTimeList = append(tableTimeList, tableTime)
-		}
-
-		//指标数据
-		for _, tmpValue := range table.Value {
-			var tableValue float64
-			if reflect.TypeOf(tmpValue).Kind() == reflect.Float64 {
-				tableValue = reflect.ValueOf(tmpValue).Float()
-			} else if reflect.TypeOf(tmpValue).Kind() == reflect.String {
-				tmpTableValue, tmpErr := decimal.NewFromString(reflect.ValueOf(tmpValue).String())
-				if tmpErr != nil {
-					err = tmpErr
-					return
-				}
-				tableValue, _ = tmpTableValue.Truncate(4).Float64()
-			} else {
-				err = errors.New("错误的数据类型" + reflect.TypeOf(tmpValue).String())
-				return
-			}
-			tableValueList = append(tableValueList, tableValue)
-		}
-		tmpTable := FutureGoodDataTables{
-			ID:    tableIdList,
-			Time:  tableTimeList,
-			Value: tableValueList,
-		}
-		tablesList = append(tablesList, tmpTable)
+	if len(tmpItems.Tables) <= 0 {
+		return
 	}
+	table := tmpItems.Tables[0]
 	item = &FutureGoodDataFromThs{
 		DataVol:   tmpItems.DataVol,
 		Errmsg:    tmpItems.Errmsg,
 		Errorcode: tmpItems.Errorcode,
 		Perf:      tmpItems.Perf,
-		Tables:    tablesList,
+		Tables: FutureGoodDataTables{
+			Time:       table.Time,
+			Open:       table.Table.Open,
+			High:       table.Table.High,
+			Low:        table.Table.Low,
+			Close:      table.Table.Close,
+			Volume:     table.Table.Volume,
+			Amount:     table.Table.Amount,
+			Ccl:        table.Table.Ccl,
+			Settlement: table.Table.Settlement,
+		},
 	}
-	return item, nil
-
-	//if err != nil {
-	//	return
-	//}
-	//item = new(FutureGoodDataFromWind)
-	//err = json.Unmarshal(body, &item)
-	//
-	////异常的话,需要邮件通知
-	//if len(item.ErrorCode) > 0 {
-	//	if item.ErrorCode["0"] != 0 {
-	//		if item.ErrorCode["0"] == -40522017 {
-	//			//{
-	//			//DT: {
-	//			//0: 1654646400000
-	//			//},
-	//			//CLOSE: {
-	//			//0: "CEDBService:: quota exceeded."
-	//			//},
-	//			//ErrorCode: {
-	//			//0: -40522017
-	//			//}
-	//			//}
-	//			// 设置服务器已超限
-	//			errorCode = 421
-	//			go utils.SendEmail("wind数据接口超限", "地址:"+requestWindUrl, utils.EmailSendToUsers)
-	//			return
-	//		} else if item.ErrorCode["0"] == -40520005 {
-	//			//.ErrorCode=-40520005
-	//			//.Data=[No Python API Authority
-	//			err = errors.New("No Python API Authority")
-	//			go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind商品数据服务异常,edbCode:%s,ErrorCode:%d,result:%s", edbCode, item.ErrorCode["0"], string(body)), 3)
-	//			return
-	//		} else {
-	//			go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind商品数据服务异常,edbCode:%s,ErrorCode:%d,result:%s", edbCode, item.ErrorCode["0"], string(body)), 3)
-	//		}
-	//	}
-	//}
-	//return
+	return
 }