refactor: 重构供应商文件类型枚举及相关服务
feat: 为多个服务添加缓存支持 fix: 修复WebSocket任务管理和远程调用异常处理 refactor: 重命名CompanyVendorFileType为VendorFileType refactor: 优化项目成本导入任务实现 fix: 修复ContractTabSkinBase中的空指针问题 refactor: 统一WebSocket客户端任务调用接口
This commit is contained in:
@@ -2,6 +2,7 @@ package com.ecep.contract.service;
|
||||
|
||||
import com.ecep.contract.Message;
|
||||
import com.ecep.contract.constant.WebSocketConstant;
|
||||
import com.ecep.contract.ui.Tasker;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
@@ -13,7 +14,11 @@ import org.springframework.web.socket.TextMessage;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
@Service
|
||||
@@ -29,7 +34,9 @@ public class WebSocketServerTaskManager implements InitializingBean {
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
taskClzMap = Map.of(
|
||||
"ContractSyncTask", "com.ecep.contract.cloud.u8.ContractSyncTask",
|
||||
"ContractRepairTask", "com.ecep.contract.ds.contract.tasker.ContractRepairTask"
|
||||
"ContractRepairTask", "com.ecep.contract.ds.contract.tasker.ContractRepairTask",
|
||||
"ContractVerifyTask", "com.ecep.contract.ds.contract.tasker.ContractVerifyTask",
|
||||
"ProjectCostImportItemsFromContractsTasker", "com.ecep.contract.ds.project.ProjectCostImportItemsFromContractsTasker"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -62,7 +69,6 @@ public class WebSocketServerTaskManager implements InitializingBean {
|
||||
JsonNode argsNode = jsonNode.get(WebSocketConstant.ARGUMENTS_FIELD_NAME);
|
||||
|
||||
String taskName = argsNode.get(0).asText();
|
||||
|
||||
String clzName = taskClzMap.get(taskName);
|
||||
if (clzName == null) {
|
||||
throw new IllegalArgumentException("未知的任务类型: " + taskName);
|
||||
@@ -77,15 +83,32 @@ public class WebSocketServerTaskManager implements InitializingBean {
|
||||
throw new IllegalArgumentException("任务类型: " + taskName + ", class: " + clzName + " 实例化失败");
|
||||
}
|
||||
|
||||
if (tasker instanceof Tasker<?> t) {
|
||||
String locale = argsNode.get(1).asText();
|
||||
t.setLocale(Locale.forLanguageTag(locale));
|
||||
}
|
||||
|
||||
if (tasker instanceof WebSocketServerTasker t) {
|
||||
t.setTitleHandler(title -> sendToSession(session, sessionId, "title", title));
|
||||
t.setMessageHandler(msg -> sendMessageToSession(session, sessionId, msg));
|
||||
t.setPropertyHandler((name, value) -> sendToSession(session, sessionId, "property", name, value));
|
||||
t.setProgressHandler((current, total) -> sendToSession(session, sessionId, "progress", current, total));
|
||||
t.init(argsNode);
|
||||
|
||||
scheduledExecutorService.submit(t);
|
||||
t.init(argsNode.get(2));
|
||||
}
|
||||
|
||||
if (tasker instanceof Callable<?> callable) {
|
||||
Thread.ofVirtual().start(() -> {
|
||||
try {
|
||||
sendToSession(session, sessionId, "start");
|
||||
callable.call();
|
||||
sendToSession(session, sessionId, "done");
|
||||
} catch (Exception e) {
|
||||
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private boolean sendMessageToSession(WebSocketSession session, String sessionId, Message msg) {
|
||||
|
||||
Reference in New Issue
Block a user