tangxiaobao
2021-08-06 f8ab89a945944ad0b570e9473aac6fbd175f4a2a
实有人口新增模板导入接口开发
9个文件已修改
4个文件已添加
2191 ■■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/enums/PopulRegiterNatureEnum.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationDisabilityExcelListen.java 516 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationVeteransExcelListen.java 597 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationDisabilityExcelVO.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationDisabilityMistakeExcelVO.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationVeteransMistakeExcelVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/PopulationApi.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/CommonDataApi.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComMngPopulationService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java 631 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwRotaServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/Constants.java
@@ -169,6 +169,8 @@
    public static final String VETERANS_POPULATION_ERROR_LIST = "VETERANS_POPULATION_ERROR_LIST_";
    public static final String DISABILITY_POPULATION_ERROR_LIST = "DISABILITY_POPULATION_ERROR_LIST_";
    /**
     * 高德地图获取天气url
     */
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/enums/PopulRegiterNatureEnum.java
New file
@@ -0,0 +1,45 @@
package com.panzhihua.common.enums;
/** 实有房屋使用类型
 * @author xyh
 * @date 2021/6/11 9:33
 */
public enum PopulRegiterNatureEnum {
    CZHK(1,"城镇户口"),
    NCHK(0,"农村户口"),
    ;
    private final Integer code;
    private final String name;
    PopulRegiterNatureEnum(Integer code, String name){
        this.code = code;
        this.name = name;
    }
    public Integer getCode() {
        return code;
    }
    public String getName() {
        return name;
    }
    public static int getCodeByName(String name) {
        for (PopulRegiterNatureEnum item : PopulRegiterNatureEnum.values()) {
            if (item.getName().equals(name)) {
                return item.getCode();
            }
        }
        return -1;
    }
    public static String getCnDescByName(Integer code) {
        for (PopulRegiterNatureEnum item : PopulRegiterNatureEnum.values()) {
            if (item.getCode().equals(code)) {
                return item.getName();
            }
        }
        return "其他";
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationDisabilityExcelListen.java
New file
@@ -0,0 +1,516 @@
package com.panzhihua.common.listen;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSONArray;
import com.google.common.collect.Lists;
import com.panzhihua.common.constants.BcDictionaryConstants;
import com.panzhihua.common.constants.Constants;
import com.panzhihua.common.enums.*;
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.vos.BcDictionaryVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.ComMngPopulationDisabilityExcelVO;
import com.panzhihua.common.model.vos.community.ComMngPopulationDisabilityMistakeExcelVO;
import com.panzhihua.common.service.community.CommunityService;
import com.panzhihua.common.utlis.ListUtils;
import com.panzhihua.common.utlis.PayUtil;
import com.panzhihua.common.utlis.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
 * @description: 残疾人导入监听
 * @author: txb
 */
@Slf4j
public class ComMngPopulationDisabilityExcelListen extends AnalysisEventListener<Map<Integer, String>> {
    private CommunityService communityService;
    private Long communityId;
    private static int headSize = 0;
    private Map<Integer, String> headData;
    private String userName;
    // FTP 登录密码
    private String password;
    // FTP 服务器地址IP地址
    private String host;
    // FTP 端口
    private int port;
    private String excelUrl;
    private StringRedisTemplate stringRedisTemplate;
    public static String loadUrl;
    public ComMngPopulationDisabilityExcelListen(CommunityService communityService, Long communityId, String userName, String password, String host, int port, String excelUrl, StringRedisTemplate stringRedisTemplate) {
            this.communityService = communityService;
            this.communityId = communityId;
            this.userName = userName;
            this.password = password;
            this.host = host;
            this.port = port;
            this.excelUrl = excelUrl;
            this.stringRedisTemplate = stringRedisTemplate;
        }
        /**
         * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
         */
        private static final int BATCH_COUNT = 5000;
        List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();
        @Override
        public void invoke(Map<Integer, String> data, AnalysisContext context) {
            list.add(data);
            if (list.size() >= BATCH_COUNT) {
                saveData();
                list.clear();
            }
        }
        /**
         * 这里会一行行的返回头
         *
         * @param headMap
         * @param context
         */
        @Override
        public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
            headSize = headMap.size();
            headData = headMap;
        }
        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
            saveData();
            log.info("所有数据解析完成!");
        }
        /**
         * 不是固定的列只能手动处理
         */
        private void saveData() {
            R<List<BcDictionaryVO>> dictionaryR = communityService.listDictionaryByKey(BcDictionaryConstants.FAMILY);
            log.info("开始导入残疾人数据");
            log.info("表格总数据:" + list.size());
            if (list.size() == 0) {
                throw new ServiceException("500", "导入数据为空!");
            }
            ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
            String Disability = Constants.DISABILITY_POPULATION_ERROR_LIST + communityId;
            Map<String,String> dictMap = dictionaryR.getData().stream().collect(Collectors.toMap(BcDictionaryVO::getDictName,BcDictionaryVO::getDictValue));
//        Map<String,Integer> dictMap = new HashMap<>();
//        for(BcDictionaryVO vo : dictionaryR.getData()){
//            dictMap.put(vo.getDictName(),Integer.valueOf(vo.getDictValue()));
//        }
            int index = 2;
            try {
                ArrayList<ComMngPopulationDisabilityExcelVO> voList = Lists.newArrayList();
//                List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
                ArrayList<ComMngPopulationDisabilityMistakeExcelVO> mistakes = Lists.newArrayList();
                for (Map<Integer, String> oneData : list) {
                    ComMngPopulationDisabilityExcelVO vo = new ComMngPopulationDisabilityExcelVO();
                    if (StringUtils.isNotEmpty(oneData.get(0))){
                        vo.setSerialNumber(oneData.get(0));
                    }
                    //姓名和身份证都为空,为空户,无需操作,否则就解析年龄,性别,出生年月日
                    if(StringUtils.isNotEmpty(oneData.get(1)) || StringUtils.isNotEmpty(oneData.get(2))){
                        if(StringUtils.isEmpty(oneData.get(1))){
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            index++;
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("名字不可为空,请填写姓名");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setName(oneData.get(1));
                        if(StringUtils.isEmpty(oneData.get(2))){
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            index++;
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("身份证号不可为空,请填写身份证");
                            mistakes.add(mistake);
                            continue;
                        }
                        //判断身份证号码位数
                        if(oneData.get(2).length() != 18){
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            index++;
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("身份证号位数有误,请检查身份证号码是否正确");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setCardNo(oneData.get(2).toUpperCase());
                        //根据身份证号码解析年龄以及性别
                        //获取用户生日
                        String birthday = vo.getCardNo().substring(6, 14);
                        if(StringUtils.isNotEmpty(birthday)){
                            String year = birthday.substring(0,4);
                            String month = birthday.substring(4,6);
                            String day = birthday.substring(6,8);
                            vo.setBirthday(year + "-" + month + "-" + day);
                        }
//                    //设置用户年龄
//                    vo.setAge(AgeUtils.getAgeFromBirthTime(birthday));
                        //获取用户性别
                        int sex = Integer.parseInt(vo.getCardNo().substring(16, 17));
                        if(sex%2 == 1){
                            vo.setSex(PopulSexEnum.nan.getCode());
                        }else{
                            vo.setSex(PopulSexEnum.nv.getCode());
                        }
                    }
                    if(StringUtils.isNotEmpty(oneData.get(3))){
                        vo.setCertificateSituation(oneData.get(3));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(4))){
                        Integer isOk = PopulCultureLevelEnum.getCodeByName(oneData.get(4));
                        if(isOk.equals(-1)){
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            index++;
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("您填写的文化程度有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setCultureLevel(isOk);
                    }
                    if(StringUtils.isNotEmpty(oneData.get(5))){
                        vo.setNation(oneData.get(5));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(6))){
                        vo.setDisType(oneData.get(6));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(7))){
                        vo.setDisLevel(oneData.get(7));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(8))){
                        vo.setPhone(oneData.get(8));
                    }
                    if(StringUtils.isEmpty(oneData.get(9))){
                        index++;
                        ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                        setDisabilityMistake(oneData, mistake);
                        mistake.setMistake("街路巷不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setRoad(oneData.get(9));
                    if(StringUtils.isEmpty(oneData.get(10))){
                        index++;
                        ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                        setDisabilityMistake(oneData, mistake);
                        mistake.setMistake("小区号不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setDoorNo(oneData.get(10).trim());
                    if(StringUtils.isEmpty(oneData.get(11))){
                        index++;
                        ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                        setDisabilityMistake(oneData, mistake);
                        mistake.setMistake("楼排号不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setFloor(oneData.get(11).trim());
                    if(StringUtils.isEmpty(oneData.get(12))){
                        index++;
                        ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                        setDisabilityMistake(oneData, mistake);
                        mistake.setMistake("单元号不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setUnitNo(oneData.get(12).trim());
                    if(StringUtils.isEmpty(oneData.get(13))){
                        index++;
                        ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                        setDisabilityMistake(oneData, mistake);
                        mistake.setMistake("户室不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setHouseNo(oneData.get(13).trim());
                    if(StringUtils.isNotEmpty(oneData.get(14))){
                        Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(14));
                        if(isOk.equals(-1)){
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            index++;
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("您填写的是否租住有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setIsRent(isOk);
                    }else {
                        vo.setIsRent(PopulHouseUseEnum.getCodeByName("否"));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(15))){
                        Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(15).trim());
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("您填写的房屋状态有误");
                            mistakes.add(mistake);
                            continue;
                        }
                    vo.setHouseStatus(isOk);
                    }
                    if(StringUtils.isNotEmpty(oneData.get(16))){
                        Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(16).trim());
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("您填写的房屋用途有误");
                            mistakes.add(mistake);
                            continue;
                        }
                    vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(16).trim()));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(17))){
                        Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(17));
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("您填写的管控状态有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setControlStatus(isOk);
                    }
                    if(StringUtils.isNotEmpty(oneData.get(18))){
                        Integer isOk = PopulOutOrLocalEnum.getCodeByName(oneData.get(18));
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                            setDisabilityMistake(oneData, mistake);
                            mistake.setMistake("您填写的本地/外地有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setOutOrLocal(isOk);
                    }else {
                        vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地"));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(19))){
                        vo.setCensusRegister(oneData.get(19).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(20))){
                        vo.setRemark(oneData.get(20).trim());
                    }
                    vo.getUserTagStr().add("残疾人");
                    for (int i = 21; i < headSize; i++) {
                        if (oneData.get(i) != null && oneData.get(i).equals("是")) {
                            vo.getUserTagStr().add(headData.get(i).substring(0,headData.get(i).indexOf("(")));
                        }
                    }
                    //将重复的数据进行MD5加密实现去重
                    String distinct = vo.getName() + vo.getCardNo() + vo.getRoad() + vo.getDoorNo() + vo.getFloor() + vo.getUnitNo() + vo.getHouseNo();
                    try {
                        String distinctPass = PayUtil.MD5(distinct);
                        if(StringUtils.isNotEmpty(distinctPass)){
                            vo.setDistinctPass(distinctPass);
                        }
                    }catch (Exception e){
                        log.error("组装MD5加密字段失败,数据表格行数:" + index);
                        continue;
                    }
                    voList.add(vo);
                    index++;
                }
                //客户需要暂时注释,等客户处理完成需要恢复
//            if(populationImportErrorVOList.isEmpty()){
//                R r = communityService.listSavePopulationServeExcelVO(voList, communityId);
//                if (!R.isOk(r)) {
//                    throw new ServiceException(r.getMsg());
//                }
//            }else{
//                throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
//            }
                //根据list中的IdCard城市来去重
                List<ComMngPopulationDisabilityExcelVO> newVoList = voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationDisabilityExcelVO::getDistinctPass)).collect(Collectors.toList());
                log.info("开始进入业务层处理逻辑");
                R r = communityService.listSavePopulationDisabilityExcelVO(newVoList, communityId);
                log.info("业务层处理逻辑完成");
                if (!R.isOk(r)) {
                    log.info("业务层处理成功");
                    List<ComMngPopulationDisabilityMistakeExcelVO> list = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComMngPopulationDisabilityMistakeExcelVO.class);
//                    String errMsg = r.getMsg();
//                    List<ComMngPopulationImportErrorVO> errorList = JSON.parseArray(errMsg,ComMngPopulationImportErrorVO.class);
//                    if(!errorList.isEmpty()){
//                        populationImportErrorVOList.addAll(errorList);
//                    }
                    mistakes.addAll(list);
                    log.info("将错误数据存入redis中");
                    valueOperations.set(Disability,JSONArray.toJSONString(mistakes),1, TimeUnit.HOURS);
                    log.info("将错误数据存入redis中成功");
                    throw new ServiceException("500", Disability);
                }else{
                    log.info("业务层处理逻辑失败");
                    if(!mistakes.isEmpty()){
                        log.info("业务层处理逻辑失败,将错误数据缓存到redis中");
                        valueOperations.set(Disability,JSONArray.toJSONString(mistakes),1, TimeUnit.HOURS);
                        log.info("业务层处理逻辑失败,将错误数据缓存到redis中成功");
                        throw new ServiceException("500", Disability);
                    }
                }
            } catch (NumberFormatException e) {
                log.info("处理数据时失败");
                e.printStackTrace();
//                List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
//                ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
//                importErrorVO.setErrorPosition("第" + index + "行");
//                importErrorVO.setErrorMsg("数据格式有误,请检查文档内数据");
//                populationImportErrorVOList.add(importErrorVO);
                log.error("数据格式有误,第" + index + "行");
                throw new ServiceException("500", "导入失败111");
            }
        }
    private void setDisabilityMistake(Map<Integer, String> map, ComMngPopulationDisabilityMistakeExcelVO vo){
        vo.setSerialNumber(map.get(0));
        vo.setName(map.get(1));
        vo.setCardNo(map.get(2));
        vo.setCertificateSituation(map.get(3));
        vo.setCultureLevel(map.get(4));
        vo.setNation(map.get(5));
        vo.setDisType(map.get(6));
        vo.setDisLevel(map.get(7));
        vo.setPhone(map.get(8));
        vo.setRoad(map.get(9));
        vo.setDoorNo(map.get(10));
        vo.setFloor(map.get(11));
        vo.setUnitNo(map.get(12));
        vo.setHouseNo(map.get(13));
        vo.setIsRent(map.get(14));
        vo.setHouseStatus(map.get(15));
        vo.setHousePurpose(map.get(16));
        vo.setControlStatus(map.get(17));
        vo.setOutOrLocal(map.get(18));
        vo.setCensusRegister(map.get(19));
        vo.setRemark(map.get(20));
    }
        private String convertMarriage(String ma) {
            if(Objects.equals("已",ma) || Objects.equals("一",ma)){
                ma = "已婚";
            }else if(Objects.equals("未",ma) || Objects.equals("未婚婚",ma)){
                ma = "未婚";
            }else if(Objects.equals("初",ma)){
                ma = "初婚";
            }else if(Objects.equals("再",ma)){
                ma = "再婚";
            }else if(Objects.equals("复",ma)){
                ma = "复婚";
            }else if(Objects.equals("丧",ma) || Objects.equals("丧偶偶",ma)){
                ma = "丧偶";
            }else if(Objects.equals("离",ma) || Objects.equals("离异",ma) || Objects.equals("离异婚",ma)){
                ma = "离婚";
            }else if(Objects.equals("分",ma)){
                ma = "分居";
            }
            return ma;
        }
        private String convertRelation(String ra) {
            if(ra.contains("户主")){
                ra = "户主";
            }else if(Objects.equals(ra,"女儿")){
                ra = "女";
            }else if(Objects.equals(ra,"儿子") || Objects.equals(ra,"儿")){
                ra = "子";
            }else if(Objects.equals(ra,"大女")){
                ra = "长女";
            }else if(Objects.equals(ra,"二女") || Objects.equals(ra,"此女")){
                ra = "次女";
            }else if(Objects.equals(ra,"二子")){
                ra = "次子";
            }else if(Objects.equals(ra,"长男") || ra.contains("长子")){
                ra = "长子";
            }else if(Objects.equals(ra,"非亲属") || ra.contains("女友")  || ra.contains("女朋友")
                    || ra.contains("男友") || ra.contains("男朋友")){
                ra = "其他";
            }else if(Objects.equals(ra,"姐")){
                ra = "姐姐";
            }else if(Objects.equals(ra,"户主")){
                ra = "本人";
            }else if(Objects.equals(ra,"妻子") || Objects.equals(ra,"媳妇")){
                ra = "妻";
            }else if(Objects.equals(ra,"哥") || Objects.equals(ra,"哥哥")){
                ra = "兄";
            }else if(Objects.equals(ra,"丈夫")){
                ra = "夫";
            }else if(Objects.equals(ra,"丈母娘")){
                ra = "岳母";
            }else if(Objects.equals(ra,"继子") || Objects.equals(ra,"养子")){
                ra = "养子或继子";
            }else if(Objects.equals(ra,"继女") || Objects.equals(ra,"养女")){
                ra = "养女或继女";
            }else if(ra.contains("儿媳")||ra.contains("长媳")){
                ra = "儿媳";
            }else if(Objects.equals(ra,"三姨") || Objects.equals(ra,"姨姨")){
                ra = "姨母";
            }else if(Objects.equals(ra,"二外孙女")){
                ra = "外孙女";
            }else if(Objects.equals(ra,"外孙")){
                ra = "外孙子";
            }else if(Objects.equals(ra,"侄儿")){
                ra = "侄子";
            }else if(ra.contains("表")){
                ra = "表兄弟、表姐妹";
            }else if(Objects.equals(ra,"继父") || Objects.equals(ra,"养父")){
                ra = "继父或养父";
            }else if(Objects.equals(ra,"父")){
                ra = "父亲";
            }else if(Objects.equals(ra,"弟弟")){
                ra = "弟";
            }else if(Objects.equals(ra,"孙")){
                ra = "孙子";
            }else if(Objects.equals(ra,"孙媳妇") || Objects.equals(ra,"外孙媳妇")){
                ra = "孙媳妇或外孙媳妇";
            }else if(Objects.equals(ra,"妹")){
                ra = "妹妹";
            }else if(Objects.equals(ra,"祖父母")){
                ra = "祖父母或外祖父母";
            }else if(Objects.equals(ra,"姐妹") || Objects.equals(ra,"兄弟")){
                ra = "兄弟姐妹";
            }else if(Objects.equals(ra,"其他姐妹") || Objects.equals(ra,"其他兄弟")){
                ra = "其他兄弟姐妹";
            }else if(Objects.equals(ra,"奶奶")){
                ra = "祖母";
            }else if(Objects.equals(ra,"爷爷")){
                ra = "祖父";
            }else if(Objects.equals(ra,"爷爷")){
                ra = "祖父";
            }else if(ra.contains("堂")){
                ra = "堂兄弟、堂姐妹";
            }
            return ra;
        }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationVeteransExcelListen.java
@@ -1,5 +1,6 @@
package com.panzhihua.common.listen;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSONArray;
@@ -10,6 +11,8 @@
import com.panzhihua.common.exceptions.ServiceException;
import com.panzhihua.common.model.vos.BcDictionaryVO;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.ComMngPopulationVeteransExcelVO;
import com.panzhihua.common.model.vos.community.ComMngPopulationVeteransMistakeExcelVO;
import com.panzhihua.common.model.vos.community.ComMngPopulationVeteransExcelVO;
import com.panzhihua.common.model.vos.community.ComMngPopulationVeteransMistakeExcelVO;
import com.panzhihua.common.service.community.CommunityService;
@@ -121,8 +124,602 @@
            int index = 2;
            try {
                String[] parsePatterns = new String[]{"yyyy-MM-dd", "yyyy-M-dd", "yyyy-MM-d", "yyyy-M-d", "yyyy/MM/dd", "yyyy/M/dd", "yyyy/MM/d", "yyyy/M/d"};
                ArrayList<ComMngPopulationVeteransExcelVO> voList = Lists.newArrayList();
//                List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
                ArrayList<ComMngPopulationVeteransMistakeExcelVO> mistakes = Lists.newArrayList();
                for (Map<Integer, String> oneData : list) {
                    ComMngPopulationVeteransExcelVO vo = new ComMngPopulationVeteransExcelVO();
                    if (StringUtils.isNotEmpty(oneData.get(0))){
                        vo.setSerialNumber(oneData.get(0));
                    }
                    //姓名和身份证都为空,为空户,无需操作,否则就解析年龄,性别,出生年月日
                    if(StringUtils.isNotEmpty(oneData.get(3)) || StringUtils.isNotEmpty(oneData.get(4))){
                        if(StringUtils.isEmpty(oneData.get(3))){
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            index++;
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("名字不可为空,请填写姓名");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setName(oneData.get(3));
                        if(StringUtils.isEmpty(oneData.get(4))){
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            index++;
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("身份证号不可为空,请填写身份证");
                            mistakes.add(mistake);
                            continue;
                        }
                        //判断身份证号码位数
                        if(oneData.get(4).length() != 18){
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            index++;
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("身份证号位数有误,请检查身份证号码是否正确");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setCardNo(oneData.get(4).toUpperCase());
                        //根据身份证号码解析年龄以及性别
                        //获取用户生日
                        String birthday = vo.getCardNo().substring(6, 14);
                        if(StringUtils.isNotEmpty(birthday)){
                            String year = birthday.substring(0,4);
                            String month = birthday.substring(4,6);
                            String day = birthday.substring(6,8);
                            vo.setBirthday(year + "-" + month + "-" + day);
                        }
//                    //设置用户年龄
//                    vo.setAge(AgeUtils.getAgeFromBirthTime(birthday));
                        //获取用户性别
                        int sex = Integer.parseInt(vo.getCardNo().substring(16, 17));
                        if(sex%2 == 1){
                            vo.setSex(PopulSexEnum.nan.getCode());
                        }else{
                            vo.setSex(PopulSexEnum.nv.getCode());
                        }
                    }
                    if(StringUtils.isNotEmpty(oneData.get(1))){
                        vo.setPersonStatus(oneData.get(1));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(2))){
                        vo.setOrganization(oneData.get(2));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(5))){
                        vo.setPhone(oneData.get(5));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(6))){
                        vo.setPhoto(oneData.get(6));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(7))){
                        Integer isOk = PopulRegiterNatureEnum.getCodeByName(oneData.get(7).trim());
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的户籍性质有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setRegiterNature(isOk);
                    }
                    if(StringUtils.isNotEmpty(oneData.get(8))){
                        vo.setCensusRegister(oneData.get(8).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(9))){
                        Integer isOk = PopulOutOrLocalEnum.getCodeByName(oneData.get(9));
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的本地/外地有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setOutOrLocal(isOk);
                    }else {
                        vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地"));
                    }
                    if(StringUtils.isEmpty(oneData.get(10))){
                        index++;
                        ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                        setVeteransMistake(oneData, mistake);
                        mistake.setMistake("街路巷不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setRoad(oneData.get(10));
                    if(StringUtils.isEmpty(oneData.get(11))){
                        index++;
                        ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                        setVeteransMistake(oneData, mistake);
                        mistake.setMistake("小区号不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setDoorNo(oneData.get(11).trim());
                    if(StringUtils.isEmpty(oneData.get(12))){
                        index++;
                        ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                        setVeteransMistake(oneData, mistake);
                        mistake.setMistake("楼排号不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setFloor(oneData.get(12).trim());
                    if(StringUtils.isEmpty(oneData.get(13))){
                        index++;
                        ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                        setVeteransMistake(oneData, mistake);
                        mistake.setMistake("单元号不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setUnitNo(oneData.get(13).trim());
                    if(StringUtils.isEmpty(oneData.get(14))){
                        index++;
                        ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                        setVeteransMistake(oneData, mistake);
                        mistake.setMistake("户室不可为空");
                        mistakes.add(mistake);
                        continue;
                    }
                    vo.setHouseNo(oneData.get(14).trim());
                    if(StringUtils.isNotEmpty(oneData.get(15))){
                        Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(15));
                        if(isOk.equals(-1)){
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            index++;
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的是否租住有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setIsRent(isOk);
                    }else {
                        vo.setIsRent(PopulHouseUseEnum.getCodeByName("否"));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(16))){
                        Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(16).trim());
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的房屋状态有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setHouseStatus(isOk);
                    }
                    if(StringUtils.isNotEmpty(oneData.get(17))){
                        Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(17).trim());
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的房屋用途有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(14).trim()));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(18))){
                        Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(18));
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的管控状态有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setControlStatus(isOk);
                    }
                    if(StringUtils.isNotEmpty(oneData.get(19))){
                        vo.setEnlistDate(DateUtil.parse(oneData.get(19)));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(20))){
                        vo.setRetireDate(DateUtil.parse(oneData.get(20)));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(21))){
                        vo.setPersonCategory(oneData.get(21).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(22))){
                        vo.setNation(oneData.get(22).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(23))){
                        vo.setHealthy(oneData.get(23).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(24))){
                        Integer isOk = PopulPoliticalOutlookEnum.getCodeByName(oneData.get(24));
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的政治面貌有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setPoliticalOutlook(isOk);
                    }
                    if(StringUtils.isNotEmpty(oneData.get(25))){
                        Integer isOk = PopulMarriageEnum.getCodeByName(oneData.get(25));
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的政治面貌有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setMarriage(isOk);
                    }
                    if(StringUtils.isNotEmpty(oneData.get(26))){
                        vo.setHouseSituation(oneData.get(26).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(27))){
                        vo.setHouseSituationOther(oneData.get(27).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(28))){
                        vo.setBuildArea(oneData.get(28).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(29))){
                        vo.setEmploymentSituation(oneData.get(29).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(30))){
                        vo.setIncumbencyType(oneData.get(30).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(31))){
                        vo.setEmploymentSituationOther(oneData.get(31).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(32))){
                        vo.setEndowmentInsurance(oneData.get(32).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(33))){
                        vo.setMedicalInsurance(oneData.get(33).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(34))){
                        vo.setAnnualIncome(oneData.get(34).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(35))){
                        vo.setFatherHealthy(oneData.get(35).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(36))){
                        vo.setMotherHealthy(oneData.get(36).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(37))){
                        vo.setSpouseHealthy(oneData.get(37).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(38))){
                        vo.setSonHealthy(oneData.get(38).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(39))){
                        vo.setDaughterHealthy(oneData.get(39).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(40))){
                        vo.setMainDifficulty(oneData.get(40).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(41))){
                        vo.setOtherDifficulty(oneData.get(41).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(42))){
                        vo.setMainDemand(oneData.get(42).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(43))){
                        vo.setMainDemandOther(oneData.get(43).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(44))){
                        vo.setAcademicTraining(oneData.get(44).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(45))){
                        Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(45));
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的是否已参加退役军人培训(政府性质)有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setIsVeteransTraining(isOk);
                    }else {
                        vo.setIsVeteransTraining(PopulHouseUseEnum.getCodeByName("否"));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(46))){
                        vo.setEducationBeforeEnlistment(oneData.get(46).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(47))){
                        vo.setReEducation(oneData.get(47).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(48))){
                        vo.setMajor(oneData.get(48).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(49))){
                        vo.setMajorOther(oneData.get(49).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(50))){
                        vo.setOnceEngagedIndustry(oneData.get(50).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(51))){
                        vo.setOnceEngagedIndustryOther(oneData.get(51).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(52))){
                        vo.setIntendedPlaceOfEmployment(oneData.get(52).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(53))){
                        vo.setIntendedPlaceOfEmploymentOther(oneData.get(53).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(54))){
                        vo.setUnemploymedEngagedIndustry(oneData.get(54).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(55))){
                        vo.setUnemploymedEngagedIndustryOther(oneData.get(55).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(56))){
                        Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(56));
                        if(isOk.equals(-1)){
                            index++;
                            ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                            setVeteransMistake(oneData, mistake);
                            mistake.setMistake("您填写的是否有创业意愿有误");
                            mistakes.add(mistake);
                            continue;
                        }
                        vo.setIsBusiness(isOk);
                    }else {
                        vo.setIsBusiness(PopulHouseUseEnum.getCodeByName("否"));
                    }
                    if(StringUtils.isNotEmpty(oneData.get(57))){
                        vo.setBusinessDesire(oneData.get(57).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(58))){
                        vo.setRemark(oneData.get(58).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(59))){
                        vo.setFillUnit(oneData.get(59).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(60))){
                        vo.setFillPerson(oneData.get(50).trim());
                    }
                    if(StringUtils.isNotEmpty(oneData.get(61))){
                        vo.setFillPersonPhone(oneData.get(61).trim());
                    }
                    vo.getUserTagStr().add("退役军人");
                    for (int i = 62; i < headSize; i++) {
                        if (oneData.get(i) != null && oneData.get(i).equals("是")) {
                            vo.getUserTagStr().add(headData.get(i).substring(0,headData.get(i).indexOf("(")));
                        }
                    }
                    //将重复的数据进行MD5加密实现去重
                    String distinct = vo.getName() + vo.getCardNo() + vo.getRoad() + vo.getDoorNo() + vo.getFloor() + vo.getUnitNo() + vo.getHouseNo();
                    try {
                        String distinctPass = PayUtil.MD5(distinct);
                        if(StringUtils.isNotEmpty(distinctPass)){
                            vo.setDistinctPass(distinctPass);
                        }
                    }catch (Exception e){
                        log.error("组装MD5加密字段失败,数据表格行数:" + index);
                        continue;
                    }
                    voList.add(vo);
                    index++;
                }
                //客户需要暂时注释,等客户处理完成需要恢复
//            if(populationImportErrorVOList.isEmpty()){
//                R r = communityService.listSavePopulationServeExcelVO(voList, communityId);
//                if (!R.isOk(r)) {
//                    throw new ServiceException(r.getMsg());
//                }
//            }else{
//                throw new ServiceException("500", JSON.toJSONString(populationImportErrorVOList));
//            }
                //根据list中的IdCard城市来去重
                List<ComMngPopulationVeteransExcelVO> newVoList = voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationVeteransExcelVO::getDistinctPass)).collect(Collectors.toList());
                log.info("开始进入业务层处理逻辑");
                R r = communityService.listSavePopulationVeteransExcelVO(newVoList, communityId);
                log.info("业务层处理逻辑完成");
                if (!R.isOk(r)) {
                    log.info("业务层处理成功");
                    List<ComMngPopulationVeteransMistakeExcelVO> list = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComMngPopulationVeteransMistakeExcelVO.class);
//                    String errMsg = r.getMsg();
//                    List<ComMngPopulationImportErrorVO> errorList = JSON.parseArray(errMsg,ComMngPopulationImportErrorVO.class);
//                    if(!errorList.isEmpty()){
//                        populationImportErrorVOList.addAll(errorList);
//                    }
                    mistakes.addAll(list);
                    log.info("将错误数据存入redis中");
                    valueOperations.set(Veterans,JSONArray.toJSONString(mistakes),1, TimeUnit.HOURS);
                    log.info("将错误数据存入redis中成功");
                    throw new ServiceException("500", Veterans);
                }else{
                    log.info("业务层处理逻辑失败");
                    if(!mistakes.isEmpty()){
                        log.info("业务层处理逻辑失败,将错误数据缓存到redis中");
                        valueOperations.set(Veterans,JSONArray.toJSONString(mistakes),1, TimeUnit.HOURS);
                        log.info("业务层处理逻辑失败,将错误数据缓存到redis中成功");
                        throw new ServiceException("500", Veterans);
                    }
                }
            } catch (NumberFormatException e) {
                log.info("处理数据时失败");
                e.printStackTrace();
//                List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>();
//                ComMngPopulationImportErrorVO importErrorVO = new ComMngPopulationImportErrorVO();
//                importErrorVO.setErrorPosition("第" + index + "行");
//                importErrorVO.setErrorMsg("数据格式有误,请检查文档内数据");
//                populationImportErrorVOList.add(importErrorVO);
                log.error("数据格式有误,第" + index + "行");
                throw new ServiceException("500", "导入失败111");
            }
        }
    private void setVeteransMistake(Map<Integer, String> map, ComMngPopulationVeteransMistakeExcelVO vo){
        vo.setSerialNumber(map.get(0));
        vo.setPersonStatus(map.get(1));
        vo.setOrganization(map.get(2));
        vo.setName(map.get(3));
        vo.setCardNo(map.get(4));
        vo.setPhone(map.get(5));
        vo.setPhoto(map.get(6));
        vo.setRegiterNature(map.get(7));
        vo.setCensusRegister(map.get(8));
        vo.setOutOrLocal(map.get(9));
        vo.setRoad(map.get(10));
        vo.setDoorNo(map.get(11));
        vo.setFloor(map.get(12));
        vo.setUnitNo(map.get(13));
        vo.setHouseNo(map.get(14));
        vo.setIsRent(map.get(15));
        vo.setHouseStatus(map.get(16));
        vo.setHousePurpose(map.get(17));
        vo.setControlStatus(map.get(18));
        vo.setEnlistDate(map.get(19));
        vo.setRetireDate(map.get(20));
        vo.setPersonCategory(map.get(21));
        vo.setNation(map.get(22));
        vo.setHealthy(map.get(23));
        vo.setPoliticalOutlook(map.get(24));
        vo.setMarriage(map.get(25));
        vo.setHouseSituation(map.get(26));
        vo.setHouseSituationOther(map.get(27));
        vo.setBuildArea(map.get(28));
        vo.setEmploymentSituation(map.get(29));
        vo.setIncumbencyType(map.get(30));
        vo.setEmploymentSituationOther(map.get(31));
        vo.setEndowmentInsurance(map.get(32));
        vo.setMedicalInsurance(map.get(33));
        vo.setAnnualIncome(map.get(34));
        vo.setFatherHealthy(map.get(35));
        vo.setMotherHealthy(map.get(36));
        vo.setSpouseHealthy(map.get(37));
        vo.setSonHealthy(map.get(38));
        vo.setDaughterHealthy(map.get(39));
        vo.setMainDifficulty(map.get(40));
        vo.setOtherDifficulty(map.get(41));
        vo.setMainDemand(map.get(42));
        vo.setMainDemandOther(map.get(43));
        vo.setAcademicTraining(map.get(44));
        vo.setIsVeteransTraining(map.get(45));
        vo.setEducationBeforeEnlistment(map.get(46));
        vo.setReEducation(map.get(47));
        vo.setMajor(map.get(48));
        vo.setMajorOther(map.get(49));
        vo.setOnceEngagedIndustry(map.get(50));
        vo.setOnceEngagedIndustryOther(map.get(51));
        vo.setIntendedPlaceOfEmployment(map.get(52));
        vo.setIntendedPlaceOfEmploymentOther(map.get(53));
        vo.setUnemploymedEngagedIndustry(map.get(54));
        vo.setUnemploymedEngagedIndustryOther(map.get(55));
        vo.setIsBusiness(map.get(56));
        vo.setBusinessDesire(map.get(57));
        vo.setRemark(map.get(58));
        vo.setFillUnit(map.get(59));
        vo.setFillPerson(map.get(60));
        vo.setFillPersonPhone(map.get(61));
    }
    private String convertMarriage(String ma) {
        if(Objects.equals("已",ma) || Objects.equals("一",ma)){
            ma = "已婚";
        }else if(Objects.equals("未",ma) || Objects.equals("未婚婚",ma)){
            ma = "未婚";
        }else if(Objects.equals("初",ma)){
            ma = "初婚";
        }else if(Objects.equals("再",ma)){
            ma = "再婚";
        }else if(Objects.equals("复",ma)){
            ma = "复婚";
        }else if(Objects.equals("丧",ma) || Objects.equals("丧偶偶",ma)){
            ma = "丧偶";
        }else if(Objects.equals("离",ma) || Objects.equals("离异",ma) || Objects.equals("离异婚",ma)){
            ma = "离婚";
        }else if(Objects.equals("分",ma)){
            ma = "分居";
        }
        return ma;
    }
    private String convertRelation(String ra) {
        if(ra.contains("户主")){
            ra = "户主";
        }else if(Objects.equals(ra,"女儿")){
            ra = "女";
        }else if(Objects.equals(ra,"儿子") || Objects.equals(ra,"儿")){
            ra = "子";
        }else if(Objects.equals(ra,"大女")){
            ra = "长女";
        }else if(Objects.equals(ra,"二女") || Objects.equals(ra,"此女")){
            ra = "次女";
        }else if(Objects.equals(ra,"二子")){
            ra = "次子";
        }else if(Objects.equals(ra,"长男") || ra.contains("长子")){
            ra = "长子";
        }else if(Objects.equals(ra,"非亲属") || ra.contains("女友")  || ra.contains("女朋友")
                || ra.contains("男友") || ra.contains("男朋友")){
            ra = "其他";
        }else if(Objects.equals(ra,"姐")){
            ra = "姐姐";
        }else if(Objects.equals(ra,"户主")){
            ra = "本人";
        }else if(Objects.equals(ra,"妻子") || Objects.equals(ra,"媳妇")){
            ra = "妻";
        }else if(Objects.equals(ra,"哥") || Objects.equals(ra,"哥哥")){
            ra = "兄";
        }else if(Objects.equals(ra,"丈夫")){
            ra = "夫";
        }else if(Objects.equals(ra,"丈母娘")){
            ra = "岳母";
        }else if(Objects.equals(ra,"继子") || Objects.equals(ra,"养子")){
            ra = "养子或继子";
        }else if(Objects.equals(ra,"继女") || Objects.equals(ra,"养女")){
            ra = "养女或继女";
        }else if(ra.contains("儿媳")||ra.contains("长媳")){
            ra = "儿媳";
        }else if(Objects.equals(ra,"三姨") || Objects.equals(ra,"姨姨")){
            ra = "姨母";
        }else if(Objects.equals(ra,"二外孙女")){
            ra = "外孙女";
        }else if(Objects.equals(ra,"外孙")){
            ra = "外孙子";
        }else if(Objects.equals(ra,"侄儿")){
            ra = "侄子";
        }else if(ra.contains("表")){
            ra = "表兄弟、表姐妹";
        }else if(Objects.equals(ra,"继父") || Objects.equals(ra,"养父")){
            ra = "继父或养父";
        }else if(Objects.equals(ra,"父")){
            ra = "父亲";
        }else if(Objects.equals(ra,"弟弟")){
            ra = "弟";
        }else if(Objects.equals(ra,"孙")){
            ra = "孙子";
        }else if(Objects.equals(ra,"孙媳妇") || Objects.equals(ra,"外孙媳妇")){
            ra = "孙媳妇或外孙媳妇";
        }else if(Objects.equals(ra,"妹")){
            ra = "妹妹";
        }else if(Objects.equals(ra,"祖父母")){
            ra = "祖父母或外祖父母";
        }else if(Objects.equals(ra,"姐妹") || Objects.equals(ra,"兄弟")){
            ra = "兄弟姐妹";
        }else if(Objects.equals(ra,"其他姐妹") || Objects.equals(ra,"其他兄弟")){
            ra = "其他兄弟姐妹";
        }else if(Objects.equals(ra,"奶奶")){
            ra = "祖母";
        }else if(Objects.equals(ra,"爷爷")){
            ra = "祖父";
        }else if(Objects.equals(ra,"爷爷")){
            ra = "祖父";
        }else if(ra.contains("堂")){
            ra = "堂兄弟、堂姐妹";
        }
        return ra;
    }
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationDisabilityExcelVO.java
New file
@@ -0,0 +1,115 @@
package com.panzhihua.common.model.vos.community;
import com.alibaba.excel.annotation.ExcelProperty;
import com.google.common.collect.Lists;
import com.panzhihua.common.model.helper.encrypt.EncryptDecryptClass;
import com.panzhihua.common.model.helper.encrypt.EncryptDecryptField;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @description: 批量导入残疾人
 * @author: txb
 */
@Data
@EncryptDecryptClass
public class ComMngPopulationDisabilityExcelVO implements Serializable {
    @ExcelProperty(value = "序号", index = 0)
    private String serialNumber;
    @ExcelProperty(value = "姓名", index = 1)
    private String name;
    @ExcelProperty(value = "身份证号码", index = 2)
    @EncryptDecryptField
    private String cardNo;
    @ExcelProperty(value = "办证状况", index = 3)
    private String certificateSituation;
    @ExcelProperty(value = "文化程度" ,index = 4)
    private Integer cultureLevel;
    @ExcelProperty(value = "民族", index = 5)
    private String nation;
    @ExcelProperty(value = "残疾类别", index = 6)
    private String disType;
    @ExcelProperty(value = "残疾等级", index = 7)
    private String disLevel;
    @ExcelProperty(value = "联系电话", index = 8)
    private String phone;
    @ExcelProperty(value = "街/路/巷", index = 9)
    private String road;
    @ExcelProperty(value = "小区号", index = 10)
    private String doorNo;
    @ExcelProperty(value = "楼排号", index = 11)
    private String floor;
    @ExcelProperty(value = "单元号", index = 12)
    private String unitNo;
    @ExcelProperty(value = "户室(房间号)", index = 13)
    private String houseNo;
    @ExcelProperty(value = "是否租住", index = 14)
    private Integer isRent;
    @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 15)
    private Integer houseStatus;
    @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 16)
    private Integer housePurpose;
    @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 17)
    private Integer controlStatus;
    @ExcelProperty(value = "外地/本地(1.本地  2.外地)", index = 18)
    private Integer outOrLocal;
    @ExcelProperty(value = "户口所在地", index = 19)
    private String censusRegister;
    @ExcelProperty(value = "备注", index = 20)
    private String remark;
    /**
     * 去重字段,使用(姓名+身份证号+街路巷+小区号+楼牌号+单元号+户室)组合字段进行MD5加密实现去重
     */
    private String distinctPass;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * 性别(1.男  2.女)
     */
    private Integer sex;
    /**
     * 出生年月日
     */
    private String birthday;
    /**
     * 扩展字段用逗号隔开
     */
    private List<String> userTagStr = Lists.newArrayList();
    private Long houseId;
    /**
     * 地址
     */
    private String address;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationDisabilityMistakeExcelVO.java
New file
@@ -0,0 +1,86 @@
package com.panzhihua.common.model.vos.community;
import com.alibaba.excel.annotation.ExcelProperty;
import com.google.common.collect.Lists;
import com.panzhihua.common.model.helper.encrypt.EncryptDecryptClass;
import com.panzhihua.common.model.helper.encrypt.EncryptDecryptField;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * @description: 批量导入残疾人
 * @author: txb
 */
@Data
@EncryptDecryptClass
public class ComMngPopulationDisabilityMistakeExcelVO implements Serializable {
    @ExcelProperty(value = "序号", index = 0)
    private String serialNumber;
    @ExcelProperty(value = "姓名", index = 1)
    private String name;
    @ExcelProperty(value = "身份证号码", index = 2)
    @EncryptDecryptField
    private String cardNo;
    @ExcelProperty(value = "办证状况", index = 3)
    private String certificateSituation;
    @ExcelProperty(value = "文化程度" ,index = 4)
    private String cultureLevel;
    @ExcelProperty(value = "民族", index = 5)
    private String nation;
    @ExcelProperty(value = "残疾类别", index = 6)
    private String disType;
    @ExcelProperty(value = "残疾等级", index = 7)
    private String disLevel;
    @ExcelProperty(value = "联系电话", index = 8)
    private String phone;
    @ExcelProperty(value = "街/路/巷", index = 9)
    private String road;
    @ExcelProperty(value = "小区号", index = 10)
    private String doorNo;
    @ExcelProperty(value = "楼排号", index = 11)
    private String floor;
    @ExcelProperty(value = "单元号", index = 12)
    private String unitNo;
    @ExcelProperty(value = "户室(房间号)", index = 13)
    private String houseNo;
    @ExcelProperty(value = "是否租住", index = 14)
    private String isRent;
    @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 15)
    private String houseStatus;
    @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 16)
    private String housePurpose;
    @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 17)
    private String controlStatus;
    @ExcelProperty(value = "外地/本地(1.本地  2.外地)", index = 18)
    private String outOrLocal;
    @ExcelProperty(value = "户口所在地", index = 19)
    private String censusRegister;
    @ExcelProperty(value = "备注", index = 20)
    private String remark;
    @ExcelProperty(value = "错误信息", index = 21)
    private String mistake;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationVeteransMistakeExcelVO.java
@@ -76,10 +76,10 @@
    private String controlStatus;
    @ExcelProperty(value = "入伍时间", index = 19)
    private String enlistString;
    private String enlistDate;
    @ExcelProperty(value = "入伍时间", index = 20)
    private String retireString;
    private String retireDate;
    @ExcelProperty(value = "人员类别", index = 21)
    private String personCategory;
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -1773,6 +1773,26 @@
    R listSavePopulationSentenceExcelVO(@RequestBody List<ComMngPopulationSentenceExcelVO> list, @RequestParam(value = "communityId") Long communityId);
    /**
     * 批量导入退役军人
     *
     * @param list        退役军人数据
     * @param communityId 社区id
     * @return 导入结果
     */
    @PostMapping("/common/data/population/importVeterans")
    R listSavePopulationVeteransExcelVO(@RequestBody List<ComMngPopulationVeteransExcelVO> list, @RequestParam(value = "communityId") Long communityId);
    /**
     * 批量导入残疾人
     *
     * @param list        残疾人数据
     * @param communityId 社区id
     * @return 导入结果
     */
    @PostMapping("/common/data/population/importDisability")
    R listSavePopulationDisabilityExcelVO(@RequestBody List<ComMngPopulationDisabilityExcelVO> list, @RequestParam(value = "communityId") Long communityId);
    /**
     * 确认导入实有人口(有则更新,无则新建)
     *
     * @param list        用户信息
springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/PopulationApi.java
@@ -248,6 +248,24 @@
        return R.ok();
    }
    @ApiOperation(value = "excel导入残疾人")
    @PostMapping(value = "/serve/importDisability", consumes = "multipart/*", headers = "content-type=multipart/form-date")
    public R importDisability(@RequestParam MultipartFile file, HttpServletRequest request) {
        //获取文件名
        String fileName = file.getOriginalFilename();
        log.info("传入文件名字【{}】", fileName);
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
            ComMngPopulationDisabilityExcelListen mngPopulationDisabilityExcelListen = new ComMngPopulationDisabilityExcelListen(communityService, this.getCommunityId(),userName,password,host,port,excelUrl,stringRedisTemplate);
            EasyExcel.read(inputStream, null, mngPopulationDisabilityExcelListen).sheet().doRead();
        } catch (IOException e) {
            log.error("导入模板失败【{}】", e.getMessage());
            e.printStackTrace();
        }
        return R.ok();
    }
    /**
     * 确认导入实有人口(有则更新,无则新建)
     *
@@ -2628,4 +2646,116 @@
            return R.fail();
        }
    }
    @ApiOperation(value = "下载导入失败退役军人数据")
    @PostMapping("/download/error/populationVeterans")
    public R downloadErrorVeteransPopulation(@RequestParam(value = "key") String key) {
        List<ComMngPopulationVeteransMistakeExcelVO> list = new ArrayList<>();
        Boolean isExits = stringRedisTemplate.hasKey(key);
        ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
        if(isExits){
            String json = valueOperations.get(key);
            list= JSONArray.parseArray(json,ComMngPopulationVeteransMistakeExcelVO.class);
        }
//        List<ComMngPopulationMistakeExcelVO> list = JSON.parseArray(mistakes,ComMngPopulationMistakeExcelVO.class);
        //生成动态模板excel通过ftp工具上传到主节点,然后返回模板下载地址
        String ftpUrl = "/mnt/data/web/excel/";
        String nowDate = DateUtils.getCurrentDateString();
        String name =  "退役军人错误数据" + nowDate +".xlsx";
        try {
            SFTPUtil sftp = new SFTPUtil(userName, password, host, port);
            sftp.login();
            boolean existDir = sftp.isExistDir(ftpUrl + name);
            if (!existDir) {
                String property = System.getProperty("user.dir");
                String fileName = property + File.separator + name;
                // 这里 需要指定写用哪个class去写
                ExcelWriter excelWriter = null;
                InputStream inputStream = null;
                try {
                    excelWriter = EasyExcel.write(fileName, ComMngPopulationVeteransMistakeExcelVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(new CustomSheetWriteHandler()).build();
                    WriteSheet writeSheet = EasyExcel.writerSheet("退役军人错误数据").build();
                    excelWriter.write(list, writeSheet);
                    excelWriter.finish();
                    File file = new File(fileName);
                    inputStream = new FileInputStream(file);
                    sftp.uploadMore(ftpUrl, name, inputStream);
                    sftp.logout();
                    inputStream.close();
                    String absolutePath = file.getAbsolutePath();
                    boolean delete = file.delete();
                    log.info("删除excel【{}】结果【{}】", absolutePath, delete);
                } finally {
                    // 千万别忘记finish 会帮忙关闭流
                    if (inputStream != null) {
                        inputStream.close();
                    }
                    if (excelWriter != null) {
                        excelWriter.finish();
                    }
                }
            }
            return R.ok(excelUrl + name);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("文件传输失败【{}】", e.getMessage());
            return R.fail();
        }
    }
    @ApiOperation(value = "下载导入失败残疾人数据")
    @PostMapping("/download/error/populationDisability")
    public R downloadErrorDisabilityPopulation(@RequestParam(value = "key") String key) {
        List<ComMngPopulationDisabilityMistakeExcelVO> list = new ArrayList<>();
        Boolean isExits = stringRedisTemplate.hasKey(key);
        ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
        if(isExits){
            String json = valueOperations.get(key);
            list= JSONArray.parseArray(json,ComMngPopulationDisabilityMistakeExcelVO.class);
        }
//        List<ComMngPopulationMistakeExcelVO> list = JSON.parseArray(mistakes,ComMngPopulationMistakeExcelVO.class);
        //生成动态模板excel通过ftp工具上传到主节点,然后返回模板下载地址
        String ftpUrl = "/mnt/data/web/excel/";
        String nowDate = DateUtils.getCurrentDateString();
        String name =  "残疾人错误数据" + nowDate +".xlsx";
        try {
            SFTPUtil sftp = new SFTPUtil(userName, password, host, port);
            sftp.login();
            boolean existDir = sftp.isExistDir(ftpUrl + name);
            if (!existDir) {
                String property = System.getProperty("user.dir");
                String fileName = property + File.separator + name;
                // 这里 需要指定写用哪个class去写
                ExcelWriter excelWriter = null;
                InputStream inputStream = null;
                try {
                    excelWriter = EasyExcel.write(fileName, ComMngPopulationDisabilityMistakeExcelVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(new CustomSheetWriteHandler()).build();
                    WriteSheet writeSheet = EasyExcel.writerSheet("残疾人错误数据").build();
                    excelWriter.write(list, writeSheet);
                    excelWriter.finish();
                    File file = new File(fileName);
                    inputStream = new FileInputStream(file);
                    sftp.uploadMore(ftpUrl, name, inputStream);
                    sftp.logout();
                    inputStream.close();
                    String absolutePath = file.getAbsolutePath();
                    boolean delete = file.delete();
                    log.info("删除excel【{}】结果【{}】", absolutePath, delete);
                } finally {
                    // 千万别忘记finish 会帮忙关闭流
                    if (inputStream != null) {
                        inputStream.close();
                    }
                    if (excelWriter != null) {
                        excelWriter.finish();
                    }
                }
            }
            return R.ok(excelUrl + name);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("文件传输失败【{}】", e.getMessage());
            return R.fail();
        }
    }
}
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/CommonDataApi.java
@@ -421,6 +421,32 @@
    }
    /**
     * 批量导入退役军人
     *
     * @param list        退役军人数据
     * @param communityId 社区id
     * @return 导入结果
     */
    @Transactional(rollbackFor = Exception.class)
    @PostMapping("population/importVeterans")
    public R listSavePopulationVeteransExcelVO(@RequestBody List<ComMngPopulationVeteransExcelVO> list, @RequestParam(value = "communityId") Long communityId){
        return comMngPopulationService.listSaveVeteransPopulation(list, communityId);
    }
    /**
     * 批量导入残疾人
     *
     * @param list        残疾人数据
     * @param communityId 社区id
     * @return 导入结果
     */
    @Transactional(rollbackFor = Exception.class)
    @PostMapping("population/importDisability")
    public R listSavePopulationDisabilityExcelVO(@RequestBody List<ComMngPopulationDisabilityExcelVO> list, @RequestParam(value = "communityId") Long communityId){
        return comMngPopulationService.listSaveDisabilityPopulation(list, communityId);
    }
    /**
     * 确认导入实有人口(有则更新,无则新建)
     *
     * @param list        用户信息
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComMngPopulationService.java
@@ -143,6 +143,23 @@
     */
    R listSaveSentencePopulation(List<ComMngPopulationSentenceExcelVO> list, Long communityId);
    /**
     * 批量导入退役军人
     *
     * @param list        退役军人数据
     * @param communityId 社区id
     * @return 导入结果
     */
    R listSaveVeteransPopulation(List<ComMngPopulationVeteransExcelVO> list, Long communityId);
    /**
     * 批量导入残疾人
     *
     * @param list        残疾人数据
     * @param communityId 社区id
     * @return 导入结果
     */
    R listSaveDisabilityPopulation(List<ComMngPopulationDisabilityExcelVO> list, Long communityId);
    /**
     * 确认导入实有人口(有则更新,无则新建)
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java
@@ -1981,6 +1981,412 @@
        return R.ok(mistakes);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R listSaveVeteransPopulation(List<ComMngPopulationVeteransExcelVO> list, Long communityId) {
        //需要新增的房屋集合
        List<ComMngPopulationHouseDO> houseList = new ArrayList<>();
        //需要新增的人口集合
        List<ComMngPopulationDO> saveList = new ArrayList<>();
        //需要修改的人口集合
        List<ComMngPopulationDO> updateList = new ArrayList<>();
        //需要新增的人口与房屋关系集合
        List<ComMngPopulationHouseUserDO> houseUserList = new ArrayList<>();
        log.info("开始处理导入数据");
        List<ComMngPopulationVeteransMistakeExcelVO> mistakes = new ArrayList<>();
        try {
            //查询社区信息
            log.info("开始查询社区信息数据");
            ComPopulationActVO populationActVO = comActDAO.getPopulationActById(communityId);
            if(populationActVO == null){
                log.error("未查询到社区信息");
                return R.fail("未查询到社区信息");
            }
            log.info("开始查询社区信息数据完成");
            //查询当前社区标签列表
            List<String> labelList = new ArrayList<>();
            List<ComMngUserTagDO> comMngUserTagDOS = comMngUserTagDAO.selectList(new QueryWrapper<ComMngUserTagDO>().eq("sys_flag", 1).or().eq("community_id", communityId));
            if (!ObjectUtils.isEmpty(comMngUserTagDOS)) {
                labelList = comMngUserTagDOS.stream().map(comMngUserTagDO -> comMngUserTagDO.getTagName()).collect(Collectors.toList());
            }
            StringBuilder areaPath = new StringBuilder();
            areaPath.append(populationActVO.getProvinceName()).append(">").append(populationActVO.getCityName()).append(">").append(populationActVO.getDistrictName()).append(">");
            //处理实有人口信息
            Integer nub = 1;
            //查询所有人口数据放入HashMap中
            List<ComMngPopulationDO> populationList = this.baseMapper.selectList(null);
            HashMap<String,Object> populationMap = new HashMap<>();
            populationList.forEach(population -> {
                String key = population.getCardNo();
                populationMap.put(key,population);
            });
            //查询所有房屋信息放入到HashMap中
            List<ComMngPopulationHouseDO> houseLists = comMngPopulationHouseDAO.selectList(null);
            HashMap<String,Object> houseMap = new HashMap<>();
            houseLists.forEach(house -> {
                String key = house.getCommunityId() + house.getVillageId() + house.getFloor() + house.getUnitNo() + house.getHouseNo();
                houseMap.put(key,house);
            });
            List<ComMngVillageDO> villageList = comActVillageDAO.selectList(null);
            HashMap<String,Object> villageMap = new HashMap<>();
            villageList.forEach(village -> {
                String key = village.getCommunityId() + village.getAlley() + village.getHouseNum();
                villageMap.put(key,village);
            });
            List<ComMngPopulationHouseUserDO> houseUserLists = comMngPopulationHouseUserDAO.selectList(null);
            HashMap<String,Object> houseUserMap = new HashMap<>();
            houseUserLists.forEach(houseUser -> {
                String key = houseUser.getPopulId() + houseUser.getHouseId() + "";
                houseUserMap.put(key,houseUser);
            });
            for (ComMngPopulationVeteransExcelVO vo : list) {
                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("号",""));
                }
                log.info("开始查询小区街路巷是否存在");
                //查询小区街路巷是否存在
                ComMngVillageDO comMngVillageDO = null;
                String villageKey = communityId + vo.getRoad() + vo.getDoorNo();
                if(!isOnly(villageKey,villageMap)){
                    comMngVillageDO = (ComMngVillageDO)villageMap.get(villageKey);
                }else{
                    ComMngPopulationVeteransMistakeExcelVO mistake = new ComMngPopulationVeteransMistakeExcelVO();
                    BeanUtils.copyProperties(vo,mistake);
                    setVeteransMistake(mistake, vo);
                    mistake.setMistake("街路巷或小区号不存在,请先在“小区管理”中添加该小区:街路巷:"+ vo.getRoad() +",小区号:" + vo.getDoorNo());
                    mistakes.add(mistake);
                    log.info("未查询到街路巷:"+ vo.getRoad() +",小区号:" + vo.getDoorNo());
                    continue;
                }
                StringBuilder address = new StringBuilder();
                address.append(populationActVO.getProvinceName()).append(populationActVO.getCityName()).append(populationActVO.getDistrictName())
                        .append(populationActVO.getStreetName()).append(comMngVillageDO.getAlley()).append(vo.getDoorNo()).append("号").append(vo.getFloor()).append("栋")
                        .append(vo.getUnitNo()).append("单元").append(vo.getHouseNo()).append("号");
                vo.setAddress(address.toString());
                log.info("开始查询小区街路巷是否存在完成");
                log.info("开始查询房屋是否存在");
                //先判断房屋是否存在
                ComMngPopulationHouseDO populationHouseDO = null;
                String houseKey = communityId + comMngVillageDO.getVillageId() + vo.getFloor() + vo.getUnitNo() + vo.getHouseNo();
                if(isOnly(houseKey,houseMap)){
                    if(!houseList.isEmpty()){
                        for (ComMngPopulationHouseDO house:houseList) {
                            if(house.getVillageId().equals(comMngVillageDO.getVillageId()) && house.getCommunityId().equals(communityId)
                                    && house.getFloor().equals(vo.getFloor()) && house.getUnitNo().equals(vo.getUnitNo())
                                    && house.getHouseNo().equals(vo.getHouseNo())){
                                populationHouseDO = house;
                                break;
                            }
                        }
                    }
                    if(populationHouseDO == null){
                        //房屋信息不存在建立房屋信息
                        populationHouseDO = saveVeteransPopulationHouse(vo, comMngVillageDO, communityId, areaPath, populationActVO.getName());
                        houseList.add(populationHouseDO);
                    }
                }else{
                    populationHouseDO = (ComMngPopulationHouseDO)houseMap.get(houseKey);
                }
                vo.setHouseId(populationHouseDO.getId());
                log.info("开始查询房屋是否存在完成");
                if (StringUtils.isEmpty(vo.getName()) && StringUtils.isEmpty(vo.getCardNo())) {
                    //空户处理完房屋信息,直接返回
                    continue;
                }
                String cardNoAES = AESUtil.encrypt128(vo.getCardNo(), aesKey);
                //判断实有人口是否已存在
                log.info("开始查询实有人口是否已存在");
                ComMngPopulationDO populationDO = null;
                String populationKey = vo.getCardNo();
                if(!isOnly(populationKey,populationMap)){
                    //存在实有人口信息,则更新
                    populationDO = (ComMngPopulationDO)populationMap.get(populationKey);
                    ComMngPopulationDO updatePopulationDO = updateVeteransPopulationDO(vo,populationDO,labelList);
                    updateList.add(updatePopulationDO);
                }else{
                    //不存在实有人口,则新增
                    populationDO = saveVeteransPopulationDO(vo, populationActVO, comMngVillageDO,labelList);
                    saveList.add(populationDO);
                }
                log.info("开始查询实有人口是否已存在完成");
                log.info("开始查询实有人口房屋居住信息");
                //处理实有人口房屋居住信息
                if (populationDO != null) {
                    ComMngPopulationHouseUserDO populationHouseUserDO = null;
                    String houseUserKey = populationDO.getId() + populationHouseDO.getId() + "";
                    if(isOnly(houseUserKey,houseUserMap)){
                        populationHouseUserDO = new ComMngPopulationHouseUserDO();
                        populationHouseUserDO.setId(Snowflake.getId());
                        populationHouseUserDO.setHouseId(populationHouseDO.getId());
                        populationHouseUserDO.setPopulId(populationDO.getId());
//                        populationHouseUserDO.setRelation(vo.getRelation());
                        populationHouseUserDO.setRelationId(vo.getIsRent());
//                        populationHouseUserDO.setResidence(vo.getResidence());
                        houseUserList.add(populationHouseUserDO);
                    }
                }
                log.info("开始查询实有人口房屋居住信息完成");
            }
        }catch (Exception e){
            log.info("出现错误,错误原因:" + e.getMessage());
        }
        log.info("处理完成导入数据");
        log.info("开始执行数据库导入");
        if(!houseList.isEmpty()){
            log.info("执行数据库导入房屋");
            comMngPopulationHouseDAO.insertAll(houseList);
            log.info("执行数据库导入房屋完成");
        }
        if(!saveList.isEmpty()){
            log.info("执行数据库导入人口");
            this.baseMapper.insertAll(saveList);
            log.info("执行数据库导入人口完成");
        }
        if(!updateList.isEmpty()){
            log.info("执行数据库更新人口");
            this.baseMapper.updateAll(updateList);
//            this.updateBatchById(updateList);
            log.info("执行数据库更新人口完成");
        }
        if(!houseUserList.isEmpty()){
            log.info("执行数据库导入人口房屋关系");
            comMngPopulationHouseUserService.saveBatch(houseUserList);
            log.info("执行数据库导入人口房屋关系完成");
        }
        log.info("执行数据库导入完成");
        if (!mistakes.isEmpty()) {
            log.info("返回错误数据");
            return R.fail(mistakes);
        }
        return R.ok(mistakes);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R listSaveDisabilityPopulation(List<ComMngPopulationDisabilityExcelVO> list, Long communityId) {
        //需要新增的房屋集合
        List<ComMngPopulationHouseDO> houseList = new ArrayList<>();
        //需要新增的人口集合
        List<ComMngPopulationDO> saveList = new ArrayList<>();
        //需要修改的人口集合
        List<ComMngPopulationDO> updateList = new ArrayList<>();
        //需要新增的人口与房屋关系集合
        List<ComMngPopulationHouseUserDO> houseUserList = new ArrayList<>();
        log.info("开始处理导入数据");
        List<ComMngPopulationDisabilityMistakeExcelVO> mistakes = new ArrayList<>();
        try {
            //查询社区信息
            log.info("开始查询社区信息数据");
            ComPopulationActVO populationActVO = comActDAO.getPopulationActById(communityId);
            if(populationActVO == null){
                log.error("未查询到社区信息");
                return R.fail("未查询到社区信息");
            }
            log.info("开始查询社区信息数据完成");
            //查询当前社区标签列表
            List<String> labelList = new ArrayList<>();
            List<ComMngUserTagDO> comMngUserTagDOS = comMngUserTagDAO.selectList(new QueryWrapper<ComMngUserTagDO>().eq("sys_flag", 1).or().eq("community_id", communityId));
            if (!ObjectUtils.isEmpty(comMngUserTagDOS)) {
                labelList = comMngUserTagDOS.stream().map(comMngUserTagDO -> comMngUserTagDO.getTagName()).collect(Collectors.toList());
            }
            StringBuilder areaPath = new StringBuilder();
            areaPath.append(populationActVO.getProvinceName()).append(">").append(populationActVO.getCityName()).append(">").append(populationActVO.getDistrictName()).append(">");
            //处理实有人口信息
            Integer nub = 1;
            //查询所有人口数据放入HashMap中
            List<ComMngPopulationDO> populationList = this.baseMapper.selectList(null);
            HashMap<String,Object> populationMap = new HashMap<>();
            populationList.forEach(population -> {
                String key = population.getCardNo();
                populationMap.put(key,population);
            });
            //查询所有房屋信息放入到HashMap中
            List<ComMngPopulationHouseDO> houseLists = comMngPopulationHouseDAO.selectList(null);
            HashMap<String,Object> houseMap = new HashMap<>();
            houseLists.forEach(house -> {
                String key = house.getCommunityId() + house.getVillageId() + house.getFloor() + house.getUnitNo() + house.getHouseNo();
                houseMap.put(key,house);
            });
            List<ComMngVillageDO> villageList = comActVillageDAO.selectList(null);
            HashMap<String,Object> villageMap = new HashMap<>();
            villageList.forEach(village -> {
                String key = village.getCommunityId() + village.getAlley() + village.getHouseNum();
                villageMap.put(key,village);
            });
            List<ComMngPopulationHouseUserDO> houseUserLists = comMngPopulationHouseUserDAO.selectList(null);
            HashMap<String,Object> houseUserMap = new HashMap<>();
            houseUserLists.forEach(houseUser -> {
                String key = houseUser.getPopulId() + houseUser.getHouseId() + "";
                houseUserMap.put(key,houseUser);
            });
            for (ComMngPopulationDisabilityExcelVO vo : list) {
                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("号",""));
                }
                log.info("开始查询小区街路巷是否存在");
                //查询小区街路巷是否存在
                ComMngVillageDO comMngVillageDO = null;
                String villageKey = communityId + vo.getRoad() + vo.getDoorNo();
                if(!isOnly(villageKey,villageMap)){
                    comMngVillageDO = (ComMngVillageDO)villageMap.get(villageKey);
                }else{
                    ComMngPopulationDisabilityMistakeExcelVO mistake = new ComMngPopulationDisabilityMistakeExcelVO();
                    BeanUtils.copyProperties(vo,mistake);
                    setDisabilityMistake(mistake, vo);
                    mistake.setMistake("街路巷或小区号不存在,请先在“小区管理”中添加该小区:街路巷:"+ vo.getRoad() +",小区号:" + vo.getDoorNo());
                    mistakes.add(mistake);
                    log.info("未查询到街路巷:"+ vo.getRoad() +",小区号:" + vo.getDoorNo());
                    continue;
                }
                StringBuilder address = new StringBuilder();
                address.append(populationActVO.getProvinceName()).append(populationActVO.getCityName()).append(populationActVO.getDistrictName())
                        .append(populationActVO.getStreetName()).append(comMngVillageDO.getAlley()).append(vo.getDoorNo()).append("号").append(vo.getFloor()).append("栋")
                        .append(vo.getUnitNo()).append("单元").append(vo.getHouseNo()).append("号");
                vo.setAddress(address.toString());
                log.info("开始查询小区街路巷是否存在完成");
                log.info("开始查询房屋是否存在");
                //先判断房屋是否存在
                ComMngPopulationHouseDO populationHouseDO = null;
                String houseKey = communityId + comMngVillageDO.getVillageId() + vo.getFloor() + vo.getUnitNo() + vo.getHouseNo();
                if(isOnly(houseKey,houseMap)){
                    if(!houseList.isEmpty()){
                        for (ComMngPopulationHouseDO house:houseList) {
                            if(house.getVillageId().equals(comMngVillageDO.getVillageId()) && house.getCommunityId().equals(communityId)
                                    && house.getFloor().equals(vo.getFloor()) && house.getUnitNo().equals(vo.getUnitNo())
                                    && house.getHouseNo().equals(vo.getHouseNo())){
                                populationHouseDO = house;
                                break;
                            }
                        }
                    }
                    if(populationHouseDO == null){
                        //房屋信息不存在建立房屋信息
                        populationHouseDO = saveDisabilityPopulationHouse(vo, comMngVillageDO, communityId, areaPath, populationActVO.getName());
                        houseList.add(populationHouseDO);
                    }
                }else{
                    populationHouseDO = (ComMngPopulationHouseDO)houseMap.get(houseKey);
                }
                vo.setHouseId(populationHouseDO.getId());
                log.info("开始查询房屋是否存在完成");
                if (StringUtils.isEmpty(vo.getName()) && StringUtils.isEmpty(vo.getCardNo())) {
                    //空户处理完房屋信息,直接返回
                    continue;
                }
                String cardNoAES = AESUtil.encrypt128(vo.getCardNo(), aesKey);
                //判断实有人口是否已存在
                log.info("开始查询实有人口是否已存在");
                ComMngPopulationDO populationDO = null;
                String populationKey = vo.getCardNo();
                if(!isOnly(populationKey,populationMap)){
                    //存在实有人口信息,则更新
                    populationDO = (ComMngPopulationDO)populationMap.get(populationKey);
                    ComMngPopulationDO updatePopulationDO = updateDisabilityPopulationDO(vo,populationDO,labelList);
                    updateList.add(updatePopulationDO);
                }else{
                    //不存在实有人口,则新增
                    populationDO = saveDisabilityPopulationDO(vo, populationActVO, comMngVillageDO,labelList);
                    saveList.add(populationDO);
                }
                log.info("开始查询实有人口是否已存在完成");
                log.info("开始查询实有人口房屋居住信息");
                //处理实有人口房屋居住信息
                if (populationDO != null) {
                    ComMngPopulationHouseUserDO populationHouseUserDO = null;
                    String houseUserKey = populationDO.getId() + populationHouseDO.getId() + "";
                    if(isOnly(houseUserKey,houseUserMap)){
                        populationHouseUserDO = new ComMngPopulationHouseUserDO();
                        populationHouseUserDO.setId(Snowflake.getId());
                        populationHouseUserDO.setHouseId(populationHouseDO.getId());
                        populationHouseUserDO.setPopulId(populationDO.getId());
//                        populationHouseUserDO.setRelation(vo.getRelation());
                        populationHouseUserDO.setRelationId(vo.getIsRent());
//                        populationHouseUserDO.setResidence(vo.getResidence());
                        houseUserList.add(populationHouseUserDO);
                    }
                }
                log.info("开始查询实有人口房屋居住信息完成");
            }
        }catch (Exception e){
            log.info("出现错误,错误原因:" + e.getMessage());
        }
        log.info("处理完成导入数据");
        log.info("开始执行数据库导入");
        if(!houseList.isEmpty()){
            log.info("执行数据库导入房屋");
            comMngPopulationHouseDAO.insertAll(houseList);
            log.info("执行数据库导入房屋完成");
        }
        if(!saveList.isEmpty()){
            log.info("执行数据库导入人口");
            this.baseMapper.insertAll(saveList);
            log.info("执行数据库导入人口完成");
        }
        if(!updateList.isEmpty()){
            log.info("执行数据库更新人口");
            this.baseMapper.updateAll(updateList);
//            this.updateBatchById(updateList);
            log.info("执行数据库更新人口完成");
        }
        if(!houseUserList.isEmpty()){
            log.info("执行数据库导入人口房屋关系");
            comMngPopulationHouseUserService.saveBatch(houseUserList);
            log.info("执行数据库导入人口房屋关系完成");
        }
        log.info("执行数据库导入完成");
        if (!mistakes.isEmpty()) {
            log.info("返回错误数据");
            return R.fail(mistakes);
        }
        return R.ok(mistakes);
    }
    private ComMngPopulationDO updatePopulationDO(ComMngPopulationServeExcelVO vo, ComMngPopulationDO populationDO,List<String> labelList){
        BeanUtils.copyProperties(vo, populationDO);
@@ -2130,6 +2536,47 @@
    }
    private ComMngPopulationDO updateSentencePopulationDO(ComMngPopulationSentenceExcelVO vo, ComMngPopulationDO populationDO,List<String> labelList){
        BeanUtils.copyProperties(vo, populationDO);
        List<String> userTag = vo.getUserTagStr().stream().map(userTagStr -> userTagStr.split("\\(")[0]).collect(Collectors.toList());
        //如果导入数据标签中有当前社区标签列表中不包含的标签,则删除
        Iterator<String> iterator = userTag.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            if (!labelList.contains(s))
                iterator.remove();
        }
        String cardNoAES = populationDO.getCardNo();
        try {
            cardNoAES = AESUtil.encrypt128(vo.getCardNo(), aesKey);
        }catch (Exception e){
            log.error("身份证加密失败");
        }
        populationDO.setLabel(Joiner.on(",").join(userTag));
        populationDO.setCardNo(cardNoAES);
        return populationDO;
    }
    private ComMngPopulationDO updateVeteransPopulationDO(ComMngPopulationVeteransExcelVO vo, ComMngPopulationDO populationDO,List<String> labelList){
        BeanUtils.copyProperties(vo, populationDO);
        List<String> userTag = vo.getUserTagStr().stream().map(userTagStr -> userTagStr.split("\\(")[0]).collect(Collectors.toList());
        //如果导入数据标签中有当前社区标签列表中不包含的标签,则删除
        Iterator<String> iterator = userTag.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            if (!labelList.contains(s))
                iterator.remove();
        }
        String cardNoAES = populationDO.getCardNo();
        try {
            cardNoAES = AESUtil.encrypt128(vo.getCardNo(), aesKey);
        }catch (Exception e){
            log.error("身份证加密失败");
        }
        populationDO.setLabel(Joiner.on(",").join(userTag));
        populationDO.setCardNo(cardNoAES);
        return populationDO;
    }
    private ComMngPopulationDO updateDisabilityPopulationDO(ComMngPopulationDisabilityExcelVO vo, ComMngPopulationDO populationDO,List<String> labelList){
        BeanUtils.copyProperties(vo, populationDO);
        List<String> userTag = vo.getUserTagStr().stream().map(userTagStr -> userTagStr.split("\\(")[0]).collect(Collectors.toList());
        //如果导入数据标签中有当前社区标签列表中不包含的标签,则删除
@@ -2383,6 +2830,70 @@
    }
    private ComMngPopulationDO saveSentencePopulationDO(ComMngPopulationSentenceExcelVO vo, ComPopulationActVO comActDO, ComMngVillageDO comMngVillageDO,List<String> labelList) {
        ComMngPopulationDO populationDO = new ComMngPopulationDO();
        BeanUtils.copyProperties(vo, populationDO);
        populationDO.setId(Snowflake.getId());
        List<String> userTag = vo.getUserTagStr().stream().map(userTagStr -> userTagStr.split("\\(")[0]).collect(Collectors.toList());
        //如果导入数据标签中有当前社区标签列表中不包含的标签,则删除
        Iterator<String> iterator = userTag.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            if (!labelList.contains(s))
                iterator.remove();
        }
        populationDO.setVillageId(comMngVillageDO.getVillageId());
        populationDO.setActId(comActDO.getCommunityId());
        populationDO.setStreetId(comActDO.getStreetId());
        populationDO.setLabel(Joiner.on(",").join(userTag));
        populationDO.setVillageName(comMngVillageDO.getGroupAt());
        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 ComMngPopulationDO saveVeteransPopulationDO(ComMngPopulationVeteransExcelVO vo, ComPopulationActVO comActDO, ComMngVillageDO comMngVillageDO,List<String> labelList) {
        ComMngPopulationDO populationDO = new ComMngPopulationDO();
        BeanUtils.copyProperties(vo, populationDO);
        populationDO.setId(Snowflake.getId());
        List<String> userTag = vo.getUserTagStr().stream().map(userTagStr -> userTagStr.split("\\(")[0]).collect(Collectors.toList());
        //如果导入数据标签中有当前社区标签列表中不包含的标签,则删除
        Iterator<String> iterator = userTag.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            if (!labelList.contains(s))
                iterator.remove();
        }
        populationDO.setVillageId(comMngVillageDO.getVillageId());
        populationDO.setActId(comActDO.getCommunityId());
        populationDO.setStreetId(comActDO.getStreetId());
        populationDO.setLabel(Joiner.on(",").join(userTag));
        populationDO.setVillageName(comMngVillageDO.getGroupAt());
        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 ComMngPopulationDO saveDisabilityPopulationDO(ComMngPopulationDisabilityExcelVO vo, ComPopulationActVO comActDO, ComMngVillageDO comMngVillageDO,List<String> labelList) {
        ComMngPopulationDO populationDO = new ComMngPopulationDO();
        BeanUtils.copyProperties(vo, populationDO);
        populationDO.setId(Snowflake.getId());
@@ -2702,6 +3213,88 @@
    }
    private ComMngPopulationHouseDO saveSentencePopulationHouse(ComMngPopulationSentenceExcelVO vo, ComMngVillageDO comMngVillageDO, Long communityId,StringBuilder areaPath, String actName) {
        //查询该房屋未建立,执行建立房屋信息
        ComMngPopulationHouseDO populationHouseDO = new ComMngPopulationHouseDO();
        populationHouseDO.setId(Snowflake.getId());
        populationHouseDO.setStreetId(comMngVillageDO.getStreetId());
        populationHouseDO.setVillageId(comMngVillageDO.getVillageId());
        populationHouseDO.setAlley(vo.getRoad());
        populationHouseDO.setHouseNum(vo.getDoorNo());
        populationHouseDO.setStatus(vo.getIsRent());
        populationHouseDO.setCommunityId(communityId);
        populationHouseDO.setFloor(vo.getFloor());
        populationHouseDO.setUnitNo(vo.getUnitNo());
        populationHouseDO.setHouseNo(vo.getHouseNo());
        populationHouseDO.setCode(vo.getHouseNo());
        populationHouseDO.setAddress(vo.getAddress());
        populationHouseDO.setUpdateAt(new Date());
//        populationHouseDO.setConstructPurpose(vo.getHousePurpose());
        StringBuilder housePath = new StringBuilder();
        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()));
//        } catch (Exception e) {
//        }
        if (StringUtils.isEmpty(vo.getName()) && StringUtils.isEmpty(vo.getCardNo())) {
            populationHouseDO.setIsEmpty(PopulIsOksEnum.YES.getCode());
        }
        if (vo.getHouseStatus() != null) {
            populationHouseDO.setStatus(vo.getHouseStatus());
        }
        if (vo.getHousePurpose() != null) {
            populationHouseDO.setPurpose(vo.getHousePurpose());
        }
        if (vo.getControlStatus() != null) {
            populationHouseDO.setControlStatus(vo.getControlStatus());
        }
//        comMngPopulationHouseDAO.insert(populationHouseDO);
        return populationHouseDO;
    }
    private ComMngPopulationHouseDO saveVeteransPopulationHouse(ComMngPopulationVeteransExcelVO vo, ComMngVillageDO comMngVillageDO, Long communityId,StringBuilder areaPath, String actName) {
        //查询该房屋未建立,执行建立房屋信息
        ComMngPopulationHouseDO populationHouseDO = new ComMngPopulationHouseDO();
        populationHouseDO.setId(Snowflake.getId());
        populationHouseDO.setStreetId(comMngVillageDO.getStreetId());
        populationHouseDO.setVillageId(comMngVillageDO.getVillageId());
        populationHouseDO.setAlley(vo.getRoad());
        populationHouseDO.setHouseNum(vo.getDoorNo());
        populationHouseDO.setStatus(vo.getIsRent());
        populationHouseDO.setCommunityId(communityId);
        populationHouseDO.setFloor(vo.getFloor());
        populationHouseDO.setUnitNo(vo.getUnitNo());
        populationHouseDO.setHouseNo(vo.getHouseNo());
        populationHouseDO.setCode(vo.getHouseNo());
        populationHouseDO.setAddress(vo.getAddress());
        populationHouseDO.setUpdateAt(new Date());
//        populationHouseDO.setConstructPurpose(vo.getHousePurpose());
        StringBuilder housePath = new StringBuilder();
        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()));
//        } catch (Exception e) {
//        }
        if (StringUtils.isEmpty(vo.getName()) && StringUtils.isEmpty(vo.getCardNo())) {
            populationHouseDO.setIsEmpty(PopulIsOksEnum.YES.getCode());
        }
        if (vo.getHouseStatus() != null) {
            populationHouseDO.setStatus(vo.getHouseStatus());
        }
        if (vo.getHousePurpose() != null) {
            populationHouseDO.setPurpose(vo.getHousePurpose());
        }
        if (vo.getControlStatus() != null) {
            populationHouseDO.setControlStatus(vo.getControlStatus());
        }
//        comMngPopulationHouseDAO.insert(populationHouseDO);
        return populationHouseDO;
    }
    private ComMngPopulationHouseDO saveDisabilityPopulationHouse(ComMngPopulationDisabilityExcelVO vo, ComMngVillageDO comMngVillageDO, Long communityId,StringBuilder areaPath, String actName) {
        //查询该房屋未建立,执行建立房屋信息
        ComMngPopulationHouseDO populationHouseDO = new ComMngPopulationHouseDO();
        populationHouseDO.setId(Snowflake.getId());
@@ -4190,6 +4783,44 @@
//        mvo.setDeath(PopulOutOrLocalEnum.getCnDescByName(vo.getDeath()));
    }
    private void setVeteransMistake(ComMngPopulationVeteransMistakeExcelVO mvo, ComMngPopulationVeteransExcelVO vo){
        mvo.setRegiterNature(PopulRegiterNatureEnum.getCnDescByName(vo.getRegiterNature()));
        mvo.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCnDescByName(vo.getPoliticalOutlook()));
        mvo.setIsRent(PopulHouseUseEnum.getCnDescByName(vo.getIsRent()));
//        mvo.setPatientRelation(PopulRelationEnum.getCnDescByName(vo.getPatientRelation()));
        mvo.setHouseStatus(PopulHouseStatusEnum.getCnDescByName(vo.getHouseStatus()));
        mvo.setHousePurpose(PopulHousePurposeEnum.getCnDescByName(vo.getHousePurpose()));
        mvo.setControlStatus(PopulHouseControlStatusEnum.getCnDescByName(vo.getControlStatus()));
//        mvo.setCultureLevel(PopulCultureLevelEnum.getCnDescByName(vo.getCultureLevel()));
        mvo.setMarriage(PopulMarriageEnum.getCnDescByName(vo.getMarriage()));
        mvo.setOutOrLocal(PopulOutOrLocalEnum.getCnDescByName(vo.getOutOrLocal()));
        mvo.setIsVeteransTraining(PopulHouseUseEnum.getCnDescByName(vo.getIsVeteransTraining()));
        mvo.setIsBusiness(PopulHouseUseEnum.getCnDescByName(vo.getIsBusiness()));
//        mvo.setIsRehab(PopulHouseUseEnum.getCnDescByName(vo.getIsRehab()));
//        mvo.setResidence(PopulRelationEnum.getCnDescByName(vo.getResidence()));
//        mvo.setPersonType(PopulPersonTypeEnum.getCnDescByName(vo.getPersonType()));
//        mvo.setDeath(PopulOutOrLocalEnum.getCnDescByName(vo.getDeath()));
    }
    private void setDisabilityMistake(ComMngPopulationDisabilityMistakeExcelVO mvo, ComMngPopulationDisabilityExcelVO vo){
//        mvo.setRegiterNature(PopulRegiterNatureEnum.getCnDescByName(vo.getRegiterNature()));
//        mvo.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCnDescByName(vo.getPoliticalOutlook()));
        mvo.setIsRent(PopulHouseUseEnum.getCnDescByName(vo.getIsRent()));
//        mvo.setPatientRelation(PopulRelationEnum.getCnDescByName(vo.getPatientRelation()));
        mvo.setHouseStatus(PopulHouseStatusEnum.getCnDescByName(vo.getHouseStatus()));
        mvo.setHousePurpose(PopulHousePurposeEnum.getCnDescByName(vo.getHousePurpose()));
        mvo.setControlStatus(PopulHouseControlStatusEnum.getCnDescByName(vo.getControlStatus()));
        mvo.setCultureLevel(PopulCultureLevelEnum.getCnDescByName(vo.getCultureLevel()));
//        mvo.setMarriage(PopulMarriageEnum.getCnDescByName(vo.getMarriage()));
        mvo.setOutOrLocal(PopulOutOrLocalEnum.getCnDescByName(vo.getOutOrLocal()));
//        mvo.setIsVeteransTraining(PopulHouseUseEnum.getCnDescByName(vo.getIsVeteransTraining()));
//        mvo.setIsBusiness(PopulHouseUseEnum.getCnDescByName(vo.getIsBusiness()));
//        mvo.setIsRehab(PopulHouseUseEnum.getCnDescByName(vo.getIsRehab()));
//        mvo.setResidence(PopulRelationEnum.getCnDescByName(vo.getResidence()));
//        mvo.setPersonType(PopulPersonTypeEnum.getCnDescByName(vo.getPersonType()));
//        mvo.setDeath(PopulOutOrLocalEnum.getCnDescByName(vo.getDeath()));
    }
    /**
     * 判重方法
     * @param key   主键
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwRotaServiceImpl.java
@@ -285,9 +285,9 @@
    @Override
    public R listSaveSwRotaExcelVO(List<ComSwRotaExcelVO> list, Long communityId) {
        String[] parsePatterns = new String[]{"yyyy-MM-dd", "yyyy-M-dd", "yyyy-MM-d", "yyyy-M-d", "yyyy/MM/dd", "yyyy/M/dd", "yyyy/MM/d", "yyyy/M/d"};
        List<ComSwRotaDO> comSwRotaDOS = new ArrayList<>();
            for (ComSwRotaExcelVO comSwRotaExcelVO : list){
                String[] parsePatterns = new String[]{"yyyy-MM-dd", "yyyy-M-dd", "yyyy-MM-d", "yyyy-M-d", "yyyy/MM/dd", "yyyy/M/dd", "yyyy/MM/d", "yyyy/M/d"};
                Date date = DateUtil.parse(comSwRotaExcelVO.getRotaDate(),parsePatterns);
                Integer count = comSwRotaDAO.selectCount(new QueryWrapper<ComSwRotaDO>().lambda().eq(ComSwRotaDO::getRotaDate, date));
                if (count > 0) {