kpler.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package kpler
  2. import (
  3. "eta/eta_data_analysis/models"
  4. "eta/eta_data_analysis/services/alarm_msg"
  5. "eta/eta_data_analysis/utils"
  6. "fmt"
  7. "time"
  8. "github.com/patrickmn/go-cache"
  9. )
  10. func GetProducts(req models.KplerProductLibReq) (products []models.KplerProduct, err error) {
  11. token, err := GetKplerAccessToken(false)
  12. if err != nil {
  13. return nil, err
  14. }
  15. products, err = GetProductsByApi(req, token)
  16. if err != nil {
  17. if err.Error() == "Unauthorized" {
  18. token, err = GetKplerAccessToken(true)
  19. if err != nil {
  20. return
  21. }
  22. products, err = GetProductsByApi(req, token)
  23. if err != nil {
  24. return
  25. }
  26. return
  27. }
  28. return
  29. }
  30. return
  31. }
  32. // token := ""
  33. func GetKplerData(req models.KplerFlowDataLibReq) (ret *models.KplerFlowDataResp, err error) {
  34. // token := ""
  35. // flowDirection := "import"
  36. // granularity := "monthly"
  37. // split := "Destination%20Countries"
  38. // withIntraRegion := "true"
  39. // startDate := "2024-01-01"
  40. // endDate := "2025-06-30"
  41. // unit := "kbd"
  42. // products := "CPC%20Russia,Eastern%20Russia%20Crude,Western%20Russia%20Crude"
  43. // fromZones := ""
  44. // toZones := ""
  45. // onlyRealized := "true"
  46. // req = models.KplerFlowDataLibReq{
  47. // Granularity: granularity,
  48. // Split: split,
  49. // Unit: unit,
  50. // FlowDirection: flowDirection,
  51. // FromZones: fromZones,
  52. // ToZones: toZones,
  53. // OnlyRealized: onlyRealized,
  54. // WithIntraRegion: withIntraRegion,
  55. // StartDate: startDate,
  56. // EndDate: endDate,
  57. // Products: products,
  58. // }
  59. token, err := GetKplerAccessToken(false)
  60. if err != nil {
  61. return nil, err
  62. }
  63. ret, err = GetKplerDataByApi(req, token)
  64. if err != nil {
  65. fmt.Println("GetKplerDataByApi error", err)
  66. if err.Error() == "Unauthorized" {
  67. token, err = GetKplerAccessToken(true)
  68. if err != nil {
  69. err = fmt.Errorf("获取开普勒API-AccessToken失败, %v", err)
  70. return
  71. }
  72. ret, err = GetKplerDataByApi(req, token)
  73. if err != nil {
  74. fmt.Println("GetKplerDataByApi error", err)
  75. return nil, err
  76. }
  77. return
  78. }
  79. return nil, err
  80. }
  81. return
  82. }
  83. // GetKplerAccessToken 获取登录凭证
  84. func GetKplerAccessToken(forceRefresh bool) (token string, err error) {
  85. defer func() {
  86. if err != nil {
  87. go alarm_msg.SendAlarmMsg("获取开普勒的登录凭证失败,ERR:"+err.Error(), 3)
  88. }
  89. }()
  90. redisKey := "kpler_access_token"
  91. cacheClient := utils.CacheClient
  92. tokenTmp, ok := cacheClient.Get(redisKey)
  93. //如果从redis中accessToken 获取失败或者token为空了,再或者需要强制刷新了,那么重新获取accessToken
  94. if !ok || forceRefresh {
  95. token, err = refreshKplerAccessToken(cacheClient,redisKey)
  96. return
  97. }
  98. fmt.Println("tokenTmp", tokenTmp)
  99. if tokenTmp == nil {
  100. token, err = refreshKplerAccessToken(cacheClient,redisKey)
  101. return
  102. }
  103. token = tokenTmp.(string)
  104. return
  105. }
  106. // refreshKplerAccessToken 强制刷新获取登录凭证
  107. func refreshKplerAccessToken(cacheClient *cache.Cache, redisKey string) (token string, err error) {
  108. defer func() {
  109. if err != nil {
  110. go alarm_msg.SendAlarmMsg("获取开普勒的登录凭证失败;ERR:"+err.Error(), 3)
  111. }
  112. }()
  113. token, tmpErr := login()
  114. if tmpErr != nil {
  115. err = tmpErr
  116. return
  117. }
  118. expireTime := time.Now().Add(time.Hour * 24 * 30)
  119. //token存入redis
  120. //err = utils.Rc.Put(tokenRedisKey, token, time.Duration(expireTime.Unix()-600)*time.Second)
  121. // 本来是要设置下600s的过期时间,但因为不是强制刷新token,就不获取了
  122. cacheClient.Set(redisKey, token, time.Duration(expireTime.Unix())*time.Second)
  123. if err != nil {
  124. err = fmt.Errorf("获取开普勒的登录凭证成功;开普勒登录凭证存入redis失败,ERR:%s", err.Error())
  125. return
  126. }
  127. return
  128. }