lin
2024-04-16 ffd04436cd226493015a112ee74a3301595f4538
标签查询优化
2 files modified
83 ■■■■ changed files
src/main/java/org/springblade/modules/discuss/service/impl/UserTopicsServiceImpl.java 15 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/label/service/impl/LabelServiceImpl.java 68 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/discuss/service/impl/UserTopicsServiceImpl.java
@@ -58,6 +58,7 @@
import javax.annotation.Resource;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -79,7 +80,7 @@
    @Override
    public IPage<UserTopicsVO> selectUserTopicsPage(IPage<UserTopicsVO> page, UserTopicsVO userTopics) {
        if (StringUtils.isNotBlank(userTopics.getDistrictId())) {
            List<String> longs = JSON.parseArray(userTopics.getDistrictId()).toJavaList(String.class);
            List<String> longs = Arrays.asList(userTopics.getDistrictId().split(","));
            IDistrictService bean = SpringUtils.getBean(IDistrictService.class);
            List<DistrictEntity> list = bean.list(Wrappers.<DistrictEntity>lambdaQuery().in(DistrictEntity::getId, longs));
            List<String> collect = list.stream().map(item ->
@@ -237,7 +238,7 @@
    @Override
    public List<UserTopicsExcel> exportUser(UserTopicsVO userTopics) {
        if (StringUtils.isNotBlank(userTopics.getDistrictId())) {
            List<String> longs = JSON.parseArray(userTopics.getDistrictId()).toJavaList(String.class);
            List<String> longs = Arrays.asList(userTopics.getDistrictId().split(","));
            IDistrictService bean = SpringUtils.getBean(IDistrictService.class);
            List<DistrictEntity> list = bean.list(Wrappers.<DistrictEntity>lambdaQuery().in(DistrictEntity::getId, longs));
            List<String> collect = list.stream().map(item ->
@@ -315,12 +316,12 @@
        List<holdExcel> resultList = new ArrayList<>();
        try {
            // 检查区域ID字符串是否有效
            JSONArray objects1 = validateAndParseDistrictId(userTopics.getDistrictId());
            List<String> strings = validateAndParseDistrictId(userTopics.getDistrictId());
            // 获取区域服务和话题服务的实例
            IDistrictService districtService = SpringUtils.getBean(IDistrictService.class);
            ITopicsService topicsService = SpringUtils.getBean(ITopicsService.class);
            // 处理区域ID并查询对应的区域实体列表
            List<String> aoiCodeList = processDistrictIds(districtService, objects1);
            List<String> aoiCodeList = processDistrictIds(districtService, strings);
            // 设置AOI代码列表到用户话题对象中
            userTopics.setAoiCodeList(aoiCodeList);
            // 查询并处理房屋列表信息
@@ -341,16 +342,16 @@
     * @return 返回一个JSONArray对象,包含解析后的区域ID。
     * @throws IllegalArgumentException 如果区域ID字符串为空或空白字符串,抛出此异常。
     */
    private JSONArray validateAndParseDistrictId(String districtIdStr) throws IllegalArgumentException {
    private List<String>  validateAndParseDistrictId(String districtIdStr) throws IllegalArgumentException {
        // 验证区域ID字符串是否为空
        if (StringUtils.isBlank(districtIdStr)) {
            throw new IllegalArgumentException("区域ID不能为空");
        }
        // 解析区域ID字符串为JSONArray对象
        return JSON.parseArray(districtIdStr);
        return  Arrays.asList(districtIdStr.split(","));
    }
    private List<String> processDistrictIds(IDistrictService districtService, JSONArray districtIds) {
    private List<String> processDistrictIds(IDistrictService districtService, List<String> districtIds) {
        List<String> collect1 = districtIds.stream().map(item -> (String) item).collect(Collectors.toList());
        List<DistrictEntity> list3 = districtService.list(Wrappers.<DistrictEntity>lambdaQuery().in(DistrictEntity::getId, collect1));
        return list3.stream().map(item -> item.getAoiCode()).collect(Collectors.toList());
src/main/java/org/springblade/modules/label/service/impl/LabelServiceImpl.java
@@ -31,6 +31,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
 * 标签管理 服务实现类
@@ -52,24 +53,77 @@
     * @param label
     * @return
     */
//    @Override
//    public Object getLabelList(LabelVO label) {
//        Map<Integer, TreeIntegerNode> labelList = baseMapper.getLabelList(label);
//        List<Integer> list = new ArrayList<>();
//        // 遍历
//        labelList.forEach((id, treeNode) -> {
//            if (treeNode.getHasChildren()) {
//                list.add(id);
//            }
//        });
//        if (list.size() > 0) {
//            // 查询子集
//            Map<Integer, TreeIntegerNode> childrenLabelList = baseMapper.getChildrenLabelList(list);
//            List<Integer> list2 = new ArrayList<>();
//            for (TreeIntegerNode value : childrenLabelList.values()) {
//                if(value.getHasChildren()){
//                    list2.add(value.getId());
//                }
//            }
//            Map<Integer, TreeIntegerNode> childrenLabelList2 = baseMapper.getChildrenLabelList(list2);
//            // 合并集合
//            labelList.putAll(childrenLabelList);
//            labelList.putAll(childrenLabelList2);
//        }
//        // 处理并返回
//        return NodeTreeUtil.getNodeTree(labelList);
//    }
    @Override
    public Object getLabelList(LabelVO label) {
        Map<Integer, TreeIntegerNode> labelList = baseMapper.getLabelList(label);
        // 使用Optional避免空指针异常
        Optional<Map<Integer, TreeIntegerNode>> labelListOptional = Optional.ofNullable(baseMapper.getLabelList(label));
        if (!labelListOptional.isPresent()) {
            return null; // 返回空Map代替null
        }
        Map<Integer, TreeIntegerNode> labelList = labelListOptional.get();
        List<Integer> list = new ArrayList<>();
        // 遍历
        // 遍历,筛选有子节点的标签
        labelList.forEach((id, treeNode) -> {
            if (treeNode.getHasChildren()) {
                list.add(id);
            }
        });
        if (list.size() > 0) {
            // 查询子集
        if (!list.isEmpty()) {
            // 使用批量查询以提高性能
            Map<Integer, TreeIntegerNode> childrenLabelList = baseMapper.getChildrenLabelList(list);
            // 合并集合
            List<Integer> list2 = new ArrayList<>();
            // 筛选出有子节点的标签
            childrenLabelList.values().forEach(value -> {
                if(value.getHasChildren()){
                    list2.add(value.getId());
                }
            });
            // 避免重复查询,直接合并结果
            labelList.putAll(childrenLabelList);
            if (!list2.isEmpty()) {
                // 如果有第二层子节点,进行查询并合并
                Map<Integer, TreeIntegerNode> childrenLabelList2 = baseMapper.getChildrenLabelList(list2);
                labelList.putAll(childrenLabelList2);
            }
        }
        // 处理并返回
        return NodeTreeUtil.getNodeTree(labelList);
        // 处理并返回标签树
        return NodeTreeUtil.getNodeTree(labelList); // 假设NodeTreeUtil.getNodeTree已做空值检查
    }
    @Override