从SQL Server数据库的OA_User表中同步用户数据到若依系统的sys_user表,通过department_id字段关联部门。
SELECT
OA_User_ID as OA_UserID,
OA_User as user_name,
OA_Name as nick_name,
OA_departmentID as department_id,
OA_gender as sex,
OA_email as email,
OA_mobile as phonenumber
FROM OA_User
WHERE OA_User IS NOT NULL AND OA_Name IS NOT NULL
-- 在sys_user表中添加oa_user_id字段
ALTER TABLE sys_user ADD COLUMN oa_user_id INT NULL COMMENT 'SQL Server中的OA用户ID';
CREATE INDEX idx_oa_user_id ON sys_user(oa_user_id);
文件: sql/add_oa_user_id_to_sys_user.sql
文件: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
修改内容:
```java
/** SQL Server中的OA用户ID */
private Integer oaUserId;
public Integer getOaUserId() { return oaUserId; }
public void setOaUserId(Integer oaUserId) { this.oaUserId = oaUserId; }
```
文件: ruoyi-system/src/main/java/com/ruoyi/system/domain/UserSyncDTO.java
- 功能: 用户同步数据传输对象
- 字段: oaUserId, userName, nickName, departmentId, sex, email, phonenumber
文件:
- ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserSyncMapper.java
- ruoyi-system/src/main/resources/mapper/system/UserSyncMapper.xml
主要方法:
- List<UserSyncDTO> selectOaUsers() - 查询SQL Server用户数据
文件:
- ruoyi-system/src/main/java/com/ruoyi/system/service/IUserSyncService.java
- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java
核心方法: syncOaUsers()
同步逻辑:
1. 从SQL Server获取OA_User数据
2. 验证数据完整性
3. 根据department_id查找对应的dept_id
4. 检查用户是否已存在(根据oa_user_id)
5. 已存在则更新,不存在则创建
6. 返回同步统计结果
文件: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DepartmentSyncController.java(扩展)
接口:
- POST /system/dept/sync/user - 同步OA用户
- 权限: system:user:sync
文件:
- ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
- ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
新增方法:java // 根据oaUserId查询用户 SysUser selectUserByOaUserId(@Param("oaUserId") Integer oaUserId);
修改内容:
- resultMap中添加oa_user_id映射
- selectUserVo中添加oa_user_id字段
- insertUser中添加oa_user_id支持
- updateUser中添加oa_user_id支持
- 新增selectUserByOaUserId查询方法
文件: prd/用户同步功能说明.md
- 功能概述
- 数据源说明
- 字段映射关系
- 同步逻辑详解
- 接口说明
- 使用步骤
- 验证方法
文件: 用户同步-快速开始.md
- 安装步骤
- 使用方法
- 返回示例
- 核心逻辑
- 常见问题
@Transactional注解123456(加密存储)1. 从SQL Server查询OA_User数据
↓
2. 遍历每条用户数据
↓
3. 验证数据完整性(用户名、昵称)
├─ 不完整 → 跳过
└─ 完整 → 继续
↓
4. 根据department_id查找dept_id
├─ 找到 → 使用对应dept_id
└─ 未找到 → 使用默认dept_id(100)
↓
5. 根据oa_user_id查询用户
├─ 找到 → 更新用户信息
└─ 未找到 → 检查用户名
├─ 用户名存在 → 更新并设置oa_user_id
└─ 用户名不存在 → 创建新用户
↓
6. 返回统计结果
OA_User_ID | OA_User | OA_Name | OA_departmentID | OA_gender | OA_email
1001 | zhangsan | 张三 | 1001 | 0 | zhangsan@qq.com
1002 | lisi | 李四 | 1001 | 1 | lisi@qq.com
1003 | wangwu | 王五 | 1002 | 0 | wangwu@qq.com
user_id | user_name | nick_name | dept_id | oa_user_id | email
101 | zhangsan | 张三 | 201 | 1001 | zhangsan@qq.com
102 | lisi | 李四 | 201 | 1002 | lisi@qq.com
103 | wangwu | 王五 | 202 | 1003 | wangwu@qq.com
{
"code": 200,
"msg": "同步完成!创建用户: 2, 更新用户: 1, 跳过: 0, 失败: 0",
"data": {
"created": 2,
"updated": 1,
"skipped": 0,
"error": 0,
"totalProcessed": 3
}
}
# 第一步:同步部门
POST http://localhost:8080/system/dept/sync/branch
# 第二步:同步用户
POST http://localhost:8080/system/dept/sync/user
POST http://localhost:8080/system/dept/sync/user
Headers:
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9...
curl -X POST http://localhost:8080/system/dept/sync/user \
-H "Authorization: Bearer {token}"
this.$http.post('/system/dept/sync/user').then(res => {
this.$message.success(res.msg);
this.getList();
});
必须先完成部门同步!
1. 执行 add_department_id_to_sys_dept.sql
2. 调用 /system/dept/sync/branch 同步部门
3. 然后才能同步用户
文件: ruoyi-admin/src/main/resources/application-dev.yml
spring:
datasource:
druid:
sqlserver:
enabled: true
url: jdbc:sqlserver://your-server:1433;DatabaseName=your-db
username: your-username
password: your-password
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
add_department_id_to_sys_dept.sqladd_oa_user_id_to_sys_user.sql1. 部门同步(必须先执行)
2. 用户同步(依赖部门数据)
123456本次开发完成了从SQL Server到MySQL的用户数据同步功能,主要特点:
功能已完成开发和自测,可以进入测试和部署阶段。
ruoyi
2025-10-18