refactor(vendor): 重构服务类继承EntityService基类

将多个vendor相关的服务类重构为继承自EntityService基类,统一实现通用CRUD操作
移除重复代码,简化各服务类的实现
添加必要的重写方法如getRepository和createNewEntity
This commit is contained in:
2025-12-13 18:54:15 +08:00
parent 0c26d329c6
commit 9dc90507cb
6 changed files with 115 additions and 86 deletions

View File

@@ -1,19 +1,13 @@
package com.ecep.contract.ds.vendor.repository; package com.ecep.contract.ds.vendor.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.ecep.contract.ds.MyRepository;
import com.ecep.contract.model.VendorApproved; import com.ecep.contract.model.VendorApproved;
/** /**
* 合格供方名录 * 合格供方名录
*/ */
@Repository @Repository
public interface VendorApprovedRepository extends public interface VendorApprovedRepository extends MyRepository<VendorApproved, Integer> {
JpaRepository<VendorApproved, Integer>, JpaSpecificationExecutor<VendorApproved>
{
} }

View File

@@ -1,6 +1,7 @@
package com.ecep.contract.ds.vendor.service; package com.ecep.contract.ds.vendor.service;
import com.ecep.contract.IEntityService; import com.ecep.contract.IEntityService;
import com.ecep.contract.EntityService;
import com.ecep.contract.QueryService; import com.ecep.contract.QueryService;
import com.ecep.contract.SpringApp; import com.ecep.contract.SpringApp;
import com.ecep.contract.constant.ParamConstant; import com.ecep.contract.constant.ParamConstant;
@@ -26,12 +27,22 @@ import java.util.List;
@Lazy @Lazy
@Service @Service
@CacheConfig(cacheNames = "vendor-approved-file") @CacheConfig(cacheNames = "vendor-approved-file")
public class VendorApprovedFileService public class VendorApprovedFileService extends EntityService<VendorApprovedFile, VendorApprovedFileVo, Integer>
implements IEntityService<VendorApprovedFile>, QueryService<VendorApprovedFileVo>, VoableService<VendorApprovedFile, VendorApprovedFileVo> { implements IEntityService<VendorApprovedFile>, QueryService<VendorApprovedFileVo>, VoableService<VendorApprovedFile, VendorApprovedFileVo> {
@Lazy @Lazy
@Autowired @Autowired
private VendorApprovedFileRepository repository; private VendorApprovedFileRepository repository;
@Override
protected VendorApprovedFileRepository getRepository() {
return repository;
}
@Override
public VendorApprovedFile createNewEntity() {
return new VendorApprovedFile();
}
/** /**
* 根据ID查找供应商已批准文件 * 根据ID查找供应商已批准文件
* *
@@ -44,35 +55,7 @@ public class VendorApprovedFileService
} }
@Override @Override
public Page<VendorApprovedFileVo> findAll(JsonNode paramsNode, Pageable pageable) { protected org.springframework.data.jpa.domain.Specification<VendorApprovedFile> buildSearchSpecification(String searchText) {
Specification<VendorApprovedFile> spec = null;
if (paramsNode.has(ParamConstant.KEY_SEARCH_TEXT)) {
spec = getSearchSpecification(paramsNode.get(ParamConstant.KEY_SEARCH_TEXT).asText());
}
spec = SpecificationUtils.andParam(spec, paramsNode, "list");
return findAll(spec, pageable).map(VendorApprovedFile::toVo);
}
@Override
public long count(JsonNode paramsNode) {
return repository.count();
}
@Override
public VendorApprovedFile getById(Integer id) {
return repository.findById(id).orElse(null);
}
/**
* 获取供应商已批准文件的查询规格
* 根据搜索文本构建文件名和描述的模糊查询条件
*
* @param searchText 搜索文本
* @return 构建的查询规格
*/
@Override
public Specification<VendorApprovedFile> getSearchSpecification(String searchText) {
return (root, query, builder) -> { return (root, query, builder) -> {
return builder.or( return builder.or(
builder.like(root.get("fileName"), "%" + searchText + "%"), builder.like(root.get("fileName"), "%" + searchText + "%"),
@@ -80,6 +63,22 @@ public class VendorApprovedFileService
}; };
} }
@Override
protected org.springframework.data.jpa.domain.Specification<VendorApprovedFile> buildParameterSpecification(JsonNode paramsNode) {
org.springframework.data.jpa.domain.Specification<VendorApprovedFile> spec = null;
spec = SpecificationUtils.andParam(spec, paramsNode, "list");
spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "fileName", "description");
return spec;
}
@Override
public VendorApprovedFile getById(Integer id) {
return repository.findById(id).orElse(null);
}
/** /**
* 根据查询规格和分页参数获取供应商已批准文件列表 * 根据查询规格和分页参数获取供应商已批准文件列表
* *

View File

@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import com.ecep.contract.IEntityService; import com.ecep.contract.IEntityService;
import com.ecep.contract.EntityService;
import com.ecep.contract.MyDateTimeUtils; import com.ecep.contract.MyDateTimeUtils;
import com.ecep.contract.QueryService; import com.ecep.contract.QueryService;
import com.ecep.contract.constant.CompanyVendorConstant; import com.ecep.contract.constant.CompanyVendorConstant;
@@ -40,7 +41,8 @@ import com.fasterxml.jackson.databind.JsonNode;
@Lazy @Lazy
@Service @Service
public class VendorApprovedService implements IEntityService<VendorApproved>, QueryService<VendorApprovedVo>, public class VendorApprovedService extends EntityService<VendorApproved, VendorApprovedVo, Integer>
implements IEntityService<VendorApproved>, QueryService<VendorApprovedVo>,
VoableService<VendorApproved, VendorApprovedVo> { VoableService<VendorApproved, VendorApprovedVo> {
private static final Logger logger = LoggerFactory.getLogger(VendorApprovedService.class); private static final Logger logger = LoggerFactory.getLogger(VendorApprovedService.class);
@Lazy @Lazy
@@ -57,6 +59,16 @@ public class VendorApprovedService implements IEntityService<VendorApproved>, Qu
@Autowired @Autowired
private SysConfService confService; private SysConfService confService;
@Override
protected VendorApprovedRepository getRepository() {
return repository;
}
@Override
public VendorApproved createNewEntity() {
return new VendorApproved();
}
public File getBasePath() { public File getBasePath() {
return new File(confService.getString(CompanyVendorConstant.KEY_APPROVED_LIST_BASE_PATH)); return new File(confService.getString(CompanyVendorConstant.KEY_APPROVED_LIST_BASE_PATH));
} }
@@ -72,26 +84,15 @@ public class VendorApprovedService implements IEntityService<VendorApproved>, Qu
} }
@Override @Override
public Page<VendorApproved> findAll(Specification<VendorApproved> spec, Pageable pageable) { protected org.springframework.data.jpa.domain.Specification<VendorApproved> buildParameterSpecification(
return repository.findAll(spec, pageable); JsonNode paramsNode) {
} org.springframework.data.jpa.domain.Specification<VendorApproved> spec = null;
@Override
public Page<VendorApprovedVo> findAll(JsonNode paramsNode, Pageable pageable) {
Specification<VendorApproved> spec = null;
if (paramsNode.has(ParamConstant.KEY_SEARCH_TEXT)) {
spec = getSearchSpecification(paramsNode.get(ParamConstant.KEY_SEARCH_TEXT).asText());
}
// 添加额外的参数过滤
spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "title"); spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "title");
return findAll(spec, pageable).map(VendorApproved::toVo); return spec;
} }
@Override @Override
public Specification<VendorApproved> getSearchSpecification(String searchText) { protected Specification<VendorApproved> buildSearchSpecification(String searchText) {
if (!StringUtils.hasText(searchText)) {
return null;
}
return (root, query, builder) -> { return (root, query, builder) -> {
return builder.like(root.get("title"), "%" + searchText + "%"); return builder.like(root.get("title"), "%" + searchText + "%");
}; };

View File

@@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import com.ecep.contract.IEntityService; import com.ecep.contract.IEntityService;
import com.ecep.contract.EntityService;
import com.ecep.contract.QueryService; import com.ecep.contract.QueryService;
import com.ecep.contract.ds.vendor.repository.VendorClassRepository; import com.ecep.contract.ds.vendor.repository.VendorClassRepository;
import com.ecep.contract.model.VendorCatalog; import com.ecep.contract.model.VendorCatalog;
@@ -30,12 +31,23 @@ import com.fasterxml.jackson.databind.JsonNode;
@Lazy @Lazy
@Service @Service
@CacheConfig(cacheNames = "vendor-catalog") @CacheConfig(cacheNames = "vendor-catalog")
public class VendorCatalogService implements IEntityService<VendorCatalog>, QueryService<VendorCatalogVo>, public class VendorCatalogService extends EntityService<VendorCatalog, VendorCatalogVo, Integer>
implements IEntityService<VendorCatalog>, QueryService<VendorCatalogVo>,
VoableService<VendorCatalog, VendorCatalogVo> { VoableService<VendorCatalog, VendorCatalogVo> {
@Lazy @Lazy
@Autowired @Autowired
private VendorClassRepository repository; private VendorClassRepository repository;
@Override
protected VendorClassRepository getRepository() {
return repository;
}
@Override
public VendorCatalog createNewEntity() {
return new VendorCatalog();
}
@Override @Override
public Page<VendorCatalogVo> findAll(JsonNode paramsNode, Pageable pageable) { public Page<VendorCatalogVo> findAll(JsonNode paramsNode, Pageable pageable) {
Specification<VendorCatalog> spec = null; Specification<VendorCatalog> spec = null;
@@ -65,10 +77,15 @@ public class VendorCatalogService implements IEntityService<VendorCatalog>, Quer
} }
@Override @Override
public Specification<VendorCatalog> getSearchSpecification(String searchText) { protected org.springframework.data.jpa.domain.Specification<VendorCatalog> buildParameterSpecification(
if (!StringUtils.hasText(searchText)) { JsonNode paramsNode) {
return null; org.springframework.data.jpa.domain.Specification<VendorCatalog> spec = null;
spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "name", "code", "parentId");
return spec;
} }
@Override
protected Specification<VendorCatalog> buildSearchSpecification(String searchText) {
return (root, query, builder) -> { return (root, query, builder) -> {
return builder.or( return builder.or(
builder.like(root.get("name"), "%" + searchText + "%"), builder.like(root.get("name"), "%" + searchText + "%"),

View File

@@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import com.ecep.contract.IEntityService; import com.ecep.contract.IEntityService;
import com.ecep.contract.EntityService;
import com.ecep.contract.QueryService; import com.ecep.contract.QueryService;
import com.ecep.contract.SpringApp; import com.ecep.contract.SpringApp;
import com.ecep.contract.ds.other.service.EmployeeService; import com.ecep.contract.ds.other.service.EmployeeService;
@@ -29,12 +30,22 @@ import com.fasterxml.jackson.databind.JsonNode;
@Lazy @Lazy
@Service @Service
@CacheConfig(cacheNames = "company-vendor-entity") @CacheConfig(cacheNames = "company-vendor-entity")
public class VendorEntityService implements IEntityService<VendorEntity>, QueryService<VendorEntityVo>, public class VendorEntityService extends EntityService<VendorEntity, VendorEntityVo, Integer> implements IEntityService<VendorEntity>, QueryService<VendorEntityVo>,
VoableService<VendorEntity, VendorEntityVo> { VoableService<VendorEntity, VendorEntityVo> {
@Lazy @Lazy
@Autowired @Autowired
private VendorEntityRepository repository; private VendorEntityRepository repository;
@Override
protected VendorEntityRepository getRepository() {
return repository;
}
@Override
public VendorEntity createNewEntity() {
return new VendorEntity();
}
@Override @Override
public VendorEntity getById(Integer id) { public VendorEntity getById(Integer id) {
return repository.findById(id).orElse(null); return repository.findById(id).orElse(null);
@@ -74,6 +85,14 @@ public class VendorEntityService implements IEntityService<VendorEntity>, QueryS
}; };
} }
@Override
protected org.springframework.data.jpa.domain.Specification<VendorEntity> buildParameterSpecification(JsonNode paramsNode) {
org.springframework.data.jpa.domain.Specification<VendorEntity> spec = null;
spec = SpecificationUtils.andParam(spec, paramsNode, "vendor");
spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "name", "abbName", "code");
return spec;
}
@Override @Override
public List<VendorEntity> search(String searchText) { public List<VendorEntity> search(String searchText) {
Specification<VendorEntity> spec = getSearchSpecification(searchText); Specification<VendorEntity> spec = getSearchSpecification(searchText);

View File

@@ -17,6 +17,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import com.ecep.contract.IEntityService; import com.ecep.contract.IEntityService;
import com.ecep.contract.EntityService;
import com.ecep.contract.QueryService; import com.ecep.contract.QueryService;
import com.ecep.contract.VendorType; import com.ecep.contract.VendorType;
import com.ecep.contract.ds.vendor.repository.VendorTypeLocalRepository; import com.ecep.contract.ds.vendor.repository.VendorTypeLocalRepository;
@@ -30,27 +31,44 @@ import com.fasterxml.jackson.databind.JsonNode;
@Lazy @Lazy
@Service @Service
@CacheConfig(cacheNames = "vendor-type") @CacheConfig(cacheNames = "vendor-type")
public class VendorTypeService implements IEntityService<VendorTypeLocal>, QueryService<VendorTypeLocalVo>, public class VendorTypeService extends EntityService<VendorTypeLocal, VendorTypeLocalVo, Integer>
implements IEntityService<VendorTypeLocal>, QueryService<VendorTypeLocalVo>,
VoableService<VendorTypeLocal, VendorTypeLocalVo> { VoableService<VendorTypeLocal, VendorTypeLocalVo> {
@Lazy @Lazy
@Autowired @Autowired
private VendorTypeLocalRepository repository; private VendorTypeLocalRepository repository;
@Override @Override
public Page<VendorTypeLocalVo> findAll(JsonNode paramsNode, Pageable pageable) { protected VendorTypeLocalRepository getRepository() {
Specification<VendorTypeLocal> spec = null; return repository;
if (paramsNode.has(ParamConstant.KEY_SEARCH_TEXT)) {
spec = getSearchSpecification(paramsNode.get(ParamConstant.KEY_SEARCH_TEXT).asText());
} }
@Override
public VendorTypeLocal createNewEntity() {
return new VendorTypeLocal();
}
@Override
protected Specification<VendorTypeLocal> buildParameterSpecification(JsonNode paramsNode) {
Specification<VendorTypeLocal> spec = null;
if (paramsNode.has("type")) { if (paramsNode.has("type")) {
spec = SpecificationUtils.and(spec, (root, query, builder) -> builder.equal(root.get("type"), spec = SpecificationUtils.and(spec, (root, query, builder) -> builder.equal(root.get("type"),
VendorType.valueOf(paramsNode.get("type").asText()))); VendorType.valueOf(paramsNode.get("type").asText())));
} }
// field // field
spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "lang", "value"); spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "lang", "value");
return findAll(spec, pageable).map(VendorTypeLocal::toVo); return spec;
}
@Override
protected Specification<VendorTypeLocal> buildSearchSpecification(String searchText) {
return (root, query, builder) -> {
return
// builder.or(
builder.like(root.get("type"), "%" + searchText + "%")
// )
;
};
} }
@Cacheable(key = "#p0") @Cacheable(key = "#p0")
@@ -64,30 +82,11 @@ public class VendorTypeService implements IEntityService<VendorTypeLocal>, Query
return repository.findById(id).orElse(null); return repository.findById(id).orElse(null);
} }
@Override
public Page<VendorTypeLocal> findAll(Specification<VendorTypeLocal> spec, Pageable pageable) {
return repository.findAll(spec, pageable);
}
@Cacheable(key = "'all-'+#p0.toLanguageTag()") @Cacheable(key = "'all-'+#p0.toLanguageTag()")
public Map<VendorType, VendorTypeLocal> findAll(Locale locale) { public Map<VendorType, VendorTypeLocal> findAll(Locale locale) {
return repository.getCompleteMapByLocal(locale.toLanguageTag()); return repository.getCompleteMapByLocal(locale.toLanguageTag());
} }
@Override
public Specification<VendorTypeLocal> getSearchSpecification(String searchText) {
if (!StringUtils.hasText(searchText)) {
return null;
}
return (root, query, builder) -> {
return
// builder.or(
builder.like(root.get("type"), "%" + searchText + "%")
// )
;
};
}
@Caching(evict = { @Caching(evict = {
@CacheEvict(key = "#p0.id"), @CacheEvict(key = "#p0.id"),
@CacheEvict(key = "'all-'+#p0.getLang()") @CacheEvict(key = "'all-'+#p0.getLang()")