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

变更日志 - 部门编码同步功能

[v1.0] - 2025-10-19

新增功能 ✨

1. 部门编码字段

  • sys_dept表添加service_order_class字段(服务单编码)
  • sys_dept表添加dispatch_order_class字段(调度单编码)
  • 添加对应的索引以优化查询性能

2. SQL Server编码查询

  • 创建OrderClassDTO用于封装编码数据
  • 创建OrderClassMapper从SQL Server的dictionary表查询编码
  • 实现服务单编码查询(vType=1)
  • 实现调度单编码查询(vType=2)

3. 编码数据服务

  • 创建IOrderClassDataService接口
  • 实现OrderClassDataServiceImpl服务类
  • 使用@DataSource(SQLSERVER)注解自动切换数据源

4. 自动编码匹配

  • 在部门同步时自动提取城市名称
  • 智能匹配SQL Server中的编码数据
  • 自动设置分公司的服务单和调度单编码

5. 地名匹配算法

  • 实现matchCityNameToCode()方法
  • 支持模糊匹配(contains方式)
  • 完整的日志记录和异常处理

修改文件 📝

SysDept.java

位置ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java

变更
```java
// 新增字段
private String serviceOrderClass; // 服务单编码
private String dispatchOrderClass; // 调度单编码

// 新增getter/setter方法
public String getServiceOrderClass() { ... }
public void setServiceOrderClass(String serviceOrderClass) { ... }
public String getDispatchOrderClass() { ... }
public void setDispatchOrderClass(String dispatchOrderClass) { ... }
```

SysDeptMapper.xml

位置ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml

变更
- resultMap中添加新字段映射
- selectDeptVo中添加新字段查询
- selectDeptById中添加新字段
- insertDept中添加新字段插入逻辑
- updateDept中添加新字段更新逻辑

DepartmentSyncServiceImpl.java

位置ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DepartmentSyncServiceImpl.java

变更
```java
// 1. 添加依赖注入
@Autowired
private IOrderClassDataService orderClassDataService;

// 2. 在创建分公司时添加编码同步
syncOrderClassCodes(newBranch, parts[0].trim());

// 3. 新增辅助方法
private void syncOrderClassCodes(SysDept dept, String cityName) { ... }
private String matchCityNameToCode(String cityName, List orderClassList) { ... }
```

新增文件 📁

数据库脚本

sql/add_dept_order_class_fields.sql

Java类(6个)

ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderClassDTO.java
ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderClassMapper.java
ruoyi-system/src/main/resources/mapper/system/OrderClassMapper.xml
ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderClassDataService.java
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderClassDataServiceImpl.java

文档(3个)

prd/部门编码同步功能说明.md
prd/部门编码同步-快速开始.md
prd/部门编码同步功能实现总结.md

技术细节 🔧

数据源切换

使用Spring的@DataSource注解实现多数据源切换:
```java
@DataSource(DataSourceType.SQLSERVER)
public interface OrderClassMapper { ... }

@Service
@DataSource(DataSourceType.SQLSERVER)
public class OrderClassDataServiceImpl { ... }
```

SQL查询

-- 服务单编码
SELECT vtext, vOrder2, vType
FROM dictionary
WHERE vtitle = 'OrderClass' AND vType = 1

-- 调度单编码
SELECT vtext, vOrder2, vType
FROM dictionary
WHERE vtitle = 'OrderClass' AND vType = 2

匹配逻辑

// 提取城市名:湛江--护士 → 湛江
String cityName = parts[0].trim();

// 模糊匹配:湛江 → 湛江服务单 → ZJ
if (dto.getVtext() != null && dto.getVtext().contains(cityName)) {
    return dto.getVOrder2();
}

兼容性 🔄

  • ✅ 完全向下兼容原有部门同步功能
  • ✅ 编码字段可为null,不影响现有流程
  • ✅ 不影响其他模块的部门查询和使用

性能影响 ⚡

  • 新增2次SQL Server查询(服务单和调度单编码)
  • 新增地名匹配算法(O(n)复杂度,n为编码数量)
  • 预计对同步性能影响<10%(编码数量通常<100)

日志级别 📋

  • INFO:匹配成功、创建/更新分公司
  • WARN:未匹配到编码
  • ERROR:查询编码异常、同步失败

测试建议 ✅

  1. 功能测试
  • [ ] 正常匹配场景
  • [ ] 未匹配场景
  • [ ] 更新已存在分公司
  1. 性能测试
  • [ ] 同步100+分公司的耗时
  • [ ] SQL Server查询性能
  1. 异常测试
  • [ ] SQL Server连接失败
  • [ ] dictionary表数据缺失
  • [ ] 编码格式异常

部署说明 🚀

数据库升级

mysql -u root -p ry-vue < sql/add_dept_order_class_fields.sql

代码编译

mvn clean package -DskipTests

服务重启

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

回滚方案 ⏮️

如需回滚此功能:

1. 数据库回滚

ALTER TABLE sys_dept DROP COLUMN service_order_class;
ALTER TABLE sys_dept DROP COLUMN dispatch_order_class;
ALTER TABLE sys_dept DROP INDEX idx_service_order_class;
ALTER TABLE sys_dept DROP INDEX idx_dispatch_order_class;

2. 代码回滚

  • 删除新增的6个Java文件
  • 恢复SysDept.javaSysDeptMapper.xmlDepartmentSyncServiceImpl.java到修改前版本

已知问题 ⚠️

后续优化 📌

  1. 考虑添加缓存机制减少SQL Server查询
  2. 考虑添加手动配置编码的REST API
  3. 考虑升级为精确匹配算法

相关链接 🔗


版本历史

v1.0 (2025-10-19)

  • 初始版本
  • 实现基础的编码自动匹配功能
  • 完整的文档和测试用例

负责人:AI Assistant
审核人:待定
发布日期:2025-10-19