-- =============================================
-- 租户相关数据库变更脚本
-- 用于若依框架 SAAS 化迁移
-- =============================================

-- ----------------------------
-- 1. 创建租户表
-- ----------------------------
DROP TABLE IF EXISTS `sys_tenant`;
CREATE TABLE `sys_tenant` (
  `tenant_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '租户ID',
  `tenant_code` varchar(50) NOT NULL COMMENT '租户编码(唯一)',
  `tenant_name` varchar(100) NOT NULL COMMENT '租户名称',
  `tenant_type` varchar(20) NOT NULL DEFAULT 'COMPANY' COMMENT '租户类型: COMPANY-企业',
  `company_type` varchar(20) NULL COMMENT '公司类型: BANK-银行, CLIENT-甲方, LABOR-劳务公司',
  `contact_person` varchar(50) NULL COMMENT '联系人',
  `contact_phone` varchar(20) NULL COMMENT '联系电话',
  `contact_email` varchar(100) NULL COMMENT '联系邮箱',
  `domain` varchar(100) NULL COMMENT '租户域名',
  `logo_url` varchar(500) NULL COMMENT 'Logo URL',
  `status` varchar(10) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态: ACTIVE-正常, FROZEN-冻结, DELETED-已删除',
  `max_users` int(11) NULL DEFAULT 10 COMMENT '最大用户数',
  `max_companies` int(11) NULL DEFAULT 5 COMMENT '最大公司数',
  `expire_date` date NULL COMMENT '过期日期',
  `package_id` bigint(20) NULL COMMENT '套餐ID',
  `create_by` varchar(64) NULL DEFAULT '' COMMENT '创建者',
  `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(64) NULL DEFAULT '' COMMENT '更新者',
  `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `remark` varchar(500) NULL COMMENT '备注',
  PRIMARY KEY (`tenant_id`),
  UNIQUE INDEX `uk_tenant_code`(`tenant_code` ASC),
  INDEX `idx_status`(`status` ASC),
  INDEX `idx_company_type`(`company_type` ASC)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='租户表';

-- ----------------------------
-- 2. 初始化默认租户 (兼容现有数据)
-- ----------------------------
INSERT INTO `sys_tenant` (`tenant_id`, `tenant_code`, `tenant_name`, `tenant_type`, `company_type`, `status`, `max_users`, `max_companies`, `remark`)
VALUES (1, 'DEFAULT', '默认租户', 'COMPANY', NULL, 'ACTIVE', 1000, 100, '系统默认租户，兼容历史数据');

-- ----------------------------
-- 3. 为 sys_user 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `sys_user` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `del_flag`;
ALTER TABLE `sys_user` ADD INDEX `idx_user_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 4. 为 sys_dept 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `sys_dept` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `dept_id`;
ALTER TABLE `sys_dept` ADD INDEX `idx_dept_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 5. 为 dc_contract 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_contract` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `contract_id`;
ALTER TABLE `dc_contract` ADD INDEX `idx_contract_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 6. 为 dc_service_contract 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_service_contract` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `service_contract_id`;
ALTER TABLE `dc_service_contract` ADD INDEX `idx_service_contract_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 7. 为 dc_employee_info 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_employee_info` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `employee_id`;
ALTER TABLE `dc_employee_info` ADD INDEX `idx_employee_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 8. 为 dc_employee_library 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_employee_library` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `library_id`;
ALTER TABLE `dc_employee_library` ADD INDEX `idx_library_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 9. 为 dc_credit 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_credit` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `credit_id`;
ALTER TABLE `dc_credit` ADD INDEX `idx_credit_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 10. 为 dc_financing 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_financing` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `financing_id`;
ALTER TABLE `dc_financing` ADD INDEX `idx_financing_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 11. 为 dc_company_relationship 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_company_relationship` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `relationship_id`;
ALTER TABLE `dc_company_relationship` ADD INDEX `idx_relationship_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 12. 为 dc_bank_institution 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_bank_institution` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `bank_id`;
ALTER TABLE `dc_bank_institution` ADD INDEX `idx_bank_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 13. 为 dc_service_period 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_service_period` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `service_period_id`;
ALTER TABLE `dc_service_period` ADD INDEX `idx_service_period_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 14. 为 dc_service_period_loan 表添加 tenant_id 字段
-- ----------------------------
ALTER TABLE `dc_service_period_loan` ADD COLUMN `tenant_id` bigint(20) NULL DEFAULT 1 COMMENT '租户ID' AFTER `link_id`;
ALTER TABLE `dc_service_period_loan` ADD INDEX `idx_loan_tenant_id`(`tenant_id` ASC);

-- ----------------------------
-- 15. 更新现有数据的 tenant_id (根据 company_id 关联)
-- ----------------------------
-- 注意：此脚本需要在确认现有公司数据后再执行
-- 以下为示例逻辑，实际执行时需要根据具体业务逻辑调整

-- 更新用户的 tenant_id 为 1 (默认租户)
UPDATE sys_user SET tenant_id = 1 WHERE tenant_id IS NULL;

-- 更新部门的 tenant_id 为 1 (默认租户)
UPDATE sys_dept SET tenant_id = 1 WHERE tenant_id IS NULL;
