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 5b2b6c8..c5ef800 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 @@ -60,14 +60,26 @@ public class ConfigServiceImpl implements ConfigService { public SiteConfig submitConfig(String siteId, String version, String configJson, String schemaVersion, Long submitterId) { SiteConfig existing = getConfig(siteId, version); - if (existing != null) { - log.info("配置版本已存在,跳过: siteId={}, version={}", siteId, version); - return existing; - } - String configHash = HmacUtil.sha256(configJson); String storagePath = String.format("configs/%s/%s.json", siteId, version); + // 版本已存在 → 根据 hash 判断是重复还是更新 + if (existing != null) { + if (configHash.equals(existing.getConfigHash())) { + log.info("配置未变化,跳过: siteId={}, version={}, hash={}", siteId, version, configHash); + return existing; + } + // hash 不同 → 覆盖更新 + log.info("配置内容变化,更新: siteId={}, version={}, oldHash={}, newHash={}", + siteId, version, existing.getConfigHash(), configHash); + storageService.store(storagePath, configJson); + existing.setConfigHash(configHash); + existing.setFileSize((long) configJson.getBytes(StandardCharsets.UTF_8).length); + existing.setStoragePath(storagePath); + siteConfigMapper.updateById(existing); + return existing; + } + // 存储到抽象存储层(七牛或本地) try { storageService.store(storagePath, configJson);