原来 107 个后台接口配的是一套只能看的界面:风险中心 6 行代码全是只读, 动态和消息只能一条一条点,运营想发一句公告没有任何入口。 公告与通知:按全体、会员、城市、喂养者、有宠物的用户或指定名单发系统通知, 发之前能看到会发给多少人,可同时走离线推送。撤回只删还没读的那些——已经 读过的假装收回去只会让统计说谎。 资金总览:把"平台账上哪些钱不是自己的"单独摆出来(任务托管中 + 喂养者余额 + 申诉冻结),旁边才是收入、退款和待打款,最后是按产品和按日的收款。 退款统一到一个入口:会员、代喂、保证金都能分几次退到退完,每笔记一行; 退完最后一分钱才撤销买到的东西,半份会员仍然是会员。 风险中心能动手了:按等级和状态筛,行内直接封禁、冻结、加白(必须写理由)、 跳用户详情,事件可以标记跟进完成。 批量处置:动态、消息、举报支持勾选后批量下架/恢复/驳回,一次最多 100 条。 处罚仍然一条一条来——批量封禁是错封人最快的方式。 敏感词统一词库:消息、动态、送养共用一套,命中是拦截还是转人工由运营定; 转人工的命中会在风险中心留一条,管理端还能拿真实文案先试一遍。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
48 lines
2.6 KiB
SQL
48 lines
2.6 KiB
SQL
SET NAMES utf8mb4;
|
|
|
|
-- 风险中心原来只能看。加白是"这个人我们看过了,别再报",事件处理是"这条我
|
|
-- 跟进完了",两件事都得留下是谁做的。
|
|
ALTER TABLE user_risk_profiles
|
|
ADD COLUMN whitelisted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '人工加白后不再进风险列表',
|
|
ADD COLUMN whitelist_note VARCHAR(255) NOT NULL DEFAULT '',
|
|
ADD COLUMN reviewed_by BIGINT UNSIGNED NULL,
|
|
ADD COLUMN reviewed_at DATETIME(3) NULL;
|
|
|
|
ALTER TABLE risk_events
|
|
ADD COLUMN handled_at DATETIME(3) NULL,
|
|
ADD COLUMN handled_by BIGINT UNSIGNED NULL,
|
|
ADD COLUMN handled_note VARCHAR(255) NOT NULL DEFAULT '',
|
|
ADD KEY idx_risk_events_handled (handled_at, id);
|
|
|
|
-- 统一词库:消息、动态、送养原来各有各的判断(送养那组还写在配置里)。
|
|
-- 命中之后是拦下来还是转人工,是运营的判断,所以写在数据里而不是代码里。
|
|
CREATE TABLE IF NOT EXISTS content_keywords (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
word VARCHAR(60) NOT NULL,
|
|
scope VARCHAR(20) NOT NULL DEFAULT 'all' COMMENT 'all/message/post/adoption/nickname',
|
|
action VARCHAR(10) NOT NULL DEFAULT 'review' COMMENT 'block 直接拦下 / review 转人工',
|
|
category VARCHAR(30) NOT NULL DEFAULT '' COMMENT '分类,便于成组开关',
|
|
note VARCHAR(200) NOT NULL DEFAULT '',
|
|
status TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '0 停用 1 启用',
|
|
hit_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
last_hit_at DATETIME(3) NULL,
|
|
created_by BIGINT UNSIGNED NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_keyword_scope (word, scope),
|
|
KEY idx_keywords_status (status, scope)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- 把送养那组已经在用的词搬进词库,行为保持原样(转人工,不直接拦)。
|
|
INSERT IGNORE INTO content_keywords(word,scope,action,category,note)
|
|
SELECT TRIM(word),'adoption','review','送养收费','从 pet.adoption_review_words 迁移' FROM (
|
|
SELECT '元' AS word UNION ALL SELECT '钱' UNION ALL SELECT '价' UNION ALL SELECT '押金'
|
|
UNION ALL SELECT '费用' UNION ALL SELECT '红包' UNION ALL SELECT '转账' UNION ALL SELECT '收费'
|
|
UNION ALL SELECT '出售' UNION ALL SELECT '买' UNION ALL SELECT '卖'
|
|
) AS legacy;
|
|
|
|
INSERT INTO system_configs(config_key,config_value,value_type,description) VALUES
|
|
('moderation.keywords_enabled','true','boolean','是否启用统一词库;关闭后消息与动态不做关键词判断')
|
|
ON DUPLICATE KEY UPDATE description=VALUES(description);
|