从SQL Server的OA_User表同步用户数据到若依系统,通过department_id自动关联部门。
⚠️ 必须先完成部门同步! 用户同步依赖部门数据。
# 1. 部门表添加字段(如果未执行)
mysql -u root -p ry-vue < sql/add_department_id_to_sys_dept.sql
# 2. 用户表添加字段
mysql -u root -p ry-vue < sql/add_oa_user_id_to_sys_user.sql
mvn clean package -DskipTests
cd ruoyi-admin
java -jar target/ruoyi-admin.jar
POST http://localhost:8080/system/dept/sync/branch
Headers:
Authorization: Bearer {你的token}
POST http://localhost:8080/system/dept/sync/user
Headers:
Authorization: Bearer {你的token}
{
"code": 200,
"msg": "同步完成!创建用户: 15, 更新用户: 5, 跳过: 2, 失败: 0",
"data": {
"created": 15,
"updated": 5,
"skipped": 2,
"error": 0,
"totalProcessed": 22
}
}
-- 查看同步的用户
SELECT
u.user_name,
u.nick_name,
u.oa_user_id,
d.dept_name,
u.email,
u.phonenumber
FROM sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
WHERE u.oa_user_id IS NOT NULL
ORDER BY u.create_time DESC;
OA_departmentID → 查询sys_dept.department_id → 获取dept_id
1. 根据oa_user_id查询
├─ 存在 → 更新用户信息
└─ 不存在
├─ 用户名存在 → 更新并设置oa_user_id
└─ 用户名不存在 → 创建新用户(密码123456)
新创建用户的默认设置:
- 🔑 密码: 123456
- 🏢 部门: 100(若依科技)- 如果找不到对应部门
- 👤 性别: 2(未知)
- ✅ 状态: 0(正常)
sql/add_oa_user_id_to_sys_user.sql - 添加字段SysUser.java(修改) - 添加oaUserId字段UserSyncDTO.java - 用户数据传输对象UserSyncMapper.java + XML - 查询SQL ServerSysUserMapper.java/XML(扩展) - 扩展查询方法IUserSyncService.java - 服务接口UserSyncServiceImpl.java - 核心同步逻辑DepartmentSyncController.java(扩展) - 添加接口prd/用户同步功能说明.md - 详细说明原因: 部门未同步或department_id不匹配
解决: 先执行部门同步
处理: 自动更新已存在用户的oa_user_id,不会报错
账号: OA_User字段值
密码: 123456
建议: 首次登录后修改密码
✅ 执行顺序很重要
1. 先同步部门
2. 再同步用户
✅ 幂等性保证
- 多次同步不会创建重复数据
- 已存在用户只会更新信息
✅ 权限要求
- 部门同步: system:dept:sync
- 用户同步: system:user:sync
tail -f ruoyi-admin/logs/sys-info.log | grep -i "UserSync"
INFO UserSyncServiceImpl - 从SQL Server获取到 50 条用户数据
INFO UserSyncServiceImpl - 创建新用户: 张三 (zhangsan), oaUserId: 1001, deptId: 201
INFO UserSyncServiceImpl - 更新用户: 李四 (lisi), oaUserId: 1002
WARN UserSyncServiceImpl - 未找到对应的部门: departmentId=9999, 用户: test
INFO UserSyncServiceImpl - 同步完成!创建用户: 30, 更新用户: 15, 跳过: 3, 失败: 2
在用户管理页面添加"同步"按钮:javascript syncUsers() { this.$confirm('确认同步OA用户数据吗?', '提示', { type: 'warning' }).then(() => { this.$http.post('/system/dept/sync/user').then(res => { this.$message.success(res.msg); this.getList(); }); }); }
配置每天自动同步:
- 任务名称: OA用户同步
- 调用目标: userSyncTask.execute
- cron表达式: 0 0 3 * * ? (每天凌晨3点)