base_from_wind_bridge.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_index_lib/models"
  6. "eta/eta_index_lib/services/alarm_msg"
  7. "eta/eta_index_lib/utils"
  8. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/http"
  10. "time"
  11. )
  12. // GetEdbDataFromBridgeJy 从桥接服务里的嘉悦物产数据中心获取数据
  13. func GetEdbDataFromBridgeJy(windUrl, edbCode, startDate, endDate string) (index *models.EdbDataFromWindBridgeIndex, err error) {
  14. if windUrl == `` {
  15. windUrl, err = GetWindBridgeUrl()
  16. if err != nil {
  17. return
  18. }
  19. }
  20. source := "wind"
  21. index, err = getEdbDataFromBridgeJy(windUrl, source, edbCode, startDate, endDate)
  22. return
  23. }
  24. // GetWindBridgeUrl 获取桥接服务地址
  25. func GetWindBridgeUrl() (windUrl string, err error) {
  26. defer func() {
  27. if err == nil && windUrl == "" {
  28. err = errors.New("wind桥接服务器地址为空")
  29. }
  30. }()
  31. // 先配置中获取,如果有指定配置的话,那么取配置中的数据
  32. tmpConfig, err := models.GetConfigDetailByCode("wind_from_bridge")
  33. if err != nil && err.Error() != utils.ErrNoRow() {
  34. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  35. return
  36. }
  37. err = nil
  38. if tmpConfig != nil {
  39. windFrom := tmpConfig.ConfigValue
  40. tmpConfig, err = models.GetConfigDetailByCode(windFrom)
  41. if err != nil && err.Error() != utils.ErrNoRow() {
  42. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  43. return
  44. }
  45. windUrl = tmpConfig.ConfigValue
  46. return
  47. }
  48. return
  49. }
  50. // GetManualBridgeUrl 获取桥接服务地址
  51. func GetManualBridgeUrl() (manualUrl string, err error) {
  52. defer func() {
  53. if err == nil && manualUrl == "" {
  54. err = errors.New("wind桥接服务器地址为空")
  55. }
  56. }()
  57. // 先配置中获取,如果有指定配置的话,那么取配置中的数据
  58. tmpConfig, err := models.GetConfigDetailByCode("manual_from_bridge")
  59. if err != nil && err.Error() != utils.ErrNoRow() {
  60. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  61. return
  62. }
  63. err = nil
  64. if tmpConfig != nil {
  65. windFrom := tmpConfig.ConfigValue
  66. tmpConfig, err = models.GetConfigDetailByCode(windFrom)
  67. if err != nil && err.Error() != utils.ErrNoRow() {
  68. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  69. return
  70. }
  71. manualUrl = tmpConfig.ConfigValue
  72. return
  73. }
  74. return
  75. }
  76. // GetManualEdbDataFromBridgeJy 从桥接服务里的嘉悦物产数据中心获取数据
  77. func GetManualEdbDataFromBridgeJy(windUrl, edbCode, startDate, endDate string) (list []*models.ManualEdbdata, err error) {
  78. if windUrl == `` {
  79. windUrl, err = GetManualBridgeUrl()
  80. if err != nil {
  81. return
  82. }
  83. }
  84. source := "manual"
  85. index, err := getEdbDataFromBridgeJy(windUrl, source, edbCode, startDate, endDate)
  86. if err != nil {
  87. return
  88. }
  89. for _, v := range index.IndexData {
  90. tmp := new(models.ManualEdbdata)
  91. t, _ := time.ParseInLocation(utils.FormatDateTime, v.UpdateTime, time.Local)
  92. tmp = &models.ManualEdbdata{
  93. TradeCode: index.IndexCode,
  94. Dt: v.DataTime,
  95. Close: fmt.Sprintf("%f", v.Val),
  96. ModifyTime: t,
  97. }
  98. list = append(list, tmp)
  99. }
  100. return
  101. }
  102. // getEdbDataFromBridgeJy 从桥接服务里的嘉悦物产数据中心获取数据
  103. func getEdbDataFromBridgeJy(url, source, edbCode, startDate, endDate string) (index *models.EdbDataFromWindBridgeIndex, err error) {
  104. requestWindUrl := url + `?index_code=%s&start_date=%s&end_date=%s&source=%s`
  105. requestWindUrl = fmt.Sprintf(requestWindUrl, edbCode, startDate, endDate, source)
  106. utils.FileLog.Info(fmt.Sprintf("windUrl:%s", requestWindUrl))
  107. body, err := http.Get(requestWindUrl)
  108. fmt.Println("GetEdbDataFromBridgeJy body:")
  109. fmt.Println(string(body))
  110. utils.FileLog.Info(fmt.Sprint("GetEdbDataFromBridgeJy result:", string(body)))
  111. if err != nil {
  112. return
  113. }
  114. ret := new(models.EdbDataFromWindBridge)
  115. err = json.Unmarshal(body, &ret)
  116. if err != nil {
  117. err = errors.New("返回值格式错误,json解析失败,Err: " + err.Error())
  118. return
  119. }
  120. //异常的话,需要邮件通知
  121. if ret.Code != 200 {
  122. errMsg := fmt.Sprintf(" 桥接服务 指标数据接口报错,地址:%s, Code: %d, Err: %s", requestWindUrl, ret.Code, ret.Msg)
  123. err = errors.New(errMsg)
  124. go alarm_msg.SendAlarmMsg(errMsg, 3)
  125. return
  126. }
  127. index = &ret.Data
  128. return
  129. }