diff --git a/fastapi_modules/fastapi_leaudit/services/impl/ruleConfigServiceImpl.py b/fastapi_modules/fastapi_leaudit/services/impl/ruleConfigServiceImpl.py index 5d0c104..6a016aa 100644 --- a/fastapi_modules/fastapi_leaudit/services/impl/ruleConfigServiceImpl.py +++ b/fastapi_modules/fastapi_leaudit/services/impl/ruleConfigServiceImpl.py @@ -127,12 +127,10 @@ class RuleConfigServiceImpl(IRuleConfigService): resolved_version_id = current_version_id or fallback_version_id has_usable_version = bool(rule_set_meta.get("has_usable_version")) usable_rule_count = int(rule_set_meta.get("usable_rule_count") or 0) - latest_version_id = await self._load_latest_version_id(rule_set_id) - latest_version_seq = await self._load_version_seq_by_id(latest_version_id) - resolved_version_seq = await self._load_version_seq_by_id(resolved_version_id) - if latest_version_id is not None and (resolved_version_id is None or latest_version_seq > resolved_version_seq): - # 规则详情页优先读取最新草稿;上传运行仍以 current/fallback 的可用版本为准。 - resolved_version_id = latest_version_id + if resolved_version_id is None: + # 仅在当前没有生效版本时,才回退到最新版本(通常是草稿)。 + # 否则规则详情页必须与当前生效版本保持一致,发布/回滚后才能看到真实内容切换。 + resolved_version_id = await self._load_latest_version_id(rule_set_id) if resolved_version_id is not None: yaml_text = await self._load_yaml_text_by_version_id(resolved_version_id) source_status = "ready" if yaml_text.strip() else "missing" diff --git a/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py b/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py index 96881a8..fd1b410 100644 --- a/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py +++ b/fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py @@ -54,12 +54,13 @@ class RuleServiceImpl(IRuleService): FROM leaudit_rule_sets rs LEFT JOIN leaudit_rule_versions current_rv ON current_rv.id = rs.current_version_id - AND current_rv.status IN ('published', 'rollback') + AND current_rv.status = 'published' LEFT JOIN LATERAL ( SELECT rv.id FROM leaudit_rule_versions rv WHERE rv.rule_set_id = rs.id - AND rv.status IN ('published', 'rollback') + AND rv.status = 'published' + AND (rs.current_version_id IS NULL OR rv.id <> rs.current_version_id) ORDER BY rv.version_seq DESC, rv.id DESC LIMIT 1 ) fallback_rv ON TRUE