# 旧系统同步功能更新说明 v1.2 ## 更新时间 2025-01-20 (v1.2 更新) ## 更新内容 ### 🔄 修正 adminID 参数逻辑 根据旧系统的实际需求,**adminID** 应该使用创建人对应的 **OA_UserID**,而不是新系统的 `creator_id`。 --- ## 修正详情 ### v1.2 变更 (当前版本) **文件**: `LegacySystemSyncServiceImpl.java` **方法**: `buildSyncParams()` **位置**: 第223-237行 ```java // 管理员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](./旧系统同步参数映射表.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` 2. **数据库字段** - `sys_user.oa_user_id` 字段必须存在 - 该字段已在之前的版本中添加 3. **映射关系** - 新系统的 `user_id` → `oa_user_id` → 旧系统的 `adminID` ### 如果用户未配置 OA_UserID - 同步时会记录警告日志: `创建人未配置OA_UserID,用户ID: xxx` - `adminID` 传递空字符串 - 旧系统可能拒绝创建订单 (取决于旧系统的验证规则) - **建议**: 在任务创建前确保所有用户已配置 OA_UserID --- ## 验证方法 ### 1. 查看日志输出 同步时会输出详细日志: ```log # 成功情况 INFO LegacySystemSyncServiceImpl - 获取创建人OA_UserID成功,用户ID: 10, OA_UserID: 1001 # 未配置情况 WARN LegacySystemSyncServiceImpl - 创建人未配置OA_UserID,用户ID: 10 # 异常情况 ERROR LegacySystemSyncServiceImpl - 查询创建人OA_UserID异常,用户ID: 10 ``` ### 2. 数据库验证 ```sql -- 查看任务创建人的 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` 已正确设置 2. **用户ID映射** - 新系统的用户ID可能与旧系统的管理员ID不一致 - 如需映射,可在后续版本中添加映射表 3. **日志记录** - 建议在同步时记录 adminID 的值,便于排查问题 --- ## 相关文档 - [旧系统同步参数映射表.md](./旧系统同步参数映射表.md) - **新增**,包含所有66个参数的详细说明 - [旧系统同步配置说明.md](./旧系统同步配置说明.md) - 完整配置文档 - [旧系统同步-快速开始.md](./旧系统同步-快速开始.md) - 快速配置指南 - [旧系统同步功能实现总结.md](./旧系统同步功能实现总结.md) - 实现总结 --- ## 版本历史 | 版本 | 日期 | 说明 | |------|------|------| | 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 **状态**: ✅ 已完成,待测试