SysRuleServiceImpl.java 3.62 KB
package com.server.shiro.persistent.service.impl;

import com.server.shiro.persistent.bean.SysPermission;
import com.server.shiro.persistent.bean.SysPermissionQuery;
import com.server.shiro.persistent.bean.SysRule;
import com.server.shiro.persistent.bean.SysRuleQuery;
import com.server.shiro.persistent.repository.SysPermissionRepository;
import com.server.shiro.persistent.repository.SysRuleRepository;
import com.server.shiro.persistent.service.SysRuleService;
import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.util.StringUtils;

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;

/**
 * Created by dell on 2018/3/13.
 */
@Service
public class SysRuleServiceImpl implements SysRuleService {
    @Autowired
    SysRuleRepository ruleRepository;
    @Autowired
    SysPermissionRepository sysPermissionRepository;

    @Override
    public Page<SysRule> findSysRulePage(Pageable pageable, SysRuleQuery ruleQuery) {
        Page<SysRule> bookPage = ruleRepository.findAll(new Specification<SysRule>(){
            public Predicate toPredicate(Root<SysRule> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> list = new ArrayList<Predicate>();
                if(StringUtils.hasText(ruleQuery.getRuleName())){
                    list.add(criteriaBuilder.like(root.get("ruleName").as(String.class), "%"+ruleQuery.getRuleName()+"%"));
                }
                if(StringUtils.hasText(ruleQuery.getRuleCode())){
                    list.add(criteriaBuilder.like(root.get("ruleCode").as(String.class), "%"+ruleQuery.getRuleCode()+"%"));
                }
                if(StringUtils.hasText(ruleQuery.getStatus())){
                    list.add(criteriaBuilder.equal(root.get("status").as(String.class), ruleQuery.getStatus()));
                }
                Predicate[] p = new Predicate[list.size()];
                return criteriaBuilder.and(list.toArray(p));
            }
        },pageable);
        return bookPage;
    }

    @Override
    public Page<SysPermission> findSysPermissionPage(Pageable pageable, SysPermissionQuery permissionQuery) {
        Page<SysPermission> bookPage = sysPermissionRepository.findAll(new Specification<SysPermission>(){
            public Predicate toPredicate(Root<SysPermission> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> list = new ArrayList<Predicate>();
                if(StringUtils.hasText(permissionQuery.getPermissionName())){
                    list.add(criteriaBuilder.like(root.get("permissionName").as(String.class), "%"+permissionQuery.getPermissionName()+"%"));
                }
                if(StringUtils.hasText(permissionQuery.getPermissionCode())){
                    list.add(criteriaBuilder.like(root.get("permissionCode").as(String.class), "%"+permissionQuery.getPermissionCode()+"%"));
                }
                if(StringUtils.hasText(permissionQuery.getStatus())){
                    list.add(criteriaBuilder.equal(root.get("status").as(String.class), permissionQuery.getStatus()));
                }
                Predicate[] p = new Predicate[list.size()];
                return criteriaBuilder.and(list.toArray(p));
            }
        },pageable);
        return bookPage;
    }
}