package fileManager import ( "errors" "fmt" "github.com/bitly/go-simplejson" "go.uber.org/zap" "gorm.io/gorm" "log-server/global" "log-server/model/fileManager" "log-server/model/task" "log-server/service/system" "log-server/utils" "strconv" "strings" "time" ) type ServiceDownLoadUrl struct { } var robotService = new(system.RobotService) // UpdateGameVersion 定时更新游戏版本号和链接 func (s *ServiceDownLoadUrl) UpdateGameVersion() { nowTime := time.Now().Format("2006-01-02 15:04:05") taskList, err := s.GetAllTaskByRun() if err != nil { global.GVA_LOG.Error("定时更新游戏版本号和链接执行失败,查询所有在运行的任务失败:"+nowTime, zap.Error(err)) return } content := "" var directorName string for _, v := range taskList { global.GVA_LOG.Info(v.GameIdXmy + v.TaskName) if v.GameIdXmy == "" { continue } result, err := s.GetGameDownLoadUrlAndVersion(v.GameIdXmy) if err != nil { return } dataJson, _ := simplejson.NewJson(result) code, _ := dataJson.Get("code").Int() //global.GVA_LOG.Info(strconv.Itoa(code)) //msg, _ := dataJson.Get("msg").String() //global.GVA_LOG.Info(msg) if code != 0 { continue } packageUrl, _ := dataJson.Get("data").Get("package").Get("download_url").String() //global.GVA_LOG.Info(packageUrl) packageVersionCode, _ := dataJson.Get("data").Get("package").Get("version_code").Int() //global.GVA_LOG.Info(strconv.Itoa(packageVersionCode)) appUrl, _ := dataJson.Get("data").Get("app").Get("download_url").String() //global.GVA_LOG.Info(appUrl) appVersionName, _ := dataJson.Get("data").Get("app").Get("version_name").String() //global.GVA_LOG.Info(appVersionName) appFlag, _ := dataJson.Get("data").Get("app").Get("flag").Int() //global.GVA_LOG.Info(strconv.Itoa(appFlag)) one := new(fileManager.DownLoadUrl) one.PackageUrl = packageUrl one.PackageVersionCode = packageVersionCode one.AppUrl = appUrl one.AppVersionName = appVersionName one.AppFlag = appFlag one.TaskId = v.TaskId one.CreateTime = time.Now().Format("2006-01-02 15:04:05") one.UpdateTime = time.Now().Format("2006-01-02 15:04:05") //先查询是否存在,存在则对比版本号与链接;不存在则插入 old := fileManager.DownLoadUrl{} var keyWord string if !errors.Is(global.GVA_DB.Model(&fileManager.DownLoadUrl{}).Where("task_id = ?", v.TaskId).First(&old).Error, gorm.ErrRecordNotFound) { flagPackage := false if one.PackageVersionCode > old.PackageVersionCode { flagPackage = true //global.GVA_LOG.Info("package有新版本") if one.PackageUrl != "" { keyWord += "在打包平台有新版本: " + one.PackageUrl + ";更新大概率为强制更新;" //keyWord += "在打包平台有新版本: [点击下载](" + one.PackageUrl + ");" } } flagApp := false sv1 := s.StrsToSlice(one.AppVersionName) sv2 := s.StrsToSlice(old.AppVersionName) s1Appended, s2Appended := s.ApeendZreo(sv1, sv2) for i := 0; i < len(s1Appended); i++ { if s1Appended[i] > s2Appended[i] { flagApp = true //global.GVA_LOG.Info("app有新版本") if one.AppUrl != "" { keyWord += "在小绵羊APP有新版本: " + one.AppUrl + ";" if one.AppFlag == 1 { global.GVA_LOG.Info("游戏有强更") keyWord += "更新可能为强制更新;" } } break } } if flagPackage == true || flagApp == true { err = global.GVA_DB.Model(&fileManager.DownLoadUrl{}).Where("task_id = ?", v.TaskId).Updates(one).Error } if err != nil { global.GVA_LOG.Error("定时更新游戏版本号和链接执行失败,执行数据库操作失败:"+nowTime, zap.Error(err)) return } //播报内容 if keyWord != "" { if directorName != v.User { content += ">#### **" + v.User + "**\n " + strconv.Itoa(v.TaskId) + " " + v.TaskName + keyWord + "\n" } else { content += strconv.Itoa(v.TaskId) + " " + v.TaskName + keyWord + "\n" } directorName = v.User } } else { err = global.GVA_DB.Create(&one).Error } if err != nil { global.GVA_LOG.Error("定时更新游戏版本号和链接执行失败,执行数据库操作失败:"+nowTime, zap.Error(err)) return } } if content != "" { content = ">#### **【游戏更新】预警** (" + nowTime + "):\n" + content //global.GVA_LOG.Info(content) url := global.GVA_CONFIG.SendUrl.ComputerSendUrl _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url, content) url2 := global.GVA_CONFIG.SendUrl.KeyWordSendUrl _, _ = robotService.PostRobotToEnterpriseWeChatByMarkdown(url2, content) } } // GetAllTaskByRun 查询所有在运行的任务 func (s *ServiceDownLoadUrl) GetAllTaskByRun() (list []task.GameTask, err error) { var taskList []task.GameTask db := global.GVA_DB.Model(&task.GameTask{}) db.Where("status = 1") err = db.Order("user").Find(&taskList).Error return taskList, err } // GetGameDownLoadUrlAndVersion 获取游戏版本和下载链接 func (s *ServiceDownLoadUrl) GetGameDownLoadUrlAndVersion(xmyId string) (result []byte, err error) { url := "http://rtd.kfzs.com/get_version.php" params := map[string]string{ "game_id": xmyId, } result, err = utils.HttpGet(url, params) return } // ApeendZreo 补全切片 func (s *ServiceDownLoadUrl) ApeendZreo(s1, s2 []string) ([]string, []string) { var count int if len(s1) > len(s2) { count = len(s1) - len(s2) for i := 0; i < count; i++ { s2 = append(s2, "0") } } if len(s1) < len(s2) { count = len(s2) - len(s1) for i := 0; i < count; i++ { s1 = append(s1, "0") } } return s1, s2 } func (s *ServiceDownLoadUrl) StrsToSlice(version string) []string { return strings.Split(version, ".") } func (s *ServiceDownLoadUrl) StrToInt64(str string) int64 { res, err := strconv.Atoi(str) if err != nil { fmt.Println("Invalid Number string") return -1 } return int64(res) }