-- MySQL dump 10.13  Distrib 8.0.41, for Win64 (x86_64)
--
-- Host: 212.64.112.158    Database: gotest
-- ------------------------------------------------------
-- Server version	5.7.44-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `gotest`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `gotest` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `gotest`;

--
-- Table structure for table `sys_access_log`
--

DROP TABLE IF EXISTS `sys_access_log`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_access_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `tenant_id` int(11) NOT NULL DEFAULT '0',
  `user_id` int(11) NOT NULL DEFAULT '0',
  `username` varchar(255) NOT NULL DEFAULT '',
  `module` varchar(255) NOT NULL DEFAULT '',
  `resource_type` varchar(255) NOT NULL DEFAULT '',
  `resource_id` int(11) DEFAULT NULL,
  `request_url` varchar(255) DEFAULT NULL,
  `query_string` longtext,
  `ip_address` varchar(255) DEFAULT NULL,
  `user_agent` varchar(255) DEFAULT NULL,
  `request_method` varchar(255) DEFAULT NULL,
  `duration` int(11) DEFAULT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sys_dict_item`
--

DROP TABLE IF EXISTS `sys_dict_item`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_dict_item` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `dict_type_id` bigint(20) NOT NULL COMMENT '字典类型ID',
  `dict_label` varchar(100) NOT NULL COMMENT '字典标签（显示值，如 正常）',
  `dict_value` varchar(100) NOT NULL COMMENT '字典值（存储值，如 1）',
  `parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父级字典项ID（0表示一级项）',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态（0-禁用，1-启用）',
  `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序号',
  `color` varchar(20) DEFAULT NULL COMMENT '颜色标记（如 #1890ff）',
  `icon` varchar(50) DEFAULT NULL COMMENT '图标（如 el-icon-success）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除（0-未删，1-已删）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_dict_type_value` (`dict_type_id`,`dict_value`,`is_deleted`),
  KEY `idx_dict_type_parent_status` (`dict_type_id`,`parent_id`,`status`,`is_deleted`),
  KEY `idx_parent_id` (`parent_id`,`status`,`is_deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb4 COMMENT='字典项表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sys_dict_type`
--

DROP TABLE IF EXISTS `sys_dict_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_dict_type` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID（0表示平台字典，>0表示租户字典）',
  `dict_code` varchar(50) NOT NULL COMMENT '字典编码（唯一，如 USER_STATUS）',
  `dict_name` varchar(100) NOT NULL COMMENT '字典名称（如 用户状态）',
  `parent_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '父级字典ID（0表示一级字典）',
  `is_global` tinyint(4) DEFAULT '0' COMMENT '是否全局0-否 1-是',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态（0-禁用，1-启用）',
  `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序号',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除（0-未删，1-已删）',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_dict_code_tenant` (`dict_code`,`is_deleted`),
  KEY `idx_parent_id` (`parent_id`,`is_deleted`),
  KEY `idx_status` (`status`,`is_deleted`),
  KEY `idx_tenant_id` (`tenant_id`,`is_deleted`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sys_feedback`
--

DROP TABLE IF EXISTS `sys_feedback`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_feedback` (
  `id` varchar(36) NOT NULL COMMENT 'ID',
  `tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
  `feedback_name` varchar(50) DEFAULT '' COMMENT '反馈人姓名',
  `module` varchar(30) NOT NULL COMMENT '反馈对应模块',
  `feedback_type` varchar(20) NOT NULL COMMENT '反馈类型',
  `content` text NOT NULL COMMENT '反馈详细内容',
  `attachment_url` varchar(255) DEFAULT '' COMMENT '附件URL',
  `handle_status` varchar(20) NOT NULL DEFAULT '0' COMMENT '处理状态（0-待处理/1-处理中/2-已解决/3-已驳回/4-无需处理）',
  `handle_remark` text COMMENT '处理备注（移除默认值，TEXT类型不支持）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引，优化租户级查询',
  KEY `idx_module` (`module`) COMMENT '模块索引，优化模块级反馈统计',
  KEY `idx_handle_status` (`handle_status`) COMMENT '处理状态索引，优化待处理反馈查询',
  KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引，优化时间范围查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用反馈表（支持租户隔离、软删除）';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `sys_operation_log`
--

DROP TABLE IF EXISTS `sys_operation_log`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_operation_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  `tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID（0表示平台操作，>0表示租户操作）',
  `user_id` int(11) NOT NULL COMMENT '操作用户ID',
  `username` varchar(50) NOT NULL COMMENT '操作用户名',
  `module` varchar(100) NOT NULL COMMENT '操作模块（user/tenant/dict/role等）',
  `resource_type` varchar(50) NOT NULL COMMENT '资源类型（如User/Tenant/Dict等）',
  `resource_id` int(11) DEFAULT NULL COMMENT '资源ID（如被操作的用户ID、租户ID等）',
  `operation` varchar(20) NOT NULL COMMENT '操作类型（CREATE/UPDATE/DELETE/LOGIN/LOGOUT/VIEW等）',
  `description` varchar(500) DEFAULT NULL COMMENT '操作描述',
  `old_value` longtext COMMENT '修改前的值（JSON格式，用于UPDATE操作）',
  `new_value` longtext COMMENT '修改后的值（JSON格式，用于UPDATE操作）',
  `ip_address` varchar(50) DEFAULT NULL COMMENT 'IP地址',
  `user_agent` varchar(500) DEFAULT NULL COMMENT '用户代理信息',
  `request_method` varchar(10) DEFAULT NULL COMMENT '请求方法（GET/POST/PUT/DELETE等）',
  `request_url` varchar(500) DEFAULT NULL COMMENT '请求URL',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1-成功，0-失败',
  `error_message` text COMMENT '错误信息',
  `duration` int(11) DEFAULT NULL COMMENT '执行时长（毫秒）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_module` (`module`),
  KEY `idx_resource_type` (`resource_type`),
  KEY `idx_resource_id` (`resource_id`),
  KEY `idx_operation` (`operation`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_tenant_user_time` (`tenant_id`,`user_id`,`create_time`),
  KEY `idx_tenant_module_time` (`tenant_id`,`module`,`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=86 DEFAULT CHARSET=utf8mb4 COMMENT='系统操作日志表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_exam`
--

DROP TABLE IF EXISTS `yz_exam`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_exam` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '考试唯一标识',
  `tenant_id` int(11) NOT NULL COMMENT '租户ID（多租户隔离）',
  `category_id` int(11) NOT NULL COMMENT '关联考试分类表ID',
  `exam_name` varchar(100) NOT NULL COMMENT '考试名称',
  `exam_desc` varchar(500) DEFAULT '' COMMENT '考试描述',
  `exam_time` datetime NOT NULL COMMENT '考试开始时间',
  `exam_duration` int(11) NOT NULL COMMENT '考试时长（分钟）',
  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '考试状态（0-未开始，1-进行中，2-已结束，3-已取消）',
  `create_by` int(11) NOT NULL COMMENT '创建人ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_category_status` (`tenant_id`,`category_id`,`status`),
  KEY `idx_tenant_create_by` (`tenant_id`,`create_by`),
  KEY `fk_yz_exam_category` (`category_id`),
  CONSTRAINT `fk_yz_exam_category` FOREIGN KEY (`category_id`) REFERENCES `yz_exam_category` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_yz_exam_tenant` FOREIGN KEY (`tenant_id`) REFERENCES `yz_tenants` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试主表（关联分类+租户隔离）';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_exam_category`
--

DROP TABLE IF EXISTS `yz_exam_category`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_exam_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类唯一标识',
  `tenant_id` int(11) NOT NULL COMMENT '租户ID（多租户隔离）',
  `category_name` varchar(50) NOT NULL COMMENT '分类名称',
  `parent_id` int(11) DEFAULT '0' COMMENT '父分类ID，0表示一级分类',
  `sort_order` tinyint(4) DEFAULT '0' COMMENT '排序序号',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态（1-启用，0-禁用）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_parent` (`tenant_id`,`parent_id`),
  KEY `idx_tenant_status` (`tenant_id`,`status`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试分类表（含多租户隔离）';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_exam_question_bank`
--

DROP TABLE IF EXISTS `yz_exam_question_bank`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_exam_question_bank` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '题库ID',
  `tenant_id` int(11) NOT NULL COMMENT '租户ID（多租户隔离）',
  `bank_name` varchar(100) NOT NULL COMMENT '题库名称',
  `bank_desc` varchar(500) DEFAULT '' COMMENT '题库描述',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态（1-启用，0-禁用）',
  `sort_order` int(11) NOT NULL DEFAULT '0' COMMENT '排序序号',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间（软删除）',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_status` (`tenant_id`,`status`),
  KEY `idx_tenant_name` (`tenant_id`,`bank_name`),
  KEY `idx_delete_time` (`delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试题库表（支持租户隔离、软删除）';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_exam_users`
--

DROP TABLE IF EXISTS `yz_exam_users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_exam_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户唯一标识',
  `tenant_id` int(11) NOT NULL COMMENT '租户ID（多租户隔离）',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `real_name` varchar(50) DEFAULT '' COMMENT '真实姓名',
  `mobile` varchar(20) DEFAULT '' COMMENT '手机号',
  `email` varchar(100) DEFAULT '' COMMENT '邮箱',
  `user_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '用户类型（1-学生，2-教师，3-管理员）',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '账号状态（1-正常，0-禁用，2-冻结）',
  `password` varchar(100) NOT NULL COMMENT '加密后密码（salt+明文密码哈希）',
  `salt` varchar(50) NOT NULL COMMENT '密码盐值',
  `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_username` (`tenant_id`,`username`),
  UNIQUE KEY `uk_salt` (`salt`) USING BTREE,
  UNIQUE KEY `uk_tenant_mobile` (`tenant_id`,`mobile`) USING BTREE,
  KEY `idx_tenant_username` (`tenant_id`,`username`),
  KEY `idx_tenant_type_status` (`tenant_id`,`user_type`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试用户表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_files`
--

DROP TABLE IF EXISTS `yz_files`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_files` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '文件ID',
  `tenant_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
  `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '用户ID',
  `file_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件名称',
  `original_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始文件名',
  `file_path` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件存储路径',
  `file_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件访问URL',
  `file_size` bigint(20) NOT NULL DEFAULT '0' COMMENT '文件大小(字节)',
  `file_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件类型',
  `file_ext` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件扩展名',
  `md5` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件MD5值，用于去重',
  `category` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件分类',
  `sub_category` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '子分类',
  `status` tinyint(4) DEFAULT '1' COMMENT '状态(1:正常, 0:删除)',
  `is_public` tinyint(4) DEFAULT '0' COMMENT '是否公开(1:是, 0:否)',
  `upload_by` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '上传人',
  `upload_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant` (`tenant_id`),
  KEY `idx_user` (`user_id`),
  KEY `idx_category` (`category`),
  KEY `idx_upload_time` (`upload_time`),
  KEY `idx_status` (`status`),
  KEY `idx_md5` (`md5`),
  KEY `idx_original_name` (`original_name`)
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_knowledge`
--

DROP TABLE IF EXISTS `yz_knowledge`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_knowledge` (
  `knowledge_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '知识ID',
  `tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
  `title` varchar(200) NOT NULL COMMENT '标题',
  `category_id` int(11) DEFAULT NULL COMMENT '分类ID',
  `tags` text COMMENT '标签JSON数组，存储标签名称',
  `author` varchar(50) NOT NULL COMMENT '作者',
  `content` longtext COMMENT '正文内容（富文本）',
  `summary` varchar(500) DEFAULT NULL COMMENT '摘要',
  `cover_url` varchar(500) DEFAULT NULL COMMENT '封面图片URL',
  `status` tinyint(4) DEFAULT '0' COMMENT '状态：0-草稿，1-已发布，2-已归档',
  `share` int(10) DEFAULT '0' COMMENT '是否共享 0-不共享 1-共享',
  `view_count` int(11) DEFAULT '0' COMMENT '查看次数',
  `like_count` int(11) DEFAULT '0' COMMENT '点赞数',
  `is_recommend` tinyint(4) DEFAULT '0' COMMENT '是否推荐：0-否，1-是',
  `is_top` tinyint(4) DEFAULT '0' COMMENT '是否置顶：0-否，1-是',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `delete_by` varchar(255) DEFAULT NULL COMMENT '删除人',
  PRIMARY KEY (`knowledge_id`),
  KEY `idx_category_id` (`category_id`),
  KEY `idx_author` (`author`),
  KEY `idx_status` (`status`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_view_count` (`view_count`),
  KEY `idx_is_recommend` (`is_recommend`),
  KEY `idx_is_top` (`is_top`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COMMENT='知识库内容表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_knowledge_category`
--

DROP TABLE IF EXISTS `yz_knowledge_category`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_knowledge_category` (
  `category_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类ID',
  `tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
  `category_name` varchar(100) NOT NULL COMMENT '分类名称',
  `category_desc` varchar(500) DEFAULT NULL COMMENT '分类描述',
  `parent_id` int(11) DEFAULT '0' COMMENT '父分类ID，0表示顶级分类',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序序号',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`category_id`),
  KEY `idx_parent_id` (`parent_id`),
  KEY `idx_sort_order` (`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COMMENT='知识库分类表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_knowledge_favorites`
--

DROP TABLE IF EXISTS `yz_knowledge_favorites`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_knowledge_favorites` (
  `favorite_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '收藏ID',
  `knowledge_id` int(11) NOT NULL COMMENT '知识ID',
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  `tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`favorite_id`),
  UNIQUE KEY `uk_knowledge_user` (`knowledge_id`,`user_id`),
  KEY `idx_user_id` (`user_id`),
  CONSTRAINT `yz_fk_fav_knowledge` FOREIGN KEY (`knowledge_id`) REFERENCES `yz_knowledge` (`knowledge_id`) ON DELETE CASCADE,
  CONSTRAINT `yz_fk_fav_user` FOREIGN KEY (`user_id`) REFERENCES `yz_users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='知识库收藏表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_knowledge_tags`
--

DROP TABLE IF EXISTS `yz_knowledge_tags`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_knowledge_tags` (
  `tag_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标签ID',
  `tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
  `tag_name` varchar(50) NOT NULL COMMENT '标签名称',
  `tag_background` varchar(20) DEFAULT NULL COMMENT '标签背景',
  `tag_color` varchar(20) DEFAULT NULL COMMENT '标签颜色',
  `usage_count` int(11) DEFAULT '0' COMMENT '使用次数',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`tag_id`),
  UNIQUE KEY `uk_tag_name` (`tag_name`),
  KEY `idx_usage_count` (`usage_count`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COMMENT='知识库标签表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_menus`
--

DROP TABLE IF EXISTS `yz_menus`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_menus` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
  `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称',
  `path` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单路径',
  `parent_id` int(11) DEFAULT '0' COMMENT '父菜单ID，0表示顶级菜单',
  `icon` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单图标',
  `order` int(11) DEFAULT '0' COMMENT '排序序号',
  `status` tinyint(4) DEFAULT '1' COMMENT '状态：0-禁用，1-启用',
  `is_show` int(11) DEFAULT NULL COMMENT '是否显示 0-不显示 1-显示',
  `component_path` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '组件路径',
  `is_external` tinyint(4) DEFAULT '0' COMMENT '是否外部链接：0-内部路由，1-外部链接',
  `external_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '外部链接地址',
  `menu_type` tinyint(4) DEFAULT '1' COMMENT '菜单类型：1-页面菜单，2-目录菜单，3-权限按钮',
  `permission` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '权限标识',
  `description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单描述',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间（软删除）',
  `create_by` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`),
  KEY `idx_parent_id` (`parent_id`),
  KEY `idx_status` (`status`),
  KEY `idx_order` (`order`),
  KEY `idx_menu_type` (`menu_type`),
  KEY `idx_delete_time` (`delete_time`)
) ENGINE=InnoDB AUTO_INCREMENT=136 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表（增强版）';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_program_category`
--

DROP TABLE IF EXISTS `yz_program_category`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_program_category` (
  `category_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类ID',
  `category_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类名称',
  `category_desc` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分类描述',
  `parent_id` int(11) DEFAULT '0' COMMENT '父分类ID，0表示顶级分类',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序序号，用于展示顺序',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`category_id`),
  KEY `idx_parent_id` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='程序分类表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_program_info`
--

DROP TABLE IF EXISTS `yz_program_info`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_program_info` (
  `program_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '程序ID',
  `category_id` int(11) NOT NULL COMMENT '所属分类ID',
  `program_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '程序名称',
  `program_desc` text COLLATE utf8mb4_unicode_ci COMMENT '程序描述',
  `jump_url` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '跳转地址',
  `icon_url` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '程序图标地址',
  `version` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '程序版本',
  `status` tinyint(4) DEFAULT '1' COMMENT '状态：0-禁用，1-启用',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序序号，用于展示顺序',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`program_id`),
  KEY `idx_category_id` (`category_id`),
  KEY `idx_status` (`status`),
  CONSTRAINT `yz_fk_program_category` FOREIGN KEY (`category_id`) REFERENCES `yz_program_category` (`category_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='程序信息表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_roles`
--

DROP TABLE IF EXISTS `yz_roles`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_roles` (
  `role_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
  `tenant_id` int(11) NOT NULL COMMENT '租户ID 0-全局角色 其他-各租户自设角色',
  `role_code` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色代码',
  `role_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称',
  `description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '角色描述',
  `menu_ids` json DEFAULT NULL COMMENT '菜单权限ID数组，JSON格式存储',
  `status` tinyint(4) DEFAULT '1' COMMENT '角色状态：0-禁用，1-启用',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序序号',
  `default` tinyint(4) NOT NULL DEFAULT '0' COMMENT '角色显示范围：0-全局展示，1-平台用户展示(yz_users)，2-租户用户展示(yz_tenant_employees)',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `create_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`role_id`),
  UNIQUE KEY `uk_role_code` (`role_code`),
  KEY `idx_status` (`status`),
  KEY `idx_sort_order` (`sort_order`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_delete_time` (`delete_time`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_tenant_crm_contact`
--

DROP TABLE IF EXISTS `yz_tenant_crm_contact`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_crm_contact` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
  `tenant_id` bigint(20) NOT NULL COMMENT '租户ID（关联租户表，隔离数据）',
  `related_type` tinyint(4) NOT NULL COMMENT '关联类型：1=客户，2=供应商（区分联系人归属）',
  `related_id` bigint(20) NOT NULL COMMENT '关联ID（关联yz_tenant_crm_customer.id或yz_tenant_crm_supplier.id）',
  `contact_name` varchar(50) NOT NULL COMMENT '联系人姓名',
  `gender` tinyint(4) DEFAULT '0' COMMENT '性别：0=未知，1=男，2=女',
  `mobile` varchar(20) DEFAULT NULL COMMENT '手机号（唯一索引，避免重复）',
  `phone` varchar(20) DEFAULT NULL COMMENT '固定电话',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `position` varchar(50) DEFAULT NULL COMMENT '职位（如：项目经理、采购负责人）',
  `department` varchar(50) DEFAULT NULL COMMENT '所属部门',
  `is_primary` tinyint(4) DEFAULT '0' COMMENT '是否主联系人：0=否，1=是（一个客户/供应商可设一个主联系人）',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注（如：关键决策人、对接优先级等）',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建人ID（关联用户表）',
  `update_by` bigint(20) DEFAULT NULL COMMENT '更新人ID（关联用户表）',
  `is_deleted` tinyint(4) DEFAULT '0' COMMENT '逻辑删除：0=正常，1=删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_mobile` (`tenant_id`,`mobile`) COMMENT '同一租户内手机号唯一',
  KEY `idx_tenant_related` (`tenant_id`,`related_type`,`related_id`) COMMENT '查询租户下某客户/供应商的所有联系人',
  KEY `idx_contact_name` (`tenant_id`,`contact_name`) COMMENT '按姓名模糊查询联系人'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户CRM联系人表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_tenant_crm_customer`
--

DROP TABLE IF EXISTS `yz_tenant_crm_customer`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_crm_customer` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
  `tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
  `customer_name` varchar(100) NOT NULL COMMENT '客户名称（企业/个人名称）',
  `customer_type` varchar(20) NOT NULL COMMENT '客户类型（1-企业/2-政府机构/3-国企/4-个人）',
  `contact_person` varchar(50) NOT NULL COMMENT '联系人姓名',
  `contact_phone` varchar(20) NOT NULL COMMENT '联系人电话',
  `contact_email` varchar(100) DEFAULT '' COMMENT '联系人邮箱',
  `customer_level` varchar(20) DEFAULT '3' COMMENT '客户等级（1-核心客户/2-重要客户/3-普通客户/4-潜在客户）',
  `industry` varchar(50) DEFAULT '' COMMENT '所属行业（如：互联网、金融、制造业、教育等）',
  `address` varchar(255) DEFAULT '' COMMENT '客户地址（详细地址）',
  `register_time` date DEFAULT NULL COMMENT '客户注册/合作起始日期',
  `expire_time` date DEFAULT NULL COMMENT '合作到期日期（无到期则为空）',
  `status` varchar(20) NOT NULL DEFAULT '1' COMMENT '客户状态（0-禁用/1-正常/2-冻结/3-已注销）',
  `remark` text COMMENT '客户备注',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引，优化多租户隔离查询',
  KEY `idx_customer_name` (`customer_name`) COMMENT '客户名称索引，优化按名称模糊查询',
  KEY `idx_contact_phone` (`contact_phone`) COMMENT '联系人电话索引，优化按电话精准查询',
  KEY `idx_status` (`status`) COMMENT '客户状态索引，优化按状态筛选（如：查询正常客户）',
  KEY `idx_register_time` (`register_time`) COMMENT '注册时间索引，优化按合作时间范围查询'
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COMMENT='客户管理表（支持租户隔离、软删除、客户全生命周期追踪）';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_tenant_crm_supplier`
--

DROP TABLE IF EXISTS `yz_tenant_crm_supplier`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_crm_supplier` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
  `tenant_id` varchar(64) NOT NULL COMMENT '租户ID',
  `supplier_name` varchar(100) NOT NULL COMMENT '供应商名称（企业/个人名称）',
  `supplier_type` varchar(20) NOT NULL COMMENT '供应商类型',
  `contact_person` varchar(50) NOT NULL COMMENT '联系人姓名',
  `contact_phone` varchar(20) NOT NULL COMMENT '联系人电话',
  `contact_email` varchar(100) DEFAULT '' COMMENT '联系人邮箱',
  `supplier_level` varchar(20) DEFAULT '3' COMMENT '供应商等级（1-核心供应商/2-重要供应商/3-普通供应商/4-潜在供应商）',
  `industry` varchar(50) DEFAULT '' COMMENT '所属行业',
  `address` varchar(255) DEFAULT '' COMMENT '供应商地址',
  `register_time` date DEFAULT NULL COMMENT '供应商注册/合作起始日期',
  `expire_time` date DEFAULT NULL COMMENT '合作到期日期',
  `status` varchar(20) NOT NULL DEFAULT '1' COMMENT '供应商状态（0-禁用/1-正常/2-冻结/3-已注销）',
  `remark` text COMMENT '供应商备注',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引，优化多租户隔离查询',
  KEY `idx_supplier_name` (`supplier_name`) COMMENT '供应商名称索引，优化按名称模糊查询',
  KEY `idx_contact_phone` (`contact_phone`) COMMENT '联系人电话索引，优化按电话精准查询',
  KEY `idx_status` (`status`) COMMENT '供应商状态索引，优化按状态筛选',
  KEY `idx_register_time` (`register_time`) COMMENT '注册时间索引，优化按合作时间范围查询'
) ENGINE=InnoDB AUTO_INCREMENT=501 DEFAULT CHARSET=utf8mb4 COMMENT='供应商管理表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_tenant_departments`
--

DROP TABLE IF EXISTS `yz_tenant_departments`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_departments` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
  `tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID',
  `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '部门名称',
  `code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '部门编码',
  `parent_id` int(11) DEFAULT '0' COMMENT '父部门ID，0表示顶级部门',
  `description` text COLLATE utf8mb4_unicode_ci COMMENT '部门描述',
  `manager_id` int(11) DEFAULT NULL COMMENT '部门经理ID',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序序号',
  `status` tinyint(4) DEFAULT '1' COMMENT '状态：1-启用，0-禁用',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间（软删除）',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_code` (`code`),
  KEY `idx_parent_id` (`parent_id`),
  KEY `idx_status` (`status`),
  KEY `idx_sort_order` (`sort_order`),
  KEY `idx_delete_time` (`delete_time`),
  KEY `idx_tenant_delete` (`tenant_id`,`delete_time`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_tenant_employees`
--

DROP TABLE IF EXISTS `yz_tenant_employees`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_employees` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
  `tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID',
  `employee_no` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '工号',
  `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',
  `phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机号',
  `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
  `department_id` int(11) DEFAULT NULL COMMENT '部门ID',
  `position_id` int(11) DEFAULT NULL COMMENT '职位ID',
  `role` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户角色',
  `bank_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '工资卡开户行',
  `bank_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '工资卡卡号',
  `password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登录密码（加密后）',
  `salt` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码盐值',
  `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
  `last_login_ip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后登录IP',
  `status` tinyint(4) DEFAULT '1' COMMENT '状态：1-在职，0-离职',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间（软删除）',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_employee_no` (`employee_no`),
  KEY `idx_name` (`name`),
  KEY `idx_department_id` (`department_id`),
  KEY `idx_position_id` (`position_id`),
  KEY `idx_status` (`status`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='员工表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_tenant_positions`
--

DROP TABLE IF EXISTS `yz_tenant_positions`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_positions` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '职位ID',
  `tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '租户ID',
  `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '职位名称',
  `code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '职位编码',
  `department_id` int(11) DEFAULT NULL COMMENT '所属部门ID',
  `level` int(11) DEFAULT '0' COMMENT '职位级别',
  `description` text COLLATE utf8mb4_unicode_ci COMMENT '职位描述',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序序号',
  `status` tinyint(4) DEFAULT '1' COMMENT '状态：1-启用，0-禁用',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间（软删除）',
  PRIMARY KEY (`id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_code` (`code`),
  KEY `idx_department_id` (`department_id`),
  KEY `idx_status` (`status`),
  KEY `idx_sort_order` (`sort_order`),
  KEY `idx_delete_time` (`delete_time`),
  KEY `idx_dept_delete_status` (`department_id`,`delete_time`,`status`)
) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职位表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_tenant_tasks`
--

DROP TABLE IF EXISTS `yz_tenant_tasks`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenant_tasks` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID（主键）',
  `tenant_id` bigint(20) NOT NULL COMMENT '租户ID（多租户隔离，如无多租户需求可设为默认1）',
  `task_no` varchar(64) NOT NULL COMMENT '任务编号（唯一标识，如TASK20251112001）',
  `task_name` varchar(255) NOT NULL COMMENT '任务名称',
  `task_desc` text COMMENT '任务描述（富文本内容，支持图片/表格）',
  `task_type` varchar(32) DEFAULT 'common' COMMENT '任务类型（common=普通任务，project=项目任务，repeat=重复任务，可自定义）',
  `business_tag` varchar(64) DEFAULT NULL COMMENT '业务标签（多个标签用逗号分隔，如"紧急,日常协作"）',
  `parent_task_id` bigint(20) DEFAULT NULL COMMENT '父任务ID（子任务关联用，无父任务则为NULL）',
  `project_id` bigint(20) DEFAULT NULL COMMENT '关联项目ID（关联OA项目模块）',
  `related_id` bigint(20) DEFAULT NULL COMMENT '关联其他模块ID（如审批单ID、客户ID）',
  `related_type` varchar(32) DEFAULT NULL COMMENT '关联模块类型（approval=审批单，customer=客户，为空则无关联）',
  `team_employee_ids` varchar(500) DEFAULT NULL COMMENT '团队成员',
  `creator_id` bigint(20) NOT NULL COMMENT '创建人ID',
  `creator_name` varchar(64) NOT NULL COMMENT '创建人姓名',
  `principal_id` bigint(20) NOT NULL COMMENT '负责人ID',
  `principal_name` varchar(64) NOT NULL COMMENT '负责人姓名',
  `participant_ids` varchar(512) DEFAULT NULL COMMENT '参与人ID（多个用逗号分隔）',
  `participant_names` varchar(512) DEFAULT NULL COMMENT '参与人姓名（多个用逗号分隔）',
  `cc_ids` varchar(512) DEFAULT NULL COMMENT '抄送人ID（多个用逗号分隔）',
  `cc_names` varchar(512) DEFAULT NULL COMMENT '抄送人姓名（多个用逗号分隔）',
  `plan_start_time` datetime DEFAULT NULL COMMENT '计划开始时间',
  `plan_end_time` datetime NOT NULL COMMENT '计划截止时间',
  `actual_start_time` datetime DEFAULT NULL COMMENT '实际开始时间',
  `actual_end_time` datetime DEFAULT NULL COMMENT '实际结束时间',
  `estimated_hours` decimal(10,2) DEFAULT NULL COMMENT '预估工时（小时）',
  `actual_hours` decimal(10,2) DEFAULT NULL COMMENT '实际工时（小时）',
  `task_status` varchar(32) NOT NULL DEFAULT 'not_started' COMMENT '任务状态（0-未开始，1-进行中，2-暂停，3-已完成，4-已关闭）',
  `priority` varchar(16) NOT NULL DEFAULT 'medium' COMMENT '优先级（0-高，1-中，2-低，3-紧急）',
  `progress` tinyint(4) NOT NULL DEFAULT '0' COMMENT '任务进度（0-100，子任务存在时自动计算）',
  `need_approval` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否需要完成审批（0=否，1=是）',
  `approval_id` bigint(20) DEFAULT NULL COMMENT '关联审批单ID（完成审批时填写）',
  `delay_approved` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否已延期审批（0=否，1=是）',
  `old_plan_end_time` datetime DEFAULT NULL COMMENT '原计划截止时间（延期时记录）',
  `repeat_type` varchar(16) DEFAULT NULL COMMENT '重复类型（daily=按日，weekly=按周，monthly=按月，为空则非重复任务）',
  `repeat_cycle` int(11) DEFAULT NULL COMMENT '重复周期（如每周重复则为7，每月重复则为30）',
  `repeat_end_time` datetime DEFAULT NULL COMMENT '重复截止时间（重复任务终止时间）',
  `attachment_ids` varchar(1024) DEFAULT NULL COMMENT '附件ID（关联文件表，多个用逗号分隔）',
  `remark` varchar(512) DEFAULT NULL COMMENT '备注（额外说明）',
  `is_archived` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否归档（0=未归档，1=已归档）',
  `archive_time` datetime DEFAULT NULL COMMENT '归档时间',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_time` datetime DEFAULT NULL COMMENT '删除时间',
  `operator_id` bigint(20) DEFAULT NULL COMMENT '最后操作人ID',
  `operator_name` varchar(64) DEFAULT NULL COMMENT '最后操作人姓名',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_task_no` (`tenant_id`,`task_no`) COMMENT '租户+任务编号唯一索引',
  KEY `idx_tenant_principal` (`tenant_id`,`principal_id`) COMMENT '租户+负责人索引（查询个人任务）',
  KEY `idx_tenant_status` (`tenant_id`,`task_status`) COMMENT '租户+状态索引（筛选任务状态）',
  KEY `idx_tenant_project` (`tenant_id`,`project_id`) COMMENT '租户+项目索引（查询项目下任务）',
  KEY `idx_tenant_plan_end_time` (`tenant_id`,`plan_end_time`) COMMENT '租户+截止时间索引（逾期提醒、日历视图）',
  KEY `idx_parent_task_id` (`parent_task_id`) COMMENT '父任务ID索引（查询子任务）'
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='OA系统任务表（多租户适配）';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_tenants`
--

DROP TABLE IF EXISTS `yz_tenants`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_tenants` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '租户ID',
  `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户名称',
  `code` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户编码（唯一）',
  `owner` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '负责人',
  `phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '联系电话',
  `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱地址',
  `status` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '1' COMMENT '状态：1-启用，0-禁用',
  `audit_status` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'pending' COMMENT '审核状态：pending-待审核，approved-已通过，rejected-已拒绝',
  `audit_comment` text COLLATE utf8mb4_unicode_ci COMMENT '审核意见',
  `audit_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核人',
  `audit_time` datetime DEFAULT NULL COMMENT '审核时间',
  `capacity` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '分配空间容量（MB）',
  `capacity_used` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT '已用空间容量（MB）',
  `attachment_url` longtext COLLATE utf8mb4_unicode_ci COMMENT '附件',
  `remark` text COLLATE utf8mb4_unicode_ci COMMENT '备注',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `create_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`),
  KEY `idx_name` (`name`),
  KEY `idx_owner` (`owner`),
  KEY `idx_status` (`status`),
  KEY `idx_audit_status` (`audit_status`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `yz_users`
--

DROP TABLE IF EXISTS `yz_users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `yz_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `tenant_id` int(11) DEFAULT NULL COMMENT '租户ID',
  `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名',
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '加密后的密码',
  `salt` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码盐值',
  `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱地址',
  `avatar` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像URL',
  `nickname` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '昵称',
  `role` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'user' COMMENT '用户角色',
  `department_id` int(11) DEFAULT NULL COMMENT '部门ID',
  `position_id` int(11) DEFAULT NULL COMMENT '职位ID',
  `status` tinyint(4) DEFAULT '1' COMMENT '用户状态：0-禁用，1-启用',
  `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
  `last_login_ip` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后登录IP',
  `login_count` int(11) DEFAULT '0' COMMENT '登录次数',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `create_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  KEY `idx_email` (`email`),
  KEY `idx_role` (`role`),
  KEY `idx_status` (`status`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

CREATE TABLE `yz_exam_question` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '试题唯一标识',
  `tenant_id` int(11) NOT NULL COMMENT '租户ID（多租户隔离）',
  `question_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '题型（1-单选，2-多选，3-判断，4-填空，5-简答）',
  `question_title` varchar(1000) NOT NULL COMMENT '题干内容',
  `question_analysis` varchar(2000) DEFAULT '' COMMENT '试题解析',
  `score` decimal(5,2) NOT NULL DEFAULT 0.00 COMMENT '试题分值',
  `sort_order` tinyint(4) DEFAULT 0 COMMENT '排序序号',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态（1-启用，0-禁用）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间（软删除）',
  PRIMARY KEY (`id`),
  -- 核心联合索引：租户+状态+删除时间（查询可用试题）
  KEY `idx_tenant_status_delete` (`tenant_id`, `status`, `delete_time`),
  -- 联合索引：租户+题型+删除时间（筛选特定题型试题）
  KEY `idx_tenant_type_delete` (`tenant_id`, `question_type`, `delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试题主表（通用型+多租户隔离+软删除）';

CREATE TABLE `yz_exam_question_option` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '选项唯一标识',
  `tenant_id` int(11) NOT NULL COMMENT '租户ID（多租户隔离）',
  `question_id` bigint(20) NOT NULL COMMENT '关联试题主表ID',
  `option_label` varchar(10) NOT NULL COMMENT '选项标签（A/B/C/D/对/错）',
  `option_content` varchar(500) NOT NULL COMMENT '选项内容',
  `sort_order` tinyint(4) DEFAULT 0 COMMENT '排序序号',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间（软删除）',
  PRIMARY KEY (`id`),
  -- 核心联合索引：租户+试题ID+删除时间（查询某试题所有选项）
  KEY `idx_tenant_question_delete` (`tenant_id`, `question_id`, `delete_time`),
  -- 联合索引：租户+试题ID+选项标签+删除时间（快速定位选项）
  KEY `idx_tenant_question_label_delete` (`tenant_id`, `question_id`, `option_label`, `delete_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试题选项表（客观题专用+多租户隔离+软删除）';

CREATE TABLE `yz_exam_question_answer` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '答案唯一标识',
  `tenant_id` int(11) NOT NULL COMMENT '租户ID（多租户隔离）',
  `question_id` bigint(20) NOT NULL COMMENT '关联试题主表ID',
  `answer_content` varchar(1000) NOT NULL COMMENT '正确答案（客观题存标签，主观题存文字）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间（软删除）',
  PRIMARY KEY (`id`),
  -- 核心联合索引：租户+试题ID+删除时间（查询某试题正确答案）
  KEY `idx_tenant_question_delete` (`tenant_id`, `question_id`, `delete_time`),
  -- 唯一索引：同一租户下同一试题只能有一个正确答案
  UNIQUE KEY `uk_tenant_question` (`tenant_id`, `question_id`, `delete_time`) COMMENT '软删除状态下试题答案唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试题答案表（通用答案存储+多租户隔离+软删除）';