From 3972f00e25f3eeb3efe7d1903f12d146523d0ac9 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Tue, 30 Jun 2026 23:37:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=20site=5Fconfigs=20?= =?UTF-8?q?=E7=9A=84=20uk=5Fsite=5Fversion=20=E5=94=AF=E4=B8=80=E7=BA=A6?= =?UTF-8?q?=E6=9D=9F=EF=BC=8C=E7=89=88=E6=9C=AC=E5=8F=B7=E7=94=B1=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=AB=AF=E6=89=B9=E5=87=86=E6=97=B6=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/service/impl/ConfigServiceImpl.java | 28 ++----------------- .../V11__drop_site_config_version_unique.sql | 3 ++ 2 files changed, 6 insertions(+), 25 deletions(-) create mode 100644 par-core/src/main/resources/db/migration/V11__drop_site_config_version_unique.sql diff --git a/par-core/src/main/java/com/par/core/service/impl/ConfigServiceImpl.java b/par-core/src/main/java/com/par/core/service/impl/ConfigServiceImpl.java index e2067ff..2cbba96 100644 --- a/par-core/src/main/java/com/par/core/service/impl/ConfigServiceImpl.java +++ b/par-core/src/main/java/com/par/core/service/impl/ConfigServiceImpl.java @@ -70,7 +70,7 @@ public class ConfigServiceImpl implements ConfigService { return sameHash; } - // 写入存储 + // 存储到抽象存储层 try { storageService.store(storagePath, configJson); } catch (Exception e) { @@ -78,34 +78,12 @@ public class ConfigServiceImpl implements ConfigService { throw new RuntimeException("存储配置文件失败: " + e.getMessage(), e); } - long fileSize = configJson.getBytes(StandardCharsets.UTF_8).length; - - // 同一 (site_id, version) 已有 PENDING 记录 → 更新而非新增(避免唯一约束冲突) - SiteConfig existingPending = siteConfigMapper.selectOne( - new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() - .eq(SiteConfig::getSiteId, siteId) - .eq(SiteConfig::getVersion, version) - .eq(SiteConfig::getStatus, ConfigStatus.PENDING) - .eq(SiteConfig::getDeleted, 0)); - if (existingPending != null) { - // 删除旧存储文件 - storageService.delete(existingPending.getStoragePath()); - existingPending.setConfigHash(configHash); - existingPending.setStoragePath(storagePath); - existingPending.setFileSize(fileSize); - existingPending.setSchemaVersion(schemaVersion != null ? schemaVersion : existingPending.getSchemaVersion()); - existingPending.setSubmitterId(submitterId); - siteConfigMapper.updateById(existingPending); - log.info("Config updated: siteId={}, version={}, id={}, hash={}", siteId, version, existingPending.getId(), configHash); - return existingPending; - } - SiteConfig config = new SiteConfig(); config.setSiteId(siteId); - config.setVersion(version); + config.setVersion(version); // 客户端传入的版本,仅供参考;批准时会被自动分配的新版本号覆盖 config.setConfigHash(configHash); config.setStoragePath(storagePath); - config.setFileSize(fileSize); + config.setFileSize((long) configJson.getBytes(StandardCharsets.UTF_8).length); config.setSchemaVersion(schemaVersion != null ? schemaVersion : "1.0.0"); config.setStatus(ConfigStatus.PENDING); config.setSubmitterId(submitterId); diff --git a/par-core/src/main/resources/db/migration/V11__drop_site_config_version_unique.sql b/par-core/src/main/resources/db/migration/V11__drop_site_config_version_unique.sql new file mode 100644 index 0000000..c54e185 --- /dev/null +++ b/par-core/src/main/resources/db/migration/V11__drop_site_config_version_unique.sql @@ -0,0 +1,3 @@ +-- PAR Flyway V11: 移除 site_configs 的 (site_id, version) 唯一约束 +-- 版本号在审批通过时才由服务端自动分配,提交时客户端传入的版本仅供参考,不应限制唯一 +ALTER TABLE site_configs DROP INDEX uk_site_version;