calcTask.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package controller
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "github.com/robfig/cron"
  6. "io/ioutil"
  7. "iot_manager_service/app/data/model"
  8. "iot_manager_service/app/data/service"
  9. device "iot_manager_service/app/device/service"
  10. "iot_manager_service/util/cache"
  11. "iot_manager_service/util/logger"
  12. "net/http"
  13. "time"
  14. )
  15. func CalcTask() {
  16. hourSpec := "0 0 */1 * * ?"
  17. //minuteSpec := "0 */15 * * * ?"
  18. daySpec := "0 0 1 * * ?"
  19. c := cron.New()
  20. _ = c.AddFunc(hourSpec, func() {
  21. devices := device.GarbageService.GetAll()
  22. var deviceIds []string
  23. for _, d := range devices {
  24. deviceIds = append(deviceIds, d.DeviceIMei)
  25. }
  26. GarbageDataSync(deviceIds)
  27. })
  28. _ = c.AddFunc(daySpec, func() {
  29. })
  30. c.Start()
  31. }
  32. func GarbageDataSync(deviceIds []string) {
  33. if len(deviceIds) == 0 {
  34. return
  35. }
  36. url := "http://124.239.149.63:5000/admin/garbage/can/getGarbageCanByDeviceIdsList"
  37. req := model.GarbageDataReq{
  38. DeviceIds: deviceIds,
  39. }
  40. data, err := json.Marshal(&req)
  41. if err != nil {
  42. logger.Logger.Warningf("GarbageDataSync Marshal err = %s", err.Error())
  43. return
  44. }
  45. body := bytes.NewBuffer(data)
  46. request, err := http.NewRequest("POST", url, body)
  47. if err != nil {
  48. logger.Logger.Warningf("GarbageDataSync NewRequest err = %s", err.Error())
  49. return
  50. }
  51. request.Header.Set("Authorization", "Bearer "+GarbageLogin())
  52. request.Header.Set("Content-Type", "application/json")
  53. response, err := http.DefaultClient.Do(request)
  54. if err != nil {
  55. logger.Logger.Warningf("GarbageDataSync Do err = %s", err.Error())
  56. return
  57. }
  58. rspData, err := ioutil.ReadAll(response.Body)
  59. if err != nil {
  60. logger.Logger.Warningf("GarbageDataSync ReadAll err = %s", err.Error())
  61. return
  62. }
  63. var rsp model.GarbageDataRsp
  64. err = json.Unmarshal(rspData, &rsp)
  65. if err != nil {
  66. logger.Logger.Warningf("GarbageDataSync Unmarshal err = %s", err.Error())
  67. return
  68. }
  69. if rsp.Code != 0 {
  70. logger.Logger.Warningf("GarbageDataSync rsp.Code != 0 msg = %s", rsp.Msg)
  71. return
  72. }
  73. service.GarbageDataService.BatchSave(rsp.Data)
  74. }
  75. func GarbageLogin() string {
  76. value, err := cache.Redis.Get(model.GarbageLoginKey).Result()
  77. if err == nil {
  78. return value
  79. }
  80. url := "http://124.239.149.63:5000/admin/user/login"
  81. req := model.GarbageLoginReq{
  82. Username: "湖南溢满",
  83. Password: "T2rMLUCMaaBXfjBjZ7myOA==",
  84. }
  85. data, err := json.Marshal(&req)
  86. if err != nil {
  87. logger.Logger.Warningf("GarbageLogin Marshal err = %s", err.Error())
  88. return ""
  89. }
  90. body := bytes.NewBuffer(data)
  91. request, err := http.NewRequest("POST", url, body)
  92. if err != nil {
  93. logger.Logger.Warningf("GarbageLogin NewRequest err = %s", err.Error())
  94. return ""
  95. }
  96. request.Header.Set("Content-Type", "application/json")
  97. response, err := http.DefaultClient.Do(request)
  98. if err != nil {
  99. logger.Logger.Warningf("GarbageLogin Do err = %s", err.Error())
  100. return ""
  101. }
  102. rspData, err := ioutil.ReadAll(response.Body)
  103. if err != nil {
  104. logger.Logger.Warningf("GarbageLogin ReadAll err = %s", err.Error())
  105. return ""
  106. }
  107. var rsp model.GarbageLoginRsp
  108. err = json.Unmarshal(rspData, &rsp)
  109. if err != nil {
  110. logger.Logger.Warningf("GarbageLogin Unmarshal err = %s", err.Error())
  111. return ""
  112. }
  113. if rsp.Code != 0 {
  114. logger.Logger.Warningf("GarbageLogin rsp.Code != 0 msg = %s", rsp.Msg)
  115. return ""
  116. }
  117. cache.Redis.Set(model.GarbageLoginKey, rsp.Data.AccessToken, 2*time.Hour)
  118. return rsp.Data.AccessToken
  119. }