base_from_wind_bridge.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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. if windFrom != "" {
  41. tmpConfig, err = models.GetConfigDetailByCode(windFrom)
  42. if err != nil && err.Error() != utils.ErrNoRow() {
  43. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  44. return
  45. }
  46. if err == nil {
  47. windUrl = tmpConfig.ConfigValue
  48. }
  49. err = nil
  50. }
  51. return
  52. }
  53. return
  54. }
  55. // GetWindBridgeJYUrl 获取嘉悦桥接服务地址
  56. func GetWindBridgeJYUrl() (windUrl string, err error) {
  57. defer func() {
  58. if err == nil && windUrl == "" {
  59. err = errors.New("wind桥接服务器地址为空")
  60. }
  61. }()
  62. // 先配置中获取,如果有指定配置的话,那么取配置中的数据
  63. tmpConfig, err := models.GetConfigDetailByCode("wind_from_bridge_jy")
  64. if err != nil && err.Error() != utils.ErrNoRow() {
  65. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  66. return
  67. }
  68. err = nil
  69. if tmpConfig != nil {
  70. windUrl = tmpConfig.ConfigValue
  71. }
  72. return
  73. }
  74. // GetManualBridgeJYUrl 获取嘉悦桥接服务地址
  75. func GetManualBridgeJYUrl() (windUrl string, err error) {
  76. defer func() {
  77. if err == nil && windUrl == "" {
  78. err = errors.New("wind桥接服务器地址为空")
  79. }
  80. }()
  81. // 先配置中获取,如果有指定配置的话,那么取配置中的数据
  82. tmpConfig, err := models.GetConfigDetailByCode("manual_from_bridge_jy")
  83. if err != nil && err.Error() != utils.ErrNoRow() {
  84. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  85. return
  86. }
  87. err = nil
  88. if tmpConfig != nil {
  89. windUrl = tmpConfig.ConfigValue
  90. }
  91. return
  92. }
  93. // GetManualBridgeUrl 获取桥接服务地址
  94. func GetManualBridgeUrl() (manualUrl string, err error) {
  95. defer func() {
  96. if err == nil && manualUrl == "" {
  97. err = errors.New("wind桥接服务器地址为空")
  98. }
  99. }()
  100. // 先配置中获取,如果有指定配置的话,那么取配置中的数据
  101. tmpConfig, err := models.GetConfigDetailByCode("manual_from_bridge")
  102. if err != nil && err.Error() != utils.ErrNoRow() {
  103. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  104. return
  105. }
  106. err = nil
  107. if tmpConfig != nil {
  108. windFrom := tmpConfig.ConfigValue
  109. tmpConfig, err = models.GetConfigDetailByCode(windFrom)
  110. if err != nil && err.Error() != utils.ErrNoRow() {
  111. err = errors.New("获取配置的wind地址失败,err:" + err.Error())
  112. return
  113. }
  114. manualUrl = tmpConfig.ConfigValue
  115. return
  116. }
  117. return
  118. }
  119. // GetManualEdbDataFromBridgeJy 从桥接服务里的嘉悦物产数据中心获取数据
  120. func GetManualEdbDataFromBridgeJy(windUrl, edbCode, startDate, endDate string) (list []*models.ManualEdbdata, err error) {
  121. if windUrl == `` {
  122. windUrl, err = GetManualBridgeUrl()
  123. if err != nil {
  124. return
  125. }
  126. }
  127. source := "manual"
  128. index, err := getEdbDataFromBridgeJy(windUrl, source, edbCode, startDate, endDate)
  129. if err != nil {
  130. return
  131. }
  132. for _, v := range index.IndexData {
  133. tmp := new(models.ManualEdbdata)
  134. t, _ := time.ParseInLocation(utils.FormatDateTime, v.UpdateTime, time.Local)
  135. tmp = &models.ManualEdbdata{
  136. TradeCode: index.IndexCode,
  137. Dt: v.DataTime,
  138. Close: fmt.Sprintf("%f", v.Val),
  139. ModifyTime: t,
  140. }
  141. list = append(list, tmp)
  142. }
  143. return
  144. }
  145. // getEdbDataFromBridgeJy 从桥接服务里的嘉悦物产数据中心获取数据
  146. func getEdbDataFromBridgeJy(url, source, edbCode, startDate, endDate string) (index *models.EdbDataFromWindBridgeIndex, err error) {
  147. requestWindUrl := url + `?index_code=%s&start_date=%s&end_date=%s&source=%s`
  148. requestWindUrl = fmt.Sprintf(requestWindUrl, edbCode, startDate, endDate, source)
  149. utils.FileLog.Info(fmt.Sprintf("windUrl:%s", requestWindUrl))
  150. body, err := http.Get(requestWindUrl)
  151. fmt.Println("GetEdbDataFromBridgeJy body:")
  152. fmt.Println(string(body))
  153. utils.FileLog.Info(fmt.Sprint("GetEdbDataFromBridgeJy result:", string(body)))
  154. if err != nil {
  155. return
  156. }
  157. ret := new(models.EdbDataFromWindBridge)
  158. err = json.Unmarshal(body, &ret)
  159. if err != nil {
  160. err = errors.New("返回值格式错误,json解析失败,Err: " + err.Error())
  161. return
  162. }
  163. //异常的话,需要邮件通知
  164. if ret.Code != 200 {
  165. errMsg := fmt.Sprintf(" 桥接服务 指标数据接口报错,地址:%s, Code: %d, Err: %s", requestWindUrl, ret.Code, ret.Msg)
  166. err = errors.New(errMsg)
  167. go alarm_msg.SendAlarmMsg(errMsg, 3)
  168. return
  169. }
  170. index = &ret.Data
  171. return
  172. }