package com.by4cloud.platformx.business.service.impl; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNode; import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.admin.api.entity.SysDept; import com.by4cloud.platformx.business.dto.TaxCodeQueryDTO; import com.by4cloud.platformx.business.entity.TaxCode; import com.by4cloud.platformx.business.mapper.TaxCodeMapper; import com.by4cloud.platformx.business.service.TaxCodeService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 税务编码 * * @author syt * @date 2026-05-13 16:35:23 */ @Service public class TaxCodeServiceImpl extends ServiceImpl implements TaxCodeService { @Override public Page pageNew(Page page, TaxCodeQueryDTO queryDTO) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(TaxCode.class) .selectAs("(select count(1) from tax_code t1 where t1.parent_bm = t.bm)",TaxCode::getChildNum) .like(StrUtil.isNotBlank(queryDTO.getMc()),TaxCode::getMc,queryDTO.getMc()); if (ObjUtil.isNotNull(queryDTO.getChildNum())){ if (queryDTO.getChildNum()==0){ wrapper.eq("(select count(1) from tax_code t1 where t1.parent_bm = t.bm)",0); }else { wrapper.gt("(select count(1) from tax_code t1 where t1.parent_bm = t.bm)",0); } } // List taxCodeList = baseMapper.selectPage(wrapper); // List treeList=buildTreeByStream(taxCodeList, "1"); return baseMapper.selectPage(page,wrapper); } /** * 使用 Stream 递归构建树 * @param allNodes 所有节点 * @param parentId 当前层级的父ID * @return 树形列表 */ public static List buildTreeByStream(List allNodes, String parentId) { return allNodes.stream() .filter(node -> { // 过滤出父编码等于当前 parentId 的节点 if (parentId == null) { return node.getParentBm() == null || node.getParentBm().isEmpty(); } return parentId.equals(node.getParentBm()); }) .peek(node -> { // 递归设置子节点 node.setChildren(buildTreeByStream(allNodes, node.getBm())); }) .collect(Collectors.toList()); } public Page convert(List dataList, Page pageParam) { if (dataList == null) { dataList = java.util.Collections.emptyList(); } long total = dataList.size(); long current = pageParam.getCurrent(); long size = pageParam.getSize(); // 计算总页数 long pages = (total + size - 1) / size; // 计算截取范围 long startIndex = (current - 1) * size; long endIndex = Math.min(startIndex + size, total); List records; if (startIndex >= total) { records = java.util.Collections.emptyList(); } else { records = dataList.subList((int) startIndex, (int) endIndex); } // 设置结果 pageParam.setRecords(records); pageParam.setTotal(total); pageParam.setPages(pages); return pageParam; } }