-- --------------------------------------------------------------------------------------
-- 系统基础表
-- --------------------------------------------------------------------------------------

-- 租户表
CREATE TABLE sys_tenant
(
    id            BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by     VARCHAR(255) NULL COMMENT '创建人',
    create_time   DATETIME(6) NULL COMMENT '创建时间',
	deleted       BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
    update_by     VARCHAR(255) NULL COMMENT '更新人',
    update_time   DATETIME(6) NULL COMMENT '更新时间',
	version       INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	code          VARCHAR(50)  NOT NULL COMMENT '租户编码',
    name          VARCHAR(100) NOT NULL COMMENT '租户名称',
    address       VARCHAR(255) NULL COMMENT '租户地址',
    contact_name  VARCHAR(50) NULL COMMENT '联系人姓名',
    contact_phone VARCHAR(20) NULL COMMENT '联系人电话',
    email         VARCHAR(100) NULL COMMENT '联系人邮箱',
	enabled       BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',

    CONSTRAINT UK_tenant_code UNIQUE (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';


-- 部门表
CREATE TABLE sys_department
(
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by   VARCHAR(255) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by   VARCHAR(255) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	code        VARCHAR(50)  NOT NULL COMMENT '部门编码',
	name        VARCHAR(100) NOT NULL COMMENT '部门名称',
	description VARCHAR(255) NULL COMMENT '部门描述',
	leader_id   BIGINT NULL COMMENT '部门负责人ID',
	leader_name VARCHAR(50) NULL COMMENT '部门负责人姓名',
	parent_id   BIGINT NULL COMMENT '父部门ID',
	sort        INT          NOT NULL DEFAULT 0 COMMENT '显示顺序',
	enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',

	CONSTRAINT UK_department_code UNIQUE (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表';

-- 用户表
CREATE TABLE sys_user
(
	id            BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by     VARCHAR(255) NULL COMMENT '创建人',
	create_time   DATETIME(6) NULL COMMENT '创建时间',
	deleted       BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by     VARCHAR(255) NULL COMMENT '更新人',
	update_time   DATETIME(6) NULL COMMENT '更新时间',
	version       INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	username      VARCHAR(50)  NOT NULL COMMENT '用户名',
	password      VARCHAR(255) NOT NULL COMMENT '密码',
	nickname      VARCHAR(50) NULL COMMENT '昵称',
	email         VARCHAR(100) NULL COMMENT '邮箱',
	phone         VARCHAR(20) NULL COMMENT '手机号',
    department_id BIGINT NULL COMMENT '所属部门ID',
	enabled       BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',

    CONSTRAINT UK_user_username UNIQUE (username),
	CONSTRAINT FK_user_department FOREIGN KEY (department_id) REFERENCES sys_department (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';

-- 系统参数表
CREATE TABLE sys_param
(
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by   VARCHAR(255) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by   VARCHAR(255) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	code        VARCHAR(100) NOT NULL COMMENT '参数编码',
	name        VARCHAR(100) NOT NULL COMMENT '参数名称',
	value       TEXT COMMENT '参数值',
	type        VARCHAR(50)  NOT NULL COMMENT '参数类型',
	description VARCHAR(255) NULL COMMENT '参数描述',
	enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',

	CONSTRAINT UK_sys_param_code UNIQUE (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统参数表';

-- --------------------------------------------------------------------------------------
-- 权限管理相关表
-- --------------------------------------------------------------------------------------

-- 菜单表
CREATE TABLE sys_menu
(
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by   VARCHAR(255) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by   VARCHAR(255) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	name        VARCHAR(100) NOT NULL COMMENT '菜单名称',
	path        VARCHAR(200) NULL COMMENT '路由路径',
	component   VARCHAR(255) NULL COMMENT '组件路径',
	icon        VARCHAR(100) NULL COMMENT '菜单图标',
	permission  VARCHAR(100) NULL COMMENT '权限标识',
	type        TINYINT      NOT NULL COMMENT '菜单类型（1：目录 2：菜单 3：按钮）',
	parent_id   BIGINT NULL COMMENT '父菜单ID',
	sort        INT          NOT NULL DEFAULT 0 COMMENT '显示顺序',
	hidden      BIT          NOT NULL DEFAULT 0 COMMENT '是否隐藏（0：显示，1：隐藏）',
	enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',

	INDEX       IDX_parent_id (parent_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表';

-- 角色表
CREATE TABLE sys_role
(
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by   VARCHAR(255) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by   VARCHAR(255) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	code        VARCHAR(100) NOT NULL COMMENT '角色编码',
	name        VARCHAR(100) NOT NULL COMMENT '角色名称',
	type        TINYINT      NOT NULL DEFAULT 2 COMMENT '角色类型（1：系统角色，2：自定义角色）',
	description VARCHAR(255) NULL COMMENT '角色描述',
	sort        INT          NOT NULL DEFAULT 0 COMMENT '显示顺序',
	is_admin    BIT          NOT NULL DEFAULT 0 COMMENT '是否超级管理员（0：否，1：是，超级管理员拥有所有权限且不可删除）',

	CONSTRAINT UK_role_code UNIQUE (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';

-- 角色标签表
CREATE TABLE sys_role_tag
(
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by   VARCHAR(255) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	deleted     BIT         NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by   VARCHAR(255) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT         NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	name        VARCHAR(50) NOT NULL COMMENT '标签名称',
	color       VARCHAR(20) NULL COMMENT '标签颜色'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色标签表';

-- 角色标签关联表
CREATE TABLE sys_role_tag_relation
(
	role_id BIGINT NOT NULL COMMENT '角色ID',
	tag_id  BIGINT NOT NULL COMMENT '标签ID',

	PRIMARY KEY (role_id, tag_id),
	CONSTRAINT FK_role_tag_role FOREIGN KEY (role_id) REFERENCES sys_role (id),
	CONSTRAINT FK_role_tag_tag FOREIGN KEY (tag_id) REFERENCES sys_role_tag (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色标签关联表';

-- 用户角色关联表
CREATE TABLE sys_user_role
(

	user_id BIGINT NOT NULL COMMENT '用户ID',
	role_id BIGINT NOT NULL COMMENT '角色ID',

	CONSTRAINT UK_user_role UNIQUE (user_id, role_id),
	CONSTRAINT FK_user_role_user FOREIGN KEY (user_id) REFERENCES sys_user (id),
	CONSTRAINT FK_user_role_role FOREIGN KEY (role_id) REFERENCES sys_role (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表';

-- 角色菜单关联表
CREATE TABLE sys_role_menu
(
	role_id BIGINT NOT NULL COMMENT '角色ID',
	menu_id BIGINT NOT NULL COMMENT '菜单ID',

	PRIMARY KEY (role_id, menu_id),
	CONSTRAINT FK_role_menu_role FOREIGN KEY (role_id) REFERENCES sys_role (id),
	CONSTRAINT FK_role_menu_menu FOREIGN KEY (menu_id) REFERENCES sys_menu (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单关联表';

-- 权限模板表
CREATE TABLE sys_permission_template
(
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by   VARCHAR(255) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by   VARCHAR(255) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	code        VARCHAR(100) NOT NULL COMMENT '模板编码',
	name        VARCHAR(100) NOT NULL COMMENT '模板名称',
	type        TINYINT      NOT NULL DEFAULT 1 COMMENT '模板类型（1：系统模板，2：自定义模板）',
	description VARCHAR(255) NULL COMMENT '模板描述',
	enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',

	CONSTRAINT UK_template_code UNIQUE (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限模板表';

-- 模板菜单关联表
CREATE TABLE sys_template_menu
(
	template_id BIGINT NOT NULL COMMENT '模板ID',
	menu_id     BIGINT NOT NULL COMMENT '菜单ID',

	PRIMARY KEY (template_id, menu_id),
	CONSTRAINT FK_template_menu_template FOREIGN KEY (template_id) REFERENCES sys_permission_template (id),
	CONSTRAINT FK_template_menu_menu FOREIGN KEY (menu_id) REFERENCES sys_menu (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='模板菜单关联表';

-- 权限表
CREATE TABLE sys_permission
(
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by   VARCHAR(255) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by   VARCHAR(255) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	menu_id     BIGINT       NOT NULL COMMENT '关联的菜单ID',
	code        VARCHAR(100) NOT NULL COMMENT '权限编码',
	name        VARCHAR(100) NOT NULL COMMENT '权限名称',
	type        VARCHAR(50)  NOT NULL DEFAULT 'FUNCTION' COMMENT '权限类型（MENU：菜单，FUNCTION：功能，API：接口）',
	sort        INT NULL DEFAULT 0 COMMENT '排序',

	CONSTRAINT UK_permission_code UNIQUE (code),
	CONSTRAINT FK_permission_menu FOREIGN KEY (menu_id) REFERENCES sys_menu (id),
	INDEX       IDX_menu_id (menu_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统权限表';

-- 角色权限关联表
CREATE TABLE sys_role_permission
(
	role_id       BIGINT NOT NULL COMMENT '角色ID',
	permission_id BIGINT NOT NULL COMMENT '权限ID',
	
	PRIMARY KEY (role_id, permission_id),
	CONSTRAINT FK_role_permission_role FOREIGN KEY (role_id) REFERENCES sys_role (id),
	CONSTRAINT FK_role_permission_permission FOREIGN KEY (permission_id) REFERENCES sys_permission (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';

-- --------------------------------------------------------------------------------------
-- 外部系统集成相关表
-- --------------------------------------------------------------------------------------

-- 外部系统表
CREATE TABLE sys_external_system
(
	id                BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by         VARCHAR(255) NULL COMMENT '创建人',
	create_time       DATETIME(6) NULL COMMENT '创建时间',
	deleted           BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by         VARCHAR(255) NULL COMMENT '更新人',
	update_time       DATETIME(6) NULL COMMENT '更新时间',
	version           INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	name              VARCHAR(100) NOT NULL COMMENT '系统名称',
	type              VARCHAR(50)  NOT NULL COMMENT '系统类型（JENKINS/GIT/ZENTAO等）',
	url               VARCHAR(255) NOT NULL COMMENT '系统访问地址',
	remark            TEXT NULL COMMENT '备注说明',
	sort              INT NULL DEFAULT 0 COMMENT '排序',
	enabled           BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',
	auth_type         VARCHAR(50)  NOT NULL COMMENT '认证方式（BASIC/TOKEN/OAUTH等）',
	username          VARCHAR(100) NULL COMMENT '用户名',
	password          VARCHAR(500) NULL COMMENT '密码（加密存储，AES-256）',
	token             VARCHAR(500) NULL COMMENT '访问令牌（加密存储，AES-256）',
	sync_status       VARCHAR(50) NULL COMMENT '同步状态（SUCCESS/FAILED/RUNNING）',
	last_sync_time    DATETIME(6) NULL COMMENT '最后同步时间',
	last_connect_time DATETIME(6) NULL COMMENT '最近连接成功时间',
	config            JSON NULL COMMENT '系统特有配置',

	CONSTRAINT UK_external_system_name UNIQUE (name),
	CONSTRAINT UK_external_system_type_url UNIQUE (type, url)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='外部系统表';

-- 代码仓库组表

CREATE TABLE deploy_repo_group
(
	-- 基础字段
	id                 BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	-- 业务字段
	name               VARCHAR(100) NOT NULL COMMENT '仓库组名',
	description        VARCHAR(500) NULL COMMENT '仓库组描述',
	parent_id          BIGINT NULL COMMENT '父级仓库组ID',
	full_name          VARCHAR(255) NULL COMMENT '完整名称（包含层级关系）',
	full_path          VARCHAR(255) NULL COMMENT '完整路径',
	path               VARCHAR(200) NOT NULL COMMENT '仓库组路径',
	external_system_id BIGINT       NOT NULL COMMENT '外部系统ID',
	avatar_url         VARCHAR(255) NULL COMMENT '头像URL',
	web_url            VARCHAR(255) NULL COMMENT '网页URL',
	visibility         ENUM('private', 'internal', 'public') NOT NULL DEFAULT 'private' COMMENT '可见性：private-私有，internal-内部，public-公开',
	sort               INT                   DEFAULT 0 COMMENT '排序号',
	repo_group_id      BIGINT       NOT NULL COMMENT 'Git系统中的组ID',

	create_by          VARCHAR(100) NULL COMMENT '创建人',
	create_time        DATETIME(6) NULL COMMENT '创建时间',
	update_by          VARCHAR(100) NULL COMMENT '更新人',
	update_time        DATETIME(6) NULL COMMENT '更新时间',
	version            INT          NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted            BIT          NOT NULL DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除'

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码仓库组表';

-- 代码仓库项目表
CREATE TABLE deploy_repo_project
(
	id                  BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',

	name                VARCHAR(255) NOT NULL COMMENT '项目名称',
	path                VARCHAR(255) NOT NULL COMMENT '项目路径',
	description         TEXT NULL COMMENT '项目描述',
	visibility          VARCHAR(50) NULL COMMENT '可见性',
	default_branch      VARCHAR(100) NULL COMMENT '默认分支',
	web_url             VARCHAR(500) NULL COMMENT 'Web URL',
	ssh_url             VARCHAR(500) NULL COMMENT 'SSH URL',
	http_url            VARCHAR(500) NULL COMMENT 'HTTP URL',
	last_activity_at    DATETIME(6) NULL COMMENT '最后活动时间',
	name_with_namespace VARCHAR(500) NULL COMMENT '带命名空间的名称',
	path_with_namespace VARCHAR(500) NULL COMMENT '带命名空间的路径',
	created_at          DATETIME(6) NULL COMMENT '创建时间',

	external_system_id  BIGINT       NOT NULL COMMENT '外部系统ID',
	repo_group_id       BIGINT       NOT NULL COMMENT '项目ID',
	repo_project_id     BIGINT       NOT NULL COMMENT '项目ID',

	create_by           VARCHAR(255) NULL COMMENT '创建人',
	create_time         DATETIME(6) NULL COMMENT '创建时间',
	deleted             BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by           VARCHAR(255) NULL COMMENT '更新人',
	update_time         DATETIME(6) NULL COMMENT '更新时间',
	version             INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	CONSTRAINT FK_repo_project_external_system FOREIGN KEY (external_system_id) REFERENCES sys_external_system (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Git仓库项目表';

-- 代码仓库分支表
CREATE TABLE deploy_repo_branch
(
	-- 基础字段
	id                   BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	-- 业务字段
	name                 VARCHAR(100) NOT NULL COMMENT '分支名称',
	is_default_branch    BIT                   DEFAULT 0 COMMENT '是否为默认分支：0-否，1-是',
	can_push             BIT                   DEFAULT 1 COMMENT '是否可推送：0-否，1-是',
	developers_can_push  BIT                   DEFAULT 1 COMMENT '开发者是否可推送：0-否，1-是',
	developers_can_merge BIT                   DEFAULT 1 COMMENT '开发者是否可合并：0-否，1-是',
	last_commit_id       VARCHAR(64) NULL COMMENT '最新提交ID',
	commit_message       TEXT NULL COMMENT '最新提交信息',
	commit_author        VARCHAR(100) NULL COMMENT '最新提交作者',
	commit_date          DATETIME(6) NULL COMMENT '最新提交时间（authored_date）',
	last_update_time     DATETIME(6) NULL COMMENT '分支最后更新时间（committed_date）',
	web_url              VARCHAR(1000) NULL COMMENT '网页URL',
	project_id           BIGINT       NOT NULL COMMENT '所属项目ID',
	external_system_id   BIGINT       NOT NULL COMMENT '外部系统ID',
	repo_project_id      BIGINT       NOT NULL COMMENT 'GitLab的真实project_id',

	create_by            VARCHAR(100) NULL COMMENT '创建人',
	create_time          DATETIME(6) NULL COMMENT '创建时间',
	update_by            VARCHAR(100) NULL COMMENT '更新人',
	update_time          DATETIME(6) NULL COMMENT '更新时间',
	version              INT          NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted              BIT          NOT NULL DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除'

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT ='代码仓库分支表';

-- --------------------------------------------------------------------------------------
-- 工作流相关表
-- --------------------------------------------------------------------------------------

-- 工作流分类表
CREATE TABLE workflow_category
(
    -- 主键
	id                 BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',

    -- 基础信息
	name               VARCHAR(100) NOT NULL COMMENT '分类名称',
	code               VARCHAR(50)  NOT NULL COMMENT '分类编码（唯一，如SCRIPT_EXECUTION）',
	description        VARCHAR(500) NULL COMMENT '分类描述',
	icon               VARCHAR(50) NULL COMMENT '图标',
	sort               INT          NOT NULL DEFAULT 0 COMMENT '排序',
    
    -- 支持的触发方式（JSON数组，如["MANUAL","SCHEDULED"]）
	supported_triggers JSON NULL COMMENT '支持的触发方式列表',
    
    -- 状态
	enabled            BIT          NOT NULL DEFAULT 1 COMMENT '是否启用',

    -- 审计字段
	create_by          VARCHAR(255) NULL COMMENT '创建人',
	create_time        DATETIME(6) NULL COMMENT '创建时间',
	deleted            BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',
	update_by          VARCHAR(255) NULL COMMENT '更新人',
	update_time        DATETIME(6) NULL COMMENT '更新时间',
	version            INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

    -- 约束和索引
    UNIQUE KEY uk_code (code),
	INDEX              idx_enabled (enabled),
	INDEX              idx_deleted (deleted),
	INDEX              idx_sort (sort)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci 
  COMMENT = '工作流分类表';

CREATE TABLE form_category
(
    -- 主键
	id          BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',

    -- 基础信息
	name        VARCHAR(100) NOT NULL COMMENT '分类名称',
	code        VARCHAR(50)  NOT NULL COMMENT '分类编码（唯一）',
	description VARCHAR(500) NULL COMMENT '分类描述',
	icon        VARCHAR(50) NULL COMMENT '图标',
	sort        INT          NOT NULL DEFAULT 0 COMMENT '排序',
    
    -- 状态
	enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用',

    -- 审计字段
	create_by   VARCHAR(255) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',
	update_by   VARCHAR(255) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

    -- 约束和索引
    UNIQUE KEY uk_code (code),
	INDEX       idx_enabled (enabled),
	INDEX       idx_deleted (deleted),
	INDEX       idx_sort (sort)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci 
  COMMENT = '表单分类表';

-- 表单定义表
CREATE TABLE form_definition
(
    -- 主键
	id           BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',

    -- 基础信息
	name         VARCHAR(255) NOT NULL COMMENT '表单名称',
	`key`        VARCHAR(255) NOT NULL COMMENT '表单标识（业务唯一）',
	form_version INT          NOT NULL DEFAULT 1 COMMENT '表单版本号',
	category_id  BIGINT NULL COMMENT '表单分类ID（外键关联form_category）',
	description  TEXT NULL COMMENT '表单描述',

    -- 表单配置
	`schema`     JSON         NOT NULL COMMENT '表单Schema（前端设计器导出的JSON结构）',
	tags         JSON NULL COMMENT '标签（用于分类和搜索）',

    -- 表单属性
	status       VARCHAR(50)  NOT NULL DEFAULT 'DRAFT' COMMENT '状态（DRAFT-草稿、PUBLISHED-已发布、DISABLED-已禁用）',
	is_template  BIT NULL DEFAULT 0 COMMENT '是否为模板',

    -- 审计字段
	create_by    VARCHAR(255) NULL COMMENT '创建人',
	create_time  DATETIME(6) NULL COMMENT '创建时间',
	deleted      BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',
	update_by    VARCHAR(255) NULL COMMENT '更新人',
	update_time  DATETIME(6) NULL COMMENT '更新时间',
	version      INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

    -- 约束和索引
    UNIQUE KEY uk_key_version (`key`, form_version),
	INDEX        idx_category_id (category_id),
	INDEX        idx_status (status),
	INDEX        idx_is_template (is_template),
	INDEX        idx_deleted (deleted),
    
    -- 外键约束
	CONSTRAINT fk_form_definition_category FOREIGN KEY (category_id) REFERENCES form_category (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci 
  COMMENT = '表单定义表';

-- 工作流定义表
CREATE TABLE workflow_definition
(
	-- 主键
	id                    BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',

	-- 基础信息
	name                  VARCHAR(255) NOT NULL COMMENT '流程名称',
	`key`                 VARCHAR(255) NOT NULL COMMENT '流程标识',
	category_id           BIGINT NULL COMMENT '流程分类ID（外键关联workflow_category）',
	form_definition_id    BIGINT NULL COMMENT '启动表单ID（外键关联form_definition）',
	process_definition_id VARCHAR(100) NULL COMMENT '工作流定义ID',
	flow_version          INT          NOT NULL COMMENT '流程版本',
	description           TEXT COMMENT '流程描述',

	-- 流程配置
	bpmn_xml              TEXT COMMENT 'BPMN XML内容',
	graph                 JSON COMMENT '流程图数据，包含节点和连线的位置、样式等信息',

	-- 流程属性
	status                VARCHAR(50)  NOT NULL COMMENT '流程状态（DRAFT-草稿、PUBLISHED-已发布、DISABLED-已禁用）',

	-- 审计字段
	create_by             VARCHAR(255) NULL COMMENT '创建人',
	create_time           DATETIME(6) NULL COMMENT '创建时间',
	deleted               BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by             VARCHAR(255) NULL COMMENT '更新人',
	update_time           DATETIME(6) NULL COMMENT '更新时间',
	version               INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	-- 约束和索引
	UNIQUE KEY uk_key_version (`key`, flow_version),
	INDEX                 idx_category_id (category_id),
	INDEX                 idx_form_definition_id (form_definition_id),
	INDEX                 idx_status (status),
	INDEX                 idx_deleted (deleted),
	CONSTRAINT fk_workflow_definition_category FOREIGN KEY (category_id) REFERENCES workflow_category (id),
	CONSTRAINT fk_workflow_definition_form FOREIGN KEY (form_definition_id) REFERENCES form_definition (id)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci COMMENT ='工作流定义表';

-- 创建工作流节点定义表
CREATE TABLE workflow_node_definition
(
	id                     BIGINT       NOT NULL AUTO_INCREMENT COMMENT '主键ID',
	node_type              VARCHAR(50)  NOT NULL COMMENT '节点类型',
	node_code              VARCHAR(50)  NOT NULL COMMENT '节点编码',
	node_name              VARCHAR(100) NOT NULL COMMENT '节点名称',
	description            VARCHAR(500) COMMENT '节点描述',
	category               VARCHAR(50) COMMENT '节点分类',
	ui_variables           JSON         NOT NULL COMMENT '节点UI',
	panel_variables_schema JSON         NOT NULL COMMENT '节点属性',
	local_variables_schema JSON         NOT NULL COMMENT '节点环境变量',
	form_variables_schema  JSON COMMENT '节点表单',
	enabled                BOOLEAN      NOT NULL DEFAULT TRUE COMMENT '是否启用',

	create_time            DATETIME     NOT NULL COMMENT '创建时间',
	create_by              VARCHAR(50)  NOT NULL COMMENT '创建人',
	update_time            DATETIME     NOT NULL COMMENT '更新时间',
	update_by              VARCHAR(50)  NOT NULL COMMENT '更新人',
	version                INT          NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted                BOOLEAN      NOT NULL DEFAULT FALSE COMMENT '是否删除',
	PRIMARY KEY (id),
	UNIQUE KEY uk_node_type (node_type)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci COMMENT ='工作流节点定义表';

-- 表单数据表
CREATE TABLE form_data
(
    -- 主键
	id                 BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',

    -- 关联表单定义
	form_definition_id BIGINT       NOT NULL COMMENT '表单定义ID',
	form_key           VARCHAR(255) NOT NULL COMMENT '表单标识（冗余存储，避免JOIN）',
	form_version       INT          NOT NULL COMMENT '表单版本（冗余存储，用于历史追溯）',
	category_id        BIGINT NULL COMMENT '表单分类ID（冗余存储，便于统计和查询）',

    -- 业务关联（松耦合）
	business_key       VARCHAR(255) NULL COMMENT '业务标识（如工作流实例ID、订单号等）',
	business_type      VARCHAR(50) NULL COMMENT '业务类型（WORKFLOW-工作流、ORDER-订单、STANDALONE-独立表单）',

    -- 表单数据
	data               JSON         NOT NULL COMMENT '表单填写数据（用户提交的实际数据）',
	schema_snapshot    JSON         NOT NULL COMMENT '表单Schema快照（用于历史追溯，确保数据可还原）',

    -- 提交信息
	submitter          VARCHAR(255) NULL COMMENT '提交人',
	submit_time        DATETIME(6) NULL COMMENT '提交时间',

    -- 状态
	status             VARCHAR(50)  NOT NULL DEFAULT 'SUBMITTED' COMMENT '状态（DRAFT-草稿、SUBMITTED-已提交、COMPLETED-已完成、REJECTED-已拒绝）',

    -- 审计字段
	create_by          VARCHAR(255) NULL COMMENT '创建人',
	create_time        DATETIME(6) NULL COMMENT '创建时间',
	deleted            BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',
	update_by          VARCHAR(255) NULL COMMENT '更新人',
	update_time        DATETIME(6) NULL COMMENT '更新时间',
	version            INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

    -- 索引
	INDEX              idx_form_definition_id (form_definition_id),
	INDEX              idx_form_key (form_key),
	INDEX              idx_category_id (category_id),
	INDEX              idx_business_key (business_key),
	INDEX              idx_business_type (business_type),
	INDEX              idx_submitter (submitter),
	INDEX              idx_status (status),
	INDEX              idx_submit_time (submit_time),
	INDEX              idx_deleted (deleted)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci 
  COMMENT = '表单数据表';

-- 工作流实例表
CREATE TABLE workflow_instance
(
	id                     BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by              VARCHAR(255) NULL COMMENT '创建人',
	create_time            DATETIME(6) NULL COMMENT '创建时间',
	deleted                BIT         NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by              VARCHAR(255) NULL COMMENT '更新人',
	update_time            DATETIME(6) NULL COMMENT '更新时间',
	version                INT         NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	process_instance_id    VARCHAR(64) NOT NULL COMMENT '流程实例ID',
	process_definition_id  VARCHAR(64) NOT NULL COMMENT '流程定义ID',
	workflow_definition_id BIGINT      NOT NULL COMMENT '工作流定义ID',
	business_key           VARCHAR(64) NULL COMMENT '业务标识',
	status                 ENUM('NOT_STARTED','CREATED','RUNNING','SUSPENDED','COMPLETED','COMPLETED_WITH_ERRORS','TERMINATED','FAILED') NOT NULL COMMENT '实例状态',
	variables              TEXT NULL COMMENT '流程变量(JSON，包含所有业务数据)',
	graph_snapshot         JSON NULL COMMENT '流程图数据快照（启动时保存，用于画布还原）',
	start_time             DATETIME(6) NULL COMMENT '开始时间',
	end_time               DATETIME(6) NULL COMMENT '结束时间'

--     CONSTRAINT FK_workflow_instance_definition FOREIGN KEY (process_definition_id) REFERENCES workflow_definition(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流实例表';

-- 工作流节点实例表
CREATE TABLE workflow_node_instance
(
	id                     BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by              VARCHAR(255) NULL COMMENT '创建人',
	create_time            DATETIME(6) NULL COMMENT '创建时间',
	deleted                BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
	update_by              VARCHAR(255) NULL COMMENT '更新人',
	update_time            DATETIME(6) NULL COMMENT '更新时间',
	version                INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

	workflow_definition_id BIGINT       NOT NULL COMMENT '工作流定义ID',
	workflow_instance_id   BIGINT       NOT NULL COMMENT '工作流实例ID',
	process_instance_id    VARCHAR(64)  NOT NULL COMMENT '流程实例ID',
	execution_id           VARCHAR(100) NOT NULL COMMENT '执行实例ID',
	node_id                VARCHAR(64)  NOT NULL COMMENT '节点ID',
	node_name              VARCHAR(100) NOT NULL COMMENT '节点名称',
	node_type              VARCHAR(32)  NOT NULL COMMENT '节点类型',
	status                 VARCHAR(32)  NOT NULL COMMENT '节点状态',
	start_time             DATETIME(6) NULL COMMENT '开始时间',
	end_time               DATETIME(6) NULL COMMENT '结束时间',
	variables              TEXT NULL COMMENT '节点变量(JSON)',
	error_message          TEXT NULL COMMENT '错误信息',

	CONSTRAINT FK_workflow_node_instance_instance FOREIGN KEY (workflow_instance_id) REFERENCES workflow_instance (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流节点实例表';

-- ⚠️ workflow_node_log 表已废弃
-- 日志现在存储在 Redis Stream 中，保留 7 天后自动删除
-- 详见 WorkflowNodeLogServiceImpl（基于 RedisUtil）

-- --------------------------------------------------------------------------------------
-- 项目管理相关表
-- --------------------------------------------------------------------------------------

-- 应用分类表
CREATE TABLE deploy_application_category
(
	-- 基础字段
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by   VARCHAR(100) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
	update_by   VARCHAR(100) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
	version     INT          NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除',

	-- 业务字段
	code        VARCHAR(50)  NOT NULL COMMENT '分类编码',
	name        VARCHAR(100) NOT NULL COMMENT '分类名称',
	description VARCHAR(500) NULL COMMENT '分类描述',
	icon        VARCHAR(50) NULL COMMENT '图标',
	enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',
	sort        INT          NOT NULL DEFAULT 0 COMMENT '排序号',
	
	UNIQUE INDEX uk_code (code)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci COMMENT ='应用分类表';

-- 应用表
CREATE TABLE deploy_application
(
	id                      BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	-- 业务字段
	app_code                VARCHAR(50)  NOT NULL COMMENT '应用编码',
	app_name                VARCHAR(100) NOT NULL COMMENT '应用名称',
	app_desc                VARCHAR(255) NULL COMMENT '应用描述',
	language                VARCHAR(50) NULL COMMENT '开发语言：JAVA、PYTHON、NODEJS',
	application_category_id BIGINT NULL COMMENT '所属应用分类ID',
	enabled                 BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',
	sort                    INT          NOT NULL DEFAULT 0 COMMENT '排序号',
	-- 基础字段
	create_by               VARCHAR(100) NULL COMMENT '创建人',
	create_time             DATETIME(6) NULL COMMENT '创建时间',
	update_by               VARCHAR(100) NULL COMMENT '更新人',
	update_time             DATETIME(6) NULL COMMENT '更新时间',
	version                 INT          NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted                 BIT          NOT NULL DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除',

	-- 索引
	INDEX                   idx_application_category_id (application_category_id) COMMENT '应用分类ID索引',
	UNIQUE INDEX uk_app_code (application_category_id, app_code) COMMENT '分类下应用编码唯一',

	-- 外键约束
	CONSTRAINT fk_application_category FOREIGN KEY (application_category_id) REFERENCES deploy_application_category (id)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci COMMENT ='应用表';

-- 环境表
CREATE TABLE deploy_environment
(
	id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    -- 业务字段
    tenant_code VARCHAR(50)           DEFAULT NULL COMMENT '租户编码',
    env_code    VARCHAR(50)  NOT NULL COMMENT '环境编码',
    env_name    VARCHAR(100) NOT NULL COMMENT '环境名称',
    env_desc    VARCHAR(255) NULL COMMENT '环境描述',
	enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用（0：禁用，1：启用）',
    sort        INT          NOT NULL DEFAULT 0 COMMENT '排序号',

    -- 基础字段
    create_by   VARCHAR(100) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
    update_by   VARCHAR(100) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
    version     INT          NOT NULL DEFAULT 1 COMMENT '版本号',
    deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',

    -- 索引
    UNIQUE INDEX uk_env_code (env_code) COMMENT '环境编码唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='环境表';

-- 团队表
CREATE TABLE deploy_team
(
    id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by   VARCHAR(100) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
    update_by   VARCHAR(100) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
    version     INT          NOT NULL DEFAULT 1 COMMENT '版本号',
    deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',
    
    team_code   VARCHAR(50)  NOT NULL COMMENT '团队编码',
    team_name   VARCHAR(100) NOT NULL COMMENT '团队名称',
    description VARCHAR(500) NULL COMMENT '团队描述',
	owner_id    BIGINT NULL COMMENT '团队负责人用户ID',
	owner_name  VARCHAR(50) NULL COMMENT '团队负责人姓名（冗余）',
    enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用',
    sort        INT          NOT NULL DEFAULT 0 COMMENT '排序号',
    
    -- Git同步相关配置
    development_mode VARCHAR(30) NOT NULL DEFAULT 'STANDARD' COMMENT '开发模式: STANDARD-标准模式, SYNC_MODE-同步模式, ARTIFACT_DELIVERY-制品交付模式',
    enable_git_sync_check BIT NOT NULL DEFAULT 0 COMMENT '是否启用Git同步检测（仅SYNC_MODE模式有效）',
    
    UNIQUE INDEX uk_team_code (team_code),
	INDEX       idx_owner (owner_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队表';

-- 团队成员表
CREATE TABLE deploy_team_member
(
    id           BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by    VARCHAR(100) NULL COMMENT '创建人',
	create_time  DATETIME(6) NULL COMMENT '创建时间',
    update_by    VARCHAR(100) NULL COMMENT '更新人',
	update_time  DATETIME(6) NULL COMMENT '更新时间',
	version      INT    NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted      BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
	team_id      BIGINT NOT NULL COMMENT '团队ID',
	user_id      BIGINT NOT NULL COMMENT '用户ID',
	user_name    VARCHAR(50) NULL COMMENT '用户名（冗余）',
	role_in_team VARCHAR(50) NULL COMMENT '团队角色（如：开发、测试、运维、负责人）',
	join_time    DATETIME(6) NULL COMMENT '加入时间',
    
    UNIQUE INDEX uk_team_user (team_id, user_id),
	INDEX        idx_user (user_id),
	CONSTRAINT fk_team_member_team FOREIGN KEY (team_id) REFERENCES deploy_team (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队成员表';

-- 团队应用关联表
CREATE TABLE deploy_team_application
(
    id             BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by      VARCHAR(100) NULL COMMENT '创建人',
	create_time    DATETIME(6) NULL COMMENT '创建时间',
    update_by      VARCHAR(100) NULL COMMENT '更新人',
	update_time    DATETIME(6) NULL COMMENT '更新时间',
	version        INT    NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted        BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
	team_id         BIGINT NOT NULL COMMENT '团队ID',
	application_id  BIGINT NOT NULL COMMENT '应用ID',
	environment_id  BIGINT NOT NULL COMMENT '环境ID',
	build_type      VARCHAR(50) NULL COMMENT '构建类型（JENKINS-Jenkins构建，NATIVE-脚本部署）',
	
	-- 源Git配置（公司内部Git）
	source_git_system_id BIGINT NULL COMMENT '源Git系统ID（公司Git，关联sys_external_system，type=GIT）',
	source_git_project_id BIGINT NULL COMMENT '源Git项目ID（公司Git项目）',
	source_branch   VARCHAR(100) NULL COMMENT '源分支名称（公司Git分支）',
	
	-- 目标Git配置（客户环境Git，用于同步检测，仅SYNC_MODE模式需要）
	target_git_system_id BIGINT NULL COMMENT '目标Git系统ID（客户环境Git，关联sys_external_system）',
	target_git_project_id BIGINT NULL COMMENT '目标Git项目ID（客户环境Git项目）',
	target_branch VARCHAR(255) NULL COMMENT '目标分支名称（客户环境分支）',
	
	-- 部署配置
	deploy_system_id BIGINT NULL COMMENT '部署系统ID（关联sys_external_system，type=JENKINS），仅当build_type=JENKINS时使用',
	deploy_job   VARCHAR(100) NULL COMMENT '部署任务名称（Jenkins Job名称），仅当build_type=JENKINS时使用',
	workflow_definition_id BIGINT NULL COMMENT '工作流定义ID（关联workflow_definition）',
    
    UNIQUE INDEX uk_team_app_env (team_id, application_id, environment_id),
	INDEX          idx_team (team_id),
	INDEX          idx_application (application_id),
	INDEX          idx_environment (environment_id),
	INDEX          idx_build_type (build_type),
	INDEX          idx_source_git_system (source_git_system_id),
	INDEX          idx_deploy_system (deploy_system_id),
	INDEX          idx_deploy_job (deploy_job),
	INDEX          idx_workflow_definition (workflow_definition_id),
	INDEX          idx_target_git_system (target_git_system_id),
	CONSTRAINT fk_team_app_team FOREIGN KEY (team_id) REFERENCES deploy_team (id),
	CONSTRAINT fk_team_app_application FOREIGN KEY (application_id) REFERENCES deploy_application (id),
	CONSTRAINT fk_team_app_target_git_system FOREIGN KEY (target_git_system_id) REFERENCES sys_external_system (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队应用关联表（包含代码源和部署配置）';

-- 团队配置表
CREATE TABLE deploy_team_environment_config
(
	id                       BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by                VARCHAR(100) NULL COMMENT '创建人',
	create_time              DATETIME(6) NULL COMMENT '创建时间',
	update_by                VARCHAR(100) NULL COMMENT '更新人',
	update_time              DATETIME(6) NULL COMMENT '更新时间',
	version                  INT    NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted                  BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
	team_id                  BIGINT NOT NULL COMMENT '团队ID',
	environment_id           BIGINT NOT NULL COMMENT '环境ID',
    
    -- 审批配置
	approval_required        BIT    NOT NULL DEFAULT 0 COMMENT '是否需要审批',
	approver_user_ids        JSON NULL COMMENT '审批人用户ID列表，如：[1, 4, 7]',
    
    -- 安全策略
	require_code_review      BIT    NOT NULL DEFAULT 0 COMMENT '是否要求代码审查通过',
    
    -- 备注
	remark                   VARCHAR(500) NULL COMMENT '备注信息',
    
    UNIQUE INDEX uk_team_env (team_id, environment_id),
	INDEX idx_team (team_id),
	INDEX idx_env (environment_id),
	INDEX idx_deleted (deleted),
	CONSTRAINT fk_team_env_config_team FOREIGN KEY (team_id) REFERENCES deploy_team (id),
	CONSTRAINT fk_team_env_config_env FOREIGN KEY (environment_id) REFERENCES deploy_environment (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队环境配置表';

-- 团队环境通知配置表
CREATE TABLE deploy_team_environment_notification_config
(
	id                          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by                   VARCHAR(100) NULL COMMENT '创建人',
	create_time                 DATETIME(6) NULL COMMENT '创建时间',
	update_by                   VARCHAR(100) NULL COMMENT '更新人',
	update_time                 DATETIME(6) NULL COMMENT '更新时间',
	version                     INT    NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted                     BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
	team_id                                 BIGINT NOT NULL COMMENT '团队ID',
	environment_id                          BIGINT NOT NULL COMMENT '环境ID',
    
	notification_channel_id                 BIGINT NULL COMMENT '通知渠道ID（关联sys_notification_channel）',
	pre_approval_notification_enabled       BIT    NOT NULL DEFAULT 0 COMMENT '是否启用审批前提醒',
	pre_approval_notification_template_id   BIGINT NULL COMMENT '审批前提醒模板ID（关联sys_notification_template）',
	build_notification_enabled              BIT    NOT NULL DEFAULT 0 COMMENT '是否启用构建通知',
	build_notification_template_id          BIGINT NULL COMMENT '构建通知模板ID（关联sys_notification_template）',
	build_failure_file_enabled              BIT    NOT NULL DEFAULT 0 COMMENT '构建失败时是否发送日志文件（0：不发送，1：发送）',
    
	UNIQUE INDEX uk_team_env (team_id, environment_id),
	INDEX idx_team (team_id),
	INDEX idx_env (environment_id),
	INDEX idx_channel (notification_channel_id),
	INDEX idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队环境通知配置表';

-- Jenkins构建记录表
CREATE TABLE deploy_jenkins_build
(
	id                     BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by              VARCHAR(100) NULL COMMENT '创建人',
	create_time            DATETIME(6) NULL COMMENT '创建时间',
	update_by              VARCHAR(100) NULL COMMENT '更新人',
	update_time            DATETIME(6) NULL COMMENT '更新时间',
	version                INT    NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted                BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
	build_number           INT    NOT NULL COMMENT '构建编号',
	build_status           VARCHAR(50) NOT NULL COMMENT '构建状态（SUCCESS、FAILURE、UNSTABLE、ABORTED等）',
	build_url              VARCHAR(500) NOT NULL COMMENT '构建URL',
	duration               BIGINT NOT NULL COMMENT '构建持续时间（毫秒）',
	start_time             DATETIME(6) NOT NULL COMMENT '构建开始时间',
	actions                MEDIUMTEXT NULL COMMENT 'Jenkins构建动作JSON数据（可能包含大量参数、触发器等信息）',
	external_system_id     BIGINT NOT NULL COMMENT '外部系统ID（关联deploy_external_system）',
	job_id                 BIGINT NOT NULL COMMENT '任务ID（关联deploy_jenkins_job）',
    
	UNIQUE INDEX uk_job_build (job_id, build_number),
	INDEX idx_external_system (external_system_id),
	INDEX idx_job (job_id),
	INDEX idx_status (build_status),
	INDEX idx_start_time (start_time),
	INDEX idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Jenkins构建记录表';

-- Jenkins构建通知记录表（记录通知状态，防止重复通知）
CREATE TABLE deploy_jenkins_build_notification
(
	id                     BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by              VARCHAR(100) NULL COMMENT '创建人',
	create_time            DATETIME(6) NULL COMMENT '创建时间',
	update_by              VARCHAR(100) NULL COMMENT '更新人',
	update_time            DATETIME(6) NULL COMMENT '更新时间',
	version                INT    NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted                BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
	build_id               BIGINT NOT NULL COMMENT '构建记录ID（关联deploy_jenkins_build）',
	team_id                BIGINT NOT NULL COMMENT '团队ID',
	environment_id         BIGINT NOT NULL COMMENT '环境ID',
    
	build_start_notice     BIT    NOT NULL DEFAULT 0 COMMENT '构建开始是否已通知（0：未通知，1：已通知）',
	build_end_notice       BIT    NOT NULL DEFAULT 0 COMMENT '构建结束是否已通知（0：未通知，1：已通知）',
    
	UNIQUE INDEX uk_build_team_env (build_id, team_id, environment_id),
	INDEX idx_build (build_id),
	INDEX idx_team_env (team_id, environment_id),
	INDEX idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Jenkins构建通知记录表';

-- --------------------------------------------------------------------------------------
-- 通知渠道表
-- --------------------------------------------------------------------------------------

-- 通知渠道配置表
CREATE TABLE sys_notification_channel
(
    id           BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by    VARCHAR(100) NULL COMMENT '创建人',
    create_time  DATETIME(6) NULL COMMENT '创建时间',
	deleted      BIT          NOT NULL DEFAULT 0 COMMENT '是否删除（0：未删除，1：已删除）',
    update_by    VARCHAR(100) NULL COMMENT '更新人',
    update_time  DATETIME(6) NULL COMMENT '更新时间',
	version      INT          NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
    
    name         VARCHAR(100) NOT NULL COMMENT '渠道名称（如：研发部企业微信群）',
	channel_type VARCHAR(50)  NOT NULL COMMENT '渠道类型（WEWORK, FEISHU, DINGTALK, SMS, EMAIL, SLACK）',
	config       JSON         NOT NULL COMMENT '渠道配置（JSON格式，不同渠道存储不同字段）',
	enabled      BIT          NOT NULL DEFAULT 1 COMMENT '是否启用',
    description  VARCHAR(500) NULL COMMENT '描述说明',
    
	INDEX        idx_channel_type (channel_type),
	INDEX        idx_enabled (enabled),
	INDEX        idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知渠道配置表';

-- --------------------------------------------------------------------------------------
-- 定时任务管理表
-- --------------------------------------------------------------------------------------

-- 定时任务分类表
CREATE TABLE schedule_job_category
(
    id          BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by   VARCHAR(100) NULL COMMENT '创建人',
	create_time DATETIME(6) NULL COMMENT '创建时间',
    update_by   VARCHAR(100) NULL COMMENT '更新人',
	update_time DATETIME(6) NULL COMMENT '更新时间',
    version     INT          NOT NULL DEFAULT 1 COMMENT '版本号',
    deleted     BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',
    
    code        VARCHAR(50)  NOT NULL COMMENT '分类编码',
    name        VARCHAR(100) NOT NULL COMMENT '分类名称',
    description VARCHAR(500) NULL COMMENT '描述',
	icon        VARCHAR(50) NULL COMMENT '图标',
	color       VARCHAR(20) NULL COMMENT '颜色',
    enabled     BIT          NOT NULL DEFAULT 1 COMMENT '是否启用',
    sort        INT          NOT NULL DEFAULT 0 COMMENT '排序号',
    
    UNIQUE INDEX uk_code (code, deleted),
	INDEX       idx_enabled (enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时任务分类表';

-- 定时任务表
CREATE TABLE schedule_job
(
	id                 BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by          VARCHAR(100) NULL COMMENT '创建人',
	create_time        DATETIME(6) NULL COMMENT '创建时间',
	update_by          VARCHAR(100) NULL COMMENT '更新人',
	update_time        DATETIME(6) NULL COMMENT '更新时间',
	version            INT          NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted            BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',
    
	job_name           VARCHAR(100) NOT NULL COMMENT '任务名称',
	job_description    VARCHAR(500) NULL COMMENT '任务描述',
	category_id        BIGINT       NOT NULL COMMENT '任务分类ID',
    
    -- 执行配置
	bean_name          VARCHAR(100) NOT NULL COMMENT 'Spring Bean名称',
	method_name        VARCHAR(100) NOT NULL COMMENT '方法名称',
	form_definition_id BIGINT NULL COMMENT '参数表单ID',
	method_params      TEXT NULL COMMENT '方法参数JSON',
    
    -- 调度配置
	cron_expression    VARCHAR(100) NOT NULL COMMENT 'Cron表达式',
	status             VARCHAR(20)  NOT NULL DEFAULT 'ENABLED' COMMENT '任务状态：ENABLED-启用、DISABLED-禁用、PAUSED-暂停',
	concurrent         BIT          NOT NULL DEFAULT 0 COMMENT '是否允许并发执行',
    
    -- 统计信息
	last_execute_time  DATETIME(6) NULL COMMENT '上次执行时间',
	next_execute_time  DATETIME(6) NULL COMMENT '下次执行时间',
	execute_count      INT          NOT NULL DEFAULT 0 COMMENT '执行次数',
	success_count      INT          NOT NULL DEFAULT 0 COMMENT '成功次数',
	fail_count         INT          NOT NULL DEFAULT 0 COMMENT '失败次数',
    
    -- 高级配置
	timeout_seconds    INT NULL COMMENT '超时时间（秒）',
	retry_count        INT          NOT NULL DEFAULT 0 COMMENT '失败重试次数',
	alert_email        VARCHAR(500) NULL COMMENT '告警邮箱（多个用逗号分隔）',
    
    UNIQUE INDEX uk_job_name (job_name, deleted),
	INDEX              idx_category (category_id),
	INDEX              idx_status (status),
	INDEX              idx_next_execute_time (next_execute_time),
	CONSTRAINT fk_job_category FOREIGN KEY (category_id) REFERENCES schedule_job_category (id),
	CONSTRAINT fk_job_form FOREIGN KEY (form_definition_id) REFERENCES form_definition (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时任务表';

-- 定时任务执行日志表
CREATE TABLE schedule_job_log
(
	id             BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
	create_by      VARCHAR(100) NULL COMMENT '创建人',
	create_time    DATETIME(6) NULL COMMENT '创建时间',
	update_by      VARCHAR(100) NULL COMMENT '更新人',
	update_time    DATETIME(6) NULL COMMENT '更新时间',
	version        INT          NOT NULL DEFAULT 1 COMMENT '版本号',
	deleted        BIT          NOT NULL DEFAULT 0 COMMENT '是否删除',
    
	job_id         BIGINT       NOT NULL COMMENT '任务ID',
	job_name       VARCHAR(100) NOT NULL COMMENT '任务名称',
    
    -- 执行信息
	bean_name      VARCHAR(100) NOT NULL COMMENT '执行器Bean名称',
	method_name    VARCHAR(100) NOT NULL COMMENT '执行方法名称',
	method_params  TEXT NULL COMMENT '方法参数',
    
    -- 时间统计
	execute_time   DATETIME(6) NOT NULL COMMENT '开始执行时间',
	finish_time    DATETIME(6) NULL COMMENT '完成时间',
	duration       BIGINT NULL COMMENT '执行耗时（毫秒）',
    
    -- 状态信息
	status         VARCHAR(20)  NOT NULL COMMENT '执行状态：SUCCESS-成功、FAIL-失败、TIMEOUT-超时',
	result_message TEXT NULL COMMENT '执行结果消息',
	exception_info TEXT NULL COMMENT '异常堆栈信息',
    
    -- 服务器信息
	server_ip      VARCHAR(50) NULL COMMENT '执行服务器IP',
	server_host    VARCHAR(100) NULL COMMENT '执行服务器主机名',
    
	INDEX          idx_job_id (job_id),
	INDEX          idx_execute_time (execute_time),
	INDEX          idx_status (status),
	CONSTRAINT fk_log_job FOREIGN KEY (job_id) REFERENCES schedule_job (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定时任务执行日志表';

-- =====================================================
-- 服务器管理
-- =====================================================

-- 服务器分类表
CREATE TABLE deploy_server_category
(
	id          BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
	name        VARCHAR(50) NOT NULL UNIQUE COMMENT '分类名称',
	code        VARCHAR(50) NOT NULL UNIQUE COMMENT '分类编码',
	icon        VARCHAR(50) NULL COMMENT '图标',
	description VARCHAR(500) NULL COMMENT '分类描述',
	sort        INT      DEFAULT 0 COMMENT '排序',
	enabled     BOOLEAN  DEFAULT TRUE COMMENT '是否启用',
    
    -- 审计字段
	create_by   VARCHAR(50) NULL COMMENT '创建人',
	create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	update_by   VARCHAR(50) NULL COMMENT '更新人',
	update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
	version     INT      DEFAULT 1 COMMENT '版本号',
	deleted     BOOLEAN  DEFAULT FALSE COMMENT '是否删除',
    
	INDEX       idx_code (code),
	INDEX       idx_enabled (enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='服务器分类表';

-- 服务器表
CREATE TABLE deploy_server
(
	id                BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    server_name       VARCHAR(100) NOT NULL COMMENT '服务器名称',
    host_ip           VARCHAR(50)  NOT NULL UNIQUE COMMENT 'IP地址',
	ssh_port          INT         DEFAULT 22 COMMENT 'SSH端口',
	ssh_user          VARCHAR(50) NULL COMMENT 'SSH用户名',
	auth_type         VARCHAR(20) DEFAULT 'PASSWORD' COMMENT '认证方式：PASSWORD/KEY',
    ssh_password      VARCHAR(500) NULL COMMENT 'SSH密码（加密存储）',
	ssh_private_key   TEXT NULL COMMENT 'SSH私钥（加密存储）',
    ssh_passphrase    VARCHAR(500) NULL COMMENT '私钥密码（加密存储）',
	category_id       BIGINT NULL COMMENT '服务器分类ID',
	os_type           VARCHAR(20) NULL COMMENT '操作系统类型：LINUX/WINDOWS/MACOS/UNIX/OTHER',
    os_version        VARCHAR(100) NULL COMMENT '操作系统版本：CentOS 7.9',
    hostname          VARCHAR(100) NULL COMMENT '主机名',
	status            VARCHAR(20) DEFAULT 'OFFLINE' COMMENT '连接状态：ONLINE/OFFLINE',
    description       VARCHAR(500) NULL COMMENT '服务器描述',
	cpu_cores         INT NULL COMMENT 'CPU核心数',
	memory_size       INT NULL COMMENT '内存大小(GB)',
	disk_size         INT NULL COMMENT '磁盘总容量(GB)',
	disk_info         JSON NULL COMMENT '磁盘详细信息（JSON格式，包含挂载点、文件系统、容量等）',
	tags              JSON NULL COMMENT '标签（JSON格式）',
	last_connect_time DATETIME NULL COMMENT '最后连接时间',
    
    -- 审计字段
	create_by         VARCHAR(50) NULL COMMENT '创建人',
	create_time       DATETIME    DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
	update_by         VARCHAR(50) NULL COMMENT '更新人',
	update_time       DATETIME    DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
	version           INT         DEFAULT 1 COMMENT '版本号',
	deleted           BOOLEAN     DEFAULT FALSE COMMENT '是否删除',
    
	INDEX             idx_host_ip (host_ip),
	INDEX             idx_category_id (category_id),
	INDEX             idx_status (status),
	CONSTRAINT fk_server_category FOREIGN KEY (category_id) REFERENCES deploy_server_category (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='服务器管理表';

-- 服务器监控记录表
CREATE TABLE deploy_server_monitor
(
    id            BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    server_id     BIGINT NOT NULL COMMENT '服务器ID',
    
    -- 监控指标
    cpu_usage     DECIMAL(5,2) NULL COMMENT 'CPU使用率(%)',
    memory_usage  DECIMAL(5,2) NULL COMMENT '内存使用率(%)',
    memory_used   INT NULL COMMENT '已用内存(GB)',
    
    -- 磁盘使用情况（JSON）
    disk_usage    JSON NULL COMMENT '各分区使用率',
    
    -- 网络流量（可选）
    network_rx    BIGINT NULL COMMENT '网络接收(KB/s)',
    network_tx    BIGINT NULL COMMENT '网络发送(KB/s)',
    
    -- 采集时间
    collect_time  DATETIME NOT NULL COMMENT '采集时间',
    
    -- 采集状态
    status        VARCHAR(20) NOT NULL DEFAULT 'SUCCESS' COMMENT '采集状态：SUCCESS-成功, FAILURE-失败',
    
    INDEX idx_server_time (server_id, collect_time),
    INDEX idx_collect_time (collect_time),
    CONSTRAINT fk_monitor_server FOREIGN KEY (server_id) REFERENCES deploy_server (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='服务器监控记录表';

-- 服务器告警规则表
CREATE TABLE deploy_server_alert_rule
(
    id                  BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    create_by           VARCHAR(100) NULL COMMENT '创建人',
    create_time         DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_by           VARCHAR(100) NULL COMMENT '更新人',
    update_time         DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    version             INT NOT NULL DEFAULT 1 COMMENT '版本号',
    deleted             BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否删除',
    
    server_id           BIGINT NULL COMMENT '服务器ID（NULL表示全局规则）',
    rule_name           VARCHAR(100) NOT NULL COMMENT '规则名称',
    
    -- 告警类型
    alert_type          VARCHAR(20) NOT NULL COMMENT '告警类型: CPU/MEMORY/DISK',
    
    -- 阈值（支持百分比和绝对值：CPU/MEMORY/DISK为%，NETWORK为MB/s）
    warning_threshold   DECIMAL(10,2) NOT NULL COMMENT '警告阈值',
    critical_threshold  DECIMAL(10,2) NOT NULL COMMENT '严重阈值',
    
    -- 持续时间（避免误报）
    duration_minutes    INT DEFAULT 5 COMMENT '持续时长(分钟)',
    
    -- 是否启用
    enabled             BOOLEAN DEFAULT TRUE COMMENT '是否启用',
    
    -- 描述
    description         VARCHAR(500) NULL COMMENT '规则描述',
    
    INDEX idx_server (server_id),
    INDEX idx_type (alert_type),
    INDEX idx_enabled (enabled),
    CONSTRAINT fk_alert_rule_server FOREIGN KEY (server_id) REFERENCES deploy_server (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='服务器告警规则表';

-- 服务器告警记录表
CREATE TABLE deploy_server_alert_log
(
    id                  BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    server_id           BIGINT NOT NULL COMMENT '服务器ID',
    rule_id             BIGINT NULL COMMENT '规则ID',
    
    -- 告警信息
    alert_type          VARCHAR(20) NOT NULL COMMENT '告警类型: CPU/MEMORY/DISK',
    alert_level         VARCHAR(20) NOT NULL COMMENT '告警级别: WARNING/CRITICAL',
    alert_value         DECIMAL(5,2) NOT NULL COMMENT '当前值',
    threshold_value     DECIMAL(5,2) NOT NULL COMMENT '阈值',
    alert_message       VARCHAR(500) NULL COMMENT '告警消息',
    
    -- 告警状态
    status              VARCHAR(20) DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE/RESOLVED',
    
    -- 时间
    alert_time          DATETIME NOT NULL COMMENT '告警时间',
    resolve_time        DATETIME NULL COMMENT '恢复时间',
    
    -- 通知状态
    notified            BOOLEAN DEFAULT FALSE COMMENT '是否已通知',
    notify_time         DATETIME NULL COMMENT '通知时间',
    
    INDEX idx_server_time (server_id, alert_time),
    INDEX idx_status (status),
    INDEX idx_rule (rule_id),
    CONSTRAINT fk_alert_log_server FOREIGN KEY (server_id) REFERENCES deploy_server (id),
    CONSTRAINT fk_alert_log_rule FOREIGN KEY (rule_id) REFERENCES deploy_server_alert_rule (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='服务器告警记录表';

-- 部署记录表
CREATE TABLE deploy_record
(
    id                  BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by           VARCHAR(100) NULL COMMENT '创建人',
    create_time         DATETIME(6) NULL COMMENT '创建时间',
    update_by           VARCHAR(100) NULL COMMENT '更新人',
    update_time         DATETIME(6) NULL COMMENT '更新时间',
    version             INT    NOT NULL DEFAULT 1 COMMENT '版本号',
    deleted             BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
    workflow_instance_id BIGINT NOT NULL COMMENT '工作流实例ID（关联workflow_instance）',
    business_key         VARCHAR(64) NOT NULL COMMENT '业务标识（UUID）',
    team_application_id  BIGINT NOT NULL COMMENT '团队应用配置ID（关联deploy_team_application）',
    team_id             BIGINT NOT NULL COMMENT '团队ID',
    application_id       BIGINT NOT NULL COMMENT '应用ID',
    environment_id       BIGINT NOT NULL COMMENT '环境ID',
    deploy_by           VARCHAR(50) NULL COMMENT '部署人',
    deploy_remark       VARCHAR(500) NULL COMMENT '部署备注',
    status              VARCHAR(20) NOT NULL COMMENT '部署状态（CREATED/RUNNING/SUCCESS/FAILED等）',
    start_time          DATETIME(6) NULL COMMENT '开始时间',
    end_time            DATETIME(6) NULL COMMENT '结束时间',
    
    UNIQUE INDEX uk_workflow_instance (workflow_instance_id),
    INDEX idx_team_application (team_application_id),
    INDEX idx_application (application_id),
    INDEX idx_environment (environment_id),
    INDEX idx_status (status),
    INDEX idx_start_time (start_time),
    CONSTRAINT fk_deploy_record_instance FOREIGN KEY (workflow_instance_id) REFERENCES workflow_instance (id),
    CONSTRAINT fk_deploy_record_team_app FOREIGN KEY (team_application_id) REFERENCES deploy_team_application (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部署记录表';

-- 通知模板表
CREATE TABLE sys_notification_template
(
    id               BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by        VARCHAR(100) NULL COMMENT '创建人',
    create_time      DATETIME(6) NULL COMMENT '创建时间',
    update_by        VARCHAR(100) NULL COMMENT '更新人',
    update_time      DATETIME(6) NULL COMMENT '更新时间',
    version          INT    NOT NULL DEFAULT 1 COMMENT '版本号',
    deleted          BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
    name             VARCHAR(100) NOT NULL COMMENT '模板名称',
    code             VARCHAR(50)  NOT NULL COMMENT '模板编码',
    description      VARCHAR(500) NULL COMMENT '模板描述',
    channel_type     VARCHAR(20)  NOT NULL COMMENT '渠道类型',
    title_template   VARCHAR(200) NULL COMMENT '标题模板（FreeMarker格式，可选）',
    content_template TEXT         NOT NULL COMMENT '内容模板',
    enabled          BIT          NOT NULL DEFAULT 1 COMMENT '是否启用',
    template_config  JSON         NULL COMMENT '模板配置',
    
    UNIQUE KEY uk_code (code),
    KEY idx_channel_type (channel_type),
    KEY idx_enabled (enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知模板表';

-- SSH终端审计日志表
CREATE TABLE deploy_ssh_audit_log
(
    id                 BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by          VARCHAR(100) NULL COMMENT '创建人',
    create_time        DATETIME(6) NULL COMMENT '创建时间',
    update_by          VARCHAR(100) NULL COMMENT '更新人',
    update_time        DATETIME(6) NULL COMMENT '更新时间',
    version            INT    NOT NULL DEFAULT 1 COMMENT '版本号',
    deleted            BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
    -- 基本信息
    user_id            BIGINT       NOT NULL COMMENT '用户ID',
    username           VARCHAR(50)  NULL COMMENT '用户名（冗余）',
    server_id          BIGINT       NOT NULL COMMENT '服务器ID',
    server_name        VARCHAR(100) NULL COMMENT '服务器名称（冗余）',
    server_ip          VARCHAR(50)  NULL COMMENT '服务器IP（冗余）',
    
    -- 会话信息
    session_id         VARCHAR(100) NOT NULL COMMENT 'WebSocket会话ID',
    connect_time       DATETIME(6)  NOT NULL COMMENT '连接时间',
    disconnect_time    DATETIME(6)  NULL COMMENT '断开时间',
    duration_seconds   INT          NULL COMMENT '会话时长（秒）',
    
    -- 客户端信息
    client_ip          VARCHAR(50)  NULL COMMENT '客户端IP',
    user_agent         VARCHAR(500) NULL COMMENT '浏览器UA',
    
    -- 操作记录
    command_count      INT          NOT NULL DEFAULT 0 COMMENT '执行命令数量',
    commands           LONGTEXT     NULL COMMENT '执行的命令记录（JSON数组）',
    
    -- 状态
    status             VARCHAR(20)  NULL COMMENT 'SUCCESS成功, FAILED失败, TIMEOUT超时, INTERRUPTED中断',
    error_message      VARCHAR(500) NULL COMMENT '错误信息',
    
    KEY idx_user_id (user_id),
    KEY idx_server_id (server_id),
    KEY idx_connect_time (connect_time),
    KEY idx_session_id (session_id),
    KEY idx_status (status)
    -- ⚠️ 审计日志表不添加外键约束，原因：
    -- 1. 审计日志需要永久保留（逻辑删除）
    -- 2. 删除用户/服务器时，审计日志不应被物理删除
    -- 3. user_id/server_id 仅作为历史记录字段，通过冗余字段可查询
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SSH终端审计日志表';

-- 系统版本发布记录表
CREATE TABLE system_release
(
    id           BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
    create_by    VARCHAR(100) NULL COMMENT '创建人',
    create_time  DATETIME(6) NULL COMMENT '创建时间',
    update_by    VARCHAR(100) NULL COMMENT '更新人',
    update_time  DATETIME(6) NULL COMMENT '更新时间',
    version      INT    NOT NULL DEFAULT 1 COMMENT '乐观锁版本号',
    deleted      BIT    NOT NULL DEFAULT 0 COMMENT '是否删除',
    
    release_version DECIMAL(10,2)  NOT NULL COMMENT '发布版本号（如 1.50）',
    module          VARCHAR(20)  NOT NULL COMMENT '模块类型：BACKEND/FRONTEND/ALL',
    release_date    DATETIME(6)  NOT NULL COMMENT '发布时间',
    changes         TEXT         NULL COMMENT '变更内容（换行分隔）',
    notified        BIT          NOT NULL DEFAULT 0 COMMENT '是否已发送版本发布通知',
    delay_minutes   INT          NULL COMMENT '延迟执行分钟数（创建后多久开始维护，为空则不触发维护）',
    estimated_duration INT       NULL COMMENT '预计维护时长（分钟）',
    enable_auto_shutdown BIT     NOT NULL DEFAULT 0 COMMENT '是否自动停止服务',
    KEY idx_release_date (release_date),
    KEY idx_notified (notified),
    KEY idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统版本发布记录表';
