package com.ruoyi.measuringinstrumentledger.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.device.mapper.DeviceLedgerMapper; import com.ruoyi.device.pojo.DeviceLedger; 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; import java.util.stream.Collectors; @Service public class SparePartsServiceImpl extends ServiceImpl implements SparePartsService { @Autowired private SparePartsMapper sparePartsMapper; @Autowired private DeviceLedgerMapper deviceLedgerMapper; @Override public IPage listPage(Page page, SpareParts spareParts) { IPage sparePartsDtoIPage = sparePartsMapper.listPage(page, spareParts); for (SparePartsDto record : sparePartsDtoIPage.getRecords()) { if(StringUtils.isNotEmpty(record.getDeviceIds())){ List deviceIds = StringUtils.str2List(record.getDeviceIds(), ",", true, true); List deviceLedgers = deviceLedgerMapper.selectBatchIds(deviceIds); if(CollectionUtils.isNotEmpty(deviceLedgers)){ record.setDeviceNameStr(deviceLedgers.stream().map(DeviceLedger::getDeviceName).collect(Collectors.joining( ","))); } } } return sparePartsDtoIPage; } @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; } }