101captain
2021-12-23 5a8a90c095280fbd2106869ecd2bad10e01a57a6
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActBuildingServiceImpl.java
@@ -1,6 +1,31 @@
package com.panzhihua.service_community.service.impl;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import cn.hutool.core.util.IdcardUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.panzhihua.common.enums.PopulIsOksEnum;
import com.panzhihua.common.enums.PopulPoliticalOutlookEnum;
import com.panzhihua.common.model.dtos.community.building.admin.*;
import com.panzhihua.common.model.vos.community.ComMngVillageVO;
import com.panzhihua.common.model.vos.community.ComPopulationActVO;
import com.panzhihua.common.model.vos.community.building.admin.BuildingUnitHouseListAdminVo;
import com.panzhihua.common.model.vos.community.building.admin.PageBuildingListAdminVo;
import com.panzhihua.common.model.vos.grid.ComMngVillageBuildingHouseDetailVO;
import com.panzhihua.common.model.vos.grid.ComMngVillageBuildingHouseVO;
import com.panzhihua.common.model.vos.grid.ComMngVillageBuildingVO;
import com.panzhihua.common.model.vos.grid.PopulationListVO;
import com.panzhihua.service_community.dao.*;
import com.panzhihua.service_community.model.dos.*;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
@@ -9,29 +34,16 @@
import com.panzhihua.common.model.vos.community.ComMngPopulationImportErrorVO;
import com.panzhihua.common.utlis.Snowflake;
import com.panzhihua.common.utlis.StringUtils;
import com.panzhihua.service_community.dao.ComActDAO;
import com.panzhihua.service_community.dao.ComActVillageDAO;
import com.panzhihua.service_community.dao.ComMngBuildingDAO;
import com.panzhihua.service_community.model.dos.ComActDO;
import com.panzhihua.service_community.model.dos.ComMngBuildingDO;
import com.panzhihua.service_community.model.dos.ComMngVillageDO;
import com.panzhihua.service_community.model.dos.GridBuildRelationDO;
import com.panzhihua.service_community.service.ComActBuildingService;
import com.panzhihua.service_community.service.GridBuildRelationService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * @author xyh
 * @date 2021/6/10 13:46
 */
@Service
public class ComActBuildingServiceImpl extends ServiceImpl<ComMngBuildingDAO, ComMngBuildingDO> implements ComActBuildingService {
public class ComActBuildingServiceImpl extends ServiceImpl<ComMngBuildingDAO, ComMngBuildingDO>
    implements ComActBuildingService {
    @Resource
    private ComActVillageDAO comActVillageDAO;
@@ -39,54 +51,70 @@
    private ComActDAO comActDAO;
    @Resource
    private GridBuildRelationService gridBuildRelationService;
    @Resource
    private ComMngPopulationHouseDAO comMngPopulationHouseDAO;
    @Resource
    private ComMngPopulationDAO comMngPopulationDAO;
    @Resource
    private ComMngPopulationHouseUserDAO comMngPopulationHouseUserDAO;
    @Override
    public R batchSaveBuilding(List<ComMngBuildingExcelVO> newVoList, Long communityId) {
        ArrayList<ComMngBuildingDO> list = Lists.newArrayList();
        List<GridBuildRelationDO> keyList = new ArrayList<>();
        List<ComMngPopulationImportErrorVO> errorList = new ArrayList<>();
        ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
        importErrorVO.setErrorMsg("重复楼栋");
        StringBuilder sb = new StringBuilder();
        for(ComMngBuildingExcelVO vo:newVoList){
            ComMngVillageDO comMngVillageDO = comActVillageDAO.selectOne(new QueryWrapper<ComMngVillageDO>().eq("alley",vo.getAlley()).eq("house_num",vo.getDoorNo()).eq("community_id",communityId));
            if(comMngVillageDO == null){
        for (ComMngBuildingExcelVO vo : newVoList) {
            ComMngVillageDO comMngVillageDO = comActVillageDAO.selectOne(new QueryWrapper<ComMngVillageDO>()
                .eq("alley", vo.getAlley()).eq("house_num", vo.getDoorNo()).eq("community_id", communityId));
            if (comMngVillageDO == null) {
                ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
                BeanUtils.copyProperties(vo,importErrorVO);
                importErrorVO.setErrorMsg("该社区不存在此街路巷");
                errorList.add(importErrorVO);
                continue;
            }
            vo.setName(vo.getName().replace("栋",""));
            List<ComMngBuildingDO> buildingDOList = this.baseMapper.selectList(new QueryWrapper<ComMngBuildingDO>().eq("street_id",comMngVillageDO.getStreetId()).eq("act_id",communityId).eq("village_id",comMngVillageDO.getVillageId()).eq("name",vo.getName()));
            if(buildingDOList.size() > 0){
                sb.append("街路巷:").append(vo.getAlley()).append(",门牌号:").append(vo.getDoorNo()).append(",楼栋号:").append(vo.getName()).append(";");
            vo.setName(vo.getName().replace("栋", ""));
            List<ComMngBuildingDO> buildingDOList = this.baseMapper.selectList(new QueryWrapper<ComMngBuildingDO>()
                .eq("act_id", communityId).eq("village_id", comMngVillageDO.getVillageId()).eq("name", vo.getName()));
            if (buildingDOList.size() > 0) {
                ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
                BeanUtils.copyProperties(vo,importErrorVO);
                importErrorVO.setErrorMsg("该楼栋已存在");
                errorList.add(importErrorVO);
                continue;
            }
            ComMngBuildingDO comMngBuildingDO = new ComMngBuildingDO();
            BeanUtils.copyProperties(vo,comMngBuildingDO);
            BeanUtils.copyProperties(vo, comMngBuildingDO);
            comMngBuildingDO.setActId(comMngVillageDO.getCommunityId());
            comMngBuildingDO.setStreetId(comMngVillageDO.getStreetId());
            comMngBuildingDO.setVillageId(comMngVillageDO.getVillageId());
//            comMngBuildingDO.setElevatorTotal(vo.getElevatorTotal());
            ComActDO actDO = comActDAO.selectById(comMngVillageDO.getCommunityId());
            StringBuilder path = new StringBuilder();
            path.append(vo.getAlley()).append(">").append(actDO.getName()).append(comMngVillageDO.getName()).append(">").append(vo.getName());
            path.append(vo.getAlley()).append(">").append(actDO.getName()).append(comMngVillageDO.getName()).append(">")
                .append(vo.getName());
            comMngBuildingDO.setPath(path.toString());
            comMngBuildingDO.setGridId(vo.getGridId());
//            comMngBuildingDO.setGridId(vo.getGridId());
            list.add(comMngBuildingDO);
            GridBuildRelationDO gridBuildRelation = getGridBuildRelationDO(communityId, comMngVillageDO.getStreetId(), vo, comMngBuildingDO);
            GridBuildRelationDO gridBuildRelation =
                getGridBuildRelationDO(communityId, comMngVillageDO.getStreetId(), vo, comMngBuildingDO);
            keyList.add(gridBuildRelation);
        }
        if(list.size()>0){
        if (list.size() > 0) {
            this.saveBatch(list);
            if(keyList.size() > 0){
                gridBuildRelationService.saveBatchGridBuildRelation(keyList);
            }
        }
        if(sb.length() > 0 && !StringUtils.isEmpty(sb.toString())){
            errorList.add(importErrorVO);
            return R.fail(JSON.toJSONString(errorList));
        if (errorList.size() > 0) {
            return R.fail(errorList);
        }
        gridBuildRelationService.saveBatchGridBuildRelation(keyList);
        this.saveBatch(list);
        return R.ok();
    }
    public GridBuildRelationDO getGridBuildRelationDO(Long communityId, Long streetId, ComMngBuildingExcelVO vo, ComMngBuildingDO comMngBuildingDO) {
    public GridBuildRelationDO getGridBuildRelationDO(Long communityId, Long streetId, ComMngBuildingExcelVO vo,
        ComMngBuildingDO comMngBuildingDO) {
        GridBuildRelationDO gridBuildRelation = new GridBuildRelationDO();
        gridBuildRelation.setId(Snowflake.getId());
        gridBuildRelation.setBuildId(comMngBuildingDO.getId());
@@ -94,12 +122,518 @@
        gridBuildRelation.setVillageId(comMngBuildingDO.getVillageId());
        gridBuildRelation.setGridCommunityId(communityId);
        gridBuildRelation.setGridStreetId(streetId);
        if (vo.getGridId() != null) {
            gridBuildRelation.setGridId(Long.valueOf(vo.getGridId()));
        }
//        if (vo.getGridId() != null) {
//            gridBuildRelation.setGridId(Long.valueOf(vo.getGridId()));
//        }
        gridBuildRelation.setGridName(vo.getGridName());
        gridBuildRelation.setType(1);
        gridBuildRelation.setCreateAt(new Date());
        return gridBuildRelation;
    }
    /**
     * 社区后台-分页查询楼栋列表
     * @param pageBuildingListDto   请求参数
     * @return  楼栋列表
     */
    @Override
    public R pageBuildingAdmin(PageBuildingListDto pageBuildingListDto){
        IPage<PageBuildingListAdminVo> pageBuildingList = this.baseMapper.pageBuildingAdmin(
                new Page(pageBuildingListDto.getPageNum(),pageBuildingListDto.getPageSize()),pageBuildingListDto);
        pageBuildingList.getRecords().forEach(building -> {
            //查询该楼栋下最高的楼层
            if(StringUtils.isNotEmpty(building.getBuildFloorSum())){
                if(building.getBuildFloorSum().length() == 3){
                    building.setBuildFloorSum(building.getBuildFloorSum().substring(0,1));
                }else if(building.getBuildFloorSum().length() == 4){
                    building.setBuildFloorSum(building.getBuildFloorSum().substring(0,2));
                }else if(building.getBuildFloorSum().length() > 4){
                    building.setBuildFloorSum(building.getBuildFloorSum().substring(0,2));
                }
            }
        });
        return R.ok(pageBuildingList);
    }
    /**
     * 社区后台-查询楼栋列表表头统计数据
     * @param communityId   社区id
     * @return  楼栋列表表头统计数据
     */
    @Override
    public R buildingListHeaderStatisticsAdmin(Long communityId){
        return R.ok(this.baseMapper.buildingListHeaderStatisticsAdmin(communityId));
    }
    /**
     * 社区后台-查询楼栋详情
     * @param id    楼栋id
     * @return  楼栋详情
     */
    @Override
    public R detailBuildAdmin(Long id){
        return R.ok(this.baseMapper.detailBuildAdmin(id));
    }
    /**
     * 查询楼栋下单元列表
     * @param id    楼栋id
     * @return  单元列表
     */
    @Override
    public R buildingUnitListAdmin(Long id){
        //查询该楼栋信息
        ComMngBuildingDO buildingDO = this.baseMapper.selectById(id);
        if(buildingDO == null){
            return R.fail("未查询到该楼栋信息");
        }
        List<ComMngVillageBuildingVO> buildList = new ArrayList<>();
        if(StringUtils.isNotEmpty(buildingDO.getName())){
            buildList = this.baseMapper.buildingUnitList(buildingDO.getVillageId(),buildingDO.getName());
            buildList.forEach(villageBuilding -> {
                if(StringUtils.isNotEmpty(villageBuilding.getFloor())){
                    if (!villageBuilding.getFloor().contains("栋")) {
                        villageBuilding.setFloorString(villageBuilding.getFloor() + "栋");
                    } else {
                        villageBuilding.setFloorString(villageBuilding.getFloor());
                    }
                }
                if(StringUtils.isNotEmpty(villageBuilding.getUnitNo())){
                    if (!villageBuilding.getUnitNo().contains("单元")) {
                        villageBuilding.setUnitNoString(villageBuilding.getUnitNo() + "单元");
                    } else {
                        villageBuilding.setUnitNoString(villageBuilding.getUnitNo());
                    }
                }
            });
        }
        return R.ok(buildList);
    }
    /**
     * 查询楼栋单元下房屋列表
     * @param unitHouseListDto    请求参数
     * @return  单元列表
     */
    @Override
    public R buildingUnitHouseListAdmin(PageBuildingUnitHouseListDto unitHouseListDto){
        BuildingUnitHouseListAdminVo houseListAdminVo = new BuildingUnitHouseListAdminVo();
        //查询该楼栋信息
        ComMngBuildingDO buildingDO = this.baseMapper.selectById(unitHouseListDto.getId());
        if(buildingDO == null){
            return R.fail("未查询到该楼栋信息");
        }
        unitHouseListDto.setVillageId(buildingDO.getVillageId());
        unitHouseListDto.setFloor(buildingDO.getName());
        List<ComMngVillageBuildingHouseVO> buildHouseList = new ArrayList<>();
        if(StringUtils.isNotEmpty(buildingDO.getName())){
            IPage<ComMngVillageBuildingHouseVO> buildingHousePage = this.baseMapper.getBuildingUnitHouseList(new Page(unitHouseListDto.getPageNum(),unitHouseListDto.getPageSize()),unitHouseListDto);
            buildingHousePage.getRecords().forEach(house -> {
                if(StringUtils.isEmpty(house.getBuildingNum())){
                    if(StringUtils.isNotEmpty(house.getHouseNo())){
                        boolean result = house.getHouseNo().matches("[0-9]+");
                        if (result) {// 该字段为纯数字
                            if (house.getHouseNo().length() == 4) {
                                house.setBuildingNum(house.getHouseNo().substring(0, 2).replaceAll("^(0+)", ""));
                            } else if (house.getHouseNo().length() == 3) {
                                house.setBuildingNum(house.getHouseNo().substring(0, 1).replaceAll("^(0+)", ""));
                            }
                        } else {
                            house.setBuildingNum("-");
                        }
                    } else {
                        house.setBuildingNum("-");
                    }
                }
            });
            buildHouseList = buildingHousePage.getRecords();
            //查询统计数据
            Map<String,Object> statisticsMap = this.baseMapper.getBuildingUnitHouseStatistics(buildingDO.getVillageId(),buildingDO.getName(),unitHouseListDto.getUnit());
            if(statisticsMap != null){
                houseListAdminVo.setHouseNum(Integer.parseInt(statisticsMap.get("houseNum").toString()));
                houseListAdminVo.setLiveTotal(Integer.parseInt(statisticsMap.get("liveTotal").toString()));
                houseListAdminVo.setLeaseTotal(Integer.parseInt(statisticsMap.get("leaseTotal").toString()));
                houseListAdminVo.setVacantNum(Integer.parseInt(statisticsMap.get("vacantNum").toString()));
            }
        }
        houseListAdminVo.setHouseList(buildHouseList);
        return R.ok(houseListAdminVo);
    }
    @Override
    public R buildingUnitHouseDetailAdmin(Long houseId,Long communityId){
        ComMngVillageBuildingHouseDetailVO buildingHouseDetailVO =
                this.baseMapper.buildingUnitHouseDetailAdmin(houseId);
        if (buildingHouseDetailVO != null) {
            // 转换楼层数
            String houseNo = buildingHouseDetailVO.getHouseNo();
            boolean result = houseNo.matches("[0-9]+");
            if (result) {// 该字段为纯数字
                if (houseNo.length() == 4) {
                    buildingHouseDetailVO.setBuildingNum(houseNo.substring(0, 2).replaceAll("^(0+)", ""));
                } else if (houseNo.length() == 3) {
                    buildingHouseDetailVO.setBuildingNum(houseNo.substring(0, 1).replaceAll("^(0+)", ""));
                }
            } else {
                buildingHouseDetailVO.setBuildingNum("-");
            }
            // 查询该房屋的户主信息
            List<PopulationListVO> householderList =
                    this.baseMapper.getGridVillageBuildingPopulationList(buildingHouseDetailVO.getId(),communityId, null, 1);
            if (!householderList.isEmpty()) {
                householderList.forEach(householder -> {
                    if(householder.getPoliticalOutlook() != null){
                        householder.setOutlook(PopulPoliticalOutlookEnum.getCnDescByName(householder.getPoliticalOutlook()));
                    }else{
                        householder.setOutlook("暂无");
                    }
                    try {
                        Integer age = IdcardUtil.getAgeByIdCard(householder.getCardNo());
                        householder.setAge(age);
                    } catch (Exception e) {
                        log.error("身份证号码转换年龄失败,人员id:" + householder.getId());
                    }
                });
                buildingHouseDetailVO.setHouseholderList(householderList);
            }
            // 查询该房屋的住户信息
            List<PopulationListVO> populationList =
                    this.baseMapper.getGridVillageBuildingPopulationList(buildingHouseDetailVO.getId(),communityId, null, null);
            if (!populationList.isEmpty()) {
                populationList.forEach(population -> {
                    if(population.getPoliticalOutlook() != null){
                        population.setOutlook(PopulPoliticalOutlookEnum.getCnDescByName(population.getPoliticalOutlook()));
                    }else{
                        population.setOutlook("暂无");
                    }
                    try {
                        Integer age = IdcardUtil.getAgeByIdCard(population.getCardNo());
                        population.setAge(age);
                    } catch (Exception e) {
                        log.error("身份证号码转换年龄失败,人员id:" + population.getId());
                    }
                });
                buildingHouseDetailVO.setPopulationList(populationList);
            }
        }
        return R.ok(buildingHouseDetailVO);
    }
    @Override
    public R buildingVillageListAdmin(Long communityId){
        List<ComMngVillageVO> villageList = this.baseMapper.buildingVillageListAdmin(communityId);
        villageList.forEach(village -> {
            if(StringUtils.isEmpty(village.getName())){
                village.setName(village.getAlley() + village.getHouseNum());
            }
        });
        return R.ok(villageList);
    }
    @Override
    public R addBuildingUnitAdmin(AddBuildingUnitDto addBuildingUnitDto){
        //查询该楼栋信息
        ComMngBuildingDO buildingDO = this.baseMapper.selectById(addBuildingUnitDto.getId());
        if(buildingDO == null){
            return R.fail("未查询到该楼栋信息");
        }
        Integer count = comMngPopulationHouseDAO.selectCount(new QueryWrapper<ComMngPopulationHouseDO>().lambda()
                .eq(ComMngPopulationHouseDO::getVillageId,buildingDO.getVillageId())
                .eq(ComMngPopulationHouseDO::getFloor,buildingDO.getName())
                .eq(ComMngPopulationHouseDO::getUnitNo,addBuildingUnitDto.getUnitNo()));
        if(count > 0){
            return R.fail("该单元号已存在");
        }
        //查询小区信息
        ComMngVillageDO villageDO = comActVillageDAO.selectById(buildingDO.getVillageId());
        if(villageDO != null){
            StringBuilder address = new StringBuilder();
            StringBuilder housePath = new StringBuilder();
            ComPopulationActVO populationActVO = comActDAO.getPopulationActById(addBuildingUnitDto.getCommunityId());
            if(populationActVO != null){
                address.append(populationActVO.getProvinceName()).append(populationActVO.getCityName())
                        .append(populationActVO.getDistrictName()).append(populationActVO.getStreetName())
                        .append(villageDO.getAlley()).append(villageDO.getHouseNum()).append("号");
                if (StringUtils.isNotEmpty(buildingDO.getName())) {
                    address.append(buildingDO.getName()).append("栋");
                }
                if (StringUtils.isNotEmpty(addBuildingUnitDto.getUnitNo())) {
                    address.append(addBuildingUnitDto.getUnitNo()).append("单元");
                }
                housePath.append(populationActVO.getProvinceName()).append(">").append(populationActVO.getCityName()).append(">")
                        .append(villageDO.getAlley()).append(">").append(populationActVO.getName()).append(">").append(villageDO.getName()).append(">").append(address.toString());
            }
            ComMngPopulationHouseDO populationHouseDO = new ComMngPopulationHouseDO();
            populationHouseDO.setId(Snowflake.getId());
            populationHouseDO.setStreetId(buildingDO.getStreetId());
            populationHouseDO.setVillageId(buildingDO.getVillageId());
            populationHouseDO.setAlley(villageDO.getAlley());
            populationHouseDO.setHouseNum(villageDO.getHouseNum());
            populationHouseDO.setStatus(ComMngPopulationHouseDO.status.kongzhi);
            populationHouseDO.setCommunityId(addBuildingUnitDto.getCommunityId());
            populationHouseDO.setFloor(buildingDO.getName());
            populationHouseDO.setUnitNo(addBuildingUnitDto.getUnitNo());
            populationHouseDO.setAddress(address.toString());
            populationHouseDO.setUpdateAt(new Date());
            populationHouseDO.setPath(housePath.toString());
            populationHouseDO.setIsEmpty(PopulIsOksEnum.YES.getCode());
            comMngPopulationHouseDAO.insert(populationHouseDO);
        }else{
            return R.fail();
        }
        return R.ok();
    }
    @Override
    public R editBuildingUnitAdmin(EditBuildingUnitDto editBuildingUnitDto){
        //查询该楼栋信息
        ComMngBuildingDO buildingDO = this.baseMapper.selectById(editBuildingUnitDto.getId());
        if(buildingDO == null){
            return R.fail("未查询到该楼栋信息");
        }
        Integer oldCount = comMngPopulationHouseDAO.selectCount(new QueryWrapper<ComMngPopulationHouseDO>().lambda()
                .eq(ComMngPopulationHouseDO::getVillageId,buildingDO.getVillageId())
                .eq(ComMngPopulationHouseDO::getFloor,buildingDO.getName())
                .eq(ComMngPopulationHouseDO::getUnitNo,editBuildingUnitDto.getOldUnitNo()));
        if(oldCount <= 0){
            return R.fail("原单元号不存在");
        }
        Integer newCount = comMngPopulationHouseDAO.selectCount(new QueryWrapper<ComMngPopulationHouseDO>().lambda()
                .eq(ComMngPopulationHouseDO::getVillageId,buildingDO.getVillageId())
                .eq(ComMngPopulationHouseDO::getFloor,buildingDO.getName())
                .eq(ComMngPopulationHouseDO::getUnitNo,editBuildingUnitDto.getNewUnitNo()));
        if(newCount > 0){
            return R.fail("新单元号已存在");
        }
        //查询小区信息
        ComMngVillageDO villageDO = comActVillageDAO.selectById(buildingDO.getVillageId());
        if(villageDO != null){
            String unitString = editBuildingUnitDto.getNewUnitNo() + "单元";
            List<ComMngPopulationHouseDO> editHouseList = new ArrayList<>();
            //查询需要修改的房屋列表信息
            List<ComMngPopulationHouseDO> houseList = comMngPopulationHouseDAO.selectList(new QueryWrapper<ComMngPopulationHouseDO>().lambda()
                    .eq(ComMngPopulationHouseDO::getVillageId,villageDO.getVillageId())
                    .eq(ComMngPopulationHouseDO::getFloor,buildingDO.getName())
                    .eq(ComMngPopulationHouseDO::getUnitNo,editBuildingUnitDto.getOldUnitNo()));
            houseList.forEach(house -> {
                ComMngPopulationHouseDO houseDO = new ComMngPopulationHouseDO();
                houseDO.setId(house.getId());
                houseDO.setAddress(house.getAddress().replace(house.getUnitNo() + "单元", unitString));
                houseDO.setPath(house.getPath().replace(house.getUnitNo() + "单元", unitString));
                houseDO.setUnitNo(editBuildingUnitDto.getNewUnitNo());
                editHouseList.add(houseDO);
            });
            List<ComMngPopulationDO> editPopulationList = new ArrayList<>();
            //查询需要修改的人口信息
            List<ComMngPopulationDO> populationList = comMngPopulationDAO.selectList(new QueryWrapper<ComMngPopulationDO>().lambda()
                    .eq(ComMngPopulationDO::getVillageId,villageDO.getVillageId())
                    .eq(ComMngPopulationDO::getFloor,buildingDO.getName())
                    .eq(ComMngPopulationDO::getUnitNo,editBuildingUnitDto.getOldUnitNo()));
            populationList.forEach(population -> {
                ComMngPopulationDO populationDO = new ComMngPopulationDO();
                populationDO.setId(population.getId());
                populationDO.setAddress(population.getAddress().replace(population.getUnitNo() + "单元", unitString));
                populationDO.setUnitNo(editBuildingUnitDto.getNewUnitNo());
                editPopulationList.add(populationDO);
            });
            if(!editHouseList.isEmpty()){
                comMngPopulationHouseDAO.updateUnitAll(editHouseList);
            }
            if(!editPopulationList.isEmpty()){
                comMngPopulationDAO.updateAll(editPopulationList);
            }
        }else{
            return R.fail();
        }
        return R.ok();
    }
    @Override
    public R addBuildingHouseAdmin(AddBuildingHouseDto addBuildingHouseDto){
        //查询该楼栋信息
        ComMngBuildingDO buildingDO = this.baseMapper.selectById(addBuildingHouseDto.getId());
        if(buildingDO == null){
            return R.fail("未查询到该楼栋信息");
        }
        Integer count = comMngPopulationHouseDAO.selectCount(new QueryWrapper<ComMngPopulationHouseDO>().lambda()
                .eq(ComMngPopulationHouseDO::getVillageId,buildingDO.getVillageId())
                .eq(ComMngPopulationHouseDO::getFloor,buildingDO.getName())
                .eq(ComMngPopulationHouseDO::getUnitNo,addBuildingHouseDto.getUnitNo())
                .eq(ComMngPopulationHouseDO::getHouseNo,addBuildingHouseDto.getHouseNo()));
        if(count > 0){
            return R.fail("该房间已存在");
        }
        //查询小区信息
        ComMngVillageDO villageDO = comActVillageDAO.selectById(buildingDO.getVillageId());
        if(villageDO != null){
            StringBuilder address = new StringBuilder();
            StringBuilder housePath = new StringBuilder();
            ComPopulationActVO populationActVO = comActDAO.getPopulationActById(addBuildingHouseDto.getCommunityId());
            if(populationActVO != null){
                address.append(populationActVO.getProvinceName()).append(populationActVO.getCityName())
                        .append(populationActVO.getDistrictName()).append(populationActVO.getStreetName())
                        .append(villageDO.getAlley()).append(villageDO.getHouseNum()).append("号");
                if (StringUtils.isNotEmpty(buildingDO.getName())) {
                    address.append(buildingDO.getName()).append("栋");
                }
                if (StringUtils.isNotEmpty(addBuildingHouseDto.getUnitNo())) {
                    address.append(addBuildingHouseDto.getUnitNo()).append("单元");
                }
                if (StringUtils.isNotEmpty(addBuildingHouseDto.getHouseNo())) {
                    address.append(addBuildingHouseDto.getHouseNo()).append("号");
                }
                housePath.append(populationActVO.getProvinceName()).append(">").append(populationActVO.getCityName()).append(">")
                        .append(villageDO.getAlley()).append(">").append(populationActVO.getName()).append(">").append(villageDO.getName()).append(">").append(address.toString());
            }
            ComMngPopulationHouseDO populationHouseDO = new ComMngPopulationHouseDO();
            populationHouseDO.setId(Snowflake.getId());
            populationHouseDO.setStreetId(buildingDO.getStreetId());
            populationHouseDO.setVillageId(buildingDO.getVillageId());
            populationHouseDO.setAlley(villageDO.getAlley());
            populationHouseDO.setHouseNum(villageDO.getHouseNum());
            populationHouseDO.setStatus(ComMngPopulationHouseDO.status.kongzhi);
            populationHouseDO.setCommunityId(addBuildingHouseDto.getCommunityId());
            populationHouseDO.setFloor(buildingDO.getName());
            populationHouseDO.setUnitNo(addBuildingHouseDto.getUnitNo());
            populationHouseDO.setHouseNo(addBuildingHouseDto.getHouseNo());
            populationHouseDO.setFloorNum(addBuildingHouseDto.getFloorNum());
            populationHouseDO.setAddress(address.toString());
            populationHouseDO.setUpdateAt(new Date());
            populationHouseDO.setPath(housePath.toString());
            populationHouseDO.setIsEmpty(PopulIsOksEnum.YES.getCode());
            comMngPopulationHouseDAO.insert(populationHouseDO);
        }else{
            return R.fail();
        }
        return R.ok();
    }
    @Override
    public R editBuildingHouseAdmin(EditBuildingHouseDto editBuildingHouseDto){
        ComMngPopulationHouseDO houseDO = comMngPopulationHouseDAO.selectById(editBuildingHouseDto.getHouseId());
        if(houseDO == null){
            return R.fail("未查询到该户室");
        }
        Integer count = comMngPopulationHouseDAO.selectCount(new QueryWrapper<ComMngPopulationHouseDO>().lambda()
                .eq(ComMngPopulationHouseDO::getVillageId,houseDO.getVillageId())
                .eq(ComMngPopulationHouseDO::getFloor,houseDO.getFloor())
                .eq(ComMngPopulationHouseDO::getUnitNo,houseDO.getUnitNo())
                .eq(ComMngPopulationHouseDO::getHouseNo,editBuildingHouseDto.getHouseNo()));
        if(count > 0){
            return R.fail("该房间已存在");
        }
        //查询小区信息
        ComMngVillageDO villageDO = comActVillageDAO.selectById(houseDO.getVillageId());
        if(villageDO != null){
            StringBuilder address = new StringBuilder();
            StringBuilder housePath = new StringBuilder();
            ComPopulationActVO populationActVO = comActDAO.getPopulationActById(editBuildingHouseDto.getCommunityId());
            if(populationActVO != null){
                address.append(populationActVO.getProvinceName()).append(populationActVO.getCityName())
                        .append(populationActVO.getDistrictName()).append(populationActVO.getStreetName())
                        .append(villageDO.getAlley()).append(villageDO.getHouseNum()).append("号");
                if (StringUtils.isNotEmpty(houseDO.getFloor())) {
                    address.append(houseDO.getFloor()).append("栋");
                }
                if (StringUtils.isNotEmpty(houseDO.getUnitNo())) {
                    address.append(houseDO.getUnitNo()).append("单元");
                }
                if (StringUtils.isNotEmpty(editBuildingHouseDto.getHouseNo())) {
                    address.append(editBuildingHouseDto.getHouseNo()).append("号");
                }
                housePath.append(populationActVO.getProvinceName()).append(">").append(populationActVO.getCityName()).append(">")
                        .append(villageDO.getAlley()).append(">").append(populationActVO.getName()).append(">").append(villageDO.getName()).append(">").append(address.toString());
                houseDO.setAddress(address.toString());
                houseDO.setPath(housePath.toString());
            }
            List<ComMngPopulationDO> editPopulationList = new ArrayList<>();
            //查询需要修改的人口信息
            List<ComMngPopulationDO> populationList = comMngPopulationDAO.selectList(new QueryWrapper<ComMngPopulationDO>().lambda()
                    .eq(ComMngPopulationDO::getVillageId,villageDO.getVillageId())
                    .eq(ComMngPopulationDO::getFloor,houseDO.getFloor())
                    .eq(ComMngPopulationDO::getUnitNo,houseDO.getUnitNo())
                    .eq(ComMngPopulationDO::getHouseNo,houseDO.getHouseNo()));
            populationList.forEach(population -> {
                ComMngPopulationDO populationDO = new ComMngPopulationDO();
                populationDO.setId(population.getId());
                populationDO.setAddress(address.toString());
                populationDO.setHouseNo(editBuildingHouseDto.getHouseNo());
                editPopulationList.add(populationDO);
            });
            houseDO.setHouseNo(editBuildingHouseDto.getHouseNo());
            houseDO.setFloorNum(editBuildingHouseDto.getFloorNum());
            comMngPopulationHouseDAO.updateById(houseDO);
            if(!editPopulationList.isEmpty()){
                comMngPopulationDAO.updateAll(editPopulationList);
            }
        }else{
            return R.fail();
        }
        return R.ok();
    }
    @Override
    public R deleteBuildingHousePopulationAdmin(DeleteBuildingHousePopulationDto housePopulationDto){
        ComMngPopulationHouseDO houseDO = comMngPopulationHouseDAO.selectById(housePopulationDto.getHouseId());
        if(houseDO == null){
            return R.fail("未查询到该户室");
        }
        if(housePopulationDto.getType().equals(DeleteBuildingHousePopulationDto.type.yz)){
            ComMngPopulationHouseUserDO houseUserDO = comMngPopulationHouseUserDAO.selectOne(new QueryWrapper<ComMngPopulationHouseUserDO>().lambda()
                    .eq(ComMngPopulationHouseUserDO::getHouseId,housePopulationDto.getHouseId())
                    .eq(ComMngPopulationHouseUserDO::getPopulId,housePopulationDto.getPopulationId()));
            if(houseUserDO != null){
                houseUserDO.setRelationId(ComMngPopulationHouseUserDO.relationId.zuzhu);
                houseUserDO.setUpdateAt(new Date());
                comMngPopulationHouseUserDAO.updateById(houseUserDO);
            }
        }else if(housePopulationDto.getType().equals(DeleteBuildingHousePopulationDto.type.jzr)){
            //清理人员和房屋关联关系
            comMngPopulationHouseUserDAO.delete(new QueryWrapper<ComMngPopulationHouseUserDO>().lambda()
                    .eq(ComMngPopulationHouseUserDO::getHouseId,housePopulationDto.getHouseId())
                    .eq(ComMngPopulationHouseUserDO::getPopulId,housePopulationDto.getPopulationId()));
            //查询该房屋是否还有人居住
            Integer count = comMngPopulationHouseUserDAO.selectCount(new QueryWrapper<ComMngPopulationHouseUserDO>().lambda()
                    .eq(ComMngPopulationHouseUserDO::getHouseId,housePopulationDto.getHouseId()));
            if(count <= 0){
                houseDO.setStatus(ComMngPopulationHouseDO.status.kongzhi);
                comMngPopulationHouseDAO.updateById(houseDO);
            }else{
                //查询该房屋的居住人中是否还有租住的人
                Integer zCount = comMngPopulationHouseUserDAO.selectCount(new QueryWrapper<ComMngPopulationHouseUserDO>().lambda()
                        .eq(ComMngPopulationHouseUserDO::getHouseId,housePopulationDto.getHouseId())
                        .eq(ComMngPopulationHouseUserDO::getRelationId,ComMngPopulationHouseUserDO.relationId.zuhu));
                if(zCount <= 0){
                    houseDO.setStatus(ComMngPopulationHouseDO.status.zizhu);
                    comMngPopulationHouseDAO.updateById(houseDO);
                }
            }
        }
        return R.ok();
    }
}