feat(converter): 实现通用枚举转换器和供应商类型转换器

添加EnumEntityStringConverter作为通用枚举转换基类
实现VendorTypeStringConverter用于供应商类型本地化转换
在VendorTypeService中添加findByLocaleAndValue方法支持转换器
优化ComboBoxUtils的绑定逻辑使其支持可选属性
新增VendorCatalogService提供供应商目录CRUD功能
This commit is contained in:
2025-09-22 23:54:50 +08:00
parent b84e011857
commit 39dbce013f
5 changed files with 167 additions and 37 deletions

View File

@@ -1,4 +1,85 @@
package com.ecep.contract.ds.vendor.service;
public class VendorCatalogService {
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 com.ecep.contract.IEntityService;
import com.ecep.contract.QueryService;
import com.ecep.contract.constant.ServiceConstant;
import com.ecep.contract.ds.vendor.repository.VendorClassRepository;
import com.ecep.contract.model.VendorCatalog;
import com.ecep.contract.util.SpecificationUtils;
import com.fasterxml.jackson.databind.JsonNode;
/**
* 供应商目录服务类
* 提供对供应商目录的查询、创建、更新和删除操作
*/
@Lazy
@Service
@CacheConfig(cacheNames = "vendor-catalog")
public class VendorCatalogService implements IEntityService<VendorCatalog>, QueryService<VendorCatalog> {
@Lazy
@Autowired
private VendorClassRepository repository;
@Override
public Page<VendorCatalog> findAll(JsonNode paramsNode, Pageable pageable) {
Specification<VendorCatalog> spec = null;
if (paramsNode.has(ServiceConstant.KEY_SEARCH_TEXT)) {
spec = getSpecification(paramsNode.get(ServiceConstant.KEY_SEARCH_TEXT).asText());
}
// field
spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "name", "code", "parentId");
return findAll(spec, pageable);
}
@Cacheable(key = "#p0")
@Override
public VendorCatalog findById(Integer id) {
return repository.findById(id).orElse(null);
}
@Override
public Page<VendorCatalog> findAll(Specification<VendorCatalog> spec, Pageable pageable) {
return repository.findAll(spec, pageable);
}
@Override
public Specification<VendorCatalog> getSpecification(String searchText) {
if (!StringUtils.hasText(searchText)) {
return null;
}
return (root, query, builder) -> {
return builder.or(
builder.like(root.get("name"), "%" + searchText + "%"),
builder.like(root.get("code"), "%" + searchText + "%"));
};
}
@Caching(evict = {
@CacheEvict(key = "#p0.id")
})
@Override
public void delete(VendorCatalog entity) {
repository.delete(entity);
}
@Caching(evict = {
@CacheEvict(key = "#p0.id")
})
@Override
public VendorCatalog save(VendorCatalog entity) {
return repository.save(entity);
}
}