CREATE TABLE `yz_tenant_tasks` (
  -- 主键与基础标识
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID（主键）',
  `tenant_id` bigint 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) COMMENT '业务标签（多个标签用逗号分隔，如"紧急,日常协作"）',
  
  -- 关联信息
  `parent_task_id` bigint DEFAULT NULL COMMENT '父任务ID（子任务关联用，无父任务则为NULL）',
  `project_id` bigint DEFAULT NULL COMMENT '关联项目ID（关联OA项目模块）',
  `related_id` bigint DEFAULT NULL COMMENT '关联其他模块ID（如审批单ID、客户ID）',
  `related_type` varchar(32) COMMENT '关联模块类型（approval=审批单，customer=客户，为空则无关联）',
  
  -- 人员配置
  `creator_id` bigint NOT NULL COMMENT '创建人ID',
  `creator_name` varchar(64) NOT NULL COMMENT '创建人姓名',
  `principal_id` bigint NOT NULL COMMENT '负责人ID',
  `principal_name` varchar(64) NOT NULL COMMENT '负责人姓名',
  `participant_ids` varchar(512) COMMENT '参与人ID（多个用逗号分隔）',
  `participant_names` varchar(512) COMMENT '参与人姓名（多个用逗号分隔）',
  `cc_ids` varchar(512) COMMENT '抄送人ID（多个用逗号分隔）',
  `cc_names` varchar(512) 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 '任务状态（not_started=未开始，in_progress=进行中，paused=暂停，completed=已完成，closed=已关闭，可自定义）',
  `priority` varchar(16) NOT NULL DEFAULT 'medium' COMMENT '优先级（high=高，medium=中，low=低，urgent=紧急）',
  `progress` tinyint NOT NULL DEFAULT 0 COMMENT '任务进度（0-100，子任务存在时自动计算）',
  
  -- 规则与审批配置
  `need_approval` tinyint NOT NULL DEFAULT 0 COMMENT '是否需要完成审批（0=否，1=是）',
  `approval_id` bigint DEFAULT NULL COMMENT '关联审批单ID（完成审批时填写）',
  `delay_approved` tinyint NOT NULL DEFAULT 0 COMMENT '是否已延期审批（0=否，1=是）',
  `old_plan_end_time` datetime COMMENT '原计划截止时间（延期时记录）',
  
  -- 重复任务配置
  `repeat_type` varchar(16) DEFAULT NULL COMMENT '重复类型（daily=按日，weekly=按周，monthly=按月，为空则非重复任务）',
  `repeat_cycle` int DEFAULT NULL COMMENT '重复周期（如每周重复则为7，每月重复则为30）',
  `repeat_end_time` datetime DEFAULT NULL COMMENT '重复截止时间（重复任务终止时间）',
  
  -- 辅助字段
  `attachment_ids` varchar(1024) COMMENT '附件ID（关联文件表，多个用逗号分隔）',
  `remark` varchar(512) COMMENT '备注（额外说明）',
  `is_archived` tinyint NOT NULL DEFAULT 0 COMMENT '是否归档（0=未归档，1=已归档）',
  `archive_time` datetime COMMENT '归档时间',
  
  -- 审计字段
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除（0=正常，1=删除）',
  `deleted_time` datetime COMMENT '删除时间',
  `operator_id` bigint COMMENT '最后操作人ID',
  `operator_name` varchar(64) 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 DEFAULT CHARSET=utf8mb4 COMMENT='OA系统任务表（多租户适配）';