From 7d4961dae4023c77394f50c22aa620994dcaef50 Mon Sep 17 00:00:00 2001 From: songqq Date: Fri, 17 Oct 2025 15:39:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=87=B30.0.129-SNAPSHOT=E5=B9=B6=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=A4=9A=E4=B8=AA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(ProjectIndustryService): 添加getStringConverter方法 fix(AbstContractRepairTasker): 初始化repository修复同步问题 fix(ProjectTabSkinBase): 处理saleTypeField空值情况 refactor(ProjectTypeService): 优化stringConverter初始化 feat(ProjectTypeStringConverter): 修改toString方法显示编码和名称 fix(CustomerCtx): 初始化repository修复客户更新问题 feat(ProjectCostWindowController): 根据版本控制审批标签显示 fix(DeliverySignMethodService): 添加saleType查询条件 feat: 添加DeliverySignMethodStringConverter fix(SalesOrderCtx): 使用getRepository修复查询问题 fix(VendorCtx): 初始化repository修复供应商更新问题 refactor(CompanyTabSkinContract): 优化员工表格单元格创建 feat(DeliverySignMethodService): 添加findByCode和findByName方法 refactor(AbstEntityController): 优化视图模型更新逻辑 style(project.fxml): 调整界面布局和字段显示 --- client/pom.xml | 6 +- .../controller/AbstEntityController.java | 49 ++-- .../project/ProjectTabSkinBase.java | 3 + .../cost/ProjectCostWindowController.java | 15 + .../tab/CompanyTabSkinContract.java | 6 +- .../DeliverySignMethodStringConverter.java | 47 +++ .../converter/ProjectTypeStringConverter.java | 6 +- .../service/DeliverySignMethodService.java | 28 +- .../service/ProjectIndustryService.java | 5 + .../contract/service/ProjectTypeService.java | 6 +- .../ui/company/company-tab-contract.fxml | 6 +- .../main/resources/ui/project/project.fxml | 274 ++++++++---------- common/pom.xml | 4 +- pom.xml | 2 +- server/pom.xml | 6 +- .../contract/cloud/u8/ctx/CustomerCtx.java | 3 +- .../contract/cloud/u8/ctx/SalesOrderCtx.java | 4 +- .../ecep/contract/cloud/u8/ctx/VendorCtx.java | 7 +- .../tasker/AbstContractRepairTasker.java | 1 + .../service/DeliverySignMethodService.java | 3 +- 20 files changed, 263 insertions(+), 218 deletions(-) create mode 100644 client/src/main/java/com/ecep/contract/converter/DeliverySignMethodStringConverter.java diff --git a/client/pom.xml b/client/pom.xml index 5e74717..fa550b5 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -6,12 +6,12 @@ com.ecep.contract Contract-Manager - 0.0.126-SNAPSHOT + 0.0.129-SNAPSHOT com.ecep.contract client - 0.0.126-SNAPSHOT + 0.0.129-SNAPSHOT ${java.version} @@ -22,7 +22,7 @@ com.ecep.contract common - 0.0.126-SNAPSHOT + 0.0.129-SNAPSHOT org.springframework.boot diff --git a/client/src/main/java/com/ecep/contract/controller/AbstEntityController.java b/client/src/main/java/com/ecep/contract/controller/AbstEntityController.java index 5b69d67..5390d06 100644 --- a/client/src/main/java/com/ecep/contract/controller/AbstEntityController.java +++ b/client/src/main/java/com/ecep/contract/controller/AbstEntityController.java @@ -53,33 +53,26 @@ public abstract class AbstEntityController queryService) { setStatus("读取..."); loadedFuture = queryService.asyncFindById(viewModel.getId().get()); - loadedFuture.thenAccept(entity -> { - // fixed, bind change if new view model create - if (viewModel != null) { - viewModel.bindListener(); - } - setStatus(); - // BaseViewModel.updateInFxApplicationThread(entity, viewModel); - }); - loadedFuture.exceptionally(ex -> { - handleException("载入失败,#" + viewModel.getId().get(), ex); - return null; - }); + } else { loadedFuture = CompletableFuture.supplyAsync(() -> { - T entity = getViewModelService().findById(viewModel.getId().get()); - if (entity == null) { - return null; - } - Platform.runLater(() -> { - setStatus(); - viewModel.update(entity); - }); - viewModel.bindListener(); - return entity; + return getViewModelService().findById(viewModel.getId().get()); }); } + loadedFuture.thenAccept(entity -> { + // fixed, bind change if new view model create + if (viewModel != null) { + updateViewModel(entity); + viewModel.bindListener(); + } + setStatus(); + }); + loadedFuture.exceptionally(ex -> { + handleException("载入失败,#" + viewModel.getId().get(), ex); + return null; + }); + registerTabSkins(); if (saveBtn != null) { saveBtn.disableProperty().bind(createTabSkinChangedBindings().not()); @@ -89,6 +82,10 @@ public abstract class AbstEntityController[]::new)) + .stream() + .map(RefreshableSkin::refresh) + .filter(Objects::nonNull) + .toArray(CompletableFuture[]::new)) .whenComplete((v, ex) -> { if (ex != null) { future.completeExceptionally(ex); diff --git a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinBase.java b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinBase.java index c6be87a..323e036 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinBase.java +++ b/client/src/main/java/com/ecep/contract/controller/project/ProjectTabSkinBase.java @@ -107,6 +107,9 @@ public class ProjectTabSkinBase extends AbstProjectBasedTabSkin implements TabSk controller.saleTypeField.valueProperty().addListener((observable, oldValue, newValue) -> { Predicate predicate = p -> { + if (newValue == null) { + return true; + } return p == null || Objects.equals(p.getSaleTypeId(), newValue.getId()); }; diff --git a/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostWindowController.java b/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostWindowController.java index 01ec257..080a147 100644 --- a/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostWindowController.java +++ b/client/src/main/java/com/ecep/contract/controller/project/cost/ProjectCostWindowController.java @@ -88,8 +88,23 @@ public class ProjectCostWindowController @Override protected void registerTabSkins() { + registerTabSkin(baseInfoTab, tab -> new ProjectCostTabSkinBase(this)); registerTabSkin(itemTab, tab -> new ProjectCostTabSkinItems(this)); + + } + + @Override + protected void updateViewModel(ProjectCostVo entity) { + super.updateViewModel(entity); + var tabPane = baseInfoTab.getTabPane(); + if (entity.getVersion() > 0) { + if (!tabPane.getTabs().contains(approvalTab)) { + tabPane.getTabs().add(approvalTab); + } + } else { + tabPane.getTabs().remove(approvalTab); + } } @Override diff --git a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContract.java b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContract.java index 5b2383c..31b1362 100644 --- a/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContract.java +++ b/client/src/main/java/com/ecep/contract/controller/tab/CompanyTabSkinContract.java @@ -164,18 +164,18 @@ public class CompanyTabSkinContract contractTable_startDateColumn.setCellValueFactory(param -> param.getValue().getStartDate()); contractTable_endDateColumn.setCellValueFactory(param -> param.getValue().getEndDate()); contractTable_setupPersonColumn.setCellValueFactory(param -> param.getValue().getSetupPerson()); - contractTable_setupPersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService())); + contractTable_setupPersonColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService())); contractTable_setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate()); // contractTable_setupDateColumn.setSortable(true); // contractTable_setupDateColumn.setSortType(TableColumn.SortType.DESCENDING); contractTable_inurePersonColumn.setCellValueFactory(param -> param.getValue().getInurePerson()); - contractTable_inurePersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService())); + contractTable_inurePersonColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService())); contractTable_inureDateColumn.setCellValueFactory(param -> param.getValue().getInureDate()); contractTable_varyPersonColumn.setCellValueFactory(param -> param.getValue().getVaryPerson()); - contractTable_varyPersonColumn.setCellFactory(param -> new EmployeeTableCell<>(getEmployeeService())); + contractTable_varyPersonColumn.setCellFactory(EmployeeTableCell.forTableColumn(getEmployeeService())); contractTable_varyDateColumn.setCellValueFactory(param -> param.getValue().getVaryDate()); contractTable_createdColumn.setCellValueFactory(param -> param.getValue().getCreated()); diff --git a/client/src/main/java/com/ecep/contract/converter/DeliverySignMethodStringConverter.java b/client/src/main/java/com/ecep/contract/converter/DeliverySignMethodStringConverter.java new file mode 100644 index 0000000..42ba0a9 --- /dev/null +++ b/client/src/main/java/com/ecep/contract/converter/DeliverySignMethodStringConverter.java @@ -0,0 +1,47 @@ +package com.ecep.contract.converter; + +import com.ecep.contract.service.DeliverySignMethodService; +import com.ecep.contract.vo.DeliverySignMethodVo; +import javafx.util.StringConverter; + +/** + * DeliverySignMethodVo的StringConverter实现,用于JavaFX控件中的显示和转换 + */ +public class DeliverySignMethodStringConverter extends StringConverter { + private final DeliverySignMethodService service; + + /** + * 构造函数 + * + * @param service DeliverySignMethodService实例 + */ + public DeliverySignMethodStringConverter(DeliverySignMethodService service) { + this.service = service; + } + + /** + * 将DeliverySignMethodVo对象转换为字符串 + * + * @param method DeliverySignMethodVo对象 + * @return 转换后的字符串 + */ + @Override + public String toString(DeliverySignMethodVo method) { + return method == null ? "" : method.getCode() + " " + method.getName(); + } + + /** + * 将字符串转换为DeliverySignMethodVo对象 + * + * @param string 字符串 + * @return 转换后的DeliverySignMethodVo对象 + */ + @Override + public DeliverySignMethodVo fromString(String string) { + if (string == null || string.isEmpty()) { + return null; + } + // 查找所有方法,然后通过名称匹配 + return service.findByName(string); + } +} \ No newline at end of file diff --git a/client/src/main/java/com/ecep/contract/converter/ProjectTypeStringConverter.java b/client/src/main/java/com/ecep/contract/converter/ProjectTypeStringConverter.java index 97d5004..ae9ccea 100644 --- a/client/src/main/java/com/ecep/contract/converter/ProjectTypeStringConverter.java +++ b/client/src/main/java/com/ecep/contract/converter/ProjectTypeStringConverter.java @@ -22,12 +22,12 @@ public class ProjectTypeStringConverter extends StringConverter { /** * 将ProjectTypeVo对象转换为字符串 * - * @param object ProjectTypeVo对象 + * @param type ProjectTypeVo对象 * @return 转换后的字符串 */ @Override - public String toString(ProjectTypeVo object) { - return object == null ? "" : object.getName(); + public String toString(ProjectTypeVo type) { + return type == null ? "" : type.getCode() + " " + type.getName(); } /** diff --git a/client/src/main/java/com/ecep/contract/service/DeliverySignMethodService.java b/client/src/main/java/com/ecep/contract/service/DeliverySignMethodService.java index dfb7c57..2f9157d 100644 --- a/client/src/main/java/com/ecep/contract/service/DeliverySignMethodService.java +++ b/client/src/main/java/com/ecep/contract/service/DeliverySignMethodService.java @@ -1,5 +1,7 @@ package com.ecep.contract.service; +import java.util.List; + import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -7,16 +9,18 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import com.ecep.contract.converter.DeliverySignMethodStringConverter; import com.ecep.contract.util.ParamUtils; import com.ecep.contract.vm.DeliverySignMethodViewModel; import com.ecep.contract.vo.DeliverySignMethodVo; import com.ecep.contract.vo.ProjectSaleTypeVo; -import java.util.List; +import javafx.util.StringConverter; @Service @CacheConfig(cacheNames = "delivery-sign-method") public class DeliverySignMethodService extends QueryService { + private final StringConverter stringConverter = new DeliverySignMethodStringConverter(this); @Cacheable(key = "#id") @Override @@ -24,6 +28,14 @@ public class DeliverySignMethodService extends QueryService page = findAll(ParamUtils.builder() - .equals("saleType", saleType.getId()).build(), Pageable.unpaged()); + var builder = ParamUtils.builder(); + builder.equals("saleType", saleType.getId()); + builder.equals("code", code); + Page page = findAll(builder.build(), Pageable.unpaged()); if (page.isEmpty()) { return null; } - return page.stream().filter(v -> v.getCode().equals(code)).findFirst().orElse(null); + return page.stream().findFirst().orElse(null); } - @Cacheable(key = "'all'") @Override public List findAll() { @@ -58,4 +71,9 @@ public class DeliverySignMethodService extends QueryService getStringConverter() { + return stringConverter; + } } diff --git a/client/src/main/java/com/ecep/contract/service/ProjectIndustryService.java b/client/src/main/java/com/ecep/contract/service/ProjectIndustryService.java index 788a67d..3d6c544 100644 --- a/client/src/main/java/com/ecep/contract/service/ProjectIndustryService.java +++ b/client/src/main/java/com/ecep/contract/service/ProjectIndustryService.java @@ -50,5 +50,10 @@ public class ProjectIndustryService extends QueryService getStringConverter() { + return stringConverter; + } } diff --git a/client/src/main/java/com/ecep/contract/service/ProjectTypeService.java b/client/src/main/java/com/ecep/contract/service/ProjectTypeService.java index 49efd99..7f8454b 100644 --- a/client/src/main/java/com/ecep/contract/service/ProjectTypeService.java +++ b/client/src/main/java/com/ecep/contract/service/ProjectTypeService.java @@ -13,11 +13,7 @@ import javafx.util.StringConverter; @Service @CacheConfig(cacheNames = "project-type") public class ProjectTypeService extends QueryService { - private final StringConverter stringConverter; - - public ProjectTypeService() { - this.stringConverter = new ProjectTypeStringConverter(this); - } + private final StringConverter stringConverter = new ProjectTypeStringConverter(this); @Cacheable(key = "#p0") @Override diff --git a/client/src/main/resources/ui/company/company-tab-contract.fxml b/client/src/main/resources/ui/company/company-tab-contract.fxml index b8c6ffc..efd7bee 100644 --- a/client/src/main/resources/ui/company/company-tab-contract.fxml +++ b/client/src/main/resources/ui/company/company-tab-contract.fxml @@ -31,9 +31,9 @@ - - - + + + diff --git a/client/src/main/resources/ui/project/project.fxml b/client/src/main/resources/ui/project/project.fxml index c905614..d80e338 100644 --- a/client/src/main/resources/ui/project/project.fxml +++ b/client/src/main/resources/ui/project/project.fxml @@ -1,19 +1,39 @@ - - + + + + + + + + + + + + + + + + + + + + + + + - + + -