package com.fzzy.sys; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.annotation.Expose; import com.fzzy.api.utils.ContextUtil; import com.fzzy.sys.entity.SysResource; import com.fzzy.sys.entity.SysRole; import com.fzzy.sys.entity.SysUrl; import com.fzzy.sys.repository.ResourceRepository; import com.fzzy.sys.repository.RoleRepository; import com.fzzy.sys.repository.UrlRepository; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 权限维护 */ @Component("sys.rolePR") public class RolePR { @Autowired private RoleRepository roleRepository; @Autowired private UrlRepository urlRepository; @Autowired private ResourceRepository resourceRepository; /** * sys.rolePR#findAll * @return */ @DataProvider public List findAll() { return roleRepository.findAll(); } /** * sys.rolePR#updateSave * @param entity */ @DataResolver public String updateSave(SysRole entity) { // 手动将doradoEntity对象转换为标准Bean对象 SysRole data = new SysRole(); BeanUtils.copyProperties(entity, data); if (StringUtils.isEmpty(data.getId())) { data.setId(ContextUtil.getUUID()); } roleRepository.save(data); return null; } /** * sys.rolePR#delData * */ @Expose public String delData(SysRole data) { roleRepository.deleteById(data.getId()); return null; } /** * sys.rolePR#updateSaveResource * @param param * @return */ @Expose public String updateSaveResource(Map param) { if(null == param){ return "没有获取到上传参数!"; } String roleId = (String) param.get("roleId"); if(StringUtils.isEmpty(roleId)){ return "没有获取到角色信息!"; } List urlIds = (List) param.get("ids"); if(urlIds == null){ return "没有获取到菜单信息!"; } for(int i = 0; i < urlIds.size(); i++){ SysResource data = new SysResource(); data.setId(ContextUtil.getUUID()); data.setRoleId(roleId); data.setUrlId(urlIds.get(i)); resourceRepository.save(data); } return null; } /** * sys.rolePR#findUrlByRoleId * * @return * 可以使用for循环 * 不能使用封装好的排序方法和foreach,会产生数组下标越界异常 */ @DataProvider public List findUrlByRoleId(SysUrl sysUrl) { if(sysUrl == null){ return null; } String parentId = sysUrl.getId(); String roleId = sysUrl.getRoleId(); //获取所有菜单信息 List urlList = null; if (StringUtils.isEmpty(parentId)) { urlList = urlRepository.listUrl(); }else{ urlList = urlRepository.listUrlByParent(parentId); } if(urlList != null && urlList.size() > 0){ //查看权限中间关系 screenUrlByResource(urlList,roleId); } return urlList; } public void screenUrlByResource(List urlList, String roleId){ //查询权限菜单关系 List sysResourceList = resourceRepository.listResourceByRoleId(roleId); if(sysResourceList != null && sysResourceList.size() > 0){ //封装权限菜单关系 Map map = new HashMap<>(); for(int i = 0; i < sysResourceList.size(); i++){ map.put(sysResourceList.get(i).getUrlId(),sysResourceList.get(i)); } for(int i = 0; i < urlList.size(); i++){ urlList.get(i).setUse((map.get(urlList.get(i).getId()) != null)); } } } }