SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for app_info
-- ----------------------------
DROP TABLE IF EXISTS `app_info`;
CREATE TABLE `app_info`
(
    `id`             bigint       NOT NULL AUTO_INCREMENT COMMENT '应用ID',
    `app_name`       varchar(128) not NULL COMMENT '应用名称',
    `current_server` varchar(255) default null COMMENT 'Server地址,用于负责调度应用的ActorSystem地址',
    `gmt_create`     datetime     not null COMMENT '创建时间',
    `gmt_modified`   datetime     not null COMMENT '更新时间',
    `password`       varchar(255) not null COMMENT '应用密码',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uidx01_app_info` (`app_name`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='应用表';

-- ----------------------------
-- Table structure for container_info
-- ----------------------------

DROP TABLE IF EXISTS `container_info`;
CREATE TABLE `container_info`
(
    `id`               bigint       NOT NULL AUTO_INCREMENT COMMENT '容器ID',
    `app_id`           bigint       not null COMMENT '应用ID',
    `container_name`   varchar(128) not null COMMENT '容器名称',
    `gmt_create`       datetime     not null COMMENT '创建时间',
    `gmt_modified`     datetime     not null COMMENT '更新时间',
    `last_deploy_time` datetime     DEFAULT NULL COMMENT '上次部署时间',
    `source_info`      varchar(255) DEFAULT NULL COMMENT '资源信息,内容取决于source_type\n1、FatJar -> String\n2、Git -> JSON，{"repo”:””仓库,”branch”:”分支”,”username”:”账号,”password”:”密码”}',
    `source_type`      int          not null COMMENT '资源类型,1:FatJar/2:Git',
    `status`           int          not null COMMENT '状态,1:正常ENABLE/2:已禁用DISABLE/99:已删除DELETED',
    `version`          varchar(255) default null COMMENT '版本',
    PRIMARY KEY (`id`),
    KEY `idx01_container_info` (`app_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='容器表';

-- ----------------------------
-- Table structure for instance_info
-- ----------------------------
DROP TABLE IF EXISTS `instance_info`;
CREATE TABLE `instance_info`
(
    `id`                    bigint   NOT NULL AUTO_INCREMENT COMMENT '任务实例ID',
    `app_id`                bigint   not null COMMENT '应用ID',
    `instance_id`           bigint   not null COMMENT '任务实例ID',
    `type`                  int      not NULL COMMENT '任务实例类型,1:普通NORMAL/2:工作流WORKFLOW',
    `job_id`                bigint   not NULL COMMENT '任务ID',
    `instance_params`       longtext COMMENT '任务动态参数',
    `job_params`            longtext COMMENT '任务静态参数',
    `actual_trigger_time`   bigint       default NULL COMMENT '实际触发时间',
    `expected_trigger_time` bigint       DEFAULT NULL COMMENT '计划触发时间',
    `finished_time`         bigint       DEFAULT NULL COMMENT '执行结束时间',
    `last_report_time`      bigint       DEFAULT NULL COMMENT '最后上报时间',
    `result`                longtext COMMENT '执行结果',
    `running_times`         bigint       DEFAULT NULL COMMENT '总执行次数,用于重试判断',
    `status`                int      not NULL COMMENT '任务状态,1:等待派发WAITING_DISPATCH/2:等待Worker接收WAITING_WORKER_RECEIVE/3:运行中RUNNING/4:失败FAILED/5:成功SUCCEED/9:取消CANCELED/10:手动停止STOPPED',
    `task_tracker_address`  varchar(255) DEFAULT NULL COMMENT 'TaskTracker地址',
    `wf_instance_id`        bigint       DEFAULT NULL COMMENT '工作流实例ID',
    `additional_data`       longtext comment '附加信息 (JSON)',
    `gmt_create`            datetime not NULL COMMENT '创建时间',
    `gmt_modified`          datetime not NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx01_instance_info` (`job_id`, 'status'),
    KEY `idx02_instance_info` (`app_id`, `status`),
    KEY `idx03_instance_info` (`instance_id`, `status`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='任务实例表';

-- ----------------------------
-- Table structure for job_info
-- ----------------------------
DROP TABLE IF EXISTS `job_info`;
CREATE TABLE `job_info`
(
    `id`                   bigint   NOT NULL AUTO_INCREMENT,
    `app_id`               bigint            DEFAULT NULL COMMENT '应用ID',
    `job_name`             varchar(128)      DEFAULT NULL COMMENT '任务名称',
    `job_description`      varchar(255)      DEFAULT NULL COMMENT '任务描述',
    `job_params`           text COMMENT '任务默认参数',
    `concurrency`          int               DEFAULT NULL COMMENT '并发度,同时执行某个任务的最大线程数量',
    `designated_workers`   varchar(255)      DEFAULT NULL COMMENT '运行节点,空:不限(多值逗号分割)',
    `dispatch_strategy`    int               DEFAULT NULL COMMENT '投递策略,1:健康优先/2:随机',
    `execute_type`         int      not NULL COMMENT '执行类型,1:单机STANDALONE/2:广播BROADCAST/3:MAP_REDUCE/4:MAP',
    `instance_retry_num`   int      not null DEFAULT 0 COMMENT 'Instance重试次数',
    `instance_time_limit`  bigint   not null DEFAULT 0 COMMENT '任务整体超时时间',
    `lifecycle`            varchar(255)      DEFAULT NULL COMMENT '生命周期',
    `max_instance_num`     int      not null DEFAULT 1 COMMENT '最大同时运行任务数,默认 1',
    `max_worker_count`     int      not null DEFAULT 0 COMMENT '最大运行节点数量',
    `min_cpu_cores`        double   NOT NULL default 0 COMMENT '最低CPU核心数量,0:不限',
    `min_disk_space`       double   NOT NULL default 0 COMMENT '最低磁盘空间(GB),0:不限',
    `min_memory_space`     double   NOT NULL default 0 COMMENT '最低内存空间(GB),0:不限',
    `next_trigger_time`    bigint            DEFAULT NULL COMMENT '下一次调度时间',
    `notify_user_ids`      varchar(255)      DEFAULT NULL COMMENT '报警用户(多值逗号分割)',
    `processor_info`       varchar(255)      DEFAULT NULL COMMENT '执行器信息',
    `processor_type`       int      not NULL COMMENT '执行器类型,1:内建处理器BUILT_IN/2:SHELL/3:PYTHON/4:外部处理器（动态加载）EXTERNAL',
    `status`               int      not NULL COMMENT '状态,1:正常ENABLE/2:已禁用DISABLE/99:已删除DELETED',
    `task_retry_num`       int      not NULL default 0 COMMENT 'Task重试次数',
    `time_expression`      varchar(255)      default NULL COMMENT '时间表达式,内容取决于time_expression_type,1:CRON/2:NULL/3:LONG/4:LONG',
    `time_expression_type` int      not NULL COMMENT '时间表达式类型,1:CRON/2:API/3:FIX_RATE/4:FIX_DELAY,5:WORKFLOW\n）',
    `tag`                  varchar(255)      DEFAULT NULL COMMENT 'TAG',
    `log_config`           varchar(255)      DEFAULT NULL COMMENT '日志配置',
    `extra`                varchar(255)      DEFAULT NULL COMMENT '扩展字段',
    `gmt_create`           datetime not NULL COMMENT '创建时间',
    `gmt_modified`         datetime not NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx01_job_info` (`app_id`, `status`, `time_expression_type`, `next_trigger_time`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='任务表';

-- ----------------------------
-- Table structure for oms_lock
-- ----------------------------
DROP TABLE IF EXISTS `oms_lock`;
CREATE TABLE `oms_lock`
(
    `id`            bigint   NOT NULL AUTO_INCREMENT COMMENT '序号ID',
    `lock_name`     varchar(128) DEFAULT NULL COMMENT '名称',
    `max_lock_time` bigint       DEFAULT NULL COMMENT '最长持锁时间',
    `ownerip`       varchar(255) DEFAULT NULL COMMENT '拥有者IP',
    `gmt_create`    datetime not NULL COMMENT '创建时间',
    `gmt_modified`  datetime not NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uidx01_oms_lock` (`lock_name`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='数据库锁';

-- ----------------------------
-- Table structure for server_info
-- ----------------------------
DROP TABLE IF EXISTS `server_info`;
CREATE TABLE `server_info`
(
    `id`           bigint NOT NULL AUTO_INCREMENT COMMENT '服务器ID',
    `gmt_create`   datetime     DEFAULT NULL COMMENT '创建时间',
    `gmt_modified` datetime     DEFAULT NULL COMMENT '更新时间',
    `ip`           varchar(128) DEFAULT NULL COMMENT '服务器IP地址',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uidx01_server_info` (`ip`),
    KEY `idx01_server_info` (`gmt_modified`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='服务器表';

-- ----------------------------
-- Table structure for user_info
-- ----------------------------
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info`
(
    `id`           bigint       NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    `username`     varchar(128) not NULL COMMENT '用户名',
    `password`     varchar(255) default NULL COMMENT '密码',
    `phone`        varchar(255) DEFAULT NULL COMMENT '手机号',
    `email`        varchar(128) not NULL COMMENT '邮箱',
    `extra`        varchar(255) DEFAULT NULL COMMENT '扩展字段',
    `web_hook`     varchar(255) DEFAULT NULL COMMENT 'webhook地址',
    `gmt_create`   datetime     not NULL COMMENT '创建时间',
    `gmt_modified` datetime     not NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    unique index uidx01_user_info (username),
    unique index uidx02_user_info (email)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='用户表';

-- ----------------------------
-- Table structure for workflow_info
-- ----------------------------
DROP TABLE IF EXISTS `workflow_info`;
CREATE TABLE `workflow_info`
(
    `id`                   bigint       NOT NULL AUTO_INCREMENT COMMENT '工作流ID',
    `app_id`               bigint       not NULL COMMENT '应用ID',
    `wf_name`              varchar(128) not NULL COMMENT '工作流名称',
    `wf_description`       varchar(255)          default NULL COMMENT '工作流描述',
    `extra`                varchar(255)          DEFAULT NULL COMMENT '扩展字段',
    `lifecycle`            varchar(255)          DEFAULT NULL COMMENT '生命周期',
    `max_wf_instance_num`  int          not null DEFAULT 1 COMMENT '最大运行工作流数量,默认 1',
    `next_trigger_time`    bigint                DEFAULT NULL COMMENT '下次调度时间',
    `notify_user_ids`      varchar(255)          DEFAULT NULL COMMENT '报警用户(多值逗号分割)',
    `pedag`                text COMMENT 'DAG信息(JSON)',
    `status`               int          not NULL COMMENT '状态,1:正常ENABLE/2:已禁用DISABLE/99:已删除DELETED',
    `time_expression`      varchar(255)          DEFAULT NULL COMMENT '时间表达式,内容取决于time_expression_type,1:CRON/2:NULL/3:LONG/4:LONG',
    `time_expression_type` int          not NULL COMMENT '时间表达式类型,1:CRON/2:API/3:FIX_RATE/4:FIX_DELAY,5:WORKFLOW\n）',
    `gmt_create`           datetime              DEFAULT NULL COMMENT '创建时间',
    `gmt_modified`         datetime              DEFAULT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `idx01_workflow_info` (`app_id`, `status`, `time_expression_type`, next_trigger_time)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='工作流表';

-- ----------------------------
-- Table structure for workflow_instance_info
-- ----------------------------
DROP TABLE IF EXISTS `workflow_instance_info`;
CREATE TABLE `workflow_instance_info`
(
    `id`                    bigint NOT NULL AUTO_INCREMENT COMMENT '工作流实例ID',
    `wf_instance_id`        bigint   DEFAULT NULL COMMENT '工作流实例ID',
    `workflow_id`           bigint   DEFAULT NULL COMMENT '工作流ID',
    `actual_trigger_time`   bigint   DEFAULT NULL COMMENT '实际触发时间',
    `app_id`                bigint   DEFAULT NULL COMMENT '应用ID',
    `dag`                   text COMMENT 'DAG信息(JSON)',
    `expected_trigger_time` bigint   DEFAULT NULL COMMENT '计划触发时间',
    `finished_time`         bigint   DEFAULT NULL COMMENT '执行结束时间',
    `result`                text COMMENT '执行结果',
    `status`                int      DEFAULT NULL COMMENT '工作流实例状态,1:等待调度WAITING/2:运行中RUNNING/3:失败FAILED/4:成功SUCCEED/10:手动停止STOPPED',
    `wf_context`            text COMMENT '工作流上下文',
    `wf_init_params`        text COMMENT '工作流启动参数',
    `gmt_create`            datetime DEFAULT NULL COMMENT '创建时间',
    `gmt_modified`          datetime DEFAULT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    unique index uidx01_wf_instance (`wf_instance_id`),
    index idx01_wf_instance (`workflow_id`, `status`),
    index idx02_wf_instance (`app_id`, `status`, `expected_trigger_time`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='工作流实例表';

-- ----------------------------
-- Table structure for workflow_node_info
-- ----------------------------
DROP TABLE IF EXISTS `workflow_node_info`;
CREATE TABLE `workflow_node_info`
(
    `id`               bigint   NOT NULL AUTO_INCREMENT COMMENT '节点ID',
    `app_id`           bigint   NOT NULL COMMENT '应用ID',
    `enable`           bit(1)   NOT NULL COMMENT '是否启动,0:否/1:是',
    `extra`            text COMMENT '扩展字段',
    `gmt_create`       datetime NOT NULL COMMENT '创建时间',
    `gmt_modified`     datetime NOT NULL COMMENT '更新时间',
    `job_id`           bigint       default NULL COMMENT '任务ID',
    `node_name`        varchar(255) DEFAULT NULL COMMENT '节点名称',
    `node_params`      text COMMENT '节点参数',
    `skip_when_failed` bit(1)   NOT NULL COMMENT '是否允许失败跳过,0:否/1:是',
    `type`             int          DEFAULT NULL COMMENT '节点类型,1:任务JOB',
    `workflow_id`      bigint       DEFAULT NULL COMMENT '工作流ID',
    PRIMARY KEY (`id`),
    KEY `idx01_workflow_node_info` (`workflow_id`,`gmt_create`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_general_ci COMMENT ='工作流节点表';

SET FOREIGN_KEY_CHECKS = 1;
