versionController.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package upgrade
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "strconv"
  6. "strings"
  7. "github.com/astaxie/beego"
  8. )
  9. type VersionController struct {
  10. beego.Controller
  11. }
  12. func init() {
  13. }
  14. //检查是否有新的客户端版本.客户端本地检查接口
  15. // @Summary 检查是否有新的客户端版本
  16. // @router /version/isnew [get]
  17. func (c *VersionController) IsNewClientVersion() {
  18. if IsNewVersion == 0 {
  19. c.Data["json"] = c.warpOK("")
  20. } else {
  21. c.Data["json"] = c.warpOK(GetNewVersionInfo())
  22. }
  23. c.ServeJSON()
  24. }
  25. //检查是否有新的客户端版本.服务端接口
  26. // @Summary 获取最新客户端版本下载地址
  27. // @router /version/check_client [get]
  28. func (c *VersionController) CheckClientVersion() {
  29. clientVersion := c.GetString("version")
  30. if clientVersion == "" {
  31. c.Data["json"] = c.warpError("无效的客户端版本号")
  32. c.ServeJSON()
  33. return
  34. }
  35. clientVersion = strings.Replace(clientVersion, "-", "", 1)
  36. dir := "./static/client_version"
  37. _, err := os.Stat(dir)
  38. if err != nil {
  39. c.Data["json"] = c.warpError("检查版本信息时异常:" + err.Error())
  40. c.ServeJSON()
  41. return
  42. }
  43. newVersion := map[string]string{"url": "", "version": "", "desc": ""}
  44. if os.IsNotExist(err) {
  45. os.MkdirAll(dir, 0777)
  46. c.Data["json"] = c.warpOK(newVersion)
  47. c.ServeJSON()
  48. return
  49. }
  50. //获取目录 下最新的更新包
  51. //包为zip格式,包名规则为打包时的年月日时,如2022011413表示该包在2022年01月14日13点完成打包,将以此为版本号与客户端版本号进行对比
  52. flist, err := ioutil.ReadDir(dir)
  53. if err != nil {
  54. c.Data["json"] = c.warpError("检查版本信息时异常:" + err.Error())
  55. c.ServeJSON()
  56. return
  57. }
  58. maxVersion := 0
  59. filename := ""
  60. for _, fp := range flist {
  61. if fp.IsDir() {
  62. continue
  63. }
  64. f2 := strings.Split(fp.Name(), ".")
  65. if len(f2) == 1 || f2[1] != "zip" {
  66. continue
  67. }
  68. vvv, err := strconv.Atoi(strings.ReplaceAll(f2[0], "-", ""))
  69. if err != nil {
  70. continue
  71. }
  72. if vvv > maxVersion {
  73. maxVersion = vvv
  74. filename = f2[0]
  75. }
  76. }
  77. clientVersionInt, _ := strconv.Atoi(clientVersion)
  78. if maxVersion > clientVersionInt {
  79. newVersion["version"] = strconv.Itoa(maxVersion)
  80. newVersion["url"] = "static/client_version/" + filename + ".zip"
  81. }
  82. c.Data["json"] = c.warpOK(newVersion)
  83. c.ServeJSON()
  84. }
  85. func (c *VersionController) warpOK(data interface{}) interface{} {
  86. user := make(map[string]interface{})
  87. user["data"] = data
  88. user["returncode"] = 200
  89. user["msg"] = ""
  90. return user
  91. }
  92. func (c *VersionController) warpError(msg string) interface{} {
  93. user := make(map[string]interface{})
  94. user["data"] = ""
  95. user["returncode"] = 500
  96. user["msg"] = msg
  97. return user
  98. }