This commit is contained in:
Your Name
2026-09-07 12:30:42 +08:00
parent d5164b7369
commit 9ef6eb8d67
369 changed files with 11733 additions and 0 deletions
@@ -0,0 +1,93 @@
-- 企业微信新增事件标签快照:历史渠道归属只追加,不随当前标签的修改/删除而回落。
-- 上线顺序:先执行本迁移,再发布读取 qywx_external_contact_event_tag 的代码。
CREATE TABLE IF NOT EXISTS `zyt_qywx_external_contact_event_tag` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`event_id` bigint unsigned NOT NULL COMMENT 'qywx_external_contact_event.id',
`follow_user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '产生新增事件的企微员工userid',
`tag_id` varchar(64) NOT NULL DEFAULT '' COMMENT '事件发生时标签ID;空串为快照完成标记',
`tag_name` varchar(128) NOT NULL DEFAULT '' COMMENT '事件发生时标签名',
`group_name` varchar(128) NOT NULL DEFAULT '' COMMENT '事件发生时标签组名',
`snapshot_source` tinyint unsigned NOT NULL DEFAULT 1 COMMENT '1客户详情 2推广任务 3上线时当前关系回填',
`create_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_event_user_tag` (`event_id`, `follow_user_id`, `tag_id`),
KEY `idx_tag_event_user` (`tag_id`, `event_id`, `follow_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微新增事件标签快照(append-only';
-- 优先追加推广自动化任务中已确认成功的标签证据;这里不写完成标记,
-- 因为任务配置不能证明客户当时没有其他企微标签。
INSERT IGNORE INTO `zyt_qywx_external_contact_event_tag`
(`event_id`, `follow_user_id`, `tag_id`, `tag_name`, `group_name`, `snapshot_source`, `create_time`)
SELECT
e.`id`,
e.`user_id`,
LEFT(
COALESCE(
JSON_UNQUOTE(JSON_EXTRACT(IF(JSON_VALID(t.`config_json`), t.`config_json`, '{}'), '$.tag_ids[0]')),
''
),
64
),
'',
'',
2,
UNIX_TIMESTAMP()
FROM `zyt_qywx_promotion_automation_task` t
INNER JOIN `zyt_qywx_external_contact_event` e
ON e.`change_type` = t.`change_type`
AND e.`user_id` = t.`userid`
AND e.`external_userid` = t.`external_userid`
AND e.`event_time` = t.`event_time`
WHERE t.`change_type` = 'add_external_contact'
AND JSON_UNQUOTE(
JSON_EXTRACT(IF(JSON_VALID(t.`actions_json`), t.`actions_json`, '{}'), '$.tags.status')
) = 'success'
AND COALESCE(
JSON_UNQUOTE(JSON_EXTRACT(IF(JSON_VALID(t.`config_json`), t.`config_json`, '{}'), '$.tag_ids[0]')),
''
) <> '';
-- 尚未完成快照的老事件,仅按同一员工的当前标签尽力冻结;不做跨员工补偿。
INSERT IGNORE INTO `zyt_qywx_external_contact_event_tag`
(`event_id`, `follow_user_id`, `tag_id`, `tag_name`, `group_name`, `snapshot_source`, `create_time`)
SELECT
e.`id`,
e.`user_id`,
current_tag.`tag_id`,
current_tag.`tag_name`,
current_tag.`group_name`,
3,
UNIX_TIMESTAMP()
FROM `zyt_qywx_external_contact_event` e
INNER JOIN `zyt_qywx_external_contact_tag` current_tag
ON current_tag.`external_userid` = e.`external_userid`
AND current_tag.`follow_user_id` = e.`user_id`
WHERE e.`change_type` = 'add_external_contact'
AND EXISTS (
SELECT 1
FROM `zyt_qywx_external_contact` active_contact
WHERE active_contact.`external_userid` = e.`external_userid`
AND active_contact.`delete_time` IS NULL
)
AND NOT EXISTS (
SELECT 1
FROM `zyt_qywx_external_contact_event_tag` existing_snapshot
WHERE existing_snapshot.`event_id` = e.`id`
AND existing_snapshot.`follow_user_id` = e.`user_id`
AND existing_snapshot.`tag_id` = ''
);
-- 给“当前关系回填”补完成标记,确保后续改标签不会再追加到同一历史事件。
INSERT IGNORE INTO `zyt_qywx_external_contact_event_tag`
(`event_id`, `follow_user_id`, `tag_id`, `tag_name`, `group_name`, `snapshot_source`, `create_time`)
SELECT DISTINCT
snapshot_row.`event_id`,
snapshot_row.`follow_user_id`,
'',
'',
'',
3,
UNIX_TIMESTAMP()
FROM `zyt_qywx_external_contact_event_tag` snapshot_row
WHERE snapshot_row.`snapshot_source` = 3
AND snapshot_row.`tag_id` <> '';