Files
yunzerwebsiteallinone/sql/rename_erp_tables_to_backend_organization.sql
T
2026-08-27 21:25:39 +08:00

194 lines
11 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 组织架构模块:表名去掉 erp 字样,改为租户端通用命名
-- yz_backend_erp_organization -> yz_backend_organization
-- yz_backend_erp_employee -> yz_backend_employee
-- yz_backend_erp_position -> yz_backend_position
--
-- 组织架构由进销存(ERP)与办公自动化(OA)共用同一份数据,通过 tid 实现租户间隔离。
-- 执行前请确认当前数据库字符集为 utf8mb4,并先备份这三张表。
--
-- 说明:脚本可重复执行。如果旧表不存在(全新环境),RENAME 会被跳过,
-- 后面的 CREATE TABLE IF NOT EXISTS 会建出目标表结构。
-- ---------------------------------------------------------------------------
-- 1. 重命名已有表(仅当旧表存在且新表不存在时执行)
-- ---------------------------------------------------------------------------
SET @schema := DATABASE();
SET @sql := IF(
(SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_erp_organization') = 1
AND (SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_organization') = 0,
'RENAME TABLE `yz_backend_erp_organization` TO `yz_backend_organization`',
'SELECT "skip: yz_backend_organization"'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := IF(
(SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_erp_employee') = 1
AND (SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_employee') = 0,
'RENAME TABLE `yz_backend_erp_employee` TO `yz_backend_employee`',
'SELECT "skip: yz_backend_employee"'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := IF(
(SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_erp_position') = 1
AND (SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_position') = 0,
'RENAME TABLE `yz_backend_erp_position` TO `yz_backend_position`',
'SELECT "skip: yz_backend_position"'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------------------
-- 2. 全新环境建表(旧表不存在时生效)
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `yz_backend_organization` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tid` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '租户ID(数据隔离)',
`org_name` varchar(128) NOT NULL DEFAULT '' COMMENT '组织名称',
`org_code` varchar(64) NOT NULL DEFAULT '' COMMENT '组织编码(租户内唯一)',
`parent_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '上级组织ID,0为顶级',
`sort` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '排序,越小越靠前',
`leader_id` bigint(20) unsigned DEFAULT NULL COMMENT '负责人(员工ID)',
`is_company` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否企业单位:1-是 0-部门',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1-启用 0-禁用',
`remark` varchar(512) 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 '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_tid` (`tid`) USING BTREE,
KEY `idx_tid_code` (`tid`,`org_code`) USING BTREE,
KEY `idx_parent_id` (`parent_id`) USING BTREE,
KEY `idx_is_company` (`is_company`) USING BTREE,
KEY `idx_status` (`status`) USING BTREE,
KEY `idx_delete_time` (`delete_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='组织架构表(ERP与OA共用)';
CREATE TABLE IF NOT EXISTS `yz_backend_employee` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tid` int(11) DEFAULT NULL COMMENT '租户ID(数据隔离)',
`account` varchar(50) NOT NULL DEFAULT '' COMMENT '登录账号(租户内唯一)',
`password` varchar(64) NOT NULL DEFAULT '' COMMENT '密码(sha256 hex)',
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名',
`gender` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性别:0-未知 1-男 2-女',
`birthday` date DEFAULT NULL COMMENT '生日',
`affiliate_unit` varchar(100) DEFAULT NULL COMMENT '隶属单位(组织ID)',
`department` varchar(50) DEFAULT NULL COMMENT '部门(组织ID)',
`position` varchar(50) DEFAULT NULL COMMENT '职位',
`education` varchar(20) DEFAULT NULL COMMENT '学历',
`nation` varchar(20) DEFAULT NULL COMMENT '民族',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`wechat` varchar(50) DEFAULT NULL COMMENT '微信',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`home_address` varchar(255) DEFAULT NULL COMMENT '家庭住址',
`account_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '账号状态:1-启用 0-禁用 2-离职',
`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`) USING BTREE,
KEY `idx_tid` (`tid`) USING BTREE,
KEY `idx_tid_account` (`tid`,`account`) USING BTREE,
KEY `idx_department` (`department`) USING BTREE,
KEY `idx_affiliate_unit` (`affiliate_unit`) USING BTREE,
KEY `idx_account_status` (`account_status`) USING BTREE,
KEY `idx_delete_time` (`delete_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='员工信息表(ERP与OA共用)';
CREATE TABLE IF NOT EXISTS `yz_backend_position` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`tid` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '租户ID(数据隔离)',
`department_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '所属部门(组织ID)',
`position_code` varchar(50) NOT NULL DEFAULT '' COMMENT '职位编码(租户内唯一)',
`position_name` varchar(100) NOT NULL DEFAULT '' COMMENT '职位名称',
`position_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '职位类型:0-普通 1-主管 2-负责人',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1-启用 0-禁用',
`sort` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '排序,越小越靠前',
`remark` varchar(512) 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 '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_tid` (`tid`) USING BTREE,
KEY `idx_tid_code` (`tid`,`position_code`) USING BTREE,
KEY `idx_department_id` (`department_id`) USING BTREE,
KEY `idx_status` (`status`) USING BTREE,
KEY `idx_delete_time` (`delete_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='职位表(ERP与OA共用)';
-- ---------------------------------------------------------------------------
-- 3. 补齐旧表缺失的字段与索引(重命名后的表可能来自更早的版本)
-- ---------------------------------------------------------------------------
-- yz_backend_position 新增 remark / delete_time
SET @sql := IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_position'
AND COLUMN_NAME = 'remark') = 0,
'ALTER TABLE `yz_backend_position` ADD COLUMN `remark` varchar(512) DEFAULT NULL COMMENT ''备注'' AFTER `sort`',
'SELECT "skip: yz_backend_position.remark"'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_position'
AND COLUMN_NAME = 'delete_time') = 0,
'ALTER TABLE `yz_backend_position` ADD COLUMN `delete_time` datetime DEFAULT NULL COMMENT ''删除时间(软删除)''',
'SELECT "skip: yz_backend_position.delete_time"'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := IF(
(SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_position'
AND INDEX_NAME = 'idx_tid_code') = 0,
'ALTER TABLE `yz_backend_position` ADD INDEX `idx_tid_code` (`tid`,`position_code`) USING BTREE',
'SELECT "skip: yz_backend_position.idx_tid_code"'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := IF(
(SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_organization'
AND INDEX_NAME = 'idx_tid_code') = 0,
'ALTER TABLE `yz_backend_organization` ADD INDEX `idx_tid_code` (`tid`,`org_code`) USING BTREE',
'SELECT "skip: yz_backend_organization.idx_tid_code"'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := IF(
(SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = 'yz_backend_employee'
AND INDEX_NAME = 'idx_tid_account') = 0,
'ALTER TABLE `yz_backend_employee` ADD INDEX `idx_tid_account` (`tid`,`account`) USING BTREE',
'SELECT "skip: yz_backend_employee.idx_tid_account"'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------------------
-- 4. 组织架构设置存放在 yz_backend_normal_setting,按 backend_org_settings_{tid} 区分租户
-- 这里只保证该表存在,具体记录由后端首次保存设置时写入。
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `yz_backend_normal_setting` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(128) NOT NULL DEFAULT '' COMMENT '配置名称',
`value` text COMMENT '配置内容(JSON)',
`code` varchar(64) NOT NULL DEFAULT '' COMMENT '配置标识',
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间(软删除)',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_code` (`code`) USING BTREE,
KEY `idx_delete_time` (`delete_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='管理端通用配置表';