feat: 实现员工同步任务的WebSocket支持及合同名称锁定功能

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

修复WebSocketClientSession的任务完成状态处理问题
改进UITools中任务执行的线程管理
优化DepartmentService的findByCode方法返回类型
This commit is contained in:
2025-11-20 16:26:34 +08:00
parent 02afa189f8
commit a784438e97
28 changed files with 983 additions and 329 deletions

View File

@@ -18,12 +18,6 @@ public class ContractRepairAllTasker extends Tasker<Object> implements WebSocket
super.updateProgress(current, total);
}
@Override
public void updateTitle(String title) {
// 使用Tasker的updateTitle方法更新标题
super.updateTitle(title);
}
@Override
public String getTaskName() {
return "ContractRepairAllTask";
@@ -34,6 +28,7 @@ public class ContractRepairAllTasker extends Tasker<Object> implements WebSocket
logger.info("开始执行合同修复任务");
updateTitle("合同数据修复");
Object result = callRemoteTask(holder, getLocale());
logger.info("合同修复任务执行完成");
return result;
}

View File

@@ -1,13 +1,37 @@
package com.ecep.contract.task;
import com.ecep.contract.MessageHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EmployeesSyncTask extends Tasker<Object> {
import com.ecep.contract.MessageHolder;
import com.ecep.contract.WebSocketClientTasker;
/**
* 员工同步任务客户端实现
* 用于通过WebSocket与服务器通信执行用友U8系统员工信息同步
*/
public class EmployeesSyncTask extends Tasker<Object> implements WebSocketClientTasker {
private static final Logger logger = LoggerFactory.getLogger(EmployeesSyncTask.class);
@Override
public String getTaskName() {
return "EmployeesSyncTask";
}
@Override
public void updateProgress(long current, long total) {
super.updateProgress(current, total);
}
@Override
protected Object execute(MessageHolder holder) throws Exception {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'execute'");
}
// 设置任务标题
updateTitle("用友U8系统-同步员工信息");
// 更新任务消息
updateMessage("开始执行员工信息同步...");
// 调用远程WebSocket任务
return callRemoteTask(holder, getLocale());
}
}

View File

@@ -4,14 +4,11 @@ import java.util.HashMap;
import java.util.Locale;
import java.util.logging.Level;
import com.ecep.contract.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import com.ecep.contract.Desktop;
import com.ecep.contract.Message;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.SpringApp;
import com.ecep.contract.service.CompanyService;
import com.ecep.contract.service.EmployeeService;
import com.ecep.contract.service.SysConfService;
@@ -63,6 +60,22 @@ public abstract class Tasker<T> extends Task<T> {
return currentUser;
}
@Override
public void run() {
if (this instanceof WebSocketClientTasker) {
this.getState();
}
super.run();
}
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
if (this instanceof WebSocketClientTasker) {
((WebSocketClientTasker) this).cancelTask();
}
return super.cancel(mayInterruptIfRunning);
}
@Override
protected T call() throws Exception {
MessageHolderImpl holder = new MessageHolderImpl();