-- 一诊 / 企业微信推广助手 -- 页面组件:first_visit/wecom_promotion/index -- 页面权限:firstvisit.wecomPromotion/overview START TRANSACTION; CREATE TABLE IF NOT EXISTS `zyt_qywx_promotion_provider_state` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `suite_id` varchar(128) NOT NULL DEFAULT '' COMMENT '第三方应用 SuiteID', `suite_ticket_cipher` text NOT NULL COMMENT '加密后的 suite_ticket', `ticket_received_at` int unsigned NOT NULL DEFAULT 0, `create_time` int unsigned NOT NULL DEFAULT 0, `update_time` int unsigned NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uk_suite_id` (`suite_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微推广服务商状态'; CREATE TABLE IF NOT EXISTS `zyt_qywx_promotion_account` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `corp_id` varchar(128) NOT NULL DEFAULT '' COMMENT '授权企业 CorpID(服务商体系)', `corp_name` varchar(160) NOT NULL DEFAULT '', `permanent_code_cipher` text NOT NULL COMMENT 'AES-GCM 加密永久授权码', `agent_id` varchar(64) NOT NULL DEFAULT '', `auth_info_json` mediumtext NULL, `auth_status` tinyint unsigned NOT NULL DEFAULT 1 COMMENT '0取消 1有效', `owner_admin_id` int unsigned NOT NULL DEFAULT 0, `dept_id` int unsigned NOT NULL DEFAULT 0, `authorized_at` int unsigned NOT NULL DEFAULT 0, `last_refresh_at` int unsigned NOT NULL DEFAULT 0, `create_time` int unsigned NOT NULL DEFAULT 0, `update_time` int unsigned NOT NULL DEFAULT 0, `delete_time` int unsigned NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_corp_id` (`corp_id`), KEY `idx_owner_status` (`owner_admin_id`,`auth_status`), KEY `idx_dept` (`dept_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微推广授权企业'; CREATE TABLE IF NOT EXISTS `zyt_qywx_promotion_pool` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `name` varchar(60) NOT NULL DEFAULT '', `public_key` char(32) NOT NULL COMMENT '公开 JS 分流键', `status` tinyint unsigned NOT NULL DEFAULT 1, `fallback_url` varchar(1000) NOT NULL DEFAULT '', `widget_config_json` text NULL COMMENT '公开浮窗配置 JSON v1', `click_count` bigint unsigned NOT NULL DEFAULT 0, `owner_admin_id` int unsigned NOT NULL DEFAULT 0, `dept_id` int unsigned NOT NULL DEFAULT 0, `create_time` int unsigned NOT NULL DEFAULT 0, `update_time` int unsigned NOT NULL DEFAULT 0, `delete_time` int unsigned NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_public_key` (`public_key`), KEY `idx_owner_status` (`owner_admin_id`,`status`), KEY `idx_dept` (`dept_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微推广分流方案'; CREATE TABLE IF NOT EXISTS `zyt_qywx_promotion_link` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `pool_id` int unsigned NOT NULL DEFAULT 0, `account_id` int unsigned NOT NULL DEFAULT 0, `name` varchar(80) NOT NULL DEFAULT '', `group_name` varchar(60) NOT NULL DEFAULT '默认分组', `wecom_url` varchar(1000) NOT NULL DEFAULT '', `remote_link_id` varchar(128) NULL DEFAULT NULL COMMENT '企业微信获客助手 link_id', `remote_status` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '0历史手工 1远端有效 2远端已删除 3远端不可见 4同步失败', `remote_create_time` int unsigned NOT NULL DEFAULT 0, `range_user_json` text NULL COMMENT '获客链接可用成员 userid JSON', `range_department_json` text NULL COMMENT '获客链接可用企微部门 ID JSON', `skip_verify` tinyint unsigned NOT NULL DEFAULT 0, `priority_option_json` text NULL, `remote_snapshot` mediumtext NULL, `last_sync_time` int unsigned NOT NULL DEFAULT 0, `sync_error` varchar(500) NOT NULL DEFAULT '', `weight` smallint unsigned NOT NULL DEFAULT 1, `status` tinyint unsigned NOT NULL DEFAULT 1, `daily_limit` int unsigned NOT NULL DEFAULT 0 COMMENT '0为不限', `today_count` int unsigned NOT NULL DEFAULT 0, `today_date` date NULL DEFAULT NULL, `active_start` int unsigned NOT NULL DEFAULT 0, `active_end` int unsigned NOT NULL DEFAULT 0, `click_count` bigint unsigned NOT NULL DEFAULT 0, `last_click_time` int unsigned NOT NULL DEFAULT 0, `owner_admin_id` int unsigned NOT NULL DEFAULT 0, `dept_id` int unsigned NOT NULL DEFAULT 0, `remark` varchar(255) NOT NULL DEFAULT '', `create_time` int unsigned NOT NULL DEFAULT 0, `update_time` int unsigned NOT NULL DEFAULT 0, `delete_time` int unsigned NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_remote_link_id` (`remote_link_id`), KEY `idx_pool_eligible` (`pool_id`,`status`,`active_start`,`active_end`), KEY `idx_account` (`account_id`), KEY `idx_owner` (`owner_admin_id`), KEY `idx_today` (`today_date`,`today_count`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微推广链接池'; CREATE TABLE IF NOT EXISTS `zyt_qywx_promotion_click_log` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `pool_id` int unsigned NOT NULL DEFAULT 0, `link_id` int unsigned NOT NULL DEFAULT 0, `source_url` varchar(500) NOT NULL DEFAULT '', `referer` varchar(500) NOT NULL DEFAULT '', `user_agent` varchar(500) NOT NULL DEFAULT '', `ip_hash` char(64) NOT NULL DEFAULT '', `click_date` date NOT NULL, `create_time` int unsigned NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `idx_pool_date` (`pool_id`,`click_date`), KEY `idx_link_date` (`link_id`,`click_date`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='企微推广点击日志'; SET @first_visit_menu_id = ( SELECT `id` FROM `zyt_system_menu` WHERE `pid` = 0 AND `type` = 'M' AND (TRIM(`name`) = '一诊' OR LOWER(TRIM(`paths`)) IN ('first_visit', 'firstvisit', 'first-visit')) ORDER BY CASE WHEN TRIM(`name`) = '一诊' AND TRIM(`paths`) = 'first_visit' THEN 0 ELSE 1 END, `id` LIMIT 1 ); INSERT INTO `zyt_system_menu` (`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_cache`, `is_show`, `is_disable`, `create_time`, `update_time`) SELECT @first_visit_menu_id, 'C', '企业微信获客助手', 'el-icon-Promotion', 60, 'firstvisit.wecomPromotion/overview', 'wecom_promotion', 'first_visit/wecom_promotion/index', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP() FROM DUAL WHERE @first_visit_menu_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `zyt_system_menu` WHERE `perms` = 'firstvisit.wecomPromotion/overview' OR (`pid` = @first_visit_menu_id AND ( TRIM(`name`) IN ('企业微信推广助手', '企业微信获客助手') OR TRIM(`paths`) = 'wecom_promotion' OR TRIM(`component`) = 'first_visit/wecom_promotion/index' )) ); SET @wecom_promotion_menu_id = ( SELECT `id` FROM `zyt_system_menu` WHERE `pid` = @first_visit_menu_id AND (`perms` = 'firstvisit.wecomPromotion/overview' OR TRIM(`name`) IN ('企业微信推广助手', '企业微信获客助手') OR TRIM(`component`) = 'first_visit/wecom_promotion/index') ORDER BY CASE WHEN `perms` = 'firstvisit.wecomPromotion/overview' THEN 0 ELSE 1 END, `id` LIMIT 1 ); UPDATE `zyt_system_menu` SET `name` = '企业微信获客助手', `icon` = 'el-icon-Promotion', `sort` = 60, `perms` = 'firstvisit.wecomPromotion/overview', `paths` = 'wecom_promotion', `component` = 'first_visit/wecom_promotion/index', `is_cache` = 0, `is_show` = 1, `is_disable` = 0, `update_time` = UNIX_TIMESTAMP() WHERE `id` = @wecom_promotion_menu_id; -- 医助维护本人获客助手链接;组长/经理按部门范围管理;管理员全量管理。 INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`) SELECT `id`, @first_visit_menu_id FROM `zyt_system_role` WHERE @first_visit_menu_id IS NOT NULL AND `delete_time` IS NULL AND `name` IN ('医助', '经理', '诊室组长', '管理员'); INSERT IGNORE INTO `zyt_system_role_menu` (`role_id`, `menu_id`) SELECT `id`, @wecom_promotion_menu_id FROM `zyt_system_role` WHERE @wecom_promotion_menu_id IS NOT NULL AND `delete_time` IS NULL AND `name` IN ('医助', '经理', '诊室组长', '管理员'); COMMIT;