修改端口号
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
-- ============================================================================
|
||||
-- 生产环境表结构补丁:对齐开发环境
|
||||
--
|
||||
-- 基准对比:
|
||||
-- 生产环境 tuanwei_20260921152032l8u4e.sql(MariaDB 10.6.26,54 张表)
|
||||
-- 开发环境 132.232.214.96:13306/tuanwei(MySQL 8.0.44,57 张表,实时读取)
|
||||
--
|
||||
-- 差异汇总(已逐表逐列逐索引比对,过滤导出格式差异后):
|
||||
-- 1. 缺失 3 张表 gxmu_student / gxmu_teacher / gxmu_sync_record
|
||||
-- 2. 缺失 2 个唯一键 gxmu_class.uk_gxmu_class_code
|
||||
-- sys_organization.uk_sys_organization_code
|
||||
-- 3. 列差异 0 处 54 张共有表的 965 个列,类型/可空/默认值/注释全部一致
|
||||
--
|
||||
-- 说明:生产库是 MariaDB 10.6,开发库是 MySQL 8.0,两者 DDL 语法在本补丁
|
||||
-- 涉及范围内完全兼容。
|
||||
-- 可重复执行:建表用 IF NOT EXISTS,加索引前先查 information_schema。
|
||||
-- ============================================================================
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 1. 学生名册(与 sys_user 账号分离,见 ADR-0001)
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `gxmu_student` (
|
||||
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`xh` varchar(32) NOT NULL COMMENT '学号(开放平台外部键)',
|
||||
`xm` varchar(64) DEFAULT NULL COMMENT '姓名',
|
||||
`xbm` varchar(8) DEFAULT NULL COMMENT '性别码(平台原始)',
|
||||
`sex` varchar(16) DEFAULT NULL COMMENT '性别名称',
|
||||
`mzm` varchar(8) DEFAULT NULL COMMENT '民族码(平台原始)',
|
||||
`nation` varchar(32) DEFAULT NULL COMMENT '民族名称',
|
||||
`zzmmm` varchar(8) DEFAULT NULL COMMENT '政治面貌码(平台原始)',
|
||||
`politics` varchar(64) DEFAULT NULL COMMENT '政治面貌名称',
|
||||
`sfzjh` varchar(32) DEFAULT NULL COMMENT '身份证件号',
|
||||
`sjh` varchar(32) DEFAULT NULL COMMENT '手机号(认领键)',
|
||||
`bjm` varchar(64) DEFAULT NULL COMMENT '平台班级码(原始)',
|
||||
`bh` varchar(64) DEFAULT NULL COMMENT '平台班号(学籍库原始)',
|
||||
`class_id` int DEFAULT NULL COMMENT '解析出的班级ID',
|
||||
`college_id` int DEFAULT NULL COMMENT '解析出的学院ID',
|
||||
`dwh` varchar(64) DEFAULT NULL COMMENT '单位号(平台原始)',
|
||||
`zyh` varchar(32) DEFAULT NULL COMMENT '专业号',
|
||||
`zymc` varchar(128) DEFAULT NULL COMMENT '专业名称',
|
||||
`pyccmc` varchar(32) DEFAULT NULL COMMENT '培养层次',
|
||||
`sfzx` varchar(8) DEFAULT NULL COMMENT '是否在校',
|
||||
`xjzt` varchar(32) DEFAULT NULL COMMENT '学籍状态',
|
||||
`xsdqzt` varchar(32) DEFAULT NULL COMMENT '学生当前状态',
|
||||
`csrq` varchar(20) DEFAULT NULL COMMENT '出生日期',
|
||||
`user_id` int DEFAULT NULL COMMENT '认领后的 sys_user.user_id',
|
||||
`claim_time` datetime DEFAULT NULL COMMENT '认领时间',
|
||||
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1在校 0毕业/结业/休学',
|
||||
`sync_time` datetime DEFAULT NULL COMMENT '最近同步时间',
|
||||
`tenant_id` int DEFAULT 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 '更新时间',
|
||||
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记:0未删 1已删',
|
||||
`row_hash` varchar(32) DEFAULT NULL COMMENT '平台权威字段指纹,用于跳过未变更行',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_gxmu_student_xh` (`tenant_id`,`xh`),
|
||||
KEY `idx_gxmu_student_xh` (`xh`),
|
||||
KEY `idx_gxmu_student_sjh` (`sjh`),
|
||||
KEY `idx_gxmu_student_class` (`class_id`),
|
||||
KEY `idx_gxmu_student_college` (`college_id`),
|
||||
KEY `idx_gxmu_student_uid` (`user_id`),
|
||||
KEY `idx_gxmu_student_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生名册(开放平台同步)';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 2. 教师名册
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `gxmu_teacher` (
|
||||
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`jgh` varchar(32) NOT NULL COMMENT '教工号(开放平台外部键)',
|
||||
`xm` varchar(64) DEFAULT NULL COMMENT '姓名',
|
||||
`xbm` varchar(8) DEFAULT NULL COMMENT '性别码(平台原始)',
|
||||
`sex` varchar(16) DEFAULT NULL COMMENT '性别名称',
|
||||
`dwh` varchar(64) DEFAULT NULL COMMENT '单位号(平台原始)',
|
||||
`college_id` int DEFAULT NULL COMMENT '解析出的学院ID',
|
||||
`ksjybh` varchar(64) DEFAULT NULL COMMENT '科室教研室编号',
|
||||
`sjh` varchar(32) DEFAULT NULL COMMENT '手机号(敏感字段, 不对外输出)',
|
||||
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1启用 0停用',
|
||||
`sync_time` datetime DEFAULT NULL COMMENT '最近同步时间',
|
||||
`tenant_id` int DEFAULT 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 '更新时间',
|
||||
`deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记:0未删 1已删',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_gxmu_teacher_jgh` (`tenant_id`,`jgh`),
|
||||
KEY `idx_gxmu_teacher_jgh` (`jgh`),
|
||||
KEY `idx_gxmu_teacher_college` (`college_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师名册(开放平台同步)';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 3. 开放平台同步记录
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS `gxmu_sync_record` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`batch_id` varchar(64) DEFAULT NULL COMMENT '批次号(同一次触发的各段共享)',
|
||||
`sync_type` varchar(32) NOT NULL COMMENT '同步类型:dept/teacher/class/student',
|
||||
`trigger_type` varchar(16) NOT NULL COMMENT '触发方式:schedule/manual',
|
||||
`trigger_user` varchar(100) DEFAULT NULL COMMENT '触发人(手动触发时)',
|
||||
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
|
||||
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
|
||||
`success_count` int NOT NULL DEFAULT '0' COMMENT '成功条数',
|
||||
`fail_count` int NOT NULL DEFAULT '0' COMMENT '失败条数',
|
||||
`skip_count` int NOT NULL DEFAULT '0' COMMENT '跳过条数',
|
||||
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态:0成功 1失败',
|
||||
`error_msg` varchar(1000) DEFAULT NULL COMMENT '错误摘要(不含手机号/身份证)',
|
||||
`tenant_id` int DEFAULT 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_gxmu_sync_record_batch` (`batch_id`),
|
||||
KEY `idx_gxmu_sync_record_start` (`start_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放平台同步记录';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 4. 唯一键(幂等 upsert 的前提)
|
||||
-- 先把手写的空串规范成 NULL,否则唯一键会被一堆 '' 互撞。
|
||||
-- 生产库现有数据若存在 (tenant_id, class_code) 或 (tenant_id, organization_code)
|
||||
-- 重复,加唯一键会失败——见文件末尾的预检查语句。
|
||||
-- ---------------------------------------------------------------------------
|
||||
UPDATE `gxmu_class` SET `class_code` = NULL WHERE `class_code` = '';
|
||||
UPDATE `sys_organization` SET `organization_code` = NULL WHERE `organization_code` = '';
|
||||
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'gxmu_class'
|
||||
AND INDEX_NAME = 'uk_gxmu_class_code');
|
||||
SET @stmt := IF(@exist = 0,
|
||||
'ALTER TABLE `gxmu_class` ADD UNIQUE KEY `uk_gxmu_class_code` (`tenant_id`, `class_code`)',
|
||||
'SELECT 1');
|
||||
PREPARE s FROM @stmt; EXECUTE s; DEALLOCATE PREPARE s;
|
||||
|
||||
SET @exist := (SELECT COUNT(*) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sys_organization'
|
||||
AND INDEX_NAME = 'uk_sys_organization_code');
|
||||
SET @stmt := IF(@exist = 0,
|
||||
'ALTER TABLE `sys_organization` ADD UNIQUE KEY `uk_sys_organization_code` (`tenant_id`, `organization_code`)',
|
||||
'SELECT 1');
|
||||
PREPARE s FROM @stmt; EXECUTE s; DEALLOCATE PREPARE s;
|
||||
|
||||
-- ============================================================================
|
||||
-- 附:执行前建议先跑这两条预检查,确认无重复值再加唯一键
|
||||
-- ============================================================================
|
||||
-- SELECT tenant_id, class_code, COUNT(*) c FROM gxmu_class
|
||||
-- WHERE class_code IS NOT NULL AND class_code <> ''
|
||||
-- GROUP BY tenant_id, class_code HAVING c > 1;
|
||||
--
|
||||
-- SELECT tenant_id, organization_code, COUNT(*) c FROM sys_organization
|
||||
-- WHERE organization_code IS NOT NULL AND organization_code <> ''
|
||||
-- GROUP BY tenant_id, organization_code HAVING c > 1;
|
||||
Reference in New Issue
Block a user