download_url.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package fileManager
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/bitly/go-simplejson"
  6. "go.uber.org/zap"
  7. "gorm.io/gorm"
  8. "log-server/global"
  9. "log-server/model/fileManager"
  10. "log-server/model/task"
  11. "log-server/service/system"
  12. "log-server/utils"
  13. "strconv"
  14. "strings"
  15. "time"
  16. )
  17. type ServiceDownLoadUrl struct {
  18. }
  19. var robotService = new(system.RobotService)
  20. // UpdateGameVersion 定时更新游戏版本号和链接
  21. func (s *ServiceDownLoadUrl) UpdateGameVersion() {
  22. nowTime := time.Now().Format("2006-01-02 15:04:05")
  23. taskList, err := s.GetAllTaskByRun()
  24. if err != nil {
  25. global.GVA_LOG.Error("定时更新游戏版本号和链接执行失败,查询所有在运行的任务失败:"+nowTime, zap.Error(err))
  26. return
  27. }
  28. content := ""
  29. var directorName string
  30. for _, v := range taskList {
  31. global.GVA_LOG.Info(v.GameIdXmy + v.TaskName)
  32. if v.GameIdXmy == "" {
  33. continue
  34. }
  35. result, err := s.GetGameDownLoadUrlAndVersion(v.GameIdXmy)
  36. if err != nil {
  37. return
  38. }
  39. dataJson, _ := simplejson.NewJson(result)
  40. code, err := dataJson.Get("code").Int()
  41. if err != nil {
  42. return
  43. }
  44. //global.GVA_LOG.Info(strconv.Itoa(code))
  45. //msg, _ := dataJson.Get("msg").String()
  46. //global.GVA_LOG.Info(msg)
  47. if code != 0 {
  48. continue
  49. }
  50. packageUrl, _ := dataJson.Get("data").Get("package").Get("download_url").String()
  51. //global.GVA_LOG.Info(packageUrl)
  52. packageVersionCode, _ := dataJson.Get("data").Get("package").Get("version_code").Int()
  53. //global.GVA_LOG.Info(strconv.Itoa(packageVersionCode))
  54. appUrl, _ := dataJson.Get("data").Get("app").Get("download_url").String()
  55. //global.GVA_LOG.Info(appUrl)
  56. appVersionName, _ := dataJson.Get("data").Get("app").Get("version_name").String()
  57. //global.GVA_LOG.Info(appVersionName)
  58. appFlag, _ := dataJson.Get("data").Get("app").Get("flag").Int()
  59. //global.GVA_LOG.Info(strconv.Itoa(appFlag))
  60. one := new(fileManager.DownLoadUrl)
  61. one.PackageUrl = packageUrl
  62. one.PackageVersionCode = packageVersionCode
  63. one.AppUrl = appUrl
  64. one.AppVersionName = appVersionName
  65. one.AppFlag = appFlag
  66. one.TaskId = v.TaskId
  67. one.CreateTime = time.Now().Format("2006-01-02 15:04:05")
  68. one.UpdateTime = time.Now().Format("2006-01-02 15:04:05")
  69. //先查询是否存在,存在则对比版本号与链接;不存在则插入
  70. old := fileManager.DownLoadUrl{}
  71. var keyWord string
  72. if !errors.Is(global.GVA_DB.Model(&fileManager.DownLoadUrl{}).Where("task_id = ?", v.TaskId).First(&old).Error, gorm.ErrRecordNotFound) {
  73. flagPackage := false
  74. if one.PackageVersionCode > old.PackageVersionCode {
  75. flagPackage = true
  76. //global.GVA_LOG.Info("package有新版本")
  77. if one.PackageUrl != "" {
  78. keyWord += "在打包平台有新版本: " + one.PackageUrl + ";<font color=\"warning\">更新大概率为强制更新</font>;"
  79. //keyWord += "在打包平台有新版本: [点击下载](" + one.PackageUrl + ");"
  80. }
  81. }
  82. flagApp := false
  83. sv1 := s.StrsToSlice(one.AppVersionName)
  84. sv2 := s.StrsToSlice(old.AppVersionName)
  85. s1Appended, s2Appended := s.ApeendZreo(sv1, sv2)
  86. for i := 0; i < len(s1Appended); i++ {
  87. if s1Appended[i] > s2Appended[i] {
  88. flagApp = true
  89. //global.GVA_LOG.Info("app有新版本")
  90. if one.AppUrl != "" {
  91. keyWord += "在小绵羊APP有新版本: " + one.AppUrl + ";"
  92. if one.AppFlag == 1 {
  93. global.GVA_LOG.Info("游戏有强更")
  94. keyWord += "<font color=\"warning\">更新可能为强制更新</font>;"
  95. }
  96. }
  97. break
  98. }
  99. }
  100. if flagPackage == true || flagApp == true {
  101. err = global.GVA_DB.Model(&fileManager.DownLoadUrl{}).Where("task_id = ?", v.TaskId).Updates(one).Error
  102. }
  103. if err != nil {
  104. global.GVA_LOG.Error("定时更新游戏版本号和链接执行失败,执行数据库操作失败:"+nowTime, zap.Error(err))
  105. return
  106. }
  107. //播报内容
  108. if keyWord != "" {
  109. if directorName != v.User {
  110. content += ">#### **" + v.User + "**\n " + strconv.Itoa(v.TaskId) + " " + v.TaskName + keyWord + "\n"
  111. } else {
  112. content += strconv.Itoa(v.TaskId) + " " + v.TaskName + keyWord + "\n"
  113. }
  114. directorName = v.User
  115. }
  116. } else {
  117. err = global.GVA_DB.Create(&one).Error
  118. }
  119. if err != nil {
  120. global.GVA_LOG.Error("定时更新游戏版本号和链接执行失败,执行数据库操作失败:"+nowTime, zap.Error(err))
  121. return
  122. }
  123. }
  124. if content != "" {
  125. content = ">#### **【游戏更新】预警** (" + nowTime + "):\n" + content
  126. //global.GVA_LOG.Info(content)
  127. url := global.GVA_CONFIG.SendUrl.ComputerSendUrl
  128. _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content)
  129. url2 := global.GVA_CONFIG.SendUrl.KeyWordSendUrl
  130. _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url2, content)
  131. }
  132. }
  133. // GetAllTaskByRun 查询所有在运行的任务
  134. func (s *ServiceDownLoadUrl) GetAllTaskByRun() (list []task.GameTask, err error) {
  135. var taskList []task.GameTask
  136. db := global.GVA_DB.Model(&task.GameTask{})
  137. db.Where("status = 1")
  138. err = db.Order("user").Find(&taskList).Error
  139. return taskList, err
  140. }
  141. // GetGameDownLoadUrlAndVersion 获取游戏版本和下载链接
  142. func (s *ServiceDownLoadUrl) GetGameDownLoadUrlAndVersion(xmyId string) (result []byte, err error) {
  143. url := "http://rtd.kfzs.com/get_version.php"
  144. params := map[string]string{
  145. "game_id": xmyId,
  146. }
  147. result, err = utils.HttpGet(url, params)
  148. return
  149. }
  150. // ApeendZreo 补全切片
  151. func (s *ServiceDownLoadUrl) ApeendZreo(s1, s2 []string) ([]string, []string) {
  152. var count int
  153. if len(s1) > len(s2) {
  154. count = len(s1) - len(s2)
  155. for i := 0; i < count; i++ {
  156. s2 = append(s2, "0")
  157. }
  158. }
  159. if len(s1) < len(s2) {
  160. count = len(s2) - len(s1)
  161. for i := 0; i < count; i++ {
  162. s1 = append(s1, "0")
  163. }
  164. }
  165. return s1, s2
  166. }
  167. func (s *ServiceDownLoadUrl) StrsToSlice(version string) []string {
  168. return strings.Split(version, ".")
  169. }
  170. func (s *ServiceDownLoadUrl) StrToInt64(str string) int64 {
  171. res, err := strconv.Atoi(str)
  172. if err != nil {
  173. fmt.Println("Invalid Number string")
  174. return -1
  175. }
  176. return int64(res)
  177. }