UserServiceImpl.java 5.27 KB
package com.server.shiro.persistent.service.impl;

import com.server.shiro.persistent.bean.*;
import com.server.shiro.persistent.repository.UserRepository;
import com.server.shiro.persistent.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.*;


/**
 *
 */
@Service
public class UserServiceImpl implements UserService {
    private Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);

    @Autowired
    private UserRepository userRepository;
    @PersistenceContext
    private EntityManager entityManager;

    /**
     * 用户模板绑定列表
     * @param user
     * @param list
     * @return
     */
    @Override
    public List<UserMenuModel> getMenu(SysUser user,List<SysMenu> list){
        List<UserMenuModel> menu_1=new ArrayList<UserMenuModel>();
        Set<SysMenu> menus = user.getMenus();
        for(SysMenu menu:list){
            if(menu.getLevel()==1){
                UserMenuModel menuModel = new UserMenuModel();
                menuModel.setWeight(menu.getWeight());
                menuModel.setName(menu.getMenuName());
                menuModel.setId(menu.getId());
                menuModel.setIsSelect(0);
                for(SysMenu symMenu:menus){
                      if(menu.getId()==symMenu.getId()){   //判断当前用户是否有次菜单
                          menuModel.setIsSelect(1);
                          break;
                      }
                }
                List<Map<String,String>> ms=new ArrayList<Map<String,String>>();
                for(SysMenu m:list){             //获取二级菜单
                    if(m.getParentid()==menu.getId()){
                        Map<String,String> map=new HashMap<String,String>();
                        map.put("name",m.getMenuName());
                        map.put("id",m.getId()+"");
                        map.put("weight",m.getWeight()+"");
                        map.put("isSelect","0");
                        for(SysMenu symMenu:menus){
                            if(m.getId()==symMenu.getId()){   //判断当前用户是否有次菜单
                                map.put("isSelect","1");
                                break;
                            }
                        }
                        ms.add(map);
                    }
                }
                menuModel.setMenus(ms);
             menu_1.add(menuModel);
            }
        }
        return  menu_1;
    }


    /**
     * 获取用户角色列表
     * @param user
     * @param list
     * @return
     */
    @Override
    public  List<Map> getRole(SysUser user, List<SysRole> list){
        List<Map> role_1=new ArrayList<Map>();
        Set<SysRole> roles = user.getRoles();
        for (SysRole r:list){
            Map<String,String> map=new HashMap<String,String>();
            map.put("id",r.getId()+"");
            map.put("roleCode",r.getRoleCode());
            map.put("roleName",r.getRoleName());
            map.put("remarks",r.getRemarks());
            map.put("status",r.getStatus());
            map.put("isSelect","0");
            for (SysRole ur:roles){
                if(r.getId()==ur.getId()){
                    map.put("isSelect","1");
                    break;
                }
            }
            role_1.add(map);
        }
        return role_1;
    }


    /**
     * 用户列表
     * @param pageable
     * @param userQuery
     * @return
     */
    @Override
    public Page<SysUser> findSysUserPage(Pageable pageable, SysUserQuery userQuery){
        Page<SysUser> bookPage = userRepository.findAll(new Specification<SysUser>(){
            public Predicate toPredicate(Root<SysUser> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> list = new ArrayList<Predicate>();
                if(StringUtils.hasText(userQuery.getUsername())){
                    list.add(criteriaBuilder.like(root.get("username").as(String.class), "%"+userQuery.getUsername()+"%"));
                }
                if(StringUtils.hasText(userQuery.getRealname())){
                    list.add(criteriaBuilder.like(root.get("realname").as(String.class), "%"+userQuery.getRealname()+"%"));
                }
                if(StringUtils.hasText(userQuery.getPhone())){
                    list.add(criteriaBuilder.like(root.get("phone").as(String.class), "%"+userQuery.getPhone()+"%"));
                }
                if(null !=userQuery.getStatus()){
                    list.add(criteriaBuilder.equal(root.get("status").as(Long.class), userQuery.getStatus()));
                }
                Predicate[] p = new Predicate[list.size()];
                return criteriaBuilder.and(list.toArray(p));
            }
        },pageable);
        return bookPage;
    }
}