-- =============================================
|
-- 修复:部门/岗位的 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;
|