SysRoleServiceImpl.java 3.47 KB
package com.server.shiro.persistent.service.impl;

import com.server.shiro.persistent.bean.SysMenu;
import com.server.shiro.persistent.bean.SysMenuQuery;
import com.server.shiro.persistent.bean.SysRole;
import com.server.shiro.persistent.bean.SysRoleQuery;
import com.server.shiro.persistent.repository.MenuRepository;
import com.server.shiro.persistent.repository.RoleRepository;
import com.server.shiro.persistent.service.SysRoleService;
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 SysRoleServiceImpl implements SysRoleService {
    @Autowired
    RoleRepository roleRepository;
    @Autowired
    MenuRepository menuRepository;

    @Override
    public Page<SysRole> findSysRolePage(Pageable pageable, SysRoleQuery RoleQuery) {
        Page<SysRole> bookPage = roleRepository.findAll(new Specification<SysRole>() {
            public Predicate toPredicate(Root<SysRole> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> list = new ArrayList<Predicate>();
                if (StringUtils.hasText(RoleQuery.getRoleName())) {
                    list.add(criteriaBuilder.like(root.get("roleName").as(String.class), "%"+RoleQuery.getRoleName()+"%"));
                }
                if (StringUtils.hasText(RoleQuery.getRoleCode())) {
                    list.add(criteriaBuilder.like(root.get("roleCode").as(String.class), "%"+RoleQuery.getRoleCode()+"%"));
                }
                if (StringUtils.hasText(RoleQuery.getStatus())) {
                    list.add(criteriaBuilder.equal(root.get("status").as(String.class), RoleQuery.getStatus()));
                }
                Predicate[] p = new Predicate[list.size()];
                return criteriaBuilder.and(list.toArray(p));
            }
        }, pageable);
        return bookPage;
    }

    @Override
    public Page<SysMenu> findSysMenuPage(Pageable pageable, SysMenuQuery menuQuery) {
        Page<SysMenu> bookPage = menuRepository.findAll(new Specification<SysMenu>() {
            public Predicate toPredicate(Root<SysMenu> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> list = new ArrayList<Predicate>();
                if (StringUtils.hasText(menuQuery.getMenuName())) {
                    list.add(criteriaBuilder.like(root.get("menuName").as(String.class), "%"+menuQuery.getMenuName()+"%"));
                }
                if (StringUtils.hasText(menuQuery.getMenuCode())) {
                    list.add(criteriaBuilder.like(root.get("menuCode").as(String.class), "%"+menuQuery.getMenuCode()+"%"));
                }
                if (StringUtils.hasText(menuQuery.getStatus())) {
                    list.add(criteriaBuilder.equal(root.get("status").as(String.class), menuQuery.getStatus()));
                }
                Predicate[] p = new Predicate[list.size()];
                return criteriaBuilder.and(list.toArray(p));
            }
        }, pageable);
        return bookPage;
    }
}