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 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 default String generateId() {
return UUIDUtils.create();
}
+
+ public default Specification<E> convertToSpec(Map<String, Object> mapBean) {
+ return null;
+ }
+ public default Sort convertToSort(Map<String, String> orderBy) {
+ return null;
+ }
public default Page<E> selectPageList(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
+ Specification<E> 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<E> page = this.findAll(pageRequest);
+ Page<E> 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 @@
// return page;
// }
+
@Override
- public default Page<Account> selectPageList(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> orderBy) {
- if (loadAll) {
- pageIndex = 0;
- pageSize = Integer.MAX_VALUE;
- }
+ public default Specification<Account> convertToSpec(Map<String, Object> mapBean) {
- 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"));
- }
+ Specification<Account> spec = new Specification<Account>() {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 9071470982419099273L;
+
+ @Override
+ public Predicate toPredicate(Root<Account> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+ List<Predicate> 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<Predicate> 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()]));
+ }
+
+ };
- 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<Account> example = Example.of(probe, matcher);
-
- Page<Account> page = this.findAll(example, pageRequest);
-
- return page;
+ return spec;
}
+
+// @Override
+// public default Page<Account> selectPageList(boolean loadAll, int pageIndex, int pageSize, Map<String, Object> mapBean, Map<String, String> 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<Account> example = Example.of(probe, matcher);
+//
+// Page<Account> page = this.findAll(example, pageRequest);
+//
+// return page;
+// }
+
/*
public default User selectById(String id) {