一、创建
package com.ligowave.bill.domain.billsystem.repository;
import com.ligowave.bill.domain.billsystem.entity.BasePackage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
public interface BasePackageRepository extends JpaRepository<BasePackage,Integer>,JpaSpecificationExecutor<BasePackage> {
List<BasePackage> findAllByNameAndOrgId(String name,String orgId);
}
二、创建service
package com.ligowave.bill.service;
import com.ligowave.bill.domain.billsystem.entity.BasePackage;
import com.ligowave.bill.domain.billsystem.query.BasePackageQuery;
import org.springframework.data.domain.Page;
public interface BasePackageService {
Page<BasePackage> findPageList(Integer pageSize, Integer pageNum, BasePackageQuery basePackageQuery);
}
三、service实现
package com.ligowave.bill.service.impl;
import com.ligowave.bill.common.util.DateUtil;
import com.ligowave.bill.domain.billsystem.entity.BasePackage;
import com.ligowave.bill.domain.billsystem.query.BasePackageQuery;
import com.ligowave.bill.domain.billsystem.repository.BasePackageRepository;
import com.ligowave.bill.service.BasePackageService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional(value = "billSystemTransactionManager")
public class BasePackageServiceImpl implements BasePackageService {
@Autowired
BasePackageRepository basePackageRepository;
@Override
public Page<BasePackage> findPageList(Integer pageSize, Integer pageNum, BasePackageQuery basePackageQuery) {
//前台查询第一页数据page从0开始
Pageable pageable = new PageRequest(pageNum-1, pageSize, Sort.Direction.ASC, "id");
Page<BasePackage> basePackages = basePackageRepository.findAll(new Specification<BasePackage>() {
@Override
public Predicate toPredicate(Root<BasePackage> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> list = new ArrayList<>();
if (!StringUtils.isBlank(basePackageQuery.getOrgId())){
list.add(criteriaBuilder.equal(root.get("orgId").as(String.class),basePackageQuery.getOrgId()));
}
if (!StringUtils.isBlank(basePackageQuery.getName())) {
list.add(criteriaBuilder.equal(root.get("name").as(String.class), basePackageQuery.getName()));
}
if (!StringUtils.isBlank(basePackageQuery.getDescription())) {
list.add(criteriaBuilder.equal(root.get("description").as(String.class), basePackageQuery.getDescription()));
}
if (basePackageQuery.getWhetherReferenced() == 0) {
//被引用
list.add(criteriaBuilder.gt(root.get("whetherReferenced").as(Integer.class), 0));
} else {
//未引用
list.add(criteriaBuilder.lt(root.get("whetherReferenced").as(Integer.class), 1));
}
if (!StringUtils.isBlank(basePackageQuery.getBeforeBegintime())) {
list.add(criteriaBuilder.ge(root.get("beginTime").as(Long.class), DateUtil.dateStrToLong(basePackageQuery.getBeforeBegintime())));
}
if (!StringUtils.isBlank(basePackageQuery.getAfterBegintime())) {
list.add(criteriaBuilder.le(root.get("beginTime").as(Long.class), DateUtil.dateStrToLong(basePackageQuery.getAfterBegintime())));
}
//查询状态不为删除的套餐
list.add(criteriaBuilder.notEqual(root.get("status").as(Integer.class), 2));
Predicate[] p = new Predicate[list.size()];
return criteriaBuilder.and(list.toArray(p));
}
}, pageable);
return basePackages;
}
}