diff --git a/.trae/rules/tasker_implementation_guide.md b/.trae/rules/tasker_implementation_guide.md
new file mode 100644
index 0000000..6c2bafe
--- /dev/null
+++ b/.trae/rules/tasker_implementation_guide.md
@@ -0,0 +1,182 @@
+# Tasker实现规范指南
+
+## 1. Tasker架构概述
+
+Tasker是系统中用于执行异步任务的核心框架,主要用于处理耗时操作并提供实时进度反馈。Tasker架构包括:
+
+- **Tasker基类**:提供任务执行的基础框架和通信功能
+- **WebSocketServerTasker接口**:定义WebSocket通信任务的规范
+- **MessageHolder**:用于在任务执行过程中传递消息和更新进度
+
+## 2. 服务器端Tasker实现规范
+
+### 2.1 基本结构
+
+服务器端Tasker实现应遵循以下结构:
+
+```java
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class YourTaskNameTask extends Tasker
*/
- public void merge(Company from, Company to) {
- // cloudRkService.findById(from.getId());
- cloudRkService.resetTo(from, to);
- cloudTycService.resetTo(from, to);
- yongYouU8Service.resetTo(from, to);
+ public void merge(Company from, Company to, MessageHolder holder) {
+ cloudRkService.resetTo(from, to, holder);
+ cloudTycService.resetTo(from, to, holder);
+ yongYouU8Service.resetTo(from, to, holder);
- companyOldNameService.resetTo(from, to);
- companyContactService.resetTo(from, to);
+ companyOldNameService.resetTo(from, to, holder);
+ companyContactService.resetTo(from, to, holder);
// 供应商和客户
- vendorService.resetTo(from, to);
- companyCustomerService.resetTo(from, to);
+ vendorService.resetTo(from, to, holder);
+ companyCustomerService.mergeTo(from, to, holder);
- contractService.resetTo(from, to);
- companyContactService.resetTo(from, to);
+ contractService.mergeTo(from, to, holder);
+
+ projectService.mergeTo(from, to, holder);
repository.delete(from);
if (logger.isInfoEnabled()) {
logger.info("Merge {} to {}", from, to);
@@ -428,7 +431,6 @@ public class CompanyService extends EntityService
*
* @param company 要验证的公司
* @param verifyDate 验证日期
- * @param status 状态输出
*/
public boolean verifyEnterpriseStatus(Company company, LocalDate verifyDate, MessageHolder holder) {
// 检查营业状态
@@ -506,7 +508,7 @@ public class CompanyService extends EntityService
}
public Predicate buildSearchPredicate(String searchText, Path root, CriteriaQuery> query,
- CriteriaBuilder builder) {
+ CriteriaBuilder builder) {
return builder.or(
builder.like(root.get("name"), "%" + searchText + "%"),
builder.like(root.get("shortName"), "%" + searchText + "%"),
diff --git a/server/src/main/java/com/ecep/contract/ds/company/tasker/CompanyMergeServerTasker.java b/server/src/main/java/com/ecep/contract/ds/company/tasker/CompanyMergeServerTasker.java
new file mode 100644
index 0000000..541f786
--- /dev/null
+++ b/server/src/main/java/com/ecep/contract/ds/company/tasker/CompanyMergeServerTasker.java
@@ -0,0 +1,102 @@
+package com.ecep.contract.ds.company.tasker;
+
+import com.ecep.contract.MessageHolder;
+import com.ecep.contract.ds.company.model.Company;
+import com.ecep.contract.ds.company.service.CompanyService;
+import com.ecep.contract.service.tasker.WebSocketServerTasker;
+import com.ecep.contract.ui.Tasker;
+import com.ecep.contract.vo.CompanyVo;
+import com.fasterxml.jackson.databind.JsonNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * 公司合并任务
+ * 用于通过WebSocket执行公司合并操作
+ */
+
+public class CompanyMergeServerTasker extends Tasker implements WebSocketServerTasker {
+ private static final Logger logger = LoggerFactory.getLogger(CompanyMergeServerTasker.class);
+ private CompanyVo company;
+ private List nameList;
+
+ private CompanyService companyService;
+
+ @Override
+ public void init(JsonNode argsNode) {
+ companyService = getBean(CompanyService.class);
+ // 从第一个参数获取公司ID并查找公司
+ company = companyService.findById(argsNode.get(0).asInt());
+
+ // 从第二个参数获取名称列表
+ JsonNode nameListNode = argsNode.get(1);
+ nameList = new ArrayList<>();
+
+ // 遍历JSON数组,将每个元素添加到nameList中
+ if (nameListNode != null && nameListNode.isArray()) {
+ for (JsonNode nameNode : nameListNode) {
+ nameList.add(nameNode.asText());
+ }
+ }
+ }
+
+ @Override
+ protected Object execute(MessageHolder holder) throws Exception {
+ HashSet nameSet = new HashSet<>(nameList);
+ nameSet.add(company.getName());
+
+ int size = nameSet.size();
+ int count = 1;
+ int merge = 0;
+
+
+ HashMap targetCompanyMap = new HashMap<>();
+ for (String name : nameSet) {
+ MessageHolder sub = holder.sub(count + "/" + size + ":" + name + ">");
+ if (name == null || name.isEmpty()) {
+ sub.warn("名称为空");
+ continue;
+ }
+
+ List list = companyService.findAllByName(name);
+ for (Company company : list) {
+ sub.debug("找到 " + company.getName());
+ targetCompanyMap.put(company.getId(), company);
+ }
+ count++;
+ }
+ targetCompanyMap.remove(this.company.getId());
+
+ if (targetCompanyMap.isEmpty()) {
+ holder.warn("没有需要并户的公司");
+ return null;
+ }
+
+ //
+ Company targetCompany = companyService.getById(this.company.getId());
+ for (Company company : targetCompanyMap.values()) {
+ try {
+ companyService.merge(company, targetCompany, holder);
+ holder.info("并户 " + company.getName() + "[" + company.getId() + "] 到当前公司");
+ merge++;
+ } catch (Exception e) {
+ holder.warn("合并 " + company.getName() + " -> " + targetCompany.getName() + " 失败: " + e.getMessage());
+ logger.warn("合并 {} -> {} 失败: {}", company.getName(), targetCompany.getName(), e.getMessage(), e);
+ }
+ }
+
+ if (merge == 0) {
+ holder.info("没有需要并户的公司");
+ } else {
+ holder.info("完成合并操作,共合并 " + merge + " 个公司");
+ }
+
+ updateTitle("公司合并任务完成");
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractService.java
index c0673ec..cb4a52e 100644
--- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractService.java
+++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractService.java
@@ -9,6 +9,7 @@ import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import com.ecep.contract.*;
import com.ecep.contract.ds.contract.model.ContractItem;
import com.ecep.contract.vo.ContractCatalogVo;
import jakarta.persistence.criteria.Root;
@@ -25,11 +26,6 @@ import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
-import com.ecep.contract.ContractPayWay;
-import com.ecep.contract.EntityService;
-import com.ecep.contract.IEntityService;
-import com.ecep.contract.QueryService;
-import com.ecep.contract.SpringApp;
import com.ecep.contract.constant.ContractConstant;
import com.ecep.contract.ds.company.service.CompanyService;
import com.ecep.contract.ds.contract.repository.ContractRepository;
@@ -420,14 +416,16 @@ public class ContractService extends EntityService list = contractRepository.findAllByCompanyId(from.getId());
if (list.isEmpty()) {
+ holder.info("没有合同需要处理");
return;
}
for (Contract contract : list) {
contract.setDescription(MyStringUtils.appendIfAbsent(contract.getDescription(), "转自 " + from.getId()));
contract.setCompany(to);
+ holder.info("Reset #" + contract.getId());
}
contractRepository.saveAll(list);
}
diff --git a/server/src/main/java/com/ecep/contract/ds/customer/service/CustomerService.java b/server/src/main/java/com/ecep/contract/ds/customer/service/CustomerService.java
index 085f1d4..05e737f 100644
--- a/server/src/main/java/com/ecep/contract/ds/customer/service/CustomerService.java
+++ b/server/src/main/java/com/ecep/contract/ds/customer/service/CustomerService.java
@@ -356,7 +356,7 @@ public class CustomerService extends CompanyBasicService
* @param from 要转移的客户信息所属的公司
* @param to 要转移到的公司
*/
- public void resetTo(Company from, Company to) {
+ public void mergeTo(Company from, Company to, MessageHolder holder) {
// 这里使用Optional对象来处理可能为空的情况
Optional fromCustomer = repository.findByCompany(from);
if (fromCustomer.isEmpty()) {
@@ -373,7 +373,7 @@ public class CustomerService extends CompanyBasicService
}
// 把 fromCustomer 信息合并到 toCustomer
- resetTo(fromCustomer.get(), toCustomer.get());
+ mergeTo(fromCustomer.get(), toCustomer.get(), holder);
}
@@ -383,7 +383,7 @@ public class CustomerService extends CompanyBasicService
* @param from 源客户对象
* @param to 目标客户对象
*/
- public void resetTo(CompanyCustomer from, CompanyCustomer to) {
+ public void mergeTo(CompanyCustomer from, CompanyCustomer to, MessageHolder holder) {
// file
companyCustomerFileService.resetTo(from, to);
// entity
diff --git a/server/src/main/java/com/ecep/contract/ds/other/controller/EmployeeRoleController.java b/server/src/main/java/com/ecep/contract/ds/other/controller/EmployeeRoleController.java
index dbc5d45..7361dac 100644
--- a/server/src/main/java/com/ecep/contract/ds/other/controller/EmployeeRoleController.java
+++ b/server/src/main/java/com/ecep/contract/ds/other/controller/EmployeeRoleController.java
@@ -2,6 +2,7 @@ package com.ecep.contract.ds.other.controller;
import java.util.Map;
+import com.ecep.contract.vo.FunctionVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@@ -73,7 +74,7 @@ public class EmployeeRoleController {
}
@RequestMapping("/getFunctionsByRoleId")
- public java.util.List getFunctionsByRoleId(Integer roleId) {
+ public java.util.List getFunctionsByRoleId(Integer roleId) {
return employeeRoleService.getFunctionsByRoleId(roleId);
}
}
\ No newline at end of file
diff --git a/server/src/main/java/com/ecep/contract/ds/other/service/EmployeeRoleService.java b/server/src/main/java/com/ecep/contract/ds/other/service/EmployeeRoleService.java
index 41b3457..981ba0d 100644
--- a/server/src/main/java/com/ecep/contract/ds/other/service/EmployeeRoleService.java
+++ b/server/src/main/java/com/ecep/contract/ds/other/service/EmployeeRoleService.java
@@ -3,6 +3,7 @@ package com.ecep.contract.ds.other.service;
import java.util.List;
import java.util.Optional;
+import com.ecep.contract.vo.FunctionVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
@@ -36,6 +37,9 @@ public class EmployeeRoleService implements IEntityService, QueryS
@Lazy
@Autowired
private EmployeeRoleRepository roleRepository;
+ @Lazy
+ @Autowired
+ private FunctionService functionService;
@Cacheable(key = "#p0")
public EmployeeRoleVo findById(Integer id) {
@@ -95,15 +99,31 @@ public class EmployeeRoleService implements IEntityService, QueryS
}
@Transactional
- public List getFunctionsByRoleId(int roleId) {
+ public List getFunctionsByRoleId(Integer roleId) {
Optional optional = roleRepository.findById(roleId);
if (optional.isPresent()) {
EmployeeRole role = optional.get();
- return role.getFunctions().stream().toList();
+ return role.getFunctions().stream().map(Function::toVo).toList();
}
return null;
}
+ @Transactional
+ public void saveRoleFunctions(Integer roleId, FunctionVo[] functions) {
+ Optional optional = roleRepository.findById(roleId);
+ if (optional.isEmpty()) {
+ throw new RuntimeException("角色不存在");
+ }
+ EmployeeRole role = optional.get();
+ java.util.List list = new java.util.ArrayList<>();
+ for (FunctionVo functionVo : functions) {
+ Function func = functionService.getById(functionVo.getId());
+ list.add(func);
+ }
+ role.setFunctions(list);
+ save(role);
+ }
+
@Override
public void updateByVo(EmployeeRole role, EmployeeRoleVo vo) {
role.setCode(vo.getCode());
diff --git a/server/src/main/java/com/ecep/contract/ds/project/repository/ProjectRepository.java b/server/src/main/java/com/ecep/contract/ds/project/repository/ProjectRepository.java
index 4a75d06..2034a10 100644
--- a/server/src/main/java/com/ecep/contract/ds/project/repository/ProjectRepository.java
+++ b/server/src/main/java/com/ecep/contract/ds/project/repository/ProjectRepository.java
@@ -1,5 +1,6 @@
package com.ecep.contract.ds.project.repository;
+import java.util.List;
import java.util.Optional;
import org.springframework.stereotype.Repository;
@@ -30,4 +31,6 @@ public interface ProjectRepository extends
Optional findByName(String name);
Optional findByCode(String code);
+
+ List findAllByCustomerId(Integer id);
}
diff --git a/server/src/main/java/com/ecep/contract/ds/project/service/ProjectService.java b/server/src/main/java/com/ecep/contract/ds/project/service/ProjectService.java
index 7631738..e88c456 100644
--- a/server/src/main/java/com/ecep/contract/ds/project/service/ProjectService.java
+++ b/server/src/main/java/com/ecep/contract/ds/project/service/ProjectService.java
@@ -8,6 +8,8 @@ import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import com.ecep.contract.MessageHolder;
+import com.ecep.contract.ds.company.model.Company;
import com.ecep.contract.vo.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -415,4 +417,16 @@ public class ProjectService
}
+ public void mergeTo(Company from, Company to, MessageHolder holder) {
+ List list = projectRepository.findAllByCustomerId(from.getId());
+ if (list.isEmpty()) {
+ holder.info("没有项目需要处理");
+ return;
+ }
+ for (Project project : list) {
+ project.setCustomer(to);
+ holder.info("Reset #" + project.getId());
+ }
+ projectRepository.saveAll(list);
+ }
}
diff --git a/server/src/main/java/com/ecep/contract/ds/vendor/converter/StringToVendorConverter.java b/server/src/main/java/com/ecep/contract/ds/vendor/converter/StringToVendorConverter.java
new file mode 100644
index 0000000..9f0d01f
--- /dev/null
+++ b/server/src/main/java/com/ecep/contract/ds/vendor/converter/StringToVendorConverter.java
@@ -0,0 +1,24 @@
+package com.ecep.contract.ds.vendor.converter;
+
+import org.springframework.lang.Nullable;
+
+import com.ecep.contract.ds.vendor.service.VendorService;
+import com.ecep.contract.vo.VendorVo;
+
+public class StringToVendorConverter implements org.springframework.core.convert.converter.Converter {
+
+ private VendorService service;
+
+ public StringToVendorConverter(VendorService service) {
+ this.service = service;
+ }
+
+ @Override
+ @Nullable
+ public VendorVo convert(String string) {
+ if (string == null || string.trim().isEmpty()) {
+ return null;
+ }
+ return service.findById(Integer.parseInt(string));
+ }
+}
diff --git a/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorService.java b/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorService.java
index 97d43a7..f863d24 100644
--- a/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorService.java
+++ b/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorService.java
@@ -31,6 +31,7 @@ import org.springframework.util.StringUtils;
import com.ecep.contract.IEntityService;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.QueryService;
+import com.ecep.contract.SpringApp;
import com.ecep.contract.VendorFileType;
import com.ecep.contract.VendorType;
import com.ecep.contract.constant.CompanyVendorConstant;
@@ -44,6 +45,7 @@ import com.ecep.contract.ds.vendor.repository.VendorTypeLocalRepository;
import com.ecep.contract.ds.company.model.Company;
import com.ecep.contract.model.CompanyBasicFile;
import com.ecep.contract.ds.contract.model.Contract;
+import com.ecep.contract.ds.vendor.converter.StringToVendorConverter;
import com.ecep.contract.ds.vendor.model.Vendor;
import com.ecep.contract.model.VendorCatalog;
import com.ecep.contract.ds.vendor.model.VendorEntity;
@@ -57,6 +59,7 @@ import com.ecep.contract.util.SpecificationUtils;
import com.ecep.contract.vo.VendorVo;
import com.fasterxml.jackson.databind.JsonNode;
+import jakarta.annotation.PostConstruct;
import jakarta.persistence.criteria.Path;
@Lazy
@@ -89,6 +92,12 @@ public class VendorService extends CompanyBasicService
@Autowired
private VendorClassRepository vendorClassRepository;
+ @PostConstruct
+ public void init() {
+ SpringApp.getBean(org.springframework.core.convert.converter.ConverterRegistry.class)
+ .addConverter(new StringToVendorConverter(this));
+ }
+
@Cacheable(key = "#p0")
public VendorVo findById(Integer id) {
return repository.findById(id).map(Vendor::toVo).orElse(null);
@@ -226,7 +235,7 @@ public class VendorService extends CompanyBasicService
@SuppressWarnings("unchecked")
@Override
protected > boolean fillFileAsDefaultType(F dbFile, File file,
- Consumer status) {
+ Consumer status) {
dbFile.setType((T) VendorFileType.General);
fillFile(dbFile, file, null, status);
vendorFileService.save((VendorFile) dbFile);
@@ -236,7 +245,7 @@ public class VendorService extends CompanyBasicService
@SuppressWarnings("unchecked")
@Override
protected > F fillFileType(File file, List fileList,
- Consumer status) {
+ Consumer status) {
VendorFile vendorFile = new VendorFile();
vendorFile.setType(VendorFileType.General);
vendorFile.setFilePath(file.getAbsolutePath());
@@ -257,7 +266,7 @@ public class VendorService extends CompanyBasicService
@Override
protected > boolean fillFileAsEvaluationFile(F customerFile, File file,
- List fileList, Consumer status) {
+ List fileList, Consumer status) {
boolean modified = super.fillFileAsEvaluationFile(customerFile, file, fileList, status);
// 当评价表有日期,并且未设审核时
boolean valid = FileUtils.isArchiveFile(customerFile.getFilePath()) && customerFile.getSignDate() != null;
@@ -428,7 +437,7 @@ public class VendorService extends CompanyBasicService
return dir;
}
- public void resetTo(Company from, Company to) {
+ public void resetTo(Company from, Company to, MessageHolder holder) {
Optional optional = repository.findByCompany(from);
optional.ifPresent(companyVendor -> {
companyVendor
diff --git a/server/src/main/java/com/ecep/contract/service/WebSocketServerCallbackManager.java b/server/src/main/java/com/ecep/contract/service/WebSocketServerCallbackManager.java
index 2050642..4e974bb 100644
--- a/server/src/main/java/com/ecep/contract/service/WebSocketServerCallbackManager.java
+++ b/server/src/main/java/com/ecep/contract/service/WebSocketServerCallbackManager.java
@@ -121,6 +121,7 @@ public class WebSocketServerCallbackManager {
return method.invoke(service);
}
+ // 第一个参数不是数组时
if (!argumentsNode.get(0).isArray()) {
Class> parameterType = Class.forName(argumentsNode.get(1).asText());
Object arg = objectMapper.treeToValue(argumentsNode.get(0), parameterType);
diff --git a/server/src/main/java/com/ecep/contract/service/tasker/WebSocketServerTasker.java b/server/src/main/java/com/ecep/contract/service/tasker/WebSocketServerTasker.java
index 81c3e81..09efdb0 100644
--- a/server/src/main/java/com/ecep/contract/service/tasker/WebSocketServerTasker.java
+++ b/server/src/main/java/com/ecep/contract/service/tasker/WebSocketServerTasker.java
@@ -13,12 +13,23 @@ import com.fasterxml.jackson.databind.JsonNode;
* 定义了所有通过WebSocket与客户端通信的任务的通用方法
* 包括任务名称、初始化参数、设置会话、更新消息、更新标题、更新进度等操作
*
- * 所有通过WebSocket与客户端通信的任务类都应实现此接口, 文档参考 .trace/rules/server_task_rules.md
- * tips:检查是否在 tasker_mapper.json 中注册
+ * 所有通过WebSocket与客户端通信的任务类都应实现此接口, 通常应继承Tasker类并实现此接口
+ *
+ * 实现注意事项:
+ * 1. 服务器端任务实现应继承Tasker基类,该基类已提供大部分通信功能的实现
+ * 2. 不要在子类中重复实现setMessageHandler、setTitleHandler、setPropertyHandler和setProgressHandler方法,这些由Tasker基类提供
+ * 3. 任务类应覆盖init方法以初始化参数和设置任务标题
+ * 4. 任务类应覆盖execute方法实现具体业务逻辑,使用MessageHolder进行消息消息反馈
+ * 5. 任务执行时使用updateProgress方法进行进度反馈
+ * 6. 任务名称应与客户端对应的Tasker类名保持一致,以确保正确的通信映射
+ *
+ * 注册要求:
+ * 任务类必须在tasker_mapper.json中注册,以确保WebSocketServerTaskManager能够正确识别和实例化
*/
public interface WebSocketServerTasker extends Callable {
/**
* 初始化任务参数
+ * 任务类应在init方法中解析argsNode, 初始化任务参数
*
* @param argsNode 任务参数的JSON节点
*/
diff --git a/server/src/main/java/com/ecep/contract/ui/Tasker.java b/server/src/main/java/com/ecep/contract/ui/Tasker.java
index 0b080a5..e03f7a2 100644
--- a/server/src/main/java/com/ecep/contract/ui/Tasker.java
+++ b/server/src/main/java/com/ecep/contract/ui/Tasker.java
@@ -1,6 +1,5 @@
package com.ecep.contract.ui;
-import java.util.HashMap;
import java.util.Locale;
import java.util.function.BiConsumer;
import java.util.logging.Level;
@@ -11,7 +10,6 @@ import org.springframework.beans.BeansException;
import com.ecep.contract.Message;
import com.ecep.contract.MessageHolder;
-import com.ecep.contract.SpringApp;
import com.ecep.contract.ds.company.service.CompanyService;
import com.ecep.contract.ds.other.service.EmployeeService;
import com.ecep.contract.ds.other.service.SysConfService;
@@ -22,6 +20,27 @@ import com.ecep.contract.util.DefaultBeanContext;
import lombok.Getter;
import lombok.Setter;
+/**
+ * Tasker基类,提供任务执行和通信的核心功能
+ *
+ * 该基类实现了任务执行框架,提供了以下核心功能:
+ * 1. 任务执行环境(call方法)
+ * 2. 消息处理和进度更新机制
+ * 3. Spring Bean获取和缓存功能
+ * 4. 当前用户和本地化支持
+ *
+ * 主要组件:
+ * - messageHandler: 处理消息通知
+ * - titleHandler: 处理标题更新
+ * - progressHandler: 处理进度更新
+ * - propertyHandler: 处理属性更新
+ *
+ * 使用说明:
+ * 1. 子类应继承此类并实现execute方法,实现具体业务逻辑
+ * 2. 使用updateMessage、updateProgress等方法进行状态反馈
+ * 3. 对于WebSocket任务,还应实现WebSocketServerTasker接口
+ * 4. 子类通常不需要覆盖setter方法,这些由框架自动设置
+ */
public abstract class Tasker implements java.util.concurrent.Callable, BeanContext {
private static final Logger logger = LoggerFactory.getLogger(Tasker.class);
@Setter
diff --git a/server/src/main/resources/tasker_mapper.json b/server/src/main/resources/tasker_mapper.json
index 6a7e534..7d48e86 100644
--- a/server/src/main/resources/tasker_mapper.json
+++ b/server/src/main/resources/tasker_mapper.json
@@ -20,7 +20,15 @@
"ContractRepairAllTask": "com.ecep.contract.ds.contract.tasker.ContractRepairAllTasker",
"ContractFilesRebuildAllTasker": "com.ecep.contract.ds.contract.tasker.ContractFilesRebuildAllTasker",
"ContractFilesRebuildTasker": "com.ecep.contract.ds.contract.tasker.ContractFilesRebuildTasker",
- "EmployeesSyncTask": "com.ecep.contract.cloud.u8.EmployeesSyncTask"
+ "EmployeesSyncTask": "com.ecep.contract.cloud.u8.EmployeesSyncTask",
+ "CompanyMergeTask": "com.ecep.contract.ds.company.tasker.CompanyMergeServerTasker",
+ "VendorSyncTask": "com.ecep.contract.cloud.u8.VendorSyncTask",
+ "CustomerSyncTask": "com.ecep.contract.cloud.u8.CustomerSyncTask",
+ "CustomerClassSyncTask": "com.ecep.contract.cloud.u8.CustomerClassSyncTask",
+ "VendorClassSyncTask": "com.ecep.contract.cloud.u8.VendorClassSyncTask",
+ "ContractKindSyncTask": "com.ecep.contract.cloud.u8.ContractKindSyncTask",
+ "ContractTypeSyncTask": "com.ecep.contract.cloud.u8.ContractTypeSyncTask",
+ "ContractGroupSyncTask": "com.ecep.contract.cloud.u8.ContractGroupSyncTask"
},
"descriptions": "任务注册信息, 客户端的任务可以通过 WebSocket 调用"
}
\ No newline at end of file