download_url.go 5.9 KB

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