download_url.go 5.8 KB

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