package com.ruoyi.measuringinstrumentledger.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.measuringinstrumentledger.dto.SparePartsDto; import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper; import com.ruoyi.measuringinstrumentledger.pojo.SpareParts; import com.ruoyi.measuringinstrumentledger.service.SparePartsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class SparePartsServiceImpl extends ServiceImpl implements SparePartsService { @Autowired private SparePartsMapper sparePartsMapper; @Override public IPage listPage(Page page, SpareParts spareParts) { return sparePartsMapper.listPage(page,spareParts); } @Override public List getTree() { SpareParts spareParts = new SpareParts(); IPage sparePartsDtoIPage = sparePartsMapper.listPage(new Page<>(1, -1), spareParts); List records = sparePartsDtoIPage.getRecords(); return buildTree(records); } /** * 将扁平结构数据转换为树形结构 * @param flatData 扁平节点列表 * @return 树形结构根节点列表 */ public static List buildTree(List flatData) { List result = new ArrayList<>(); if (flatData == null || flatData.isEmpty()) { return result; // 空输入直接返回空列表 } // 1. 创建节点映射表,存储所有节点并初始化子节点列表 Map nodeMap = new HashMap<>(); for (SparePartsDto node : flatData) { // 确保子节点列表初始化(避免空指针异常) if (node.getChildren() == null) { node.setChildren(new ArrayList<>()); } nodeMap.put(node.getId(), node); } // 2. 构建树形结构 for (SparePartsDto node : flatData) { Long parentId = node.getParentId(); if (parentId == null || !nodeMap.containsKey(parentId)) { // 无父节点或父节点不存在,作为根节点 result.add(node); } else { // 有父节点,添加到父节点的子节点列表 SparePartsDto parentNode = nodeMap.get(parentId); parentNode.getChildren().add(node); } } return result; } }