Explorar o código

处理同花顺、wind、路透、彭博、钢联化工、有色、百川盈孚、红桃三 绑定的终端

xyxie hai 1 ano
pai
achega
baf769c91d

+ 1 - 1
controllers/base_from_baiinfo.go

@@ -152,7 +152,7 @@ func (this *BaiinfoController) HandleExcelData() {
 	}
 
 	// 处理excel表数据
-	services.HandleBaiinfoIndex(req.BaseFilePath, req.RenameFilePath, req.IndexName, req.IndexCode, req.ExcelDataMap)
+	services.HandleBaiinfoIndex(req.BaseFilePath, req.RenameFilePath, req.IndexName, req.IndexCode, req.ExcelDataMap, req.TerminalCode)
 
 	br.Ret = 200
 	br.Success = true

+ 2 - 2
controllers/base_from_lt.go

@@ -43,7 +43,7 @@ func (this *LtController) Add() {
 	cacheKey = utils.CACHE_EDB_DATA_ADD + strconv.Itoa(source) + "_" + req.EdbCode
 	if !utils.Rc.IsExist(cacheKey) {
 		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-		dataItem, err := services.GetEdbDataFromLt(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE)
+		dataItem, err := services.GetEdbDataFromLt(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE, "")
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromLt,Err:" + err.Error()
@@ -112,7 +112,7 @@ func (this *LtController) Refresh() {
 		return
 	}
 
-	dataItem, err := services.GetEdbDataFromLt(req.EdbCode, req.StartDate, utils.BASE_END_DATE)
+	dataItem, err := services.GetEdbDataFromLt(req.EdbCode, req.StartDate, utils.BASE_END_DATE, edbInfo.TerminalCode)
 	if err != nil {
 		br.Msg = "获取指标信息失败!"
 		br.ErrMsg = "获取指标信息失败 GetEdbDataFromLt,Err:" + err.Error()

+ 2 - 2
controllers/base_from_pb.go

@@ -43,7 +43,7 @@ func (this *PbController) Add() {
 	cacheKey = utils.CACHE_EDB_DATA_ADD + strconv.Itoa(source) + "_" + req.EdbCode
 	if !utils.Rc.IsExist(cacheKey) {
 		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-		dataItem, err := services.GetEdbDataFromPb(req.EdbCode, utils.BASE_START_DATE_UnSpace, utils.BASE_END_DATE_UnSpace)
+		dataItem, err := services.GetEdbDataFromPb(req.EdbCode, utils.BASE_START_DATE_UnSpace, utils.BASE_END_DATE_UnSpace, "")
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromPb,Err:" + err.Error()
@@ -115,7 +115,7 @@ func (this *PbController) Refresh() {
 
 	//开始日期格式化
 	startDateTime, _ := time.ParseInLocation(utils.FormatDate, req.StartDate, time.Local)
-	dataItem, err := services.GetEdbDataFromPb(req.EdbCode, startDateTime.Format(utils.FormatDateUnSpace), utils.BASE_END_DATE_UnSpace)
+	dataItem, err := services.GetEdbDataFromPb(req.EdbCode, startDateTime.Format(utils.FormatDateUnSpace), utils.BASE_END_DATE_UnSpace, edbInfo.TerminalCode)
 	if err != nil {
 		br.Msg = "获取指标信息失败!"
 		br.ErrMsg = "获取指标信息失败 GetEdbDataFromPb,Err:" + err.Error()

+ 2 - 2
controllers/base_from_pb_finance.go

@@ -54,7 +54,7 @@ func (this *PbFinanceController) Add() {
 			br.ErrMsg = "指标编码异常,请传入客户编码"
 			return
 		}
-		dataItem, err := services.GetEdbDataFromPbFinance(edbCodeArr[0], edbCodeArr[1], utils.BASE_START_DATE_UnSpace, utils.BASE_END_DATE_UnSpace)
+		dataItem, err := services.GetEdbDataFromPbFinance(edbCodeArr[0], edbCodeArr[1], utils.BASE_START_DATE_UnSpace, utils.BASE_END_DATE_UnSpace, "")
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromPb,Err:" + err.Error()
@@ -136,7 +136,7 @@ func (this *PbFinanceController) Refresh() {
 		br.ErrMsg = "指标编码异常,请传入客户编码"
 		return
 	}
-	dataItem, err := services.GetEdbDataFromPbFinance(edbCodeArr[0], edbCodeArr[1], startDateTime.Format(utils.FormatDateUnSpace), utils.BASE_END_DATE_UnSpace)
+	dataItem, err := services.GetEdbDataFromPbFinance(edbCodeArr[0], edbCodeArr[1], startDateTime.Format(utils.FormatDateUnSpace), utils.BASE_END_DATE_UnSpace, edbInfo.TerminalCode)
 	if err != nil {
 		br.Msg = "获取指标信息失败!"
 		br.ErrMsg = "获取指标信息失败 GetEdbDataFromPb,Err:" + err.Error()

+ 1 - 1
controllers/base_from_sci.go

@@ -135,7 +135,7 @@ func (this *SciController) HandleExcelData() {
 	}
 
 	// 处理excel表数据
-	services.HandleSciIndex(req.IndexNameList, req.ThirdIndexIdList, req.FrequencyList, req.UnitList, req.DataMap)
+	services.HandleSciIndex(req.IndexNameList, req.ThirdIndexIdList, req.FrequencyList, req.UnitList, req.DataMap, req.TerminalCode)
 
 	br.Ret = 200
 	br.Success = true

+ 1 - 1
controllers/base_from_smm.go

@@ -153,7 +153,7 @@ func (this *SmmController) HandleExcelData() {
 	}
 
 	// 处理excel表数据
-	services.SmmIndexHandle(req.BaseFilePath, req.RenameFilePath, req.IndexName, req.IndexCode, req.Unit, req.Frequency, req.Source, req.ExcelDataMap)
+	services.SmmIndexHandle(req.BaseFilePath, req.RenameFilePath, req.IndexName, req.IndexCode, req.Unit, req.Frequency, req.Source, req.ExcelDataMap, req.TerminalCode)
 
 	br.Ret = 200
 	br.Success = true

+ 2 - 2
controllers/base_from_ths.go

@@ -43,7 +43,7 @@ func (this *ThsController) Add() {
 	cacheKey = utils.CACHE_EDB_DATA_ADD + strconv.Itoa(source) + "_" + req.EdbCode
 	if !utils.Rc.IsExist(cacheKey) {
 		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-		dataItem, err := services.GetEdbDataFromThs(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE)
+		dataItem, err := services.GetEdbDataFromThs(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE, "")
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromThs,Err:" + err.Error()
@@ -114,7 +114,7 @@ func (this *ThsController) Refresh() {
 	defer func() {
 		utils.Rc.Delete(cacheKey)
 	}()
-	dataItem, err := services.GetEdbDataFromThs(req.EdbCode, req.StartDate, utils.BASE_END_DATE)
+	dataItem, err := services.GetEdbDataFromThs(req.EdbCode, req.StartDate, utils.BASE_END_DATE, edbInfo.TerminalCode)
 	if err != nil {
 		br.Msg = "获取指标信息失败!"
 		br.ErrMsg = "获取指标信息失败 GetEdbDataFromThs,Err:" + err.Error()

+ 37 - 10
controllers/base_from_wind.go

@@ -53,9 +53,10 @@ func (this *WindController) Add() {
 		}
 
 		windUrl := ``
-
+		terminalCode := ""
 		// 试用平台的话,需要额外从弘则这边获取下地址
 		if utils.BusinessCode == utils.HZ_TRIAL_BUSSINESS_CODE {
+			// todo 从体验版中获取对应的终端信息
 			tmpWindUrl, err, errMsg := services.GetHzWindUrl(req.EdbCode, source)
 			if err != nil {
 				br.Msg = "添加失败!"
@@ -69,12 +70,14 @@ func (this *WindController) Add() {
 		}
 
 		if windUrl == `` {
-			windUrl, err = GetServerUrl()
+			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 windUrl == `` {
@@ -87,6 +90,10 @@ func (this *WindController) Add() {
 		windUrlCacheKey := utils.CACHE_WIND_URL + ":" + req.EdbCode
 		_ = utils.Rc.SetNX(windUrlCacheKey, windUrl, utils.GetTodayLastSecond())
 
+		// 设置指标与终端关系的缓存
+		terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + req.EdbCode
+		_ = utils.Rc.SetNX(terminalCodeCacheKey, terminalCode, utils.GetTodayLastSecond())
+
 		//windUrl = utils.Hz_Wind_Data_Url_LIST[1].Url
 		dataItem, errCode, err := services.GetEdbDataFromWindUrl(windUrl, req.EdbCode, utils.BASE_START_DATE, endDate)
 		//dataItem, errCode, err := services.GetEdbDataFromWind(req.EdbCode, utils.BASE_START_DATE, endDate)
@@ -178,7 +185,6 @@ func (this *WindController) Refresh() {
 	if strings.Contains(req.EdbCode, ".") {
 		endDate = time.Now().Format(utils.FormatDate)
 	}
-
 	dataItem, errCode, err := services.GetEdbDataFromWindUrl(edbInfo.ServerUrl, req.EdbCode, req.StartDate, endDate)
 	if errCode == 421 { //指标超限
 		br.Ret = 421
@@ -226,7 +232,7 @@ func (this *WindController) Refresh() {
 }
 
 // GetServerUrl 获取服务器地址
-func GetServerUrl() (windUrl string, err error) {
+func GetServerUrl() (windUrl string, terminalCode string, err error) {
 	// 先配置中获取,如果有指定配置的话,那么取配置中的数据
 	tmpConfig, err := models.GetConfigDetailByCode("wind_data_url")
 	if err != nil && err.Error() != utils.ErrNoRow() {
@@ -239,27 +245,48 @@ func GetServerUrl() (windUrl string, err error) {
 		return
 	}
 
-	// 配置中没有的话,那么就从分组获取
+	// 配置中没有的话,那么就从分组获取, todo 改成从edb_info指标库里根据终端码进行分组的指标数据统计
 	list, err := models.GetServerUrlCountGroupByServerUrl()
 	if err != nil {
 		return
 	}
-	windUrlNum := 0
+	//windUrlNum := 0
 
-	//现有系统的wind数据服务地址分配
-	windUrlMap := make(map[string]int)
+	//获取对应的配置url
+	terminalNumMap := make(map[string]int)
 	for _, v := range list {
-		windUrlMap[v.ServerUrl] = v.Total
+		terminalNumMap[v.ServerUrl] = v.Total
 	}
 
-	for _, tmpWind := range utils.Hz_Wind_Data_Url_LIST {
+	/*for _, tmpWind := range utils.Hz_Wind_Data_Url_LIST {
 		tmpWindUrl := tmpWind.Url
 		tmpNum := windUrlMap[tmpWindUrl]
 		if windUrl == `` || (windUrl != `` && tmpNum < windUrlNum) {
 			windUrl = tmpWindUrl
 			windUrlNum = tmpNum
 		}
+	}*/
+
+	terminalList, err := models.GetEdbTerminalListBySource(utils.DATA_SOURCE_WIND)
+	if err != nil {
+		return
 	}
 
+	num := 0
+	edbTerminal := new(models.EdbTerminal)
+	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 {
+		windUrl = edbTerminal.ServerUrl
+		terminalCode = edbTerminal.TerminalCode
+	}
 	return
 }

+ 2 - 1
controllers/edb_info.go

@@ -97,7 +97,8 @@ func (this *EdbInfoController) Add() {
 	var windUrl string
 	if isAdd {
 		if req.Source == utils.DATA_SOURCE_WIND {
-			windUrl, err = GetServerUrl()
+			// todo 这个接口不确定是否在使用
+			windUrl, _, err = GetServerUrl()
 			if err != nil {
 				br.Msg = "判断失败!"
 				br.ErrMsg = "判断失败,Err:" + err.Error()

+ 2 - 2
controllers/future_good/future_good_edb_info.go

@@ -70,7 +70,7 @@ func (this *FutureGoodEdbInfoController) Add() {
 		}
 		endDate := time.Now().Format(utils.FormatDate)
 
-		dataItem, err := services.GetFutureGoodDataFromThs(req.EdbCode, utils.BASE_START_DATE, endDate)
+		dataItem, err := services.GetFutureGoodDataFromThs(req.EdbCode, utils.BASE_START_DATE, endDate, "")
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetFutureGoodDataFromThs,Err:" + err.Error()
@@ -169,7 +169,7 @@ func (this *FutureGoodEdbInfoController) Refresh() {
 	if startDate == `` { // 如果传入的日期为空的话,那么就默认兼容一周的数据吧
 		startDate = endDateTime.AddDate(0, 0, -7).Format(utils.FormatDate)
 	}
-	dataItem, err := services.GetFutureGoodDataFromThs(req.FutureGoodEdbCode, req.StartDate, endDate)
+	dataItem, err := services.GetFutureGoodDataFromThs(req.FutureGoodEdbCode, req.StartDate, endDate, futureGoodEdbInfo.TerminalCode)
 	if err != nil {
 		br.Msg = "获取指标信息失败!"
 		br.ErrMsg = "获取指标信息失败 GetFutureGoodDataFromThs,Err:" + err.Error()

+ 2 - 0
models/base_from_baiinfo.go

@@ -190,6 +190,7 @@ type HandleBaiinfoExcelDataReq struct {
 	IndexName      string
 	IndexCode      string
 	ExcelDataMap   map[string]string
+	TerminalCode   string
 }
 
 type BaseFromBaiinfoIndex struct {
@@ -205,6 +206,7 @@ type BaseFromBaiinfoIndex struct {
 	RenameFileName         string
 	CreateTime             time.Time
 	ModifyTime             time.Time
+	TerminalCode           string
 }
 
 func (d *BaseFromBaiinfoIndex) AddBaseFromBaiinfoIndex() (lastId int64, err error) {

+ 2 - 0
models/base_from_sci.go

@@ -215,6 +215,7 @@ type HandleSciExcelDataReq struct {
 	ThirdIndexIdList []string
 	FrequencyList    []string
 	UnitList         []string
+	TerminalCode     string `description:"终端编码,用于配置在机器上"`
 }
 
 // BaseFromSciIndex 红桃3指标表格
@@ -229,6 +230,7 @@ type BaseFromSciIndex struct {
 	EndDate            time.Time `gorm:"column:end_date" json:"end_date"`
 	CreateTime         time.Time `gorm:"autoCreateTime;column:create_time" json:"create_time"`       //创建时间
 	ModifyTime         time.Time `gorm:"autoUpdateTime:milli;column:modify_time" json:"modify_time"` //最后更新时间
+	TerminalCode       string    `description:"终端编码,用于配置在机器上" json:"terminal_code"`
 }
 
 // TableName get sql table name.获取数据库表名

+ 2 - 0
models/base_from_smm.go

@@ -209,6 +209,7 @@ type BaseFromSmmIndex struct {
 	RenameFileName     string
 	StartDate          string
 	EndDate            string
+	TerminalCode       string
 	CreateTime         time.Time
 	ModifyTime         time.Time
 }
@@ -273,6 +274,7 @@ type HandleSmmExcelDataReq struct {
 	Unit           string
 	Frequency      string
 	ExcelDataMap   map[string]string
+	TerminalCode   string
 }
 
 // MultiUpdateBaseFromSmmDataValue 批量更新SMM指标数据

+ 1 - 0
models/edb_info.go

@@ -47,6 +47,7 @@ type EdbInfo struct {
 	Calendar         string  `description:"公历/农历" orm:"default(公历);"`
 	DataDateType     string  `orm:"column(data_date_type);size(255);null;default(交易日)"`
 	ManualSave       int     `description:"是否有手动保存过上下限: 0-否; 1-是"`
+	TerminalCode     string  `description:"终端编码,用于配置在机器上"`
 }
 
 func (e *EdbInfo) Add() (err error) {

+ 44 - 0
models/edb_terminal.go

@@ -0,0 +1,44 @@
+package models
+
+import (
+	"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.NewOrmUsingDB("data")
+	sql := ` SELECT *  FROM edb_terminal WHERE source = ? and status=1 ORDER BY terminal_id ASC `
+	_, err = o.Raw(sql, source).QueryRows(&items)
+	return
+}
+
+// GetEdbTerminalByCode 根据终端编码获取终端信息
+func GetEdbTerminalByCode(terminalCode string) (item *EdbTerminal, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT *  FROM edb_terminal WHERE terminal_code = ? `
+	err = o.Raw(sql, terminalCode).QueryRow(&item)
+	return
+}
+
+// GetEdbCountGroupByTerminal 获取终端code分组总数
+func GetEdbCountGroupByTerminal(source int) (list []ServerUrlCountGroup, err error) {
+	o := orm.NewOrm()
+	sql := `select server_url,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
+}

+ 1 - 0
models/future_good/future_good_edb_info.go

@@ -26,6 +26,7 @@ type FutureGoodEdbInfo struct {
 	LatestValue         float64   `description:"数据最新的值"`
 	LatestDate          time.Time `description:"数据最新的日期"`
 	ServerUrl           string    `description:"服务器地址"`
+	TerminalCode        string    `description:"终端编码,用于配置在机器上"`
 	CreateTime          time.Time
 	ModifyTime          time.Time
 }

+ 2 - 2
services/base_from_baiinfo.go

@@ -11,7 +11,7 @@ import (
 )
 
 // HandleBaiinfoIndex 处理百川盈弗的excel数据
-func HandleBaiinfoIndex(baseFilePath, renameFilePath, indexName, indexCode string, excelDataMap map[string]string) {
+func HandleBaiinfoIndex(baseFilePath, renameFilePath, indexName, indexCode string, excelDataMap map[string]string, terminalCode string) {
 	var err error
 
 	errMsgList := make([]string, 0)
@@ -59,7 +59,7 @@ func HandleBaiinfoIndex(baseFilePath, renameFilePath, indexName, indexCode strin
 		indexObj.CreateTime = time.Now()
 		indexObj.BaseFileName = baseFilePath
 		indexObj.RenameFileName = renameFilePath
-
+		indexObj.TerminalCode = terminalCode
 		lastId, err := indexObj.AddBaseFromBaiinfoIndex()
 		if err != nil {
 			fmt.Println("add err:" + err.Error())

+ 17 - 4
services/base_from_lt.go

@@ -2,7 +2,6 @@ package services
 
 import (
 	"encoding/json"
-	"errors"
 	"eta/eta_index_lib/utils"
 	"fmt"
 
@@ -15,13 +14,27 @@ type EdbDataFromLt struct {
 }
 
 // GetEdbDataFromLt 获取路透数据
-func GetEdbDataFromLt(edbCode, startDate, endDate string) (dataList map[int64]interface{}, err error) {
-	if utils.Hz_LT_Data_Url == `` {
+func GetEdbDataFromLt(edbCode, startDate, endDate, edbTerminalCode string) (dataList map[int64]interface{}, err error) {
+	/*if utils.Hz_LT_Data_Url == `` {
 		err = errors.New("路透社接口未配置")
 		return
+	}*/
+	terminal, err := GetTerminal(utils.DATA_SOURCE_THS, edbTerminalCode)
+	if err != nil {
+		err = fmt.Errorf("获取路透社接口配置出错 Err: %s", err)
+		return
+	}
+	if terminal.ServerUrl == "" {
+		err = fmt.Errorf("路透社接口未配置")
+		return
+	}
+	if edbTerminalCode == "" {
+		// 设置指标与终端关系的缓存
+		terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + edbCode
+		_ = utils.Rc.Put(terminalCodeCacheKey, terminal.TerminalCode, utils.GetTodayLastSecond())
 	}
 	dataList = make(map[int64]interface{})
-	ltUrl := utils.Hz_LT_Data_Url + `edbInfo/ek?EdbCode=%s&StartDate=%s&EndDate=%s`
+	ltUrl := terminal.ServerUrl + `edbInfo/ek?EdbCode=%s&StartDate=%s&EndDate=%s`
 	ltUrl = fmt.Sprintf(ltUrl, edbCode, startDate, endDate)
 	utils.FileLog.Info("ltUrl:%s", ltUrl)
 	body, err := http.Get(ltUrl)

+ 34 - 7
services/base_from_pb.go

@@ -2,7 +2,6 @@ package services
 
 import (
 	"encoding/json"
-	"errors"
 	"eta/eta_index_lib/models"
 	"eta/eta_index_lib/utils"
 	"fmt"
@@ -11,13 +10,27 @@ import (
 )
 
 // GetEdbDataFromPb 获取Pb数据
-func GetEdbDataFromPb(edbCode, startDate, endDate string) (item *models.EdbDataFromPb, err error) {
-	if utils.Hz_Pb_Data_Url == `` {
+func GetEdbDataFromPb(edbCode, startDate, endDate, edbTerminalCode string) (item *models.EdbDataFromPb, err error) {
+	/*	if utils.Hz_Pb_Data_Url == `` {
 		err = errors.New("彭博接口未配置")
 		return
+	}*/
+	terminal, err := GetTerminal(utils.DATA_SOURCE_THS, edbTerminalCode)
+	if err != nil {
+		err = fmt.Errorf("获取彭博接口配置出错 Err: %s", err)
+		return
+	}
+	if terminal.ServerUrl == "" {
+		err = fmt.Errorf("彭博接口未配置")
+		return
+	}
+	if edbTerminalCode == "" {
+		// 设置指标与终端关系的缓存
+		terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + edbCode
+		_ = utils.Rc.Put(terminalCodeCacheKey, terminal.TerminalCode, utils.GetTodayLastSecond())
 	}
 	edbCode = url.QueryEscape(edbCode)
-	bpUrl := utils.Hz_Pb_Data_Url + `edbInfo/pb?EdbCode=%s&StartDate=%s&EndDate=%s`
+	bpUrl := terminal.ServerUrl + `edbInfo/pb?EdbCode=%s&StartDate=%s&EndDate=%s`
 	bpUrl = fmt.Sprintf(bpUrl, edbCode, startDate, endDate)
 	utils.FileLog.Info("bpUrl:" + bpUrl)
 	body, err := http.Get(bpUrl)
@@ -37,14 +50,28 @@ func GetEdbDataFromPb(edbCode, startDate, endDate string) (item *models.EdbDataF
 }
 
 // GetEdbDataFromPbFinance 获取Pb财务数据
-func GetEdbDataFromPbFinance(companyCode, edbCode, startDate, endDate string) (item *models.EdbDataFromPb, err error) {
-	if utils.Hz_Pb_Data_Url == `` {
+func GetEdbDataFromPbFinance(companyCode, edbCode, startDate, endDate, edbTerminalCode string) (item *models.EdbDataFromPb, err error) {
+	/*if utils.Hz_Pb_Data_Url == `` {
 		err = errors.New("彭博接口未配置")
 		return
+	}*/
+	terminal, err := GetTerminal(utils.DATA_SOURCE_THS, edbTerminalCode)
+	if err != nil {
+		err = fmt.Errorf("获取彭博接口配置出错 Err: %s", err)
+		return
+	}
+	if terminal.ServerUrl == "" {
+		err = fmt.Errorf("彭博接口未配置")
+		return
+	}
+	if edbTerminalCode == "" {
+		// 设置指标与终端关系的缓存
+		terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + edbCode
+		_ = utils.Rc.Put(terminalCodeCacheKey, terminal.TerminalCode, utils.GetTodayLastSecond())
 	}
 	companyCode = url.QueryEscape(companyCode)
 	edbCode = url.QueryEscape(edbCode)
-	bpUrl := utils.Hz_Pb_Data_Url + `edbInfo/pb/finance?CompanyCode=%s&EdbCode=%s&StartDate=%s&EndDate=%s`
+	bpUrl := terminal.ServerUrl + `edbInfo/pb/finance?CompanyCode=%s&EdbCode=%s&StartDate=%s&EndDate=%s`
 	bpUrl = fmt.Sprintf(bpUrl, companyCode, edbCode, startDate, endDate)
 	utils.FileLog.Info("bpUrl:" + bpUrl)
 	body, err := http.Get(bpUrl)

+ 4 - 3
services/base_from_sci.go

@@ -11,7 +11,7 @@ import (
 )
 
 // HandleSciIndex 处理卓创(红桃3)的Excel数据
-func HandleSciIndex(indexNameList, thirdIndexIdList, frequencyList, unitList []string, dataMap map[string]map[string]string) {
+func HandleSciIndex(indexNameList, thirdIndexIdList, frequencyList, unitList []string, dataMap map[string]map[string]string, terminalCode string) {
 	// 卓创(红桃3)指标id列表
 
 	sciIndexModel := new(models.BaseFromSciIndex)
@@ -50,8 +50,9 @@ func HandleSciIndex(indexNameList, thirdIndexIdList, frequencyList, unitList []s
 			Unit:      unitList[key],
 			//StartDate: time.Time{},
 			//EndDate:      time.Time{},
-			CreateTime: time.Now(),
-			ModifyTime: time.Now(),
+			TerminalCode: terminalCode,
+			CreateTime:   time.Now(),
+			ModifyTime:   time.Now(),
 		}
 		addSciIndexList = append(addSciIndexList, tmpSciIndex)
 	}

+ 2 - 1
services/base_from_smm.go

@@ -11,7 +11,7 @@ import (
 	"time"
 )
 
-func SmmIndexHandle(baseFilePath, renameFilePath, indexName, indexCode, unit, frequency, source string, excelDataMap map[string]string) {
+func SmmIndexHandle(baseFilePath, renameFilePath, indexName, indexCode, unit, frequency, source string, excelDataMap map[string]string, terminalCode string) {
 	var err error
 
 	errMsgList := make([]string, 0)
@@ -69,6 +69,7 @@ func SmmIndexHandle(baseFilePath, renameFilePath, indexName, indexCode, unit, fr
 		indexObj.CreateTime = time.Now()
 		indexObj.BaseFileName = baseFilePath
 		indexObj.RenameFileName = renameFilePath
+		indexObj.TerminalCode = terminalCode
 		lastId, err := indexObj.AddBaseFromSmmIndex()
 		if err != nil {
 			fmt.Println("add err:" + err.Error())

+ 60 - 17
services/base_from_ths.go

@@ -25,25 +25,43 @@ type EdbDataFromThsInterface struct {
 	} `json:"tables"`
 }
 
-func GetEdbDataFromThs(edbCode, startDate, endDate string) (item models.EdbDataFromThs, err error) {
-	//if utils.BusinessCode == utils.HZ_TRIAL_BUSSINESS_CODE { // 体验版也走客户端
-	//	return getEdbDataFromThsApp(edbCode, startDate, endDate, 0)
-	//}
+func GetEdbDataFromThs(edbCode, startDate, endDate, edbTerminalCode string) (item models.EdbDataFromThs, err error) {
+	terminal, err := GetTerminal(utils.DATA_SOURCE_THS, edbTerminalCode)
+	if err != nil {
+		err = fmt.Errorf("获取同花顺接口配置出错 Err: %s", err)
+		return
+	}
+	if terminal.ServerUrl == "" {
+		err = fmt.Errorf("同花顺接口未配置")
+		return
+	}
+
+	if edbTerminalCode == "" {
+		// 设置指标与终端关系的缓存
+		terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + edbCode
+		_ = utils.Rc.Put(terminalCodeCacheKey, terminal.TerminalCode, utils.GetTodayLastSecond())
+	}
+
 	// 如果没有配置,获取配置的方式是api,那么就走官方接口
 	if utils.ThsDataMethod == "" || utils.ThsDataMethod == "api" {
-		return getEdbDataFromThsHttp(edbCode, startDate, endDate)
+		var token string
+		token, err = GetAccessToken(false, terminal.Value)
+		if err != nil {
+			return
+		}
+		return getEdbDataFromThsHttp(edbCode, startDate, endDate, terminal.Value, token)
 	}
 
-	return getEdbDataFromThsApp(edbCode, startDate, endDate, 0)
+	return getEdbDataFromThsApp(edbCode, startDate, endDate, 0, terminal.ServerUrl)
 }
 
 // getEdbDataFromThs 获取同花顺接口数据
-func getEdbDataFromThsApp(edbCode, startDate, endDate string, num int) (item models.EdbDataFromThs, err error) {
-	if utils.Hz_Ths_Data_Url == `` {
+func getEdbDataFromThsApp(edbCode, startDate, endDate string, num int, serverUrl string) (item models.EdbDataFromThs, err error) {
+	if serverUrl == `` {
 		err = errors.New("同花顺接口未配置")
 		return
 	}
-	thsUrl := utils.Hz_Ths_Data_Url + `edbInfo/ths?EdbCode=%s&StartDate=%s&EndDate=%s`
+	thsUrl := serverUrl + `edbInfo/ths?EdbCode=%s&StartDate=%s&EndDate=%s`
 	thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
 	utils.FileLog.Info("thsUrl:" + thsUrl)
 	body, err := http.Get(thsUrl)
@@ -68,7 +86,7 @@ func getEdbDataFromThsApp(edbCode, startDate, endDate string, num int) (item mod
 		//session has expired,please re-login after using the system
 		//如果是同花顺登录session失效了,那么就重新请求获取数据
 		if tmpItems.Errorcode == -1020 && num == 0 {
-			return getEdbDataFromThsApp(edbCode, startDate, endDate, 1)
+			return getEdbDataFromThsApp(edbCode, startDate, endDate, 1, serverUrl)
 		}
 
 		err = errors.New(string(body))
@@ -158,21 +176,46 @@ type FutureGoodDataFromThsInterface struct {
 	} `json:"tables"`
 }
 
-func GetFutureGoodDataFromThs(edbCode, startDate, endDate string) (item future_good.FutureGoodDataFromThs, err error) {
+func GetFutureGoodDataFromThs(edbCode, startDate, endDate, edbTerminalCode string) (item future_good.FutureGoodDataFromThs, err error) {
+	// todo 商品获取终端逻辑修改,默认取第一个终端
+	terminal, err := GetTerminal(utils.DATA_SOURCE_THS, edbTerminalCode)
+	if err != nil {
+		err = fmt.Errorf("获取同花顺接口配置出错 Err: %s", err)
+		return
+	}
+	if terminal.ServerUrl == "" {
+		err = fmt.Errorf("同花顺接口未配置")
+		return
+	}
+
+	if edbTerminalCode == "" {
+		// todo 修改缓存名称,防止和普通指标数据重复,设置指标与终端关系的缓存
+		terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + edbCode
+		_ = utils.Rc.Put(terminalCodeCacheKey, terminal.TerminalCode, utils.GetTodayLastSecond())
+	}
 	if utils.RunMode == `release` { // 生产环境走官方http请求,测试环境走终端
-		return getFutureGoodDataFromThsHttp(edbCode, startDate, endDate)
+		var token string
+		token, err = GetAccessToken(false, terminal.Value)
+		if err != nil {
+			return
+		}
+		return getFutureGoodDataFromThsHttp(edbCode, startDate, endDate, terminal.Value, token)
 	} else {
-		return getFutureGoodDataFromThsApp(edbCode, startDate, endDate, 0)
+		return getFutureGoodDataFromThsApp(edbCode, startDate, endDate, 0, terminal.ServerUrl)
 	}
 }
 
 // getFutureGoodDataFromThsApp 通过终端获取wind的商品数据
-func getFutureGoodDataFromThsApp(edbCode, startDate, endDate string, num int) (item future_good.FutureGoodDataFromThs, err error) {
-	if utils.Hz_Ths_Data_Url == `` {
+func getFutureGoodDataFromThsApp(edbCode, startDate, endDate string, num int, serverUrl string) (item future_good.FutureGoodDataFromThs, err error) {
+	/*if utils.Hz_Ths_Data_Url == `` {
+		err = errors.New("同花顺接口未配置")
+		return
+	}*/
+	if serverUrl == "" {
 		err = errors.New("同花顺接口未配置")
 		return
 	}
-	thsUrl := utils.Hz_Ths_Data_Url + `edbInfo/ths/future_good?EdbCode=%s&StartDate=%s&EndDate=%s`
+	thsUrl := serverUrl + `edbInfo/ths/future_good?EdbCode=%s&StartDate=%s&EndDate=%s`
 	thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
 	utils.FileLog.Info("thsUrl:" + thsUrl)
 	body, err := http.Get(thsUrl)
@@ -197,7 +240,7 @@ func getFutureGoodDataFromThsApp(edbCode, startDate, endDate string, num int) (i
 		//session has expired,please re-login after using the system
 		//如果是同花顺登录session失效了,那么就重新请求获取数据
 		if tmpItems.Errorcode == -1020 && num == 0 {
-			return getFutureGoodDataFromThsApp(edbCode, startDate, endDate, 1)
+			return getFutureGoodDataFromThsApp(edbCode, startDate, endDate, 1, serverUrl)
 		}
 
 		err = errors.New(string(body))

+ 31 - 24
services/base_from_ths_http.go

@@ -19,7 +19,7 @@ import (
 var tokenRedisKey = `THS_SERVER_ACCESS_TOKEN`
 
 // getEdbDataFromThsHttp 通过url获取同花顺的普通数据
-func getEdbDataFromThsHttp(edbCode, startDate, endDate string) (item models.EdbDataFromThs, err error) {
+func getEdbDataFromThsHttp(edbCode, startDate, endDate, thsRefreshToken, token string) (item models.EdbDataFromThs, err error) {
 	thsUrl := `https://quantapi.51ifind.com/api/v1/edb_service`
 	//indicators 是 半角逗号分隔的所有指标,宏观指标过多,推荐使用Windows超级命令生成。 "indicators":"M001620326,M002822183"
 	//functionpara 否 key-value格式,省略时不进行更新时间筛选。两个时间控件更新起始时间(startrtime)和更新结束时间(endrtime),不勾选时省略见下方代码块
@@ -32,7 +32,7 @@ func getEdbDataFromThsHttp(edbCode, startDate, endDate string) (item models.EdbD
 		"enddate":    endDate,
 	}
 
-	body, err, _ := postCurl(thsUrl, dataMap, 0)
+	body, err, _ := postCurl(thsUrl, dataMap, 0, thsRefreshToken, token)
 	if err != nil {
 		return
 	}
@@ -97,7 +97,7 @@ func getEdbDataFromThsHttp(edbCode, startDate, endDate string) (item models.EdbD
 }
 
 // getFutureGoodDataFromThsHttp 通过url获取同花顺的商品数据
-func getFutureGoodDataFromThsHttp(edbCode, startDate, endDate string) (item future_good.FutureGoodDataFromThs, err error) {
+func getFutureGoodDataFromThsHttp(edbCode, startDate, endDate, thsRefreshToken, token string) (item future_good.FutureGoodDataFromThs, err error) {
 	thsUrl := `https://quantapi.51ifind.com/api/v1/cmd_history_quotation`
 
 	//codes 是 半角逗号分隔的所有代码 "codes":"300033.SZ,600030.SH"
@@ -114,7 +114,7 @@ func getFutureGoodDataFromThsHttp(edbCode, startDate, endDate string) (item futu
 		"enddate":    endDate,
 	}
 
-	body, err, _ := postCurl(thsUrl, dataMap, 0)
+	body, err, _ := postCurl(thsUrl, dataMap, 0, thsRefreshToken, token)
 	if err != nil {
 		return
 	}
@@ -162,7 +162,7 @@ type BaseThsInterface struct {
 }
 
 // postCurl post请求同花顺接口
-func postCurl(urlStr string, dataMap map[string]interface{}, num int) (body []byte, err error, errMsg string) {
+func postCurl(urlStr string, dataMap map[string]interface{}, num int, thsRefreshToken, token string) (body []byte, err error, errMsg string) {
 	logMsg := ``
 	defer func() {
 		if err != nil {
@@ -172,11 +172,6 @@ func postCurl(urlStr string, dataMap map[string]interface{}, num int) (body []by
 			}
 		}
 	}()
-	token, err := GetAccessToken(false)
-	if err != nil {
-		return
-	}
-
 	jsonStrByte, err := json.Marshal(dataMap)
 	if err != nil {
 		return
@@ -215,12 +210,12 @@ func postCurl(urlStr string, dataMap map[string]interface{}, num int) (body []by
 	//如果是token失效,同时只是第一次请求(没有尝试强制刷新token,那么重新请求)
 	if utils.InArrayByInt([]int{-1010, -1302}, int(response.ErrorCode)) && num <= 0 {
 		//token失效
-		_, tmpErr := refreshAccessToken()
-		if tmpErr != nil {
-			err = tmpErr
+		token, err = refreshAccessToken(thsRefreshToken)
+		if err != nil {
+			return
 		}
 		num++
-		return postCurl(urlStr, dataMap, num)
+		return postCurl(urlStr, dataMap, num, thsRefreshToken, token)
 	} else if response.ErrorCode != 0 {
 		utils.FileLog.Info(fmt.Sprint("post data err:", response.ErrMsg, ";url:", urlStr, ";params:", reqStr, ";response:", string(body)))
 		err = errors.New(response.ErrMsg)
@@ -231,7 +226,7 @@ func postCurl(urlStr string, dataMap map[string]interface{}, num int) (body []by
 }
 
 // GetAccessToken 获取accessToken
-func GetAccessToken(isRefresh bool) (token string, err error) {
+func GetAccessToken(isRefresh bool, thsRefreshToken string) (token string, err error) {
 	defer func() {
 		if err != nil {
 			go alarm_msg.SendAlarmMsg("获取同花顺的token失败,ERR:"+err.Error(), 3)
@@ -240,19 +235,22 @@ func GetAccessToken(isRefresh bool) (token string, err error) {
 	token, redisErr := utils.Rc.RedisString(tokenRedisKey)
 	//如果从redis中accessToken 获取失败或者token为空了,再或者需要强制刷新了,那么重新获取accessToken
 	if redisErr != nil || token == `` || isRefresh {
-		return refreshAccessToken()
+		// todo 上线后 有可能直接从redis中获取token,导致terminalCode 为空
+		token, _ = refreshAccessToken(thsRefreshToken)
+		return
 	}
 	return
 }
 
 // refreshAccessToken 强制刷新获取accessToken
-func refreshAccessToken() (token string, err error) {
+func refreshAccessToken(thsRefreshToken string) (token string, err error) {
 	defer func() {
 		if err != nil {
 			go alarm_msg.SendAlarmMsg("刷新同花顺的token失败;ERR:"+err.Error(), 3)
 		}
 	}()
-	tokenInfo, tmpErr := getAccessToken()
+	// todo 刷新后的token容易和缓存中的不一致,导致保存了错误的终端信息
+	tokenInfo, tmpErr := getAccessToken(thsRefreshToken)
 	if tmpErr != nil {
 		err = tmpErr
 		return
@@ -261,7 +259,7 @@ func refreshAccessToken() (token string, err error) {
 
 	expireTime, err := time.ParseInLocation(utils.FormatDateTime, tokenInfo.ExpiredTime, time.Local)
 	if err != nil {
-		go alarm_msg.SendAlarmMsg("获取同花顺的token失败;同花顺token截止日期转换失败,ERR:"+err.Error(), 3)
+		err = fmt.Errorf("获取同花顺的token失败;同花顺token截止日期转换失败,ERR:%s", err.Error())
 		return
 	}
 
@@ -270,8 +268,10 @@ func refreshAccessToken() (token string, err error) {
 	// 本来是要设置下600s的过期时间,但因为不是强制刷新token,就不获取了
 	err = utils.Rc.Put(tokenRedisKey, token, time.Duration(expireTime.Unix())*time.Second)
 	if err != nil {
-		go alarm_msg.SendAlarmMsg("获取同花顺的token成功;同花顺token存入redis失败,ERR:"+err.Error(), 3)
+		err = fmt.Errorf("获取同花顺的token成功;同花顺token存入redis失败,ERR:%s", err.Error())
+		return
 	}
+
 	return
 }
 
@@ -288,22 +288,28 @@ type TokenData struct {
 }
 
 // getAccessToken token内部请求接口
-func getAccessToken() (tokenData TokenData, err error) {
-	if utils.ThsRefreshToken == `` {
+func getAccessToken(thsRefreshToken string) (tokenData TokenData, err error) {
+	/*if utils.ThsRefreshToken == `` {
 		err = errors.New("同花顺token未配置")
 		return
-	}
+	}*/
 	defer func() {
 		if err != nil {
 			go alarm_msg.SendAlarmMsg("更新同花顺的token失败;ERR:"+err.Error(), 3)
 		}
 	}()
+
+	if thsRefreshToken == "" {
+		err = errors.New("同花顺token未配置")
+		return
+	}
+
 	//getUrl := `https://quantapi.51ifind.com/api/v1/update_access_token`	// 强制刷新token;目前因为生产和测试都是使用的一个账号,所以token不能因为环境的不同而改变
 	getUrl := `https://quantapi.51ifind.com/api/v1/get_access_token` // 获取当前token
 
 	req, _ := netHttp.NewRequest("GET", getUrl, nil)
 	req.Header.Add("Content-Type", "application/json")
-	req.Header.Add("refresh_token", utils.ThsRefreshToken)
+	req.Header.Add("refresh_token", thsRefreshToken)
 
 	res, err := netHttp.DefaultClient.Do(req)
 	if err != nil {
@@ -329,5 +335,6 @@ func getAccessToken() (tokenData TokenData, err error) {
 		return
 	}
 	tokenData = tokenResp.Data
+
 	return
 }

+ 18 - 6
services/base_from_wind.go

@@ -82,6 +82,7 @@ func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *models.EdbDat
 
 // GetEdbDataFromWindUrl 通过url获取wind数据
 func GetEdbDataFromWindUrl(windUrl, edbCode, startDate, endDate string) (item *models.EdbDataFromWind, errorCode int, err error) {
+	// todo 刷新后的处理
 	if windUrl == `` {
 		return GetEdbDataFromWind(edbCode, startDate, endDate)
 	}
@@ -150,8 +151,12 @@ func GetWindUrl(edbCode string) (windUrl string, err error) {
 	if windUrl != "" {
 		return
 	}
+	terminalList, err := models.GetEdbTerminalListBySource(utils.DATA_SOURCE_WIND)
+	if err != nil {
+		return
+	}
 	//如果缓存中没有的话,那么从配置中获取
-	for _, windUrlMap := range utils.Hz_Wind_Data_Url_LIST {
+	for _, t := range terminalList {
 		//判断该url是否被占满了
 		//count, tmpErr := GetCountEdbCodeInWindUrl(windUrlMap.Url)
 		//if tmpErr != nil && tmpErr.Error() != "nil returned" {
@@ -163,15 +168,15 @@ func GetWindUrl(edbCode string) (windUrl string, err error) {
 		//	AddEdbCodeInWindUrl(windUrlMap.Url, edbCode)
 		//	return
 		//}
-		//如果超限了,那么进入下一循环
-		isLimit, tmpErr := GetIsLimitEdbCodeInWindUrl(windUrlMap.Url)
+		//如果超限了,那么进入下一循环,
+		isLimit, tmpErr := GetIsLimitEdbCodeInWindUrl(t.ServerUrl)
 		if isLimit {
 			err = tmpErr
 			continue
 		}
 
-		windUrl = windUrlMap.Url
-		AddEdbCodeInWindUrl(windUrlMap.Url, edbCode)
+		windUrl = t.ServerUrl
+		AddEdbCodeInWindUrl(windUrl, t.TerminalCode, edbCode)
 		return
 	}
 	return
@@ -210,12 +215,16 @@ func SetIsLimitEdbCodeInWindUrl(windUrl string) {
 
 // AddEdbCodeInWindUrl 将指标插入到缓存key中
 // @return isInsert bool 是否插入数据,true时为插入数据,false表示数据已存在
-func AddEdbCodeInWindUrl(windUrl, edbCode string) (isInsert bool) {
+func AddEdbCodeInWindUrl(windUrl, terminalCode, edbCode string) (isInsert bool) {
 	cacheKey := utils.CACHE_WIND_URL + ":" + edbCode
 	isInsert = utils.Rc.SetNX(cacheKey, windUrl, utils.GetTodayLastSecond())
 
 	cacheKey2 := utils.CACHE_WIND_URL + time.Now().Format(utils.FormatDateUnSpace) + ":" + utils.MD5(windUrl)
 	utils.Rc.Incrby(cacheKey2, 1)
+
+	// 设置指标与终端关系的缓存
+	terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + edbCode
+	_ = utils.Rc.SetNX(terminalCodeCacheKey, terminalCode, utils.GetTodayLastSecond())
 	return
 }
 
@@ -223,5 +232,8 @@ func AddEdbCodeInWindUrl(windUrl, edbCode string) (isInsert bool) {
 func DeleteEdbCodeInWindUrl(edbCode string) (err error) {
 	cacheKey := utils.CACHE_WIND_URL + ":" + edbCode
 	err = utils.Rc.Delete(cacheKey)
+
+	terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + edbCode
+	err = utils.Rc.Delete(terminalCodeCacheKey)
 	return
 }

+ 74 - 0
services/edb_terminal.go

@@ -0,0 +1,74 @@
+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 {
+		// todo 确认wind_data_url字段存的是TerminalCode终端编码
+		tmpConfig, err := models.GetConfigDetailByCode("wind_data_url")
+		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
+	}
+
+	// 配置中没有的话,那么就从分组获取, todo 改成从edb_info指标库里根据终端码进行分组的指标数据统计
+	list, err := models.GetEdbCountGroupByTerminal(source)
+	if err != nil {
+		return
+	}
+	//windUrlNum := 0
+
+	//获取对应的配置url
+	terminalNumMap := make(map[string]int)
+	for _, v := range list {
+		terminalNumMap[v.ServerUrl] = v.Total
+	}
+
+	terminalList, err := models.GetEdbTerminalListBySource(utils.DATA_SOURCE_WIND)
+	if err != nil {
+		return
+	}
+	if len(terminalList) == 0 {
+		err = errors.New("终端地址未配置")
+		return
+	}
+	num := 0
+	edbTerminal = new(models.EdbTerminal)
+	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
+}

+ 1 - 0
utils/constants.go

@@ -201,6 +201,7 @@ const (
 	CACHE_WIND_URL              = "CACHE_WIND_URL"
 	CACHE_CHART_INFO_DATA       = "chart:info:data:"             //图表数据
 	CACHE_STOCK_PLANT_CALCULATE = "CACHE_STOCK_PLANT_CALCULATE_" // 库存装置减产计算
+	CACHE_EDB_TERMINAL_CODE_URL = "edb:terminal_code:edb_code:"  // 指标与终端关系的缓存
 )
 
 // 图表类型