本文档说明如何配置和使用OA数据同步定时任务,实现部门和用户数据的自动同步。
系统提供了3个定时任务类,您可以根据需求选择使用:
Bean名称: oaSyncTask
功能: 完整的OA数据同步(部门+用户)
特点:
- ✅ 按正确顺序执行:先部门后用户
- ✅ 一个任务搞定所有同步
- ✅ 智能错误处理:部门失败则跳过用户
可用方法:
- syncOaData() - 完整同步(部门+用户)
- syncDepartmentsOnly() - 仅同步部门
- syncUsersOnly() - 仅同步用户
Bean名称: departmentSyncTask
功能: 仅同步部门数据
特点: 独立的部门同步任务
可用方法:
- syncDepartments() - 同步部门
Bean名称: userSyncTask
功能: 仅同步用户数据
特点: 独立的用户同步任务
注意: ⚠️ 必须在部门同步之后执行
可用方法:
- syncUsers() - 同步用户
mysql -u root -p ry-vue < sql/oa_sync_job.sql
这会创建3个定时任务:
1. OA数据同步 - 每天凌晨2点执行(推荐)
2. OA部门同步 - 每天凌晨2点执行
3. OA用户同步 - 每天凌晨3点执行
登录若依后台 → 系统管理 → 定时任务 → 新增
推荐配置(完整同步): 任务名称: OA数据同步 任务分组: DEFAULT 调用目标: oaSyncTask.syncOaData cron表达式: 0 0 2 * * ? 执行策略: 立即执行 是否并发: 否 状态: 正常
独立部门同步: 任务名称: OA部门同步 任务分组: DEFAULT 调用目标: departmentSyncTask.syncDepartments cron表达式: 0 0 2 * * ? 执行策略: 立即执行 是否并发: 否 状态: 正常
独立用户同步: 任务名称: OA用户同步 任务分组: DEFAULT 调用目标: userSyncTask.syncUsers cron表达式: 0 0 3 * * ? 执行策略: 立即执行 是否并发: 否 状态: 正常
| 表达式 | 说明 | 推荐场景 |
|---|---|---|
0 0 2 * * ? |
每天凌晨2点执行 | 日常同步(推荐) |
0 0 3 * * ? |
每天凌晨3点执行 | 用户同步(需在部门后) |
0 0 */4 * * ? |
每4小时执行一次 | 频繁同步 |
0 0/30 * * * ? |
每30分钟执行一次 | 实时同步 |
0 0 2 * * MON |
每周一凌晨2点执行 | 周同步 |
0 0 2 1 * ? |
每月1号凌晨2点执行 | 月同步 |
任务配置:
- 调用目标:oaSyncTask.syncOaData
- Cron表达式:0 0 2 * * ?
- 说明:每天凌晨2点自动同步部门和用户
执行流程:
1. 同步部门数据
2. 部门同步成功后,同步用户数据
3. 记录详细日志
任务1 - 部门同步:
- 调用目标:departmentSyncTask.syncDepartments
- Cron表达式:0 0 2 * * ?
任务2 - 用户同步:
- 调用目标:userSyncTask.syncUsers
- Cron表达式:0 0 3 * * ?(必须在部门同步之后)
# 查看同步日志
tail -f ruoyi-admin/logs/sys-info.log | grep -i "OA\|Department\|User"
# 查看错误日志
tail -f ruoyi-admin/logs/sys-error.log
INFO OaSyncTask - ##########开始执行OA数据同步定时任务##########
INFO OaSyncTask - 【步骤1/2】开始同步部门数据...
INFO DepartmentSyncServiceImpl - 从SQL Server获取到 12 条分公司数据
INFO DepartmentSyncServiceImpl - 创建新分公司: 湛江分公司, ID: 200
INFO OaSyncTask - 【步骤1/2】部门同步成功: 同步完成!创建分公司: 3, 创建部门: 12
INFO OaSyncTask - 【步骤2/2】开始同步用户数据...
INFO UserSyncServiceImpl - 从SQL Server获取到 50 条用户数据
INFO UserSyncServiceImpl - 创建新用户: 张三 (zhangsan), oaUserId: 1001
INFO OaSyncTask - 【步骤2/2】用户同步成功: 同步完成!创建用户: 30, 更新用户: 15
INFO OaSyncTask - ##########OA数据同步定时任务执行完成##########
INFO OaSyncTask - 总结:部门同步成功,用户同步成功
根据实际需求修改cron表达式:
高频同步(每小时): cron表达式: 0 0 * * * ?
工作时间同步(工作日8-18点,每小时): cron表达式: 0 0 8-18 * * MON-FRI
建议设置为"禁止并发",避免同时执行多个同步任务。
oaSyncTask.syncOaData完整同步推荐使用完整同步任务
调用目标: oaSyncTask.syncOaData 优点: 自动按顺序执行,无需担心顺序问题
合理设置执行时间
建议: 凌晨2-3点执行(业务低峰期) 避免: 业务高峰期执行
监控任务执行
```
检查项:
1. 任务状态是否为"正常"
2. Cron表达式是否正确
3. 调用目标字符串是否正确
4. 查看错误日志
原因: 部门未同步或同步失败
解决:
1. 检查部门同步任务是否成功
2. 确保用户同步在部门同步之后执行
3. 使用oaSyncTask.syncOaData完整同步
排查步骤:
1. 查看错误日志
2. 检查SQL Server连接
3. 确认Bean是否注入成功
4. 验证数据库字段是否添加
操作:
1. 进入定时任务列表
2. 找到对应任务
3. 点击"执行一次"按钮
DepartmentSyncTask.java - 部门同步任务UserSyncTask.java - 用户同步任务OaSyncTask.java - 完整同步任务(推荐)sql/oa_sync_job.sql - 任务初始化脚本IDepartmentSyncService.java - 部门同步服务IUserSyncService.java - 用户同步服务定时任务配置完成后:
- ✅ 自动按时同步OA数据
- ✅ 无需手动操作
- ✅ 详细日志记录
- ✅ 错误自动处理
建议使用oaSyncTask.syncOaData完整同步任务,省心省力!
版本: 1.0.0
日期: 2025-10-18
作者: ruoyi