原来 107 个后台接口配的是一套只能看的界面:风险中心 6 行代码全是只读, 动态和消息只能一条一条点,运营想发一句公告没有任何入口。 公告与通知:按全体、会员、城市、喂养者、有宠物的用户或指定名单发系统通知, 发之前能看到会发给多少人,可同时走离线推送。撤回只删还没读的那些——已经 读过的假装收回去只会让统计说谎。 资金总览:把"平台账上哪些钱不是自己的"单独摆出来(任务托管中 + 喂养者余额 + 申诉冻结),旁边才是收入、退款和待打款,最后是按产品和按日的收款。 退款统一到一个入口:会员、代喂、保证金都能分几次退到退完,每笔记一行; 退完最后一分钱才撤销买到的东西,半份会员仍然是会员。 风险中心能动手了:按等级和状态筛,行内直接封禁、冻结、加白(必须写理由)、 跳用户详情,事件可以标记跟进完成。 批量处置:动态、消息、举报支持勾选后批量下架/恢复/驳回,一次最多 100 条。 处罚仍然一条一条来——批量封禁是错封人最快的方式。 敏感词统一词库:消息、动态、送养共用一套,命中是拦截还是转人工由运营定; 转人工的命中会在风险中心留一条,管理端还能拿真实文案先试一遍。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
44 lines
2.2 KiB
SQL
44 lines
2.2 KiB
SQL
SET NAMES utf8mb4;
|
|
|
|
-- 公告与系统通知群发。发出去的每一条都记一行,因为"给谁发过什么"是事后
|
|
-- 唯一能对账的东西;撤回也只撤这一批里还没读的那些。
|
|
CREATE TABLE IF NOT EXISTS notification_broadcasts (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
title VARCHAR(100) NOT NULL,
|
|
content VARCHAR(1000) NOT NULL,
|
|
audience VARCHAR(20) NOT NULL COMMENT 'all/users/vip/city/sitters/owners',
|
|
audience_ref VARCHAR(500) NOT NULL DEFAULT '' COMMENT '城市编码或用户编号列表',
|
|
with_push TINYINT(1) NOT NULL DEFAULT 0,
|
|
recipient_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
push_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
status VARCHAR(20) NOT NULL DEFAULT 'SENT' COMMENT 'SENT/REVOKED',
|
|
revoked_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
created_by BIGINT UNSIGNED NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
revoked_at DATETIME(3) NULL,
|
|
PRIMARY KEY (id),
|
|
KEY idx_broadcast_created (created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- 订单退款流水。代喂那张 pet_feed_refunds 记的是任务口径,这张记的是订单
|
|
-- 口径:会员、保证金、代喂都在这里,一笔订单可以退很多次。
|
|
CREATE TABLE IF NOT EXISTS order_refunds (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
order_id BIGINT UNSIGNED NOT NULL,
|
|
refund_no VARCHAR(60) NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
amount_cent INT UNSIGNED NOT NULL,
|
|
channel VARCHAR(20) NOT NULL DEFAULT 'gateway' COMMENT 'gateway 原路退回 / offline 线下已退',
|
|
reason VARCHAR(500) NOT NULL DEFAULT '',
|
|
handled_by BIGINT UNSIGNED NULL,
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_order_refund_no (refund_no),
|
|
KEY idx_order_refunds_order (order_id, id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
INSERT INTO system_configs(config_key,config_value,value_type,description) VALUES
|
|
('notification.broadcast_max_recipients','20000','integer','单次公告的最大接收人数,超过要分批发'),
|
|
('notification.broadcast_push_enabled','true','boolean','公告是否允许同时走离线推送')
|
|
ON DUPLICATE KEY UPDATE description=VALUES(description);
|