-- =====================================================================
-- 数据库收录模块增强 - 迁移脚本
-- 用途：新增 “推送日志表” 与 “推送渠道配置表”
-- 表前缀：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);
