Parcourir la source

新增wind wsd添加

tuoling805 il y a 1 an
Parent
commit
fb94ae9e23

+ 20 - 1
controllers/base_from_wind.go

@@ -53,10 +53,11 @@ func (this *WindController) Add() {
 		}
 
 		windUrl := ``
+		terminalCode := ""
 
 		// 试用平台的话,需要额外从弘则这边获取下地址
 		if utils.BusinessCode == utils.HZ_TRIAL_BUSSINESS_CODE {
-			tmpWindUrl, err, errMsg := services.GetHzWindUrl(req.EdbCode, source)
+			tmpWindUrl, tmpTerminalCode, err, errMsg := services.GetHzWindUrl(req.EdbCode, source)
 			if err != nil {
 				br.Msg = "添加失败!"
 				br.ErrMsg = "添加失败,Err:" + err.Error()
@@ -66,6 +67,24 @@ func (this *WindController) Add() {
 				return
 			}
 			windUrl = tmpWindUrl
+			terminalCode = tmpTerminalCode
+		}
+
+		if terminalCode == `` {
+			terminalInfo, err := services.GetTerminal(utils.DATA_SOURCE_WIND, "")
+			if err != nil {
+				br.Msg = "获取可以使用的wind地址失败!"
+				br.ErrMsg = "获取可以使用的wind地址失败,err:" + err.Error()
+				return
+			}
+			windUrl = terminalInfo.ServerUrl
+			terminalCode = terminalInfo.TerminalCode
+		}
+
+		if terminalCode == `` {
+			br.Msg = "没有配置wind终端!"
+			br.ErrMsg = "没有配置wind终端"
+			return
 		}
 
 		if windUrl == `` {

+ 21 - 3
controllers/base_from_wind_wsd.go

@@ -52,10 +52,11 @@ func (this *WindWsdController) Add() {
 		}
 
 		windUrl := ``
+		terminalCode := ""
 
 		// 试用平台的话,需要额外从弘则这边获取下地址
 		if utils.BusinessCode == utils.HZ_TRIAL_BUSSINESS_CODE {
-			tmpWindUrl, err, errMsg := services.GetHzWindUrl(req.EdbCode, source)
+			tmpWindUrl, tmpTerminalCode, err, errMsg := services.GetHzWindUrl(req.EdbCode, source)
 			if err != nil {
 				br.Msg = "添加失败!"
 				br.ErrMsg = "添加失败,Err:" + err.Error()
@@ -65,6 +66,24 @@ func (this *WindWsdController) Add() {
 				return
 			}
 			windUrl = tmpWindUrl
+			terminalCode = tmpTerminalCode
+		}
+
+		if terminalCode == `` {
+			terminalInfo, err := services.GetTerminal(utils.DATA_SOURCE_WIND, "")
+			if err != nil {
+				br.Msg = "获取可以使用的wind地址失败!"
+				br.ErrMsg = "获取可以使用的wind地址失败,err:" + err.Error()
+				return
+			}
+			windUrl = terminalInfo.ServerUrl
+			terminalCode = terminalInfo.TerminalCode
+		}
+
+		if terminalCode == `` {
+			br.Msg = "没有配置wind终端!"
+			br.ErrMsg = "没有配置wind终端"
+			return
 		}
 
 		if windUrl == `` {
@@ -88,7 +107,6 @@ func (this *WindWsdController) Add() {
 
 		//windUrl = utils.Hz_Wind_Data_Url_LIST[1].Url
 		dataItem, errCode, err := services.GetEdbDataFromWindUrlWsd(windUrl, req.StockCode, req.EdbCode, utils.BASE_START_DATE, endDate)
-		//dataItem, errCode, err := services.GetEdbDataFromWind(req.EdbCode, utils.BASE_START_DATE, endDate)
 		if errCode == 421 { //指标超限
 			br.Ret = 421
 			br.Msg = "指标超限!"
@@ -105,7 +123,7 @@ func (this *WindWsdController) Add() {
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()
 			return
 		}
-		err = models.AddEdbDataFromWindWsd(req.EdbCode, dataItem)
+		err = models.AddEdbDataFromWindWsd(req.StockCode, dataItem)
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 AddEdbDataFromWindWsd,Err:" + err.Error()

+ 7 - 2
models/base_from_wind_wsd.go

@@ -11,7 +11,7 @@ import (
 
 var windWsd = "wsd"
 
-func AddEdbDataFromWindWsd(securitiesCode string, item map[string]map[string]interface{}) (err error) {
+func AddEdbDataFromWindWsd(stockCode string, item map[string]map[string]interface{}) (err error) {
 	o := orm.NewOrm()
 
 	var isAdd bool
@@ -22,17 +22,21 @@ func AddEdbDataFromWindWsd(securitiesCode string, item map[string]map[string]int
 			var indexCode string
 			wkInt, err := strconv.ParseInt(wk, 10, 64)
 			if err != nil {
+				fmt.Println("ParseInt Err:" + err.Error() + ";wk:" + wk)
 				return err
 			}
 
 			vk = strings.ToLower(vk)
-			indexCode = windWsd + securitiesCode + vk
+			indexCode = windWsd + stockCode + vk
 
 			timeStr := wk
 			wkInt = wkInt / 1000
 			t := time.Unix(wkInt, 0)
 			dateTime := t.Format(utils.FormatDate)
 			//saveVal := utils.SubFloatToString(val, 20)
+			if vv == nil {
+				continue
+			}
 			var saveVal string
 			switch vt := vv.(type) {
 			case int:
@@ -51,6 +55,7 @@ func AddEdbDataFromWindWsd(securitiesCode string, item map[string]map[string]int
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = o.Raw(addSql).Exec()
 		if err != nil {
+			fmt.Println("sql exec err:" + err.Error())
 			return
 		}
 	}

+ 71 - 0
models/edb_terminal.go

@@ -0,0 +1,71 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// EdbTerminal 指标终端
+type EdbTerminal struct {
+	TerminalId   int       `orm:"column(terminal_id);pk"`
+	Source       int       `orm:"column(source)" description:"指标来源类型"`
+	Name         string    `description:"终端别名"`
+	TerminalCode string    `description:"终端编码,用于配置在机器上"`
+	ServerUrl    string    `description:"终端地址"`
+	Num          int       `description:"终端最大指标数"`
+	Status       int       `description:"状态,1启用,2禁用"`
+	Value        string    `description:"终端相关的凭证"`
+	ModifyTime   time.Time `description:"修改时间"`
+	CreateTime   time.Time `description:"创建时间"`
+}
+
+// GetEdbTerminalListBySource 根据指标来源类型获取所有的终端列表
+func GetEdbTerminalListBySource(source int) (items []*EdbTerminal, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT *  FROM edb_terminal WHERE source = ? and status=1 ORDER BY terminal_id ASC `
+	_, err = o.Raw(sql, source).QueryRows(&items)
+	return
+}
+
+// GetEdbTerminalFirstBySource 根据指标来源类型获取配置的首个终端信息
+func GetEdbTerminalFirstBySource(source int) (item *EdbTerminal, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT *  FROM edb_terminal WHERE source = ? and status=1 ORDER BY terminal_id ASC Limit 1 `
+	err = o.Raw(sql, source).QueryRow(&item)
+	return
+}
+
+type TerminalCodeCountGroup struct {
+	TerminalCode string
+	Total        int
+}
+
+// GetEdbTerminalByCode 根据终端编码获取终端信息
+func GetEdbTerminalByCode(terminalCode string) (item *EdbTerminal, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT *  FROM edb_terminal WHERE terminal_code = ? `
+	err = o.Raw(sql, terminalCode).QueryRow(&item)
+	return
+}
+
+// GetEdbCountGroupByTerminal 获取终端code分组总数
+func GetEdbCountGroupByTerminal(source int) (list []TerminalCodeCountGroup, err error) {
+	o := orm.NewOrm()
+	sql := `select terminal_code,count(1) total from edb_info where source = ? AND no_update=0 AND terminal_code != "" group by terminal_code; `
+	_, err = o.Raw(sql, source).QueryRows(&list)
+	return
+}
+
+type BaseIndexTerminalCode struct {
+	TerminalCode string `description:"终端编码,用于配置在机器上"`
+	IndexName    string
+}
+
+// GetBaseIndexTerminalCode 获取数据源的终端code
+func GetBaseIndexTerminalCode(edbCode, tableName string) (item BaseIndexTerminalCode, err error) {
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`select terminal_code, index_name from %s where index_code = ? `, tableName)
+	err = o.Raw(sql, edbCode).QueryRow(&item)
+	return
+}

+ 1 - 0
routers/router.go

@@ -35,6 +35,7 @@ func init() {
 		beego.NSNamespace("/wind",
 			beego.NSInclude(
 				&controllers.WindController{},
+				&controllers.WindWsdController{},
 			),
 		),
 		beego.NSNamespace("/lz",

+ 0 - 2
services/base_from_wind_wsd.go

@@ -80,8 +80,6 @@ func GetEdbDataFromWindUrlWsd(windUrl, securitiesCode, edbCode, startDate, endDa
 	requestWindUrl = fmt.Sprintf(requestWindUrl, securitiesCode, edbCode, startDate, endDate)
 	utils.FileLog.Info(fmt.Sprintf("windUrl:%s", requestWindUrl))
 	body, err := http.Get(requestWindUrl)
-	fmt.Println("GetEdbDataFromWindUrlWsd body:")
-	fmt.Println(string(body))
 	utils.FileLog.Info(fmt.Sprint("wind result:", string(body)))
 	err = json.Unmarshal(body, &item)
 	return

+ 93 - 0
services/edb_terminal.go

@@ -0,0 +1,93 @@
+package services
+
+import (
+	"errors"
+	"eta/eta_index_lib/models"
+	"eta/eta_index_lib/utils"
+)
+
+// GetTerminal 获取终端信息
+func GetTerminal(source int, oldTerminalCode string) (edbTerminal *models.EdbTerminal, err error) {
+	if source == utils.DATA_SOURCE_WIND && oldTerminalCode == "" {
+		tmpConfig := new(models.EdbConfig)
+		tmpConfig, err = models.GetConfigDetailByCode("wind_terminal_code")
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			err = errors.New("获取配置的wind地址失败,err:" + err.Error())
+			return
+		}
+		err = nil
+		if tmpConfig != nil {
+			oldTerminalCode = tmpConfig.ConfigValue
+			//return
+		}
+	}
+	if oldTerminalCode != "" {
+		edbTerminal, err = models.GetEdbTerminalByCode(oldTerminalCode)
+		if err != nil {
+			return
+		}
+		return
+	}
+
+	// 配置中没有的话,那么就从分组获取,
+	list, err := models.GetEdbCountGroupByTerminal(source)
+	if err != nil {
+		return
+	}
+	//windUrlNum := 0
+
+	//获取对应的配置url
+	terminalNumMap := make(map[string]int)
+	for _, v := range list {
+		terminalNumMap[v.TerminalCode] = v.Total
+	}
+
+	terminalList, err := models.GetEdbTerminalListBySource(source)
+	if err != nil {
+		return
+	}
+	if len(terminalList) == 0 {
+		err = errors.New("终端地址未配置")
+		return
+	}
+	num := 0
+	for _, v := range terminalList {
+		tmpNum := terminalNumMap[v.TerminalCode]
+		if edbTerminal == nil {
+			edbTerminal = v
+			num = tmpNum
+		} else if tmpNum < num {
+			edbTerminal = v
+			num = tmpNum
+		}
+	}
+	if edbTerminal == nil {
+		err = errors.New("获取配置的终端地址失败")
+		return
+	}
+	/*if edbTerminal != nil {
+		windUrl = edbTerminal.ServerUrl
+		terminalCode = edbTerminal.TerminalCode
+	}*/
+	return
+}
+
+func GetFirstTerminal(source int, oldTerminalCode string) (edbTerminal *models.EdbTerminal, err error) {
+	if oldTerminalCode != "" {
+		edbTerminal, err = models.GetEdbTerminalByCode(oldTerminalCode)
+		if err != nil {
+			return
+		}
+		return
+	}
+
+	edbTerminal, err = models.GetEdbTerminalFirstBySource(source)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			err = errors.New("终端未配置")
+			return
+		}
+		return
+	}
+	return
+}

+ 6 - 5
services/hongze_sync_trial.go

@@ -28,14 +28,15 @@ type SyncTrialEdbInfoResp struct {
 	Code int    `json:"code"`
 	Msg  string `json:"msg"`
 	Data struct {
-		EdbCode   string `json:"edb_code"`
-		Source    int    `json:"source"`
-		ServerUrl string `json:"server_url"`
+		EdbCode      string `json:"edb_code"`
+		Source       int    `json:"source"`
+		ServerUrl    string `json:"server_url"`
+		TerminalCode string `json:"terminal_code"`
 	} `json:"data"`
 }
 
 // GetHzWindUrl 获取wind的url
-func GetHzWindUrl(edbCode string, source int) (windUrl string, err error, errMsg string) {
+func GetHzWindUrl(edbCode string, source int) (windUrl string, terminalCode string, err error, errMsg string) {
 	requestSyncTrialUrl := syncTrialUrl + `common/edb_info/edb_code?edb_code=%s&source=%d`
 	requestSyncTrialUrl = fmt.Sprintf(requestSyncTrialUrl, edbCode, source)
 
@@ -73,6 +74,6 @@ func GetHzWindUrl(edbCode string, source int) (windUrl string, err error, errMsg
 		return
 	}
 	windUrl = item.Data.ServerUrl
-
+	terminalCode = item.Data.TerminalCode
 	return
 }