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

旧系统同步功能更新说明 v1.2

更新时间

2025-01-20 (v1.2 更新)

更新内容

🔄 修正 adminID 参数逻辑

根据旧系统的实际需求,**adminID** 应该使用创建人对应的 OA_UserID,而不是新系统的 creator_id


修正详情

v1.2 变更 (当前版本)

文件: LegacySystemSyncServiceImpl.java
方法: buildSyncParams()
位置: 第223-237行

// 管理员ID(创建人ID对应的OA_UserID)
String adminID = "";
if (task.getCreatorId() != null) {
    try {
        SysUser creator = sysUserMapper.selectUserById(task.getCreatorId());
        if (creator != null && creator.getOaUserId() != null) {
            adminID = creator.getOaUserId().toString();
            log.info("获取创建人OA_UserID成功,用户ID: {}, OA_UserID: {}", task.getCreatorId(), adminID);
        } else {
            log.warn("创建人未配置OA_UserID,用户ID: {}", task.getCreatorId());
        }
    } catch (Exception e) {
        log.error("查询创建人OA_UserID异常,用户ID: {}", task.getCreatorId(), e);
    }
}
params.put("adminID", adminID);

参数说明:
- 参数名: adminID
- 数据来源: sys_user.oa_user_id (通过 creator_id 查询)
- 查询逻辑:
1. 从任务表获取 creator_id
2. 查询用户表: SELECT * FROM sys_user WHERE user_id = creator_id
3. 获取用户的 oa_user_id 字段
4. 将 oa_user_id 作为 adminID 传递
- 数据类型: 字符串 (数字字符串)
- 用途: 关联旧系统OA管理员账号

示例值:
adminID=1001


完整参数列表

现在同步到旧系统的参数共 66个,包括:

核心参数

  • adminID - 新增 (创建人ID)
  • ServiceOrdClass - 单据类型
  • ServiceOrdCoName - 联系人姓名
  • ServiceOrdCoPhone - 联系人电话
  • ServiceOrdPtName - 患者姓名
  • ... (其他62个参数)

完整参数映射请查看: 旧系统同步参数映射表.md


数据流转

用户创建急救转运任务
    ↓
保存到 sys_task 表 (creator_id = 当前登录用户ID)
    ↓
异步调用同步服务
    ↓
根据 task.creator_id 查询 sys_user 表
    ↓
获取 user.oa_user_id 作为 adminID
    ↓
构建66个参数 (包括 adminID)
    ↓
HTTP POST 到旧系统 admin_save_19.gds
    ↓
旧系统返回: OK:ServiceOrdID
    ↓
保存到 sys_task_emergency.legacy_service_ord_id

重要变更

v1.2 vs v1.1

项目 v1.1 v1.2 (当前)
adminID 来源 task.creator_id user.oa_user_id
查询逻辑 直接使用 通过 creator_id 查询用户表
空值处理 返回空字符串 返回空字符串 + 日志警告
日志记录 详细的成功/失败日志

为什么要使用 OA_UserID?

  1. 数据一致性: 新系统的 user_id 和旧系统的管理员ID不一致
  2. 系统关联: 旧系统中的管理员ID就是OA系统的用户ID
  3. 数据追溯: 可以在旧系统中正确关联到创建人
  4. 业务需求: 旧系统依赖OA_UserID进行权限控制和数据统计

预置条件

必须满足的条件

  1. 用户必须配置 OA_UserID
  • 在后台用户管理中,为每个用户配置对应的 OA用户ID
  • 路径: 系统管理用户管理编辑用户OA用户ID
  1. 数据库字段
  • sys_user.oa_user_id 字段必须存在
  • 该字段已在之前的版本中添加
  1. 映射关系
  • 新系统的 user_idoa_user_id → 旧系统的 adminID

如果用户未配置 OA_UserID

  • 同步时会记录警告日志: 创建人未配置OA_UserID,用户ID: xxx
  • adminID 传递空字符串
  • 旧系统可能拒绝创建订单 (取决于旧系统的验证规则)
  • 建议: 在任务创建前确保所有用户已配置 OA_UserID

验证方法

1. 查看日志输出

同步时会输出详细日志:

# 成功情况
INFO  LegacySystemSyncServiceImpl - 获取创建人OA_UserID成功,用户ID: 10, OA_UserID: 1001

# 未配置情况
WARN  LegacySystemSyncServiceImpl - 创建人未配置OA_UserID,用户ID: 10

# 异常情况
ERROR LegacySystemSyncServiceImpl - 查询创建人OA_UserID异常,用户ID: 10

2. 数据库验证

-- 查看任务创建人的 OA_UserID
SELECT 
    t.task_id,
    t.task_code,
    t.creator_id,
    u.user_name,
    u.oa_user_id AS adminID,
    e.legacy_service_ord_id,
    e.sync_status
FROM sys_task t
LEFT JOIN sys_user u ON t.creator_id = u.user_id
LEFT JOIN sys_task_emergency e ON t.task_id = e.task_id
WHERE t.task_type = 'EMERGENCY_TRANSFER'
ORDER BY t.create_time DESC
LIMIT 10;

3. 旧系统验证

在旧系统的ServiceOrder表中查询:
sql SELECT TOP 10 ServiceOrdID, ServiceOrd_CC_ID, -- 应该等于新系统用户的 oa_user_id ServiceOrdCoName, ServiceOrdPtName, ServiceOrd_CC_Time FROM ServiceOrder WHERE ServiceOrdSource = 10 -- 新系统来源 ORDER BY ServiceOrd_CC_Time DESC


兼容性说明

向后兼容

✅ 完全兼容,旧版本同步的任务不受影响

新任务要求

  • 所有新创建的任务必须有 creator_id
  • creator_id 会自动填充为当前登录用户ID

注意事项

  1. adminID 为必传参数
  • 虽然代码中做了空值处理,但旧系统可能要求该字段不为空
  • 确保任务创建时 creator_id 已正确设置
  1. 用户ID映射
  • 新系统的用户ID可能与旧系统的管理员ID不一致
  • 如需映射,可在后续版本中添加映射表
  1. 日志记录
  • 建议在同步时记录 adminID 的值,便于排查问题

相关文档


版本历史

版本 日期 说明
v1.2 2025-01-20 修正 adminID 为使用 OA_UserID,增加日志记录
v1.1 2025-01-20 新增 adminID 参数,创建参数映射表
v1.0 2025-01-20 初始版本,实现基础同步功能

开发者备注

代码位置

  • 文件: d:\project\急救转运\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\service\impl\LegacySystemSyncServiceImpl.java
  • 行号: 223-237 (adminID 参数获取逻辑)

相关字段

  • 新系统任务表: sys_task.creator_id
  • 新系统用户表: sys_user.oa_user_id
  • 旧系统请求参数: adminID
  • 旧系统数据库: ServiceOrder.ServiceOrd_CC_ID

测试建议

  1. 确保用户配置OA_UserID: 在后台用户管理中为测试用户配置 OA用户ID
  2. 创建测试任务: 查看日志中的 OA_UserID 获取情况
  3. 验证旧系统: 在旧系统中查询订单,验证 ServiceOrd_CC_ID 是否为 OA_UserID
  4. 测试边界情况: 创建任务时用户未配置OA_UserID,查看警告日志

完成时间: 2025-01-20
当前版本: v1.2
状态: ✅ 已完成,待测试