package services import ( "encoding/json" "errors" "eta/eta_index_lib/models" "eta/eta_index_lib/services/alarm_msg" "eta/eta_index_lib/utils" "fmt" "github.com/rdlucklib/rdluck_tools/http" "time" ) // GetEdbDataFromBridgeJy 从桥接服务里的嘉悦物产数据中心获取数据 func GetEdbDataFromBridgeJy(windUrl, edbCode, startDate, endDate string) (index *models.EdbDataFromWindBridgeIndex, err error) { if windUrl == `` { windUrl, err = GetWindBridgeUrl() if err != nil { return } } source := "wind" index, err = getEdbDataFromBridgeJy(windUrl, source, edbCode, startDate, endDate) return } // GetWindBridgeUrl 获取桥接服务地址 func GetWindBridgeUrl() (windUrl string, err error) { defer func() { if err == nil && windUrl == "" { err = errors.New("wind桥接服务器地址为空") } }() // 先配置中获取,如果有指定配置的话,那么取配置中的数据 tmpConfig, err := models.GetConfigDetailByCode("wind_from_bridge") if err != nil && err.Error() != utils.ErrNoRow() { err = errors.New("获取配置的wind地址失败,err:" + err.Error()) return } err = nil if tmpConfig != nil { windFrom := tmpConfig.ConfigValue if windFrom != "" { tmpConfig, err = models.GetConfigDetailByCode(windFrom) if err != nil && err.Error() != utils.ErrNoRow() { err = errors.New("获取配置的wind地址失败,err:" + err.Error()) return } if err == nil { windUrl = tmpConfig.ConfigValue } err = nil } return } return } // GetWindBridgeJYUrl 获取嘉悦桥接服务地址 func GetWindBridgeJYUrl() (windUrl string, err error) { defer func() { if err == nil && windUrl == "" { err = errors.New("wind桥接服务器地址为空") } }() // 先配置中获取,如果有指定配置的话,那么取配置中的数据 tmpConfig, err := models.GetConfigDetailByCode("wind_from_bridge_jy") if err != nil && err.Error() != utils.ErrNoRow() { err = errors.New("获取配置的wind地址失败,err:" + err.Error()) return } err = nil if tmpConfig != nil { windUrl = tmpConfig.ConfigValue } return } // GetManualBridgeJYUrl 获取嘉悦桥接服务地址 func GetManualBridgeJYUrl() (windUrl string, err error) { defer func() { if err == nil && windUrl == "" { err = errors.New("wind桥接服务器地址为空") } }() // 先配置中获取,如果有指定配置的话,那么取配置中的数据 tmpConfig, err := models.GetConfigDetailByCode("manual_from_bridge_jy") if err != nil && err.Error() != utils.ErrNoRow() { err = errors.New("获取配置的wind地址失败,err:" + err.Error()) return } err = nil if tmpConfig != nil { windUrl = tmpConfig.ConfigValue } return } // GetManualBridgeUrl 获取桥接服务地址 func GetManualBridgeUrl() (manualUrl string, err error) { defer func() { if err == nil && manualUrl == "" { err = errors.New("wind桥接服务器地址为空") } }() // 先配置中获取,如果有指定配置的话,那么取配置中的数据 tmpConfig, err := models.GetConfigDetailByCode("manual_from_bridge") if err != nil && err.Error() != utils.ErrNoRow() { err = errors.New("获取配置的wind地址失败,err:" + err.Error()) return } err = nil if tmpConfig != nil { windFrom := tmpConfig.ConfigValue tmpConfig, err = models.GetConfigDetailByCode(windFrom) if err != nil && err.Error() != utils.ErrNoRow() { err = errors.New("获取配置的wind地址失败,err:" + err.Error()) return } manualUrl = tmpConfig.ConfigValue return } return } // GetManualEdbDataFromBridgeJy 从桥接服务里的嘉悦物产数据中心获取数据 func GetManualEdbDataFromBridgeJy(windUrl, edbCode, startDate, endDate string) (list []*models.ManualEdbdata, err error) { if windUrl == `` { windUrl, err = GetManualBridgeUrl() if err != nil { return } } source := "manual" index, err := getEdbDataFromBridgeJy(windUrl, source, edbCode, startDate, endDate) if err != nil { return } for _, v := range index.IndexData { tmp := new(models.ManualEdbdata) t, _ := time.ParseInLocation(utils.FormatDateTime, v.UpdateTime, time.Local) tmp = &models.ManualEdbdata{ TradeCode: index.IndexCode, Dt: v.DataTime, Close: fmt.Sprintf("%f", v.Val), ModifyTime: t, } list = append(list, tmp) } return } // getEdbDataFromBridgeJy 从桥接服务里的嘉悦物产数据中心获取数据 func getEdbDataFromBridgeJy(url, source, edbCode, startDate, endDate string) (index *models.EdbDataFromWindBridgeIndex, err error) { requestWindUrl := url + `?index_code=%s&start_date=%s&end_date=%s&source=%s` requestWindUrl = fmt.Sprintf(requestWindUrl, edbCode, startDate, endDate, source) utils.FileLog.Info(fmt.Sprintf("windUrl:%s", requestWindUrl)) body, err := http.Get(requestWindUrl) fmt.Println("GetEdbDataFromBridgeJy body:") fmt.Println(string(body)) utils.FileLog.Info(fmt.Sprint("GetEdbDataFromBridgeJy result:", string(body))) if err != nil { return } ret := new(models.EdbDataFromWindBridge) err = json.Unmarshal(body, &ret) if err != nil { err = errors.New("返回值格式错误,json解析失败,Err: " + err.Error()) return } //异常的话,需要邮件通知 if ret.Code != 200 { errMsg := fmt.Sprintf(" 桥接服务 指标数据接口报错,地址:%s, Code: %d, Err: %s", requestWindUrl, ret.Code, ret.Msg) err = errors.New(errMsg) go alarm_msg.SendAlarmMsg(errMsg, 3) return } index = &ret.Data return }