李白
昨天 e7e6d39b095b6a763e54ab34631171c3de32ec9e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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<TaxCodeMapper, TaxCode> implements TaxCodeService {
 
    @Override
    public Page pageNew(Page page, TaxCodeQueryDTO queryDTO) {
        MPJLambdaWrapper<TaxCode> wrapper = new MPJLambdaWrapper<TaxCode>()
                .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<TaxCode> taxCodeList = baseMapper.selectPage(wrapper);
//        List<TaxCode> treeList=buildTreeByStream(taxCodeList, "1");
        return baseMapper.selectPage(page,wrapper);
    }
 
    /**
     * 使用 Stream 递归构建树
     * @param allNodes 所有节点
     * @param parentId 当前层级的父ID
     * @return 树形列表
     */
    public static List<TaxCode> buildTreeByStream(List<TaxCode> 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 <T> Page<T> convert(List<T> dataList, Page<T> 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<T> 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;
    }
}