From 9ff84ebe8af4ba08e3c20fc692f21663d9881518 Mon Sep 17 00:00:00 2001 From: songqq Date: Mon, 25 Aug 2025 19:40:07 +0800 Subject: [PATCH] =?UTF-8?q?refactor(u8=E9=85=8D=E7=BD=AE):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E9=85=8D=E7=BD=AE=E7=AE=A1=E7=90=86=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将配置管理相关代码重构为ConfigBounder接口及其实现类,提取公共逻辑到AbstractConfigBounder基类 修复公司创建日期配置的显示问题,使用更直观的中文描述 将合同同步相关配置常量集中到ContractCtx中管理 --- .../manager/cloud/u8/ContractSyncTask.java | 55 +++++++------ .../u8/YongYouU8ConfigWindowController.java | 82 +++---------------- .../manager/cloud/u8/ctx/CompanyCtx.java | 5 +- .../manager/cloud/u8/ctx/ContractCtx.java | 5 ++ .../ds/contract/service/ContractService.java | 8 +- .../ds/other/AbstractConfigBounder.java | 33 ++++++++ .../manager/ds/other/ConfigBounder.java | 17 ++++ .../manager/ds/other/LocalDateConfig.java | 57 +++++++++++++ .../manager/ds/other/StringConfig.java | 42 ++++++++++ src/main/resources/ui/cloud/u8_config.fxml | 2 +- 10 files changed, 204 insertions(+), 102 deletions(-) create mode 100644 src/main/java/com/ecep/contract/manager/ds/other/AbstractConfigBounder.java create mode 100644 src/main/java/com/ecep/contract/manager/ds/other/ConfigBounder.java create mode 100644 src/main/java/com/ecep/contract/manager/ds/other/LocalDateConfig.java create mode 100644 src/main/java/com/ecep/contract/manager/ds/other/StringConfig.java diff --git a/src/main/java/com/ecep/contract/manager/cloud/u8/ContractSyncTask.java b/src/main/java/com/ecep/contract/manager/cloud/u8/ContractSyncTask.java index 530f6af..fc785d5 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/u8/ContractSyncTask.java +++ b/src/main/java/com/ecep/contract/manager/cloud/u8/ContractSyncTask.java @@ -1,14 +1,5 @@ package com.ecep.contract.manager.cloud.u8; -import com.ecep.contract.manager.SpringApp; -import com.ecep.contract.manager.ds.contract.service.ContractService; -import com.ecep.contract.manager.ds.contract.tasker.AbstContractRepairTasker; -import com.ecep.contract.manager.ui.MessageHolder; -import lombok.Setter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.util.StringUtils; - import java.sql.Timestamp; import java.time.LocalDateTime; import java.util.Map; @@ -16,21 +7,45 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Stream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.util.StringUtils; + +import com.ecep.contract.manager.SpringApp; +import com.ecep.contract.manager.cloud.u8.ctx.ContractCtx; +import com.ecep.contract.manager.ds.contract.tasker.AbstContractRepairTasker; +import com.ecep.contract.manager.ui.MessageHolder; + /** * 合同同步任务 */ public class ContractSyncTask extends AbstContractRepairTasker { private static final Logger logger = LoggerFactory.getLogger(ContractSyncTask.class); - @Setter - private boolean useLatestId = true; private YongYouU8Repository repository; public ContractSyncTask() { updateTitle("用友U8系统-同步合同"); } + @Override + protected void repair(MessageHolder holder) { + updateTitle("用友U8系统-同步合同"); + try { + repository = SpringApp.getBean(YongYouU8Repository.class); + } catch (BeansException e) { + holder.error("无法获取 YongYouU8Repository " + e.getMessage()); + return; + } + if (getConfService().getBoolean(ContractCtx.KEY_CONTRACT_SYNC_USE_LATEST_ID)) { + syncByLatestId(holder); + } else { + syncByLatestDate(holder); + } + } + private void syncByLatestId(MessageHolder holder) { - int latestId = getConfService().getInt(ContractService.CONTRACT_LATEST_ID); + int latestId = getConfService().getInt(ContractCtx.CONTRACT_LATEST_ID); updateTitle("用友U8系统-同步合同,从 " + latestId + " 开始"); Long total = repository.countAllContracts(latestId); @@ -66,11 +81,11 @@ public class ContractSyncTask extends AbstContractRepairTasker { updateProgress(counter.incrementAndGet(), total); }); } - getConfService().set(ContractService.CONTRACT_LATEST_ID, String.valueOf(reference.get())); + getConfService().set(ContractCtx.CONTRACT_LATEST_ID, String.valueOf(reference.get())); } private void syncByLatestDate(MessageHolder holder) { - String strDateTime = getConfService().getString(ContractService.CONTRACT_LATEST_DATE); + String strDateTime = getConfService().getString(ContractCtx.CONTRACT_LATEST_DATE); LocalDateTime latestDateTime = null; if (StringUtils.hasText(strDateTime)) { try { @@ -120,17 +135,7 @@ public class ContractSyncTask extends AbstContractRepairTasker { updateProgress(counter.incrementAndGet(), total); }); } - getConfService().set(ContractService.CONTRACT_LATEST_DATE, String.valueOf(reference.get())); + getConfService().set(ContractCtx.CONTRACT_LATEST_DATE, String.valueOf(reference.get())); } - @Override - protected void repair(MessageHolder holder) { - updateTitle("用友U8系统-同步合同"); - repository = SpringApp.getBean(YongYouU8Repository.class); - if (useLatestId) { - syncByLatestId(holder); - } else { - syncByLatestDate(holder); - } - } } diff --git a/src/main/java/com/ecep/contract/manager/cloud/u8/YongYouU8ConfigWindowController.java b/src/main/java/com/ecep/contract/manager/cloud/u8/YongYouU8ConfigWindowController.java index 8071b14..5ffd413 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/u8/YongYouU8ConfigWindowController.java +++ b/src/main/java/com/ecep/contract/manager/cloud/u8/YongYouU8ConfigWindowController.java @@ -1,31 +1,20 @@ package com.ecep.contract.manager.cloud.u8; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.concurrent.CompletableFuture; - -import org.apache.poi.ss.formula.functions.T; import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; -import com.ecep.contract.manager.Desktop; -import com.ecep.contract.manager.SpringApp; -import com.ecep.contract.manager.ds.other.model.SysConf; -import com.ecep.contract.manager.ds.other.service.SysConfService; +import com.ecep.contract.manager.cloud.u8.ctx.CompanyCtx; +import com.ecep.contract.manager.cloud.u8.ctx.ContractCtx; +import com.ecep.contract.manager.ds.other.LocalDateConfig; +import com.ecep.contract.manager.ds.other.StringConfig; import com.ecep.contract.manager.ui.BaseController; import com.ecep.contract.manager.ui.FxmlPath; -import javafx.beans.property.Property; -import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; import javafx.scene.control.DatePicker; import javafx.scene.control.TextField; import javafx.stage.WindowEvent; -import javafx.util.converter.LocalDateStringConverter; -import lombok.NoArgsConstructor; -import lombok.Setter; @Lazy @Scope("prototype") @@ -49,68 +38,21 @@ public class YongYouU8ConfigWindowController extends BaseController { super.onShown(windowEvent); getTitle().set("用友U8配置"); - LocalDateConfig config1 = new LocalDateConfig("cloud.u8.auto-create-company-after"); + LocalDateConfig config1 = new LocalDateConfig(CompanyCtx.AUTO_CREATE_COMPANY_AFTER); config1.setPicker(auto_create_company_after); config1.initialize(); - LocalDateConfig config2 = new LocalDateConfig("cloud.u8.contract.latestDate"); + LocalDateConfig config2 = new LocalDateConfig(ContractCtx.CONTRACT_LATEST_DATE); config2.setPicker(contract_latest_date); config2.initialize(); - } + StringConfig config3 = new StringConfig(ContractCtx.CONTRACT_LATEST_ID); + config3.setTextField(contract_latest_id); + config3.initialize(); - @NoArgsConstructor - public static class LocalDateConfig { - @Setter - private SysConfService confService; - - Property property; - @Setter - javafx.util.StringConverter converter; - @Setter - DatePicker picker; - String key; - SysConf conf; - - public LocalDateConfig(String string) { - key = string; - } - - public void initialize() { - picker.setDisable(true); - if (converter == null) { - converter = new LocalDateStringConverter(DateTimeFormatter.ISO_LOCAL_DATE, null); - } - picker.setConverter(converter); - runAsync(() -> { - conf = getConfService().findById(key); - LocalDate date = converter.fromString(conf.getValue()); - property = new SimpleObjectProperty<>(date); - property.addListener(this::propertyChanged); - picker.valueProperty().bindBidirectional(property); - picker.setDisable(false); - }); - } - - void propertyChanged(ObservableValue observable, LocalDate oldValue, LocalDate newValue) { - conf.setValue(converter.toString(newValue)); - SysConf saved = getConfService().save(conf); - saved.getValue(); - } - - public CompletableFuture runAsync(Runnable runnable) { - return CompletableFuture.runAsync(runnable, Desktop.instance.getExecutorService()).exceptionally(ex -> { - ex.printStackTrace(); - return null; - }); - } - - public SysConfService getConfService() { - if (confService == null) { - confService = SpringApp.getBean(SysConfService.class); - } - return confService; - } + StringConfig config4 = new StringConfig("cloud.u8.sync.elapse"); + config4.setTextField(sync_elapse); + config4.initialize(); } diff --git a/src/main/java/com/ecep/contract/manager/cloud/u8/ctx/CompanyCtx.java b/src/main/java/com/ecep/contract/manager/cloud/u8/ctx/CompanyCtx.java index 9acf2e2..03488ec 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/u8/ctx/CompanyCtx.java +++ b/src/main/java/com/ecep/contract/manager/cloud/u8/ctx/CompanyCtx.java @@ -18,6 +18,9 @@ import java.util.Objects; import static com.ecep.contract.manager.SpringApp.getBean; public class CompanyCtx extends AbstractYongYouU8Ctx { + /** + * 自动创建公司的时间 + */ public static final String AUTO_CREATE_COMPANY_AFTER = "cloud.u8.auto-create-company-after"; @Setter @@ -111,7 +114,7 @@ public class CompanyCtx extends AbstractYongYouU8Ctx { return null; } CompanyService companyService = getCompanyService(); - String autoCreateAfter = SpringApp.getBean(SysConfService.class).getString(AUTO_CREATE_COMPANY_AFTER); + String autoCreateAfter = getConfService().getString(AUTO_CREATE_COMPANY_AFTER); // 当配置存在,且开发时间小于指定时间,不创建 if (StringUtils.hasText(autoCreateAfter)) { LocalDate miniDate = LocalDate.parse(autoCreateAfter); diff --git a/src/main/java/com/ecep/contract/manager/cloud/u8/ctx/ContractCtx.java b/src/main/java/com/ecep/contract/manager/cloud/u8/ctx/ContractCtx.java index ed5d033..a473bab 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/u8/ctx/ContractCtx.java +++ b/src/main/java/com/ecep/contract/manager/cloud/u8/ctx/ContractCtx.java @@ -45,6 +45,10 @@ import java.util.stream.Stream; import static com.ecep.contract.manager.SpringApp.getBean; public class ContractCtx extends AbstractYongYouU8Ctx { + public static final String CONTRACT_LATEST_DATE = "cloud.u8.contract.latestDate"; + public static final String CONTRACT_LATEST_ID = "cloud.u8.contract.latestId"; + public static final String KEY_CONTRACT_SYNC_USE_LATEST_ID = "cloud.u8.contract.sync.use-latest-id"; + @Setter private ContractService contractService; @@ -74,6 +78,7 @@ public class ContractCtx extends AbstractYongYouU8Ctx { @Setter private int customerEntityUpdateDelayDays = 1; + public ContractService getContractService() { if (contractService == null) { contractService = getBean(ContractService.class); diff --git a/src/main/java/com/ecep/contract/manager/ds/contract/service/ContractService.java b/src/main/java/com/ecep/contract/manager/ds/contract/service/ContractService.java index 82d7909..3ca5ddd 100644 --- a/src/main/java/com/ecep/contract/manager/ds/contract/service/ContractService.java +++ b/src/main/java/com/ecep/contract/manager/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.manager.cloud.u8.ctx.ContractCtx; import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.contract.ContractPayWay; import com.ecep.contract.manager.ds.contract.repository.ContractRepository; @@ -52,9 +53,6 @@ import com.ecep.contract.manager.ui.ViewModelService; public class ContractService implements ViewModelService { private static final Logger logger = LoggerFactory.getLogger(ContractService.class); public static final String CONTRACT_BASE_PATH = "contract.base.path"; - public static final String CONTRACT_LATEST_ID = "cloud.u8.contract.latestId"; - public static final String CONTRACT_LATEST_DATE = "cloud.u8.contract.latestDate"; - @Lazy @Autowired private ContractCatalogService contractCatalogService; @@ -152,10 +150,10 @@ public class ContractService implements ViewModelService runAsync(Runnable runnable) { + return CompletableFuture.runAsync(runnable, Desktop.instance.getExecutorService()).exceptionally(ex -> { + ex.printStackTrace(); + return null; + }); + } + + @Override + public SysConfService getConfService() { + if (confService == null) { + confService = SpringApp.getBean(SysConfService.class); + } + return confService; + } +} diff --git a/src/main/java/com/ecep/contract/manager/ds/other/ConfigBounder.java b/src/main/java/com/ecep/contract/manager/ds/other/ConfigBounder.java new file mode 100644 index 0000000..b8223eb --- /dev/null +++ b/src/main/java/com/ecep/contract/manager/ds/other/ConfigBounder.java @@ -0,0 +1,17 @@ +package com.ecep.contract.manager.ds.other; + +import java.util.concurrent.CompletableFuture; + +import com.ecep.contract.manager.ds.other.service.SysConfService; + +public interface ConfigBounder { + + void setConfService(SysConfService confService); + + void initialize(); + + CompletableFuture runAsync(Runnable runnable); + + SysConfService getConfService(); + +} \ No newline at end of file diff --git a/src/main/java/com/ecep/contract/manager/ds/other/LocalDateConfig.java b/src/main/java/com/ecep/contract/manager/ds/other/LocalDateConfig.java new file mode 100644 index 0000000..a8c65da --- /dev/null +++ b/src/main/java/com/ecep/contract/manager/ds/other/LocalDateConfig.java @@ -0,0 +1,57 @@ +package com.ecep.contract.manager.ds.other; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.CompletableFuture; + +import com.ecep.contract.manager.Desktop; +import com.ecep.contract.manager.SpringApp; +import com.ecep.contract.manager.ds.other.model.SysConf; +import com.ecep.contract.manager.ds.other.service.SysConfService; + +import javafx.beans.property.Property; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ObservableValue; +import javafx.scene.control.DatePicker; +import javafx.util.converter.LocalDateStringConverter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +public class LocalDateConfig extends AbstractConfigBounder { + Property property; + @Setter + javafx.util.StringConverter converter; + @Setter + DatePicker picker; + + + public LocalDateConfig(String string) { + key = string; + } + + @Override + public void initialize() { + picker.setDisable(true); + if (converter == null) { + converter = new LocalDateStringConverter(DateTimeFormatter.ISO_LOCAL_DATE, null); + } + picker.setConverter(converter); + runAsync(() -> { + conf = getConfService().findById(key); + LocalDate date = converter.fromString(conf.getValue()); + property = new SimpleObjectProperty<>(date); + property.addListener(this::propertyChanged); + picker.valueProperty().bindBidirectional(property); + picker.setDisable(false); + }); + } + + void propertyChanged(ObservableValue observable, LocalDate oldValue, LocalDate newValue) { + conf.setValue(converter.toString(newValue)); + SysConf saved = getConfService().save(conf); + saved.getValue(); + } + + +} \ No newline at end of file diff --git a/src/main/java/com/ecep/contract/manager/ds/other/StringConfig.java b/src/main/java/com/ecep/contract/manager/ds/other/StringConfig.java new file mode 100644 index 0000000..a7e71bf --- /dev/null +++ b/src/main/java/com/ecep/contract/manager/ds/other/StringConfig.java @@ -0,0 +1,42 @@ +package com.ecep.contract.manager.ds.other; + +import com.ecep.contract.manager.ds.other.model.SysConf; + +import javafx.beans.property.Property; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.value.ObservableValue; +import javafx.scene.control.TextField; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +public class StringConfig extends AbstractConfigBounder { + @Setter + private TextField textField; + + String key; + SysConf conf; + + Property property; + + public StringConfig(String string) { + key = string; + } + + public void initialize() { + textField.setDisable(true); + runAsync(() -> { + conf = getConfService().findById(key); + property = new SimpleStringProperty(conf.getValue()); + property.addListener(this::propertyChanged); + textField.textProperty().bindBidirectional(property); + textField.setDisable(false); + }); + } + + void propertyChanged(ObservableValue observable, String oldValue, String newValue) { + conf.setValue(newValue); + SysConf saved = getConfService().save(conf); + saved.getValue(); + } +} diff --git a/src/main/resources/ui/cloud/u8_config.fxml b/src/main/resources/ui/cloud/u8_config.fxml index 3d367cc..ed3592a 100644 --- a/src/main/resources/ui/cloud/u8_config.fxml +++ b/src/main/resources/ui/cloud/u8_config.fxml @@ -26,8 +26,8 @@ +