zhongrj
2023-11-09 5e226868ecf8ee0b0c4787861e6a23c5c4f36c0c
楼盘数据查询修改(多单元问题)
2 files modified
106 ■■■■ changed files
src/main/java/org/springblade/modules/doorplateAddress/mapper/DoorplateAddressMapper.xml 8 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java 98 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/doorplateAddress/mapper/DoorplateAddressMapper.xml
@@ -75,11 +75,10 @@
    <!--根据小区名称查询楼栋/商铺集合-->
    <select id="getBuildingList" resultType="org.springblade.common.node.TreeNode" >
        (
            select building_code as id,building_name as name,1 as addressType from jczz_doorplate_address
            select building_code as id,ifnull(building_name,'1栋') as name,1 as addressType from jczz_doorplate_address
            where 1=1
            and aoi_code = #{code}
            and building_code !=''
            and building_name !=''
            and doorplate_type = '户室牌'
            group by building_code,building_name
            order by building_name
@@ -98,7 +97,8 @@
    <select id="getUnitHouseholdList" resultType="org.springblade.modules.doorplateAddress.vo.FuncNode" >
        (
            select
            jda.unit_code unitCode,jda.floor,jda.house_name as houseNo,jda.address_code addressCode,
            ifnull(jda.unit_name,"未知单元") unitName,jda.unit_code unitCode,jda.floor,jda.house_name as houseNo,
            jda.address_code addressCode,
            jh.name as realName,jh.role_type as roleType,1 as addressType
            from jczz_doorplate_address jda
            left join
@@ -112,7 +112,7 @@
        )
        union all
        (
            select address_code as unitCode,doorplate_name as floor,'' as houseNo,address_code as addressCode,
            select '' as unitName,address_code as unitCode,doorplate_name as floor,'' as houseNo,address_code as addressCode,
            '' as realName,'' as roleType,2 as addressType
            from jczz_doorplate_address
            where 1=1
src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java
@@ -20,6 +20,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import liquibase.repackaged.org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.record.DVALRecord;
import org.jetbrains.annotations.NotNull;
import org.springblade.common.node.TreeNode;
@@ -43,10 +44,7 @@
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -222,8 +220,10 @@
            List<TreeNode> shopList = new ArrayList<>();
            // 根据社区名称查询楼栋或者商铺的集合
            List<TreeNode> list = baseMapper.getBuildingList(houseParam.getName(),houseParam.getCode());
            // 排序  StringUtils.getDigits(X.getName()) 取出数字排序
            List<TreeNode> sortList = list.stream().sorted(Comparator.comparing(X -> StringUtils.getDigits(X.getName()))).collect(Collectors.toList());
            if (list.size()>0){
                for (TreeNode treeNode : list) {
                for (TreeNode treeNode : sortList) {
                    if (treeNode.getAddressType()==1){
                        aoiList.add(treeNode);
                    }
@@ -269,20 +269,12 @@
        }
        // 处理,先按单元分组,再按楼层分组
        if (aoiNodes.size()>0){
            Map<String, List<FuncNode>> listMap = aoiNodes.stream().collect(Collectors.groupingBy(FuncNode::getFloor));
            List<FuncNode> funcNodeList  = new ArrayList<>();
            listMap.forEach((s, temps) -> {
                FuncNode funcNode = new FuncNode();
                funcNode.setFloor(s);
                funcNode.setChildren(temps);
                funcNode.setAddressType(1);
                funcNodeList.add(funcNode);
            });
            FuncNode funcNode = new FuncNode();
            funcNode.setUnitName("一单元");
            funcNode.setChildren(funcNodeList);
            funcNode.setAddressType(1);
            list.add(funcNode);
            // 按单元分组
            Map<String, List<FuncNode>> listMap = aoiNodes.stream().collect(Collectors.groupingBy(FuncNode::getUnitName));
            // 单个单元
            oneUnitHandle(list, listMap);
            // 多个单元
            moreUnitHandle(list, listMap);
        }
        list.addAll(shopNodes);
        // 返回
@@ -290,6 +282,74 @@
    }
    /**
     * 单个单元处理
     * @param list
     * @param listMap
     */
    private void oneUnitHandle(List<FuncNode> list, Map<String, List<FuncNode>> listMap) {
        if (listMap.size()==1){
            Set<String> keySet = listMap.keySet();
            // 获取第一个key
            String firstKey = null;
            for (String key : keySet) {
                firstKey = key;
                break;
            }
            if (firstKey.equals("未知单元")){
                // 取出数据按楼层分组
                List<FuncNode> unitList = listMap.get(firstKey);
                Map<String, List<FuncNode>> floorListMap = unitList.stream().collect(Collectors.groupingBy(FuncNode::getFloor));
                List<FuncNode> funcNodeList  = new ArrayList<>();
                floorListMap.forEach((s, temps) -> {
                    FuncNode funcNode = new FuncNode();
                    funcNode.setFloor(s);
                    funcNode.setChildren(temps);
                    funcNode.setAddressType(1);
                    funcNodeList.add(funcNode);
                });
                FuncNode funcNode = new FuncNode();
                funcNode.setUnitName("一单元");
                funcNode.setChildren(funcNodeList);
                funcNode.setAddressType(1);
                list.add(funcNode);
            }
        }
    }
    /**
     * 多单元处理
     * @param list
     * @param listMap
     */
    private void moreUnitHandle(List<FuncNode> list, Map<String, List<FuncNode>> listMap) {
        // 不止一个单元
        if (listMap.size()>1){
            List<FuncNode> tempList = new ArrayList<>();
            // 遍历
            listMap.forEach((s, temps) -> {
                FuncNode funcNode = new FuncNode();
                funcNode.setUnitName(s);
                funcNode.setAddressType(1);
                // 按楼层分组
                Map<String, List<FuncNode>> floorListMap = temps.stream().collect(Collectors.groupingBy(FuncNode::getFloor));
                List<FuncNode> floorNodeList  = new ArrayList<>();
                floorListMap.forEach((floor, houseList) -> {
                    FuncNode floorNode = new FuncNode();
                    floorNode.setFloor(floor);
                    floorNode.setChildren(houseList);
                    floorNode.setAddressType(1);
                    floorNodeList.add(floorNode);
                });
                funcNode.setChildren(floorNodeList);
                tempList.add(funcNode);
            });
            // 排序
            List<FuncNode> sortList = tempList.stream().sorted(Comparator.comparing(X -> X.getUnitName())).collect(Collectors.toList());
            list.addAll(sortList);
        }
    }
    /**
     * 查询房屋及出租详情信息
     * @param code 门牌地址编号
     * @return