菜單對象
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.zcckj.common.model.dto.BaseDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.util.List;
/**
* @author fsren
* @date 2019-09-10
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel
public class DistributorMenuDTO extends BaseDTO {
/**
* 菜單名稱
*/
@NotBlank(groups = {Save.class}, message = "菜單名稱不可爲空")
@ApiModelProperty(value = "菜單名稱")
private String name;
/**
* 菜單URL
*/
@ApiModelProperty(value = "菜單URL")
private String url;
/**
* 授權(多個用逗號分隔,如:user:list,user:create)
*/
@ApiModelProperty(value = "授權(多個用逗號分隔,如:user:list,user:create)")
private String authorities;
/**
* 類型(0:目錄 1:菜單 2:按鈕)
*/
@Min(groups = {Save.class}, value = 0, message = "0:目錄 1:菜單 2:按鈕")
@Max(groups = {Save.class}, value = 2, message = "0:目錄 1:菜單 2:按鈕")
@ApiModelProperty(value = "類型(0:目錄 1:菜單 2:按鈕)")
private Integer type;
/**
* 描述
*/
@ApiModelProperty(value = "描述")
private String description;
/**
* 父級ID
*/
@Min(groups = {Save.class}, value = 0, message = "父級ID應爲正整數")
@ApiModelProperty(value = "父級ID")
private Long parentId;
/**
* 排序
*/
@ApiModelProperty(value = "排序")
@Min(groups = {Save.class}, value = 0, message = "排序值應大於0")
private Integer sort;
/**
* 賬號是否刪除
*/
@JsonIgnore
@ApiModelProperty(value = "是否刪除")
private Boolean isDelete;
/**
* @author l'amour solitaire
* @description 是否有權限(查詢)
* @date 2019/10/16 下午5:04
*/
@ApiModelProperty(value = "是否有權限")
private Boolean haveJurisdiction;
/**
* 子項
*/
@ApiModelProperty(value = "子項")
private List<DistributorMenuDTO> children;
public interface Search {
}
}
遞歸
/**
* @author l'amour solitaire
* @description 遞歸菜單
* @date 2020/3/24 下午3:12
*/
private static List<DistributorMenuDTO> makeTree(List<DistributorMenuDTO> distributorMenuList, Long pId) {
List<DistributorMenuDTO> children = distributorMenuList.stream().filter(x -> x.getParentId().equals(pId)).collect(Collectors.toList());
List<DistributorMenuDTO> successor = distributorMenuList.stream().filter(x -> !x.getParentId().equals(pId)).collect(Collectors.toList());
children.forEach(x -> x.setChildren(makeTree(successor, x.getId())));
return children;
}