From fa1d63413fa28b68f2630d54539dfdcfd3125c40 Mon Sep 17 00:00:00 2001 From: danyz Date: Sun, 24 Aug 2025 16:53:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E4=BF=AE=E5=A4=8D=E4=BE=9B=E5=BA=94?= =?UTF-8?q?=E5=95=86=E8=A1=A8=E6=A0=BC=E5=8D=95=E5=85=83=E6=A0=BC=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E9=97=AE=E9=A2=98=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复供应商表格单元格在显示供应商名称时的初始化问题,优化异步加载逻辑 重构CompanyVendorTableCell及相关代码,提高可维护性 调整.gitignore中config.properties的路径格式 清理配置文件中注释掉的数据库连接信息 更新FXML布局文件中的控件属性 --- .gitignore | 2 +- config.properties | 10 +- .../inventory/InventorySyncTask.java | 16 +-- .../permission/FunctionTabSkinPermission.java | 6 +- .../other/repository/FunctionRepository.java | 14 +- .../ds/other/service/FunctionService.java | 23 +--- .../ProjectManagerWindowController.java | 22 ++- ...mpanyVendorApprovedListTabSkinVendors.java | 130 ++++++++++-------- .../manager/ui/AbstEntityController.java | 18 +-- .../contract/manager/ui/ViewModelService.java | 23 ++-- .../ui/table/cell/AsyncUpdateTableCell.java | 19 ++- .../ui/table/cell/CompanyVendorTableCell.java | 81 +++++++++++ src/main/resources/ui/employee/function.fxml | 2 +- 13 files changed, 220 insertions(+), 146 deletions(-) create mode 100644 src/main/java/com/ecep/contract/manager/ui/table/cell/CompanyVendorTableCell.java diff --git a/.gitignore b/.gitignore index 77a833b..f7c687f 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,4 @@ build/ ### VS Code ### .vscode/ -config.properties +/config.properties \ No newline at end of file diff --git a/config.properties b/config.properties index 2b04343..d2cddbd 100644 --- a/config.properties +++ b/config.properties @@ -1,9 +1,9 @@ #Updated config.properties #Wed Mar 26 16:33:45 CST 2025 cloud.u8.enabled=true -db.server.database=supplier_ms -db.server.host=10.84.209.8 -db.server.password=ecep.62335656 -db.server.port=3306 -db.server.username=ecep +#db.server.database=supplier_ms +#db.server.host=10.84.209.8 +#db.server.password=ecep.62335656 +#db.server.port=3306 +#db.server.username=ecep username_password.remember=true diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventorySyncTask.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventorySyncTask.java index 45a5912..09dcd1c 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventorySyncTask.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventorySyncTask.java @@ -1,19 +1,17 @@ package com.ecep.contract.manager.ds.other.controller.inventory; -import com.ecep.contract.manager.cloud.u8.YongYouU8Repository; -import com.ecep.contract.manager.cloud.u8.YongYouU8Service; -import com.ecep.contract.manager.cloud.u8.ctx.InventoryCtx; -import com.ecep.contract.manager.ds.other.model.Inventory; -import com.ecep.contract.manager.ds.other.service.InventoryService; -import com.ecep.contract.manager.ui.MessageHolder; -import com.ecep.contract.manager.ui.Tasker; -import org.springframework.beans.BeansException; +import java.util.concurrent.atomic.AtomicInteger; + import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; -import java.util.concurrent.atomic.AtomicInteger; +import com.ecep.contract.manager.cloud.u8.ctx.InventoryCtx; +import com.ecep.contract.manager.ds.other.model.Inventory; +import com.ecep.contract.manager.ds.other.service.InventoryService; +import com.ecep.contract.manager.ui.MessageHolder; +import com.ecep.contract.manager.ui.Tasker; public class InventorySyncTask extends Tasker { private InventoryCtx inventoryCtx; diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionTabSkinPermission.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionTabSkinPermission.java index d47ba7c..622eba0 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionTabSkinPermission.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionTabSkinPermission.java @@ -44,6 +44,9 @@ public class FunctionTabSkinPermission @Override public PermissionService getViewModelService() { + if (permissionService == null) { + permissionService = getBean(PermissionService.class); + } return permissionService; } @@ -53,7 +56,8 @@ public class FunctionTabSkinPermission idColumn.setCellValueFactory(param -> param.getValue().getId()); nameColumn.setCellValueFactory(param -> param.getValue().getName()); keyColumn.setCellValueFactory(param -> param.getValue().getKey()); - // descriptionColumn.setCellValueFactory(param -> param.getValue().getDescription()); + // descriptionColumn.setCellValueFactory(param -> + // param.getValue().getDescription()); } @Override diff --git a/src/main/java/com/ecep/contract/manager/ds/other/repository/FunctionRepository.java b/src/main/java/com/ecep/contract/manager/ds/other/repository/FunctionRepository.java index 54aaad3..f25a4aa 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/repository/FunctionRepository.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/repository/FunctionRepository.java @@ -1,18 +1,12 @@ package com.ecep.contract.manager.ds.other.repository; -import com.ecep.contract.manager.ds.other.model.Function; import org.springframework.context.annotation.Lazy; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Repository; +import com.ecep.contract.manager.ds.MyRepository; +import com.ecep.contract.manager.ds.other.model.Function; + @Lazy @Repository -public interface FunctionRepository extends - // JDBC interfaces - CrudRepository, PagingAndSortingRepository, - // JPA interfaces - JpaRepository, JpaSpecificationExecutor { +public interface FunctionRepository extends MyRepository { } diff --git a/src/main/java/com/ecep/contract/manager/ds/other/service/FunctionService.java b/src/main/java/com/ecep/contract/manager/ds/other/service/FunctionService.java index 6323a0d..1cb878b 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/service/FunctionService.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/service/FunctionService.java @@ -23,30 +23,22 @@ import com.ecep.contract.manager.ui.ViewModelService; public class FunctionService implements ViewModelService { @Lazy @Autowired - private FunctionRepository functionRepository; + private FunctionRepository repository; /* */ - @Cacheable(key = "#p0") public Function findById(Integer id) { - return functionRepository.findById(id).orElse(null); - } - - @Cacheable(key = "'code-'+#p0") - public Function findByCode(String code) { - // return functionRepository.findByCode(code).orElse(null); - throw new UnsupportedOperationException(); + return repository.findById(id).orElse(null); } @Caching(evict = { - @CacheEvict(key = "#p0.id"), - @CacheEvict(key = "'code-'+#p0.code") + @CacheEvict(key = "#p0.id") }) public Function save(Function role) { - return functionRepository.save(role); + return repository.save(role); } @Override @@ -55,15 +47,14 @@ public class FunctionService implements ViewModelService findAll(Specification spec, Pageable pageable) { - return functionRepository.findAll(spec, pageable); + return repository.findAll(spec, pageable); } @Override diff --git a/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectManagerWindowController.java index e5c7aec..b97ba70 100644 --- a/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectManagerWindowController.java @@ -1,5 +1,13 @@ package com.ecep.contract.manager.ds.project.controller; +import java.time.LocalDate; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.project.controller.industry.ProjectIndustryManagerWindowController; @@ -14,19 +22,11 @@ import com.ecep.contract.manager.ds.project.vo.ProjectViewModel; import com.ecep.contract.manager.ui.AbstManagerWindowController; import com.ecep.contract.manager.ui.BaseController; import com.ecep.contract.manager.ui.FxmlPath; -import com.ecep.contract.manager.ui.ViewModelService; + import javafx.event.ActionEvent; import javafx.scene.control.ComboBox; import javafx.scene.control.TableColumn; import javafx.stage.WindowEvent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import java.time.LocalDate; @Lazy @Scope("prototype") @@ -36,7 +36,6 @@ public class ProjectManagerWindowController extends AbstManagerWindowController { private static final Logger logger = LoggerFactory.getLogger(ProjectManagerWindowController.class); - public ComboBox saleTypeSelector; public TableColumn idColumn; @@ -51,7 +50,6 @@ public class ProjectManagerWindowController public TableColumn useOfferColumn; public TableColumn amountColumn; - @Autowired private ProjectService projectService; @@ -71,11 +69,9 @@ public class ProjectManagerWindowController return new ProjectManagerSkin(this); } - public void onReBuildFilesAction(ActionEvent event) { } - public void onBaseTableRefreshAction(ActionEvent event) { getSkin().loadTableDataSet(true); } diff --git a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListTabSkinVendors.java b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListTabSkinVendors.java index 60bf776..bbeee07 100644 --- a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListTabSkinVendors.java +++ b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/approved_list/CompanyVendorApprovedListTabSkinVendors.java @@ -1,9 +1,17 @@ package com.ecep.contract.manager.ds.vendor.controller.approved_list; +import java.util.ArrayList; +import java.util.List; + +import org.hibernate.Hibernate; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.util.StringUtils; + import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.CompanyOldName; import com.ecep.contract.manager.ds.company.service.CompanyOldNameService; import com.ecep.contract.manager.ds.company.service.CompanyService; +import com.ecep.contract.manager.ds.other.service.IEntityService; import com.ecep.contract.manager.ds.other.service.SysConfService; import com.ecep.contract.manager.ds.vendor.controller.CompanyVendorWindowController; import com.ecep.contract.manager.ds.vendor.model.CompanyVendor; @@ -14,43 +22,46 @@ import com.ecep.contract.manager.ds.vendor.service.CompanyVendorApprovedItemServ import com.ecep.contract.manager.ds.vendor.service.CompanyVendorService; import com.ecep.contract.manager.ds.vendor.vo.CompanyVendorApprovedItemViewModel; import com.ecep.contract.manager.ds.vendor.vo.CompanyVendorApprovedListViewModel; -import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin; import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.tab.TabSkin; +import com.ecep.contract.manager.ui.table.AbstEntityTableTabSkin; +import com.ecep.contract.manager.ui.table.cell.CompanyVendorTableCell; import com.ecep.contract.manager.ui.util.BooleanConfigProperty; import com.ecep.contract.manager.ui.util.IntegerConfigProperty; import com.ecep.contract.manager.util.SpecificationUtils; import com.ecep.contract.manager.util.UITools; + import javafx.beans.property.SimpleBooleanProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; -import javafx.scene.control.*; +import javafx.scene.control.CheckMenuItem; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Menu; +import javafx.scene.control.MenuItem; +import javafx.scene.control.SelectionMode; +import javafx.scene.control.Spinner; +import javafx.scene.control.Tab; +import javafx.scene.control.TableColumn; import javafx.util.StringConverter; import lombok.Setter; -import org.hibernate.Hibernate; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.util.StringUtils; - -import java.util.ArrayList; -import java.util.List; @FxmlPath("/ui/company/vendor/vendor_approved_list-tab-vendor.fxml") public class CompanyVendorApprovedListTabSkinVendors - extends AbstEntityTableTabSkin + extends + AbstEntityTableTabSkin implements TabSkin { @Setter private CompanyVendorApprovedItemService itemService; private CompanyService companyService; private CompanyVendorService companyVendorService; private CompanyOldNameService companyOldNameService; - private SysConfService confService; public ComboBox typeSelector; public Menu vendorTableContextChangeTypeMenu; public TableColumn idColumn; - public TableColumn vendorColumn; + public TableColumn vendorColumn; public TableColumn typeColumn; public TableColumn descriptionColumn; @@ -86,10 +97,7 @@ public class CompanyVendorApprovedListTabSkinVendors } public SysConfService getConfService() { - if (confService == null) { - confService = getBean(SysConfService.class); - } - return confService; + return controller.getConfService(); } CompanyVendorApprovedItemService getItemService() { @@ -130,7 +138,8 @@ public class CompanyVendorApprovedListTabSkinVendors @Override public void initializeTab() { - List vendorTypeLocals = getCompanyVendorService().findAllTypes(controller.getLocale().toLanguageTag()); + List vendorTypeLocals = getCompanyVendorService() + .findAllTypes(controller.getLocale().toLanguageTag()); ObservableList vendorTypeItems = FXCollections.observableArrayList(); vendorTypeItems.add(null); @@ -152,31 +161,8 @@ public class CompanyVendorApprovedListTabSkinVendors }); idColumn.setCellValueFactory(param -> param.getValue().getId()); - vendorColumn.setCellValueFactory(param -> param.getValue().getVendor().map(v -> { - if (v == null) { - return "-"; - } - - if (StringUtils.hasText(param.getValue().getVendorName().get())) { - return param.getValue().getVendorName().get(); - } - - if (!Hibernate.isInitialized(v)) { - v = getCompanyVendorService().findById(v.getId()); - param.getValue().getVendor().set(v); - } - - Company company = v.getCompany(); - if (company == null) { - return "--"; - } else { - if (!Hibernate.isInitialized(company)) { - company = getCompanyService().findById(company.getId()); - v.setCompany(company); - } - return company.getName(); - } - })); + vendorColumn.setCellValueFactory(param -> param.getValue().getVendor()); + vendorColumn.setCellFactory(param -> new VendorTableCell(getCompanyVendorService(), getCompanyService())); typeColumn.setCellValueFactory(param -> param.getValue().getType().map(v -> { if (v == null) { @@ -212,30 +198,26 @@ public class CompanyVendorApprovedListTabSkinVendors } }; - - //TODO bindBidirectional 失效问题 + // TODO bindBidirectional 失效问题 logUnqualifiedVendorChecker.selectedProperty().addListener((observable, oldValue, newValue) -> { System.out.println("newValue = " + newValue); }); logUnqualifiedVendorChecker.selectedProperty().bindBidirectional( - new BooleanConfigProperty("vendor.approved.list.log-unqualified-vendor", getConfService()) - ); - logUnqualifiedVendorChecker.selectedProperty().bindBidirectional(property); + new BooleanConfigProperty("vendor.approved.list.log-unqualified-vendor", getConfService())); logUnqualifiedVendorRemoveChecker.selectedProperty().bindBidirectional( - new BooleanConfigProperty("vendor.approved.list.log-unqualified-vendor-remove", getConfService()) - ); + new BooleanConfigProperty("vendor.approved.list.log-unqualified-vendor-remove", getConfService())); logTypicallyVendorNoThreeYearContractChecker.selectedProperty().bindBidirectional( - new BooleanConfigProperty("vendor.approved.list.log-typically-vendor-no-three-year-contract", getConfService()) - ); + new BooleanConfigProperty("vendor.approved.list.log-typically-vendor-no-three-year-contract", + getConfService())); logTypicallyVendorNoThreeYearContractDetailChecker.selectedProperty().bindBidirectional( - new BooleanConfigProperty("vendor.approved.list.log-typically-vendor-no-three-year-contract-detail", getConfService()) - ); + new BooleanConfigProperty("vendor.approved.list.log-typically-vendor-no-three-year-contract-detail", + getConfService())); qualifiedVendorEveryYearMinContractsSpinner.setEditable(true); qualifiedVendorEveryYearMinContractsSpinner.getValueFactory().valueProperty().bindBidirectional( - new IntegerConfigProperty("vendor.approved.list.qualified-vendor-every-year-mini-contract", getConfService()).asObject() - ); + new IntegerConfigProperty("vendor.approved.list.qualified-vendor-every-year-mini-contract", + getConfService()).asObject()); super.initializeTab(); } @@ -265,14 +247,14 @@ public class CompanyVendorApprovedListTabSkinVendors task.setLogUnqualifiedVendor(logUnqualifiedVendorChecker.isSelected()); task.setLogTypicallyVendorNoThreeYearContract(logTypicallyVendorNoThreeYearContractChecker.isSelected()); - task.setLogTypicallyVendorNoThreeYearContractDetail(logTypicallyVendorNoThreeYearContractDetailChecker.isSelected()); + task.setLogTypicallyVendorNoThreeYearContractDetail( + logTypicallyVendorNoThreeYearContractDetailChecker.isSelected()); task.setLogUnqualifiedVendorRemove(logUnqualifiedVendorRemoveChecker.isSelected()); task.setEveryYearMinContracts(qualifiedVendorEveryYearMinContractsSpinner.getValue()); UITools.showTaskDialogAndWait("导入供方", task, null); } - public void onVendorTableRefreshAction(ActionEvent event) { loadTableDataSet(); } @@ -281,7 +263,8 @@ public class CompanyVendorApprovedListTabSkinVendors CompanyVendorService vendorService = getCompanyVendorService(); CompanyService companyService = getCompanyService(); - ObservableList selectedItems = getTableView().getSelectionModel().getSelectedItems(); + ObservableList selectedItems = getTableView().getSelectionModel() + .getSelectedItems(); List list = new ArrayList<>(selectedItems); while (!list.isEmpty()) { CompanyVendorApprovedItemViewModel first = list.removeFirst(); @@ -295,14 +278,14 @@ public class CompanyVendorApprovedListTabSkinVendors company = companyService.findById(company.getId()); companyVendor.setCompany(company); } - CompanyOldName oldName = getCompanyOldNameService().findMatchByDate(company, viewModel.getPublishDate().get()); + CompanyOldName oldName = getCompanyOldNameService().findMatchByDate(company, + viewModel.getPublishDate().get()); if (oldName != null) { System.out.println("oldName = " + oldName); } } } - public void onVendorTableShowVendorAction(ActionEvent event) { CompanyVendorApprovedItemViewModel selectedItem = getTableView().getSelectionModel().getSelectedItem(); CompanyVendor companyVendor = selectedItem.getVendor().get(); @@ -314,7 +297,8 @@ public class CompanyVendorApprovedListTabSkinVendors } public void onVendorTableDeleteAction(ActionEvent event) { - ObservableList selectedItems = getTableView().getSelectionModel().getSelectedItems(); + ObservableList selectedItems = getTableView().getSelectionModel() + .getSelectedItems(); List list = new ArrayList<>(selectedItems); @@ -326,4 +310,30 @@ public class CompanyVendorApprovedListTabSkinVendors } } } + + static class VendorTableCell extends CompanyVendorTableCell { + public VendorTableCell(CompanyVendorService companyVendorService, CompanyService companyService) { + super(); + setService(companyVendorService); + setCompanyService(companyService); + } + + @Override + protected boolean isInitialized(CompanyVendor item) { + CompanyVendorApprovedItemViewModel row = getTableRow().getItem(); + if (StringUtils.hasText(row.getVendorName().get())) { + return true; + } + return super.isInitialized(item); + } + + @Override + public String format(CompanyVendor vendor) { + CompanyVendorApprovedItemViewModel row = getTableRow().getItem(); + if (StringUtils.hasText(row.getVendorName().get())) { + return row.getVendorName().get(); + } + return super.format(vendor); + } + } } diff --git a/src/main/java/com/ecep/contract/manager/ui/AbstEntityController.java b/src/main/java/com/ecep/contract/manager/ui/AbstEntityController.java index 05b08ca..1d551b2 100644 --- a/src/main/java/com/ecep/contract/manager/ui/AbstEntityController.java +++ b/src/main/java/com/ecep/contract/manager/ui/AbstEntityController.java @@ -24,7 +24,8 @@ import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.function.Function; -public abstract class AbstEntityController> extends BaseController { +public abstract class AbstEntityController> + extends BaseController { /** * 保存按钮 @@ -70,7 +71,6 @@ public abstract class AbstEntityController C getTabSkin(Class skinClass) { for (TabSkin tabSkin : tabSkins) { @@ -157,7 +155,6 @@ 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/src/main/java/com/ecep/contract/manager/ui/ViewModelService.java b/src/main/java/com/ecep/contract/manager/ui/ViewModelService.java index 553382a..2373516 100644 --- a/src/main/java/com/ecep/contract/manager/ui/ViewModelService.java +++ b/src/main/java/com/ecep/contract/manager/ui/ViewModelService.java @@ -1,20 +1,15 @@ package com.ecep.contract.manager.ui; +import java.lang.reflect.Type; + import com.ecep.contract.manager.ds.other.model.IdentityEntity; import com.ecep.contract.manager.ds.other.service.IEntityService; import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.domain.Specification; - -import java.lang.reflect.Type; -import java.util.List; - public interface ViewModelService> extends IEntityService { -// > R getRepository(); + // > R getRepository(); default T findByModel(TV model) { if (model instanceof IdentityViewModel identity) { @@ -33,12 +28,12 @@ public interface ViewModelService")[0].split(",")[1].trim(); -// System.out.println("clz = " + clz); + // System.out.println("clz = " + clz); Class clazz = Class.forName(clz); return (TV) clazz.getDeclaredConstructor().newInstance(); } @@ -52,12 +47,12 @@ public interface ViewModelService")[0].split(",")[0].trim(); -// System.out.println("clz = " + clz); + // System.out.println("clz = " + clz); Class clazz = Class.forName(clz); return (T) clazz.getDeclaredConstructor().newInstance(); } diff --git a/src/main/java/com/ecep/contract/manager/ui/table/cell/AsyncUpdateTableCell.java b/src/main/java/com/ecep/contract/manager/ui/table/cell/AsyncUpdateTableCell.java index 819c4eb..fb4aa1d 100644 --- a/src/main/java/com/ecep/contract/manager/ui/table/cell/AsyncUpdateTableCell.java +++ b/src/main/java/com/ecep/contract/manager/ui/table/cell/AsyncUpdateTableCell.java @@ -1,16 +1,19 @@ package com.ecep.contract.manager.ui.table.cell; +import java.util.concurrent.Future; + +import org.hibernate.Hibernate; + import com.ecep.contract.manager.Desktop; import com.ecep.contract.manager.ds.other.model.IdentityEntity; import com.ecep.contract.manager.ds.other.model.NamedEntity; import com.ecep.contract.manager.ds.other.service.IEntityService; -import javafx.application.Platform; -import org.hibernate.Hibernate; -import java.util.concurrent.Future; +import javafx.application.Platform; /** * 异步更新表格, 当单元格对应的数据未被初始化时, 显示#id, 当初始化后, 显示对应的文本 + * * @param * @param */ @@ -72,11 +75,17 @@ public class AsyncUpdateTableCell extends javafx.sc return toString(entity); } - protected void asyncLoadAndUpdate() { T entity = initialize(); + String formated; + try { + formated = format(entity); + } catch (Exception e) { + formated = e.getMessage(); + } + String texted = formated; Platform.runLater(() -> { - setText(format(entity)); + setText(texted); setItem(entity); }); } diff --git a/src/main/java/com/ecep/contract/manager/ui/table/cell/CompanyVendorTableCell.java b/src/main/java/com/ecep/contract/manager/ui/table/cell/CompanyVendorTableCell.java new file mode 100644 index 0000000..ca106a9 --- /dev/null +++ b/src/main/java/com/ecep/contract/manager/ui/table/cell/CompanyVendorTableCell.java @@ -0,0 +1,81 @@ +package com.ecep.contract.manager.ui.table.cell; + +import org.hibernate.Hibernate; + +import com.ecep.contract.manager.SpringApp; +import com.ecep.contract.manager.ds.company.model.Company; +import com.ecep.contract.manager.ds.company.service.CompanyService; +import com.ecep.contract.manager.ds.other.service.IEntityService; +import com.ecep.contract.manager.ds.vendor.model.CompanyVendor; +import com.ecep.contract.manager.ds.vendor.service.CompanyVendorService; + +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.util.Callback; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +public class CompanyVendorTableCell extends AsyncUpdateTableCell { + public static Callback, TableCell> forTableColumn() { + return forTableColumn(SpringApp.getBean(CompanyVendorService.class)); + } + + public static Callback, TableCell> forTableColumn( + CompanyVendorService sevice) { + CompanyService companyService = SpringApp.getBean(CompanyService.class); + return param -> new CompanyVendorTableCell(sevice, companyService); + } + + @Setter + private CompanyService companyService; + + public CompanyVendorTableCell(CompanyVendorService service, CompanyService companyService) { + setService(service); + setCompanyService(companyService); + } + + @Override + protected IEntityService getServiceBean() { + return SpringApp.getBean(CompanyVendorService.class); + } + + protected CompanyService getCompanyService() { + if (companyService == null) { + companyService = SpringApp.getBean(CompanyService.class); + } + return companyService; + } + + @Override + protected boolean isInitialized(CompanyVendor proxy) { + if (!super.isInitialized(proxy)) { + return false; + } + Company company = proxy.getCompany(); + if (company != null) { + return Hibernate.isInitialized(company); + } + return true; + } + + @Override + protected CompanyVendor initialize() { + CompanyVendor vendor = super.initialize(); + Company company = vendor.getCompany(); + if (company != null && !Hibernate.isInitialized(company)) { + company = getCompanyService().findById(company.getId()); + vendor.setCompany(company); + } + return vendor; + } + + @Override + public String format(CompanyVendor vendor) { + Company company = vendor.getCompany(); + if (company == null) { + return "#" + vendor.getId() + " -"; + } + return toString(company); + } +} diff --git a/src/main/resources/ui/employee/function.fxml b/src/main/resources/ui/employee/function.fxml index 9f0d69d..cc68a87 100644 --- a/src/main/resources/ui/employee/function.fxml +++ b/src/main/resources/ui/employee/function.fxml @@ -64,7 +64,7 @@