From 515b255567ca2c7be32a2c1c56f623786d739841 Mon Sep 17 00:00:00 2001 From: songqq Date: Tue, 23 Sep 2025 14:12:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BE=9B=E5=BA=94?= =?UTF-8?q?=E5=95=86=E7=B1=BB=E5=9E=8B=E6=9C=AC=E5=9C=B0=E5=8C=96=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=8F=8A=E4=BC=98=E5=8C=96=E8=A1=A8=E6=A0=BC=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=A0=BC=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor: 重构供应商类型相关服务及控制器 fix: 修复供应商类型表格单元格初始化问题 style: 优化代码格式及导入顺序 --- .../table/cell/AsyncUpdateTableCell.java | 3 + .../table/cell/VendorTypeTableCell.java | 11 ++- .../vendor/CompanyVendorManagerSkin.java | 15 +-- .../CompanyVendorManagerWindowController.java | 1 - .../vendor/CompanyVendorTabSkinBase.java | 6 +- .../vendor/CompanyVendorWindowController.java | 3 +- ...mpanyVendorApprovedListTabSkinVendors.java | 92 ++++-------------- .../service/CompanyVendorService.java | 11 --- .../contract/service/VendorTypeService.java | 6 +- .../com/ecep/contract/util/ParamUtils.java | 6 +- client/src/main/resources/messages.properties | 5 + .../main/resources/messages_zh_CN.properties | 5 + .../ecep/contract/model/VendorCatalog.java | 2 +- .../contract/vo/VendorFileTypeLocalVo.java | 2 + .../ecep/contract/vo/VendorTypeLocalVo.java | 2 + .../service/CompanyFileTypeService.java | 54 +++++++++-- .../service/ContractFileTypeService.java | 7 +- .../CompanyCustomerFileTypeService.java | 92 +++++++++++++++++- .../service/ProjectFileTypeService.java | 95 ++++++++++++++++++- .../vendor/service/CompanyVendorService.java | 23 ++--- .../vendor/service/VendorFileTypeService.java | 13 ++- .../ds/vendor/service/VendorTypeService.java | 12 ++- 22 files changed, 323 insertions(+), 143 deletions(-) diff --git a/client/src/main/java/com/ecep/contract/controller/table/cell/AsyncUpdateTableCell.java b/client/src/main/java/com/ecep/contract/controller/table/cell/AsyncUpdateTableCell.java index 2e8c617..713d8e9 100644 --- a/client/src/main/java/com/ecep/contract/controller/table/cell/AsyncUpdateTableCell.java +++ b/client/src/main/java/com/ecep/contract/controller/table/cell/AsyncUpdateTableCell.java @@ -103,6 +103,9 @@ public class AsyncUpdateTableCell extends javafx */ protected T initialize() { K k = getItem(); + if (k == null) { + return null; + } if (k instanceof Integer id) { return getService().findById(id); } diff --git a/client/src/main/java/com/ecep/contract/controller/table/cell/VendorTypeTableCell.java b/client/src/main/java/com/ecep/contract/controller/table/cell/VendorTypeTableCell.java index b44e472..1221f82 100644 --- a/client/src/main/java/com/ecep/contract/controller/table/cell/VendorTypeTableCell.java +++ b/client/src/main/java/com/ecep/contract/controller/table/cell/VendorTypeTableCell.java @@ -4,7 +4,6 @@ import com.ecep.contract.SpringApp; import com.ecep.contract.VendorType; import com.ecep.contract.service.VendorTypeService; import com.ecep.contract.vo.VendorTypeLocalVo; - import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.util.Callback; @@ -23,8 +22,8 @@ public class VendorTypeTableCell extends AsyncUpdateTableCell new VendorTypeTableCell<>(service); } + public VendorTypeTableCell() { - this.vendorTypeService = SpringApp.getBean(VendorTypeService.class); } public VendorTypeTableCell(VendorTypeService service) { @@ -42,7 +41,13 @@ public class VendorTypeTableCell extends AsyncUpdateTableCell vendorTypeLocals = getCompanyVendorService() - .findAllTypes(controller.getLocale().toLanguageTag()); - ObservableList vendorTypeItems = FXCollections.observableArrayList(); - vendorTypeItems.add(null); - vendorTypeItems.addAll(vendorTypeLocals); - typeSelector.setItems(vendorTypeItems); - typeSelector.setConverter(new StringConverter<>() { - @Override - public String toString(VendorTypeLocal typeLocal) { - if (typeLocal == null) { - return ""; - } - return typeLocal.getValue(); - } - - @Override - public VendorTypeLocal fromString(String string) { - return null; - } - }); + ComboBoxUtils.initialComboBox(typeSelector, null, getCachedBean(VendorTypeService.class), true); idColumn.setCellValueFactory(param -> param.getValue().getId()); + // 厂商, vendor vendorColumn.setCellValueFactory(param -> param.getValue().getVendor()); - vendorColumn.setCellFactory(param -> new VendorTableCell(getCompanyVendorService(), getCompanyService())); - - typeColumn.setCellValueFactory(param -> param.getValue().getType().map(v -> { - if (v == null) { - return "-"; - } - for (VendorTypeLocal vendorTypeLocal : vendorTypeLocals) { - if (vendorTypeLocal.getType() == v) { - return vendorTypeLocal.getValue(); - } - } - return v.name(); - })); - + vendorColumn.setCellFactory(CompanyVendorTableCell.forTableColumn(getCompanyVendorService())); + // 类型, type + typeColumn.setCellValueFactory(param -> param.getValue().getType()); + typeColumn.setCellFactory(VendorTypeTableCell.forTableColumn(getCachedBean(VendorTypeService.class))); + // 描述, description descriptionColumn.setCellValueFactory(param -> param.getValue().getDescription()); table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); List menuItems = new ArrayList<>(); - for (VendorTypeLocal value : vendorTypeLocals) { + for (VendorTypeLocalVo value : getCachedBean(VendorTypeService.class).findAll()) { MenuItem menuItem = new MenuItem(); menuItem.setText(value.getValue()); menuItem.setOnAction(event -> { @@ -220,7 +188,7 @@ public class CompanyVendorApprovedListTabSkinVendors super.initializeTab(); } - private void changeVendorTableSelectedItemType(VendorTypeLocal value) { + private void changeVendorTableSelectedItemType(VendorTypeLocalVo value) { CompanyVendorApprovedItemViewModel selectedItem = getTableView().getSelectionModel().getSelectedItem(); selectedItem.getType().set(value.getType()); @@ -299,30 +267,4 @@ public class CompanyVendorApprovedListTabSkinVendors } } } - - static class VendorTableCell extends CompanyVendorTableCell { - public VendorTableCell(CompanyVendorService companyVendorService, CompanyService companyService) { - super(); - setService(companyVendorService); - setCompanyService(companyService); - } - - @Override - protected boolean isInitialized(CompanyVendorVo item) { - CompanyVendorApprovedItemViewModel row = getTableRow().getItem(); - if (StringUtils.hasText(row.getVendorName().get())) { - return true; - } - return super.isInitialized(item); - } - - @Override - public String format(CompanyVendorVo vendor) { - CompanyVendorApprovedItemViewModel row = getTableRow().getItem(); - if (StringUtils.hasText(row.getVendorName().get())) { - return row.getVendorName().get(); - } - return super.format(vendor); - } - } } diff --git a/client/src/main/java/com/ecep/contract/service/CompanyVendorService.java b/client/src/main/java/com/ecep/contract/service/CompanyVendorService.java index a1a763a..49a1837 100644 --- a/client/src/main/java/com/ecep/contract/service/CompanyVendorService.java +++ b/client/src/main/java/com/ecep/contract/service/CompanyVendorService.java @@ -138,17 +138,6 @@ public class CompanyVendorService extends QueryService findAllTypes(Locale locale) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'findAllTypes'"); - } - - public List findAllTypes(String languageTag) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'findAllTypes'"); - } - - public boolean makePathAbsent(CompanyVendorVo companyVendor) { String path = companyVendor.getPath(); if (StringUtils.hasText(path)) { diff --git a/client/src/main/java/com/ecep/contract/service/VendorTypeService.java b/client/src/main/java/com/ecep/contract/service/VendorTypeService.java index 271ac86..47c9091 100644 --- a/client/src/main/java/com/ecep/contract/service/VendorTypeService.java +++ b/client/src/main/java/com/ecep/contract/service/VendorTypeService.java @@ -16,13 +16,15 @@ import java.util.Locale; @Service @CacheConfig(cacheNames = "vendor-type") public class VendorTypeService extends QueryService { + private final StringConverter stringConverter = new VendorTypeStringConverter(this); + @Cacheable(key = "#p0") @Override public VendorTypeLocalVo findById(Integer id) { return super.findById(id); } - @Cacheable(key = "'type-'+#p0") + @Cacheable(key = "'type-'+#p0.ordinal()") public VendorTypeLocalVo findByType(VendorType type) { return findAll(ParamUtils.builder().equals("type", type).build(), Pageable.ofSize(1)).stream().findFirst() .orElse(null); @@ -46,8 +48,6 @@ public class VendorTypeService extends QueryService stringConverter = new VendorTypeStringConverter(this); - @Override public StringConverter getStringConverter() { return stringConverter; diff --git a/client/src/main/java/com/ecep/contract/util/ParamUtils.java b/client/src/main/java/com/ecep/contract/util/ParamUtils.java index 01569db..95e7d86 100644 --- a/client/src/main/java/com/ecep/contract/util/ParamUtils.java +++ b/client/src/main/java/com/ecep/contract/util/ParamUtils.java @@ -1,13 +1,11 @@ package com.ecep.contract.util; -import com.ecep.contract.constant.ServiceConstant; - import java.time.LocalDate; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import java.util.function.Consumer; -import java.util.function.Supplier; + +import com.ecep.contract.constant.ServiceConstant; public class ParamUtils { public static Map between(String key, LocalDate begin, LocalDate end) { diff --git a/client/src/main/resources/messages.properties b/client/src/main/resources/messages.properties index e69de29..d881162 100644 --- a/client/src/main/resources/messages.properties +++ b/client/src/main/resources/messages.properties @@ -0,0 +1,5 @@ +ui.vendor.title=[{0}] {1} Vendor +ui.vendor.type=Type +ui.vendor.description=Description + +ui.customer.title=[{0}] {1} Customer diff --git a/client/src/main/resources/messages_zh_CN.properties b/client/src/main/resources/messages_zh_CN.properties index e69de29..7a49f89 100644 --- a/client/src/main/resources/messages_zh_CN.properties +++ b/client/src/main/resources/messages_zh_CN.properties @@ -0,0 +1,5 @@ +ui.vendor.title=[{0}] {1} 供应商 +ui.vendor.type=类型 +ui.vendor.description=描述 + +ui.customer.title=[{0}] {1} 客户 diff --git a/common/src/main/java/com/ecep/contract/model/VendorCatalog.java b/common/src/main/java/com/ecep/contract/model/VendorCatalog.java index f1035ce..7ac115d 100644 --- a/common/src/main/java/com/ecep/contract/model/VendorCatalog.java +++ b/common/src/main/java/com/ecep/contract/model/VendorCatalog.java @@ -25,7 +25,7 @@ import lombok.ToString; @Entity @Table(name = "VENDOR_CATALOG", schema = "supplier_ms") @ToString -public class VendorCatalog implements BasedEntity, Serializable, Voable { +public class VendorCatalog implements BasedEntity, IdentityEntity, Serializable, Voable { private static final long serialVersionUID = 1L; @Id @Column(name = "ID", nullable = false) diff --git a/common/src/main/java/com/ecep/contract/vo/VendorFileTypeLocalVo.java b/common/src/main/java/com/ecep/contract/vo/VendorFileTypeLocalVo.java index 74f8d66..1d240ec 100644 --- a/common/src/main/java/com/ecep/contract/vo/VendorFileTypeLocalVo.java +++ b/common/src/main/java/com/ecep/contract/vo/VendorFileTypeLocalVo.java @@ -4,8 +4,10 @@ import com.ecep.contract.VendorFileType; import com.ecep.contract.model.BaseEnumEntity; import com.ecep.contract.model.IdentityEntity; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode(callSuper = true) public class VendorFileTypeLocalVo extends BaseEnumEntity implements IdentityEntity { } diff --git a/common/src/main/java/com/ecep/contract/vo/VendorTypeLocalVo.java b/common/src/main/java/com/ecep/contract/vo/VendorTypeLocalVo.java index e47d9f1..5b67008 100644 --- a/common/src/main/java/com/ecep/contract/vo/VendorTypeLocalVo.java +++ b/common/src/main/java/com/ecep/contract/vo/VendorTypeLocalVo.java @@ -4,8 +4,10 @@ import com.ecep.contract.model.BaseEnumEntity; import com.ecep.contract.model.IdentityEntity; import com.ecep.contract.VendorType; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode(callSuper = true) public class VendorTypeLocalVo extends BaseEnumEntity implements IdentityEntity { } \ No newline at end of file diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyFileTypeService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyFileTypeService.java index 9e77b7d..8658735 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyFileTypeService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyFileTypeService.java @@ -1,6 +1,14 @@ package com.ecep.contract.ds.company.service; +import com.ecep.contract.CompanyFileType; +import com.ecep.contract.VendorType; import com.ecep.contract.constant.ServiceConstant; +import com.ecep.contract.util.SpecificationUtils; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.Caching; +import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; @@ -13,17 +21,24 @@ import com.ecep.contract.model.CompanyFileTypeLocal; import com.fasterxml.jackson.databind.JsonNode; import jakarta.annotation.Resource; +import org.springframework.util.StringUtils; +import java.util.Locale; +import java.util.Map; + +@Lazy @Service +@CacheConfig(cacheNames = "company-file-type") public class CompanyFileTypeService implements IEntityService, QueryService { @Resource - private CompanyFileTypeLocalRepository companyFileTypeLocalRepository; + private CompanyFileTypeLocalRepository repository; + @Cacheable(key = "#p0") @Override public CompanyFileTypeLocal findById(Integer id) { - return companyFileTypeLocalRepository.findById(id).orElse(null); + return repository.findById(id).orElse(null); } @Override @@ -32,27 +47,54 @@ public class CompanyFileTypeService if (paramsNode.has(ServiceConstant.KEY_SEARCH_TEXT)) { spec = getSpecification(paramsNode.get(ServiceConstant.KEY_SEARCH_TEXT).asText()); } + + if (paramsNode.has("type")) { + spec = SpecificationUtils.and(spec, (root, query, builder) -> builder.equal(root.get("type"), CompanyFileType.valueOf(paramsNode.get("type").asText()))); + } // field return findAll(spec, pageable); } + @Cacheable(key = "'all-'+#p0.toLanguageTag()") + public Map findAll(Locale locale) { + return repository.getCompleteMapByLocal(locale.toLanguageTag()); + } + + @Override public Page findAll(Specification spec, Pageable pageable) { - return companyFileTypeLocalRepository.findAll(spec, pageable); + return repository.findAll(spec, pageable); } @Override public Specification getSpecification(String searchText) { - return null; + if (!StringUtils.hasText(searchText)) { + return null; + } + return (root, query, builder) -> { + return + // builder.or( + builder.like(root.get("type"), "%" + searchText + "%") + // ) + ; + }; } + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'all-'+#p0.getLang()") + }) @Override public void delete(CompanyFileTypeLocal entity) { - companyFileTypeLocalRepository.delete(entity); + repository.delete(entity); } + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'all-'+#p0.getLang()") + }) @Override public CompanyFileTypeLocal save(CompanyFileTypeLocal entity) { - return companyFileTypeLocalRepository.save(entity); + return repository.save(entity); } } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileTypeService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileTypeService.java index 2b01518..8b77223 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileTypeService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileTypeService.java @@ -3,6 +3,7 @@ package com.ecep.contract.ds.contract.service; import java.util.Locale; import java.util.Map; +import com.ecep.contract.VendorType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; @@ -40,12 +41,16 @@ public class ContractFileTypeService spec = getSpecification(paramsNode.get(ServiceConstant.KEY_SEARCH_TEXT).asText()); } + if (paramsNode.has("type")) { + spec = SpecificationUtils.and(spec, (root, query, builder) -> builder.equal(root.get("type"), ContractFileType.valueOf(paramsNode.get("type").asText()))); + } + // field spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "lang", "value", "suggestFileName"); return findAll(spec, pageable); } - @Cacheable(key = "'all-'+#p0.getLanguage()") + @Cacheable(key = "'all-'+#p0.toLanguageTag()") public Map findAll(Locale locale) { return repository.getCompleteMapByLocal(locale.toLanguageTag()); } diff --git a/server/src/main/java/com/ecep/contract/ds/customer/service/CompanyCustomerFileTypeService.java b/server/src/main/java/com/ecep/contract/ds/customer/service/CompanyCustomerFileTypeService.java index a1dd9dd..b8c1863 100644 --- a/server/src/main/java/com/ecep/contract/ds/customer/service/CompanyCustomerFileTypeService.java +++ b/server/src/main/java/com/ecep/contract/ds/customer/service/CompanyCustomerFileTypeService.java @@ -1,4 +1,94 @@ package com.ecep.contract.ds.customer.service; -public class CompanyCustomerFileTypeService { +import com.ecep.contract.CustomerFileType; +import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; +import com.ecep.contract.constant.ServiceConstant; +import com.ecep.contract.ds.customer.repository.CompanyCustomerFileTypeLocalRepository; +import com.ecep.contract.model.CompanyCustomerFileTypeLocal; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; +import jakarta.annotation.Resource; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.Caching; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Locale; +import java.util.Map; + +@Lazy +@Service +@CacheConfig(cacheNames = "customer-file-type") +public class CompanyCustomerFileTypeService implements IEntityService, QueryService { + @Resource + private CompanyCustomerFileTypeLocalRepository repository; + + @Cacheable(key = "#p0") + @Override + public CompanyCustomerFileTypeLocal findById(Integer id) { + return repository.findById(id).orElse(null); + } + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has(ServiceConstant.KEY_SEARCH_TEXT)) { + spec = getSpecification(paramsNode.get(ServiceConstant.KEY_SEARCH_TEXT).asText()); + } + + if (paramsNode.has("type")) { + spec = SpecificationUtils.and(spec, (root, query, builder) -> builder.equal(root.get("type"), CustomerFileType.valueOf(paramsNode.get("type").asText()))); + } + // field + return findAll(spec, pageable); + } + + @Cacheable(key = "'all-'+#p0.toLanguageTag()") + public Map findAll(Locale locale) { + return repository.getCompleteMapByLocal(locale.toLanguageTag()); + } + + @Override + public Page findAll(Specification spec, Pageable pageable) { + return repository.findAll(spec, pageable); + } + + @Override + public Specification getSpecification(String searchText) { + if (!StringUtils.hasText(searchText)) { + return null; + } + return (root, query, builder) -> { + return + // builder.or( + builder.like(root.get("type"), "%" + searchText + "%") + // ) + ; + }; + } + + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'all-'+#p0.getLang()") + }) + @Override + public CompanyCustomerFileTypeLocal save(CompanyCustomerFileTypeLocal entity) { + return repository.save(entity); + } + + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'all-'+#p0.getLang()") + }) + @Override + public void delete(CompanyCustomerFileTypeLocal entity) { + repository.delete(entity); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/project/service/ProjectFileTypeService.java b/server/src/main/java/com/ecep/contract/ds/project/service/ProjectFileTypeService.java index 7ffbc1a..ab6393e 100644 --- a/server/src/main/java/com/ecep/contract/ds/project/service/ProjectFileTypeService.java +++ b/server/src/main/java/com/ecep/contract/ds/project/service/ProjectFileTypeService.java @@ -1,4 +1,97 @@ package com.ecep.contract.ds.project.service; -public class ProjectFileTypeService { +import com.ecep.contract.IEntityService; +import com.ecep.contract.ProjectFileType; +import com.ecep.contract.QueryService; +import com.ecep.contract.constant.ServiceConstant; +import com.ecep.contract.ds.project.repository.ProjectFileTypeLocalRepository; +import com.ecep.contract.model.ProjectFileTypeLocal; +import com.ecep.contract.util.SpecificationUtils; +import com.fasterxml.jackson.databind.JsonNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.Caching; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Locale; +import java.util.Map; + +@Lazy +@Service +@CacheConfig(cacheNames = "project-file-type") +public class ProjectFileTypeService implements IEntityService, QueryService { + + @Lazy + @Autowired + private ProjectFileTypeLocalRepository repository; + + @Override + public Page findAll(JsonNode paramsNode, Pageable pageable) { + Specification spec = null; + if (paramsNode.has(ServiceConstant.KEY_SEARCH_TEXT)) { + spec = getSpecification(paramsNode.get(ServiceConstant.KEY_SEARCH_TEXT).asText()); + } + + if (paramsNode.has("type")) { + spec = SpecificationUtils.and(spec, (root, query, builder) -> builder.equal(root.get("type"), ProjectFileType.valueOf(paramsNode.get("type").asText()))); + } + + // field + spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "lang", "value"); + return findAll(spec, pageable); + } + + @Override + public ProjectFileTypeLocal findById(Integer id) { + return repository.findById(id).orElse(null); + } + + @Override + public Page findAll(Specification spec, Pageable pageable) { + return repository.findAll(spec, pageable); + } + + @Cacheable(key = "'all-'+#p0.toLanguageTag()") + public Map findAll(Locale locale) { + return repository.getCompleteMapByLocal(locale.toLanguageTag()); + } + + @Override + public Specification getSpecification(String searchText) { + if (!StringUtils.hasText(searchText)) { + return null; + } + return (root, query, builder) -> { + return + // builder.or( + builder.like(root.get("type"), "%" + searchText + "%") + // ) + ; + }; + } + + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'all-'+#p0.getLang()") + }) + @Override + public ProjectFileTypeLocal save(ProjectFileTypeLocal entity) { + return repository.save(entity); + } + + @Caching(evict = { + @CacheEvict(key = "#p0.id"), + @CacheEvict(key = "'all-'+#p0.getLang") + }) + @Override + public void delete(ProjectFileTypeLocal entity) { + repository.delete(entity); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/vendor/service/CompanyVendorService.java b/server/src/main/java/com/ecep/contract/ds/vendor/service/CompanyVendorService.java index b074b37..bd61b1b 100644 --- a/server/src/main/java/com/ecep/contract/ds/vendor/service/CompanyVendorService.java +++ b/server/src/main/java/com/ecep/contract/ds/vendor/service/CompanyVendorService.java @@ -2,6 +2,7 @@ package com.ecep.contract.ds.vendor.service; import com.ecep.contract.*; import com.ecep.contract.constant.CompanyVendorConstant; +import com.ecep.contract.constant.ServiceConstant; import com.ecep.contract.ds.company.service.CompanyBasicService; import com.ecep.contract.ds.other.service.SysConfService; import com.ecep.contract.ds.vendor.repository.CompanyVendorRepository; @@ -73,10 +74,14 @@ public class CompanyVendorService extends CompanyBasicService @Override public Page findAll(JsonNode paramsNode, Pageable pageable) { Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSpecification(paramsNode.get("searchText").asText()); + if (paramsNode.has(ServiceConstant.KEY_SEARCH_TEXT)) { + spec = getSpecification(paramsNode.get(ServiceConstant.KEY_SEARCH_TEXT).asText()); } // 添加额外的参数过滤 + if (paramsNode.has("type")) { + VendorType type = VendorType.valueOf(paramsNode.get("type").asText()); + spec = SpecificationUtils.and(spec, (root, query, builder) -> builder.equal(root.get("type"), type)); + } spec = SpecificationUtils.andParam(spec, paramsNode, "company", "catalog"); return findAll(spec, pageable); } @@ -184,7 +189,7 @@ public class CompanyVendorService extends CompanyBasicService @Override protected > boolean fillFileAsDefaultType(F dbFile, File file, - Consumer status) { + Consumer status) { dbFile.setType((T) VendorFileType.General); fillFile(dbFile, file, null, status); companyVendorFileService.save((CompanyVendorFile) dbFile); @@ -193,7 +198,7 @@ public class CompanyVendorService extends CompanyBasicService @Override protected > F fillFileType(File file, List fileList, - Consumer status) { + Consumer status) { CompanyVendorFile vendorFile = new CompanyVendorFile(); vendorFile.setType(VendorFileType.General); vendorFile.setFilePath(file.getAbsolutePath()); @@ -213,7 +218,7 @@ public class CompanyVendorService extends CompanyBasicService @Override protected > boolean fillFileAsEvaluationFile(F customerFile, File file, - List fileList, Consumer status) { + List fileList, Consumer status) { boolean modified = super.fillFileAsEvaluationFile(customerFile, file, fileList, status); // 当评价表有日期,并且未设审核时 boolean valid = isArchiveFile(customerFile.getFilePath()) && customerFile.getSignDate() != null; @@ -433,14 +438,6 @@ public class CompanyVendorService extends CompanyBasicService return vendorClassRepository.save(catalog); } - @Cacheable(key = "'types'+#p0") - public List findAllTypes(String lang) { - Map map = vendorTypeLocalRepository.getCompleteMapByLocal(lang); - List list = new ArrayList<>(map.values()); - list.sort((o1, o2) -> Objects.compare(o1.getValue(), o2.getValue(), String::compareTo)); - return list; - } - @Caching(evict = { @CacheEvict(key = "'type-'+#p0.lang"), }) diff --git a/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorFileTypeService.java b/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorFileTypeService.java index cf16a3a..713eb1d 100644 --- a/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorFileTypeService.java +++ b/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorFileTypeService.java @@ -3,6 +3,7 @@ package com.ecep.contract.ds.vendor.service; import java.util.Locale; import java.util.Map; +import com.ecep.contract.VendorType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; @@ -43,6 +44,10 @@ public class VendorFileTypeService implements IEntityService builder.equal(root.get("type"), VendorType.valueOf(paramsNode.get("type").asText()))); + } + // field spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "lang", "value"); return findAll(spec, pageable); @@ -71,10 +76,10 @@ public class VendorFileTypeService implements IEntityService { return - // builder.or( - builder.like(root.get("type"), "%" + searchText + "%") - // ) - ; + // builder.or( + builder.like(root.get("type"), "%" + searchText + "%") + // ) + ; }; } diff --git a/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorTypeService.java b/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorTypeService.java index 5fd83f2..bfc1bf8 100644 --- a/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorTypeService.java +++ b/server/src/main/java/com/ecep/contract/ds/vendor/service/VendorTypeService.java @@ -39,6 +39,10 @@ public class VendorTypeService implements IEntityService, Query spec = getSpecification(paramsNode.get(ServiceConstant.KEY_SEARCH_TEXT).asText()); } + if (paramsNode.has("type")) { + spec = SpecificationUtils.and(spec, (root, query, builder) -> builder.equal(root.get("type"), VendorType.valueOf(paramsNode.get("type").asText()))); + } + // field spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "lang", "value"); return findAll(spec, pageable); @@ -67,10 +71,10 @@ public class VendorTypeService implements IEntityService, Query } return (root, query, builder) -> { return - // builder.or( - builder.like(root.get("type"), "%" + searchText + "%") - // ) - ; + // builder.or( + builder.like(root.get("type"), "%" + searchText + "%") + // ) + ; }; }