-- 企业微信「客户联系」事件流水表
-- 用途：
--   1) 记录每一次 change_external_contact 推送，用于"今天进来多少人(=add_external_contact 次数)"等精确统计；
--   2) 独立于 zyt_qywx_external_contact（会被软删/UPSERT 覆盖），保证统计零误差；
--   3) 企微对非 2xx 响应最多重试 3 次，(change_type, user_id, external_userid, event_time) 唯一键保证幂等。
CREATE TABLE IF NOT EXISTS `zyt_qywx_external_contact_event` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `change_type` varchar(32) NOT NULL DEFAULT '' COMMENT 'change_external_contact 下的子类型，如 add_external_contact/del_external_contact/del_follow_user/transfer_fail 等',
  `user_id` varchar(64) NOT NULL DEFAULT '' COMMENT '企业员工 userid（可能为空）',
  `external_userid` varchar(64) NOT NULL DEFAULT '' COMMENT '外部联系人 external_userid（可能为空，如渠道活码尚未产生客户）',
  `state` varchar(128) NOT NULL DEFAULT '' COMMENT '企微 State（推广渠道自定义参数），用于分渠道统计',
  `fail_reason` varchar(64) NOT NULL DEFAULT '' COMMENT 'transfer_fail 等事件的失败原因',
  `welcome_code` tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '是否带欢迎码（1=带；不落 code 原文以免泄漏）',
  `event_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '企微 CreateTime（事件发生时间戳，秒）',
  `create_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '本地入库时间（秒）',
  `raw` text DEFAULT NULL COMMENT '事件原文 JSON（调试用，可定期清理）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_change_user_ext_time` (`change_type`, `user_id`, `external_userid`, `event_time`),
  KEY `idx_change_time` (`change_type`, `event_time`),
  KEY `idx_event_time` (`event_time`),
  KEY `idx_state` (`state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企业微信外部联系人事件流水（用于进入计数）';
