fix(sql): 新增部门/岗位 tenant_id 修复脚本(修复员工部门为空、部门管理缺失、新增员工报部门不存在)
已添加1个文件
62 ■■■■■ 文件已修改
sql/mysql/fix_dept_post_tenant.sql 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/fix_dept_post_tenant.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
-- =============================================
-- ä¿®å¤ï¼šéƒ¨é—¨/岗位的 tenant_id é”™è¯¯ï¼ˆ0 åº”为 1)
--
-- çŽ°è±¡ï¼š
--   1) å‘˜å·¥ç®¡ç†åˆ—表「部门」列为空(部分或全部)
--   2) éƒ¨é—¨ç®¡ç†é¡µé¢çœ‹ä¸åˆ°å¤§éƒ¨åˆ†éƒ¨é—¨ï¼ˆåªå‰©ã€Œæ€»å…¬å¸ã€ï¼‰
--   3) æ–°å¢žå‘˜å·¥æŠ¥ã€Œéƒ¨é—¨ä¸å­˜åœ¨ / å²—位不存在」,无法保存
--   4) å‘˜å·¥åˆ—表按部门筛选查不到数据
--
-- æ ¹å› ï¼š
--   å¯¼å…¥éƒ¨é—¨/岗位时未写 tenant_id,落成 0;而系统按登录租户(通常为 1)查询,
--   å¯¼è‡´è¿™äº›éƒ¨é—¨/岗位在业务上"不存在"。
--   ï¼ˆhrm_employee è¡¨æ—  tenant_id åˆ—,所以员工本身能看到,只是部门名解析不到)
--
-- æ‰§è¡Œå‰è¯·ç¡®è®¤ç›®æ ‡ç§Ÿæˆ· id(单租户系统一般为 1):
--   SELECT id, name FROM system_tenant;
-- =============================================
SET NAMES utf8mb4;
-- ç›®æ ‡ç§Ÿæˆ·ï¼ˆæŒ‰å®žé™…情况修改)
SET @T := 1;
-- ---------- 1. æ‰§è¡Œå‰æ£€æŸ¥ ----------
SELECT '执行前:部门租户分布' AS step, tenant_id, COUNT(*) AS cnt
FROM system_dept WHERE deleted = b'0' GROUP BY tenant_id;
SELECT '执行前:岗位租户分布' AS step, tenant_id, COUNT(*) AS cnt
FROM system_post WHERE deleted = b'0' GROUP BY tenant_id;
-- é‡åæ£€æŸ¥ï¼šå¿…须都为 0,否则 UPDATE ä¼šè¿åå”¯ä¸€ç´¢å¼•
SELECT '部门重名数(须为0)' AS step, COUNT(*) AS cnt
FROM system_dept d0
JOIN system_dept d1 ON d1.tenant_id = @T AND d1.name = d0.name AND d1.deleted = b'0'
WHERE d0.tenant_id = 0 AND d0.deleted = b'0';
SELECT '岗位重名数(须为0)' AS step, COUNT(*) AS cnt
FROM system_post p0
JOIN system_post p1 ON p1.tenant_id = @T AND p1.name = p0.name AND p1.deleted = b'0'
WHERE p0.tenant_id = 0 AND p0.deleted = b'0';
-- ---------- 2. å¤‡ä»½ ----------
CREATE TABLE IF NOT EXISTS bak_system_dept_tenant AS SELECT * FROM system_dept;
CREATE TABLE IF NOT EXISTS bak_system_post_tenant AS SELECT * FROM system_post;
-- ---------- 3. ä¿®å¤ ----------
UPDATE system_dept SET tenant_id = @T WHERE tenant_id = 0;
UPDATE system_post SET tenant_id = @T WHERE tenant_id = 0;
-- ---------- 4. æ‰§è¡ŒåŽæ ¸å¯¹ ----------
SELECT '执行后:部门租户分布' AS step, tenant_id, COUNT(*) AS cnt
FROM system_dept WHERE deleted = b'0' GROUP BY tenant_id;
SELECT '执行后:岗位租户分布' AS step, tenant_id, COUNT(*) AS cnt
FROM system_post WHERE deleted = b'0' GROUP BY tenant_id;
-- å‘˜å·¥éƒ¨é—¨æ‚¬ç©ºæ•°ï¼ˆåº”为 0,表示所有员工的部门都能解析到)
SELECT '员工部门悬空数(应为0)' AS step, COUNT(*) AS cnt
FROM hrm_employee e
LEFT JOIN system_dept d ON d.id = e.dept_id AND d.tenant_id = @T AND d.deleted = b'0'
WHERE e.deleted = b'0' AND d.id IS NULL;
SELECT '修复完成,请让用户重新登录后刷新页面' AS result;