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

部门同步功能 - 快速开始

一、功能说明

从SQL Server数据库同步分公司和部门数据到若依系统。

数据格式转换:
- SQL Server: 湛江--护士
- 转换后:
- 分公司: 湛江分公司 (parent_id=100)
- 部门: 护士 (parent_id=分公司ID)

二、安装步骤

1️⃣ 执行数据库脚本

# 添加department_id字段
mysql -u root -p ry-vue < sql/add_department_id_to_sys_dept.sql

# 添加菜单权限(可选)
mysql -u root -p ry-vue < sql/dept_sync_menu.sql

2️⃣ 编译项目

mvn clean package -DskipTests

3️⃣ 启动服务

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

三、使用方法

方式1: Postman调用

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

方式2: curl命令

curl -X POST http://localhost:8080/system/dept/sync/branch \
  -H "Authorization: Bearer {你的token}"

四、返回示例

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

五、验证结果

-- 查看同步的分公司
SELECT * FROM sys_dept 
WHERE parent_id = 100 AND dept_name LIKE '%分公司' 
ORDER BY dept_name;

-- 查看同步的部门(含department_id)
SELECT d1.dept_name AS '分公司', d2.dept_name AS '部门', d2.department_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 '%分公司'
ORDER BY d1.dept_name, d2.dept_name;

六、核心文件清单

Java文件

  • DepartmentSyncDTO.java - 同步数据传输对象
  • DepartmentSyncMapper.java - 数据访问接口
  • DepartmentSyncMapper.xml - SQL映射文件
  • IDepartmentSyncService.java - 服务接口
  • DepartmentSyncServiceImpl.java - 服务实现(核心逻辑)
  • DepartmentSyncController.java - 控制器
  • SysDept.java - 修改(添加departmentId字段)
  • SysDeptMapper.java - 修改(添加查询方法)
  • SysDeptMapper.xml - 修改(添加SQL语句)

SQL文件

  • sql/add_department_id_to_sys_dept.sql - 添加字段
  • sql/dept_sync_menu.sql - 添加菜单

文档

  • prd/部门同步功能说明.md - 详细说明
  • 部门同步测试指南.md - 测试指南

七、注意事项

支持重复执行 - 不会创建重复数据
事务保护 - 失败自动回滚
日志记录 - 详细记录同步过程
⚠️ 权限要求 - 需要 system:dept:sync 权限

八、问题排查

接口返回500

  1. 检查 SQL Server 连接配置 (application-dev.yml)
  2. 确认数据库字段已添加
  3. 查看日志: tail -f ruoyi-admin/logs/sys-error.log

没有数据同步

  1. 确认 SQL Server 中有数据
  2. 检查数据源配置
  3. 查看同步日志

九、后续扩展

前端添加同步按钮

在部门管理页面添加:
javascript // 调用同步接口 syncDepartments() { this.$confirm('确认同步分公司数据吗?', '提示', { type: 'warning' }).then(() => { this.$http.post('/system/dept/sync/branch').then(res => { this.$message.success(res.msg); this.getList(); // 刷新列表 }); }); }

配置定时任务

在系统管理->定时任务中添加:
- 任务名称: 分公司同步
- 调用目标: departmentSyncTask.execute
- cron表达式: 0 0 2 * * ? (每天凌晨2点)

十、联系方式

如有问题,请查看:
- 详细文档: prd/部门同步功能说明.md
- 测试指南: 部门同步测试指南.md