Files
xuetang/server/sql/1.9.20260805/upgrade_qywx_customer_acquisition_customers.sql
T
2026-09-08 11:40:15 +08:00

67 lines
3.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 企业微信获客助手:客户归因、累计收消息数与回调重试审计
CREATE TABLE IF NOT EXISTS `zyt_qywx_customer_acquisition_customer` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`promotion_link_id` int unsigned NOT NULL DEFAULT 0 COMMENT '本地 qywx_promotion_link.id',
`link_id` varchar(128) NOT NULL DEFAULT '' COMMENT '企业微信获客链接 ID',
`external_userid` varchar(128) NOT NULL DEFAULT '',
`userid` varchar(128) NOT NULL DEFAULT '' COMMENT '接待成员企业微信 userid',
`owner_admin_id` int unsigned NOT NULL DEFAULT 0 COMMENT 'userid 对应后台管理员 ID0 为未映射',
`dept_id` int unsigned NOT NULL DEFAULT 0,
`state` varchar(255) NOT NULL DEFAULT '',
`chat_status` tinyint unsigned NOT NULL DEFAULT 0,
`recv_msg_cnt` int unsigned NOT NULL DEFAULT 0 COMMENT 'get_chat_info 返回的累计值,只覆盖/max,不累加',
`message_count_known` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '1已在 ChatKey 有效期内取得精确累计数,0仅有聊天状态',
`first_acquired_time` int unsigned NOT NULL DEFAULT 0,
`last_chat_time` int unsigned NOT NULL DEFAULT 0,
`last_sync_time` int unsigned NOT NULL DEFAULT 0,
`raw_snapshot` mediumtext NULL,
`create_time` int unsigned NOT NULL DEFAULT 0,
`update_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_link_external_user` (`link_id`,`external_userid`,`userid`),
KEY `idx_owner_chat` (`owner_admin_id`,`chat_status`),
KEY `idx_dept` (`dept_id`),
KEY `idx_local_link` (`promotion_link_id`),
KEY `idx_last_chat` (`last_chat_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微获客客户归因与消息统计';
CREATE TABLE IF NOT EXISTS `zyt_qywx_customer_acquisition_event` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`event_key` char(64) NOT NULL COMMENT '回调稳定字段 SHA-256 幂等键',
`change_type` varchar(64) NOT NULL DEFAULT '',
`chat_key` varchar(512) NOT NULL DEFAULT '',
`link_id` varchar(128) NOT NULL DEFAULT '',
`external_userid` varchar(128) NOT NULL DEFAULT '',
`userid` varchar(128) NOT NULL DEFAULT '',
`status` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '0处理中 1成功 2待重试 3终态失败(过期或无效)',
`attempts` smallint unsigned NOT NULL DEFAULT 0,
`event_time` int unsigned NOT NULL DEFAULT 0,
`expire_time` int unsigned NOT NULL DEFAULT 0 COMMENT 'ChatKey 硬截止时间',
`next_retry` int unsigned NOT NULL DEFAULT 0,
`error_message` varchar(1000) NOT NULL DEFAULT '',
`raw_json` mediumtext NULL,
`create_time` int unsigned NOT NULL DEFAULT 0,
`update_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_event_key` (`event_key`),
KEY `idx_retry` (`status`,`next_retry`,`expire_time`),
KEY `idx_chat_key` (`chat_key`(191)),
KEY `idx_event_time` (`event_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微获客回调幂等与失败重试审计';
-- 依赖系统层每分钟执行 php think crontab;本任务自身也按每分钟调度,确保不浪费 ChatKey 30 分钟窗口。
INSERT INTO `zyt_dev_crontab` (
`name`, `type`, `system`, `remark`, `command`, `params`,
`status`, `expression`, `create_time`, `update_time`
)
SELECT
'重试企微获客会话回调', 1, 0,
'重试 customer_start_chat/message_from_customer 的 get_chat_info30 分钟后明确 failed_expired',
'qywx:retry-customer-acquisition-events', '', 1, '* * * * *', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM `zyt_dev_crontab`
WHERE `command` = 'qywx:retry-customer-acquisition-events' AND `delete_time` IS NULL
);