-- 招聘考试聚合模块 · 独立数据库 recruitment 初始化 -- 该库与 service 主库隔离,通过 config 中 database.recruitment.link 指定。 -- 执行顺序:先建库(CREATE DATABASE 由部署脚本完成),再导入本文件。 CREATE TABLE IF NOT EXISTS `organization` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '主体名称', `type` TINYINT NOT NULL DEFAULT 6 COMMENT '1机关 2事业 3国企 4央企 5私企 6其他', `official_site` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '官网', `region` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '地区', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_org_name` (`name`(100)), KEY `idx_org_region` (`region`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布主体'; CREATE TABLE IF NOT EXISTS `crawl_source` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '数据源名称', `base_url` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '站点基础URL', `source_type` TINYINT NOT NULL DEFAULT 1 COMMENT '1静态 2SPA 3需登录 4附件型', `category` TINYINT NOT NULL DEFAULT 6 COMMENT '默认考试分类', `region` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '默认地区', `list_path` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '列表页路径/接口', `config` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '适配器扩展配置(JSON)', `enabled` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用 0否 1是', `cron_expr` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '调度表达式', `last_success_at` DATETIME NULL DEFAULT NULL COMMENT '最近成功抓取时间', `fail_count` INT NOT NULL DEFAULT 0 COMMENT '连续失败次数', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_src_enabled` (`enabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据源配置'; CREATE TABLE IF NOT EXISTS `recruitment_info` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `title` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '公告标题', `source_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '数据源ID', `org_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '发布主体ID', `org_name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '发布主体名称(冗余)', `category` TINYINT NOT NULL DEFAULT 6 COMMENT '1公务员 2事业单位 3国企 4央企 5私企 6其他', `region` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '地区', `publish_date` DATE NULL DEFAULT NULL COMMENT '发布日期', `deadline` DATE NULL DEFAULT NULL COMMENT '报名/截止日期', `exam_date` DATE NULL DEFAULT NULL COMMENT '笔试日期', `url` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '原文链接', `content` LONGTEXT COMMENT '正文/摘要', `attachments` VARCHAR(2000) NOT NULL DEFAULT '' COMMENT '附件链接与解析结果(JSON)', `status` TINYINT NOT NULL DEFAULT 0 COMMENT '0有效 1已更正 2已失效 3已删除', `fingerprint` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '去重指纹', `group_key` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '跨源同公告聚合键', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_fingerprint` (`fingerprint`), KEY `idx_url` (`url`(255)), KEY `idx_region_category` (`region`,`category`), KEY `idx_publish_date` (`publish_date`), KEY `idx_status` (`status`), KEY `idx_group_key` (`group_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='招聘考试公告主表'; CREATE TABLE IF NOT EXISTS `crawl_log` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `source_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '数据源ID', `run_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '运行时间', `fetched` INT NOT NULL DEFAULT 0 COMMENT '抓取条数', `new_count` INT NOT NULL DEFAULT 0 COMMENT '新增条数', `updated_count` INT NOT NULL DEFAULT 0 COMMENT '更新条数', `error` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '错误信息', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_log_source` (`source_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='抓取任务日志'; CREATE TABLE IF NOT EXISTS `push_subscription` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '订阅名称', `device_key` VARCHAR(200) NOT NULL DEFAULT '' COMMENT 'Bark 设备密钥', `regions` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '订阅地区(JSON数组)', `categories` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '订阅分类(JSON数组)', `only_new` TINYINT NOT NULL DEFAULT 1 COMMENT '仅推送新公告 0否 1是', `push_time` VARCHAR(10) NOT NULL DEFAULT '08:00' COMMENT '推送时间 HH:mm', `enabled` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用 0否 1是', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Bark 推送订阅'; CREATE TABLE IF NOT EXISTS `push_log` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `subscription_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '订阅ID', `push_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '推送时间', `title` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '推送标题', `body` TEXT COMMENT '推送内容', `result` TINYINT NOT NULL DEFAULT 0 COMMENT '1成功 0失败', `error` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '错误信息', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_push_sub` (`subscription_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推送记录';