From 2ae80d8114485e5e18591d71e5bb0b63cba55992 Mon Sep 17 00:00:00 2001 From: Trae AI Date: Sun, 21 Jun 2026 17:45:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20check-update=E5=8F=AA=E4=BB=8E=E5=B7=B2?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E7=89=88=E6=9C=AC=E4=B8=AD=E9=80=89=E5=8F=96?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC,=20=E7=94=A8=E6=89=80?= =?UTF-8?q?=E6=9C=89=E7=89=88=E6=9C=AC=E5=8C=B9=E9=85=8D=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/router/app/info.go | 41 ++++++++++++++++++----------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/backend/internal/router/app/info.go b/backend/internal/router/app/info.go index 1c00478..272a738 100644 --- a/backend/internal/router/app/info.go +++ b/backend/internal/router/app/info.go @@ -62,18 +62,29 @@ func handleAppCheckUpdate(c *gin.Context) { return } - // 查询该应用的所有版本(包括已失效的),按ID降序(创建顺序) - var allVersions []model.Version - if err := database.DB.Where("application_id = ?", app.ID). + // 查询该应用的所有已发布版本,按ID降序(用于获取最新版本和下载地址) + var publishedVersions []model.Version + if err := database.DB.Where("application_id = ? AND publish_status = ?", app.ID, "published"). Order("id DESC"). Preload("Files"). - Find(&allVersions).Error; err != nil { + Find(&publishedVersions).Error; err != nil { response.Error(c, 500, "获取版本列表失败") return } - // 没有任何版本 - if len(allVersions) == 0 { + // 同时查询所有版本(包括已失效的),用于匹配客户端版本号 + var allVersions []model.Version + if clientVersion != "" { + if err := database.DB.Where("application_id = ?", app.ID). + Order("id DESC"). + Find(&allVersions).Error; err != nil { + response.Error(c, 500, "获取版本列表失败") + return + } + } + + // 没有任何已发布版本 + if len(publishedVersions) == 0 { response.Success(c, gin.H{ "has_update": false, "current_version": clientVersion, @@ -95,9 +106,9 @@ func handleAppCheckUpdate(c *gin.Context) { return v } - // 如果没有传入版本号,直接返回最新版本(安装器模式,优先全量包) + // 如果没有传入版本号,直接返回最新已发布版本(安装器模式,优先全量包) if clientVersion == "" { - latestVersion := &allVersions[0] + latestVersion := &publishedVersions[0] // 确定下载地址:无版本号时 download_url 优先指向全量包 downloadURL := latestVersion.FullPackagePath @@ -165,10 +176,10 @@ func handleAppCheckUpdate(c *gin.Context) { return } - // 判断客户端版本状态:检查是否有更高ID的强制更新版本 + // 判断客户端版本状态:检查是否有更高ID的强制更新版本(只看已发布版本) isSuperseded := false - for i := range allVersions { - v := &allVersions[i] + for i := range publishedVersions { + v := &publishedVersions[i] // 存在ID更高(创建时间更晚)的强制更新版本 if v.ID > clientVersionRecord.ID && v.UpdateStrategy == "forced" { isSuperseded = true @@ -183,8 +194,8 @@ func handleAppCheckUpdate(c *gin.Context) { if isSuperseded { // 找到ID最高的强制更新版本 - for i := range allVersions { - v := &allVersions[i] + for i := range publishedVersions { + v := &publishedVersions[i] if v.ID > clientVersionRecord.ID && v.UpdateStrategy == "forced" { if latestVersion == nil || v.ID > latestVersion.ID { latestVersion = v @@ -194,8 +205,8 @@ func handleAppCheckUpdate(c *gin.Context) { updateStrategy = "forced" } else { // 没有强制更新,检查是否有更高ID的版本(普通更新) - // 最新版本就是ID最高的版本(已经是按ID降序排列,第一个就是最新) - latestVersion = &allVersions[0] + // 最新已发布版本就是ID最高的版本(已经是按ID降序排列,第一个就是最新) + latestVersion = &publishedVersions[0] // 只有当最新版本ID大于客户端版本ID时才需要更新 if latestVersion.ID > clientVersionRecord.ID {