mmall后台品类模块
category数据表设计
CREATE TABLE `mmall_category` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '类别Id',
`parent_id` int(11) DEFAULT NULL COMMENT '父类别id当id=0时说明是根节点,一级类别',
`name` varchar(50) DEFAULT NULL COMMENT '类别名称',
`status` tinyint(1) DEFAULT '1' COMMENT '类别状态1-正常,2-已废弃',
`sort_order` int(4) DEFAULT NULL COMMENT '排序编号,同类展示顺序,数值相等则自然排序',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100033 DEFAULT CHARSET=utf8
后台_品类接口文档
业务需求
- 获取品类子节点(平级)
- 增加节点
- 修改品类名字
- 获取当前分类id及递归子节点categoryId
以获取当前分类id及递归子节点categoryId为例:
CategoryManageController
@RequestMapping("get_deep_category.do")
@ResponseBody
public ServerResponse getCategoryAndDeepChildrenCategory(HttpSession session, @RequestParam(value = "categoryId", defaultValue = "0") Integer categoryId) {
User user = (User) session.getAttribute(Const.CURRENT_USER);
if (user == null) {
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "用户未登录,请登录");
}
if (iUserService.checkAdminRole(user).isSuccess()) {
//查询子节点的category信息,并且递归查询所有子节点
return iCategoryService.selectCategoryAndChildrenById(categoryId);
} else {
return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限");
}
}
ICategoryService、CategoryService
@Override
public ServerResponse selectCategoryAndChildrenById(Integer categoryId) {
Set<Category> categorySet = Sets.newHashSet();
findChildCategory(categorySet, categoryId);
List<Integer> categoryIdList = Lists.newArrayList();
if (categoryIdList != null) {
for (Category CategoryItem : categorySet) {
categoryIdList.add(CategoryItem.getId());
}
}
return ServerResponse.createBySuccess(categoryIdList);
}
//递归算法,算出子节点
private Set<Category> findChildCategory(Set<Category> categorySet, Integer categoryId) {
Category category = categoryMapper.selectByPrimaryKey(categoryId);
if (category != null) {
categorySet.add(category);
}
//查找子节点,递归算法一定要有一个退出的条件
List<Category> categoryList = categoryMapper.selectCategoryChildrenByParentId(categoryId);
for (Category CategoryItem : categoryList) {
findChildCategory(categorySet, CategoryItem.getId());
}
return categorySet;
}
ps:递归算法用Set集合接收Category主要目标为了排重
Category
重写hashCode和equals方法
,因为service用Set集合添加子节点
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Category category = (Category) o;
return Objects.equals(id, category.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
CategoryMapper
List<Category> selectCategoryChildrenByParentId(Integer parent_id);
CategoryMapper.xml
<select id="selectCategoryChildrenByParentId" resultMap="BaseResultMap" parameterType="int">
select
<include refid="Base_Column_List"/>
from mmall_category
where parent_id = #{parent_id}
</select>