feat 员工亲属关系

This commit is contained in:
wkc
2026-02-10 00:30:06 +08:00
parent 9a7fedcd74
commit bf19a9daa8
22 changed files with 3312 additions and 0 deletions

View 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

View 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 时能正确比较
-- ========================================