From: 刘洪青 Date: Mon, 2 Sep 2019 06:00:30 +0000 (+0800) Subject: refactor: 优化selectPageList 基类方法,完善帐号搜索逻辑 X-Git-Tag: v0.0.1^2~69 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=7383dd2ca0f4a0f593637e9633befc9876beb07d;p=institute%2Fsw-backend.git refactor: 优化selectPageList 基类方法,完善帐号搜索逻辑 --- diff --git a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java index ef0a932..2be2c31 100644 --- a/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java +++ b/common/framework/src/main/java/com/supwisdom/institute/backend/common/framework/repo/BaseJpaRepository.java @@ -6,6 +6,8 @@ import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.NoRepositoryBean; @@ -26,21 +28,38 @@ public interface BaseJpaRepository extends JpaRepository< public default String generateId() { return UUIDUtils.create(); } + + public default Specification convertToSpec(Map mapBean) { + return null; + } + public default Sort convertToSort(Map orderBy) { + return null; + } public default Page selectPageList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { + Specification spec = convertToSpec(mapBean); + if (loadAll) { pageIndex = 0; pageSize = Integer.MAX_VALUE; } + + Sort sort = convertToSort(orderBy); PageRequest pageRequest = PageRequest.of(pageIndex, pageSize); + if (sort != null) { + pageRequest = PageRequest.of(pageIndex, pageSize, sort); + } - Page page = this.findAll(pageRequest); + Page page = this.findAll(spec, pageRequest); return page; } + + + public default E selectById(String id) { try { diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/AccountRepository.java b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/AccountRepository.java index e23f46e..dcc27b1 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/AccountRepository.java +++ b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/AccountRepository.java @@ -1,15 +1,26 @@ package com.supwisdom.institute.backend.system.domain.repo; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; import java.util.Map; import java.util.Optional; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; + import org.springframework.data.domain.Example; import org.springframework.data.domain.ExampleMatcher; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Repository; +import org.springframework.util.StringUtils; import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository; +import com.supwisdom.institute.backend.common.util.DateUtil; import com.supwisdom.institute.backend.common.util.MapBeanUtils; import com.supwisdom.institute.backend.system.domain.entity.Account; @@ -31,35 +42,104 @@ public interface AccountRepository extends BaseJpaRepository { // return page; // } + @Override - public default Page selectPageList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { - if (loadAll) { - pageIndex = 0; - pageSize = Integer.MAX_VALUE; - } - - Account probe = new Account(); - if (mapBean != null) { - probe.setDeleted(MapBeanUtils.getBoolean(mapBean, "deleted")); - probe.setUsername(MapBeanUtils.getString(mapBean, "username")); - probe.setName(MapBeanUtils.getString(mapBean, "name")); - probe.setStatus(MapBeanUtils.getString(mapBean, "status")); - } - - ExampleMatcher matcher = ExampleMatcher.matching() - .withMatcher("deleted", ExampleMatcher.GenericPropertyMatchers.exact()) - .withMatcher("username", ExampleMatcher.GenericPropertyMatchers.contains()) - .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains()) - .withMatcher("status", ExampleMatcher.GenericPropertyMatchers.exact()); + public default Specification convertToSpec(Map mapBean) { - PageRequest pageRequest = PageRequest.of(pageIndex, pageSize); - Example example = Example.of(probe, matcher); - - Page page = this.findAll(example, pageRequest); + Specification spec = new Specification() { + + /** + * + */ + private static final long serialVersionUID = 9071470982419099273L; + + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { + List predicates = new ArrayList<>(); + + if (mapBean != null) { + + if (MapBeanUtils.getBoolean(mapBean, "deleted") != null) { + predicates.add(criteriaBuilder.equal(root.get("deleted"), MapBeanUtils.getBoolean(mapBean, "deleted"))); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "username"))) { + predicates.add(criteriaBuilder.like(root.get("username"), "%" + MapBeanUtils.getString(mapBean, "username") + "%")); + } + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "name"))) { + predicates.add(criteriaBuilder.like(root.get("name"), "%" + MapBeanUtils.getString(mapBean, "name") + "%")); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "status"))) { + predicates.add(criteriaBuilder.equal(root.get("status"), MapBeanUtils.getString(mapBean, "status"))); + } + +// if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "grantTimeBegin"))) { +// String grantTimeBegin = MapBeanUtils.getString(mapBean, "grantTimeBegin"); +// Date d = DateUtil.parseDate(grantTimeBegin+" 00:00:00", "yyyy-MM-dd HH:mm:ss"); +// +// if (d != null) { +// predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("grantTime"), d)); +// } +// } +// +// if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "grantTimeEnd"))) { +// String grantTimeEnd = MapBeanUtils.getString(mapBean, "grantTimeEnd"); +// Date d = DateUtil.parseDate(grantTimeEnd+" 23:59:59", "yyyy-MM-dd HH:mm:ss"); +// +// if (d != null) { +// predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("grantTime"), d)); +// } +// } + + List predicatesKeyword = new ArrayList<>(); + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "keyword"))) { + predicatesKeyword.add(criteriaBuilder.like(root.get("username"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%")); + predicatesKeyword.add(criteriaBuilder.like(root.get("name"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%")); + predicatesKeyword.add(criteriaBuilder.like(root.get("memo"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%")); + + predicates.add(criteriaBuilder.or(predicatesKeyword.toArray(new Predicate[predicatesKeyword.size()]))); + } + } + + return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])); + } + + }; - return page; + return spec; } + +// @Override +// public default Page selectPageList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { +// if (loadAll) { +// pageIndex = 0; +// pageSize = Integer.MAX_VALUE; +// } +// +// Account probe = new Account(); +// if (mapBean != null) { +// probe.setDeleted(MapBeanUtils.getBoolean(mapBean, "deleted")); +// probe.setUsername(MapBeanUtils.getString(mapBean, "username")); +// probe.setName(MapBeanUtils.getString(mapBean, "name")); +// probe.setStatus(MapBeanUtils.getString(mapBean, "status")); +// } +// +// ExampleMatcher matcher = ExampleMatcher.matching() +// .withMatcher("deleted", ExampleMatcher.GenericPropertyMatchers.exact()) +// .withMatcher("username", ExampleMatcher.GenericPropertyMatchers.contains()) +// .withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains()) +// .withMatcher("status", ExampleMatcher.GenericPropertyMatchers.exact()); +// +// PageRequest pageRequest = PageRequest.of(pageIndex, pageSize); +// Example example = Example.of(probe, matcher); +// +// Page page = this.findAll(example, pageRequest); +// +// return page; +// } + /* public default User selectById(String id) {