diff --git a/changelogs/2026-05/05_feat_wx-security_phase2d.md b/changelogs/2026-05/05_feat_wx-security_phase2d.md new file mode 100644 index 0000000..01a6931 --- /dev/null +++ b/changelogs/2026-05/05_feat_wx-security_phase2d.md @@ -0,0 +1,51 @@ +# feat(wx-security): Phase 2D admin 后台 + Phase 2C 5 P1 cleanup + +**PR**: [#1668](https://git.1814.love:8443/wx/HL/pulls/1668) **Issue**: [#1664](https://git.1814.love:8443/wx/HL/issues/1664) **合并**: 2026-05-05 + +按官方契约 §六 + §8.6 + §8.7.5 实现 hl-admin 后台 6 个模块;同时清理 Phase 2C 5 个 P1。 + +## Phase 2C 5 P1 cleanup + +- 拆 `UserAuditAsyncService`(独立 service,TravelerAuditService 不再注入 UserMapper) +- @Async + @Transactional 拆分(单 SQL 不需要事务) +- 字段注入 → `Optional` 构造器注入 +- insertAuditLog catch 改 ERROR + schema_hint 字段诊断 +- BLACKLIST 改 `setBlacklistChecker(Predicate)` 钩子,启动时 BlacklistService 注入 + +## Admin 后台 6 模块 + +| 模块 | 路径 | +|---|---| +| 人工复审队列 | GET/POST `/admin/wx-security/manual-review/{page,approve,reject}` | +| 命中日志 | GET `/admin/wx-security/hit-log/page` | +| 白名单 CRUD | `/admin/wx-security/whitelist/{page,post,delete}` | +| 黑名单 CRUD | `/admin/wx-security/blacklist/{page,post,delete}` | +| 评价举报队列 | `/admin/review/report-queue/{page,hide,restore,ignore-report,warn-author}` | +| 头像违规列表 | GET `/admin/user/avatar-rejected/page` | +| 用户风控配置 | `/admin/wx-security/user-risk/{list,put}` | + +## 表结构 + +新增 3 张表(V20260505_008): +- `wx_security_name_whitelist` — 误伤短语豁免 +- `wx_security_name_blacklist` — 真违规词运营维护 +- `wx_security_user_risk_config` — 用户行为风控规则(预置 2 条:traveler 24h 5 次违规 / review 24h 20 次举报) + +## 错误码 + +新增段位 `290000-299999` (`AdminWxSecurityErrorCode`) 10 个 + `ReviewErrorCode` 加 HIDE_REASON_REQUIRED + REPORT_NOT_FOUND。 + +## 不在范围(推后续 PR) + +- Phase 2D-B:跨服务复审聚合(review/complaint/refund/feedback 通过 Feign 聚合到 admin BFF) +- Phase 2D-C:user_risk 规则实际应用(异步审 + 举报时查 risk config 拦截) +- 站内信 SDK 集成(项目内未发现现成模式,hide/warnAuthor 留 TODO) + +## 测试 + +- mvn compile 全工程 BUILD SUCCESS +- 242/242 全绿(user-service 161 + order-v2 81) + +## 部署注意事项 + +V20260505_008 在 hl_user_service schema。无字典初始化,无需清缓存。