From 886e2fba70f42c95c349ab8956ea6aad507d708e Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Tue, 7 Jul 2026 23:33:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=80=82=E9=85=8D=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E9=A1=B5=E4=B8=A4=E4=B8=AA=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. buildSnapshot 改用 selectRecentBySiteId(按updated_at取最新配置),不再依赖 is_latest 修复:编辑脚本后保存预览版,buildSnapshot 读到旧脚本导致快照生成失败,发布按钮不出现 2. approveConfig 版本号排序改为 CAST(version AS UNSIGNED) 数值排序 修复:version 是 VARCHAR,字母序导致 '9' > '10',版本号永远过不了 10 --- .../src/main/java/com/par/api/controller/AdminController.java | 4 ++-- .../src/main/java/com/par/core/mapper/SiteConfigMapper.java | 4 ++++ .../com/par/core/service/impl/SiteSnapshotServiceImpl.java | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/par-api/src/main/java/com/par/api/controller/AdminController.java b/par-api/src/main/java/com/par/api/controller/AdminController.java index f51b249..97c2d5c 100644 --- a/par-api/src/main/java/com/par/api/controller/AdminController.java +++ b/par-api/src/main/java/com/par/api/controller/AdminController.java @@ -91,12 +91,12 @@ public class AdminController { Long reviewerId = (Long) request.getAttribute("accountId"); - // 自动分配版本号:取该站点已审批的最大版本号 + 1 + // 自动分配版本号:取该站点已审批的最大版本号 + 1(version 是 VARCHAR,需 CAST 数值排序) var latestApproved = siteConfigMapper.selectList( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() .eq(SiteConfig::getSiteId, config.getSiteId()) .eq(SiteConfig::getStatus, ConfigStatus.APPROVED) - .orderByDesc(SiteConfig::getVersion)); + .last("ORDER BY CAST(version AS UNSIGNED) DESC")); int nextVersion = 1; if (!latestApproved.isEmpty()) { try { nextVersion = Integer.parseInt(latestApproved.get(0).getVersion()) + 1; } diff --git a/par-core/src/main/java/com/par/core/mapper/SiteConfigMapper.java b/par-core/src/main/java/com/par/core/mapper/SiteConfigMapper.java index 990bd51..760add2 100644 --- a/par-core/src/main/java/com/par/core/mapper/SiteConfigMapper.java +++ b/par-core/src/main/java/com/par/core/mapper/SiteConfigMapper.java @@ -18,6 +18,10 @@ public interface SiteConfigMapper extends BaseMapper { @Select("SELECT * FROM site_configs WHERE site_id = #{siteId} AND is_latest = 1 AND deleted = 0 LIMIT 1") SiteConfig selectLatestBySiteId(@Param("siteId") String siteId); + /** 取最后更新的配置(用于快照构建,不受 is_latest 限制) */ + @Select("SELECT * FROM site_configs WHERE site_id = #{siteId} AND deleted = 0 ORDER BY updated_at DESC LIMIT 1") + SiteConfig selectRecentBySiteId(@Param("siteId") String siteId); + @Select("SELECT * FROM site_configs WHERE site_id = #{siteId} AND status = 'approved' AND deleted = 0 ORDER BY created_at DESC") List selectApprovedBySiteId(@Param("siteId") String siteId); diff --git a/par-core/src/main/java/com/par/core/service/impl/SiteSnapshotServiceImpl.java b/par-core/src/main/java/com/par/core/service/impl/SiteSnapshotServiceImpl.java index 3201729..2d737a3 100644 --- a/par-core/src/main/java/com/par/core/service/impl/SiteSnapshotServiceImpl.java +++ b/par-core/src/main/java/com/par/core/service/impl/SiteSnapshotServiceImpl.java @@ -61,8 +61,8 @@ public class SiteSnapshotServiceImpl implements SiteSnapshotService { var site = siteMapper.selectBySiteId(siteId); String siteType = site != null && site.getSiteType() != null ? site.getSiteType().getValue() : null; - // 1. 脚本 - SiteConfig latest = siteConfigMapper.selectLatestBySiteId(siteId); + // 1. 脚本(取最后更新的配置,不受 is_latest 限制,确保未审批的脚本也能入快照) + SiteConfig latest = siteConfigMapper.selectRecentBySiteId(siteId); if (latest != null && latest.getScriptStoragePath() != null && !latest.getScriptStoragePath().isBlank()) { try { String script = storageService.read(latest.getScriptStoragePath());