实现查询三级分类目录后端

1.实体类

@Data
@TableName("pms_category")
public class CategoryEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 分类id
	 */
	@TableId
	private Long catId;
	/**
	 * 分类名称
	 */
	private String name;
	/**
	 * 父分类id
	 */
	private Long parentCid;
	/**
	 * 层级
	 */
	private Integer catLevel;
	/**
	 * 是否显示[0-不显示,1显示]
	 */
	@TableLogic(value = "1",delval = "0")
	private Integer showStatus;
	/**
	 * 排序
	 */
	private Integer sort;
	/**
	 * 图标地址
	 */
	private String icon;
	/**
	 * 计量单位
	 */
	private String productUnit;
	/**
	 * 商品数量
	 */
	private Integer productCount;

	@TableField(exist = false)
	private List<CategoryEntity> childrenList;

}

2.controller代码

@RestController
@RequestMapping("product/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 列表查询树形结构
     */
    @LogTime  //此注解是我自定义的注解
    @RequestMapping("/list")
    public R list(){
        List<CategoryEntity> list = categoryService.listWithTree();
        return R.ok().put("data", list);
    }
 }

3.service代码

 @Override
    @SuppressWarnings("java:S1488")
    public List<CategoryEntity> listWithTree() {
        List<CategoryEntity> list = this.baseMapper.selectList(null);

        List<CategoryEntity> levelOne = list.stream().filter(l -> {
            return l.getParentCid() == 0;
        }).map(m -> {
            m.setChildrenList(getChildren(m,list));
            return m;
        }).sorted(Comparator.comparingInt(o -> (o.getSort() == null ? 0 : o.getSort()))).filter(element->element.getShowStatus()==1).collect(Collectors.toList());


        return levelOne;
    }


 private List<CategoryEntity> getChildren(CategoryEntity categoryEntity,List<CategoryEntity> list) {
        return list.stream().filter(l -> l.getParentCid() == categoryEntity.getCatId())
                .map(m->{
                    m.setChildrenList(getChildren(m,list));
                    return m;
                }).sorted(Comparator.comparingInt(o -> (o.getSort() == null ? 0 : o.getSort()))).collect(Collectors.toList());
    }

4.返回值R代码

public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	
	public R() {
		put("code", 0);
		put("msg", "success");
	}
	
	public static R error() {
		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

总结:此代码出自尚硅谷商城项目

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值