RoleController.java 11.5 KB
package com.server.web.controller;

import com.server.shiro.persistent.bean.*;
import com.server.shiro.persistent.repository.MenuRepository;
import com.server.shiro.persistent.repository.RoleRepository;
import com.server.shiro.persistent.repository.SysRuleRepository;
import com.server.shiro.persistent.service.SysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.util.*;

/**
 * 后台角色管理
 */

@RestController
@RequestMapping(BaseController.OSS_NAMESPACE + "/role")
public class RoleController extends BaseController {

    @Autowired
    SysRoleService roleService;
    @Autowired
    RoleRepository roleRepository;
    @Autowired
    MenuRepository menuRepository;
    @Autowired
    SysRuleRepository ruleRepository;

    /**
     * 角色查询分页
     *
     * @param request
     * @param roleQuery
     * @return
     */
    @RequestMapping(value = "/queryRole", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
    public Map<String,Object> queryRole(HttpServletRequest request, SysRoleQuery roleQuery) {
        try {
            return success(roleService.findSysRolePage(getPageable(request), roleQuery));
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 角色保存
     *
     * @param request
     * @param role
     * @return
     */
    @RequestMapping(value = "/saveRole", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
    public Map<String,Object> saveRole(HttpServletRequest request, SysRole role) {
        try {
            if (StringUtils.hasText(role.getRoleCode()) && StringUtils.hasText(role.getRoleName())) {
                List roleList = roleRepository.findByRoleCode(role.getRoleCode());
                if (roleList != null && roleList.size() > 0) {
                    return error("-1", "角色编码已被使用", "");
                } else {
                    role.setStatus("1");
                    role.setCreateTime(new Timestamp(new Date().getTime()));
                    role.setUpdateTime(new Timestamp(new Date().getTime()));
                    roleRepository.save(role);
                    return success(role.getId());
                }
            } else {
                return error("-1", "角色编码和名称不能为空", "");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 角色修改
     *
     * @param request
     * @param role
     * @return
     */
    @RequestMapping(value = "/updateRole", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
//    @RequiresPermissions("role:update")
    public Map<String,Object> updateRole(HttpServletRequest request, SysRole role) {
        try {
            if (StringUtils.hasText(role.getRoleCode()) && StringUtils.hasText(role.getRoleName())) {
                SysRole oldRule = roleRepository.findOne(role.getId());
                if (oldRule.getRoleCode().equals(role.getRoleCode())) {
                    oldRule.setRoleCode(role.getRoleCode());
                    oldRule.setRoleName(role.getRoleName());
                    oldRule.setRemarks(role.getRemarks());
                    oldRule.setUpdateTime(new Timestamp(new Date().getTime()));
                    oldRule.setStatus(role.getStatus());
                    roleRepository.save(oldRule);
                    return success(role.getId());
                } else {
                    List ruleList = roleRepository.findByRoleCode(role.getRoleCode());
                    if (ruleList != null && ruleList.size() > 0) {
                        return error("-1", "角色编码已被使用", "");
                    } else {
                        oldRule.setRoleCode(role.getRoleCode());
                        oldRule.setRoleName(role.getRoleName());
                        oldRule.setRemarks(role.getRemarks());
                        oldRule.setUpdateTime(new Timestamp(new Date().getTime()));
                        oldRule.setStatus(role.getStatus());
                        roleRepository.save(oldRule);
                        return success(oldRule.getId());
                    }
                }
            } else {
                return error("-1", "角色编码和名称不能为空", "");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 根据角色ID获取角色权限信息
     */
    @RequestMapping(value = "/getRoleRule", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
//    @RequiresPermissions("role:info")
    public Map<String,Object> getRoleRule(HttpServletRequest request, SysRole role) {
        try {
            role = roleRepository.findOne(role.getId());
            return success(role);
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 获取角色权限ID
     * @param request
     * @param role
     * @return
     */
    @RequestMapping(value = "/getRuleId", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
    public Map<String,Object> getRuleId(HttpServletRequest request, SysRole role) {
        try {
            role = roleRepository.findOne(role.getId());
            Set<SysRule> rule = role.getRules();
            String ruleId ="";
            for (SysRule r :rule){
                ruleId +=r.getId()+",";
            }
            return success(ruleId);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 保存角色和权限关系
     */
    @RequestMapping(value = "/saveRoleRule", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
//    @RequiresPermissions("role:saveRoleRule")
    public Map<String,Object> saveRoleRule(HttpServletRequest request, @RequestParam("id") Long roleId,@RequestParam("roles")  String ruleId) {
        try {
            SysRole role = roleRepository.findOne(roleId);
            List<String> result = Arrays.asList(ruleId.split(","));
            Set<SysRule> ruleHashSet = new HashSet<SysRule>();
            for (String r : result) {
                SysRule rule = ruleRepository.findOne(Long.valueOf(r));
                ruleHashSet.add(rule);
            }
            role.setRules(ruleHashSet);
            roleRepository.save(role);
            return success(role.getId());
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }


    /**
     * 菜单查询分页
     *
     * @param request
     * @param menuQuery
     * @return
     */
    @RequestMapping(value = "/queryMenuByQuery", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
    public Map<String,Object> queryMenuByQuery(HttpServletRequest request, SysMenuQuery menuQuery) {
        try {
            return success(roleService.findSysMenuPage(getPageable(request), menuQuery));
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 菜单查询
     */
    @RequestMapping(value = "/queryMenu", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
    public Map<String,Object> queryMenu() {
        List<SysMenu> list = menuRepository.findByLevel(1l);
        try {
            for (SysMenu m : list) {
                //设置二级菜单
                List<SysMenu> sub = menuRepository.findByParentid(m.getId());
                m.setSubMenu(sub);
            }
            return success(list);
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 菜单保存
     *
     * @param request
     * @param menu
     * @return
     */
    @RequestMapping(value = "/saveMenu", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
//    @RequiresPermissions("menu:save")
    public Map<String,Object> saveMenu(HttpServletRequest request, SysMenu menu) {
        try {
            if (StringUtils.hasText(menu.getMenuCode()) && StringUtils.hasText(menu.getMenuName())) {
                List list = menuRepository.findByMenuCode(menu.getMenuCode());
                if (list != null && list.size() > 0) {
                    return error("-1", "模块编码已被使用", "");
                } else {
                    menuRepository.save(menu);
                    return success(menu.getId());
                }
            } else {
                return error("-1", "模块编码和名称不能为空", "");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 菜单修改
     *
     * @param request
     * @param menu
     * @return
     */
    @RequestMapping(value = "/updateMenu", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
//    @RequiresPermissions("menu:update")
    public Map<String,Object> updateMenu(HttpServletRequest request, SysMenu menu) {
        try {
            if (StringUtils.hasText(menu.getMenuCode()) && StringUtils.hasText(menu.getMenuName())) {
                SysMenu oldMenu = menuRepository.findOne(menu.getId());
                if (oldMenu.getMenuCode().equals(menu.getMenuCode())) {
                    menuRepository.save(menu);
                    return success(menu.getId());
                } else {
                    List list = menuRepository.findByMenuCode(menu.getMenuCode());
                    if (list != null && list.size() > 0) {
                        return error("-1", "模块编码已被使用", "");
                    } else {
                        menuRepository.save(menu);
                        return success(menu.getId());
                    }
                }
            } else {
                return error("-1", "模块编码和名称不能为空", "");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

    /**
     * 删除菜单
     *
     * @param request
     * @param menu
     * @return
     */
    @RequestMapping(value = "/deleteMenu", method = {RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
//    @RequiresPermissions("menu:update")
    public Map<String,Object> deleteMenu(HttpServletRequest request, SysMenu menu) {
        try {
            menuRepository.delete(menu.getId());
            return success("操作成功");
        }catch (DataIntegrityViolationException e){
            e.printStackTrace();
            return error("-1", "该模块已绑定,请先解绑后删除!", "");
        } catch (Exception e) {
            e.printStackTrace();
            return error("-1", "操作失败", "");
        }
    }

}