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;
|
}
|
}
|