diff --git a/docs/add_function_columns.sql b/docs/add_function_columns.sql new file mode 100644 index 0000000..f5e5f2d --- /dev/null +++ b/docs/add_function_columns.sql @@ -0,0 +1,4 @@ +-- 添加CONTROLLER、ICON和DESCRIPTION字段到FUNC表 +ALTER TABLE supplier_ms.FUNC +ADD COLUMN DESCRIPTION VARCHAR(255); + diff --git a/src/main/java/com/ecep/contract/manager/cloud/rk/CloudRkRepository.java b/src/main/java/com/ecep/contract/manager/cloud/rk/CloudRkRepository.java index 9ab6ce8..6aedc98 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/rk/CloudRkRepository.java +++ b/src/main/java/com/ecep/contract/manager/cloud/rk/CloudRkRepository.java @@ -1,25 +1,19 @@ package com.ecep.contract.manager.cloud.rk; -import com.ecep.contract.manager.ds.company.model.Company; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.PagingAndSortingRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - import java.time.Instant; import java.util.List; import java.util.Optional; import java.util.stream.Stream; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import com.ecep.contract.manager.ds.MyRepository; +import com.ecep.contract.manager.ds.company.model.Company; + @Repository -public interface CloudRkRepository - // curd - extends CrudRepository, PagingAndSortingRepository, - // JPA interfaces - JpaRepository, JpaSpecificationExecutor { +public interface CloudRkRepository extends MyRepository { Stream findByCloudLatestAfter(Instant timestamp); diff --git a/src/main/java/com/ecep/contract/manager/cloud/rk/EntReportParser.java b/src/main/java/com/ecep/contract/manager/cloud/rk/EntReportParser.java index 0caca69..47254e0 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/rk/EntReportParser.java +++ b/src/main/java/com/ecep/contract/manager/cloud/rk/EntReportParser.java @@ -6,7 +6,6 @@ import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.model.CompanyContact; import com.ecep.contract.manager.ds.company.model.CompanyOldName; import com.ecep.contract.manager.ds.company.repository.CompanyContactRepository; -import com.ecep.contract.manager.ds.company.repository.CompanyOldNameRepository; import com.ecep.contract.manager.ds.company.service.CompanyOldNameService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycManagerSkin.java b/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycManagerSkin.java index ea53cf4..e9cec34 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycManagerSkin.java @@ -1,29 +1,30 @@ package com.ecep.contract.manager.cloud.tyc; +import java.util.List; + +import org.hibernate.Hibernate; +import org.springframework.data.domain.Page; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.util.StringUtils; + import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; import com.ecep.contract.manager.ds.company.controller.CompanyWindowController; import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ui.AbstEntityManagerSkin; -import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; + import jakarta.persistence.criteria.Path; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import lombok.Setter; -import org.hibernate.Hibernate; -import org.springframework.data.domain.Page; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.util.StringUtils; - -import java.util.List; public class CloudTycManagerSkin - extends AbstEntityManagerSkin - implements ManagerSkin { + extends + AbstEntityManagerSkin { @Setter private CloudTycService cloudTycService; @@ -58,8 +59,7 @@ public class CloudTycManagerSkin Path company = root.get("company"); return builder.or( builder.like(company.get("name"), "%" + searchText + "%"), - builder.like(company.get("shortName"), "%" + searchText + "%") - ); + builder.like(company.get("shortName"), "%" + searchText + "%")); }; Specification cloudIdSpec = (root, query, builder) -> { diff --git a/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycManagerWindowController.java b/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycManagerWindowController.java index 042f8fa..21220f3 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycManagerWindowController.java @@ -1,40 +1,26 @@ package com.ecep.contract.manager.cloud.tyc; +import java.time.LocalDateTime; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; + +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.SpringApp; import com.ecep.contract.manager.cloud.CloudBaseInfo; import com.ecep.contract.manager.cloud.CloudInfo; -import com.ecep.contract.manager.ds.company.controller.CompanyWindowController; import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ui.AbstManagerWindowController; import com.ecep.contract.manager.ui.FxmlPath; -import com.ecep.contract.manager.ui.ViewModelService; -import com.ecep.contract.manager.ui.util.DelayOnceExecutor; -import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; -import com.ecep.contract.manager.util.TableViewUtils; -import javafx.application.Platform; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; + import javafx.event.ActionEvent; -import javafx.scene.control.*; +import javafx.fxml.FXML; +import javafx.scene.control.TableColumn; import javafx.stage.Stage; -import javafx.stage.WindowEvent; -import org.hibernate.Hibernate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.context.annotation.Scope; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; - -import static com.ecep.contract.manager.util.TableViewUtils.getTableViewVisibleRows; /** * 天眼查信息管理窗口控制器 @@ -56,23 +42,28 @@ public class CloudTycManagerWindowController @Autowired private CompanyService companyService; - + @FXML public TableColumn idColumn; + @FXML public TableColumn latestUpdateColumn; + @FXML public TableColumn companyColumn; + @FXML public TableColumn cloudIdColumn; + @FXML public TableColumn cloudLatestColumn; + @FXML public TableColumn scoreColumn; + @FXML public TableColumn descriptionColumn; - - @Override public CloudTycService getViewModelService() { return cloudTycService; } + @Override protected CloudTycManagerSkin createDefaultSkin() { return new CloudTycManagerSkin(this); @@ -80,7 +71,8 @@ public class CloudTycManagerWindowController @Override public void show(Stage stage) { - super.show(stage);getTitle().set("数据源:天眼查"); + super.show(stage); + getTitle().set("数据源:天眼查"); } /** @@ -88,7 +80,8 @@ public class CloudTycManagerWindowController */ public void onDateTransferAction(ActionEvent event) { CompletableFuture.runAsync(() -> { - com.ecep.contract.manager.cloud.CloudInfoRepository cloudInfoRepository = SpringApp.getBean(com.ecep.contract.manager.cloud.CloudInfoRepository.class); + com.ecep.contract.manager.cloud.CloudInfoRepository cloudInfoRepository = SpringApp + .getBean(com.ecep.contract.manager.cloud.CloudInfoRepository.class); cloudInfoRepository.findAll().forEach(v -> { try { CloudTyc cloudTyc = cloudTycService.getOrCreateCloudTyc(v); diff --git a/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycRepository.java b/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycRepository.java index 76e9d39..8320ed0 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycRepository.java +++ b/src/main/java/com/ecep/contract/manager/cloud/tyc/CloudTycRepository.java @@ -1,23 +1,17 @@ package com.ecep.contract.manager.cloud.tyc; -import com.ecep.contract.manager.ds.company.model.Company; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.PagingAndSortingRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - import java.util.List; import java.util.Optional; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import com.ecep.contract.manager.ds.MyRepository; +import com.ecep.contract.manager.ds.company.model.Company; + @Repository -public interface CloudTycRepository - // curd - extends CrudRepository, PagingAndSortingRepository, - // JPA interfaces - JpaRepository, JpaSpecificationExecutor { +public interface CloudTycRepository extends MyRepository { List findAllByCompanyId(Integer companyId); @@ -27,5 +21,4 @@ public interface CloudTycRepository @Transactional int deleteAllByCompany(Company company); - } diff --git a/src/main/java/com/ecep/contract/manager/cloud/u8/ContractSyncAllTask.java b/src/main/java/com/ecep/contract/manager/cloud/u8/ContractSyncAllTask.java index 5fc396d..f878f08 100644 --- a/src/main/java/com/ecep/contract/manager/cloud/u8/ContractSyncAllTask.java +++ b/src/main/java/com/ecep/contract/manager/cloud/u8/ContractSyncAllTask.java @@ -1,16 +1,14 @@ package com.ecep.contract.manager.cloud.u8; -import com.ecep.contract.manager.ds.contract.model.Contract; -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 java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Stream; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Stream; +import com.ecep.contract.manager.ds.contract.tasker.AbstContractRepairTasker; +import com.ecep.contract.manager.ui.MessageHolder; /** * 用友U8系统-同步全量合同 diff --git a/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyManagerSkin.java b/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyManagerSkin.java index 4c82da0..49f59d8 100644 --- a/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyManagerSkin.java @@ -16,8 +16,7 @@ import java.util.List; import java.util.Optional; public class CompanyManagerSkin - extends AbstEntityManagerSkin - implements ManagerSkin { + extends AbstEntityManagerSkin { @Setter private CompanyOldNameService companyOldNameService; diff --git a/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyManagerWindowController.java index 724a7b4..f6f73ac 100644 --- a/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyManagerWindowController.java @@ -16,6 +16,7 @@ import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.util.UITools; import javafx.event.ActionEvent; +import javafx.fxml.FXML; import javafx.scene.control.TableColumn; import javafx.stage.Stage; @@ -27,11 +28,17 @@ public class CompanyManagerWindowController extends AbstManagerWindowController { // columns + @FXML public TableColumn idColumn; + @FXML public TableColumn nameColumn; + @FXML public TableColumn uniscidColumn; + @FXML public TableColumn entStatusColumn; + @FXML public TableColumn createdColumn; + @FXML public TableColumn memoColumn; @Autowired diff --git a/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyTableCell.java b/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyTableCell.java index 75adb3c..28e3e8f 100644 --- a/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyTableCell.java +++ b/src/main/java/com/ecep/contract/manager/ds/company/controller/CompanyTableCell.java @@ -1,17 +1,22 @@ package com.ecep.contract.manager.ds.company.controller; -import com.ecep.contract.manager.ds.company.model.Company; -import com.ecep.contract.manager.ds.company.service.CompanyService; -import org.hibernate.Hibernate; - import static com.ecep.contract.manager.SpringApp.getBean; -public class CompanyTableCell extends javafx.scene.control.TableCell { +import java.util.concurrent.Future; +import org.hibernate.Hibernate; + +import com.ecep.contract.manager.Desktop; +import com.ecep.contract.manager.ds.company.model.Company; +import com.ecep.contract.manager.ds.company.service.CompanyService; + +import javafx.application.Platform; + +public class CompanyTableCell + extends javafx.scene.control.TableCell { private CompanyService companyService; - public CompanyTableCell() { } @@ -33,9 +38,27 @@ public class CompanyTableCell extends javafx.scene.control.TableCell submit(Runnable var1){ + return Desktop.instance.getExecutorService().submit(var1); + } + + private String formart(Company company) { + return company.getName(); + } + + private void asyncLoadAndUpdate() { + Company company = getCompanyService().findById(getItem().getId()); + Platform.runLater(() -> { + setText(formart(company)); + setItem(company); + }); } } diff --git a/src/main/java/com/ecep/contract/manager/ds/company/model/Company.java b/src/main/java/com/ecep/contract/manager/ds/company/model/Company.java index 954b21a..046bf7a 100644 --- a/src/main/java/com/ecep/contract/manager/ds/company/model/Company.java +++ b/src/main/java/com/ecep/contract/manager/ds/company/model/Company.java @@ -1,18 +1,25 @@ package com.ecep.contract.manager.ds.company.model; - -import com.ecep.contract.manager.ds.other.model.IdentityEntity; -import com.ecep.contract.manager.ds.other.model.NamedEntity; -import jakarta.persistence.*; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; -import org.hibernate.annotations.ColumnDefault; -import org.hibernate.proxy.HibernateProxy; - import java.time.LocalDate; import java.util.Objects; +import org.hibernate.annotations.ColumnDefault; +import org.hibernate.proxy.HibernateProxy; + +import com.ecep.contract.manager.ds.other.model.IdentityEntity; +import com.ecep.contract.manager.ds.other.model.NamedEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + /** * 公司信息类,保存企业信息 */ @@ -21,7 +28,7 @@ import java.util.Objects; @Entity @Table(name = "COMPANY") @ToString -public class Company implements IdentityEntity, NamedEntity, com.ecep.contract.manager.ds.other.model.Entity { +public class Company implements IdentityEntity, NamedEntity, com.ecep.contract.manager.ds.other.model.Entity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -32,21 +39,22 @@ public class Company implements IdentityEntity, NamedEntity, com.ecep.contract. */ private String name; - /** * 统一社会信用代码 *

* 编码结构 + * *

-     *      1       |     1    |         6        |    9   |  1  
- * 登记管理部门代码|机构类别代码|登记管理机关行政区划码|主体标识码|校验码 + * 1 | 1 | 6 | 9 | 1 < br > 登记管理部门代码 | 机构类别代码 | 登记管理机关行政区划码 | 主体标识码 | 校验码 *
*
    *
  • 登记管理部门代码(第 1 位):
    * 例如,9 代表工商部门登记的企业等。
  • *
  • 机构类别代码(第 2 位):不同的数字表示不同类型的机构。如 1 表示企业,2 表示个体工商户等。
  • - *
  • 登记管理机关行政区划码(第 3 - 8 位):这 6 位数字代表了登记管理机关所在的行政区划,与身份证号码的前 6 位类似,可对应到具体的地区。
  • - *
  • 主体标识码(组织机构代码,第 9 - 17 位):它是对中华人民共和国境内依法注册、依法登记的机关、企事业单位、社会团体和民办非企业单位等机构颁发的一个在全国范围内唯一的、始终不变的代码。
  • + *
  • 登记管理机关行政区划码(第 3 - 8 位):这 6 位数字代表了登记管理机关所在的行政区划,与身份证号码的前 6 + * 位类似,可对应到具体的地区。
  • + *
  • 主体标识码(组织机构代码,第 9 - 17 + * 位):它是对中华人民共和国境内依法注册、依法登记的机关、企事业单位、社会团体和民办非企业单位等机构颁发的一个在全国范围内唯一的、始终不变的代码。
  • *
*

*/ @@ -176,19 +184,27 @@ public class Company implements IdentityEntity, NamedEntity, com.ecep.contract. @Override public final boolean equals(Object object) { - if (this == object) return true; - if (object == null) return false; - Class oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass(); - Class thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass(); - if (thisEffectiveClass != oEffectiveClass) return false; + if (this == object) + return true; + if (object == null) + return false; + Class oEffectiveClass = object instanceof HibernateProxy + ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() + : object.getClass(); + Class thisEffectiveClass = this instanceof HibernateProxy + ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() + : this.getClass(); + if (thisEffectiveClass != oEffectiveClass) + return false; Company company = (Company) object; return getId() != null && Objects.equals(getId(), company.getId()); } @Override public final int hashCode() { - return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode(); + return this instanceof HibernateProxy + ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() + : getClass().hashCode(); } - } diff --git a/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractManagerSkin.java b/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractManagerSkin.java index 0089006..4a7b0b7 100644 --- a/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractManagerSkin.java @@ -1,6 +1,11 @@ package com.ecep.contract.manager.ds.contract.controller; +import java.time.format.DateTimeFormatter; + +import org.springframework.data.jpa.domain.Specification; + import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; +import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.contract.ContractPayWay; import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.ContractGroup; @@ -12,31 +17,33 @@ import com.ecep.contract.manager.ui.ComboBoxUtils; import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.util.MyDateTimeUtils; import com.ecep.contract.manager.util.SpecificationUtils; + import jakarta.persistence.criteria.Path; import javafx.application.Platform; import javafx.scene.control.cell.TextFieldTableCell; import javafx.util.converter.CurrencyStringConverter; import javafx.util.converter.LocalDateTimeStringConverter; import lombok.Setter; -import org.springframework.data.jpa.domain.Specification; - -import java.time.format.DateTimeFormatter; public class ContractManagerSkin extends AbstEntityManagerSkin implements ManagerSkin { @Setter - private ContractService contractService; + private CompanyService companyService; public ContractManagerSkin(ContractManagerWindowController controller) { super(controller); } public ContractService getContractService() { - if (contractService == null) { - contractService = getBean(ContractService.class); + return controller.getViewModelService(); + } + + public CompanyService getCompanyService() { + if (companyService == null) { + companyService = getBean(CompanyService.class); } - return contractService; + return companyService; } @Override @@ -52,10 +59,7 @@ public class ContractManagerSkin builder.equal(payWay, ContractPayWay.PAY), builder.or( builder.equal(parentCode, ""), - parentCode.isNull() - ) - ) - ); + parentCode.isNull()))); }); } @@ -71,7 +75,7 @@ public class ContractManagerSkin @SuppressWarnings("unchecked") @Override public void initializeTable() { - ComboBoxUtils.initialComboBox(controller.groupSelector, contractService.findAllGroups(), true); + ComboBoxUtils.initialComboBox(controller.groupSelector, getContractService().findAllGroups(), true); controller.groupSelector.valueProperty().addListener((observable, oldValue, newValue) -> { loadTableDataSet(false); }); @@ -80,32 +84,33 @@ public class ContractManagerSkin controller.nameColumn.setCellValueFactory(param -> param.getValue().getName()); controller.codeColumn.setCellValueFactory(param -> param.getValue().getCode()); controller.groupColumn.setCellValueFactory(param -> param.getValue().getGroup()); - controller.groupColumn.setCellFactory(param -> new ContractGroupTableCell(contractService)); + controller.groupColumn.setCellFactory(param -> new ContractGroupTableCell(getContractService())); controller.typeColumn.setCellValueFactory(param -> param.getValue().getType()); - controller.typeColumn.setCellFactory(param -> new ContractTypeTableCell(contractService)); + controller.typeColumn.setCellFactory(param -> new ContractTypeTableCell(getContractService())); controller.kindColumn.setCellValueFactory(param -> param.getValue().getKind()); - controller.kindColumn.setCellFactory(param -> new ContractKindTableCell(contractService)); + controller.kindColumn.setCellFactory(param -> new ContractKindTableCell(getContractService())); controller.parentCodeColumn.setCellValueFactory(param -> param.getValue().getParentCode()); - controller.setupDateColumn.setCellValueFactory(param -> param.getValue().getSetupDate()); controller.orderDateColumn.setCellValueFactory(param -> param.getValue().getOrderDate()); controller.startDateColumn.setCellValueFactory(param -> param.getValue().getStartDate()); - controller.employeeColumn.setCellValueFactory(param -> param.getValue().getEmployee()); - controller.employeeColumn.setCellFactory(TextFieldTableCell.forTableColumn(getBean(EmployeeStringConverter.class))); + controller.employeeColumn + .setCellFactory(TextFieldTableCell.forTableColumn(getBean(EmployeeStringConverter.class))); controller.createdColumn.setCellValueFactory(param -> param.getValue().getCreated()); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(MyDateTimeUtils.DEFAULT_DATETIME_FORMAT_PATTERN); - controller.createdColumn.setCellFactory(TextFieldTableCell.forTableColumn(new LocalDateTimeStringConverter(formatter, null))); + controller.createdColumn + .setCellFactory(TextFieldTableCell.forTableColumn(new LocalDateTimeStringConverter(formatter, null))); controller.amountColumn.setCellValueFactory(param -> param.getValue().getAmount()); - controller.amountColumn.setCellFactory(TextFieldTableCell.forTableColumn(new CurrencyStringConverter(getLocale(), "#,##0"))); + controller.amountColumn + .setCellFactory(TextFieldTableCell.forTableColumn(new CurrencyStringConverter(getLocale(), "#,##0"))); controller.companyColumn.setCellValueFactory(param -> param.getValue().getCompany()); - controller.companyColumn.setCellFactory(param -> new CompanyTableCell<>()); + controller.companyColumn.setCellFactory(param -> new CompanyTableCell<>(getCompanyService())); Platform.runLater(() -> { controller.composeViewBtn.selectedProperty().addListener((observable, oldValue, newValue) -> { diff --git a/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractManagerWindowController.java index ac09bea..8cdec04 100644 --- a/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractManagerWindowController.java @@ -66,7 +66,6 @@ public class ContractManagerWindowController @Override protected ContractManagerSkin createDefaultSkin() { ContractManagerSkin skin = new ContractManagerSkin(this); - skin.setContractService(contractService); return skin; } diff --git a/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractTabSkinExtendVendorInfo.java b/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractTabSkinExtendVendorInfo.java index f2e9d77..adb31de 100644 --- a/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractTabSkinExtendVendorInfo.java +++ b/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractTabSkinExtendVendorInfo.java @@ -1,5 +1,10 @@ package com.ecep.contract.manager.ds.contract.controller; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +import org.hibernate.Hibernate; + import com.ecep.contract.manager.SpringApp; import com.ecep.contract.manager.ds.contract.model.Contract; import com.ecep.contract.manager.ds.contract.model.ExtendVendorInfo; @@ -9,34 +14,38 @@ import com.ecep.contract.manager.ds.vendor.model.VendorGroup; import com.ecep.contract.manager.ds.vendor.service.VendorGroupService; import com.ecep.contract.manager.ui.ComboBoxUtils; import com.ecep.contract.manager.ui.FxmlPath; -import com.ecep.contract.manager.ui.TabSkin; import com.ecep.contract.manager.util.UITools; + import javafx.application.Platform; import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; -import javafx.scene.control.*; +import javafx.fxml.FXML; +import javafx.scene.control.CheckBox; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Label; +import javafx.scene.control.Tab; +import javafx.scene.control.TextField; import javafx.util.converter.NumberStringConverter; import lombok.Setter; -import org.hibernate.Hibernate; - -import java.util.List; -import java.util.concurrent.CompletableFuture; @FxmlPath("/ui/contract/contract-tab-ext-vendor-info.fxml") public class ContractTabSkinExtendVendorInfo - extends AbstContractBasedTabSkin - implements TabSkin { - + extends AbstContractBasedTabSkin { @Setter private ExtendVendorInfoService extendVendorInfoService; @Setter private VendorGroupService vendorGroupService; + @FXML public ComboBox vendorGroupField; + @FXML public Label vendorGroupLabel; + @FXML public TextField sequenceNumberField; + @FXML public CheckBox assignedProviderField; + @FXML public CheckBox prePurchaseField; CompletableFuture loadedFuture; @@ -114,8 +123,8 @@ public class ContractTabSkinExtendVendorInfo return v.getDescription(); })); - - sequenceNumberField.textProperty().bindBidirectional(viewModel.getCodeSequenceNumber(), new NumberStringConverter()); + sequenceNumberField.textProperty().bindBidirectional(viewModel.getCodeSequenceNumber(), + new NumberStringConverter()); assignedProviderField.selectedProperty().bindBidirectional(viewModel.getAssignedProvider()); assignedProviderField.disableProperty().bind(Bindings.createBooleanBinding(() -> { VendorGroup group = viewModel.getGroup().get(); @@ -128,7 +137,6 @@ public class ContractTabSkinExtendVendorInfo prePurchaseField.selectedProperty().bindBidirectional(viewModel.getPrePurchase()); } - @Override public void save() { if (loadedFuture != null) { diff --git a/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractVerifyWindowController.java b/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractVerifyWindowController.java index 0ce5ec2..4061339 100644 --- a/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractVerifyWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/contract/controller/ContractVerifyWindowController.java @@ -23,6 +23,7 @@ import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXMLLoader; +import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.layout.HBox; import javafx.stage.*; @@ -177,29 +178,46 @@ public class ContractVerifyWindowController extends BaseController { @Autowired private EmployeeService employeeService; + @FXML public DatePicker setupDateBeginSelector; + @FXML public DatePicker setupDateEndSelector; // 企业验证开关 + @FXML public CheckMenuItem verifyCompanyStatusChecker; + @FXML public CheckMenuItem verifyCompanyPathChecker; + @FXML public CheckMenuItem verifyCompanyCreditChecker; // 供应商验证开关 + @FXML public CheckMenuItem verifyVendorChecker; + @FXML public CheckMenuItem verifyVendorFileChecker; // 客户验证开关 + @FXML public CheckMenuItem verifyCustomerChecker; + @FXML public CheckMenuItem verifyCustomerFileChecker; + @FXML public CheckMenuItem verifyCustomerSubContractDateChecker; + @FXML public CheckMenuItem onlyShowVerifiedChecker; + @FXML public TableView viewTable; private final ObservableList viewTableDataSet = FXCollections.observableArrayList(); + @FXML public TableColumn viewTable_codeColumn; + @FXML public TableColumn viewTable_nameColumn; + @FXML public TableColumn viewTable_employeeColumn; + @FXML public TableColumn viewTable_setupDateColumn; + @FXML public TableColumn> viewTable_stateColumn; @Override diff --git a/src/main/java/com/ecep/contract/manager/ds/customer/controller/CompanyCustomerManagerSkin.java b/src/main/java/com/ecep/contract/manager/ds/customer/controller/CompanyCustomerManagerSkin.java index 8c7bef7..a7d6309 100644 --- a/src/main/java/com/ecep/contract/manager/ds/customer/controller/CompanyCustomerManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/customer/controller/CompanyCustomerManagerSkin.java @@ -1,5 +1,8 @@ package com.ecep.contract.manager.ds.customer.controller; +import org.hibernate.Hibernate; + +import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.customer.model.CompanyCustomer; @@ -8,22 +11,14 @@ import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel; import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.util.MyDateTimeUtils; -import com.ecep.contract.manager.util.MyStringUtils; -import com.ecep.contract.manager.util.TableViewUtils; + import javafx.application.Platform; import javafx.beans.binding.Bindings; import lombok.Setter; -import org.hibernate.Hibernate; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.util.StringUtils; - -import java.util.List; public class CompanyCustomerManagerSkin - extends AbstEntityManagerSkin - implements ManagerSkin { + extends + AbstEntityManagerSkin { @Setter private CompanyService companyService; @@ -46,18 +41,14 @@ public class CompanyCustomerManagerSkin @Override public void initializeTable() { controller.idColumn.setCellValueFactory(param -> param.getValue().getId()); - controller.companyColumn.setCellValueFactory(param -> Bindings.createStringBinding(() -> { - Company company = param.getValue().getCompany().get(); - if (company != null && !Hibernate.isInitialized(company)) { - company = companyService.findById(company.getId()); - } - return company == null ? "-" : company.getName(); - }, param.getValue().getCompany())); + controller.companyColumn.setCellValueFactory(param -> param.getValue().getCompany()); + controller.companyColumn.setCellFactory(param-> new CompanyTableCell<>(getCompanyService())); controller.developDateColumn.setCellValueFactory(param -> param.getValue().getDevelopDate()); controller.pathColumn.setCellValueFactory(param -> param.getValue().getPath()); - controller.createdColumn.setCellValueFactory(param -> param.getValue().getCreated().map(MyDateTimeUtils::format)); + controller.createdColumn + .setCellValueFactory(param -> param.getValue().getCreated().map(MyDateTimeUtils::format)); Platform.runLater(() -> { getTableView().getSortOrder().add(controller.idColumn); }); diff --git a/src/main/java/com/ecep/contract/manager/ds/customer/controller/CompanyCustomerManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/customer/controller/CompanyCustomerManagerWindowController.java index 2390c06..a5a4606 100644 --- a/src/main/java/com/ecep/contract/manager/ds/customer/controller/CompanyCustomerManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/customer/controller/CompanyCustomerManagerWindowController.java @@ -1,25 +1,10 @@ package com.ecep.contract.manager.ds.customer.controller; -import com.ecep.contract.manager.ds.company.model.Company; -import com.ecep.contract.manager.ds.company.service.CompanyService; -import com.ecep.contract.manager.ds.customer.model.CompanyCustomer; -import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService; -import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel; -import com.ecep.contract.manager.ui.AbstManagerWindowController; -import com.ecep.contract.manager.ui.FxmlPath; -import com.ecep.contract.manager.ui.ViewModelService; -import com.ecep.contract.manager.util.MyDateTimeUtils; -import com.ecep.contract.manager.util.UITools; -import javafx.application.Platform; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.event.ActionEvent; -import javafx.geometry.Insets; -import javafx.scene.control.*; -import javafx.scene.layout.Priority; -import javafx.scene.layout.VBox; -import javafx.stage.FileChooser; -import javafx.stage.Stage; +import java.io.File; +import java.time.LocalDate; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicBoolean; + import org.hibernate.Hibernate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -29,10 +14,31 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; -import java.io.File; -import java.time.LocalDate; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicBoolean; +import com.ecep.contract.manager.ds.company.model.Company; +import com.ecep.contract.manager.ds.company.service.CompanyService; +import com.ecep.contract.manager.ds.customer.model.CompanyCustomer; +import com.ecep.contract.manager.ds.customer.service.CompanyCustomerService; +import com.ecep.contract.manager.ds.customer.vo.CompanyCustomerViewModel; +import com.ecep.contract.manager.ui.AbstManagerWindowController; +import com.ecep.contract.manager.ui.FxmlPath; +import com.ecep.contract.manager.util.MyDateTimeUtils; +import com.ecep.contract.manager.util.UITools; + +import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.geometry.Insets; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Dialog; +import javafx.scene.control.Label; +import javafx.scene.control.ListView; +import javafx.scene.control.ProgressBar; +import javafx.scene.control.TableColumn; +import javafx.scene.layout.Priority; +import javafx.scene.layout.VBox; +import javafx.stage.FileChooser; +import javafx.stage.Stage; @Lazy @Scope("prototype") @@ -43,7 +49,7 @@ public class CompanyCustomerManagerWindowController // columns public TableColumn idColumn; - public TableColumn companyColumn; + public TableColumn companyColumn; public TableColumn catalogColumn; public TableColumn developDateColumn; public TableColumn pathColumn; @@ -72,7 +78,6 @@ public class CompanyCustomerManagerWindowController return skin; } - /** * 对所有客户的文件进行重置 *

@@ -108,7 +113,6 @@ public class CompanyCustomerManagerWindowController dialog.initOwner(table.getScene().getWindow()); dialog.show(); - CompletableFuture.runAsync(() -> { Pageable pageRequest = PageRequest.ofSize(50); while (!canceled.get()) { @@ -166,5 +170,4 @@ public class CompanyCustomerManagerWindowController UITools.showTaskDialogAndWait("导出Excel", tasker, null); } - } diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/HomeWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/HomeWindowController.java index 9497f0b..a83a1ac 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/HomeWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/HomeWindowController.java @@ -32,7 +32,7 @@ import com.ecep.contract.manager.ds.other.controller.department.DepartmentManage import com.ecep.contract.manager.ds.other.controller.employee.EmployeeManagerWindowController; import com.ecep.contract.manager.ds.other.controller.inventory.InventoryManagerWindowController; import com.ecep.contract.manager.ds.other.controller.permission.EmployeeFunctionsManagerWindowController; -import com.ecep.contract.manager.ds.other.controller.permission.EmployeeRolesManagerWindowController; +import com.ecep.contract.manager.ds.other.controller.permission.EmployeeRoleManagerWindowController; import com.ecep.contract.manager.ds.project.controller.ProjectManagerWindowController; import com.ecep.contract.manager.ds.vendor.controller.CompanyVendorManagerWindowController; import com.ecep.contract.manager.ui.BaseController; @@ -198,7 +198,7 @@ public class HomeWindowController extends BaseController { } public void onShowRolesManagerWindowAction(ActionEvent event) { - showInOwner(EmployeeRolesManagerWindowController.class); + showInOwner(EmployeeRoleManagerWindowController.class); } public void onShowFunctionManagerWindowAction(ActionEvent event) { diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/employee/EmployeeManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/employee/EmployeeManagerWindowController.java index 72d6cc9..03c1105 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/employee/EmployeeManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/employee/EmployeeManagerWindowController.java @@ -11,6 +11,7 @@ import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.util.UITools; import javafx.concurrent.Task; import javafx.event.ActionEvent; +import javafx.fxml.FXML; import javafx.scene.control.CheckBox; import javafx.scene.control.TableColumn; import javafx.stage.Stage; @@ -27,17 +28,29 @@ import java.time.LocalDate; public class EmployeeManagerWindowController extends AbstManagerWindowController { + @FXML public TableColumn idColumn; + @FXML public TableColumn accountColumn; + @FXML public TableColumn departmentColumn; + @FXML public TableColumn nameColumn; + @FXML public TableColumn aliasColumn; + @FXML public TableColumn codeColumn; + @FXML public TableColumn emailColumn; + @FXML public TableColumn createdColumn; + @FXML public TableColumn entryDateColumn; + @FXML public TableColumn leaveDateColumn; + @FXML public TableColumn activeColumn; + @FXML public CheckBox activeCheckBox; @Override diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/employee/EmployeeTabSkinAuthBind.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/employee/EmployeeTabSkinAuthBind.java index 22912e3..a488a75 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/employee/EmployeeTabSkinAuthBind.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/employee/EmployeeTabSkinAuthBind.java @@ -19,8 +19,7 @@ import java.util.List; @FxmlPath("/ui/employee/employee-auth-bind.fxml") public class EmployeeTabSkinAuthBind - extends AbstEmployeeTableTabSkin - implements EditableEntityTableTabSkin { + extends AbstEmployeeTableTabSkin { public TableColumn idColumn; public TableColumn ipColumn; public TableColumn macColumn; diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventoryManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventoryManagerWindowController.java index 51c8295..c64d26e 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventoryManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventoryManagerWindowController.java @@ -17,6 +17,7 @@ import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.util.UITools; import javafx.event.ActionEvent; +import javafx.fxml.FXML; import javafx.scene.control.TableColumn; import javafx.stage.Stage; @@ -27,18 +28,31 @@ import javafx.stage.Stage; public class InventoryManagerWindowController extends AbstManagerWindowController { + @FXML public TableColumn idColumn; + @FXML public TableColumn nameColumn; + @FXML public TableColumn codeColumn; + @FXML public TableColumn catalogColumn; + @FXML public TableColumn specificationColumn; + @FXML public TableColumn unitColumn; + @FXML public TableColumn purchaseTaxRateColumn; + @FXML public TableColumn purchasePriceColumn; + @FXML public TableColumn saleTaxRateColumn; + @FXML public TableColumn salePriceColumn; + @FXML public TableColumn createTimeColumn; + @FXML public TableColumn updateDateColumn; + @FXML public TableColumn descriptionColumn; @Autowired diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventoryWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventoryWindowController.java index 18f11c4..bcb9dd5 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventoryWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/inventory/InventoryWindowController.java @@ -6,6 +6,7 @@ import com.ecep.contract.manager.ds.other.vo.InventoryViewModel; import com.ecep.contract.manager.ui.AbstEntityController; import com.ecep.contract.manager.ui.FxmlPath; import javafx.beans.binding.Bindings; +import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.layout.BorderPane; import javafx.stage.WindowEvent; @@ -19,44 +20,81 @@ import org.springframework.stereotype.Component; @Component @FxmlPath("/ui/inventory/inventory.fxml") public class InventoryWindowController extends AbstEntityController { + @FXML public BorderPane root; + @FXML public TabPane tabPane; + @FXML public Tab baseInfoTab; + @FXML public Tab historyPriceTab; + @FXML public Tab contractsTab; + @FXML public TextField nameField; + @FXML public CheckBox nameLockField; + @FXML public TextField catalogField; + @FXML public TextField unitField; + @FXML public TextField codeField; + @FXML public TextField specificationField; + @FXML public CheckBox specificationLockField; + @FXML public TextField purchasePriceField; + @FXML public TextField purchaseTaxRateField; + @FXML public TextField purchaseTaxPriceField; + @FXML public TextField creatorField; + @FXML public TextField createTimeField; + @FXML public TextField updaterField; + @FXML public TextField updateDateField; + @FXML public TextField saleTaxRateField; + @FXML public TextField salePriceField; + @FXML public TextField saleTaxPriceField; + @FXML public TextArea descriptionField; + @FXML public Button syncBtn; + @FXML public TextField weightUnitField; + @FXML public TextField sizeUnitField; + @FXML public TextField volumeUnitField; + @FXML public TextField weightField; + @FXML public TextField packagedWeightField; + @FXML public TextField sizeLengthField; + @FXML public TextField sizeWidthField; + @FXML public TextField sizeHeightField; + @FXML public TextField volumeField; + @FXML public TextField packagedSizeLengthField; + @FXML public TextField packagedSizeWidthField; + @FXML public TextField packagedSizeHeightField; + @FXML public TextField packagedVolumeField; diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/AbstEmployeeRoleBasedTabSkin.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/AbstEmployeeRoleBasedTabSkin.java index 731581b..caedc3c 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/AbstEmployeeRoleBasedTabSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/AbstEmployeeRoleBasedTabSkin.java @@ -6,11 +6,9 @@ import com.ecep.contract.manager.ds.other.service.FunctionService; import com.ecep.contract.manager.ds.other.service.PermissionService; import com.ecep.contract.manager.ds.other.vo.EmployeeRoleViewModel; import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; -import com.ecep.contract.manager.ui.TabSkin; public abstract class AbstEmployeeRoleBasedTabSkin - extends AbstEntityBasedTabSkin - implements TabSkin { + extends AbstEntityBasedTabSkin { private EmployeeRoleService roleService; private FunctionService functionService; @@ -38,5 +36,4 @@ public abstract class AbstEmployeeRoleBasedTabSkin return controller.permissionService; } - } diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeFunctionsManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeFunctionsManagerWindowController.java index 02eb47c..ba59fcb 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeFunctionsManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeFunctionsManagerWindowController.java @@ -9,6 +9,7 @@ import com.ecep.contract.manager.ui.AbstManagerWindowController; import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.ui.ViewModelService; import javafx.event.ActionEvent; +import javafx.fxml.FXML; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.stage.Stage; @@ -32,16 +33,18 @@ public class EmployeeFunctionsManagerWindowController @Autowired FunctionService functionService; + @FXML public TableColumn idColumn; + @FXML public TableColumn nameColumn; + @FXML public TableColumn keyColumn; - - - public TableView permissionTable; - public TableColumn permissionTable_idColumn; - public TableColumn permissionTable_nameColumn; - public TableColumn permissionTable_keyColumn; - public TableColumn permissionTable_descriptionColumn; + @FXML + public TableColumn controllerColumn; + @FXML + public TableColumn iconColumn; + @FXML + public TableColumn descriptionColumn; @Override public void show(Stage stage) { diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleManagerSkin.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleManagerSkin.java index ff69310..7dc2f7c 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleManagerSkin.java @@ -11,13 +11,13 @@ import lombok.Setter; import org.springframework.data.jpa.domain.Specification; public class EmployeeRoleManagerSkin - extends AbstEntityManagerSkin + extends AbstEntityManagerSkin implements ManagerSkin, EditableEntityTableTabSkin { @Setter private PermissionService permissionService; - public EmployeeRoleManagerSkin(EmployeeRolesManagerWindowController controller) { + public EmployeeRoleManagerSkin(EmployeeRoleManagerWindowController controller) { super(controller); } diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRolesManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleManagerWindowController.java similarity index 90% rename from src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRolesManagerWindowController.java rename to src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleManagerWindowController.java index 37ec708..3f513cb 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRolesManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleManagerWindowController.java @@ -1,16 +1,5 @@ package com.ecep.contract.manager.ds.other.controller.permission; -import com.ecep.contract.manager.ds.other.model.EmployeeRole; -import com.ecep.contract.manager.ds.other.service.EmployeeRoleService; -import com.ecep.contract.manager.ds.other.service.PermissionService; -import com.ecep.contract.manager.ds.other.vo.EmployeeRoleViewModel; -import com.ecep.contract.manager.ui.AbstEntityBasedController; -import com.ecep.contract.manager.ui.AbstManagerWindowController; -import com.ecep.contract.manager.ui.FxmlPath; -import com.ecep.contract.manager.ui.ViewModelService; -import javafx.event.ActionEvent; -import javafx.scene.control.TableColumn; -import javafx.stage.Stage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -18,21 +7,30 @@ import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import com.ecep.contract.manager.ds.other.model.EmployeeRole; +import com.ecep.contract.manager.ds.other.service.EmployeeRoleService; +import com.ecep.contract.manager.ds.other.service.PermissionService; +import com.ecep.contract.manager.ds.other.vo.EmployeeRoleViewModel; +import com.ecep.contract.manager.ui.AbstManagerWindowController; +import com.ecep.contract.manager.ui.FxmlPath; + +import javafx.event.ActionEvent; +import javafx.scene.control.TableColumn; +import javafx.stage.Stage; + @Lazy @Scope("prototype") @Component @FxmlPath("/ui/employee/roles-manager.fxml") -public class EmployeeRolesManagerWindowController +public class EmployeeRoleManagerWindowController extends AbstManagerWindowController { - private static final Logger logger = LoggerFactory.getLogger(EmployeeRolesManagerWindowController.class); - + private static final Logger logger = LoggerFactory.getLogger(EmployeeRoleManagerWindowController.class); @Autowired private PermissionService permissionService; @Autowired EmployeeRoleService employeeRoleService; - public TableColumn idColumn; public TableColumn codeColumn; public TableColumn nameColumn; diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleFunctionsTabSkin.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleTabSkinFunctions.java similarity index 94% rename from src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleFunctionsTabSkin.java rename to src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleTabSkinFunctions.java index dd2f163..40fa63b 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleFunctionsTabSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleTabSkinFunctions.java @@ -1,8 +1,14 @@ package com.ecep.contract.manager.ds.other.controller.permission; +import java.util.List; + +import org.controlsfx.control.ListSelectionView; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; + import com.ecep.contract.manager.ds.other.model.EmployeeRole; import com.ecep.contract.manager.ds.other.model.Function; -import com.ecep.contract.manager.ui.TabSkin; + import javafx.beans.property.SimpleBooleanProperty; import javafx.collections.ListChangeListener; import javafx.event.ActionEvent; @@ -10,18 +16,13 @@ import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.ListCell; import javafx.scene.control.Tab; -import org.controlsfx.control.ListSelectionView; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.domain.Specification; -import java.util.List; - -public class EmployeeRoleFunctionsTabSkin extends AbstEmployeeRoleBasedTabSkin implements TabSkin { +public class EmployeeRoleTabSkinFunctions extends AbstEmployeeRoleBasedTabSkin { private final SimpleBooleanProperty changed = new SimpleBooleanProperty(false); private ListSelectionView functionsField; - public EmployeeRoleFunctionsTabSkin(EmployeeRoleWindowController controller) { + public EmployeeRoleTabSkinFunctions(EmployeeRoleWindowController controller) { super(controller); } diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleWindowController.java index d344523..62e2bed 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/EmployeeRoleWindowController.java @@ -83,7 +83,7 @@ public class EmployeeRoleWindowController extends AbstEntityController new EmployeeRoleTabSkinBase(this)); - registerTabSkin(functionsTab, tab -> new EmployeeRoleFunctionsTabSkin(this)); + registerTabSkin(functionsTab, tab -> new EmployeeRoleTabSkinFunctions(this)); } @Override diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionManagerSkin.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionManagerSkin.java index e078159..2310e86 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionManagerSkin.java @@ -3,26 +3,15 @@ package com.ecep.contract.manager.ds.other.controller.permission; import com.ecep.contract.manager.ds.other.model.Function; import com.ecep.contract.manager.ds.other.service.FunctionService; import com.ecep.contract.manager.ds.other.service.PermissionService; -import com.ecep.contract.manager.ds.other.vo.BaseViewModel; import com.ecep.contract.manager.ds.other.vo.FunctionViewModel; import com.ecep.contract.manager.ui.AbstEntityManagerSkin; -import com.ecep.contract.manager.ui.EditableEntityTableTabSkin; -import com.ecep.contract.manager.ui.ManagerSkin; -import com.ecep.contract.manager.util.TableViewUtils; + import javafx.scene.control.TableColumn; import javafx.scene.control.cell.TextFieldTableCell; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.util.StringUtils; - -import java.util.List; public class FunctionManagerSkin - extends AbstEntityManagerSkin - implements ManagerSkin, EditableEntityTableTabSkin { - - private PermissionManagerSkin permissionManagerSkin; + extends + AbstEntityManagerSkin { public FunctionManagerSkin(EmployeeFunctionsManagerWindowController controller) { super(controller); @@ -30,16 +19,6 @@ public class FunctionManagerSkin @Override public void initializeTable() { - initializeFunctionTable(); - if (permissionManagerSkin == null) { - permissionManagerSkin = new PermissionManagerSkin(controller); - } - permissionManagerSkin.install(); - - } - - private void initializeFunctionTable() { - getTableView().setEditable(true); controller.idColumn.setCellValueFactory(param -> param.getValue().getId()); controller.nameColumn.setCellValueFactory(param -> param.getValue().getName()); @@ -50,10 +29,17 @@ public class FunctionManagerSkin controller.keyColumn.setCellFactory(TextFieldTableCell.forTableColumn()); controller.keyColumn.setOnEditCommit(this::onKeyColumnEditCommit); - getTableView().getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { - permissionManagerSkin.setViewModel(newValue); - permissionManagerSkin.loadTableDataSet(); - }); + controller.controllerColumn.setCellValueFactory(param -> param.getValue().getController()); + controller.controllerColumn.setCellFactory(TextFieldTableCell.forTableColumn()); + controller.controllerColumn.setOnEditCommit(this::onControllerColumnEditCommit); + + controller.iconColumn.setCellValueFactory(param -> param.getValue().getIcon()); + controller.iconColumn.setCellFactory(TextFieldTableCell.forTableColumn()); + controller.iconColumn.setOnEditCommit(this::onIconColumnEditCommit); + + controller.descriptionColumn.setCellValueFactory(param -> param.getValue().getDescription()); + controller.descriptionColumn.setCellFactory(TextFieldTableCell.forTableColumn()); + controller.descriptionColumn.setOnEditCommit(this::onDescriptionColumnEditCommit); } private void onNameColumnEditCommit(TableColumn.CellEditEvent event) { @@ -64,12 +50,21 @@ public class FunctionManagerSkin acceptCellEditEvent(event, FunctionViewModel::getKey); } + private void onControllerColumnEditCommit(TableColumn.CellEditEvent event) { + acceptCellEditEvent(event, FunctionViewModel::getController); + } + + private void onIconColumnEditCommit(TableColumn.CellEditEvent event) { + acceptCellEditEvent(event, FunctionViewModel::getIcon); + } + + private void onDescriptionColumnEditCommit(TableColumn.CellEditEvent event) { + acceptCellEditEvent(event, FunctionViewModel::getDescription); + } + @Override - public void dispose() { - if (permissionManagerSkin != null) { - permissionManagerSkin.dispose(); - } - super.dispose(); + protected void onTableRowDoubleClickedAction(FunctionViewModel item) { + showInOwner(FunctionWindowController.class, item); } protected PermissionService getPermissionService() { @@ -80,5 +75,4 @@ public class FunctionManagerSkin return controller.getViewModelService(); } - } diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionTabSkinBase.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionTabSkinBase.java new file mode 100644 index 0000000..4b791d3 --- /dev/null +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionTabSkinBase.java @@ -0,0 +1,30 @@ +package com.ecep.contract.manager.ds.other.controller.permission; + +import com.ecep.contract.manager.ds.other.model.Function; +import com.ecep.contract.manager.ds.other.vo.FunctionViewModel; +import com.ecep.contract.manager.ui.AbstEntityBasedTabSkin; + +import javafx.scene.control.Tab; + +public class FunctionTabSkinBase + extends AbstEntityBasedTabSkin { + + public FunctionTabSkinBase(FunctionWindowController controller) { + super(controller); + } + + @Override + public Tab getTab() { + return controller.baseInfoTab; + } + + @Override + public void initializeTab() { + // 绑定UI元素与viewModel的属性 + controller.nameField.textProperty().bindBidirectional(viewModel.getName()); + controller.keyField.textProperty().bindBidirectional(viewModel.getKey()); + controller.controllerField.textProperty().bindBidirectional(viewModel.getController()); + controller.iconField.textProperty().bindBidirectional(viewModel.getIcon()); + controller.descriptionField.textProperty().bindBidirectional(viewModel.getDescription()); + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..6b68bb2 --- /dev/null +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionTabSkinPermission.java @@ -0,0 +1,66 @@ +package com.ecep.contract.manager.ds.other.controller.permission; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; + +import com.ecep.contract.manager.ds.other.model.Function; +import com.ecep.contract.manager.ds.other.model.Permission; +import com.ecep.contract.manager.ds.other.service.PermissionService; +import com.ecep.contract.manager.ds.other.vo.FunctionViewModel; +import com.ecep.contract.manager.ds.other.vo.PermissionViewModel; +import com.ecep.contract.manager.ui.AbstEntityTableTabSkin; +import com.ecep.contract.manager.ui.FxmlPath; +import com.ecep.contract.manager.util.SpecificationUtils; + +import javafx.fxml.FXML; +import javafx.scene.control.Tab; +import javafx.scene.control.TableColumn; + +@FxmlPath("/ui/employee/function-tab-permission.fxml") +public class FunctionTabSkinPermission + extends + AbstEntityTableTabSkin { + + @FXML + public TableColumn idColumn; + @FXML + public TableColumn nameColumn; + @FXML + public TableColumn keyColumn; + @FXML + public TableColumn descriptionColumn; + + @Autowired + private PermissionService permissionService; + + public FunctionTabSkinPermission(FunctionWindowController controller) { + super(controller); + } + + @Override + public Tab getTab() { + return controller.permissionTab; + } + + @Override + public PermissionService getViewModelService() { + return permissionService; + } + + @Override + public void initializeTable() { + super.initializeTable(); + idColumn.setCellValueFactory(param -> param.getValue().getId()); + nameColumn.setCellValueFactory(param -> param.getValue().getName()); + keyColumn.setCellValueFactory(param -> param.getValue().getKey()); + // descriptionColumn.setCellValueFactory(param -> param.getValue().getDescription()); + } + + @Override + public Specification getSpecification(Function parent) { + return SpecificationUtils.and(getSpecification(), (root, query, criteriaBuilder) -> { + return criteriaBuilder.equal(root.get("function"), parent); + }); + } + +} diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionWindowController.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionWindowController.java new file mode 100644 index 0000000..8825b24 --- /dev/null +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/FunctionWindowController.java @@ -0,0 +1,81 @@ +package com.ecep.contract.manager.ds.other.controller.permission; + +import com.ecep.contract.manager.ds.other.model.Function; +import com.ecep.contract.manager.ds.other.service.FunctionService; +import com.ecep.contract.manager.ds.other.vo.FunctionViewModel; +import com.ecep.contract.manager.ui.AbstEntityController; +import com.ecep.contract.manager.ui.FxmlPath; +import javafx.scene.control.*; +import javafx.scene.layout.BorderPane; +import javafx.fxml.FXML; +import javafx.stage.Window; +import javafx.stage.WindowEvent; +import lombok.Getter; +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; + +@Lazy +@Scope("prototype") +@Component +@FxmlPath("/ui/employee/function.fxml") +public class FunctionWindowController extends AbstEntityController { + private static final Logger logger = LoggerFactory.getLogger(FunctionWindowController.class); + + /** + * 显示界面 + */ + public static void show(FunctionViewModel viewModel, Window window) { + show(FunctionWindowController.class, viewModel, window); + } + + @FXML + public BorderPane root; + @FXML + public TabPane tabPane; + @FXML + public Tab baseInfoTab; + @FXML + public Tab permissionTab; + @FXML + public TextField nameField; + @FXML + public TextField keyField; + @FXML + public TextField controllerField; + @FXML + public TextField iconField; + @FXML + public TextField descriptionField; + @FXML + public Label versionLabel; + + public static void show(Function function, Window owner) { + FunctionViewModel model = FunctionViewModel.from(function); + show(model, owner); + } + + @Autowired + @Getter + FunctionService functionService; + + @Override + public void onShown(WindowEvent windowEvent) { + super.onShown(windowEvent); + getTitle().bind(viewModel.getName().map(name -> "[" + viewModel.getId().get() + "] " + name + " 功能详情")); + } + + @Override + protected void registerTabSkins() { + registerTabSkin(baseInfoTab, tab -> new FunctionTabSkinBase(this)); + registerTabSkin(permissionTab, tab -> new FunctionTabSkinPermission(this)); + } + + @Override + public FunctionService getViewModelService() { + return functionService; + } +} \ No newline at end of file diff --git a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/PermissionManagerSkin.java b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/PermissionManagerSkin.java index ba5507e..856b099 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/PermissionManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/controller/permission/PermissionManagerSkin.java @@ -60,7 +60,6 @@ public class PermissionManagerSkin implements ManagerSkin, TableTabSkin param.getValue().getId()); - controller.permissionTable_idColumn.setEditable(false); - - controller.permissionTable_nameColumn.setCellValueFactory(param -> param.getValue().getName()); - controller.permissionTable_nameColumn.setCellFactory(TextFieldTableCell.forTableColumn()); - controller.permissionTable_nameColumn.setOnEditCommit(this::onNameColumnEditCommitAction); - - controller.permissionTable_keyColumn.setCellValueFactory(param -> param.getValue().getKey()); - controller.permissionTable_keyColumn.setCellFactory(TextFieldTableCell.forTableColumn()); - controller.permissionTable_keyColumn.setOnEditCommit(this::onKeyColumnEditCommitAction); - // controller.permissionTable_descriptionColumn.setCellValueFactory(param -> param.getValue().getDescription()); // controller.permissionTable_descriptionColumn.setCellFactory(TextFieldTableCell.forTableColumn()); // controller.permissionTable_descriptionColumn.setOnEditCommit(this::onSignMethodTableDescriptionColumnEditCommitAction); diff --git a/src/main/java/com/ecep/contract/manager/ds/other/model/Function.java b/src/main/java/com/ecep/contract/manager/ds/other/model/Function.java index 04927ff..4560418 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/model/Function.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/model/Function.java @@ -22,4 +22,13 @@ public class Function implements IdentityEntity, NamedEntity { @Column(name = "IS_ACTIVE") private boolean active; + + @Column(name = "CONTROLLER", columnDefinition = "VARCHAR(255)") + private String controller; + + @Column(name = "ICON", columnDefinition = "VARCHAR(255)") + private String icon; + + @Column(name = "DESCRIPTION", columnDefinition = "VARCHAR(255)") + private String description; } 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 5ac2be5..6323a0d 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 @@ -1,9 +1,5 @@ package com.ecep.contract.manager.ds.other.service; -import com.ecep.contract.manager.ds.other.model.Function; -import com.ecep.contract.manager.ds.other.repository.FunctionRepository; -import com.ecep.contract.manager.ds.other.vo.FunctionViewModel; -import com.ecep.contract.manager.ui.ViewModelService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; @@ -16,6 +12,11 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import com.ecep.contract.manager.ds.other.model.Function; +import com.ecep.contract.manager.ds.other.repository.FunctionRepository; +import com.ecep.contract.manager.ds.other.vo.FunctionViewModel; +import com.ecep.contract.manager.ui.ViewModelService; + @Lazy @Service @CacheConfig(cacheNames = "function") @@ -24,29 +25,26 @@ public class FunctionService implements ViewModelService { return builder.or( builder.like(root.get("key"), "%" + searchText + "%"), - builder.like(root.get("name"), "%" + searchText + "%") + builder.like(root.get("name"), "%" + searchText + "%"), + builder.like(root.get("controller"), "%" + searchText + "%"), + builder.like(root.get("icon"), "%" + searchText + "%") ); }; } diff --git a/src/main/java/com/ecep/contract/manager/ds/other/vo/FunctionViewModel.java b/src/main/java/com/ecep/contract/manager/ds/other/vo/FunctionViewModel.java index f15009c..b3b82a6 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/vo/FunctionViewModel.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/vo/FunctionViewModel.java @@ -1,18 +1,21 @@ package com.ecep.contract.manager.ds.other.vo; +import java.util.Objects; + import com.ecep.contract.manager.ds.other.model.Function; -import javafx.beans.property.SimpleIntegerProperty; + import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.Objects; - @Data @EqualsAndHashCode(callSuper = false) public class FunctionViewModel extends IdentityViewModel { private SimpleStringProperty name = new SimpleStringProperty(); private SimpleStringProperty key = new SimpleStringProperty(); + private SimpleStringProperty controller = new SimpleStringProperty(); + private SimpleStringProperty icon = new SimpleStringProperty(); + private SimpleStringProperty description = new SimpleStringProperty(); public static FunctionViewModel from(Function v) { FunctionViewModel model = new FunctionViewModel(); @@ -26,6 +29,9 @@ public class FunctionViewModel extends IdentityViewModel { super.updateFrom(v); getName().set(v.getName()); getKey().set(v.getKey()); + getController().set(v.getController()); + getIcon().set(v.getIcon()); + getDescription().set(v.getDescription()); } @Override @@ -39,6 +45,18 @@ public class FunctionViewModel extends IdentityViewModel { v.setKey(key.get()); modified = true; } + if (!Objects.equals(controller.get(), v.getController())) { + v.setController(controller.get()); + modified = true; + } + if (!Objects.equals(icon.get(), v.getIcon())) { + v.setIcon(icon.get()); + modified = true; + } + if (!Objects.equals(description.get(), v.getDescription())) { + v.setDescription(description.get()); + modified = true; + } return modified; } } diff --git a/src/main/java/com/ecep/contract/manager/ds/other/vo/PermissionViewModel.java b/src/main/java/com/ecep/contract/manager/ds/other/vo/PermissionViewModel.java index 43f8f7d..db147a4 100644 --- a/src/main/java/com/ecep/contract/manager/ds/other/vo/PermissionViewModel.java +++ b/src/main/java/com/ecep/contract/manager/ds/other/vo/PermissionViewModel.java @@ -1,15 +1,15 @@ package com.ecep.contract.manager.ds.other.vo; +import java.util.Objects; + import com.ecep.contract.manager.ds.other.model.Function; import com.ecep.contract.manager.ds.other.model.Permission; -import javafx.beans.property.SimpleIntegerProperty; + import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.Objects; - @Data @EqualsAndHashCode(callSuper = false) public class PermissionViewModel extends IdentityViewModel { diff --git a/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectManagerSkin.java b/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectManagerSkin.java index 443fa30..8da3c16 100644 --- a/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectManagerSkin.java @@ -1,7 +1,10 @@ package com.ecep.contract.manager.ds.project.controller; -import com.ecep.contract.manager.SpringApp; -import com.ecep.contract.manager.ds.company.CompanyStringConverter; +import org.springframework.data.jpa.domain.Specification; + +import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; +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.EntityStringConverter; import com.ecep.contract.manager.ds.project.model.ProductType; import com.ecep.contract.manager.ds.project.model.Project; @@ -17,6 +20,7 @@ import com.ecep.contract.manager.ui.BaseController; import com.ecep.contract.manager.ui.ComboBoxUtils; import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.util.SpecificationUtils; + import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.scene.control.TableColumn; @@ -24,13 +28,12 @@ import javafx.scene.control.cell.CheckBoxTableCell; import javafx.scene.control.cell.TextFieldTableCell; import javafx.util.converter.CurrencyStringConverter; import lombok.Setter; -import org.springframework.data.jpa.domain.Specification; public class ProjectManagerSkin extends AbstEntityManagerSkin implements ManagerSkin { @Setter - private ProjectService projectService; + private CompanyService companyService; @Setter private ProjectTypeService projectTypeService; @Setter @@ -44,10 +47,14 @@ public class ProjectManagerSkin } public ProjectService getProjectService() { - if (projectService == null) { - projectService = getBean(ProjectService.class); + return controller.getViewModelService(); + } + + public CompanyService getCompanyService(){ + if (companyService == null) { + companyService = getBean(CompanyService.class); } - return projectService; + return companyService; } public SaleTypeService getSaleTypeService() { @@ -116,9 +123,9 @@ public class ProjectManagerSkin } - private void initializeCustomerColumn(TableColumn column) { - CompanyStringConverter converter = SpringApp.getBean(CompanyStringConverter.class); - column.setCellValueFactory(param -> param.getValue().getCustomer().map(converter::toString)); + private void initializeCustomerColumn(TableColumn column) { + column.setCellValueFactory(param -> param.getValue().getCustomer()); + column.setCellFactory(param-> new CompanyTableCell<>(getCompanyService())); } private void initializeProductTypeColumn(TableColumn column) { 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 90e1ef7..e5c7aec 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,6 +1,7 @@ package com.ecep.contract.manager.ds.project.controller; +import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.project.controller.industry.ProjectIndustryManagerWindowController; import com.ecep.contract.manager.ds.project.controller.product_type.ProductTypeManagerWindowController; import com.ecep.contract.manager.ds.project.controller.project_type.ProjectTypeManagerWindowController; @@ -45,7 +46,7 @@ public class ProjectManagerWindowController public TableColumn projectTypeColumn; public TableColumn productTypeColumn; public TableColumn createdColumn; - public TableColumn customerColumn; + public TableColumn customerColumn; public TableColumn useBidColumn; public TableColumn useOfferColumn; public TableColumn amountColumn; @@ -67,9 +68,7 @@ public class ProjectManagerWindowController @Override protected ProjectManagerSkin createDefaultSkin() { - ProjectManagerSkin skin = new ProjectManagerSkin(this); - skin.setProjectService(projectService); - return skin; + return new ProjectManagerSkin(this); } diff --git a/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectTabSkinCustomerSatisfactionSurvey.java b/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectTabSkinCustomerSatisfactionSurvey.java index be91424..9a41759 100644 --- a/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectTabSkinCustomerSatisfactionSurvey.java +++ b/src/main/java/com/ecep/contract/manager/ds/project/controller/ProjectTabSkinCustomerSatisfactionSurvey.java @@ -61,7 +61,6 @@ public class ProjectTabSkinCustomerSatisfactionSurvey @Setter private CompanyCustomerFileService customerFileService; - public ProjectTabSkinCustomerSatisfactionSurvey(ProjectWindowController controller) { super(controller); } @@ -79,12 +78,11 @@ public class ProjectTabSkinCustomerSatisfactionSurvey public CompletableFuture refresh() { CompletableFuture future = new CompletableFuture<>(); runAsync(() -> { - try { - loadTableDataSet(); - future.complete(null); - } catch (Exception e) { - future.completeExceptionally(e); - } + loadTableDataSet(); + future.complete(null); + }).exceptionally(ex -> { + future.completeExceptionally(ex); + return null; }); return future; } @@ -125,7 +123,6 @@ public class ProjectTabSkinCustomerSatisfactionSurvey showInOwner(CustomerSatisfactionSurveyWindowController.class, item); } - private CustomerSatisfactionSurveyService getCustomerSatisfactionSurveyService() { if (satisfactionSurveyService == null) { satisfactionSurveyService = getBean(CustomerSatisfactionSurveyService.class); @@ -175,7 +172,8 @@ public class ProjectTabSkinCustomerSatisfactionSurvey return customerFileService; } - private static class EvaluationFileTableCell extends TableCell { + private static class EvaluationFileTableCell + extends TableCell { private CompanyCustomerFileService fileService; public CompanyCustomerFileService getFileService() { diff --git a/src/main/java/com/ecep/contract/manager/ds/project/controller/quotation/ProjectQuotationWindowController.java b/src/main/java/com/ecep/contract/manager/ds/project/controller/quotation/ProjectQuotationWindowController.java index 5c1318b..229c85a 100644 --- a/src/main/java/com/ecep/contract/manager/ds/project/controller/quotation/ProjectQuotationWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/project/controller/quotation/ProjectQuotationWindowController.java @@ -9,6 +9,7 @@ import com.ecep.contract.manager.ui.AbstEntityController; import com.ecep.contract.manager.ui.FxmlPath; import com.ecep.contract.manager.util.UITools; import javafx.event.ActionEvent; +import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; @@ -25,29 +26,50 @@ import org.springframework.stereotype.Component; @FxmlPath("/ui/project/project-quotation.fxml") public class ProjectQuotationWindowController extends AbstEntityController { + @FXML public BorderPane root; + @FXML public Tab baseInfoTab; + @FXML public Button importExcelBtn; + @FXML public Button exportExcelBtn; + @FXML public TextField applicantField; + @FXML public TextField applyTimeField; + @FXML public TextField authorizerField; + @FXML public TextField authorizationTimeField; + @FXML public HBox levelGroup; + @FXML public RadioButton good_radio_btn; + @FXML public RadioButton bad_radio_btn; + @FXML public RadioButton poor_radio_btn; + @FXML public CheckBox standardPayWayField; + @FXML public TextField noStandardPayWayTextField; + @FXML public TextField amountField; + @FXML public TextField evaluationFileField; + @FXML public Button evaluationFileBtn; + @FXML public TextField authorizationFileField; + @FXML public Button openFileBtn; + @FXML public Button changeFileBtn; + @FXML public TextArea descriptionField; diff --git a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorManagerSkin.java b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorManagerSkin.java index da89b76..433adea 100644 --- a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorManagerSkin.java @@ -1,5 +1,14 @@ package com.ecep.contract.manager.ds.vendor.controller; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.hibernate.Hibernate; +import org.springframework.data.jpa.domain.Specification; + +import com.ecep.contract.manager.ds.company.controller.CompanyTableCell; +import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.vendor.model.CompanyVendor; import com.ecep.contract.manager.ds.vendor.model.VendorCatalog; @@ -10,24 +19,17 @@ import com.ecep.contract.manager.ui.AbstEntityManagerSkin; import com.ecep.contract.manager.ui.ComboBoxUtils; import com.ecep.contract.manager.ui.ManagerSkin; import com.ecep.contract.manager.util.MyDateTimeUtils; -import com.ecep.contract.manager.util.MyStringUtils; import com.ecep.contract.manager.util.SpecificationUtils; + import javafx.application.Platform; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; import lombok.Setter; -import org.hibernate.Hibernate; -import org.springframework.data.domain.Page; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.util.StringUtils; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; public class CompanyVendorManagerSkin - extends AbstEntityManagerSkin - implements ManagerSkin { + extends + AbstEntityManagerSkin { @Setter private CompanyService companyService; @@ -66,7 +68,8 @@ public class CompanyVendorManagerSkin @Override public void initializeTable() { - List vendorTypeLocals = getCompanyVendorService().findAllTypes(controller.getLocale().toLanguageTag()); + List vendorTypeLocals = getCompanyVendorService() + .findAllTypes(controller.getLocale().toLanguageTag()); ComboBoxUtils.initialComboBox(controller.typeSelector, vendorTypeLocals, true); controller.typeSelector.valueProperty().addListener((observable, oldValue, newValue) -> { loadTableDataSet(true); @@ -75,8 +78,9 @@ public class CompanyVendorManagerSkin controller.idColumn.setCellValueFactory(param -> param.getValue().getId()); controller.codeColumn.setCellValueFactory(param -> param.getValue().getCode()); + Map vendorClassMap = getCompanyVendorService().findAllCatalogs().stream() + .collect(Collectors.toMap(VendorCatalog::getId, v -> v)); - Map vendorClassMap = getCompanyVendorService().findAllCatalogs().stream().collect(Collectors.toMap(VendorCatalog::getId, v -> v)); controller.catalogColumn.setCellValueFactory(param -> Bindings.createStringBinding(() -> { SimpleObjectProperty catalog = param.getValue().getCatalog(); VendorCatalog vendorCatalog = catalog.get(); @@ -98,8 +102,7 @@ public class CompanyVendorManagerSkin return vendorCatalog.getName(); } }, param.getValue().getCatalog())); - - + controller.typeColumn.setCellValueFactory(param -> param.getValue().getType().map(type -> { VendorTypeLocal local = vendorTypeLocals.stream().filter(v -> v.getType() == type).findFirst().orElse(null); if (local == null) { @@ -110,21 +113,13 @@ public class CompanyVendorManagerSkin })); controller.purchaseColumn.setCellValueFactory(param -> param.getValue().getPurchase()); - - controller.companyColumn.setCellValueFactory(param -> param.getValue().getCompany().map(v -> { - if (v == null) { - return "-"; - } - if (!Hibernate.isInitialized(v)) { - v = companyService.findById(v.getId()); - param.getValue().getCompany().set(v); - } - return v.getName(); - })); + controller.companyColumn.setCellValueFactory(param -> param.getValue().getCompany()); + controller.companyColumn.setCellFactory(param-> new CompanyTableCell<>(getCompanyService())); controller.developDateColumn.setCellValueFactory(param -> param.getValue().getDevelopDate()); controller.pathColumn.setCellValueFactory(param -> param.getValue().getPath()); - controller.createdColumn.setCellValueFactory(param -> param.getValue().getCreated().map(MyDateTimeUtils::format)); + controller.createdColumn + .setCellValueFactory(param -> param.getValue().getCreated().map(MyDateTimeUtils::format)); Platform.runLater(() -> { getTableView().getSortOrder().add(controller.idColumn); diff --git a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorManagerWindowController.java index 4c9dd83..2ae39ba 100644 --- a/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ds/vendor/controller/CompanyVendorManagerWindowController.java @@ -1,5 +1,6 @@ package com.ecep.contract.manager.ds.vendor.controller; +import com.ecep.contract.manager.ds.company.model.Company; import com.ecep.contract.manager.ds.company.service.CompanyService; import com.ecep.contract.manager.ds.vendor.controller.approved_list.CompanyVendorApprovedListManagerWindowController; import com.ecep.contract.manager.ds.vendor.controller.group.VendorGroupManagerWindowController; @@ -40,7 +41,7 @@ public class CompanyVendorManagerWindowController // columns public TableColumn idColumn; - public TableColumn companyColumn; + public TableColumn companyColumn; public TableColumn codeColumn; public TableColumn catalogColumn; public TableColumn typeColumn; diff --git a/src/main/java/com/ecep/contract/manager/ui/AbstEntityBasedTabSkin.java b/src/main/java/com/ecep/contract/manager/ui/AbstEntityBasedTabSkin.java index 20325c7..1b9548a 100644 --- a/src/main/java/com/ecep/contract/manager/ui/AbstEntityBasedTabSkin.java +++ b/src/main/java/com/ecep/contract/manager/ui/AbstEntityBasedTabSkin.java @@ -25,8 +25,7 @@ import java.time.LocalDateTime; import java.util.concurrent.CompletableFuture; public abstract class AbstEntityBasedTabSkin, T extends IdentityEntity, V extends IdentityViewModel> - extends AbstGenericTabSkin - implements TabSkin { + extends AbstGenericTabSkin { private static final Logger logger = LoggerFactory.getLogger(AbstEntityBasedTabSkin.class); @Setter diff --git a/src/main/java/com/ecep/contract/manager/ui/AbstEntityManagerSkin.java b/src/main/java/com/ecep/contract/manager/ui/AbstEntityManagerSkin.java index 8b1acd0..9f44f6e 100644 --- a/src/main/java/com/ecep/contract/manager/ui/AbstEntityManagerSkin.java +++ b/src/main/java/com/ecep/contract/manager/ui/AbstEntityManagerSkin.java @@ -1,31 +1,5 @@ package com.ecep.contract.manager.ui; -import com.ecep.contract.manager.ds.other.model.IdentityEntity; -import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; -import com.ecep.contract.manager.util.TableViewUtils; -import com.ecep.contract.manager.util.UITools; -import javafx.application.Platform; -import javafx.beans.property.Property; -import javafx.beans.property.SimpleIntegerProperty; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.event.ActionEvent; -import javafx.geometry.Bounds; -import javafx.scene.Node; -import javafx.scene.control.*; -import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyCodeCombination; -import javafx.scene.input.KeyCombination; -import javafx.scene.input.KeyEvent; -import javafx.util.converter.NumberStringConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.domain.Specification; - import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -34,18 +8,46 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; + +import com.ecep.contract.manager.ds.other.model.IdentityEntity; +import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; +import com.ecep.contract.manager.util.TableViewUtils; +import com.ecep.contract.manager.util.UITools; + +import javafx.application.Platform; +import javafx.beans.property.Property; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.geometry.Bounds; +import javafx.scene.Node; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.MenuItem; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyCodeCombination; +import javafx.scene.input.KeyCombination; +import javafx.scene.input.KeyEvent; +import javafx.util.converter.NumberStringConverter; + /** * @param Entity 的类型 * @param Entity 对应的ViewModel * @param Skin 的类型 * @param */ -public abstract class AbstEntityManagerSkin< - T extends IdentityEntity, - TV extends IdentityViewModel, - Skin extends ManagerSkin, - C extends AbstManagerWindowController - > implements ManagerSkin, TableTabSkin, EditableEntityTableTabSkin { +public abstract class AbstEntityManagerSkin, Skin extends ManagerSkin, C extends AbstManagerWindowController> + implements ManagerSkin, TableTabSkin, EditableEntityTableTabSkin { private static final Logger logger = LoggerFactory.getLogger(AbstEntityManagerSkin.class); /** * @@ -80,7 +82,6 @@ public abstract class AbstEntityManagerSkin< UITools.showExceptionAndWait(message, ex); } - public Locale getLocale() { return controller.getLocale(); } @@ -102,7 +103,6 @@ public abstract class AbstEntityManagerSkin< }); } - private void onShown() { if (loadedFuture == null) { loadedFuture = runAsync(() -> { @@ -135,7 +135,7 @@ public abstract class AbstEntityManagerSkin< }); loadTableDataSet(true); - }).exceptionally(this::handleException); + }); } } @@ -156,14 +156,23 @@ public abstract class AbstEntityManagerSkin< currentPageNumber.addListener(this::currentPageNumberListener); // - controller.currentPageNumberField.textProperty().bindBidirectional(currentPageNumber, new NumberStringConverter()); + controller.currentPageNumberField.textProperty().bindBidirectional(currentPageNumber, + new NumberStringConverter()); controller.previousPageBtn.setOnAction(event -> { - currentPageable = currentPageable.previous(); - loadTableDataSet(true); + try { + currentPageable = currentPageable.previous(); + loadTableDataSet(true); + } catch (Exception e) { + logger.warn("previous page error", e); + } }); controller.nextPageBtn.setOnAction(event -> { - currentPageable = currentPageable.next(); - loadTableDataSet(true); + try { + currentPageable = currentPageable.next(); + loadTableDataSet(true); + } catch (Exception e) { + logger.warn("next page error", e); + } }); } @@ -275,7 +284,6 @@ public abstract class AbstEntityManagerSkin< return false; } - protected T createNewEntity(TV row) { ViewModelService service = getViewModelService(); if (service != null) { @@ -341,7 +349,7 @@ public abstract class AbstEntityManagerSkin< try { _reloadTableData().thenRun(() -> loadTableDataSetFuture = null).exceptionally(this::handleException); } catch (Exception ex) { - handleException(ex); + handleException("加载表格数据出错", ex); } }, reloadNow ? 0 : 618, TimeUnit.MILLISECONDS); } @@ -370,13 +378,26 @@ public abstract class AbstEntityManagerSkin< } protected void updateTableDataSet(List models) { + long timeMillis = System.currentTimeMillis(); dataSet.setAll(models); + long timeCost = System.currentTimeMillis() - timeMillis; + if (logger.isDebugEnabled()) { + logger.debug("update table dataSet cost: {} ms", timeCost); + } } protected List loadTableData() { Specification spec = getSpecification(); ViewModelService service = getViewModelService(); + long timeMillis = System.currentTimeMillis(); Page page = service.findAll(spec, getPageable()); + long timeCost = System.currentTimeMillis() - timeMillis; + if (logger.isDebugEnabled()) { + logger.debug("load table data cost: {} ms", timeCost); + } + if (timeCost > 1000) { + controller.setStatus("used " + timeCost + " ms"); + } updateFooter(page); return page.map(service::from).toList(); } @@ -416,7 +437,8 @@ public abstract class AbstEntityManagerSkin< controller.previousPageBtn.setDisable(!page.hasPrevious()); controller.nextPageBtn.setDisable(!page.hasNext()); currentPageNumber.set(page.getNumber()); - controller.setStatus((page.getNumber() + 1) + "/" + page.getTotalPages() + " 页, 总 " + page.getTotalElements() + " 条"); + controller.setStatus( + (page.getNumber() + 1) + "/" + page.getTotalPages() + " 页, 总 " + page.getTotalElements() + " 条"); }); } diff --git a/src/main/java/com/ecep/contract/manager/ui/AbstEntityTableTabSkin.java b/src/main/java/com/ecep/contract/manager/ui/AbstEntityTableTabSkin.java index 744113d..e42e356 100644 --- a/src/main/java/com/ecep/contract/manager/ui/AbstEntityTableTabSkin.java +++ b/src/main/java/com/ecep/contract/manager/ui/AbstEntityTableTabSkin.java @@ -1,27 +1,5 @@ package com.ecep.contract.manager.ui; -import com.ecep.contract.manager.ds.other.model.IdentityEntity; -import com.ecep.contract.manager.ds.other.service.EmployeeService; -import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; -import com.ecep.contract.manager.ui.util.LocalDateFieldTableCell; -import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; -import com.ecep.contract.manager.util.TableViewUtils; -import com.ecep.contract.manager.util.UITools; -import javafx.application.Platform; -import javafx.beans.property.*; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.event.ActionEvent; -import javafx.scene.control.*; -import javafx.scene.control.cell.TextFieldTableCell; -import javafx.scene.input.*; -import lombok.Getter; -import lombok.Setter; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.domain.Specification; - import java.io.File; import java.time.LocalDate; import java.time.LocalDateTime; @@ -31,6 +9,48 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; + +import com.ecep.contract.manager.ds.other.model.IdentityEntity; +import com.ecep.contract.manager.ds.other.service.EmployeeService; +import com.ecep.contract.manager.ds.other.vo.IdentityViewModel; +import com.ecep.contract.manager.ui.util.LocalDateFieldTableCell; +import com.ecep.contract.manager.ui.util.LocalDateTimeTableCell; +import com.ecep.contract.manager.util.TableViewUtils; +import com.ecep.contract.manager.util.UITools; + +import javafx.application.Platform; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.Property; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.scene.control.Button; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.MenuItem; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.cell.TextFieldTableCell; +import javafx.scene.input.Clipboard; +import javafx.scene.input.DragEvent; +import javafx.scene.input.Dragboard; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyCodeCombination; +import javafx.scene.input.KeyCombination; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.TransferMode; +import lombok.Getter; +import lombok.Setter; + /** * 表格显示组件 * @@ -39,16 +59,14 @@ import java.util.function.Function; * @param 表格数据类 * @param 表格数据视图类 */ -public abstract class AbstEntityTableTabSkin< - C extends AbstEntityController, +public abstract class AbstEntityTableTabSkin, // 父数据类 K extends IdentityEntity, KV extends IdentityViewModel, // 表格数据类 - T extends IdentityEntity, TV extends IdentityViewModel - > + T extends IdentityEntity, TV extends IdentityViewModel> extends AbstEntityBasedTabSkin - implements TabSkin, TableOfTabSkin, EditableEntityTableTabSkin { - + implements TableOfTabSkin, EditableEntityTableTabSkin { + private static final Logger logger = LoggerFactory.getLogger(AbstEntityTableTabSkin.class); protected CompletableFuture loadedFuture; protected final SimpleBooleanProperty changed = new SimpleBooleanProperty(false); protected ObservableList dataSet = FXCollections.observableArrayList(); @@ -112,7 +130,7 @@ public abstract class AbstEntityTableTabSkin< public Pageable getPageable() { Sort sort = getSortByTable(); - //TODO 待完善 currentPageable + // TODO 待完善 currentPageable // return currentPageable.withSort(sort); return Pageable.unpaged(sort); } @@ -155,8 +173,7 @@ public abstract class AbstEntityTableTabSkin< protected void changed( TableColumn.CellEditEvent event, - Function> supplier - ) { + Function> supplier) { TV row = event.getRowValue(); supplier.apply(row).setValue(event.getNewValue()); changed(row); @@ -176,17 +193,18 @@ public abstract class AbstEntityTableTabSkin< column.setOnEditCommit(event -> changed(event, propertyFun)); } - protected void bindLocalDateColumn(TableColumn column, Function> propertyFun) { + protected void bindLocalDateColumn(TableColumn column, + Function> propertyFun) { column.setCellValueFactory(param -> propertyFun.apply(param.getValue())); column.setCellFactory(LocalDateFieldTableCell.forTableColumn()); } - protected void bindLocalDateTimeColumn(TableColumn column, Function> propertyFun) { + protected void bindLocalDateTimeColumn(TableColumn column, + Function> propertyFun) { column.setCellValueFactory(param -> propertyFun.apply(param.getValue())); column.setCellFactory(param -> new LocalDateTimeTableCell<>()); } - @Override public void onTabShown() { // 当第一次显示 tab 时,初始化表格 @@ -195,7 +213,7 @@ public abstract class AbstEntityTableTabSkin< initializeTab(); initializeTable(); loadTableDataSet(); - }).exceptionally(this::handleException); + }); } } @@ -228,7 +246,6 @@ public abstract class AbstEntityTableTabSkin< }); } - @Override public void initializeTab() { if (searchKeyField != null) { @@ -313,7 +330,6 @@ public abstract class AbstEntityTableTabSkin< } } - /** * 当有东西拖动到表格上时触发 * 默认为实现任何处理 @@ -364,7 +380,6 @@ public abstract class AbstEntityTableTabSkin< } } - /** * 当表格行被双击时触发 * @@ -377,24 +392,27 @@ public abstract class AbstEntityTableTabSkin< loadTableDataSet(); } - // @SuppressWarnings("unchecked") + // @SuppressWarnings("unchecked") protected TV createNewViewModel() { ViewModelService service = getViewModelService(); return service.createNewViewModel(); -// Class clz = getClass(); -// Method method = BeanUtils.findMethodWithMinimalParameters(clz, "loadRowData"); -// if (method == null) { -// throw new RuntimeException(clz.getName() + " unable find loadRowData method!"); -// } -// Class[] types = method.getParameterTypes(); -// if (types.length == 0) { -// throw new RuntimeException(clz.getName() + " loadRowData method need a parameter!"); -// } -// if (types[0] == BaseViewModel.class) { -// throw new RuntimeException(clz.getName() + " 需要继承实现 loadRowData 方法"); -// } -// return (TV) BeanUtils.instantiateClass(types[0]); + // Class clz = getClass(); + // Method method = BeanUtils.findMethodWithMinimalParameters(clz, + // "loadRowData"); + // if (method == null) { + // throw new RuntimeException(clz.getName() + " unable find loadRowData + // method!"); + // } + // Class[] types = method.getParameterTypes(); + // if (types.length == 0) { + // throw new RuntimeException(clz.getName() + " loadRowData method need a + // parameter!"); + // } + // if (types[0] == BaseViewModel.class) { + // throw new RuntimeException(clz.getName() + " 需要继承实现 loadRowData 方法"); + // } + // return (TV) BeanUtils.instantiateClass(types[0]); } protected void onTableAddAction(ActionEvent event) { @@ -461,16 +479,19 @@ public abstract class AbstEntityTableTabSkin< protected T createNewEntity(TV row) { return getViewModelService().createNewEntity(); -// Class viewModelClz = row.getClass(); -// Method method = BeanUtils.findMethodWithMinimalParameters(viewModelClz, "copyTo"); -// if (method == null) { -// throw new RuntimeException(viewModelClz.getName() + " unable find copyTo method!"); -// } -// Class[] types = method.getParameterTypes(); -// if (types.length == 0) { -// throw new RuntimeException(viewModelClz.getName() + " copyTo method need a parameter!"); -// } -// return (T) BeanUtils.instantiateClass(types[0]); + // Class viewModelClz = row.getClass(); + // Method method = BeanUtils.findMethodWithMinimalParameters(viewModelClz, + // "copyTo"); + // if (method == null) { + // throw new RuntimeException(viewModelClz.getName() + " unable find copyTo + // method!"); + // } + // Class[] types = method.getParameterTypes(); + // if (types.length == 0) { + // throw new RuntimeException(viewModelClz.getName() + " copyTo method need a + // parameter!"); + // } + // return (T) BeanUtils.instantiateClass(types[0]); } protected void saveRow(TV row) { @@ -495,7 +516,6 @@ public abstract class AbstEntityTableTabSkin< return Sort.by(getTableOrders()); } - @Override public void deleteRowData(T entity) { getViewModelService().delete(entity); diff --git a/src/main/java/com/ecep/contract/manager/ui/AbstManagerWindowController.java b/src/main/java/com/ecep/contract/manager/ui/AbstManagerWindowController.java index 8396d4d..115a0c6 100644 --- a/src/main/java/com/ecep/contract/manager/ui/AbstManagerWindowController.java +++ b/src/main/java/com/ecep/contract/manager/ui/AbstManagerWindowController.java @@ -13,14 +13,19 @@ public abstract class AbstManagerWindowController { // searcher + @FXML public TextField searchKeyField; + @FXML public Button searchBtn; @FXML public HBox footer; // paging + @FXML public Button previousPageBtn; + @FXML public Button nextPageBtn; + @FXML public TextField currentPageNumberField; @Override diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index a1294e2..216797e 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -27,7 +27,9 @@ + + diff --git a/src/main/resources/ui/employee/function-tab-permission.fxml b/src/main/resources/ui/employee/function-tab-permission.fxml new file mode 100644 index 0000000..1cd3196 --- /dev/null +++ b/src/main/resources/ui/employee/function-tab-permission.fxml @@ -0,0 +1,39 @@ + + + + + + + + + + + + +