背景&操作步骤
做了什么操作后,出现的该问题
-
组织架构有调整,钉钉调整过后,原本的历史数据变成了乱码,导致数据有误,该问题如何解决。
显示是部门id和名称的映射, 你是将之前的部门删除了吗
是的,历史部门删掉了 但是在职人员变更了新部门,显示的还是被删除的部门id
历史记录中的“部门”字段保存的是当时的部门 ID。删除旧部门并将人员调整到新部门后,只会更新组织架构中的人员归属,不会自动修改已有业务记录,因此重新同步组织架构不能修复历史数据。
可以通过业务记录中的 memberId 匹配人员当前部门,批量替换已经失效的旧部门 ID。以下是 MySQL 8 修复模板,仅适用于:
-- ===== 需要修改的配置 =====
SET @corp_full_name = 'corps.YourCorp';
-- your_business_table:业务表
-- id:业务表主键
-- member_id:业务表人员 memberId 字段
-- department_id:需要修复的部门字段
-- ===== 1. 生成人员当前部门映射 =====
DROP TEMPORARY TABLE IF EXISTS tmp_member_current_dept;
CREATE TEMPORARY TABLE tmp_member_current_dept AS
SELECT
m.`memberId` AS member_id,
m.`nick` AS member_name,
MIN(dm.`deptId`) AS new_dept_id,
MIN(d.`name`) AS new_dept_name
FROM `corp_member` m
JOIN `corp_dept_member` dm
ON dm.`corpFullName` = m.`corpFullName`
AND dm.`memberId` = m.`memberId`
JOIN `corp_dept` d
ON d.`corpFullName` = dm.`corpFullName`
AND d.`deptId` = dm.`deptId`
WHERE m.`corpFullName` = @corp_full_name
AND m.`status` = 0
GROUP BY m.`memberId`, m.`nick`
HAVING COUNT(DISTINCT dm.`deptId`) = 1;
ALTER TABLE tmp_member_current_dept
ADD PRIMARY KEY (`member_id`);
-- ===== 2. 预览待修复数据 =====
SELECT
b.`id`,
b.`member_id`,
mp.member_name,
b.`department_id` AS old_dept_id,
mp.new_dept_id,
mp.new_dept_name
FROM `your_business_table` b
JOIN tmp_member_current_dept mp
ON mp.member_id = b.`member_id`
LEFT JOIN `corp_dept` old_d
ON old_d.`corpFullName` = @corp_full_name
AND old_d.`deptId` = b.`department_id`
WHERE b.`department_id` IS NOT NULL
AND b.`department_id` <> ''
AND old_d.`deptId` IS NULL;
-- ===== 3. 备份待修复记录 =====
CREATE TABLE `your_business_table_dept_bak_20260909`
LIKE `your_business_table`;
INSERT INTO `your_business_table_dept_bak_20260909`
SELECT b.*
FROM `your_business_table` b
JOIN tmp_member_current_dept mp
ON mp.member_id = b.`member_id`
LEFT JOIN `corp_dept` old_d
ON old_d.`corpFullName` = @corp_full_name
AND old_d.`deptId` = b.`department_id`
WHERE b.`department_id` IS NOT NULL
AND b.`department_id` <> ''
AND old_d.`deptId` IS NULL;
-- ===== 4. 执行修复 =====
START TRANSACTION;
UPDATE `your_business_table` b
JOIN tmp_member_current_dept mp
ON mp.member_id = b.`member_id`
LEFT JOIN `corp_dept` old_d
ON old_d.`corpFullName` = @corp_full_name
AND old_d.`deptId` = b.`department_id`
SET b.`department_id` = mp.new_dept_id
WHERE b.`department_id` IS NOT NULL
AND b.`department_id` <> ''
AND old_d.`deptId` IS NULL;
SELECT ROW_COUNT() AS updated_rows;
-- 确认更新结果正确后执行
COMMIT;
如需恢复,可根据业务表主键执行:
UPDATE `your_business_table` b
JOIN `your_business_table_dept_bak_20260909` bak
ON bak.`id` = b.`id`
SET b.`department_id` = bak.`department_id`;预先格式化的文本
脚本会跳过当前属于多个部门的人员,避免错误替换。若存在一人多部门、人员字段不是 memberId、部门字段为多选部门,或使用 PostgreSQL/SQL Server,请不要直接执行,需要按实际表结构调整
数据库为jit默认的内置数据库,内置数据库应该在哪能找到对应的数据条?
你是服务器版本 还是 桌面版
服务器
服务器版的默认内置数据库是 MySQL,请使用服务器部署配置中的 MYSQL 连接信息访问;数据库名是应用 appId 将英文句点 . 替换为下划线 _,例如 org.app 对应 org_app。组织架构数据位于 corp_member、corp_dept_member、corp_dept,但需要修复的旧部门 ID 在具体业务模型 dbTable 对应的业务表中。请补充应用 appId、业务模型名称或 fullName、人员字段名和部门字段名,我们再按实际表结构给出查询及修复 SQL;确认前请勿直接执行之前的 UPDATE 脚本。
容器内mysql端口映射出来了吗,默认用户名密码你知不知道