-- ====================================================
-- 定时任务表
-- ====================================================
CREATE SCHEMA IF NOT EXISTS crontab;
DROP TABLE IF EXISTS crontab.tb_crontab_task CASCADE;
CREATE TABLE crontab.tb_crontab_task (
    id VARCHAR(64) NOT NULL,
    task_id VARCHAR(64) NOT NULL,
    task_name VARCHAR(100) NOT NULL,
    task_group VARCHAR(50) NOT NULL DEFAULT 'DEFAULT',
    meta_id VARCHAR(64) NOT NULL,
    default_recipient SMALLINT NOT NULL DEFAULT 0,  -- 是否使用默认接收人（0:否 1:是）
    bean_name VARCHAR(100) NOT NULL,
    method_name VARCHAR(100) NOT NULL,
    method_params VARCHAR(500) DEFAULT NULL,
    cron_expression VARCHAR(100) NOT NULL,
    status SMALLINT NOT NULL DEFAULT 0,  -- 任务状态（0:暂停 1:运行中）
    description VARCHAR(500) DEFAULT NULL,
    concurrent SMALLINT NOT NULL DEFAULT 0,  -- 是否允许并发执行（0:否 1:是）
    misfire_policy SMALLINT NOT NULL DEFAULT 1,  -- 错过执行策略（1:立即执行 2:执行一次 3:放弃执行）
    creator VARCHAR(64) DEFAULT NULL,
    updater VARCHAR(64) DEFAULT NULL,
    create_time TIMESTAMPTZ NOT NULL DEFAULT now(),
    update_time TIMESTAMPTZ DEFAULT NULL,
    delete_time TIMESTAMPTZ DEFAULT NULL,
    deleted SMALLINT NOT NULL DEFAULT 0,  -- 是否删除（0:否 1:是）
    PRIMARY KEY (id)
);

CREATE INDEX IF NOT EXISTS idx_task_name ON crontab.tb_crontab_task(task_name);
CREATE INDEX IF NOT EXISTS idx_bean_name ON crontab.tb_crontab_task(bean_name);
CREATE INDEX IF NOT EXISTS idx_status ON crontab.tb_crontab_task(status);
CREATE INDEX IF NOT EXISTS idx_deleted ON crontab.tb_crontab_task(deleted);

COMMENT ON TABLE crontab.tb_crontab_task IS '定时任务配置表';
COMMENT ON COLUMN crontab.tb_crontab_task.id IS '主键ID';
COMMENT ON COLUMN crontab.tb_crontab_task.task_id IS '任务ID';
COMMENT ON COLUMN crontab.tb_crontab_task.task_name IS '任务名称';
COMMENT ON COLUMN crontab.tb_crontab_task.task_group IS '任务分组';
COMMENT ON COLUMN crontab.tb_crontab_task.meta_id IS '任务元数据ID';
COMMENT ON COLUMN crontab.tb_crontab_task.default_recipient IS '是否使用默认接收人（0:否 1:是）';
COMMENT ON COLUMN crontab.tb_crontab_task.bean_name IS 'Bean名称';
COMMENT ON COLUMN crontab.tb_crontab_task.method_name IS '方法名称';
COMMENT ON COLUMN crontab.tb_crontab_task.method_params IS '方法参数';
COMMENT ON COLUMN crontab.tb_crontab_task.cron_expression IS 'Cron表达式';
COMMENT ON COLUMN crontab.tb_crontab_task.status IS '任务状态（0:暂停 1:运行中）';
COMMENT ON COLUMN crontab.tb_crontab_task.description IS '任务描述';
COMMENT ON COLUMN crontab.tb_crontab_task.concurrent IS '是否允许并发执行（0:否 1:是）';
COMMENT ON COLUMN crontab.tb_crontab_task.misfire_policy IS '错过执行策略（1:立即执行 2:执行一次 3:放弃执行）';
COMMENT ON COLUMN crontab.tb_crontab_task.creator IS '创建者';
COMMENT ON COLUMN crontab.tb_crontab_task.updater IS '更新者';
COMMENT ON COLUMN crontab.tb_crontab_task.create_time IS '创建时间';
COMMENT ON COLUMN crontab.tb_crontab_task.update_time IS '更新时间';
COMMENT ON COLUMN crontab.tb_crontab_task.delete_time IS '删除时间';
COMMENT ON COLUMN crontab.tb_crontab_task.deleted IS '是否删除（0:否 1:是）';

-- ====================================================
-- 定时任务执行日志表
-- ====================================================
DROP TABLE IF EXISTS crontab.tb_crontab_log CASCADE;
CREATE TABLE crontab.tb_crontab_log (
    id VARCHAR(64) NOT NULL,
    task_id VARCHAR(64) NOT NULL,
    task_name VARCHAR(100) NOT NULL,
    task_group VARCHAR(50) NOT NULL DEFAULT 'DEFAULT',
    bean_name VARCHAR(100) NOT NULL,
    method_name VARCHAR(100) NOT NULL,
    method_params VARCHAR(500) DEFAULT NULL,
    execute_status SMALLINT NOT NULL,  -- 执行状态（0:失败 1:成功）
    execute_message TEXT DEFAULT NULL,
    exception_info TEXT DEFAULT NULL,
    start_time TIMESTAMPTZ NOT NULL,
    end_time TIMESTAMPTZ DEFAULT NULL,
    execute_duration INT DEFAULT NULL,
    create_time TIMESTAMPTZ NOT NULL DEFAULT now(),
    update_time TIMESTAMPTZ DEFAULT NULL,
    delete_time TIMESTAMPTZ DEFAULT NULL,
    deleted SMALLINT NOT NULL DEFAULT 0,  -- 是否删除（0:否 1:是）
    PRIMARY KEY (id)
);

CREATE INDEX IF NOT EXISTS idx_task_id ON crontab.tb_crontab_log(task_id);
CREATE INDEX IF NOT EXISTS idx_log_task_name ON crontab.tb_crontab_log(task_name);
CREATE INDEX IF NOT EXISTS idx_execute_status ON crontab.tb_crontab_log(execute_status);
CREATE INDEX IF NOT EXISTS idx_start_time ON crontab.tb_crontab_log(start_time);
CREATE INDEX IF NOT EXISTS idx_log_deleted ON crontab.tb_crontab_log(deleted);

COMMENT ON TABLE crontab.tb_crontab_log IS '定时任务执行日志表';
COMMENT ON COLUMN crontab.tb_crontab_log.id IS '主键ID';
COMMENT ON COLUMN crontab.tb_crontab_log.task_id IS '任务ID';
COMMENT ON COLUMN crontab.tb_crontab_log.task_name IS '任务名称';
COMMENT ON COLUMN crontab.tb_crontab_log.task_group IS '任务分组';
COMMENT ON COLUMN crontab.tb_crontab_log.bean_name IS 'Bean名称';
COMMENT ON COLUMN crontab.tb_crontab_log.method_name IS '方法名称';
COMMENT ON COLUMN crontab.tb_crontab_log.method_params IS '方法参数';
COMMENT ON COLUMN crontab.tb_crontab_log.execute_status IS '执行状态（0:失败 1:成功）';
COMMENT ON COLUMN crontab.tb_crontab_log.execute_message IS '执行结果信息';
COMMENT ON COLUMN crontab.tb_crontab_log.exception_info IS '异常信息';
COMMENT ON COLUMN crontab.tb_crontab_log.start_time IS '开始时间';
COMMENT ON COLUMN crontab.tb_crontab_log.end_time IS '结束时间';
COMMENT ON COLUMN crontab.tb_crontab_log.execute_duration IS '执行时长（毫秒）';
COMMENT ON COLUMN crontab.tb_crontab_log.create_time IS '创建时间';
COMMENT ON COLUMN crontab.tb_crontab_log.update_time IS '更新时间';
COMMENT ON COLUMN crontab.tb_crontab_log.delete_time IS '删除时间';
COMMENT ON COLUMN crontab.tb_crontab_log.deleted IS '是否删除（0:否 1:是）';

-- ====================================================
-- 定时任务元数据表（存储爬虫任务的元数据配置）
-- ====================================================
DROP TABLE IF EXISTS crontab.tb_crontab_task_meta CASCADE;
CREATE TABLE crontab.tb_crontab_task_meta (
    id VARCHAR(64) NOT NULL,
    meta_id VARCHAR(64) NOT NULL,
    name VARCHAR(100) NOT NULL,
    description VARCHAR(500) DEFAULT NULL,
    category VARCHAR(50) NOT NULL,
    bean_name VARCHAR(100) NOT NULL,
    method_name VARCHAR(100) NOT NULL,
    script_path VARCHAR(255) DEFAULT NULL,
    param_schema TEXT DEFAULT NULL,
    auto_publish SMALLINT NOT NULL DEFAULT 0,  -- 是否自动发布
    sort_order INT DEFAULT 0,
    creator VARCHAR(64) DEFAULT NULL,
    updater VARCHAR(64) DEFAULT NULL,
    create_time TIMESTAMPTZ NOT NULL DEFAULT now(),
    update_time TIMESTAMPTZ DEFAULT NULL,
    delete_time TIMESTAMPTZ DEFAULT NULL,
    deleted SMALLINT NOT NULL DEFAULT 0,  -- 是否删除（0:否 1:是）
    PRIMARY KEY (id),
    UNIQUE (meta_id)
);

CREATE INDEX IF NOT EXISTS idx_category ON crontab.tb_crontab_task_meta(category);
CREATE INDEX IF NOT EXISTS idx_meta_deleted ON crontab.tb_crontab_task_meta(deleted);

COMMENT ON TABLE crontab.tb_crontab_task_meta IS '定时任务元数据表';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.id IS '主键ID';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.meta_id IS '元数据ID';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.name IS '任务名称';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.description IS '任务描述';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.category IS '任务分类（如：人民日报新闻爬取）';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.bean_name IS 'Bean名称（执行器类名）';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.method_name IS '执行方法名';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.script_path IS 'Python脚本路径（相对于basePath）';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.param_schema IS '参数模板（JSON格式，定义参数名、类型、描述、默认值等）';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.auto_publish IS '是否自动发布';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.sort_order IS '排序号';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.creator IS '创建者';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.updater IS '更新者';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.create_time IS '创建时间';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.update_time IS '更新时间';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.delete_time IS '删除时间';
COMMENT ON COLUMN crontab.tb_crontab_task_meta.deleted IS '是否删除（0:否 1:是）';