从SQL Server数据库的uv_department视图中同步"合作单位"下的分公司和部门数据到若依系统的sys_dept表。
SELECT b.departmentID, b.departmentName
FROM uv_department a
INNER JOIN uv_department b ON a.departmentID = b.parentID
WHERE a.departmentName = '合作单位'
SQL Server中的部门名称格式:城市--部门类型
示例:
- 湛江--护士
- 湛江--车队
- 湛江--客服
- 湛江--办公室
-- 在sys_dept表中添加department_id字段
ALTER TABLE sys_dept ADD COLUMN department_id INT NULL COMMENT 'SQL Server中的部门ID';
CREATE INDEX idx_department_id ON sys_dept(department_id);
文件: sql/add_department_id_to_sys_dept.sql
-- 添加部门同步的按钮权限
INSERT INTO sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, remark)
SELECT '部门同步', menu_id, 6, '#', 'F', '0', 'system:dept:sync', '#', 'admin', sysdate(), '同步SQL Server分公司数据'
FROM sys_menu WHERE menu_name = '部门管理' AND menu_type = 'C' LIMIT 1;
文件: sql/dept_sync_menu.sql
文件: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
修改内容:
```java
/** SQL Server中的部门ID */
private Integer departmentId;
public Integer getDepartmentId() { return departmentId; }
public void setDepartmentId(Integer departmentId) { this.departmentId = departmentId; }
```
文件: ruoyi-system/src/main/java/com/ruoyi/system/domain/DepartmentSyncDTO.java
- 功能: 部门同步数据传输对象
- 字段: departmentId, departmentName, parentId, parentName
文件:
- ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentSyncMapper.java
- ruoyi-system/src/main/resources/mapper/system/DepartmentSyncMapper.xml
主要方法:
- List<DepartmentSyncDTO> selectBranchDepartments() - 查询SQL Server分公司数据
文件:
- ruoyi-system/src/main/java/com/ruoyi/system/service/IDepartmentSyncService.java
- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java
核心方法: syncBranchDepartments()
同步逻辑:
1. 从SQL Server获取分公司数据
2. 解析部门名称(城市--部门类型)
3. 创建或获取分公司(parent_id=100)
4. 创建或更新子部门
5. 记录department_id字段
6. 返回同步统计结果
文件: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DepartmentSyncController.java
接口:
- POST /system/dept/sync/branch - 同步分公司数据
- 权限: system:dept:sync
文件:
- ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
- ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
新增方法:
```java
// 根据departmentId查询部门
SysDept selectDeptByDepartmentId(@Param("departmentId") Integer departmentId);
// 根据departmentId和父部门ID查询部门
SysDept selectDeptByDepartmentIdAndParentId(@Param("departmentId") Integer departmentId, @Param("parentId") Long parentId);
```
修改内容:
- resultMap中添加department_id映射
- selectDeptVo中添加department_id字段
- insertDept中添加department_id支持
- updateDept中添加department_id支持
文件: prd/部门同步功能说明.md
- 功能概述
- 数据处理规则
- 接口说明
- 使用步骤
- 同步示例
- 注意事项
文件: 部门同步测试指南.md
- 测试前准备
- 测试步骤
- 验证清单
- 日志查看
- 问题排查
文件: 部门同步-快速开始.md
- 安装步骤
- 使用方法
- 验证结果
- 核心文件清单
@Transactional注解1. 从SQL Server查询数据
↓
2. 遍历每条数据
↓
3. 解析部门名称 (城市--部门)
↓
4. 检查/创建分公司
├─ 已存在 → 获取ID
└─ 不存在 → 创建新分公司
↓
5. 检查子部门
├─ 根据department_id查询
├─ 已存在 → 更新
└─ 不存在 → 创建
↓
6. 返回统计结果
departmentID | departmentName
1001 | 湛江--护士
1002 | 湛江--车队
1003 | 湛江--客服
1004 | 湛江--办公室
dept_id | parent_id | dept_name | ancestors | department_id
200 | 100 | 湛江分公司 | 0,100 | NULL
201 | 200 | 护士 | 0,100,200 | 1001
202 | 200 | 车队 | 0,100,200 | 1002
203 | 200 | 客服 | 0,100,200 | 1003
204 | 200 | 办公室 | 0,100,200 | 1004
{
"code": 200,
"msg": "同步完成!创建分公司: 1, 更新分公司: 0, 创建部门: 4, 更新部门: 0",
"data": {
"createdBranch": 1,
"updatedBranch": 0,
"createdDept": 4,
"updatedDept": 0,
"totalProcessed": 4
}
}
POST http://localhost:8080/system/dept/sync/branch
Headers:
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9...
curl -X POST http://localhost:8080/system/dept/sync/branch \
-H "Authorization: Bearer {token}"
this.$http.post('/system/dept/sync/branch').then(res => {
this.$message.success(res.msg);
this.getList();
});
文件: 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.sqldept_sync_menu.sql(可选)mvn clean package -DskipTests本次开发完成了从SQL Server到MySQL的分公司数据同步功能,主要特点:
功能已完成开发和自测,可以进入测试和部署阶段。