-- ============================================================================
-- 定时任务管理功能 SQL 脚本
-- 作者: Leocoder
-- 创建时间: 2025-09-27
-- 描述: 支持动态配置和管理的定时任务系统表结构
-- ============================================================================

-- ----------------------------
-- Table structure for sys_job
-- ----------------------------
DROP TABLE IF EXISTS `sys_job`;
CREATE TABLE `sys_job` (
  `job_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID',
  `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称',
  `job_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务类型[1-管理平台 2-小程序 3-App]',
  `class_path` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '类路径',
  `method_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '方法名称',
  `cron_expression` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'cron表达式',
  `policy_status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '1' COMMENT 'cron计划策略[1-立即执行 2-执行一次 3-放弃执行]',
  `job_status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '任务状态[0-正常 1-暂停]',
  `job_params` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '任务参数',
  `remark` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '修改人',
  PRIMARY KEY (`job_id`) USING BTREE,
  KEY `idx_job_status` (`job_status`),
  KEY `idx_job_type` (`job_type`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='定时任务管理表';

-- ----------------------------
-- Records of sys_job - 初始化示例数据
-- ----------------------------
BEGIN;
INSERT INTO `sys_job` (`job_id`, `job_name`, `job_type`, `class_path`, `method_name`, `cron_expression`, `policy_status`, `job_status`, `job_params`, `remark`, `create_by`) VALUES 
(1, '测试任务-单参数', '1', 'org.leocoder.thin.job.task.CoderJobTimerTaskRunner', 'paramAction', '0 0/5 * * * ?', '1', '1', 'CODER-THIN-TEST', '每5分钟执行一次的测试任务', 'Leocoder'),
(2, '测试任务-无参数', '1', 'org.leocoder.thin.job.task.CoderJobTimerTaskRunner', 'noParamAction', '0 0/10 * * * ?', '3', '1', '', '每10分钟执行一次的无参数测试任务', 'Leocoder'),
(3, '测试任务-多参数', '1', 'org.leocoder.thin.job.task.CoderJobTimerTaskRunner', 'manyParamsAction', '0 0 2 * * ?', '1', '1', 'CODER-THIN,999', '每天凌晨2点执行的多参数测试任务', 'Leocoder');
COMMIT;

-- ----------------------------
-- Table structure for sys_job_log (可选，用于任务执行日志记录)
-- ----------------------------
DROP TABLE IF EXISTS `sys_job_log`;
CREATE TABLE `sys_job_log` (
  `job_log_id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务日志ID',
  `job_id` bigint NOT NULL COMMENT '任务ID',
  `job_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务名称',
  `job_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'DEFAULT' COMMENT '任务组名',
  `invoke_target` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '调用目标字符串',
  `job_message` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '日志信息',
  `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '执行状态[0-正常 1-失败]',
  `exception_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '异常信息',
  `start_time` datetime DEFAULT NULL COMMENT '开始时间',
  `stop_time` datetime DEFAULT NULL COMMENT '结束时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`job_log_id`) USING BTREE,
  KEY `idx_job_id` (`job_id`),
  KEY `idx_status` (`status`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='定时任务执行日志表';

-- ----------------------------
-- 添加菜单权限数据 (可选，用于前端菜单展示)
-- ----------------------------
-- 注意：以下SQL需要根据实际的菜单权限表结构进行调整

-- 定时任务管理菜单
-- INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `icon`, `create_by`, `remark`) VALUES
-- ('定时任务', 2, 6, '/monitor/job', 'C', '0', 'monitor:job:view', 'job', 'Leocoder', '定时任务菜单');

-- 定时任务按钮权限
-- INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `menu_type`, `visible`, `perms`, `create_by`, `remark`) VALUES
-- ('任务查询', 最新菜单ID, 1, '#', 'F', '0', 'monitor:job:list', 'Leocoder', ''),
-- ('任务新增', 最新菜单ID, 2, '#', 'F', '0', 'monitor:job:add', 'Leocoder', ''),
-- ('任务修改', 最新菜单ID, 3, '#', 'F', '0', 'monitor:job:edit', 'Leocoder', ''),
-- ('任务删除', 最新菜单ID, 4, '#', 'F', '0', 'monitor:job:delete', 'Leocoder', ''),
-- ('任务执行', 最新菜单ID, 5, '#', 'F', '0', 'monitor:job:run', 'Leocoder', ''),
-- ('状态修改', 最新菜单ID, 6, '#', 'F', '0', 'monitor:job:update', 'Leocoder', '');

-- ============================================================================
-- 说明文档
-- ============================================================================
/*
1. 表结构说明：
   - sys_job: 定时任务配置表，存储任务的基本信息和调度配置
   - sys_job_log: 任务执行日志表，记录每次任务的执行情况（可选）

2. 字段说明：
   - job_id: 任务唯一标识，雪花算法生成
   - class_path: 任务执行类的完整路径
   - method_name: 要执行的方法名
   - cron_expression: 标准cron表达式
   - policy_status: 执行策略（1立即执行/2执行一次/3放弃执行）
   - job_status: 任务状态（0正常/1暂停）
   - job_params: 任务参数，多个参数用逗号分隔
   - is_delete: 逻辑删除标识

3. 使用说明：
   - 支持多种参数类型：String, Integer, Boolean
   - 支持动态启停任务
   - 支持任务执行日志记录
   - 集成权限控制机制

4. 注意事项：
   - 执行类必须实现 CommonTimerTaskRunner 接口
   - cron表达式支持秒级精度（6位）
   - 建议生产环境定期清理执行日志
*/