From fa6920806d21edc5f7de9b1b4872b19903e307c4 Mon Sep 17 00:00:00 2001 From: songqq Date: Thu, 25 Sep 2025 11:02:45 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E5=AE=A2=E6=88=B7=E6=96=87=E4=BB=B6):?= =?UTF-8?q?=20=E9=87=8D=E6=9E=84=E5=AE=A2=E6=88=B7=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=BB=E5=8A=A1=E5=A4=84=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除CompanyCustomerFileService中未实现的searchEvaluationFile方法 - 删除已不再使用的tasker_mapper.json配置文件 - 重构CompanyCustomerEvaluationFormUpdateTask,移除无用日志记录 - 更新客户端与服务端Tasker通信文档中的文件路径格式 - 重构CustomerTabSkinFile中的文件重建和日期计算逻辑,改为直接调用服务方法 --- ...mpanyCustomerEvaluationFormUpdateTask.java | 9 +- .../customer/CustomerTabSkinFile.java | 92 ++++++++++++++----- .../service/CompanyCustomerFileService.java | 5 - ...lient_server_tasker_communication_rules.md | 6 +- server/src/main/resources/tasker_mapper.json | 12 --- 5 files changed, 77 insertions(+), 47 deletions(-) diff --git a/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerEvaluationFormUpdateTask.java b/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerEvaluationFormUpdateTask.java index 4bdd622..e2ccce2 100644 --- a/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerEvaluationFormUpdateTask.java +++ b/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerEvaluationFormUpdateTask.java @@ -4,13 +4,13 @@ import com.ecep.contract.MessageHolder; import com.ecep.contract.WebSocketClientTasker; import com.ecep.contract.task.Tasker; import com.ecep.contract.vo.CompanyCustomerVo; + import lombok.Setter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +/** + * 客户评估表更新任务 + */ public class CompanyCustomerEvaluationFormUpdateTask extends Tasker implements WebSocketClientTasker { - private static final Logger logger = LoggerFactory.getLogger(CompanyCustomerEvaluationFormUpdateTask.class); - @Setter private CompanyCustomerVo customer; @@ -30,5 +30,4 @@ public class CompanyCustomerEvaluationFormUpdateTask extends Tasker impl return callRemoteTask(holder, getLocale(), customer.getId()); } - } diff --git a/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinFile.java b/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinFile.java index 9e56f50..58b139f 100644 --- a/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinFile.java +++ b/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinFile.java @@ -4,20 +4,25 @@ import java.io.File; import java.time.LocalDate; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ScheduledExecutorService; +import java.util.function.Consumer; +import com.ecep.contract.controller.table.cell.CompanyCustomerFileTableTypeTableCell; +import com.ecep.contract.controller.table.cell.FilePathTableCell; import org.springframework.util.StringUtils; import com.ecep.contract.CustomerFileType; import com.ecep.contract.DesktopUtils; +import com.ecep.contract.Message; import com.ecep.contract.MyDateTimeUtils; +import com.ecep.contract.SpringApp; import com.ecep.contract.constant.CompanyCustomerConstant; import com.ecep.contract.controller.table.EditableEntityTableTabSkin; -import com.ecep.contract.controller.table.cell.CompanyCustomerFileTableTypeTableCell; -import com.ecep.contract.controller.table.cell.FilePathTableCell; +import com.ecep.contract.model.BaseEnumEntity; import com.ecep.contract.service.CompanyCustomerEvaluationFormFileService; import com.ecep.contract.service.CompanyCustomerFileService; import com.ecep.contract.service.CompanyCustomerFileTypeService; -import com.ecep.contract.task.CompanyCustomerRebuildFilesTasker; +import com.ecep.contract.service.CompanyCustomerService; import com.ecep.contract.util.FileUtils; import com.ecep.contract.util.FxmlPath; import com.ecep.contract.util.ParamUtils; @@ -27,24 +32,34 @@ import com.ecep.contract.vo.CompanyCustomerEvaluationFormFileVo; import com.ecep.contract.vo.CompanyCustomerFileVo; import com.ecep.contract.vo.CompanyCustomerVo; import com.ecep.contract.vo.CompanyVo; +import com.ecep.contract.vo.CustomerFileTypeLocalVo; import javafx.application.Platform; +import javafx.beans.binding.Bindings; +import javafx.collections.FXCollections; +import javafx.collections.ObservableMap; +import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.MenuItem; import javafx.scene.control.Tab; +import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.CheckBoxTableCell; import javafx.scene.input.Dragboard; import javafx.scene.input.TransferMode; +import lombok.Setter; @FxmlPath("/ui/company/customer/customer-tab-file.fxml") public class CustomerTabSkinFile extends AbstCompanyCustomerTableTabSkin implements EditableEntityTableTabSkin { + @Setter + private CompanyCustomerFileService companyCustomerFileService; + public TableColumn fileTable_idColumn; public TableColumn fileTable_typeColumn; public TableColumn fileTable_filePathColumn; @@ -77,10 +92,6 @@ public class CustomerTabSkinFile return getCompanyCustomerFileService(); } - public CompanyCustomerFileService getCompanyCustomerFileService() { - return getCachedBean(CompanyCustomerFileService.class); - } - public CompanyCustomerEvaluationFormFileService getEvaluationFormFileService() { return getCachedBean(CompanyCustomerEvaluationFormFileService.class); } @@ -99,8 +110,6 @@ public class CustomerTabSkinFile TableView table = getTableView(); table.disableProperty().bind(viewModel.getPath().isEmpty()); - - // fileTable_idColumn.setCellValueFactory(param -> param.getValue().getId()); CompanyCustomerFileTypeService fileTypeService = getCachedBean(CompanyCustomerFileTypeService.class); fileTable_typeColumn.setCellValueFactory(param -> param.getValue().getType()); @@ -236,12 +245,16 @@ public class CustomerTabSkinFile } public void onFileReBuildingAction(ActionEvent event) { - CompanyCustomerRebuildFilesTasker task = new CompanyCustomerRebuildFilesTasker(); - CompanyCustomerVo customer = getEntity(); - task.setCompanyCustomer(customer); - UITools.showTaskDialogAndWait("重建客户文件", task, null); - if (task.isFilesUpdated()) { - loadTableDataSet(); + + + CompanyCustomerService customerService = getCompanyCustomerService(); + try { + CompanyCustomerVo companyCustomer = customerService.findById(viewModel.getId().get()); + if (customerService.reBuildingFiles(companyCustomer, (level, message) -> setStatus(message))) { + loadTableDataSet(); + } + } catch (Exception e) { + e.printStackTrace(); } } @@ -313,19 +326,54 @@ public class CustomerTabSkinFile // dataSet.remove(selectedItem); } + private void initializeTask(Task task, String prefix, Consumer consumer) { + task.setOnScheduled(e -> { + consumer.accept("正在" + prefix + ",请稍后..."); + }); + task.setOnRunning(e -> { + consumer.accept("开始" + prefix + "..."); + }); + task.setOnSucceeded(e -> { + consumer.accept(prefix + "同步完成..."); + }); + task.exceptionProperty().addListener((observable, oldValue, newValue) -> { + consumer.accept(newValue.getMessage()); + }); + SpringApp.getBean(ScheduledExecutorService.class).submit(task); + consumer.accept("任务已创建..."); + } + public void onUpdateEvaluationFormAction(ActionEvent event) { CompanyCustomerEvaluationFormUpdateTask task = new CompanyCustomerEvaluationFormUpdateTask(); - CompanyCustomerVo customer = getEntity(); - task.setCustomer(customer); - UITools.showTaskDialogAndWait("更新评价表", task, null); + task.setCustomer(getCompanyCustomerService().findById(viewModel.getId().get())); + UITools.showTaskDialogAndWait("更新评价表", task, consumer -> { + initializeTask(task, "更新评价表", msg -> consumer.accept(Message.info(msg))); + }); loadTableDataSet(); } public void onCalcNextSignDateAction(ActionEvent event) { - CompanyCustomerNextSignDateTask task = new CompanyCustomerNextSignDateTask(); - CompanyCustomerVo customer = getEntity(); - task.setCustomer(customer); - UITools.showTaskDialogAndWait("计算客户下一个评价日期", task, null); + UITools.showDialogAndWait("计算客户下一个评价日期", "依据已有的客户评估表和登记采购的合同计算下一个评估日期", ds -> { + CompanyCustomerVo companyCustomer = getCompanyCustomerService().findById(viewModel.getId().get()); + LocalDate nextSignDate = getCompanyCustomerFileService().getNextSignDate(companyCustomer, (level, msg) -> { + Platform.runLater(() -> { + ds.add(msg); + }); + }); + if (nextSignDate != null) { + Platform.runLater(() -> { + ds.add("下一个评价日期:" + nextSignDate); + }); + } + }); + } + + + private CompanyCustomerFileService getCompanyCustomerFileService() { + if (companyCustomerFileService == null) { + companyCustomerFileService = SpringApp.getBean(CompanyCustomerFileService.class); + } + return companyCustomerFileService; } } diff --git a/client/src/main/java/com/ecep/contract/service/CompanyCustomerFileService.java b/client/src/main/java/com/ecep/contract/service/CompanyCustomerFileService.java index 2ab9020..5766e90 100644 --- a/client/src/main/java/com/ecep/contract/service/CompanyCustomerFileService.java +++ b/client/src/main/java/com/ecep/contract/service/CompanyCustomerFileService.java @@ -118,11 +118,6 @@ public class CompanyCustomerFileService extends QueryService searchEvaluationFile(CompanyCustomer customer, String searchText) { - // TODO need move to CompanyCustomerEvaluationFormFileService - throw new UnsupportedOperationException("Unimplemented method 'searchEvaluationFile'"); - } - @CacheEvict(allEntries = true) @Override public CompanyCustomerFileVo save(CompanyCustomerFileVo entity) { diff --git a/docs/task/client_server_tasker_communication_rules.md b/docs/task/client_server_tasker_communication_rules.md index 2e1d841..416a763 100644 --- a/docs/task/client_server_tasker_communication_rules.md +++ b/docs/task/client_server_tasker_communication_rules.md @@ -1,9 +1,9 @@ # 客户端 Tasker 至 服务器端 Tasker 通信规则与逻辑 本文档总结了 Contract-Manager 项目中客户端 Tasker 与服务器端 Tasker 之间的通信规则、调用逻辑和实现模式,基于对以下文件的分析: -- `d:\idea-workspace\Contract-Manager\server\src\main\java\com\ecep\contract\ds\customer\tasker\CompanyCustomerEvaluationFormUpdateTask.java` -- `d:\idea-workspace\Contract-Manager\client\src\main\java\com\ecep\contract\controller\customer\CompanyCustomerEvaluationFormUpdateTask.java` -- `d:\idea-workspace\Contract-Manager\client\src\main\java\com\ecep\contract\controller\customer\CustomerTabSkinFile.java` +- [`CompanyCustomerEvaluationFormUpdateTask.java`](/server/src/main/java/com/ecep/contract/ds/customer/tasker/CompanyCustomerEvaluationFormUpdateTask.java) +- [`CompanyCustomerEvaluationFormUpdateTask.java`](/client/src/main/java/com/ecep/contract/controller/customer/CompanyCustomerEvaluationFormUpdateTask.java) +- [`CustomerTabSkinFile.java`](/client/src/main/java/com/ecep/contract/controller/customer/CustomerTabSkinFile.java) ## 1. 架构设计原则 diff --git a/server/src/main/resources/tasker_mapper.json b/server/src/main/resources/tasker_mapper.json index f25e3bd..e69de29 100644 --- a/server/src/main/resources/tasker_mapper.json +++ b/server/src/main/resources/tasker_mapper.json @@ -1,12 +0,0 @@ -{ - "taskers": { - "ContractSyncTask": "com.ecep.contract.cloud.u8.ContractSyncTask", - "ContractRepairTask": "com.ecep.contract.ds.contract.tasker.ContractRepairTask", - "ContractVerifyTask": "com.ecep.contract.ds.contract.tasker.ContractVerifyTask", - "ProjectCostImportItemsFromContractsTasker": "com.ecep.contract.ds.project.ProjectCostImportItemsFromContractsTasker", - "CompanyCustomerEvaluationFormUpdateTask": "com.ecep.contract.ds.customer.tasker.CompanyCustomerEvaluationFormUpdateTask", - "CompanyCustomerNextSignDateTask": "com.ecep.contract.ds.customer.tasker.CompanyCustomerNextSignDateTask", - "CompanyCustomerRebuildFilesTasker": "com.ecep.contract.ds.customer.tasker.CompanyCustomerRebuildFilesTasker" - }, - "descriptions": "任务注册信息" -} \ No newline at end of file