feat(order): 派单实时通知 + 订单站内聊天

- 新派单(余额支付立即入池 / 微信支付确认后入池)向在线认证大神推送 ORDER_POOL 站内通知;雷达 20s、接单大厅 30s 自动轮询

- 新增 order_messages 表与订单会话接口:仅买家与已认领大神可访问,服务端拦截手机号与违规内容,消息落库并推送 CHAT 通知

- 新增 pages/order/chat 聊天页(3s 轮询、已读、发送),买家订单「联系大神」与大神工作台「联系老板」接入

- 114 套件/744 用例全绿;线上实测聊天/越权/手机号拦截/新单通知均通过,测试数据已清理
这个提交包含在:
xcbyy
2026-10-22 08:52:12 +08:00
父节点 33b6a3ea7d
当前提交 aca35db200
共有 13 个文件被更改,包括 698 次插入 和 9 次删除

查看文件

@@ -159,7 +159,21 @@ export async function initDatabase(): Promise<void> {
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
`);
// 动态增加移动端所需的扩展字段 (若历史表已存在则执行防断裂补丁)
// 订单维度站内聊天消息(仅交易双方可见,敏感词/联系方式在服务端拦截)
await conn.query(`
CREATE TABLE IF NOT EXISTS order_messages (
id VARCHAR(64) PRIMARY KEY,
order_id VARCHAR(64) NOT NULL,
sender_id INT NOT NULL,
receiver_id INT NOT NULL,
content TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
read_at DATETIME NULL,
INDEX idx_order_created (order_id, created_at),
INDEX idx_receiver_read (receiver_id, read_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
`);
const extraOrderCols = [
"ALTER TABLE orders ADD COLUMN buyer_id INT DEFAULT 1001 AFTER id",
"ALTER TABLE orders ADD COLUMN expert_id INT DEFAULT 101 AFTER buyer_id",