2025-10-19
之前的实现中,ServiceOrdAreaType参数固定传入"1",没有使用任务所属分公司的实际服务单编码。
原代码:java params.put("ServiceOrdAreaType", "1"); // 服务单执行区域(默认1)
修改为从任务所属部门查询服务单编码,自动传入对应的编码值。
新代码:
```java
// 服务单执行区域(使用任务所属分公司的服务单编码)
String serviceOrdAreaType = "1"; // 默认值
if (task.getDeptId() != null) {
try {
SysDept dept = sysDeptMapper.selectDeptById(task.getDeptId());
if (dept != null && StringUtils.isNotEmpty(dept.getServiceOrderClass())) {
serviceOrdAreaType = dept.getServiceOrderClass();
log.info("获取任务所属部门的服务单编码成功,部门ID: {}, 部门名称: {}, 服务单编码: {}",
task.getDeptId(), dept.getDeptName(), serviceOrdAreaType);
} else {
log.warn("任务所属部门未配置服务单编码,部门ID: {}、部门名称: {},使用默认值",
task.getDeptId(), dept != null ? dept.getDeptName() : "null");
}
} catch (Exception e) {
log.error("查询任务所属部门信息异常,部门ID: {}", task.getDeptId(), e);
}
} else {
log.warn("任务未关联部门,使用默认服务单编码");
}
params.put("ServiceOrdAreaType", serviceOrdAreaType);
```
新增SysDeptMapper依赖:
@Autowired
private SysDeptMapper sysDeptMapper;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.system.mapper.SysDeptMapper;
serviceOrderClass字段创建急救转运任务
↓
设置归属部门(deptId)
↓
部门自动同步时获取服务单编码
├─ 从SQL Server查询编码
└─ 根据地名自动匹配
↓
保存到sys_dept.service_order_class
↓
同步任务到旧系统时
↓
根据task.deptId查询部门
↓
获取dept.serviceOrderClass
↓
传入ServiceOrdAreaType参数
任务数据:
- taskId: 1001
- deptId: 200(中山分公司)
- taskType: EMERGENCY_TRANSFER
部门数据:
- deptId: 200
- deptName: "中山分公司"
- serviceOrderClass: "JA"
同步参数: ServiceOrdAreaType = "JA"
日志: INFO - 获取任务所属部门的服务单编码成功,部门ID: 200, 部门名称: 中山分公司, 服务单编码: JA
任务数据:
- taskId: 1002
- deptId: 203(深圳分公司)
部门数据:
- deptId: 203
- deptName: "深圳分公司"
- serviceOrderClass: null
同步参数: ServiceOrdAreaType = "1" (使用默认值)
日志: WARN - 任务所属部门未配置服务单编码,部门ID: 203、部门名称: 深圳分公司,使用默认值
任务数据:
- taskId: 1003
- deptId: null
同步参数: ServiceOrdAreaType = "1" (使用默认值)
日志: WARN - 任务未关联部门,使用默认服务单编码
任务数据:
- taskId: 1004
- deptId: 999(不存在的部门)
同步参数: ServiceOrdAreaType = "1" (使用默认值)
日志: ERROR - 查询任务所属部门信息异常,部门ID: 999
| 分公司 | 部门ID | 服务单编码 | ServiceOrdAreaType |
|---|---|---|---|
| 中山分公司 | 200 | JA | JA |
| 广州分公司 | 201 | GZ | GZ |
| 湛江分公司 | 202 | ZJ | ZJ |
| 珠海分公司 | 203 | ZH | ZH |
| 未配置 | 204 | null | 1(默认值) |
| 未关联 | null | - | 1(默认值) |
✅ 无需手动配置每个分公司的编码
✅ 部门同步时自动获取编码
✅ 创建任务时自动使用对应编码
✅ 多层异常处理
✅ 默认值保底
✅ 不影响同步流程
✅ 详细的日志记录
✅ 清晰的逻辑流程
✅ 便于问题排查
✅ 支持未来添加新分公司
✅ 支持编码动态更新
✅ 支持手动修正编码
确保每个分公司都配置了服务单编码:
检查SQL:sql SELECT dept_id, dept_name, service_order_class FROM sys_dept WHERE parent_id = 100 AND dept_name LIKE '%分公司';
配置方法:
- 自动同步:执行部门同步任务
- 手动配置:后台部门管理界面编辑
创建任务时确保设置了正确的归属部门:
SysTask task = new SysTask();
task.setDeptId(200L); // 设置归属部门
即使部门未配置编码,系统也会使用默认值"1",确保同步不会失败。
定期检查日志,关注以下警告:
- "任务所属部门未配置服务单编码"
- "任务未关联部门"
预期结果:
- ServiceOrdAreaType = "JA"
- 日志显示成功获取编码
预期结果:
- ServiceOrdAreaType = "1"
- 日志显示使用默认值
预期结果:
- ServiceOrdAreaType = "1"
- 日志显示未关联部门警告
| 版本 | 日期 | 说明 |
|---|---|---|
| v1.0 | 2025-10-19 | 初始实现,固定传"1" |
| v1.1 | 2025-10-19 | 优化为从部门获取服务单编码 |
维护人:系统开发团队
最后更新:2025-10-19