Files
contract-manager/docs/task/EmployeesSyncTask_ACCEPTANCE.md
songqq a784438e97 feat: 实现员工同步任务的WebSocket支持及合同名称锁定功能
- 为EmployeesSyncTask添加WebSocket客户端和服务端支持,实现实时任务进度反馈
- 新增合同名称锁定功能,防止误修改重要合同名称
- 优化SmbFileService的连接异常处理,提高稳定性
- 重构ContractFilesRebuildTasker的任务执行逻辑,改进错误处理
- 更新tasker_mapper.json注册EmployeesSyncTask
- 添加相关任务文档和验收报告

修复WebSocketClientSession的任务完成状态处理问题
改进UITools中任务执行的线程管理
优化DepartmentService的findByCode方法返回类型
2025-11-20 16:26:34 +08:00

5.5 KiB
Raw Permalink Blame History

EmployeesSyncTask WebSocket升级验收报告

任务概述

将客户端和服务器端的EmployeesSyncTask升级以支持WebSocket通信实现实时的任务执行反馈。

实现成果

1. 客户端WebSocket支持

文件: client/src/main/java/com/ecep/contract/task/EmployeesSyncTask.java

实现内容:

  • 继承 Tasker<Object>
  • 实现 WebSocketClientTasker 接口
  • 添加 getTaskName() 方法返回任务名称 "EmployeesSyncTask"
  • 添加 updateProgress() 方法支持进度更新
  • 重写 execute() 方法通过 callRemoteTask() 远程调用服务器端任务
  • 完整的错误处理和日志记录

关键代码特性:

@Override
protected Object execute(MessageHolder holder) {
    MessageHolder msgHolder = holder.sub("执行用友U8系统员工信息同步");
    msgHolder.debug("开始执行员工同步任务...");
    
    try {
        return callRemoteTask("EmployeesSyncTask", msgHolder);
    } catch (Exception e) {
        msgHolder.error("执行任务失败: " + e.getMessage());
        logger.error("EmployeesSyncTask 执行失败", e);
        throw new RuntimeException(e);
    }
}

2. 服务器端WebSocket支持和注册

文件: server/src/main/java/com/ecep/contract/cloud/u8/EmployeesSyncTask.java

实现内容:

  • 继承 Tasker<Object>
  • 实现 WebSocketServerTasker 接口
  • 添加WebSocket通信相关属性和处理器
  • 实现完整的WebSocket服务器端接口方法:
    • init(JsonNode argsNode) - 初始化参数处理
    • setSession(SessionInfo session) - 设置WebSocket会话
    • setMessageHandler(BiConsumer<Message, Boolean>) - 消息处理
    • setTitleHandler(BiConsumer<String, Boolean>) - 标题更新
    • setPropertyHandler(BiConsumer<String, Object>) - 属性设置
    • setProgressHandler(BiConsumer<Long, Long>) - 进度更新
  • 保持原有业务逻辑完整不变
  • 集成消息推送和进度报告机制

关键WebSocket集成:

@Override
protected Object execute(MessageHolder holder) throws Exception {
    YongYouU8Service service = SpringApp.getBean(YongYouU8Service.class);

    // 发送任务开始消息
    if (messageHandler != null) {
        messageHandler.accept(Message.info("开始从U8系统同步员工信息"), false);
    }

    // ... 业务逻辑执行 ...

    // 发送任务完成消息
    if (messageHandler != null) {
        messageHandler.accept(Message.info("员工信息同步任务完成,共处理 " + counter.get() + " 条记录"), false);
    }
}

3. 任务注册配置

文件: server/src/main/resources/tasker_mapper.json

实现内容:

  • 添加任务映射: "EmployeesSyncTask": "com.ecep.contract.cloud.u8.EmployeesSyncTask"
  • 确保任务可以通过WebSocket被发现和调用
  • 与其他已注册任务保持一致的配置格式

质量验证

编译验证

  • Maven编译成功无编译错误
  • 所有依赖正确解析
  • 代码符合项目编码规范

接口一致性验证

  • 客户端实现完全符合 WebSocketClientTasker 接口规范
  • 服务器端实现完全符合 WebSocketServerTasker 接口规范
  • 任务名称 "EmployeesSyncTask" 在客户端和服务器端保持一致
  • 参数传递和返回类型匹配

业务逻辑保持

  • 原有员工信息同步业务逻辑完全保留
  • U8系统数据查询逻辑未改变
  • 员工属性映射和处理逻辑未改变
  • 错误处理和日志记录逻辑增强

WebSocket通信流程

1. 任务初始化

客户端 -> 服务器: 启动EmployeesSyncTask任务
服务器 -> 客户端: 发送任务开始消息

2. 执行进度反馈

服务器: 每处理一条员工记录
服务器 -> 客户端: 发送进度更新 (当前/总数)
服务器 -> 客户端: 发送详细处理消息

3. 任务完成

服务器: 所有记录处理完成
服务器 -> 客户端: 发送任务完成消息(含处理总数)

技术特性

实时反馈

  • 任务开始、进行中、完成状态实时推送
  • 进度条实时更新 (当前处理数/总数)
  • 详细处理信息实时显示

错误处理

  • 任务取消时发送取消通知
  • 异常情况下发送错误消息
  • 客户端和服务器端都有完整的异常捕获

性能优化

  • 保持原有业务性能
  • WebSocket消息处理不影响同步性能
  • 异步消息推送,不阻塞业务逻辑

验收标准

验收项目 状态 说明
客户端WebSocket支持 正确实现WebSocketClientTasker接口
服务器端WebSocket支持 正确实现WebSocketServerTasker接口
任务注册配置 已在tasker_mapper.json中正确注册
代码编译 Maven编译无错误
业务逻辑保持 原有功能完全保留
消息通信 支持开始/进度/完成消息推送
错误处理 完整的异常处理机制

后续建议

  1. 集成测试: 建议在实际U8环境进行端到端测试
  2. 性能监控: 在生产环境中监控WebSocket连接状态和消息传输
  3. 用户培训: 向用户介绍新的实时反馈功能
  4. 文档更新: 更新相关用户手册和技术文档

结论

EmployeesSyncTask WebSocket升级任务已完成

所有预定目标均已实现:

  • 客户端成功支持WebSocket通信
  • 服务器端成功实现WebSocket服务器端接口
  • 任务配置正确注册
  • 代码质量符合项目标准
  • 业务功能完整保留并增强

该实现提供了完整的实时反馈机制,显著提升了用户体验,同时保持了系统的稳定性和性能。