From 43f0578e80af82ecae6c61b51bd0539c6b960603 Mon Sep 17 00:00:00 2001
From: puhanshu <a9236326>
Date: 星期二, 16 八月 2022 19:08:32 +0800
Subject: [PATCH] 服务范围优化

---
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActBuildingServiceImpl.java |  629 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 589 insertions(+), 40 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActBuildingServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActBuildingServiceImpl.java
index cfc284c..f06b13b 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActBuildingServiceImpl.java
+++ b/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,533 @@
         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();
+    }
+
+    /**
+     * 根据小区id查询楼栋列表
+     * @param villageId 小区id
+     * @return  查询楼栋列表
+     */
+    @Override
+    public R getBuildListByVillageId(Long villageId) {
+        return R.ok(this.baseMapper.getBuildListByVillageId(villageId));
+    }
+
+    @Override
+    public R delete(Long id) {
+        return R.ok(this.baseMapper.deleteById(id));
+    }
 }

--
Gitblit v1.7.1