|
@@ -0,0 +1,136 @@
|
|
|
+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
|
|
|
+ tmpConfig, err = models.GetConfigDetailByCode(windFrom)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ err = errors.New("获取配置的wind地址失败,err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ windUrl = tmpConfig.ConfigValue
|
|
|
+ return
|
|
|
+ }
|
|
|
+ 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
|
|
|
+}
|