# 部门同步功能测试指南 ## 测试前准备 ### 1. 执行数据库脚本 ```bash # 进入项目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. 编译项目 ```bash cd d:\project\急救转运\code\Api\RuoYi-Vue-master mvn clean package -DskipTests ``` ### 4. 启动后端服务 ```bash 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中有大量数据,测试同步性能: ```bash # 记录开始时间 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. 添加同步失败通知功能