This commit is contained in:
77
2024-04-07 23:55:15 +08:00
parent 70104b6c29
commit b42ffc27df
4 changed files with 80 additions and 1 deletions

View File

@@ -3,6 +3,7 @@ package com.ruoyi.xq.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.xq.domain.AreaCode;
import com.ruoyi.xq.dto.app.areacode.AreaCodeQuery;
import com.ruoyi.xq.dto.app.areacode.AreaCodeTree;
import java.util.List;
@@ -15,4 +16,7 @@ import java.util.List;
public interface AreaCodeService extends IService<AreaCode> {
List<AreaCode> listAreaCode(AreaCodeQuery query);
List<AreaCodeTree> tree();
}

View File

@@ -3,13 +3,17 @@ package com.ruoyi.xq.service.impl;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.BeanConvertUtil;
import com.ruoyi.xq.domain.AreaCode;
import com.ruoyi.xq.dto.app.areacode.AreaCodeQuery;
import com.ruoyi.xq.dto.app.areacode.AreaCodeTree;
import com.ruoyi.xq.mapper.AreaCodeMapper;
import com.ruoyi.xq.service.AreaCodeService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 行政区划Service业务层处理
@@ -27,4 +31,27 @@ public class AreaCodeServiceImpl extends ServiceImpl<AreaCodeMapper,AreaCode> im
.eq(StringUtils.isNotBlank(query.getLevel()),AreaCode::getLevel,query.getLevel()));
return list;
}
@Override
public List<AreaCodeTree> tree() {
List<AreaCode> list = this.list();
List<AreaCodeTree> nodeList = BeanConvertUtil.convertListTo(list, AreaCodeTree::new);
Map<Integer, AreaCodeTree> nodeMap = new HashMap<>();
Set<AreaCodeTree> roots = new HashSet<>();
// 遍历列表构建节点映射表
for (AreaCodeTree node : nodeList) {
nodeMap.put(node.getCode(), node);
if (node.getPcode() == 0 || !nodeMap.containsKey(node.getPcode())) {
roots.add(node);
}
}
// 建立父子关系
for (AreaCodeTree node : nodeList) {
if (nodeMap.containsKey(node.getPcode())) {
AreaCodeTree parentNode = nodeMap.get(node.getPcode());
parentNode.addChild(node);
}
}
return new ArrayList<>(roots);
}
}