1.实体类
package com.atguigu.aclservice.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.util.Date;
import java.io.Serializable;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
* 权限
* </p>
*
* @author testjava
* @since 2020-01-12
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("acl_permission")
@ApiModel(value="Permission对象", description="权限")
public class Permission implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "编号")
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private String id;
@ApiModelProperty(value = "所属上级")
private String pid;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "类型(1:菜单,2:按钮)")
private Integer type;
@ApiModelProperty(value = "权限值")
private String permissionValue;
@ApiModelProperty(value = "访问路径")
private String path;
@ApiModelProperty(value = "组件路径")
private String component;
@ApiModelProperty(value = "图标")
private String icon;
@ApiModelProperty(value = "状态(0:禁止,1:正常)")
private Integer status;
@ApiModelProperty(value = "层级")
@TableField(exist = false)
//一级显示1,二级显示2
private Integer level;
@ApiModelProperty(value = "下级")
@TableField(exist = false)
//子菜单数据
private List<Permission> children;
@ApiModelProperty(value = "是否选中")
@TableField(exist = false)
private boolean isSelect;
@ApiModelProperty(value = "逻辑删除 1(true)已删除, 0(false)未删除")
private Boolean isDeleted;
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private Date gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "更新时间")
private Date gmtModified;
}
2.具体业务
1.查:
运用了递归算法
public List<Permission> queryAllMenu() {
//1.查询菜单表所有的数据
QueryWrapper<Permission> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("id");
List<Permission> permissionList = baseMapper.selectList(wrapper);
//2.把查询所有菜单list集合按照要求进行封装
List<Permission> result = bulid(permissionList);
return result;
}
private static List<Permission> bulid(List<Permission> treeNodes) {
List<Permission> trees = new ArrayList<>();
for (Permission treeNode : treeNodes) {
//先得到顶级菜单pid=0,然后设置level是1
if ("0".equals(treeNode.getPid())) {
treeNode.setLevel(1);
//再获取顶级菜单下的分级菜单
trees.add(findChildren(treeNode,treeNodes));
}
}
return trees;
}
2.删:
public void removeChildById(String id) {
List<String> idList = new ArrayList<>();
//先获得到该级菜单下面的子菜单
this.selectChildListById(id, idList);
//上面已经获取到了该级下面的子菜单id但是自身还没有加进去
idList.add(id);
baseMapper.deleteBatchIds(idList);
}
private void selectChildListById(String id, List<String> idList) {
List<Permission> childList = baseMapper.selectList(new QueryWrapper<Permission>().eq("pid", id).select("id"));
childList.stream().forEach(item -> {
idList.add(item.getId());
//递归继续获取下一层级的菜单数据
this.selectChildListById(item.getId(), idList);
});
}