huanghongfa
2021-07-05 2dcf4b9d75cc1b6613aea59cec4a0f9cc97f1c0e
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java
@@ -4,19 +4,22 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import com.panzhihua.common.enums.PopulCultureLevelEnum;
import com.panzhihua.common.enums.PopulHouseUseEnum;
import com.panzhihua.common.enums.PopulIsOksEnum;
import com.panzhihua.common.enums.PopulMarriageEnum;
import com.panzhihua.common.enums.*;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.dtos.community.*;
import com.panzhihua.common.model.dtos.community.bigscreen.BigScreenEventDetailDTO;
import com.panzhihua.common.model.dtos.grid.PageComMngPopulationDTO;
import com.panzhihua.common.model.dtos.grid.PagePopulationListDTO;
import com.panzhihua.common.model.dtos.grid.admin.ComMngPopulationExportDTO;
import com.panzhihua.common.model.dtos.grid.admin.ComMngPopulationListDTO;
import com.panzhihua.common.model.dtos.grid.admin.ComMngPopulationSubordinateDTO;
import com.panzhihua.common.model.dtos.grid.admin.PageComMngVillagePopulationDTO;
import com.panzhihua.common.model.dtos.user.PageInputUserDTO;
import com.panzhihua.common.model.helper.AESUtil;
import com.panzhihua.common.model.vos.R;
@@ -27,11 +30,13 @@
import com.panzhihua.common.model.vos.community.screen.civil.CivilStatisticsVO;
import com.panzhihua.common.model.vos.community.screen.civil.CivilVillageStatisticsVO;
import com.panzhihua.common.model.vos.community.screen.event.*;
import com.panzhihua.common.model.vos.community.screen.event.EventTransferRecordVO;
import com.panzhihua.common.model.vos.community.screen.index.*;
import com.panzhihua.common.model.vos.grid.EventGridDataVO;
import com.panzhihua.common.model.vos.grid.EventResourceVO;
import com.panzhihua.common.model.vos.grid.PopulationDetailVO;
import com.panzhihua.common.model.vos.grid.PopulationListVO;
import com.panzhihua.common.model.vos.grid.*;
import com.panzhihua.common.model.vos.grid.admin.ComMngPopulationListVO;
import com.panzhihua.common.model.vos.grid.admin.ComMngPopulationVillageVO;
import com.panzhihua.common.model.vos.grid.admin.ComMngSubordinateVO;
import com.panzhihua.common.model.vos.grid.admin.excel.ComMngPopulationExportExcelVO;
import com.panzhihua.common.model.vos.screen.ComActPopulationCultureVO;
import com.panzhihua.common.model.vos.screen.ComActPopulationScreenVO;
import com.panzhihua.common.model.vos.screen.ComMngPopulationAgeVO;
@@ -44,19 +49,18 @@
import com.panzhihua.service_community.model.dos.*;
import com.panzhihua.service_community.service.ComMngPopulationHouseUserService;
import com.panzhihua.service_community.service.ComMngPopulationService;
import com.panzhihua.service_community.service.ComMngVillageService;
import com.panzhihua.service_community.service.EventResourceService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -335,8 +339,19 @@
        areaPath.append(areaAddressVO.getProvince()).append(">").append(areaAddressVO.getCity()).append(">").append(areaAddressVO.getDistrict()).append(">");
        //处理实有人口信息
        for (ComMngPopulationServeExcelVO vo : list) {
            String address = "";
            //查询街路巷是否存在
            if (vo.getDoorNo().contains("号")) {
                vo.setDoorNo(vo.getDoorNo().replace("号",""));
            }
            if(vo.getFloor().contains("栋")){
                vo.setFloor(vo.getFloor().replace("栋",""));
            }
            if(vo.getUnitNo().contains("单元")){
                vo.setUnitNo(vo.getUnitNo().replace("单元",""));
            }
            if(vo.getHouseNo().contains("号")){
                vo.setHouseNo(vo.getHouseNo().replace("号",""));
            }
            //查询小区街路巷是否存在
            ComMngVillageDO comMngVillageDO = comActVillageDAO.selectOne(new QueryWrapper<ComMngVillageDO>().eq("alley", vo.getRoad()).eq("house_num", vo.getDoorNo()).eq("community_id", communityId));
            if (comMngVillageDO == null) {
                ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
@@ -347,15 +362,14 @@
                continue;
            }
            if (!comMngVillageDO.getHouseNum().contains("号")) {
                comMngVillageDO.setHouseNum(comMngVillageDO.getHouseNum() + "号");
            }
            StringBuilder address = new StringBuilder();
            address.append(areaAddressVO.getProvince()).append(areaAddressVO.getCity()).append(areaAddressVO.getDistrict())
                    .append(streetName).append(comMngVillageDO.getAlley()).append(vo.getDoorNo()).append("号").append(vo.getFloor()).append("栋")
                    .append(vo.getUnitNo()).append("单元").append(vo.getHouseNo()).append("号");
            address = areaAddressVO.getProvince() + areaAddressVO.getCity()
                    + areaAddressVO.getDistrict() + streetName + comMngVillageDO.getAlley() + comMngVillageDO.getHouseNum()
                    + vo.getFloor() + vo.getUnitNo() + vo.getHouseNo();
            vo.setAddress(address);
            vo.setAddress(address.toString());
            //todo 后期优化改为批量
            //先判断房屋是否存在
            ComMngPopulationHouseDO populationHouseDO = comMngPopulationHouseDAO.selectOne(new QueryWrapper<ComMngPopulationHouseDO>().lambda()
                    .eq(ComMngPopulationHouseDO::getCommunityId, communityId).eq(ComMngPopulationHouseDO::getVillageId, comMngVillageDO.getVillageId())
@@ -363,7 +377,8 @@
                    .eq(ComMngPopulationHouseDO::getHouseNo, vo.getHouseNo()));
            if (populationHouseDO == null) {
                //房屋信息不存在建立房屋信息
                populationHouseDO = savePopulationHouse(vo, comMngVillageDO, communityId, address, areaPath, comActDO.getName());
                populationHouseDO = savePopulationHouse(vo, comMngVillageDO, communityId, areaPath, comActDO.getName());
                vo.setHouseId(populationHouseDO.getId());
            }
            if (StringUtils.isEmpty(vo.getName()) && StringUtils.isEmpty(vo.getCardNo())) {
@@ -380,7 +395,7 @@
            } else {
                //如果存在人口信息,且是自用房,则更新人口默认的房屋信息
                if (vo.getIsRent() != null && vo.getIsRent().equals(PopulHouseUseEnum.SELF.getCode())) {
                    populationDO = updatePopulationHouseUse(vo, populationDO);
                    populationDO = updatePopulationDO(vo, populationDO);
                }
            }
@@ -413,19 +428,20 @@
        return R.ok();
    }
    private ComMngPopulationDO updatePopulationHouseUse(ComMngPopulationServeExcelVO vo, ComMngPopulationDO populationDO) throws Exception {
        populationDO.setRoad(vo.getRoad());
        populationDO.setDoorNo(vo.getDoorNo());
        populationDO.setFloor(vo.getFloor());
        populationDO.setUnitNo(vo.getUnitNo());
        populationDO.setHouseNo(vo.getHouseNo());
        populationDO.setCardNo(vo.getCardNo());
        populationDO.setCardNoStr(vo.getCardNo());
    private ComMngPopulationDO updatePopulationDO(ComMngPopulationServeExcelVO vo, ComMngPopulationDO populationDO) throws Exception {
        UpdateWrapper<ComMngPopulationDO> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id",populationDO.getId());
        ComMngPopulationDO update = new ComMngPopulationDO();
        update.setRoad(vo.getRoad());
        update.setDoorNo(vo.getDoorNo());
        update.setFloor(vo.getFloor());
        update.setUnitNo(vo.getUnitNo());
        update.setHouseNo(vo.getHouseNo());
        update.setHouseId(vo.getHouseId());
        if (StringUtils.isNotEmpty(populationDO.getPhone())) {
//            populationDO.setPhone(AESUtil.encrypt128(populationDO.getPhone(), aesKey));
            populationDO.setPhone(populationDO.getPhone());
            update.setPhone(populationDO.getPhone());
        }
        this.baseMapper.updateById(populationDO);
        this.baseMapper.update(update,updateWrapper);
        return populationDO;
    }
@@ -439,14 +455,21 @@
        populationDO.setStreetId(comActDO.getStreetId());
        populationDO.setLabel(Joiner.on(",").join(userTag));
        populationDO.setVillageName(comMngVillageDO.getGroupAt());
        populationDO.setCardNo(vo.getCardNo());
        populationDO.setCardNoStr(vo.getCardNo());
        populationDO.setUpdateAt(new Date());
        //新增的时候默认绑定房屋id
//        if ((vo.getIsRent() != null && vo.getIsRent().equals(PopulHouseUseEnum.SELF.getCode())) ||
//                (vo.getIsResidence() != null && vo.getIsResidence().intValue() == 1)) {
//            populationDO.setHouseId(vo.getHouseId());
//        }else{
//            populationDO.setHouseId(null);
//        }
        this.baseMapper.insert(populationDO);
        return populationDO;
    }
    private ComMngPopulationHouseDO savePopulationHouse(ComMngPopulationServeExcelVO vo, ComMngVillageDO comMngVillageDO, Long communityId, String address, StringBuilder areaPath, String actName) {
    private ComMngPopulationHouseDO savePopulationHouse(ComMngPopulationServeExcelVO vo, ComMngVillageDO comMngVillageDO, Long communityId,StringBuilder areaPath, String actName) {
        //查询该房屋未建立,执行建立房屋信息
        ComMngPopulationHouseDO populationHouseDO = new ComMngPopulationHouseDO();
        populationHouseDO.setId(Snowflake.getId());
@@ -454,17 +477,17 @@
        populationHouseDO.setVillageId(comMngVillageDO.getVillageId());
        populationHouseDO.setAlley(vo.getRoad());
        populationHouseDO.setHouseNum(vo.getDoorNo());
        populationHouseDO.setCode(vo.getDoorNo());
        populationHouseDO.setStatus(vo.getIsRent());
        populationHouseDO.setCommunityId(communityId);
        populationHouseDO.setFloor(vo.getFloor());
        populationHouseDO.setUnitNo(vo.getUnitNo());
        populationHouseDO.setHouseNo(vo.getHouseNo());
        populationHouseDO.setAddress(address);
        populationHouseDO.setCode(vo.getHouseNo());
        populationHouseDO.setAddress(vo.getAddress());
        populationHouseDO.setUpdateAt(new Date());
        populationHouseDO.setConstructPurpose(vo.getBuildPurpose());
        StringBuilder housePath = new StringBuilder();
        housePath.append(populationHouseDO.getAlley()).append(">").append(actName).append(">").append(comMngVillageDO.getName()).append(">").append(address);
        housePath.append(populationHouseDO.getAlley()).append(">").append(actName).append(">").append(comMngVillageDO.getName()).append(">").append(vo.getAddress());
        populationHouseDO.setPath(areaPath.toString() + housePath.toString());
        try {
            populationHouseDO.setConstructArea(new BigDecimal(vo.getBuildArea()));
@@ -1079,6 +1102,9 @@
        //查询统计人口数据
        ComMngPopulationTotalVO populationTotalVO = populationDAO.getPopulationTotalByAdmin(communityId);
        if(communityId.equals(2L)){
            populationTotalVO.setSpecialTotal(36);
        }
        statisticsVO.setPopulationTotalVO(populationTotalVO);
        return R.ok(statisticsVO);
@@ -1269,6 +1295,14 @@
        //统计学历
        setCultureGroup(comActPopulationScreenVO, communityId);
        //查询网格数据
        List<EventGridStatisticsVO> gridStatisticsList = this.baseMapper.getEventScreenGridData(communityId);
        comActPopulationScreenVO.setGridStatisticsList(gridStatisticsList);
        //查询小区列表
        List<CivilVillageStatisticsVO> villageStatisticsList = this.baseMapper.getCivilScreenVillageList(communityId);
        comActPopulationScreenVO.setVillageStatisticsList(villageStatisticsList);
        return R.ok(comActPopulationScreenVO);
    }
@@ -1355,11 +1389,23 @@
        comActPopulationScreenVO.setAgeGroup(ageList);
    }
    /**
     * 获取社区网格
     *
     * @param communityId 社区id
     * @return 网格数据
     */
    @Override
    public R getScreenGirds(Long communityId) {
        return R.ok(this.baseMapper.getEventScreenGridData(communityId));
    }
    /**
     * 事件大屏查询事件详情
     *
     * @param eventDetailDTO 请求参数
     * @return 事件详情
     */
    @Override
    public R getScreenEventDetail(BigScreenEventDetailDTO eventDetailDTO) {
        EventNewStatisticsVO statisticsVO = new EventNewStatisticsVO();
@@ -1442,6 +1488,12 @@
        return R.ok(statisticsVO);
    }
    /**
     * 获取人口数据信息
     *
     * @param populationListDTO 请求参数
     * @return 人口数据
     */
    @Override
    public R pagePopulationListApp(PagePopulationListDTO populationListDTO){
        IPage<PopulationListVO> pagePopulationList = this.baseMapper.pagePopulationListApp(new Page(populationListDTO.getPageNum(),populationListDTO.getPageSize()),populationListDTO);
@@ -1453,6 +1505,12 @@
        return R.ok(pagePopulationList);
    }
    /**
     * 根据人口id获取人口详情
     *
     * @param populationId  人口id
     * @return  人口详情
     */
    @Override
    public R getPopulationDetailApp(Long populationId){
        PopulationDetailVO detail = this.baseMapper.getPopulationDetailApp(populationId);
@@ -1468,17 +1526,196 @@
        return R.ok(detail);
    }
    /**
     * 修复人口加密问题
     *
     * @return 修复结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R getPopulationRepairByApp(){
        List<ComMngPopulationDO> populationDOList = this.baseMapper.selectList(new QueryWrapper<ComMngPopulationDO>());
        if(!populationDOList.isEmpty()){
            populationDOList.forEach(population -> {
                try {
                    population.setCardNo(AESUtil.encrypt128(population.getCardNoStr(),aesKey));
                }catch (Exception e){
                }
                this.baseMapper.updateById(population);
            });
        }
        return R.ok();
    }
    /**
     * 综治后台-居民列表
     * @param populationListDTO 请求参数
     * @return  居民列表
     */
    @Override
    public R getGridPopulationAdminList(ComMngPopulationListDTO populationListDTO){
        IPage<ComMngPopulationListVO> populationListIPage = this.baseMapper.getGridPopulationAdminList(new Page(populationListDTO.getPageNum(),populationListDTO.getPageSize()),populationListDTO);
        if(!populationListIPage.getRecords().isEmpty()){
            populationListIPage.getRecords().forEach(population -> {
                try {
                    Integer age = IdcardUtil.getAgeByIdCard(population.getCardNo());
                    population.setAge(age);
                }catch (Exception e){
                    log.error("当前人口身份证获取年龄失败,实有人口id:" + population.getId());
                }
                //查询此用户在当前房屋是否是户主
                Integer relation = this.baseMapper.getPopulationRelationByHouseId(population.getHouseId(),population.getId());
                if(relation == null || relation != 1){
                    population.setIsRelation(2);
                }else{
                    population.setIsRelation(1);
                }
            });
        }
        return R.ok(populationListIPage);
    }
    /**
     * 综治后台-删除居民
     * @param ids   居民id集合
     * @return  删除结果
     */
    @Override
    public R delGridPopulationAdmin(List<Long> ids){
        Integer count = this.baseMapper.getPopulationVisitingCount(ids);
        if(count > 0){
            return R.ok("您选择的数据中存在被引用的,无法删除");
        }
        this.baseMapper.deleteBatchIds(ids);
        return R.ok();
    }
    @Override
    public R binding() {
        QueryWrapper<ComMngPopulationDO> query = new QueryWrapper<>();
        query.isNull("house_id");
        List<ComMngPopulationDO> list = baseMapper.selectList(query);
        list.forEach(e->{
            QueryWrapper<ComMngPopulationHouseDO> houseQuery = new QueryWrapper<>();
            houseQuery.lambda().eq(ComMngPopulationHouseDO::getCommunityId,e.getActId())
                    .eq(ComMngPopulationHouseDO::getAlley,e.getRoad())
                    .eq(ComMngPopulationHouseDO::getFloor,e.getFloor())
                    .eq(ComMngPopulationHouseDO::getUnitNo,e.getUnitNo())
                    .eq(ComMngPopulationHouseDO::getHouseNo,e.getHouseNo());
            List<ComMngPopulationHouseDO> houseList = comMngPopulationHouseDAO.selectList(houseQuery);
            if(!CollectionUtils.isEmpty(houseList)){
                UpdateWrapper<ComMngPopulationDO> updateWrapper = new UpdateWrapper();
                updateWrapper.eq("id",e.getId());
                ComMngPopulationDO populationDO = new ComMngPopulationDO();
                populationDO.setHouseId(houseList.get(0).getId());
                baseMapper.update(populationDO,updateWrapper);
            }
        });
        return R.ok();
    }
    /**
     * 查询平台人口列表
     * @param populationDTO 请求参数
     * @return  人口列表
     */
    @Override
    public R getBuildingHousePopulationList(PageComMngPopulationDTO populationDTO){
        IPage<EventSpecialPopulationVO> populationVOIPage = this.baseMapper.getBuildingHousePopulationList(new Page(populationDTO.getPageNum(),populationDTO.getPageSize()),populationDTO);
        if(!populationVOIPage.getRecords().isEmpty()){
            populationVOIPage.getRecords().forEach(population -> {
                try {
                    Integer age = IdcardUtil.getAgeByIdCard(population.getIdCard());
                    population.setAge(age);
                }catch (Exception e){
                    log.error("人员身份证转换年龄失败,人员id:" + population.getId());
                }
            });
        }
        return R.ok(populationVOIPage);
    }
    /**
     * 综治后台-居民标签栏统计
     * @return  居民统计
     */
    @Override
    public R getGridPopulationStatistics(Long communityId){
        return R.ok(this.baseMapper.getGridPopulationStatistics(communityId));
    }
    /**
     * 综治后台-居民导出查询居民数据
     * @param populationExportDTO   请求参数
     * @return  导出结果
     */
    @Override
    public R getGridPopulationExport(ComMngPopulationExportDTO populationExportDTO){
        //结果集
        List<ComMngPopulationExportExcelVO> resultPopulationList = new ArrayList<>();
        //查询人口信息
        List<ComMngPopulationListVO> populationListVOList = this.baseMapper.getGridPopulationAdminLists(populationExportDTO);
        if(!populationListVOList.isEmpty()){
            populationListVOList.forEach(population -> {
                ComMngPopulationExportExcelVO populationExportExcelVO = new ComMngPopulationExportExcelVO();
                BeanUtils.copyProperties(population,populationExportExcelVO);
                if(population.getSex() != null){
                    populationExportExcelVO.setSex(PopulSexEnum.getCnDescByName(population.getSex()));
                }
                if(population.getPoliticalOutlook() != null){
                    populationExportExcelVO.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCnDescByName(population.getPoliticalOutlook()));
                }
                if(population.getIsHouse() != null){
                    if(!population.getIsHouse().equals(0L)){
                        populationExportExcelVO.setIsHouse("是");
                    }else{
                        populationExportExcelVO.setIsHouse("否");
                    }
                }
                if(population.getEventStatus() != null){
                    populationExportExcelVO.setEventStatus(EventStatusEnum.getCnDescByName(population.getEventStatus()));
                }
                try {
                    Integer age = IdcardUtil.getAgeByIdCard(population.getCardNo());
                    populationExportExcelVO.setAge(age);
                }catch (Exception e){
                    log.error("当前人口身份证获取年龄失败,实有人口id:" + population.getId());
                }
                resultPopulationList.add(populationExportExcelVO);
            });
        }
        return R.ok(resultPopulationList);
    }
    /**
     * 综治后台-居民管理小区列表
     * @param name  小区名字
     * @return  小区列表
     */
    @Override
    public R relationVillage(String name){
        List<ComMngPopulationVillageVO> populationVillageList = new ArrayList<>();
        QueryWrapper<ComMngVillageDO> villageQuery = new QueryWrapper<>();
        if(StringUtils.isNotEmpty(name)){
            villageQuery.lambda().like(ComMngVillageDO::getName,name);
        }
        List<ComMngVillageDO> villageList = comActVillageDAO.selectList(villageQuery);
        if(!villageList.isEmpty()){
            villageList.forEach(village -> {
                ComMngPopulationVillageVO populationVillageVO = new ComMngPopulationVillageVO();
                BeanUtils.copyProperties(village,populationVillageVO);
                populationVillageList.add(populationVillageVO);
            });
        }
        return R.ok(populationVillageList);
    }
    @Override
    public R getVillagePopulationAdmin(PageComMngVillagePopulationDTO villagePopulationDTO){
        return R.ok(this.baseMapper.getVillagePopulationAdmin(new Page(villagePopulationDTO.getPageNum(),villagePopulationDTO.getPageSize()),villagePopulationDTO));
    }
}