feat 员工亲属关系
This commit is contained in:
27
doc/数据库文档/fix_collation_staff_fmy_relation.sql
Normal file
27
doc/数据库文档/fix_collation_staff_fmy_relation.sql
Normal file
@@ -0,0 +1,27 @@
|
||||
-- 修复员工基础表和员工家庭关系表字符集排序规则
|
||||
-- 问题: ccdi_staff_fmy_relation.person_id (utf8mb4_general_ci) 与 ccdi_base_staff.id_card (utf8mb4_unicode_ci) 字符集不一致
|
||||
-- 解决方案: 统一为 utf8mb4_general_ci
|
||||
-- 执行时间: 2026-02-09
|
||||
|
||||
USE `ruoyi-vue-pro`;
|
||||
|
||||
-- 修改 ccdi_base_staff 表的 id_card 字段字符集,统一为 utf8mb4_general_ci
|
||||
ALTER TABLE `ccdi_base_staff`
|
||||
MODIFY COLUMN `id_card` VARCHAR(100) DEFAULT NULL COLLATE `utf8mb4_general_ci` COMMENT '身份证号';
|
||||
|
||||
-- 验证修改
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
COLUMN_NAME,
|
||||
CHARACTER_SET_NAME,
|
||||
COLLATION_NAME
|
||||
FROM
|
||||
INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
TABLE_SCHEMA = 'ruoyi-vue-pro'
|
||||
AND TABLE_NAME IN ('ccdi_staff_fmy_relation', 'ccdi_base_staff')
|
||||
AND COLUMN_NAME IN ('person_id', 'id_card')
|
||||
ORDER BY
|
||||
TABLE_NAME, COLUMN_NAME;
|
||||
|
||||
-- 说明: 执行后两个表的字符集应该都显示为 utf8mb4_general_ci
|
||||
120
doc/数据库文档/verify_collation_fix.sql
Normal file
120
doc/数据库文档/verify_collation_fix.sql
Normal file
@@ -0,0 +1,120 @@
|
||||
-- ========================================
|
||||
-- 验证员工家庭关系表 JOIN 字符集问题修复
|
||||
-- ========================================
|
||||
-- 目的: 验证 ccdi_staff_fmy_relation 与 ccdi_base_staff 表的 JOIN 操作正常
|
||||
-- 创建时间: 2026-02-09
|
||||
-- ========================================
|
||||
|
||||
USE `ccdi`;
|
||||
|
||||
-- 测试 1: 验证字符集统一性
|
||||
-- ========================================
|
||||
SELECT '=== 字符集验证 ===' AS test_section;
|
||||
|
||||
SELECT
|
||||
TABLE_NAME AS '表名',
|
||||
COLUMN_NAME AS '字段名',
|
||||
CHARACTER_SET_NAME AS '字符集',
|
||||
COLLATION_NAME AS '排序规则',
|
||||
CASE
|
||||
WHEN COLLATION_NAME = 'utf8mb4_general_ci' THEN '✅ 正确'
|
||||
ELSE '❌ 错误'
|
||||
END AS '状态'
|
||||
FROM
|
||||
INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE
|
||||
TABLE_SCHEMA = 'ccdi'
|
||||
AND TABLE_NAME IN ('ccdi_staff_fmy_relation', 'ccdi_base_staff')
|
||||
AND COLUMN_NAME IN ('person_id', 'id_card')
|
||||
ORDER BY
|
||||
TABLE_NAME, COLUMN_NAME;
|
||||
|
||||
-- 测试 2: 验证 JOIN 操作(模拟实际查询)
|
||||
-- ========================================
|
||||
SELECT '=== JOIN 操作验证 ===' AS test_section;
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
r.person_id,
|
||||
s.name AS person_name,
|
||||
r.relation_type,
|
||||
r.relation_name,
|
||||
r.gender,
|
||||
s.id_card AS staff_id_card,
|
||||
CASE
|
||||
WHEN r.person_id = s.id_card THEN '✅ 匹配成功'
|
||||
ELSE '❌ 匹配失败'
|
||||
END AS join_status
|
||||
FROM
|
||||
ccdi_staff_fmy_relation r
|
||||
LEFT JOIN ccdi_base_staff s ON r.person_id = s.id_card
|
||||
WHERE
|
||||
r.is_emp_family = 1
|
||||
LIMIT 5;
|
||||
|
||||
-- 测试 3: 统计数据
|
||||
-- ========================================
|
||||
SELECT '=== 数据统计 ===' AS test_section;
|
||||
|
||||
SELECT
|
||||
COUNT(*) AS total_records,
|
||||
COUNT(s.name) AS matched_records,
|
||||
COUNT(*) - COUNT(s.name) AS unmatched_records,
|
||||
CONCAT(
|
||||
ROUND(COUNT(s.name) / COUNT(*) * 100, 2),
|
||||
'%'
|
||||
) AS match_rate
|
||||
FROM
|
||||
ccdi_staff_fmy_relation r
|
||||
LEFT JOIN ccdi_base_staff s ON r.person_id = s.id_card
|
||||
WHERE
|
||||
r.is_emp_family = 1;
|
||||
|
||||
-- 测试 4: 查找未匹配的记录
|
||||
-- ========================================
|
||||
SELECT '=== 未匹配记录 ===' AS test_section;
|
||||
|
||||
SELECT
|
||||
r.id,
|
||||
r.person_id,
|
||||
r.relation_name,
|
||||
'未找到对应员工信息' AS warning
|
||||
FROM
|
||||
ccdi_staff_fmy_relation r
|
||||
LEFT JOIN ccdi_base_staff s ON r.person_id = s.id_card
|
||||
WHERE
|
||||
r.is_emp_family = 1
|
||||
AND s.id_card IS NULL
|
||||
LIMIT 5;
|
||||
|
||||
-- 测试 5: 字符集转换测试
|
||||
-- ========================================
|
||||
SELECT '=== 字符集转换测试 ===' AS test_section;
|
||||
|
||||
SELECT
|
||||
r.person_id,
|
||||
s.id_card,
|
||||
CHAR_LENGTH(r.person_id) AS len_person_id,
|
||||
CHAR_LENGTH(s.id_card) AS len_id_card,
|
||||
HEX(r.person_id) AS hex_person_id,
|
||||
HEX(s.id_card) AS hex_id_card,
|
||||
CASE
|
||||
WHEN r.person_id = s.id_card THEN '✅ 完全相等'
|
||||
ELSE '❌ 不相等'
|
||||
END AS compare_result
|
||||
FROM
|
||||
ccdi_staff_fmy_relation r
|
||||
INNER JOIN ccdi_base_staff s ON r.person_id = s.id_card
|
||||
WHERE
|
||||
r.is_emp_family = 1
|
||||
LIMIT 3;
|
||||
|
||||
-- ========================================
|
||||
-- 验证结果说明:
|
||||
-- ========================================
|
||||
-- 1. 字符集验证: 所有字段应显示 ✅ 正确
|
||||
-- 2. JOIN 操作: 应能正常执行,无字符集冲突错误
|
||||
-- 3. 数据统计: 显示匹配率
|
||||
-- 4. 未匹配记录: 显示哪些员工关系记录未关联到员工
|
||||
-- 5. 字符集转换: 验证字段在 JOIN 时能正确比较
|
||||
-- ========================================
|
||||
Reference in New Issue
Block a user