mirror of https://github.com/elunez/eladmin
多条件分页查询物料信息
parent
dc88fe1634
commit
6466d75b6a
|
@ -17,4 +17,6 @@ public class MaterialInfoQueryCriteria {
|
|||
@Query(type = Query.Type.INNER_LIKE)
|
||||
private String materialCode;
|
||||
|
||||
private Long materialCategoryId;
|
||||
|
||||
}
|
|
@ -13,16 +13,27 @@ import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoDTO;
|
|||
import me.zhengjie.modules.wms.bd.service.dto.MaterialInfoQueryCriteria;
|
||||
import me.zhengjie.modules.wms.bd.service.mapper.MaterialInfoMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import me.zhengjie.utils.PageUtil;
|
||||
import me.zhengjie.utils.QueryHelp;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
/**
|
||||
* @author 黄星星
|
||||
* @date 2019-07-27
|
||||
|
@ -45,7 +56,51 @@ public class MaterialInfoServiceImpl implements MaterialInfoService {
|
|||
|
||||
@Override
|
||||
public Object queryAll(MaterialInfoQueryCriteria criteria, Pageable pageable) {
|
||||
Page<MaterialInfo> page = materialInfoRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
|
||||
Specification<MaterialInfo> specification = new Specification<MaterialInfo>() {
|
||||
@Override
|
||||
public Predicate toPredicate(Root<MaterialInfo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
|
||||
|
||||
List<Predicate> targetPredicateList = new ArrayList<>();
|
||||
|
||||
List<Predicate> nameOrMaterialCodeList = new ArrayList<>();
|
||||
String name = criteria.getName();
|
||||
if (!StringUtils.isEmpty(name)) {
|
||||
Predicate namePredicate = criteriaBuilder.like(root.get("name"), "%" + name + "%");
|
||||
nameOrMaterialCodeList.add(namePredicate);
|
||||
}
|
||||
|
||||
String materialCode = criteria.getMaterialCode();
|
||||
if (!StringUtils.isEmpty(materialCode)) {
|
||||
Predicate materialCodePredicate = criteriaBuilder.like(root.get("materialCode"), "%" + materialCode + "%");
|
||||
nameOrMaterialCodeList.add(materialCodePredicate);
|
||||
}
|
||||
|
||||
//name与materialCode组装成
|
||||
Predicate nameOrMaterialCodePredicate = null;
|
||||
if (!CollectionUtils.isEmpty(nameOrMaterialCodeList)) {
|
||||
nameOrMaterialCodePredicate = criteriaBuilder.or(nameOrMaterialCodeList.toArray(new Predicate[nameOrMaterialCodeList.size()]));
|
||||
targetPredicateList.add(nameOrMaterialCodePredicate);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Predicate materialCategoryIdPredicate = null;
|
||||
Long materialCategoryId = criteria.getMaterialCategoryId();
|
||||
if (null != materialCategoryId) {
|
||||
materialCategoryIdPredicate = criteriaBuilder.equal(root.get("materialCategoryId"), materialCategoryId);
|
||||
targetPredicateList.add(materialCategoryIdPredicate);
|
||||
}
|
||||
|
||||
|
||||
if(CollectionUtils.isEmpty(targetPredicateList)){
|
||||
return null;
|
||||
}else{
|
||||
return criteriaBuilder.and(targetPredicateList.toArray(new Predicate[targetPredicateList.size()]));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Page<MaterialInfo> page = materialInfoRepository.findAll(specification, pageable);
|
||||
return PageUtil.toPage(page.map(materialInfoMapper::toDto));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue