internal.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /**
  2. * @author chengliang
  3. * @date 2026/1/26 15:40
  4. * @brief
  5. *
  6. **/
  7. package hotupdate
  8. import (
  9. "dsbqj-admin/app/service"
  10. "dsbqj-admin/pkg/app"
  11. "dsbqj-admin/pkg/e"
  12. "dsbqj-admin/pkg/logger"
  13. "dsbqj-admin/tool"
  14. "encoding/json"
  15. "fmt"
  16. "github.com/gin-gonic/gin"
  17. "net/http"
  18. "time"
  19. )
  20. const DEF_REQ_TIMEOUT_SEC = 30 * 60
  21. // 内部请求
  22. func AddVersion(c *gin.Context) {
  23. var appG = app.Gin{C: c}
  24. logger.Info("uri %s", c.Request.RequestURI)
  25. req := service.TAddVersionReq{}
  26. err := c.ShouldBind(&req)
  27. if err == nil {
  28. err = checkAddVersionHash(req, true)
  29. if err != nil {
  30. appG.Response(http.StatusOK, e.ERROR_UPLOAD_SIGNURL_FAIL, err.Error())
  31. return
  32. }
  33. var err = service.GetTHotUpdateVerManager().AddVersion(&req)
  34. if err != nil {
  35. appG.Response(http.StatusOK, e.NO_RECORD, err.Error())
  36. } else {
  37. appG.Response(http.StatusOK, e.SUCCESS, "")
  38. }
  39. } else {
  40. appG.Response(http.StatusOK, e.INVALID_PARAMS, err.Error())
  41. }
  42. }
  43. // 获取最大version
  44. func GetMaxVerInfo(c *gin.Context) {
  45. logger.Info("uri %s", c.Request.RequestURI)
  46. var appG = app.Gin{C: c}
  47. req := service.TGetVersionReq{}
  48. err := c.ShouldBind(&req)
  49. if err == nil {
  50. err = checkAddVersionHash(req, false)
  51. if err != nil {
  52. appG.Response(http.StatusOK, e.ERROR_UPLOAD_SIGNURL_FAIL, err.Error())
  53. return
  54. }
  55. var rsp, err = service.GetTHotUpdateVerManager().GetMaxVerInfo(req.Proj, req.Os)
  56. if err != nil {
  57. appG.Response(http.StatusOK, e.NO_RECORD, err.Error())
  58. } else {
  59. appG.Response(http.StatusOK, e.SUCCESS, rsp)
  60. }
  61. } else {
  62. appG.Response(http.StatusOK, e.INVALID_PARAMS, err.Error())
  63. }
  64. }
  65. // 获取version list
  66. func GetVersionList(c *gin.Context) {
  67. logger.Info("uri %s", c.Request.RequestURI)
  68. var appG = app.Gin{C: c}
  69. req := service.TGetVersionListReq{}
  70. err := c.ShouldBind(&req)
  71. if err == nil {
  72. err = checkAddVersionHash(req, false)
  73. if err != nil {
  74. appG.Response(http.StatusOK, e.ERROR_UPLOAD_SIGNURL_FAIL, err.Error())
  75. return
  76. }
  77. var rsp, err = service.GetTHotUpdateVerManager().GetVersionList(req.Start, req.Limit)
  78. if err != nil {
  79. appG.Response(http.StatusOK, e.NO_RECORD, err.Error())
  80. } else {
  81. appG.Response(http.StatusOK, e.SUCCESS, rsp)
  82. }
  83. } else {
  84. appG.Response(http.StatusOK, e.INVALID_PARAMS, err.Error())
  85. }
  86. }
  87. // 修改状态
  88. func ChangeStatus(c *gin.Context) {
  89. logger.Info("uri %s", c.Request.RequestURI)
  90. var appG = app.Gin{C: c}
  91. req := service.TChangeStautsReq{}
  92. err := c.ShouldBind(&req)
  93. if err == nil {
  94. err = checkAddVersionHash(req, false)
  95. if err != nil {
  96. appG.Response(http.StatusOK, e.ERROR_UPLOAD_SIGNURL_FAIL, err.Error())
  97. return
  98. }
  99. var rsp, err = service.GetTHotUpdateVerManager().ChangeStatus(req.ID, req.Status)
  100. if err != nil {
  101. appG.Response(http.StatusOK, e.NO_RECORD, err.Error())
  102. } else {
  103. appG.Response(http.StatusOK, e.SUCCESS, rsp)
  104. }
  105. } else {
  106. appG.Response(http.StatusOK, e.INVALID_PARAMS, err.Error())
  107. }
  108. }
  109. func checkAddVersionHash(tReq any, checkTimeout bool) error {
  110. jsonBytes, err := json.Marshal(tReq)
  111. if err != nil {
  112. return err
  113. }
  114. var res map[string]any
  115. err = json.Unmarshal(jsonBytes, &res)
  116. if err != nil {
  117. return err
  118. }
  119. if checkTimeout {
  120. reqTimeStr, ok := res["timesec"]
  121. if !ok {
  122. return fmt.Errorf("time is empty")
  123. }
  124. curTime := time.Now().Unix()
  125. reqTime, ok := reqTimeStr.(int64) //strconv.ParseInt(reqTimeStr, 10, 64)
  126. if !ok {
  127. return fmt.Errorf("timesec:%s is not int64", reqTimeStr)
  128. }
  129. deltaTime := curTime - reqTime
  130. if deltaTime < 0 {
  131. deltaTime = -deltaTime
  132. }
  133. if deltaTime > DEF_REQ_TIMEOUT_SEC {
  134. return fmt.Errorf("time:%d, nowtime:%d", reqTime, curTime)
  135. }
  136. }
  137. reqSign, ok := res["sign"]
  138. if !ok {
  139. return fmt.Errorf("sign is empty")
  140. }
  141. delete(res, "sign")
  142. sign := tool.GenSign(res)
  143. if sign != reqSign {
  144. return fmt.Errorf("reqSign:%s, but now sign:%s, sign error", reqSign, sign)
  145. }
  146. return nil
  147. }