/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.doorplateAddress.service.impl; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.poi.hssf.record.DVALRecord; import org.jetbrains.annotations.NotNull; import org.springblade.common.node.TreeNode; import org.springblade.core.mp.support.Condition; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.StringUtil; import org.springblade.modules.doorplateAddress.entity.DoorplateAddressEntity; import org.springblade.modules.doorplateAddress.mapper.DoorplateAddressMapper; import org.springblade.modules.doorplateAddress.service.IDoorplateAddressService; import org.springblade.modules.doorplateAddress.vo.DoorplateAddressVOTree; import org.springblade.modules.doorplateAddress.vo.DoorplateAddressVO; import org.springblade.modules.doorplateAddress.vo.FuncNode; import org.springblade.modules.house.service.IHouseRentalService; import org.springblade.modules.house.service.IHouseholdLabelService; import org.springblade.modules.house.service.IHouseholdService; import org.springblade.modules.house.vo.HouseParam; import org.springblade.modules.house.vo.HouseRentalVO; import org.springblade.modules.house.vo.HouseholdVO; import org.springblade.modules.place.service.IPlaceService; import org.springframework.beans.factory.annotation.Autowired; 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.stream.Collectors; /** * 门牌地址表(总台账数据) 服务实现类 * * @author BladeX * @since 2023-10-28 */ @Service public class DoorplateAddressServiceImpl extends ServiceImpl implements IDoorplateAddressService { @Autowired private IPlaceService placeService; @Autowired private IHouseholdService householdService; @Autowired private IHouseRentalService houseRentalService; @Override public IPage selectDoorplateAddressPage(IPage page, DoorplateAddressVO doorplateAddress) { return page.setRecords(baseMapper.selectDoorplateAddressPage(page, doorplateAddress)); } /** * 根据角色获取功能集合数据 * @param type 1:查社区 2:查房屋和场所(居民角色) * @param roleName * @return */ @Override public Object getFuncList(Integer type,String roleName) { List list = new ArrayList<>(); if (null!=type) { // 如果是网格管理员,系统管理员 if (type==1){ // 查询街道 List townList = baseMapper.getRegionListByGroupTwon(); // 查询社区 List neiList = baseMapper.getRegionListByGroupNei(); TreeNode node = townList.get(0); node.setHasChildren(true); // 遍历 for (TreeNode treeNode : neiList) { treeNode.setHasChildren(false); node.getChildren().add(treeNode); } // 查询区域数据,当前只有西市街道数据 return townList; } // 如果是居民 if (type==2){ return getInhabitantInfo(list); } } return list; } /** * 获取居民角色对应的房屋,场所信息 * @param list * @return */ private Object getInhabitantInfo(List list) { // 查询房屋集合信息 List houseNodeList = householdService.selectHouseNodeList(AuthUtil.getUserId()); // 查询场所集合信息 List placeNodeList = placeService.selectPlaceNodeList(AuthUtil.getUserId()); if (houseNodeList.size()>0 && placeNodeList.size()>0){ // 合并 TreeNode houseNode = new TreeNode(); houseNode.setName("房屋"); houseNode.setId("1"); houseNode.setHasChildren(true); houseNode.setChildren(houseNodeList); TreeNode placeNode = new TreeNode(); placeNode.setName("场所"); placeNode.setId("2"); placeNode.setHasChildren(true); placeNode.setChildren(placeNodeList); list.add(houseNode); list.add(placeNode); // 返回 return list; } if (houseNodeList.size()>0){ list = houseNodeList; } if (placeNodeList.size()>0){ list = placeNodeList; } // 返回 return list; } /** * 获取楼盘相关集合数据 * @param houseParam * @return */ @Override public Object getHousesList(HouseParam houseParam) { List list = new ArrayList<>(); Map map = new HashMap<>(2); // 查小区,场所 if (houseParam.getType()==1){ // 根据社区名称查询小区集合 list = baseMapper.getDistrictList(houseParam.getName(),houseParam.getCode()); } // 查楼栋,街路巷 if (houseParam.getType()==2){ return getBuildLevelData(houseParam,map); } // 查户室 if (houseParam.getType()==3){ return getHouseLevelData(houseParam, map); } return list; } /** * 查询户室级别数据 * @param houseParam * @param map * @return */ private Map getHouseLevelData(HouseParam houseParam, Map map) { // 判断地址类型 if (houseParam.getAddressType()==1) { List aoiList = new ArrayList<>(); List shopList = new ArrayList<>(); // 查询户室及住户相关信息,单元中包含住户,或者和单元平级的 商铺 List householdList = getUnitHouseholdList(houseParam.getName(), houseParam.getCode()); // 遍历 if (householdList.size()>0){ for (FuncNode funcNode : householdList) { if (funcNode.getAddressType()==1){ aoiList.add(funcNode); } if (funcNode.getAddressType()==2){ shopList.add(funcNode); } } } map.put("aoiList",aoiList); map.put("shopList",shopList); // 返回 return map; }else{ // 根据街路巷编号查询街路巷门牌名称集合 List doorplateNameList = baseMapper.getDoorplateNameList(houseParam.getName(), houseParam.getCode()); map.put("aoiList",new ArrayList<>()); map.put("shopList",doorplateNameList); // 返回 return map; } } /** * 获取楼栋层级数据 * @param houseParam * @param map * @return */ private Object getBuildLevelData(HouseParam houseParam,Map map) { // 判断 code 长度,如果 code 长度大于 12 则为小区查楼栋/商铺,否则则按社区查街路巷 if (houseParam.getCode().length()>12){ List aoiList = new ArrayList<>(); List shopList = new ArrayList<>(); // 根据社区名称查询楼栋或者商铺的集合 List list = baseMapper.getBuildingList(houseParam.getName(),houseParam.getCode()); if (list.size()>0){ for (TreeNode treeNode : list) { if (treeNode.getAddressType()==1){ aoiList.add(treeNode); } if (treeNode.getAddressType()==2){ shopList.add(treeNode); } } } map.put("aoiList",aoiList); map.put("shopList",shopList); // 返回 return map; }else { // 查询街路巷 List list = baseMapper.getStreetRuList(houseParam.getName(),houseParam.getCode()); map.put("aoiList",new ArrayList<>()); map.put("shopList",list); // 返回 return map; } } /** * 查询户室及住户相关信息,单元中包含住户 * @param name * @param code * @return */ private List getUnitHouseholdList(String name, String code) { List list = new ArrayList<>(); // 查询户室及住户相关信息,单元中包含住户 List funcNodes = baseMapper.getUnitHouseholdList(name,code); // 遍历 List aoiNodes = new ArrayList<>(); List shopNodes = new ArrayList<>(); for (FuncNode funcNode : funcNodes) { if (funcNode.getAddressType()==1){ aoiNodes.add(funcNode); } if (funcNode.getAddressType()==2){ shopNodes.add(funcNode); } } // 处理,先按单元分组,再按楼层分组 if (aoiNodes.size()>0){ Map> listMap = aoiNodes.stream().collect(Collectors.groupingBy(FuncNode::getFloor)); List 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); } list.addAll(shopNodes); // 返回 return list; } /** * 查询房屋及出租详情信息 * @param code 门牌地址编号 * @return */ @Override public Object getHouseRentInfo(String code) { // 先查询门牌信息 DoorplateAddressVO doorplateAddressDetailVO = baseMapper.getDoorplateAddressDetailByCode(code); if(null!= doorplateAddressDetailVO) { // 查询房屋出租情况 List houseRentalVOS = houseRentalService.getHouseRentalListByCode(code); // 查询房屋人员情况 List householdVOS = householdService.getHouseholdListByCode(code); // 设置数据 doorplateAddressDetailVO.setHouseRentalList(houseRentalVOS); doorplateAddressDetailVO.setHouseholdList(householdVOS); } // 返回 return doorplateAddressDetailVO; } @Override public List getDoorplateAddressList(String code, String type) { //西市街道 万达社区 滨江西路66号 万达华府 26栋 List list = new ArrayList<>(); if (type.equals("townStreet")){ //获取所有街道街道 list = baseMapper.getTownStreetVOTreeList(); }else if (type.equals("nei")){ list= baseMapper.getNeiVOTreeList(code); }else if (type.equals("streetRu")){ list = baseMapper.getStreetRuVOTreeList(code); }else if (type.equals("district")){ list=baseMapper.getDistrictVOTreeList(code); }else if (type.equals("building")){ list = baseMapper.getBuildingVOTreeList(code); } return list; } /** * 根据参数获取地址详情 * @return */ @Override public DoorplateAddressVO getDoorplateAddressDetail(DoorplateAddressVO doorplateAddressVO) { //根据参数获取地址详情 DoorplateAddressVO doorplateAddress = baseMapper.getDoorplateAddressDetail(doorplateAddressVO); // 返回 return doorplateAddress; } }