更新
This commit is contained in:
@@ -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` <> '';
|
||||
Reference in New Issue
Block a user