From 177249c76aeea0b4bf8d8816d4994e3b445b45ce Mon Sep 17 00:00:00 2001 From: huanghongfa <huanghongfa123456> Date: 星期四, 02 九月 2021 10:39:34 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/zzj' into zzj --- springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationKeyExcelListen.java | 920 ++++++++++++++++++++++++++------------------------------ 1 files changed, 427 insertions(+), 493 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationKeyExcelListen.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationKeyExcelListen.java index bfca2d3..237afa4 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationKeyExcelListen.java +++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationKeyExcelListen.java @@ -1,35 +1,5 @@ package com.panzhihua.common.listen; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.context.AnalysisContext; -import com.alibaba.excel.event.AnalysisEventListener; -import com.alibaba.excel.write.metadata.WriteSheet; -import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; -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.excel.CustomSheetWriteHandler; -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.ComMngPopulationMistakeExcelVO; -import com.panzhihua.common.model.vos.community.ComMngPopulationKeyExcelVO; -import com.panzhihua.common.model.vos.community.ComMngPopulationKeyMistakeExcelVO; -import com.panzhihua.common.service.community.CommunityService; -import com.panzhihua.common.utlis.ListUtils; -import com.panzhihua.common.utlis.PayUtil; -import com.panzhihua.common.utlis.SFTPUtil; -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.io.File; -import java.io.FileInputStream; -import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -37,355 +7,364 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.ValueOperations; + +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.ComMngPopulationKeyExcelVO; +import com.panzhihua.common.model.vos.community.ComMngPopulationKeyMistakeExcelVO; +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; + /** * @description: 重点上访人员导入监听 * @author: txb */ @Slf4j public class ComMngPopulationKeyExcelListen extends AnalysisEventListener<Map<Integer, String>> { - private CommunityService communityService; - - private Long communityId; - + /** + * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 + */ + private static final int BATCH_COUNT = 5000; private static int headSize = 0; - + List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>(); + private CommunityService communityService; + private Long communityId; + private Long userId; 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 ComMngPopulationKeyExcelListen(CommunityService communityService, Long communityId, Long userId, + StringRedisTemplate stringRedisTemplate) { + this.communityService = communityService; + this.communityId = communityId; + this.userId = userId; + this.stringRedisTemplate = stringRedisTemplate; + } - public ComMngPopulationKeyExcelListen(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) { + @Override + public void invoke(Map<Integer, String> data, AnalysisContext context) { + list.add(data); + if (list.size() >= BATCH_COUNT) { saveData(); - log.info("所有数据解析完成!"); + list.clear(); } + } - /** - * 不是固定的列只能手动处理 - */ - private void saveData() { - R<List<BcDictionaryVO>> dictionaryR = communityService.listDictionaryByKey(BcDictionaryConstants.FAMILY); - log.info("开始导入重点上访人员数据"); - log.info("表格总数据:" + list.size()); - if (list.size() == 0) { - throw new ServiceException("000", "导入数据为空!"); - } - ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue(); - String key = Constants.KEY_POPULATION_ERROR_LIST; + /** + * 这里会一行行的返回头 + * + * @param headMap + * @param context + */ + @Override + public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { + headSize = headMap.size(); + headData = headMap; + } - 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())); -// } + @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("000", "导入数据为空!"); + } + ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue(); + String key = Constants.KEY_POPULATION_ERROR_LIST; - int index = 2; - try { - ArrayList<ComMngPopulationKeyExcelVO> voList = Lists.newArrayList(); -// List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>(); - ArrayList<ComMngPopulationKeyMistakeExcelVO> mistakes = Lists.newArrayList(); - for (Map<Integer, String> oneData : list) { - ComMngPopulationKeyExcelVO vo = new ComMngPopulationKeyExcelVO(); - if (StringUtils.isNotEmpty(oneData.get(0))){ - vo.setSerialNumber(oneData.get(0)); - } - //姓名和身份证都为空,为空户,无需操作,否则就解析年龄,性别,出生年月日 - if(StringUtils.isEmpty(oneData.get(1))){ - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - index++; - setKeyMistake(oneData, mistake); - mistake.setMistake("名字不可为空,请填写姓名"); - mistakes.add(mistake); - continue; - } - vo.setName(oneData.get(1)); - if(StringUtils.isEmpty(oneData.get(3))){ - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - index++; - setKeyMistake(oneData, mistake); - mistake.setMistake("身份证号不可为空,请填写身份证"); - mistakes.add(mistake); - continue; - } + 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())); + // } - //判断身份证号码位数 - if(oneData.get(3).length() != 18){ - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - index++; - setKeyMistake(oneData, mistake); - mistake.setMistake("身份证号位数有误,请检查身份证号码是否正确"); - mistakes.add(mistake); - continue; - } - vo.setCardNo(oneData.get(3).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(2))){ - vo.setNation(oneData.get(2)); - } - if(StringUtils.isNotEmpty(oneData.get(4))){ - vo.setPhone(oneData.get(4)); - } - if(StringUtils.isNotEmpty(oneData.get(5))){ - vo.setNativePlace(oneData.get(5)); - } - if(StringUtils.isEmpty(oneData.get(6))){ - index++; - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - setKeyMistake(oneData, mistake); - mistake.setMistake("街路巷不可为空"); - mistakes.add(mistake); - continue; - } - vo.setRoad(oneData.get(6)); - if(StringUtils.isEmpty(oneData.get(7))){ - index++; - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - setKeyMistake(oneData, mistake); - mistake.setMistake("小区号不可为空"); - mistakes.add(mistake); - continue; - } - vo.setDoorNo(oneData.get(7).trim()); -// if(StringUtils.isEmpty(oneData.get(8))){ -// index++; -// ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); -// setKeyMistake(oneData, mistake); -// mistake.setMistake("楼排号不可为空"); -// mistakes.add(mistake); -// continue; -// } - if(StringUtils.isNotEmpty(oneData.get(8))) { - vo.setFloor(oneData.get(8).trim()); - } -// if(StringUtils.isEmpty(oneData.get(9))){ -// index++; -// ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); -// setKeyMistake(oneData, mistake); -// mistake.setMistake("单元号不可为空"); -// mistakes.add(mistake); -// continue; -// } - if(StringUtils.isNotEmpty(oneData.get(9))) { - vo.setUnitNo(oneData.get(9).trim()); - } -// if(StringUtils.isEmpty(oneData.get(10))){ -// index++; -// ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); -// setKeyMistake(oneData, mistake); -// mistake.setMistake("户室不可为空"); -// mistakes.add(mistake); -// continue; -// } - if(StringUtils.isNotEmpty(oneData.get(10))) { - vo.setHouseNo(oneData.get(10).trim()); - } - if(StringUtils.isNotEmpty(oneData.get(11))){ - Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(11)); - if(isOk.equals(-1)){ - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - index++; - setKeyMistake(oneData, mistake); - mistake.setMistake("您填写的是否租住有误"); - mistakes.add(mistake); - continue; - } - vo.setIsRent(isOk); - }else { - vo.setIsRent(PopulHouseUseEnum.getCodeByName("否")); - } - if(StringUtils.isNotEmpty(oneData.get(12))){ - Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(12).trim()); - if(isOk.equals(-1)){ - index++; - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - setKeyMistake(oneData, mistake); - mistake.setMistake("您填写的房屋状态有误"); - mistakes.add(mistake); - continue; - } - vo.setHouseStatus(isOk); - } - if(StringUtils.isNotEmpty(oneData.get(13))){ - Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(13).trim()); - if(isOk.equals(-1)){ - index++; - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - setKeyMistake(oneData, mistake); - mistake.setMistake("您填写的房屋用途有误"); - mistakes.add(mistake); - continue; - } - vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(13).trim())); - } - if(StringUtils.isNotEmpty(oneData.get(14))){ - Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(14)); - if(isOk.equals(-1)){ - index++; - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - setKeyMistake(oneData, mistake); - mistake.setMistake("您填写的管控状态有误"); - mistakes.add(mistake); - continue; - } - vo.setControlStatus(isOk); - } - if(StringUtils.isNotEmpty(oneData.get(15))){ - Integer isOk = PopulOutOrLocalEnum.getCodeByName(oneData.get(15)); - if(isOk.equals(-1)){ - index++; - ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); - setKeyMistake(oneData, mistake); - mistake.setMistake("您填写的本地/外地有误"); - mistakes.add(mistake); - continue; - } - vo.setOutOrLocal(isOk); - }else { - vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地")); - } - if(StringUtils.isNotEmpty(oneData.get(16))){ - vo.setCensusRegister(oneData.get(16).trim()); - } - if(StringUtils.isNotEmpty(oneData.get(17))){ - vo.setRemark(oneData.get(17).trim()); - } - vo.getUserTagStr().add("重点人员"); - for (int i = 18; 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); + int index = 2; + try { + ArrayList<ComMngPopulationKeyExcelVO> voList = Lists.newArrayList(); + // List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>(); + ArrayList<ComMngPopulationKeyMistakeExcelVO> mistakes = Lists.newArrayList(); + for (Map<Integer, String> oneData : list) { + ComMngPopulationKeyExcelVO vo = new ComMngPopulationKeyExcelVO(); + if (StringUtils.isNotEmpty(oneData.get(0))) { + vo.setSerialNumber(oneData.get(0)); + } + // 姓名和身份证都为空,为空户,无需操作,否则就解析年龄,性别,出生年月日 + if (StringUtils.isEmpty(oneData.get(1))) { + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); index++; + setKeyMistake(oneData, mistake); + mistake.setMistake("名字不可为空,请填写姓名"); + mistakes.add(mistake); + continue; } - //客户需要暂时注释,等客户处理完成需要恢复 -// 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<ComMngPopulationKeyExcelVO> newVoList = voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationKeyExcelVO::getDistinctPass)).collect(Collectors.toList()); - log.info("开始进入业务层处理逻辑"); - R r = communityService.listSavePopulationKeyExcelVO(newVoList, communityId); - log.info("业务层处理逻辑完成"); - if (!R.isOk(r)) { - log.info("业务层处理成功"); - List<ComMngPopulationKeyMistakeExcelVO> list = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComMngPopulationKeyMistakeExcelVO.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(key,JSONArray.toJSONString(mistakes),1, TimeUnit.HOURS); - log.info("将错误数据存入redis中成功"); - throw new ServiceException("500", key); - }else{ - log.info("业务层处理逻辑失败"); - if(!mistakes.isEmpty()){ - log.info("业务层处理逻辑失败,将错误数据缓存到redis中"); - valueOperations.set(key,JSONArray.toJSONString(mistakes),1, TimeUnit.HOURS); - log.info("业务层处理逻辑失败,将错误数据缓存到redis中成功"); - throw new ServiceException("500", key); + vo.setName(oneData.get(1)); + if (StringUtils.isEmpty(oneData.get(3))) { + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + index++; + setKeyMistake(oneData, mistake); + mistake.setMistake("身份证号不可为空,请填写身份证"); + mistakes.add(mistake); + continue; + } + + // 判断身份证号码位数 + if (oneData.get(3).length() != 18) { + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + index++; + setKeyMistake(oneData, mistake); + mistake.setMistake("身份证号位数有误,请检查身份证号码是否正确"); + mistakes.add(mistake); + continue; + } + vo.setCardNo(oneData.get(3).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(2))) { + vo.setNation(oneData.get(2)); + } + if (StringUtils.isNotEmpty(oneData.get(4))) { + vo.setPhone(oneData.get(4)); + } + if (StringUtils.isNotEmpty(oneData.get(5))) { + vo.setNativePlace(oneData.get(5)); + } + if (StringUtils.isEmpty(oneData.get(6))) { + index++; + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + setKeyMistake(oneData, mistake); + mistake.setMistake("街路巷不可为空"); + mistakes.add(mistake); + continue; + } + vo.setRoad(oneData.get(6)); + if (StringUtils.isEmpty(oneData.get(7))) { + index++; + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + setKeyMistake(oneData, mistake); + mistake.setMistake("小区号不可为空"); + mistakes.add(mistake); + continue; + } + vo.setDoorNo(oneData.get(7).trim()); + // if(StringUtils.isEmpty(oneData.get(8))){ + // index++; + // ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + // setKeyMistake(oneData, mistake); + // mistake.setMistake("楼排号不可为空"); + // mistakes.add(mistake); + // continue; + // } + if (StringUtils.isNotEmpty(oneData.get(8))) { + vo.setFloor(oneData.get(8).trim()); + } + // if(StringUtils.isEmpty(oneData.get(9))){ + // index++; + // ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + // setKeyMistake(oneData, mistake); + // mistake.setMistake("单元号不可为空"); + // mistakes.add(mistake); + // continue; + // } + if (StringUtils.isNotEmpty(oneData.get(9))) { + vo.setUnitNo(oneData.get(9).trim()); + } + // if(StringUtils.isEmpty(oneData.get(10))){ + // index++; + // ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + // setKeyMistake(oneData, mistake); + // mistake.setMistake("户室不可为空"); + // mistakes.add(mistake); + // continue; + // } + if (StringUtils.isNotEmpty(oneData.get(10))) { + vo.setHouseNo(oneData.get(10).trim()); + } + if (StringUtils.isNotEmpty(oneData.get(11))) { + Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(11)); + if (isOk.equals(-1)) { + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + index++; + setKeyMistake(oneData, mistake); + mistake.setMistake("您填写的是否租住有误"); + mistakes.add(mistake); + continue; + } + vo.setIsRent(isOk); + } else { + vo.setIsRent(PopulHouseUseEnum.getCodeByName("否")); + } + if (StringUtils.isNotEmpty(oneData.get(12))) { + Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(12).trim()); + if (isOk.equals(-1)) { + index++; + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + setKeyMistake(oneData, mistake); + mistake.setMistake("您填写的房屋状态有误"); + mistakes.add(mistake); + continue; + } + vo.setHouseStatus(isOk); + } + if (StringUtils.isNotEmpty(oneData.get(13))) { + Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(13).trim()); + if (isOk.equals(-1)) { + index++; + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + setKeyMistake(oneData, mistake); + mistake.setMistake("您填写的房屋用途有误"); + mistakes.add(mistake); + continue; + } + vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(13).trim())); + } + if (StringUtils.isNotEmpty(oneData.get(14))) { + Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(14)); + if (isOk.equals(-1)) { + index++; + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + setKeyMistake(oneData, mistake); + mistake.setMistake("您填写的管控状态有误"); + mistakes.add(mistake); + continue; + } + vo.setControlStatus(isOk); + } + if (StringUtils.isNotEmpty(oneData.get(15))) { + Integer isOk = PopulOutOrLocalEnum.getCodeByName(oneData.get(15)); + if (isOk.equals(-1)) { + index++; + ComMngPopulationKeyMistakeExcelVO mistake = new ComMngPopulationKeyMistakeExcelVO(); + setKeyMistake(oneData, mistake); + mistake.setMistake("您填写的本地/外地有误"); + mistakes.add(mistake); + continue; + } + vo.setOutOrLocal(isOk); + } else { + vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地")); + } + if (StringUtils.isNotEmpty(oneData.get(16))) { + vo.setCensusRegister(oneData.get(16).trim()); + } + if (StringUtils.isNotEmpty(oneData.get(17))) { + vo.setRemark(oneData.get(17).trim()); + } + vo.getUserTagStr().add("重点人员"); + for (int i = 18; i < headSize; i++) { + if (oneData.get(i) != null && oneData.get(i).equals("是")) { + vo.getUserTagStr().add(headData.get(i).substring(0, headData.get(i).indexOf("("))); } } - } 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"); + // 将重复的数据进行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<ComMngPopulationKeyExcelVO> newVoList = + voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationKeyExcelVO::getDistinctPass)) + .collect(Collectors.toList()); + log.info("开始进入业务层处理逻辑"); + R r = communityService.listSavePopulationKeyExcelVO(newVoList, communityId, userId); + log.info("业务层处理逻辑完成"); + if (!R.isOk(r)) { + log.info("业务层处理成功"); + List<ComMngPopulationKeyMistakeExcelVO> list = + JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComMngPopulationKeyMistakeExcelVO.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(key, JSONArray.toJSONString(mistakes), 1, TimeUnit.HOURS); + log.info("将错误数据存入redis中成功"); + throw new ServiceException("500", key); + } else { + log.info("业务层处理逻辑失败"); + if (!mistakes.isEmpty()) { + log.info("业务层处理逻辑失败,将错误数据缓存到redis中"); + valueOperations.set(key, JSONArray.toJSONString(mistakes), 1, TimeUnit.HOURS); + log.info("业务层处理逻辑失败,将错误数据缓存到redis中成功"); + throw new ServiceException("500", key); + } + } + } 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 setKeyMistake(Map<Integer, String> map, ComMngPopulationKeyMistakeExcelVO vo){ + private void setKeyMistake(Map<Integer, String> map, ComMngPopulationKeyMistakeExcelVO vo) { vo.setSerialNumber(map.get(0)); vo.setName(map.get(1)); vo.setCardNo(map.get(3)); @@ -406,148 +385,103 @@ vo.setRemark(map.get(17)); } - private R mistakeExportPopulation(List<ComMngPopulationMistakeExcelVO> vo) { - //生成动态模板excel通过ftp工具上传到主节点,然后返回模板下载地址 - String ftpUrl = "/mnt/data/web/excel/"; - String name = "实有人口错误数据.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, ComMngPopulationMistakeExcelVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(new CustomSheetWriteHandler()).build(); - WriteSheet writeSheet = EasyExcel.writerSheet("实有人口错误数据").build(); - excelWriter.write(vo, 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(); - } + 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 = "分居"; } - private String convertMarriage(String ma) { + return 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 = "堂兄弟、堂姐妹"; } - 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; - } + return ra; + } } -- Gitblit v1.7.1