From efd693e8e9d7e434aea55b76384467d127800f9a Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Sun, 12 Jul 2026 22:59:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BF=AB=E7=85=A7?= =?UTF-8?q?=E9=A3=8E=E9=99=A9=E8=A7=84=E5=88=99=E4=B8=B2=E7=AB=99=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit buildSnapshot() 原先仅按 siteType 查询风险规则,导致同类型站点共享同一套规则。 改为优先按 siteId 查找站点专属规则,无则 fallback 到 siteType 兜底。 同时用 selectOne+limit 1 替代 selectList 优化性能,并增加 debug 日志。 --- .../service/impl/SiteSnapshotServiceImpl.java | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) 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 8820a66..0d9a3f4 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 @@ -100,22 +100,36 @@ public class SiteSnapshotServiceImpl implements SiteSnapshotService { snapshot.put("pagesSource", pages.containsKey("source") ? pages.get("source") : "custom"); } - // 3. 风险规则 - if (siteType != null) { - var rules = riskRuleMapper.selectList( + // 3. 风险规则(优先按站点专属规则查找,无则 fallback 到站点类型规则) + RiskRule matchedRule = null; + // 3a. 按站点 ID 查找专属规则 + if (siteId != null) { + matchedRule = riskRuleMapper.selectOne( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(RiskRule::getSiteId, siteId) + .eq(RiskRule::getDeleted, 0) + .orderByDesc(RiskRule::getId) + .last("limit 1")); + } + // 3b. 无专属规则时 fallback 到站点类型规则 + if (matchedRule == null && siteType != null) { + matchedRule = riskRuleMapper.selectOne( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() .eq(RiskRule::getSiteType, siteType) .eq(RiskRule::getDeleted, 0) - .orderByDesc(RiskRule::getId)); - if (!rules.isEmpty()) { - var latestRule = rules.get(0); - try { - List> rulesList = om.readValue(latestRule.getRulesJson(), - new TypeReference>>() {}); - snapshot.put("riskRules", rulesList); - snapshot.put("riskRulesVersion", latestRule.getVersion()); - } catch (Exception ignored) {} - } + .orderByDesc(RiskRule::getId) + .last("limit 1")); + } + if (matchedRule != null) { + try { + List> rulesList = om.readValue(matchedRule.getRulesJson(), + new TypeReference>>() {}); + snapshot.put("riskRules", rulesList); + snapshot.put("riskRulesVersion", matchedRule.getVersion()); + log.debug("快照风险规则: siteId={} ruleSource={} ruleVersion={}", siteId, + matchedRule.getSiteId() != null && matchedRule.getSiteId().equals(siteId) ? "site" : "siteType", + matchedRule.getVersion()); + } catch (Exception ignored) {} } // 只要有任一配置(脚本/页面/规则)即视为有效快照