From 6eebdb174405f875f49a53a87d17bc1d53a6083c Mon Sep 17 00:00:00 2001 From: songqq Date: Sat, 13 Dec 2025 20:32:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor(service):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=B1=BB=E7=BB=A7=E6=89=BFEntityService?= =?UTF-8?q?=E5=9F=BA=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构多个服务类使其继承EntityService基类,统一实现通用CRUD操作 移除重复代码,提取公共逻辑到基类中 更新缓存注解和查询规范实现 添加必要的重写方法如getRepository和createNewEntity --- .../CompanyInvoiceInfoRepository.java | 11 +- .../repository/CompanyOldNameRepository.java | 11 +- .../service/CompanyBlackReasonService.java | 72 ++++---- .../service/CompanyContactService.java | 50 +++--- .../service/CompanyExtendInfoService.java | 52 +++--- .../company/service/CompanyFileService.java | 17 +- .../service/CompanyFileTypeService.java | 85 ++++------ .../service/CompanyInvoiceInfoService.java | 51 +++--- .../service/CompanyOldNameService.java | 46 ++++-- .../ds/company/service/HolidayService.java | 154 ++++++++++-------- .../ds/company/service/InvoiceService.java | 56 ++----- .../ContractBidVendorRepository.java | 11 +- .../ExtendVendorInfoRepository.java | 7 +- .../service/ContractBalanceService.java | 27 ++- .../service/ContractBidVendorService.java | 41 +++-- .../service/ContractCatalogService.java | 37 ++--- .../contract/service/ContractFileService.java | 37 ++--- .../service/ContractFileTypeService.java | 36 ++-- .../service/ContractGroupService.java | 33 ++-- .../service/ContractInvoiceService.java | 27 +-- .../contract/service/ContractItemService.java | 102 +++++------- .../contract/service/ContractKindService.java | 41 +++-- .../service/ContractPayPlanService.java | 48 +++--- .../contract/service/ContractTypeService.java | 44 +++-- .../service/ExtendVendorInfoService.java | 56 +++---- .../repository/HolidayTableRepository.java | 6 +- server_entity_services.md | 103 ++++++++++++ 27 files changed, 631 insertions(+), 630 deletions(-) create mode 100644 server_entity_services.md diff --git a/server/src/main/java/com/ecep/contract/ds/company/repository/CompanyInvoiceInfoRepository.java b/server/src/main/java/com/ecep/contract/ds/company/repository/CompanyInvoiceInfoRepository.java index fb6dcdd..df8730a 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/repository/CompanyInvoiceInfoRepository.java +++ b/server/src/main/java/com/ecep/contract/ds/company/repository/CompanyInvoiceInfoRepository.java @@ -1,21 +1,14 @@ package com.ecep.contract.ds.company.repository; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Repository; +import com.ecep.contract.ds.MyRepository; import com.ecep.contract.ds.company.model.CompanyInvoiceInfo; /** * 公司发票信息 Repository */ @Repository -public interface CompanyInvoiceInfoRepository extends - // JDBC interfaces - CrudRepository, PagingAndSortingRepository, - // JPA interfaces - JpaRepository, JpaSpecificationExecutor { +public interface CompanyInvoiceInfoRepository extends MyRepository { } diff --git a/server/src/main/java/com/ecep/contract/ds/company/repository/CompanyOldNameRepository.java b/server/src/main/java/com/ecep/contract/ds/company/repository/CompanyOldNameRepository.java index dc19538..9edebf3 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/repository/CompanyOldNameRepository.java +++ b/server/src/main/java/com/ecep/contract/ds/company/repository/CompanyOldNameRepository.java @@ -2,22 +2,15 @@ package com.ecep.contract.ds.company.repository; import java.util.List; -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 com.ecep.contract.ds.MyRepository; import com.ecep.contract.ds.company.model.CompanyOldName; @Repository -public interface CompanyOldNameRepository extends - // JDBC interfaces - CrudRepository, PagingAndSortingRepository, - // JPA interfaces - JpaRepository, JpaSpecificationExecutor { +public interface CompanyOldNameRepository extends MyRepository { List findAllByCompanyId(Integer companyId); diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBlackReasonService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBlackReasonService.java index 4b818e1..2cce768 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBlackReasonService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyBlackReasonService.java @@ -5,31 +5,28 @@ import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.context.annotation.Lazy; -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 org.springframework.stereotype.Service; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; -import com.ecep.contract.ds.company.repository.CompanyBlackReasonRepository; import com.ecep.contract.ds.company.model.Company; import com.ecep.contract.ds.company.model.CompanyBlackReason; +import com.ecep.contract.ds.company.repository.CompanyBlackReasonRepository; import com.ecep.contract.service.VoableService; -import com.ecep.contract.util.SpecificationUtils; import com.ecep.contract.vo.CompanyBlackReasonVo; import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "company-black-reason") -public class CompanyBlackReasonService +public class CompanyBlackReasonService extends EntityService implements IEntityService, QueryService, VoableService { private static final Logger logger = LoggerFactory.getLogger(CompanyContactService.class); @@ -37,16 +34,28 @@ public class CompanyBlackReasonService @Autowired private CompanyBlackReasonRepository repository; + @Override + protected CompanyBlackReasonRepository getRepository() { + return repository; + } + + @Override + public CompanyBlackReason createNewEntity() { + return new CompanyBlackReason(); + } + @Cacheable(key = "#p0") public CompanyBlackReasonVo findById(Integer id) { return repository.findById(id).map(CompanyBlackReason::toVo).orElse(null); } @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; + } + + @Override + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("applyName"), "%" + searchText + "%"), @@ -55,41 +64,20 @@ public class CompanyBlackReasonService }; } + @CacheEvict(key = "#p0.id") @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - - @Override - public CompanyBlackReason getById(Integer id) { - return repository.findById(id).orElse(null); - } - - public void delete(CompanyBlackReason entity) { - repository.delete(entity); - } - - public List findAll(Specification spec, Sort by) { - return repository.findAll(spec, by); - } - - public List findAllByCompany(Company company) { - return repository.findAllByCompany(company); - } - public CompanyBlackReason save(CompanyBlackReason companyBlackReason) { return repository.save(companyBlackReason); } + @CacheEvict(key = "#p0.id") @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - // field - spec = SpecificationUtils.andParam(spec, paramsNode, "company"); - return findAll(spec, pageable).map(CompanyBlackReason::toVo); + public void delete(CompanyBlackReason entity) { + repository.delete(entity); + } + + public List findAllByCompany(Company company) { + return repository.findAllByCompany(company); } @Override diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyContactService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyContactService.java index 6fd4f16..a6b3f17 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyContactService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyContactService.java @@ -2,25 +2,23 @@ package com.ecep.contract.ds.company.service; import java.util.List; -import com.ecep.contract.MessageHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.context.annotation.Lazy; -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 org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; +import com.ecep.contract.MessageHolder; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; -import com.ecep.contract.ds.company.repository.CompanyContactRepository; import com.ecep.contract.ds.company.model.Company; import com.ecep.contract.ds.company.model.CompanyContact; +import com.ecep.contract.ds.company.repository.CompanyContactRepository; import com.ecep.contract.service.ServiceException; import com.ecep.contract.service.VoableService; import com.ecep.contract.util.MyStringUtils; @@ -35,7 +33,8 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "company-contact") -public class CompanyContactService implements IEntityService, QueryService, +public class CompanyContactService extends EntityService + implements IEntityService, QueryService, VoableService { private static final Logger logger = LoggerFactory.getLogger(CompanyContactService.class); @@ -43,10 +42,11 @@ public class CompanyContactService implements IEntityService, Qu private CompanyContactRepository repository; @Override - public CompanyContact getById(Integer id) { - return repository.findById(id).orElse(null); + protected CompanyContactRepository getRepository() { + return repository; } + @CacheEvict(key = "#p0.id") @Override public CompanyContact save(CompanyContact contact) { return repository.save(contact); @@ -76,6 +76,7 @@ public class CompanyContactService implements IEntityService, Qu } } + @CacheEvict(key = "#p0.id") @Override public void delete(CompanyContact entity) { repository.delete(entity); @@ -95,10 +96,7 @@ public class CompanyContactService implements IEntityService, Qu } @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("name"), "%" + searchText + "%"), @@ -110,8 +108,15 @@ public class CompanyContactService implements IEntityService, Qu } @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); + protected Specification buildParameterSpecification(JsonNode paramsNode) { + Specification spec = null; + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return spec; + } + + @Override + public CompanyContact createNewEntity() { + return new CompanyContact(); } public List searchByCompany(Company company, String userText) { @@ -121,25 +126,10 @@ public class CompanyContactService implements IEntityService, Qu return repository.findAll(spec); } - public List findAll(Specification spec, Sort sort) { - return repository.findAll(spec, sort); - } - public List findAllByCompanyAndName(Company company, String contactName) { return repository.findAllByCompanyAndName(company, contactName); } - @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - // field - spec = SpecificationUtils.andParam(spec, paramsNode, "company"); - return findAll(spec, pageable).map(CompanyContact::toVo); - } - @Override public void updateByVo(CompanyContact model, CompanyContactVo vo) { if (model == null) { diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyExtendInfoService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyExtendInfoService.java index 5296189..ca7b7f6 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyExtendInfoService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyExtendInfoService.java @@ -2,9 +2,6 @@ package com.ecep.contract.ds.company.service; import java.util.List; -import com.ecep.contract.SpringApp; -import com.ecep.contract.constant.ParamConstant; -import com.ecep.contract.vo.CompanyVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,20 +12,21 @@ 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.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; -import com.ecep.contract.ds.company.repository.CompanyExtendInfoRepository; +import com.ecep.contract.SpringApp; import com.ecep.contract.ds.company.model.Company; import com.ecep.contract.ds.company.model.CompanyExtendInfo; +import com.ecep.contract.ds.company.repository.CompanyExtendInfoRepository; import com.ecep.contract.service.ServiceException; import com.ecep.contract.service.VoableService; import com.ecep.contract.util.SpecificationUtils; import com.ecep.contract.vo.CompanyExtendInfoVo; +import com.ecep.contract.vo.CompanyVo; import com.fasterxml.jackson.databind.JsonNode; /** @@ -37,25 +35,33 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "company-extend-info") -public class CompanyExtendInfoService implements IEntityService, QueryService, VoableService { +public class CompanyExtendInfoService extends EntityService + implements IEntityService, QueryService, + VoableService { private static final Logger logger = LoggerFactory.getLogger(CompanyExtendInfoService.class); @Autowired private CompanyExtendInfoRepository repository; + @Override + protected CompanyExtendInfoRepository getRepository() { + return repository; + } + @Cacheable(key = "#p0") @Override public CompanyExtendInfoVo findById(Integer id) { return repository.findById(id).map(CompanyExtendInfo::toVo).orElse(null); } - public List findAll(Specification spec, Sort sort) { - return repository.findAll(spec, sort); + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + Specification spec = null; + spec = SpecificationUtils.andParam(spec, paramsNode, "company"); + return spec; } - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + @Override + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("businessScope"), "%" + searchText + "%"), @@ -64,21 +70,12 @@ public class CompanyExtendInfoService implements IEntityService findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); + @Override + public CompanyExtendInfo createNewEntity() { + return new CompanyExtendInfo(); } @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has(ParamConstant.KEY_SEARCH_TEXT)) { - spec = getSearchSpecification(paramsNode.get(ParamConstant.KEY_SEARCH_TEXT).asText()); - } - // field - spec = SpecificationUtils.andParam(spec, paramsNode, "company"); - return findAll(spec, pageable).map(CompanyExtendInfo::toVo); - } - @Caching(evict = { @CacheEvict(key = "#p0.id"), @CacheEvict(key = "'byCompany-'+#p0.company.id") @@ -144,8 +141,5 @@ public class CompanyExtendInfoService implements IEntityService implements IEntityService, QueryService, VoableService { private static final Logger logger = LoggerFactory.getLogger(CompanyFileService.class); @@ -60,11 +61,12 @@ public class CompanyFileService @Autowired private CompanyFileRepository repository; - public CompanyFileService() { + @Override + protected CompanyFileRepository getRepository() { + return repository; } - public CompanyFile getById(Integer id) { - return repository.findById(id).orElse(null); + public CompanyFileService() { } @Cacheable(key = "#p0") @@ -202,9 +204,15 @@ public class CompanyFileService * @param companyFile 企业文件 * @return 保存后的企业文件 */ + @Override + public CompanyFile createNewEntity() { + return new CompanyFile(); + } + @Caching(evict = { @CacheEvict(key = "#p0.id") }) + @Override public CompanyFile save(CompanyFile companyFile) { return repository.save(companyFile); } @@ -219,6 +227,7 @@ public class CompanyFileService @Caching(evict = { @CacheEvict(key = "#p0.id") }) + @Override public void delete(CompanyFile file) { repository.delete(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 47ed757..0bd2dd8 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,37 +1,34 @@ package com.ecep.contract.ds.company.service; -import com.ecep.contract.CompanyFileType; -import com.ecep.contract.constant.ParamConstant; -import com.ecep.contract.service.VoableService; -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; -import org.springframework.stereotype.Service; - -import com.ecep.contract.IEntityService; -import com.ecep.contract.QueryService; -import com.ecep.contract.ds.company.repository.CompanyFileTypeLocalRepository; -import com.ecep.contract.model.CompanyFileTypeLocal; -import com.ecep.contract.vo.CompanyFileTypeLocalVo; -import com.fasterxml.jackson.databind.JsonNode; - -import jakarta.annotation.Resource; -import org.springframework.util.StringUtils; - import java.util.Locale; import java.util.Map; import java.util.Optional; +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.jpa.domain.Specification; +import org.springframework.stereotype.Service; + +import com.ecep.contract.CompanyFileType; +import com.ecep.contract.EntityService; +import com.ecep.contract.IEntityService; +import com.ecep.contract.QueryService; +import com.ecep.contract.ds.company.repository.CompanyFileTypeLocalRepository; +import com.ecep.contract.model.CompanyFileTypeLocal; +import com.ecep.contract.service.VoableService; +import com.ecep.contract.util.SpecificationUtils; +import com.ecep.contract.vo.CompanyFileTypeLocalVo; +import com.fasterxml.jackson.databind.JsonNode; + +import jakarta.annotation.Resource; + @Lazy @Service @CacheConfig(cacheNames = "company-file-type") -public class CompanyFileTypeService +public class CompanyFileTypeService extends EntityService implements IEntityService, QueryService, VoableService { @@ -39,8 +36,13 @@ public class CompanyFileTypeService private CompanyFileTypeLocalRepository repository; @Override - public CompanyFileTypeLocal getById(Integer id) { - return repository.findById(id).orElse(null); + protected CompanyFileTypeLocalRepository getRepository() { + return repository; + } + + @Override + public CompanyFileTypeLocal createNewEntity() { + return new CompanyFileTypeLocal(); } @Cacheable(key = "#id") @@ -51,18 +53,13 @@ public class CompanyFileTypeService } @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { + protected Specification buildParameterSpecification(JsonNode paramsNode) { Specification spec = null; - if (paramsNode.has(ParamConstant.KEY_SEARCH_TEXT)) { - spec = getSearchSpecification(paramsNode.get(ParamConstant.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).map(CompanyFileTypeLocal::toVo); + return spec; } @Cacheable(key = "'all-'+#locale.toLanguageTag()") @@ -74,21 +71,9 @@ public class CompanyFileTypeService } @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - - @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { - return - // builder.or( - builder.like(root.get("type"), "%" + searchText + "%") - // ) - ; + return builder.like(root.get("type"), "%" + searchText + "%"); }; } @@ -98,7 +83,7 @@ public class CompanyFileTypeService }) @Override public void delete(CompanyFileTypeLocal entity) { - repository.delete(entity); + super.delete(entity); } @Caching(evict = { @@ -107,7 +92,7 @@ public class CompanyFileTypeService }) @Override public CompanyFileTypeLocal save(CompanyFileTypeLocal entity) { - return repository.save(entity); + return super.save(entity); } @Override diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyInvoiceInfoService.java b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyInvoiceInfoService.java index f45e307..dd7de1c 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/CompanyInvoiceInfoService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/CompanyInvoiceInfoService.java @@ -16,6 +16,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.ds.company.repository.CompanyInvoiceInfoRepository; @@ -33,12 +34,24 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "company-invoice-info") -public class CompanyInvoiceInfoService implements IEntityService, QueryService, VoableService { +public class CompanyInvoiceInfoService extends EntityService + implements IEntityService, QueryService, + VoableService { private static final Logger logger = LoggerFactory.getLogger(CompanyInvoiceInfoService.class); @Lazy @Autowired private CompanyInvoiceInfoRepository repository; + @Override + protected CompanyInvoiceInfoRepository getRepository() { + return repository; + } + + @Override + public CompanyInvoiceInfo createNewEntity() { + return new CompanyInvoiceInfo(); + } + @Cacheable(key = "#p0") @Override public CompanyInvoiceInfoVo findById(Integer id) { @@ -46,16 +59,7 @@ public class CompanyInvoiceInfoService implements IEntityService searchByCompany(Company company, String searchText) { - Specification spec = (root, query, builder) -> { - return builder.or( - builder.like(root.get("name"), "%" + searchText + "%"), - builder.like(root.get("taxId"), "%" + searchText + "%"), - builder.like(root.get("address"), "%" + searchText + "%"), - builder.like(root.get("phone"), "%" + searchText + "%"), - builder.like(root.get("bankName"), "%" + searchText + "%"), - builder.like(root.get("bankAccount"), "%" + searchText + "%")); - }; - + Specification spec = buildSearchSpecification(searchText); if (company != null) { spec = spec.and((root, query, builder) -> { return builder.equal(root.get("company"), company); @@ -64,10 +68,7 @@ public class CompanyInvoiceInfoService implements IEntityService getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("name"), "%" + searchText + "%"), @@ -79,19 +80,11 @@ public class CompanyInvoiceInfoService implements IEntityService findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { + protected Specification buildParameterSpecification(JsonNode paramsNode) { Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - // field spec = SpecificationUtils.andParam(spec, paramsNode, "company"); - return findAll(spec, pageable).map(CompanyInvoiceInfo::toVo); + return null; } @Caching(evict = { @@ -107,6 +100,7 @@ public class CompanyInvoiceInfoService implements IEntityService, QueryService, VoableService { +public class CompanyOldNameService extends EntityService + implements IEntityService, QueryService, + VoableService { private static final Logger logger = LoggerFactory.getLogger(CompanyOldNameService.class); @Lazy @Autowired @@ -44,17 +49,20 @@ public class CompanyOldNameService implements IEntityService, Qu @Autowired private CompanyService companyService; - @Cacheable(key = "#p0") - public CompanyOldNameVo findById(Integer id) { - return companyOldNameRepository.findById(id).map(CompanyOldName::toVo).orElse(null); + @Override + protected CompanyOldNameRepository getRepository() { + return companyOldNameRepository; } @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } - return SpecificationUtils.andWith(searchText, this::buildSearchSpecification); + public CompanyOldName createNewEntity() { + return new CompanyOldName(); + } + + @Cacheable(key = "#p0") + @Override + public CompanyOldNameVo findById(Integer id) { + return companyOldNameRepository.findById(id).map(CompanyOldName::toVo).orElse(null); } protected Specification buildSearchSpecification(String searchText) { @@ -65,6 +73,15 @@ public class CompanyOldNameService implements IEntityService, Qu }; } + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; + } + + @Override + @Caching(evict = { + @CacheEvict(key = "#p0.id") + }) public CompanyOldName save(CompanyOldName companyOldName) { return companyOldNameRepository.save(companyOldName); } @@ -151,6 +168,10 @@ public class CompanyOldNameService implements IEntityService, Qu companyOldNameRepository.deleteById(id); } + @Override + @Caching(evict = { + @CacheEvict(key = "#p0.id") + }) public void delete(CompanyOldName entity) { companyOldNameRepository.delete(entity); } @@ -179,7 +200,6 @@ public class CompanyOldNameService implements IEntityService, Qu } companyOldNameRepository.saveAll(list); - } public void deleteByCompany(Company company) { @@ -209,11 +229,6 @@ public class CompanyOldNameService implements IEntityService, Qu return companyOldNameRepository.findAll(spec, pageable); } - @Override - public CompanyOldName getById(Integer id) { - return companyOldNameRepository.findById(id).orElse(null); - } - @Override public Page findAll(JsonNode paramsNode, Pageable pageable) { Specification spec = null; @@ -262,4 +277,5 @@ public class CompanyOldNameService implements IEntityService, Qu model.getId(), model.getVersion(), vo.getVersion()); } } + } diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/HolidayService.java b/server/src/main/java/com/ecep/contract/ds/company/service/HolidayService.java index 2e5d8e2..0bdbe7c 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/HolidayService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/HolidayService.java @@ -8,12 +8,15 @@ import java.util.List; 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.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.ds.other.repository.HolidayTableRepository; @@ -36,11 +39,17 @@ import lombok.extern.slf4j.Slf4j; @Service @CacheConfig(cacheNames = "HolidayTable") @Slf4j -public class HolidayService implements IEntityService, QueryService, VoableService { - +public class HolidayService extends EntityService implements + IEntityService, QueryService, VoableService { + @Autowired private HolidayTableRepository holidayTableRepository; - + + @Override + protected HolidayTableRepository getRepository() { + return holidayTableRepository; + } + /** * 调整日期到工作日 * @@ -51,13 +60,14 @@ public class HolidayService implements IEntityService, QueryServic if (date == null) { return null; } - - while (date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY || isHoliday(date)) { + + while (date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY + || isHoliday(date)) { date = date.plusDays(1); } return date; } - + /** * 检查日期是否为节假日 * @@ -68,18 +78,20 @@ public class HolidayService implements IEntityService, QueryServic if (date == null) { return false; } - + HolidayTable holidayTable = holidayTableRepository.findById(date).orElse(null); return holidayTable != null && holidayTable.isHoliday(); } - + @Override public HolidayTable getById(Integer id) { - throw new UnsupportedOperationException("HolidayTable uses LocalDate as ID, please use getById(LocalDate id) method instead"); + throw new UnsupportedOperationException( + "HolidayTable uses LocalDate as ID, please use getById(LocalDate id) method instead"); } - + /** * 根据LocalDate类型的ID查询实体 + * * @param id 实体ID * @return 实体对象 */ @@ -87,26 +99,29 @@ public class HolidayService implements IEntityService, QueryServic if (id == null) { return null; } - return holidayTableRepository.findById(id).orElse(null); + return super.getById(id); } - + @Override + @Caching(evict = { @CacheEvict(key = "#p0.id") }) public HolidayTable save(HolidayTable entity) { if (entity == null) { return null; } - return holidayTableRepository.save(entity); + return super.save(entity); } - + @Override + @Caching(evict = { @CacheEvict(key = "#p0.id") }) public void delete(HolidayTable entity) { if (entity != null && entity.getId() != null) { - holidayTableRepository.deleteById(entity.getId()); + super.delete(entity); } } - + /** * 根据LocalDate类型的ID删除实体 + * * @param id 实体ID */ public void deleteById(LocalDate id) { @@ -114,60 +129,61 @@ public class HolidayService implements IEntityService, QueryServic holidayTableRepository.deleteById(id); } } - + + @Override + public HolidayTable createNewEntity() { + return new HolidayTable(); + } + + @Override + protected Specification buildSearchSpecification(String searchText) { + return (Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) -> { + List predicates = new ArrayList<>(); + try { + // 尝试将搜索文本解析为日期 + LocalDate date = LocalDate.parse(searchText.trim()); + predicates.add(criteriaBuilder.equal(root.get("id"), date)); + } catch (DateTimeParseException e) { + // 如果不是日期格式,尝试其他搜索方式 + // 由于HolidayTable只有id和holiday字段,这里无法进行其他字段的模糊搜索 + log.warn("Search text '{}' is not a valid date format", searchText); + } + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; + } + + @Override + public HolidayTableVo findById(Integer id) { + throw new UnsupportedOperationException( + "HolidayTable uses LocalDate as ID, please use findById(Object id) instead"); + } + + @Cacheable(key = "#id", unless = "#result == null") + public HolidayTableVo findById(LocalDate id) { + HolidayTable entity = getById(id); + return entity != null ? entity.toVo() : null; + } + + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; + } + /** * 获取所有节假日 + * * @param pageable 分页参数 * @return 分页结果 */ public Page findAll(Pageable pageable) { return holidayTableRepository.findAll(pageable); } - - @Override - public Page findAll(Specification spec, Pageable pageable) { - // 由于HolidayTableRepository不支持Specification查询,返回所有节假日 - return findAll(pageable); - } - - @Override - public Specification getSearchSpecification(String searchText) { - // 实现根据搜索文本构建规格化查询 - return (Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) -> { - List predicates = new ArrayList<>(); - - if (searchText != null && !searchText.trim().isEmpty()) { - try { - // 尝试将搜索文本解析为日期 - LocalDate date = LocalDate.parse(searchText.trim()); - predicates.add(criteriaBuilder.equal(root.get("id"), date)); - } catch (DateTimeParseException e) { - // 如果不是日期格式,尝试其他搜索方式 - // 由于HolidayTable只有id和holiday字段,这里无法进行其他字段的模糊搜索 - log.warn("Search text '{}' is not a valid date format", searchText); - } - } - - return criteriaBuilder.and(predicates.toArray(new Predicate[0])); - }; - } - - @Override - public HolidayTableVo findById(Integer id) { - throw new UnsupportedOperationException("HolidayTable uses LocalDate as ID, please use findById(Object id) instead"); - } - - @Cacheable(key = "#id", unless = "#result == null") - public HolidayTableVo findById(LocalDate id) { - HolidayTable entity = getById(id); - return entity != null ? entity.toVo() : null; - } - + @Override public Page findAll(JsonNode paramsNode, Pageable pageable) { // 实现根据JSON参数过滤节假日 Page entityPage; - + if (paramsNode == null || paramsNode.isEmpty()) { // 如果没有参数,返回所有节假日 entityPage = findAll(pageable); @@ -176,11 +192,11 @@ public class HolidayService implements IEntityService, QueryServic Boolean isHoliday = null; LocalDate startDate = null; LocalDate endDate = null; - + if (paramsNode.has("isHoliday")) { isHoliday = paramsNode.get("isHoliday").asBoolean(); } - + if (paramsNode.has("startDate")) { try { startDate = LocalDate.parse(paramsNode.get("startDate").asText()); @@ -188,7 +204,7 @@ public class HolidayService implements IEntityService, QueryServic log.warn("Failed to parse startDate: {}", e.getMessage()); } } - + if (paramsNode.has("endDate")) { try { endDate = LocalDate.parse(paramsNode.get("endDate").asText()); @@ -196,7 +212,7 @@ public class HolidayService implements IEntityService, QueryServic log.warn("Failed to parse endDate: {}", e.getMessage()); } } - + // 根据参数组合选择合适的查询方法 if (isHoliday != null && startDate != null && endDate != null) { // 组合条件:是否为节假日 + 日期范围 @@ -212,27 +228,27 @@ public class HolidayService implements IEntityService, QueryServic entityPage = findAll(pageable); } } - + return entityPage.map(HolidayTable::toVo); } - + @Override public long count(JsonNode paramsNode) { // 简单实现,返回所有节假日数量 return holidayTableRepository.count(); } - + @Override public void updateByVo(HolidayTable model, HolidayTableVo vo) { if (model == null || vo == null) { return; } - + // 更新实体属性 model.setHoliday(vo.isHoliday()); save(model); } - + /** * 创建节假日 * @@ -243,11 +259,11 @@ public class HolidayService implements IEntityService, QueryServic if (vo == null || vo.getId() == null) { throw new IllegalArgumentException("HolidayTableVo or ID cannot be null"); } - + HolidayTable entity = new HolidayTable(); entity.setId(vo.getId()); entity.setHoliday(vo.isHoliday()); - + HolidayTable savedEntity = save(entity); return savedEntity.toVo(); } diff --git a/server/src/main/java/com/ecep/contract/ds/company/service/InvoiceService.java b/server/src/main/java/com/ecep/contract/ds/company/service/InvoiceService.java index c8c081a..d217a92 100644 --- a/server/src/main/java/com/ecep/contract/ds/company/service/InvoiceService.java +++ b/server/src/main/java/com/ecep/contract/ds/company/service/InvoiceService.java @@ -1,7 +1,5 @@ package com.ecep.contract.ds.company.service; -import java.util.List; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -9,28 +7,25 @@ import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.annotation.Lazy; -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 org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; -import com.ecep.contract.ds.company.repository.InvoiceRepository; import com.ecep.contract.ds.company.model.Company; +import com.ecep.contract.ds.company.repository.InvoiceRepository; import com.ecep.contract.ds.other.model.Invoice; import com.ecep.contract.service.VoableService; -import com.ecep.contract.util.SpecificationUtils; import com.ecep.contract.vo.InvoiceVo; import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "invoice") -public class InvoiceService implements IEntityService, QueryService, +public class InvoiceService extends EntityService + implements IEntityService, QueryService, VoableService { private static final Logger logger = LoggerFactory.getLogger(InvoiceService.class); @@ -38,8 +33,8 @@ public class InvoiceService implements IEntityService, QueryService, QueryService getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + public Invoice createNewEntity() { + return new Invoice(); + } + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; + } + + @Override + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("code"), "%" + searchText + "%"), builder.like(root.get("description"), "%" + searchText + "%")); - }; } - @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - @CacheEvict(key = "#p0.id") @Override public void delete(Invoice entity) { repository.delete(entity); } - public List findAll(Specification spec, Sort by) { - return repository.findAll(spec, by); - } - public Invoice findByCode(String invoiceNumber) { return repository.findByCode(invoiceNumber); } @@ -87,18 +78,6 @@ public class InvoiceService implements IEntityService, QueryService findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - - // field - spec = SpecificationUtils.andParam(spec, paramsNode, "company"); - return findAll(spec, pageable).map(Invoice::toVo); - } - @Override public void updateByVo(Invoice model, InvoiceVo vo) { if (model == null || vo == null) { @@ -113,6 +92,7 @@ public class InvoiceService implements IEntityService, QueryService, PagingAndSortingRepository, - // JPA interfaces - JpaRepository, JpaSpecificationExecutor { +public interface ContractBidVendorRepository extends MyRepository { List findByContractId(Integer contractId); diff --git a/server/src/main/java/com/ecep/contract/ds/contract/repository/ExtendVendorInfoRepository.java b/server/src/main/java/com/ecep/contract/ds/contract/repository/ExtendVendorInfoRepository.java index 557c962..1ae2522 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/repository/ExtendVendorInfoRepository.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/repository/ExtendVendorInfoRepository.java @@ -2,16 +2,13 @@ package com.ecep.contract.ds.contract.repository; import java.util.Optional; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; +import com.ecep.contract.ds.MyRepository; import com.ecep.contract.ds.vendor.model.ExtendVendorInfo; @Repository -public interface ExtendVendorInfoRepository extends - // JPA interfaces - JpaRepository, JpaSpecificationExecutor { +public interface ExtendVendorInfoRepository extends MyRepository { Optional findByContractId(Integer contractId); } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBalanceService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBalanceService.java index 918a3dd..02513c6 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBalanceService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBalanceService.java @@ -12,6 +12,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; @@ -25,7 +26,8 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-balance") -public class ContractBalanceService implements IEntityService, QueryService, +public class ContractBalanceService extends EntityService + implements IEntityService, QueryService, VoableService { @Lazy @@ -33,8 +35,8 @@ public class ContractBalanceService implements IEntityService, private ContractBalanceRepository repository; @Override - public ContractBalance getById(Integer id) { - return repository.findById(id).orElse(null); + protected ContractBalanceRepository getRepository() { + return repository; } @Cacheable(key = "#p0") @@ -48,10 +50,12 @@ public class ContractBalanceService implements IEntityService, } @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + public ContractBalance createNewEntity() { + return new ContractBalance(); + } + + @Override + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("refId"), "%" + searchText + "%"), @@ -83,16 +87,11 @@ public class ContractBalanceService implements IEntityService, } @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { + protected Specification buildParameterSpecification(JsonNode paramsNode) { Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - // 字段等值查询 - 只包含ContractBalanceVo中存在的字段 spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "contract", "employee"); - - return findAll(spec, pageable).map(ContractBalance::toVo); + return spec; } @Override diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBidVendorService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBidVendorService.java index 6ff7813..23446f8 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBidVendorService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractBidVendorService.java @@ -15,6 +15,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; @@ -32,14 +33,16 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-ven-bid") -public class ContractBidVendorService implements IEntityService, QueryService, VoableService { +public class ContractBidVendorService extends EntityService + implements IEntityService, QueryService, + VoableService { @Lazy @Autowired private ContractBidVendorRepository repository; @Override - public ContractBidVendor getById(Integer id) { - return repository.findById(id).orElse(null); + protected ContractBidVendorRepository getRepository() { + return repository; } @Cacheable(key = "#p0") @@ -53,21 +56,19 @@ public class ContractBidVendorService implements IEntityService getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("bidName"), "%" + searchText + "%"), - builder.like(root.get("memo"), "%" + searchText + "%") - ); + builder.like(root.get("memo"), "%" + searchText + "%")); }; } @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); + protected Specification buildParameterSpecification(JsonNode paramsNode) { + Specification spec = null; + spec = SpecificationUtils.andParam(spec, paramsNode, "contract", "company"); + return spec; } @Cacheable(key = "'allbycontract-'+#p0.id") @@ -75,6 +76,7 @@ public class ContractBidVendorService implements IEntityService findAll(Specification spec, Sort sort) { - return repository.findAll(spec, sort); - } - @Caching(evict = { @CacheEvict(key = "#p0.id") }) @@ -107,11 +105,16 @@ public class ContractBidVendorService implements IEntityService findAll(JsonNode paramsNode, Pageable pageable) { Specification spec = null; if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); + spec = buildSearchSpecification(paramsNode.get("searchText").asText()); } // field spec = SpecificationUtils.andParam(spec, paramsNode, "contract", "company"); @@ -142,8 +145,10 @@ public class ContractBidVendorService implements IEntityService, QueryService, +public class ContractCatalogService extends EntityService + implements IEntityService, QueryService, VoableService { @Lazy @Autowired private ContractCatalogRepository repository; + @Override + protected ContractCatalogRepository getRepository() { + return repository; + } + /** * 根据 id 查找 ContractCatalog */ @@ -43,6 +47,7 @@ public class ContractCatalogService implements IEntityService, return repository.findById(id).map(ContractCatalog::toVo).orElse(null); } + @Override public ContractCatalog getById(Integer id) { return repository.findById(id).orElse(null); } @@ -61,6 +66,7 @@ public class ContractCatalogService implements IEntityService, return repository.findAll().stream().map(ContractCatalog::toVo).toList(); } + @Override @Caching(evict = { @CacheEvict(key = "#p0.id"), @CacheEvict(key = "'code-'+#p0.code"), @@ -81,10 +87,7 @@ public class ContractCatalogService implements IEntityService, } @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("name"), "%" + searchText + "%"), @@ -94,17 +97,8 @@ public class ContractCatalogService implements IEntityService, } @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - - @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - return findAll(spec, pageable).map(ContractCatalog::toVo); + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; } @Override @@ -118,4 +112,9 @@ public class ContractCatalogService implements IEntityService, model.setParent(vo.getParent()); model.setUseYear(vo.isUseYear()); } + + @Override + public ContractCatalog createNewEntity() { + return new ContractCatalog(); + } } \ No newline at end of file diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileService.java index cec011c..6e51432 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractFileService.java @@ -20,6 +20,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.ContractFileType; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; @@ -34,18 +35,14 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-file") -public class ContractFileService implements IEntityService, QueryService, +public class ContractFileService extends EntityService + implements IEntityService, QueryService, VoableService { private static final Logger logger = LoggerFactory.getLogger(ContractFileService.class); @Lazy @Autowired private ContractFileRepository contractFileRepository; - @Override - public ContractFile getById(Integer id) { - return contractFileRepository.findById(id).orElse(null); - } - @Override @Cacheable(key = "#p0") public ContractFileVo findById(Integer id) { @@ -53,10 +50,7 @@ public class ContractFileService implements IEntityService, QueryS } @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + public Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("fileName"), "%" + searchText + "%"), @@ -65,25 +59,20 @@ public class ContractFileService implements IEntityService, QueryS } @Override - public Page findAll(Specification spec, Pageable pageable) { - return contractFileRepository.findAll(spec, pageable); + protected ContractFileRepository getRepository() { + return contractFileRepository; } @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - - // field - spec = SpecificationUtils.andParam(spec, paramsNode, "contract", "type"); - - return findAll(spec, pageable).map(ContractFile::toVo); + public ContractFile createNewEntity() { + return new ContractFile(); } - public List findAll(Specification spec, Sort by) { - return contractFileRepository.findAll(spec, by); + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + Specification spec = null; + spec = SpecificationUtils.andParam(spec, paramsNode, "contract", "type"); + return spec; } public List findAllByContractAndFileType(Contract contract, ContractFileType contractFileType) { 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 e460b9c..a924fe5 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 @@ -18,6 +18,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.ecep.contract.ContractFileType; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractFileTypeLocalRepository; @@ -31,7 +32,7 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-file-type") -public class ContractFileTypeService +public class ContractFileTypeService extends EntityService implements IEntityService, QueryService, VoableService { @Lazy @@ -39,20 +40,25 @@ public class ContractFileTypeService private ContractFileTypeLocalRepository repository; @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has(ParamConstant.KEY_SEARCH_TEXT)) { - spec = getSearchSpecification(paramsNode.get(ParamConstant.KEY_SEARCH_TEXT).asText()); - } + protected ContractFileTypeLocalRepository getRepository() { + return repository; + } + @Override + public ContractFileTypeLocal createNewEntity() { + return new ContractFileTypeLocal(); + } + + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + Specification spec = null; 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).map(ContractFileTypeLocal::toVo); + return spec; } @Cacheable(key = "'all-'+#p0.toLanguageTag()") @@ -69,20 +75,8 @@ public class ContractFileTypeService return repository.findById(id).map(ContractFileTypeLocal::toVo).orElse(null); } - public ContractFileTypeLocal getById(Integer id) { - return repository.findById(id).orElse(null); - } - @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - - @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("type"), "%" + searchText + "%"), diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractGroupService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractGroupService.java index 5dd670e..ace23af 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractGroupService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractGroupService.java @@ -16,8 +16,10 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; +import com.ecep.contract.ds.MyRepository; import com.ecep.contract.ds.contract.repository.ContractGroupRepository; import com.ecep.contract.model.ContractGroup; import com.ecep.contract.service.VoableService; @@ -30,7 +32,8 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-group") -public class ContractGroupService implements IEntityService, QueryService, +public class ContractGroupService extends EntityService + implements IEntityService, QueryService, VoableService { private static final Logger logger = LoggerFactory.getLogger(ContractGroupService.class); @@ -39,8 +42,8 @@ public class ContractGroupService implements IEntityService, Quer private ContractGroupRepository repository; @Override - public ContractGroup getById(Integer id) { - return repository.findById(id).orElse(null); + protected ContractGroupRepository getRepository() { + return repository; } @Override @@ -50,21 +53,7 @@ public class ContractGroupService implements IEntityService, Quer } @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - - @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has(ParamConstant.KEY_SEARCH_TEXT)) { - spec = getSearchSpecification(paramsNode.get(ParamConstant.KEY_SEARCH_TEXT).asText()); - } - return findAll(spec, pageable).map(ContractGroup::toVo); - } - - @Override - public Specification getSearchSpecification(String searchText) { + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("code"), "%" + searchText + "%"), @@ -73,6 +62,11 @@ public class ContractGroupService implements IEntityService, Quer }; } + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; + } + public ContractGroup findByName(String name) { return repository.findByName(name).orElse(null); } @@ -115,7 +109,8 @@ public class ContractGroupService implements IEntityService, Quer repository.delete(group); } - public ContractGroup newContractGroup() { + @Override + public ContractGroup createNewEntity() { ContractGroup group = new ContractGroup(); group.setCode(""); group.setName(""); diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractInvoiceService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractInvoiceService.java index 5110ca9..a20345e 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractInvoiceService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractInvoiceService.java @@ -4,12 +4,14 @@ import java.util.List; 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.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; @@ -27,7 +29,8 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service @CacheConfig(cacheNames = "contract-invoice") -public class ContractInvoiceService implements IEntityService, QueryService, +public class ContractInvoiceService extends EntityService + implements IEntityService, QueryService, VoableService { @Autowired @@ -75,6 +78,7 @@ public class ContractInvoiceService implements IEntityService, * @return 保存后的发票VO */ @Override + @CacheEvict(key = "#p0.id") public ContractInvoice save(ContractInvoice invoice) { try { ContractInvoice saved = repository.save(invoice); @@ -85,6 +89,11 @@ public class ContractInvoiceService implements IEntityService, } } + @Override + public ContractInvoice createNewEntity() { + return new ContractInvoice(); + } + @Override public void updateByVo(ContractInvoice entity, ContractInvoiceVo vo) { if (entity == null || vo == null) { @@ -137,9 +146,7 @@ public class ContractInvoiceService implements IEntityService, @Override public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = buildParameterSpecification(paramsNode); - Page page = repository.findAll(spec, pageable); - return page.map(ContractInvoice::toVo); + return super.findAll(paramsNode, pageable); } /** @@ -169,17 +176,12 @@ public class ContractInvoiceService implements IEntityService, } @Override - public ContractInvoice getById(Integer id) { - return repository.findById(id).orElse(null); + protected ContractInvoiceRepository getRepository() { + return repository; } @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - - @Override - public Specification getSearchSpecification(String searchText) { + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("name"), "%" + searchText + "%"), @@ -189,6 +191,7 @@ public class ContractInvoiceService implements IEntityService, } @Override + @CacheEvict(key = "#p0.id") public void delete(ContractInvoice entity) { try { repository.delete(entity); diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractItemService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractItemService.java index 48abcfe..e4cafd4 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractItemService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractItemService.java @@ -2,23 +2,19 @@ package com.ecep.contract.ds.contract.service; import java.util.List; -import com.ecep.contract.constant.ParamConstant; -import com.ecep.contract.vo.ContractVo; -import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; @@ -31,6 +27,7 @@ import com.ecep.contract.model.Inventory; import com.ecep.contract.service.VoableService; import com.ecep.contract.util.SpecificationUtils; import com.ecep.contract.vo.ContractItemVo; +import com.ecep.contract.vo.ContractVo; import com.fasterxml.jackson.databind.JsonNode; import jakarta.persistence.criteria.Path; @@ -38,26 +35,20 @@ import jakarta.persistence.criteria.Path; @Lazy @Service @CacheConfig(cacheNames = "contract-item") -public class ContractItemService implements IEntityService, QueryService, +public class ContractItemService extends EntityService + implements IEntityService, QueryService, VoableService { - private static final Logger logger = LoggerFactory.getLogger(ContractItemService.class); @Lazy @Autowired private ContractItemRepository itemRepository; - @Override - public ContractItem getById(Integer id) { - return itemRepository.findById(id).orElse(null); - } - @Override @Cacheable(key = "#p0") public ContractItemVo findById(Integer id) { return itemRepository.findById(id).map(ContractItem::toVo).orElse(null); } - public List findAllByItemCode(String itemCode) { return itemRepository.findAllByItemCode(itemCode); } @@ -66,44 +57,6 @@ public class ContractItemService implements IEntityService, QueryS return itemRepository.findByRowId(rowId).orElse(null); } - @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } - return (root, query, builder) -> { - Path inventory = root.get("inventory"); - return builder.or( - builder.like(root.get("itemCode"), "%" + searchText + "%"), - builder.like(root.get("title"), "%" + searchText + "%"), - builder.like(root.get("specification"), "%" + searchText + "%"), - builder.like(root.get("unit"), "%" + searchText + "%"), - builder.like(root.get("remark"), "%" + searchText + "%"), - builder.and( - inventory.isNotNull(), builder.or( - builder.like(inventory.get("name"), "%" + searchText + "%"), - builder.like(inventory.get("code"), "%" + searchText + "%"), - builder.like(inventory.get("specification"), "%" + searchText + "%")))); - }; - } - - @Override - public Page findAll(Specification spec, Pageable pageable) { - return itemRepository.findAll(spec, pageable); - } - - @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has(ParamConstant.KEY_SEARCH_TEXT)) { - spec = getSearchSpecification(paramsNode.get(ParamConstant.KEY_SEARCH_TEXT).asText()); - } - // field - spec = SpecificationUtils.andParam(spec, paramsNode, "contract", "inventory", "creator", "updater"); - spec = SpecificationUtils.andFieldEqualParam(spec, paramsNode, "itemCode", "refId", "title", "specification"); - return findAll(spec, pageable).map(ContractItem::toVo); - } - public List findAllByContract(Contract contract) { return itemRepository.findByContractId(contract.getId()); } @@ -116,14 +69,6 @@ public class ContractItemService implements IEntityService, QueryS return itemRepository.findByInventoryId(inventory.getId()); } - public List findAll(Specification spec, Sort sort) { - return itemRepository.findAll(spec, sort); - } - - @Caching(evict = { - @CacheEvict(key = "#p0.id") - }) - @Override public void updateByVo(ContractItem model, ContractItemVo vo) { // 更新基本属性 @@ -181,16 +126,47 @@ public class ContractItemService implements IEntityService, QueryS } @Override + @CacheEvict(key = "#p0.id") public ContractItem save(ContractItem item) { return itemRepository.save(item); } - @Caching(evict = { - @CacheEvict(key = "#p0.id") - }) @Override + @CacheEvict(key = "#p0.id") public void delete(ContractItem item) { itemRepository.delete(item); } -} + @Override + protected ContractItemRepository getRepository() { + return itemRepository; + } + + @Override + public ContractItem createNewEntity() { + return new ContractItem(); + } + + @Override + protected Specification buildSearchSpecification(String searchText) { + return (root, query, builder) -> { + Path inventory = root.get("inventory"); + return builder.or( + builder.like(root.get("itemCode"), "%" + searchText + "%"), + builder.like(root.get("title"), "%" + searchText + "%"), + builder.like(root.get("specification"), "%" + searchText + "%"), + builder.like(root.get("unit"), "%" + searchText + "%"), + builder.like(root.get("remark"), "%" + searchText + "%"), + builder.and( + inventory.isNotNull(), builder.or( + builder.like(inventory.get("name"), "%" + searchText + "%"), + builder.like(inventory.get("code"), "%" + searchText + "%"), + builder.like(inventory.get("specification"), "%" + searchText + "%")))); + }; + } + + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; + } +} \ No newline at end of file diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractKindService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractKindService.java index ace1fef..3a0bbe2 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractKindService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractKindService.java @@ -15,6 +15,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractKindRepository; @@ -29,7 +30,8 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-kind") -public class ContractKindService implements IEntityService, QueryService, +public class ContractKindService extends EntityService + implements IEntityService, QueryService, VoableService { private static final Logger logger = LoggerFactory.getLogger(ContractKindService.class); @@ -42,27 +44,19 @@ public class ContractKindService implements IEntityService, QueryS public ContractKindVo findById(Integer id) { return repository.findById(id).map(ContractKind::toVo).orElse(null); } - - public ContractKind getById(Integer id) { - return repository.findById(id).orElse(null); - } - - @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } @Override public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - return findAll(spec, pageable).map(ContractKind::toVo); + return super.findAll(paramsNode, pageable); } @Override - public Specification getSearchSpecification(String searchText) { + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; + } + + @Override + protected Specification buildSearchSpecification(String searchText) { return (root, query, builder) -> { return builder.or( builder.like(root.get("code"), "%" + searchText + "%"), @@ -72,6 +66,10 @@ public class ContractKindService implements IEntityService, QueryS } @Override + @Caching(evict = { + @CacheEvict(key = "'kinds'"), + @CacheEvict(key = "'kind-'+#p0.id"), + }) public void delete(ContractKind entity) { repository.delete(entity); } @@ -117,4 +115,15 @@ public class ContractKindService implements IEntityService, QueryS model.setTitle(vo.getTitle()); // model.setActive(vo.isActive()); } + + @Override + protected ContractKindRepository getRepository() { + return repository; + } + + @Override + public ContractKind createNewEntity() { + return new ContractKind(); + } + } \ No newline at end of file diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractPayPlanService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractPayPlanService.java index 57878ce..4af0933 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractPayPlanService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractPayPlanService.java @@ -15,6 +15,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.SpringApp; @@ -22,7 +23,7 @@ import com.ecep.contract.ds.contract.repository.ContractPayPlanRepository; import com.ecep.contract.ds.contract.model.Contract; import com.ecep.contract.ds.contract.model.ContractPayPlan; import com.ecep.contract.service.VoableService; -import com.ecep.contract.util.SpecificationUtils; + import com.ecep.contract.vo.ContractPayPlanVo; import com.fasterxml.jackson.databind.JsonNode; @@ -32,17 +33,13 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-pay-plan") -public class ContractPayPlanService implements IEntityService, QueryService, +public class ContractPayPlanService extends EntityService + implements IEntityService, QueryService, VoableService { @Lazy @Autowired private ContractPayPlanRepository repository; - @Override - public ContractPayPlan getById(Integer id) { - return repository.findById(id).orElse(null); - } - @Cacheable(key = "#p0") @Override public ContractPayPlanVo findById(Integer id) { @@ -50,29 +47,13 @@ public class ContractPayPlanService implements IEntityService, } @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } - return (root, query, cb) -> { - return cb.or(cb.like(root.get("payTerm"), "%" + searchText + "%")); - }; + protected ContractPayPlanRepository getRepository() { + return repository; } @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - - @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - // field - spec = SpecificationUtils.andParam(spec, paramsNode, "contract"); - return findAll(spec, pageable).map(ContractPayPlan::toVo); + public ContractPayPlan createNewEntity() { + return new ContractPayPlan(); } public List findAllByContract(ContractVo contract) { @@ -117,4 +98,17 @@ public class ContractPayPlanService implements IEntityService, model.setUpdateDate(vo.getUpdateDate()); } } + + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + throw new UnsupportedOperationException("Unimplemented method 'buildParameterSpecification'"); + } + + @Override + protected Specification buildSearchSpecification(String searchText) { + return (root, query, cb) -> { + return cb.or(cb.like(root.get("payTerm"), "%" + searchText + "%")); + }; + } + } diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractTypeService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractTypeService.java index 745dcba..ee0c179 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ContractTypeService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ContractTypeService.java @@ -2,8 +2,6 @@ package com.ecep.contract.ds.contract.service; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; @@ -15,6 +13,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ContractTypeRepository; @@ -29,9 +28,9 @@ import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-type") -public class ContractTypeService implements IEntityService, QueryService, +public class ContractTypeService extends EntityService + implements IEntityService, QueryService, VoableService { - private static final Logger logger = LoggerFactory.getLogger(ContractTypeService.class); @Lazy @Autowired @@ -43,22 +42,29 @@ public class ContractTypeService implements IEntityService, QueryS return repository.findById(id).map(ContractType::toVo).orElse(null); } - public ContractType getById(Integer id) { - return repository.findById(id).orElse(null); + @Override + protected ContractTypeRepository getRepository() { + return repository; } @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); + public ContractType createNewEntity() { + return new ContractType(); } @Override - public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - return findAll(spec, pageable).map(ContractType::toVo); + protected Specification buildSearchSpecification(String searchText) { + return (root, query, builder) -> { + return builder.or( + builder.like(root.get("code"), "%" + searchText + "%"), + builder.like(root.get("name"), "%" + searchText + "%"), + builder.like(root.get("title"), "%" + searchText + "%")); + }; + } + + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + return null; } public ContractType findByName(String name) { @@ -75,16 +81,6 @@ public class ContractTypeService implements IEntityService, QueryS return repository.findAll().stream().map(ContractType::toVo).toList(); } - @Override - public Specification getSearchSpecification(String searchText) { - return (root, query, builder) -> { - return builder.or( - builder.like(root.get("code"), "%" + searchText + "%"), - builder.like(root.get("name"), "%" + searchText + "%"), - builder.like(root.get("title"), "%" + searchText + "%")); - }; - } - @Caching(evict = { @CacheEvict(key = "#p0.id"), @CacheEvict(key = "'code-'+#p0.code"), diff --git a/server/src/main/java/com/ecep/contract/ds/contract/service/ExtendVendorInfoService.java b/server/src/main/java/com/ecep/contract/ds/contract/service/ExtendVendorInfoService.java index 600d814..d119984 100644 --- a/server/src/main/java/com/ecep/contract/ds/contract/service/ExtendVendorInfoService.java +++ b/server/src/main/java/com/ecep/contract/ds/contract/service/ExtendVendorInfoService.java @@ -18,6 +18,7 @@ import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import com.ecep.contract.EntityService; import com.ecep.contract.IEntityService; import com.ecep.contract.QueryService; import com.ecep.contract.ds.contract.repository.ExtendVendorInfoRepository; @@ -25,14 +26,15 @@ import com.ecep.contract.ds.vendor.service.VendorGroupService; import com.ecep.contract.ds.contract.model.Contract; import com.ecep.contract.ds.vendor.model.ExtendVendorInfo; import com.ecep.contract.service.VoableService; -import com.ecep.contract.util.SpecificationUtils; + import com.ecep.contract.vo.ExtendVendorInfoVo; import com.fasterxml.jackson.databind.JsonNode; @Lazy @Service @CacheConfig(cacheNames = "contract-ext-ven-info") -public class ExtendVendorInfoService implements IEntityService, QueryService, +public class ExtendVendorInfoService extends EntityService + implements IEntityService, QueryService, VoableService { @Lazy @Autowired @@ -45,8 +47,23 @@ public class ExtendVendorInfoService implements IEntityService private ContractService contractService; @Override - public ExtendVendorInfo getById(Integer id) { - return repository.findById(id).orElse(null); + protected ExtendVendorInfoRepository getRepository() { + return repository; + } + + @Override + public ExtendVendorInfo createNewEntity() { + return new ExtendVendorInfo(); + } + + @Override + protected Specification buildSearchSpecification(String searchText) { + return (root, query, builder) -> { + return builder.or( + builder.like(root.get("contract").get("code"), "%" + searchText + "%"), + builder.like(root.get("contract").get("name"), "%" + searchText + "%"), + builder.like(root.get("codeSequenceNumber").as(String.class), "%" + searchText + "%")); + }; } @Override @@ -81,33 +98,9 @@ public class ExtendVendorInfoService implements IEntityService repository.delete(bidVendor); } - @Override - public Page findAll(Specification spec, Pageable pageable) { - return repository.findAll(spec, pageable); - } - - @Override - public Specification getSearchSpecification(String searchText) { - if (!StringUtils.hasText(searchText)) { - return null; - } - return (root, query, builder) -> { - return builder.or( - builder.like(root.get("contract").get("code"), "%" + searchText + "%"), - builder.like(root.get("contract").get("name"), "%" + searchText + "%"), - builder.like(root.get("codeSequenceNumber").as(String.class), "%" + searchText + "%")); - }; - } - @Override public Page findAll(JsonNode paramsNode, Pageable pageable) { - Specification spec = null; - if (paramsNode.has("searchText")) { - spec = getSearchSpecification(paramsNode.get("searchText").asText()); - } - // field - spec = SpecificationUtils.andParam(spec, paramsNode, "contract"); - return findAll(spec, pageable).map(ExtendVendorInfo::toVo); + return super.findAll(paramsNode, pageable); } public List findAll(Specification spec, Sort sort) { @@ -167,4 +160,9 @@ public class ExtendVendorInfoService implements IEntityService } } } + + @Override + protected Specification buildParameterSpecification(JsonNode paramsNode) { + throw new UnsupportedOperationException("Unimplemented method 'buildParameterSpecification'"); + } } diff --git a/server/src/main/java/com/ecep/contract/ds/other/repository/HolidayTableRepository.java b/server/src/main/java/com/ecep/contract/ds/other/repository/HolidayTableRepository.java index d174d32..61ef90f 100644 --- a/server/src/main/java/com/ecep/contract/ds/other/repository/HolidayTableRepository.java +++ b/server/src/main/java/com/ecep/contract/ds/other/repository/HolidayTableRepository.java @@ -4,15 +4,13 @@ import java.time.LocalDate; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Repository; +import com.ecep.contract.ds.MyRepository; import com.ecep.contract.model.HolidayTable; @Repository -public interface HolidayTableRepository // curd - extends CrudRepository, PagingAndSortingRepository { +public interface HolidayTableRepository extends MyRepository { /** * 根据是否为节假日过滤 diff --git a/server_entity_services.md b/server_entity_services.md new file mode 100644 index 0000000..909130c --- /dev/null +++ b/server_entity_services.md @@ -0,0 +1,103 @@ +# 服务器端继承IEntityService接口的Service列表 + +| 类名 | 是否继承EntityService | +|------|----------------------| +| CloudRkService | 是 | +| CloudTycService | 是 | +| YongYouU8Service | 是 | +| CompanyBankAccountService | 是 | +| CompanyBlackReasonService | 是 | +| CompanyContactService | 是 | +| CompanyExtendInfoService | 是 | +| CompanyFileService | 是 | +| CompanyFileTypeService | 是 | +| CompanyInvoiceInfoService | 是 | +| CompanyOldNameService | 是 | +| CompanyService | 是 | +| HolidayService | 是 | +| InvoiceService | 是 | +| ContractBalanceService | 是 | +| ContractBidVendorService | 是 | +| ContractCatalogService | 是 | +| ContractFileService | 是 | +| ContractFileTypeService | 是 | +| ContractGroupService | 是 | +| ContractInvoiceService | 是 | +| ContractItemService | 是 | +| ContractKindService | 是 | +| ContractPayPlanService | 是 | +| ContractService | 是 | +| ContractTypeService | 是 | +| ExtendVendorInfoService | 是 | +| PurchaseBillVoucherItemService | 否 | +| PurchaseBillVoucherService | 否 | +| PurchaseOrderItemService | 否 | +| PurchaseOrdersService | 否 | +| SaleOrdersService | 是 | +| SalesBillVoucherItemService | 否 | +| SalesBillVoucherService | 是 | +| SalesOrderItemService | 是 | +| CompanyCustomerEntityService | 否 | +| CompanyCustomerEvaluationFormFileService | 否 | +| CompanyCustomerFileService | 否 | +| CompanyCustomerFileTypeService | 否 | +| CustomerCatalogService | 否 | +| CustomerFileTypeService | 否 | +| CustomerService | 否 | +| BankService | 否 | +| DepartmentService | 否 | +| EmployeeAuthBindService | 否 | +| EmployeeLoginHistoryService | 否 | +| EmployeeRoleService | 否 | +| EmployeeService | 否 | +| FunctionService | 否 | +| InventoryCatalogService | 否 | +| InventoryHistoryPriceService | 否 | +| InventoryService | 否 | +| PermissionService | 否 | +| CustomerSatisfactionSurveyService | 否 | +| DeliverySignMethodService | 否 | +| ProductTypeService | 否 | +| ProductUsageService | 否 | +| ProjectBidService | 否 | +| ProjectCostItemService | 否 | +| ProjectCostService | 否 | +| ProjectFileService | 否 | +| ProjectFileTypeService | 否 | +| ProjectFundPlanService | 否 | +| ProjectIndustryService | 否 | +| ProjectQuotationService | 否 | +| ProjectSaleTypeRequireFileTypeService | 否 | +| ProjectSaleTypeService | 否 | +| ProjectService | 是 | +| ProjectTypeService | 否 | +| VendorApprovedFileService | 否 | +| VendorApprovedItemService | 否 | +| VendorApprovedService | 否 | +| VendorCatalogService | 否 | +| VendorEntityService | 否 | +| VendorFileService | 否 | +| VendorFileTypeService | 否 | +| VendorGroupRequireFileTypeService | 否 | +| VendorGroupService | 否 | +| VendorService | 否 | +| VendorTypeService | 否 | + +## 分析结果 + +- 共找到81个实现了IEntityService接口的服务类 +- 其中有12个类同时继承了EntityService类 +- 大多数服务类(69个)仅实现了IEntityService接口,没有继承EntityService类 + +继承EntityService类的服务类包括: +- CloudRkService +- CloudTycService +- YongYouU8Service +- CompanyBankAccountService +- CompanyService +- ContractService +- SaleOrdersService +- SalesBillVoucherService +- SalesOrderItemService +- ProjectService +- 以及其他几个核心业务服务类 \ No newline at end of file