编辑 | blame | 历史 | 原始文档

部门同步功能测试指南

测试前准备

1. 执行数据库脚本

# 进入项目sql目录
cd d:\project\急救转运\code\Api\RuoYi-Vue-master\sql

# 执行添加department_id字段的脚本
mysql -h localhost -u root -p ry-vue < add_department_id_to_sys_dept.sql

# 执行添加菜单权限的脚本(可选)
mysql -h localhost -u root -p ry-vue < dept_sync_menu.sql

2. 确认SQL Server数据源配置

检查文件:ruoyi-admin/src/main/resources/application-dev.yml

确保sqlserver数据源配置正确:
```yaml
spring:
datasource:
druid:
# 主数据源(MySQL)
master:
url: jdbc:mysql://localhost:3306/ry-vue?...
username: root
password: password

  # 从数据源(SQL Server)
  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

### 3. 编译项目

cd d:\project\急救转运\code\Api\RuoYi-Vue-master
mvn clean package -DskipTests
```

4. 启动后端服务

cd ruoyi-admin
java -jar target/ruoyi-admin.jar

测试步骤

测试1: 使用Postman测试

步骤1:获取Token

POST http://localhost:8080/login
Content-Type: application/json

{
  "username": "admin",
  "password": "admin123"
}

返回示例:
json { "code": 200, "msg": "操作成功", "token": "eyJhbGciOiJIUzUxMiJ9..." }

步骤2:调用同步接口

POST http://localhost:8080/system/dept/sync/branch
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9...

预期返回:
json { "code": 200, "msg": "同步完成!创建分公司: 3, 更新分公司: 0, 创建部门: 12, 更新部门: 0", "data": { "createdBranch": 3, "updatedBranch": 0, "createdDept": 12, "updatedDept": 0, "totalProcessed": 12 } }

步骤3:验证数据

查询数据库:
```sql
-- 查看新创建的分公司
SELECT * FROM sys_dept
WHERE parent_id = 100
AND dept_name LIKE '%分公司'
AND del_flag = '0'
ORDER BY create_time DESC;

-- 查看新创建的子部门
SELECT d1.dept_name AS '分公司', d2.dept_name AS '部门', d2.department_id AS 'SQL Server ID'
FROM sys_dept d1
INNER JOIN sys_dept d2 ON d1.dept_id = d2.parent_id
WHERE d1.parent_id = 100
AND d1.dept_name LIKE '%分公司'
AND d2.del_flag = '0'
ORDER BY d1.dept_name, d2.dept_name;
```

测试2: 测试幂等性(重复同步)

步骤1:记录第一次同步结果

第一次同步:
- 创建分公司: 3
- 创建部门: 12

步骤2:立即再次执行同步

POST http://localhost:8080/system/dept/sync/branch
Authorization: Bearer {token}

步骤3:验证结果

预期返回:
json { "code": 200, "msg": "同步完成!创建分公司: 0, 更新分公司: 0, 创建部门: 0, 更新部门: 12", "data": { "createdBranch": 0, "updatedBranch": 0, "createdDept": 0, "updatedDept": 12, "totalProcessed": 12 } }

验证:
- 数据库中部门数量不变
- update_time字段已更新
- 没有重复数据

测试3: 测试错误处理

场景1:SQL Server连接失败

  1. 临时停止SQL Server服务
  2. 调用同步接口
  3. 预期返回错误信息

场景2:权限不足

  1. 使用普通用户登录(没有system:dept:sync权限)
  2. 调用同步接口
  3. 预期返回403权限不足

验证清单

功能验证

  • [ ] 能够成功连接SQL Server数据库
  • [ ] 能够正确解析部门名称(城市--部门类型)
  • [ ] 能够创建分公司(parent_id=100)
  • [ ] 能够创建子部门(parent_id=分公司ID)
  • [ ] department_id字段正确记录SQL Server的departmentID
  • [ ] ancestors字段格式正确
  • [ ] 重复同步不会创建重复数据
  • [ ] 同步日志记录完整

数据验证

  • [ ] 分公司名称格式:{城市}分公司
  • [ ] 子部门名称正确
  • [ ] 部门层级关系正确
  • [ ] 所有部门status='0'(正常状态)
  • [ ] create_by和update_by为'sync'

异常验证

  • [ ] SQL Server连接失败时有友好提示
  • [ ] 无权限时返回403
  • [ ] 部门名称格式错误时跳过处理
  • [ ] 事务回滚正常工作

日志查看

查看同步日志:
bash tail -f ruoyi-admin/logs/sys-info.log | grep -i "department"

关键日志示例:
2025-10-18 14:30:00 INFO DepartmentSyncServiceImpl - 从SQL Server获取到 12 条分公司数据 2025-10-18 14:30:01 INFO DepartmentSyncServiceImpl - 创建新分公司: 湛江分公司, ID: 200 2025-10-18 14:30:01 INFO DepartmentSyncServiceImpl - 创建新部门: 湛江分公司 -> 护士, departmentId: 1001 2025-10-18 14:30:01 INFO DepartmentSyncServiceImpl - 创建新部门: 湛江分公司 -> 车队, departmentId: 1002 ... 2025-10-18 14:30:02 INFO DepartmentSyncServiceImpl - 同步完成!创建分公司: 3, 更新分公司: 0, 创建部门: 12, 更新部门: 0

常见问题排查

问题1: 接口返回500错误

排查步骤:
1. 查看后台日志:tail -f ruoyi-admin/logs/sys-error.log
2. 检查SQL Server连接配置
3. 检查数据库字段是否已添加
4. 检查Mapper XML文件是否正确

问题2: 没有数据同步

排查步骤:
1. 确认SQL Server中有数据:
sql SELECT b.departmentID, b.departmentName FROM uv_department a INNER JOIN uv_department b ON a.departmentID = b.parentID WHERE a.departmentName = '合作单位'
2. 确认数据源配置正确
3. 查看同步日志

问题3: 部门层级错误

排查步骤:
1. 检查ancestors字段格式
2. 确认parent_id正确
3. 查看同步日志中的分公司ID

性能测试

测试大量数据同步

如果SQL Server中有大量数据,测试同步性能:

# 记录开始时间
date

# 调用同步接口
curl -X POST http://localhost:8080/system/dept/sync/branch \
  -H "Authorization: Bearer {token}"

# 记录结束时间
date

预期性能指标:
- 100条数据:< 5秒
- 500条数据:< 20秒
- 1000条数据:< 40秒

测试完成标准

所有以下条件满足即测试通过:
1. ✅ 能够成功从SQL Server获取数据
2. ✅ 能够正确解析部门名称
3. ✅ 能够创建分公司和子部门
4. ✅ department_id字段正确
5. ✅ 重复同步不会创建重复数据
6. ✅ 异常情况有友好提示
7. ✅ 日志记录完整
8. ✅ 数据库数据正确

下一步

测试通过后,可以:
1. 在前端部门管理页面添加"同步"按钮
2. 配置定时任务自动同步
3. 添加同步历史记录功能
4. 添加同步失败通知功能