0.加载分类的树形节点
0.1 创建接口
public interface CategoryTreeData<T> {
String getId();
String getParentId();
void setChildren(List<T> children);
List<T> getChildren();
}
0.2 实体类继承接口
@Entity
@Table(name="tb_category")
@Data
public class Category implements Serializable, CategoryTreeData<Category> {
@Id
private String id;
private String cname;
private String parentId;
private String isparent;
private String state;
@Transient
private List<Category> children;
}
0.3 封装数据工具类
public class CategoryTreeUtil {
public static <T extends CategoryTreeData<T>> List<T> getTreeList(String parentid, List<T> categoryList){
List<T> resultList=new ArrayList<>();
Map<Object,T> categoryMap=new HashMap<>();
T category;
for(int i=0;i<categoryList.size();i++){
category=categoryList.get(i);
categoryMap.put(category.getId(),category);
if(parentid.equals(category.getParentId())){
resultList.add(category);
}
}
for(int i=0;i<categoryList.size();i++){
category=categoryList.get(i);
T parentCategory=categoryMap.get(category.getParentId());
if(parentCategory!=null){
if(parentCategory.getChildren()==null){
parentCategory.setChildren(new ArrayList<>());
}
parentCategory.getChildren().add(category);
categoryMap.put(category.getParentId(),parentCategory);
}
}
return resultList;
}
}
0.4 Controller
@PostMapping("/tree")
public Result fetchCategoryTree(){
if( redisTemplate.opsForList().range("weblog_category_tree",0,-1).size()>0){
return new Result(true,StatusCode.OK,ResultMessage.QUERY_SUCCESS,(List<Category>)redisTemplate.opsForList().index("weblog_category_tree",0));
}
System.out.println(redisTemplate.opsForList().range("weblog_category_tree",0,-1));
List<Category>categoryTree=categoryService.fetchCategoryTree();
redisTemplate.opsForList().leftPush("weblog_category_tree",categoryTree);
return new Result(true,StatusCode.OK,ResultMessage.QUERY_SUCCESS,categoryTree);
}
0.5 Service
public List<Category> fetchCategoryTree() {
List<Category> data=categoryDao.findByState("1");
return CategoryTreeUtil.getTreeList("0",data);
}
1.修改分类
1.1修改工具类
private List<Category>categories=new ArrayList<>();
public void handleUpdate(Category category){
Category proCategory = categoryDao.findById(category.getId()).get();
if (!proCategory.getCname().equals(category.getCname()) || !proCategory.getState().equals(category.getState())) {
if(category.getState().equals(proCategory.getState())){
categoryDao.save(category);
}else {
categoryDao.save(category);
List<Category> categories = diguiUp(category.getParentId(),false);
for (Category c :categories){
categoryDao.updateStateById("1",c.getId());
}
}
}
}
private List<Category> diguiUp(String parentid,boolean isDigui){
Category category = categoryDao.findById(parentid).get();
List<String>diguiCategory=new ArrayList<>();
if("0".equals(category.getParentId())){
categories.add(category);
return categories;
}else if("1".equals(category.getState())){
return categories;
}else {
categories.add(category);
diguiCategory.add(category.getParentId());
if(diguiCategory!=null&&diguiCategory.size()>0){
diguiUp(category.getParentId(),true);
}
return categories;
}
}