eta_bridge.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package eta_bridge
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta_gn/eta_task/utils"
  6. "fmt"
  7. "github.com/rdlucklib/rdluck_tools/paging"
  8. "io"
  9. "net/http"
  10. "strings"
  11. )
  12. type BaseEtaBridgeDataResp struct {
  13. Code int `json:"code" description:"状态码"`
  14. Msg string `json:"msg" description:"提示信息"`
  15. }
  16. func HttpEtaBridgePost(urlStr string, param interface{}) (bResult []byte, err error, errMsg string) {
  17. if utils.EtaBridgeUrl == "" {
  18. errMsg = `未配置第三方的桥接服务地址`
  19. err = errors.New(errMsg)
  20. return
  21. }
  22. data, e := json.Marshal(param)
  23. if e != nil {
  24. err = fmt.Errorf("data json marshal err: %s", e.Error())
  25. return
  26. }
  27. postUrl := utils.EtaBridgeUrl + "/api" + urlStr
  28. body := io.NopCloser(strings.NewReader(string(data)))
  29. client := &http.Client{}
  30. req, e := http.NewRequest("POST", postUrl, body)
  31. if e != nil {
  32. err = fmt.Errorf("http create request err: %s", e.Error())
  33. return
  34. }
  35. contentType := "application/json;charset=utf-8"
  36. req.Header.Set("Content-Type", contentType)
  37. checkToken := utils.MD5(utils.EtaBridgeAppNameEn + utils.EtaBridgeMd5Key)
  38. req.Header.Set("Authorization", checkToken)
  39. resp, e := client.Do(req)
  40. if e != nil {
  41. err = fmt.Errorf("http client do err: %s", e.Error())
  42. return
  43. }
  44. defer func() {
  45. _ = resp.Body.Close()
  46. }()
  47. bResult, e = io.ReadAll(resp.Body)
  48. if e != nil {
  49. err = fmt.Errorf("resp body read err: %s", e.Error())
  50. return
  51. }
  52. if len(bResult) == 0 {
  53. err = fmt.Errorf("resp body is empty")
  54. return
  55. }
  56. utils.FileLog.Info("桥接服务post请求返回数据:\n" + string(bResult))
  57. if utils.RunMode == "release" {
  58. str := string(bResult)
  59. str = strings.Trim(str, `"`)
  60. bResult = utils.DesBase64Decrypt([]byte(str), utils.EtaBridgeDesKey)
  61. }
  62. result := new(BaseEtaBridgeDataResp)
  63. if e = json.Unmarshal(bResult, &result); e != nil {
  64. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(bResult))
  65. utils.FileLog.Info("桥接服务post请求失败:\n" + string(bResult))
  66. return
  67. }
  68. if result.Code != 200 {
  69. errMsg = result.Msg
  70. err = fmt.Errorf("result: %s", string(bResult))
  71. return
  72. }
  73. return
  74. }
  75. func HttpEtaBridgeGet(urlStr string) (bResult []byte, err error, errMsg string) {
  76. if utils.EtaBridgeUrl == "" {
  77. errMsg = `未配置第三方的桥接服务地址`
  78. err = errors.New(errMsg)
  79. return
  80. }
  81. getUrl := utils.EtaBridgeUrl + "/api" + urlStr
  82. client := &http.Client{}
  83. req, e := http.NewRequest("GET", getUrl, nil)
  84. if e != nil {
  85. err = fmt.Errorf("http create request err: %s", e.Error())
  86. return
  87. }
  88. contentType := "application/json;charset=utf-8"
  89. req.Header.Set("Content-Type", contentType)
  90. checkToken := utils.MD5(utils.EtaBridgeAppNameEn + utils.EtaBridgeMd5Key)
  91. req.Header.Set("Authorization", checkToken)
  92. resp, e := client.Do(req)
  93. if e != nil {
  94. err = fmt.Errorf("http client do err: %s", e.Error())
  95. return
  96. }
  97. defer func() {
  98. _ = resp.Body.Close()
  99. }()
  100. bResult, e = io.ReadAll(resp.Body)
  101. if e != nil {
  102. err = fmt.Errorf("resp body read err: %s", e.Error())
  103. return
  104. }
  105. if len(bResult) == 0 {
  106. err = fmt.Errorf("resp body is empty")
  107. return
  108. }
  109. if utils.RunMode == "release" {
  110. str := string(bResult)
  111. str = strings.Trim(str, `"`)
  112. bResult = utils.DesBase64Decrypt([]byte(str), utils.EtaBridgeDesKey)
  113. }
  114. result := new(BaseEtaBridgeDataResp)
  115. if e = json.Unmarshal(bResult, &result); e != nil {
  116. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(bResult))
  117. utils.FileLog.Info("桥接服务get请求失败,url", getUrl, ":\n", string(bResult))
  118. return
  119. }
  120. if result.Code != 200 {
  121. errMsg = result.Msg
  122. err = fmt.Errorf("result: %s", string(bResult))
  123. return
  124. }
  125. return
  126. }
  127. type EtaBridgeDataRespAndBusinessData struct {
  128. Code int `json:"code" description:"状态码"`
  129. Msg string `json:"msg" description:"提示信息"`
  130. Data GetBusinessDataResp `json:"data" description:"返回数据"`
  131. }
  132. type GetBusinessDataResp struct {
  133. List []PushBusinessIndex
  134. Paging *paging.PagingItem `description:"分页数据"`
  135. }
  136. type PushBusinessIndex struct {
  137. IndexCode string `description:"指标编码"`
  138. IndexName string `description:"指标名称"`
  139. Unit string `description:"单位"`
  140. Frequency string `description:"频度"`
  141. SourceName string `description:"数据来源名称"`
  142. Remark string `description:"备注字段"`
  143. DetailDataCreateTime string `description:"明细数据入库时间"`
  144. DataList []AddBusinessData `description:"指标数据"`
  145. }
  146. type AddBusinessData struct {
  147. Value float64 `description:"值"`
  148. Date string `description:"日期"`
  149. }