Files
zyt/server/sql/1.9.20260805/add_first_visit_wecom_promotion.sql
T
2026-08-05 11:08:02 +08:00

167 lines
7.1 KiB
SQL

-- 一诊 / 企业微信推广助手
-- 页面组件: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 '',
`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 '',
`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`),
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`) = '企业微信推广助手'
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`) = '企业微信推广助手'
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;