-- ===================================================================== -- 数据库收录模块增强 - 迁移脚本 -- 用途:新增 “推送日志表” 与 “推送渠道配置表” -- 表前缀:j_ (与 application/database.php 的 prefix 一致) -- 执行方式:在 phpMyAdmin / Navicat 选中 journal 库后直接执行本文件 -- 可重复执行(IF NOT EXISTS),不会影响已有数据 -- ===================================================================== SET NAMES utf8; -- --------------------------------------------------------------------- -- 推送日志表:记录每一期 / 每一篇文章推送到各数据库的结果,支持重推 -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `j_db_push_log` ( `log_id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', `journal_id` INT NOT NULL DEFAULT 0 COMMENT '期刊id', `journal_stage_id` INT NOT NULL DEFAULT 0 COMMENT '分期id', `article_id` INT NOT NULL DEFAULT 0 COMMENT '文章id,0表示整期推送', `channel` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '渠道标识 portico/scopus/ebsco/cnki/email_data...', `channel_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '渠道中文/展示名', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '0待推送/排队中 1成功 2失败', `attempt` INT NOT NULL DEFAULT 0 COMMENT '已尝试次数', `message` TEXT NULL COMMENT '返回信息 / 失败原因', `operator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '触发人', `ctime` INT NOT NULL DEFAULT 0 COMMENT '创建时间戳', `utime` INT NOT NULL DEFAULT 0 COMMENT '更新时间戳', PRIMARY KEY (`log_id`), KEY `idx_stage_channel` (`journal_stage_id`, `channel`), KEY `idx_journal` (`journal_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据库收录推送日志'; -- --------------------------------------------------------------------- -- 推送渠道配置表:把 “哪些期刊推给哪些数据库” 从代码硬编码改为可配置 -- 若该表为空,程序会回退到 application/extra/dbpush.php 里的默认配置, -- 因此本表可以逐步维护、不影响现有行为。 -- --------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `j_db_channel` ( `channel_id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', `channel_key` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '渠道唯一标识(与推送器对应)', `name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '展示名', `transport` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '传输方式 sftp/ftp/email', `pusher` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '推送器标识,留空则同 channel_key', `journal_ids` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '适用期刊id,逗号分隔;留空=全部期刊', `config` TEXT NULL COMMENT 'JSON 额外配置(如邮件收件人)', `is_enable` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用 1是0否', `sort` INT NOT NULL DEFAULT 0 COMMENT '排序(大在前)', `ctime` INT NOT NULL DEFAULT 0 COMMENT '创建时间戳', `utime` INT NOT NULL DEFAULT 0 COMMENT '更新时间戳', `state` TINYINT NOT NULL DEFAULT 0 COMMENT '0正常 1删除', PRIMARY KEY (`channel_id`), KEY `idx_key` (`channel_key`), KEY `idx_state` (`state`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据库收录推送渠道配置'; -- --------------------------------------------------------------------- -- 初始化渠道配置:与当前代码写死的行为保持一致,方便直接切换到配置驱动 -- journal_ids 为空表示全部期刊 -- --------------------------------------------------------------------- INSERT INTO `j_db_channel` (`channel_key`, `name`, `transport`, `pusher`, `journal_ids`, `config`, `is_enable`, `sort`, `ctime`) SELECT * FROM ( SELECT 'portico' AS channel_key, 'Portico' AS name, 'sftp' AS transport, 'portico' AS pusher, '' AS journal_ids, NULL AS config, 1 AS is_enable, 90 AS sort, UNIX_TIMESTAMP() AS ctime UNION ALL SELECT 'scopus', 'Scopus (Elsevier)', 'sftp', 'scopus', '1,11', NULL, 1, 80, UNIX_TIMESTAMP() UNION ALL SELECT 'ebsco', 'EBSCO', 'ftp', 'ebsco', '2,8,20,15,9,10,3,1,14,11,4,18', NULL, 1, 70, UNIX_TIMESTAMP() UNION ALL SELECT 'cnki', 'CNKI 中国知网', 'ftp', 'cnki', '', NULL, 0, 60, UNIX_TIMESTAMP() UNION ALL SELECT 'email_data', '通用数据库邮件送交', 'email', 'email_data', '', NULL, 1, 50, UNIX_TIMESTAMP() UNION ALL SELECT 'email_wanfang','万方数据库', 'email', 'email_data', '1', '{"recipients":["958518573@qq.com","swyy2@wanfangdata.com.cn"]}', 1, 40, UNIX_TIMESTAMP() ) AS seed WHERE NOT EXISTS (SELECT 1 FROM `j_db_channel` LIMIT 1);