package com.cloudroam.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.cloudroam.mapper.PermissionMapper; import com.cloudroam.model.PermissionDO; import com.cloudroam.service.PermissionService; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author * @author * 权限服务实现类 */ @Service public class PermissionServiceImpl extends ServiceImpl implements PermissionService { @Override public List getPermissionByGroupId(Integer groupId) { return this.baseMapper.selectPermissionsByGroupId(groupId); } @Override public List getPermissionByGroupIds(List groupIds) { return this.baseMapper.selectPermissionsByGroupIds(groupIds); } /** * 为什么不使用联表进行查询? * 1. 联表很麻烦,需要关联2,3次,涉及到3张表,会严重影响性能 * 2. 由于使用了IN关键字,所以性能其实很不好 * 3. 不直观,可读性差 * 4. 用户的分组一般都比较少,一般情况下都在2个一下 */ @Override public Map> getPermissionMapByGroupIds(List groupIds) { HashMap map = new HashMap(groupIds.size()); groupIds.stream().forEach(groupId -> { List permissions = this.baseMapper.selectPermissionsByGroupId(groupId); map.put(groupId, permissions); }); return map; } @Override public List>>> structuringPermissions(List permissions) { Map>> tmp = new HashMap(50); permissions.forEach(permission -> { if (!tmp.containsKey(permission.getModule())) { Map tiny = new HashMap(); tiny.put("module", permission.getModule()); tiny.put("permission", permission.getName()); List> mini = new ArrayList(); mini.add(tiny); tmp.put(permission.getModule(), mini); } else { Map tiny = new HashMap(); tiny.put("module", permission.getModule()); tiny.put("permission", permission.getName()); tmp.get(permission.getModule()).add(tiny); } }); List>>> structualPermissions = new ArrayList(); tmp.forEach((k, v) -> { Map>> ttmp = new HashMap(); ttmp.put(k, v); structualPermissions.add(ttmp); }); return structualPermissions; } @Override public Map> structuringPermissionsSimply(List permissions) { // mod permission.names Map> res = new HashMap<>(); permissions.forEach(permission -> { if (res.containsKey(permission.getModule())) { List mod = res.get(permission.getModule()); mod.add(permission.getName()); } else { List mod = new ArrayList<>(); mod.add(permission.getName()); res.put(permission.getModule(), mod); } }); return res; } @Override public List getPermissionByGroupIdsAndModule(List groupIds, String module) { return this.baseMapper.selectPermissionsByGroupIdsAndModule(groupIds, module); } }