springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/Constants.java
@@ -153,6 +153,12 @@ public static final String POPULATION_ERROR_LIST = "POPULATION_ERROR_LIST_"; public static final String DRUG_POPULATION_ERROR_LIST = "DRUG_POPULATION_ERROR_LIST_"; public static final String CORRECT_POPULATION_ERROR_LIST = "CORRECT_POPULATION_ERROR_LIST_"; public static final String Major_POPULATION_ERROR_LIST = "Major_POPULATION_ERROR_LIST_"; /** * 高德地图获取天气url */ springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/listen/ComMngPopulationCorrectExcelListen.java
New file @@ -0,0 +1,577 @@ 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.*; 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.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 ComMngPopulationCorrectExcelListen 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 ComMngPopulationCorrectExcelListen(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 key = Constants.CORRECT_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<ComMngPopulationCorrectExcelVO> voList = Lists.newArrayList(); // List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>(); ArrayList<ComMngPopulationCorrectMistakeExcelVO> mistakes = Lists.newArrayList(); for (Map<Integer, String> oneData : list) { ComMngPopulationCorrectExcelVO vo = new ComMngPopulationCorrectExcelVO(); if (StringUtils.isNotEmpty(oneData.get(0))){ vo.setSerialNumber(oneData.get(0)); } //姓名和身份证都为空,为空户,无需操作,否则就解析年龄,性别,出生年月日 if(StringUtils.isNotEmpty(oneData.get(1)) || StringUtils.isNotEmpty(oneData.get(3))){ if(StringUtils.isEmpty(oneData.get(1))){ ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); index++; setMistake(oneData, mistake); mistake.setMistake("名字不可为空,请填写姓名"); mistakes.add(mistake); continue; } vo.setName(oneData.get(1)); if(StringUtils.isEmpty(oneData.get(3))){ ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); index++; setMistake(oneData, mistake); mistake.setMistake("身份证号不可为空,请填写身份证"); mistakes.add(mistake); continue; } //判断身份证号码位数 if(oneData.get(3).length() != 18){ ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); index++; setMistake(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.isEmpty(oneData.get(5))){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("街路巷不可为空"); mistakes.add(mistake); continue; } vo.setRoad(oneData.get(5)); if(StringUtils.isEmpty(oneData.get(6))){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("小区号不可为空"); mistakes.add(mistake); continue; } vo.setDoorNo(oneData.get(6).trim()); if(StringUtils.isEmpty(oneData.get(7))){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("楼排号不可为空"); mistakes.add(mistake); continue; } vo.setFloor(oneData.get(7).trim()); if(StringUtils.isEmpty(oneData.get(8))){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("单元号不可为空"); mistakes.add(mistake); continue; } vo.setUnitNo(oneData.get(8).trim()); if(StringUtils.isEmpty(oneData.get(9))){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("户室不可为空"); mistakes.add(mistake); continue; } vo.setHouseNo(oneData.get(9).trim()); if(StringUtils.isNotEmpty(oneData.get(10))){ Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(10)); if(isOk.equals(-1)){ ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); index++; setMistake(oneData, mistake); mistake.setMistake("您填写的是否租住有误"); mistakes.add(mistake); continue; } vo.setIsRent(isOk); }else { vo.setIsRent(PopulHouseUseEnum.getCodeByName("否")); } if(StringUtils.isNotEmpty(oneData.get(11))){ Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(11).trim()); if(isOk.equals(-1)){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的房屋状态有误"); mistakes.add(mistake); continue; } vo.setHouseStatus(isOk); } if(StringUtils.isNotEmpty(oneData.get(12))){ Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(12).trim()); if(isOk.equals(-1)){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的房屋用途有误"); mistakes.add(mistake); continue; } vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(12).trim())); } if(StringUtils.isNotEmpty(oneData.get(13))){ Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(13)); if(isOk.equals(-1)){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的管控状态有误"); mistakes.add(mistake); continue; } vo.setControlStatus(isOk); } if(StringUtils.isNotEmpty(oneData.get(14))){ Integer isOk = PopulOutOrLocalEnum.getCodeByName(oneData.get(14)); if(isOk.equals(-1)){ index++; ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的本地/外地有误"); mistakes.add(mistake); continue; } vo.setOutOrLocal(isOk); }else { vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地")); } if(StringUtils.isNotEmpty(oneData.get(15))){ vo.setCensusRegister(oneData.get(15).trim()); } if(StringUtils.isEmpty(oneData.get(16))){ ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); index++; setMistake(oneData, mistake); mistake.setMistake("矫正开始时间不可为空,请填写矫正开始时间"); mistakes.add(mistake); continue; } if(StringUtils.isNotEmpty(oneData.get(16))){ vo.setCorrectBegin(new SimpleDateFormat("yyyy-MM-dd").parse(oneData.get(16))); } if(StringUtils.isNotEmpty(oneData.get(17))){ vo.setCorrectEnd(new SimpleDateFormat("yyyy-MM-dd").parse(oneData.get(17))); } if(StringUtils.isNotEmpty(oneData.get(18))){ vo.setCorrectType(oneData.get(18).trim()); } if(StringUtils.isNotEmpty(oneData.get(19))){ vo.setCharges(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<ComMngPopulationCorrectExcelVO> newVoList = voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationCorrectExcelVO::getDistinctPass)).collect(Collectors.toList()); log.info("开始进入业务层处理逻辑"); R r = communityService.listSavePopulationCorrectExcelVO(newVoList, communityId); log.info("业务层处理逻辑完成"); if (!R.isOk(r)) { log.info("业务层处理成功"); List<ComMngPopulationCorrectMistakeExcelVO> list = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComMngPopulationCorrectMistakeExcelVO.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"); } catch (ParseException e1) { log.info("处理数据时失败2"); e1.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", "导入失败222"); } } private void setMistake(Map<Integer, String> map, ComMngPopulationCorrectMistakeExcelVO vo){ vo.setName(map.get(1)); vo.setCardNo(map.get(3)); vo.setNation(map.get(2)); vo.setPhone(map.get(4)); vo.setRoad(map.get(5)); vo.setDoorNo(map.get(6)); vo.setFloor(map.get(7)); vo.setUnitNo(map.get(8)); vo.setHouseNo(map.get(9)); vo.setIsRent(map.get(10)); vo.setHouseStatus(map.get(11)); vo.setHousePurpose(map.get(12)); vo.setControlStatus(map.get(13)); vo.setOutOrLocal(map.get(14)); vo.setCensusRegister(map.get(15)); vo.setCorrectBegin(map.get(16)); vo.setCorrectEnd(map.get(17)); vo.setCorrectType(map.get(18)); vo.setCharges(map.get(19)); vo.setRemark(map.get(20)); } 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 = "分居"; } 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/ComMngPopulationDrugExcelListen.java
New file @@ -0,0 +1,588 @@ 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.ComMngPopulationDrugExcelVO; import com.panzhihua.common.model.vos.community.ComMngPopulationDrugMistakeExcelVO; import com.panzhihua.common.model.vos.community.ComMngPopulationMistakeExcelVO; import com.panzhihua.common.model.vos.community.ComMngPopulationServeExcelVO; 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.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 ComMngPopulationDrugExcelListen 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 ComMngPopulationDrugExcelListen(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 key = Constants.DRUG_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<ComMngPopulationDrugExcelVO> voList = Lists.newArrayList(); // List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>(); ArrayList<ComMngPopulationDrugMistakeExcelVO> mistakes = Lists.newArrayList(); for (Map<Integer, String> oneData : list) { ComMngPopulationDrugExcelVO vo = new ComMngPopulationDrugExcelVO(); //姓名和身份证都为空,为空户,无需操作,否则就解析年龄,性别,出生年月日 if(StringUtils.isNotEmpty(oneData.get(1)) || StringUtils.isNotEmpty(oneData.get(3))){ if(StringUtils.isEmpty(oneData.get(1))){ ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); index++; setDrugMistake(oneData, mistake); mistake.setMistake("名字不可为空,请填写姓名"); mistakes.add(mistake); continue; } vo.setName(oneData.get(1)); if(StringUtils.isEmpty(oneData.get(3))){ ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); index++; setDrugMistake(oneData, mistake); mistake.setMistake("身份证号不可为空,请填写身份证"); mistakes.add(mistake); continue; } //判断身份证号码位数 if(oneData.get(3).length() != 18){ ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); index++; setDrugMistake(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.isEmpty(oneData.get(5))){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("街路巷不可为空"); mistakes.add(mistake); continue; } vo.setRoad(oneData.get(5)); if(StringUtils.isEmpty(oneData.get(6))){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("小区号不可为空"); mistakes.add(mistake); continue; } vo.setDoorNo(oneData.get(6).trim()); if(StringUtils.isEmpty(oneData.get(7))){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("楼排号不可为空"); mistakes.add(mistake); continue; } vo.setFloor(oneData.get(7).trim()); if(StringUtils.isEmpty(oneData.get(8))){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("单元号不可为空"); mistakes.add(mistake); continue; } vo.setUnitNo(oneData.get(8).trim()); if(StringUtils.isEmpty(oneData.get(9))){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("户室不可为空"); mistakes.add(mistake); continue; } vo.setHouseNo(oneData.get(9).trim()); if(StringUtils.isNotEmpty(oneData.get(10))){ Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(10)); if(isOk.equals(-1)){ ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); index++; setDrugMistake(oneData, mistake); mistake.setMistake("您填写的是否租住有误"); mistakes.add(mistake); continue; } vo.setIsRent(isOk); }else { vo.setIsRent(PopulHouseUseEnum.getCodeByName("否")); } if(StringUtils.isNotEmpty(oneData.get(11))){ Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(11).trim()); if(isOk.equals(-1)){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("您填写的房屋状态有误"); mistakes.add(mistake); continue; } vo.setHouseStatus(isOk); } if(StringUtils.isNotEmpty(oneData.get(12))){ Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(12).trim()); if(isOk.equals(-1)){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("您填写的房屋用途有误"); mistakes.add(mistake); continue; } vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(12).trim())); } if(StringUtils.isNotEmpty(oneData.get(13))){ Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(13)); if(isOk.equals(-1)){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("您填写的管控状态有误"); mistakes.add(mistake); continue; } vo.setControlStatus(isOk); } if(StringUtils.isNotEmpty(oneData.get(14))){ Integer isOk = PopulOutOrLocalEnum.getCodeByName(oneData.get(14)); if(isOk.equals(-1)){ index++; ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); setDrugMistake(oneData, mistake); mistake.setMistake("您填写的本地/外地有误"); mistakes.add(mistake); continue; } vo.setOutOrLocal(isOk); }else { vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地")); } if(StringUtils.isNotEmpty(oneData.get(15))){ vo.setCensusRegister(oneData.get(15).trim()); } if(StringUtils.isNotEmpty(oneData.get(16))){ vo.setRemark(oneData.get(16).trim()); } vo.getUserTagStr().add("吸毒人员"); for (int i = 17; 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<ComMngPopulationDrugExcelVO> newVoList = voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationDrugExcelVO::getDistinctPass)).collect(Collectors.toList()); log.info("开始进入业务层处理逻辑"); R r = communityService.listSavePopulationDrugExcelVO(newVoList, communityId); log.info("业务层处理逻辑完成"); if (!R.isOk(r)) { log.info("业务层处理成功"); List<ComMngPopulationDrugMistakeExcelVO> list = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComMngPopulationDrugMistakeExcelVO.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 setMistake(Map<Integer, String> map, ComMngPopulationMistakeExcelVO vo){ vo.setName(map.get(0)); vo.setCardNo(map.get(1)); vo.setNation(map.get(2)); vo.setPoliticalOutlook(map.get(3)); vo.setIsRent(map.get(4)); vo.setRelation(map.get(5)); vo.setRoad(map.get(6)); vo.setDoorNo(map.get(7)); vo.setFloor(map.get(8)); vo.setUnitNo(map.get(9)); vo.setHouseNo(map.get(10)); vo.setBuildPurpose(map.get(11)); vo.setBuildArea(map.get(12)); vo.setHouseStatus(map.get(13)); vo.setHousePurpose(map.get(14)); vo.setControlStatus(map.get(15)); vo.setPhone(map.get(16)); vo.setNativePlace(map.get(17)); vo.setCultureLevel(map.get(18)); vo.setMarriage(map.get(19)); vo.setHealthy(map.get(20)); vo.setBloodType(map.get(21)); vo.setReligion(map.get(22)); vo.setProfession(map.get(23)); vo.setWorkCompany(map.get(24)); vo.setOutOrLocal(map.get(25)); vo.setCensusRegister(map.get(26)); vo.setResidence(map.get(27)); // vo.setAddress(map.get(28)); vo.setPersonType(map.get(28)); vo.setCountry(map.get(29)); vo.setStringOfDeparture(map.get(30)); vo.setPersonStatus(map.get(31)); vo.setMonthlyIncome(map.get(32)); vo.setFamilyStatus(map.get(33)); vo.setGoalInChina(map.get(34)); vo.setStringOfArrival(map.get(35)); vo.setRemark(map.get(36)); vo.setIdCardPositive(map.get(37)); vo.setIdCardBack(map.get(38)); vo.setHouseHold(map.get(39)); vo.setDeath(map.get(40)); } private void setDrugMistake(Map<Integer, String> map, ComMngPopulationDrugMistakeExcelVO vo){ vo.setName(map.get(1)); vo.setCardNo(map.get(3)); vo.setNation(map.get(2)); vo.setPhone(map.get(4)); vo.setRoad(map.get(5)); vo.setDoorNo(map.get(6)); vo.setFloor(map.get(7)); vo.setUnitNo(map.get(8)); vo.setHouseNo(map.get(9)); vo.setIsRent(map.get(10)); vo.setHouseStatus(map.get(11)); vo.setHousePurpose(map.get(12)); vo.setControlStatus(map.get(13)); vo.setOutOrLocal(map.get(14)); vo.setCensusRegister(map.get(15)); vo.setRemark(map.get(16)); } 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 = "分居"; } 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/ComMngPopulationMajorExcelListen.java
New file @@ -0,0 +1,525 @@ 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.ComMngPopulationMajorExcelVO; import com.panzhihua.common.model.vos.community.ComMngPopulationMajorMistakeExcelVO; import com.panzhihua.common.model.vos.community.ComMngPopulationMistakeExcelVO; 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.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 ComMngPopulationMajorExcelListen 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 ComMngPopulationMajorExcelListen(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 key = Constants.Major_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<ComMngPopulationMajorExcelVO> voList = Lists.newArrayList(); // List<ComMngPopulationImportErrorVO> populationImportErrorVOList = new ArrayList<>(); ArrayList<ComMngPopulationMajorMistakeExcelVO> mistakes = Lists.newArrayList(); for (Map<Integer, String> oneData : list) { ComMngPopulationMajorExcelVO vo = new ComMngPopulationMajorExcelVO(); 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))){ ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); index++; setMistake(oneData, mistake); mistake.setMistake("名字不可为空,请填写姓名"); mistakes.add(mistake); continue; } vo.setName(oneData.get(1)); if(StringUtils.isEmpty(oneData.get(2))){ ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); index++; setMistake(oneData, mistake); mistake.setMistake("身份证号不可为空,请填写身份证"); mistakes.add(mistake); continue; } //判断身份证号码位数 if(oneData.get(2).length() != 18){ ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); index++; setMistake(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.isEmpty(oneData.get(3))){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("街路巷不可为空"); mistakes.add(mistake); continue; } vo.setRoad(oneData.get(3)); if(StringUtils.isEmpty(oneData.get(4))){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("小区号不可为空"); mistakes.add(mistake); continue; } vo.setDoorNo(oneData.get(4).trim()); if(StringUtils.isEmpty(oneData.get(5))){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("楼排号不可为空"); mistakes.add(mistake); continue; } vo.setFloor(oneData.get(5).trim()); if(StringUtils.isEmpty(oneData.get(6))){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("单元号不可为空"); mistakes.add(mistake); continue; } vo.setUnitNo(oneData.get(6).trim()); if(StringUtils.isEmpty(oneData.get(7))){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("户室不可为空"); mistakes.add(mistake); continue; } vo.setHouseNo(oneData.get(7).trim()); if(StringUtils.isNotEmpty(oneData.get(8))){ Integer isOk = PopulHouseUseEnum.getCodeByName(oneData.get(8)); if(isOk.equals(-1)){ ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); index++; setMistake(oneData, mistake); mistake.setMistake("您填写的是否租住有误"); mistakes.add(mistake); continue; } vo.setIsRent(isOk); }else { vo.setIsRent(PopulHouseUseEnum.getCodeByName("否")); } if(StringUtils.isNotEmpty(oneData.get(9))){ Integer isOk = PopulHouseStatusEnum.getCodeByName(oneData.get(9).trim()); if(isOk.equals(-1)){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的房屋状态有误"); mistakes.add(mistake); continue; } vo.setHouseStatus(isOk); } if(StringUtils.isNotEmpty(oneData.get(10))){ Integer isOk = PopulHousePurposeEnum.getCodeByName(oneData.get(10).trim()); if(isOk.equals(-1)){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的房屋用途有误"); mistakes.add(mistake); continue; } vo.setHousePurpose(PopulHousePurposeEnum.getCodeByName(oneData.get(10).trim())); } if(StringUtils.isNotEmpty(oneData.get(11))){ Integer isOk = PopulHouseControlStatusEnum.getCodeByName(oneData.get(11)); if(isOk.equals(-1)){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的管控状态有误"); mistakes.add(mistake); continue; } vo.setControlStatus(isOk); } if(StringUtils.isNotEmpty(oneData.get(12))){ Integer isOk = PopulOutOrLocalEnum.getCodeByName(oneData.get(12)); if(isOk.equals(-1)){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的本地/外地有误"); mistakes.add(mistake); continue; } vo.setOutOrLocal(isOk); }else { vo.setOutOrLocal(PopulOutOrLocalEnum.getCodeByName("本地")); } if(StringUtils.isNotEmpty(oneData.get(13))){ vo.setCensusRegister(oneData.get(13).trim()); } if(StringUtils.isEmpty(oneData.get(14))){ Integer isOk = PopulCultureLevelEnum.getCodeByName(oneData.get(14)); if(isOk.equals(-1)){ index++; ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); setMistake(oneData, mistake); mistake.setMistake("您填写的文化程度有误"); mistakes.add(mistake); continue; } vo.setOutOrLocal(isOk); } if(StringUtils.isNotEmpty(oneData.get(15))){ vo.setEconomicCondition(oneData.get(15).trim()); } if(StringUtils.isNotEmpty(oneData.get(16))){ vo.setGuarDian(oneData.get(16).trim()); } if(StringUtils.isNotEmpty(oneData.get(17))){ vo.setGuarDianPhone(oneData.get(17).trim()); } if(StringUtils.isNotEmpty(oneData.get(18))){ vo.setPatientRelation(oneData.get(18).trim()); } if(StringUtils.isNotEmpty(oneData.get(19))){ vo.setDiagnose(oneData.get(19).trim()); } if(StringUtils.isNotEmpty(oneData.get(20))){ vo.setOther(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<ComMngPopulationMajorExcelVO> newVoList = voList.stream().filter(ListUtils.distinctByKey(ComMngPopulationMajorExcelVO::getDistinctPass)).collect(Collectors.toList()); log.info("开始进入业务层处理逻辑"); R r = communityService.listSavePopulationMajorExcelVO(newVoList, communityId); log.info("业务层处理逻辑完成"); if (!R.isOk(r)) { log.info("业务层处理成功"); List<ComMngPopulationMajorMistakeExcelVO> list = JSONArray.parseArray(JSONArray.toJSONString(r.getData()), ComMngPopulationMajorMistakeExcelVO.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 setMistake(Map<Integer, String> map, ComMngPopulationMajorMistakeExcelVO vo){ vo.setName(map.get(1)); vo.setCardNo(map.get(2)); vo.setRoad(map.get(3)); vo.setDoorNo(map.get(4)); vo.setFloor(map.get(5)); vo.setUnitNo(map.get(6)); vo.setHouseNo(map.get(7)); vo.setIsRent(map.get(8)); vo.setHouseStatus(map.get(9)); vo.setHousePurpose(map.get(10)); vo.setControlStatus(map.get(11)); vo.setOutOrLocal(map.get(12)); vo.setCensusRegister(map.get(13)); vo.setCultureLevel(map.get(14)); vo.setEconomicCondition(map.get(15)); vo.setGuarDian(map.get(16)); vo.setGuarDianPhone(map.get(17)); vo.setPatientRelation(map.get(18)); vo.setDiagnose(map.get(19)); vo.setOther(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/ComSwRotaExcelListen.java
@@ -36,6 +36,9 @@ @Override public void invoke(ComSwRotaExcelVO comSwRotaExcelVO, AnalysisContext analysisContext) { list.add(comSwRotaExcelVO); if (list.size() == 0) { throw new ServiceException("500", "导入数据为空!"); } // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM if(list.size() >= BATCH_COUNT){ log.info("excel导入数据【{}】", JSONObject.toJSONString(list)); @@ -51,6 +54,9 @@ @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { log.info("excel导入数据【{}】", JSONObject.toJSONString(list)); if (list.size() == 0) { throw new ServiceException("500", "导入数据为空!"); } R r = this.communityService.listSaveSwRotaExcelVO(list,this.communityId);//确保最后遗留的数据保存在数据库中 if (!R.isOk(r)) { throw new ServiceException(r.getMsg()); springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationCorrectExcelVO.java
New file @@ -0,0 +1,117 @@ 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 ComMngPopulationCorrectExcelVO implements Serializable { @ExcelProperty(value = "序号", index = 0) private String serialNumber; @ExcelProperty(value = "姓名", index = 1) private String name; @ExcelProperty(value = "身份证号码", index = 3) @EncryptDecryptField private String cardNo; @ExcelProperty(value = "民族", index = 2) private String nation; @ExcelProperty(value = "联系电话", index = 4) private String phone; @ExcelProperty(value = "是否租住", index = 10) private Integer isRent; @ExcelProperty(value = "街/路/巷", index = 5) private String road; @ExcelProperty(value = "小区号", index = 6) private String doorNo; @ExcelProperty(value = "楼排号", index = 7) private String floor; @ExcelProperty(value = "单元号", index = 8) private String unitNo; @ExcelProperty(value = "户室(房间号)", index = 9) private String houseNo; @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 11) private Integer houseStatus; @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 12) private Integer housePurpose; @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 13) private Integer controlStatus; @ExcelProperty(value = "外地/本地(1.本地 2.外地)", index = 14) private Integer outOrLocal; @ExcelProperty(value = "户口所在地", index = 15) private String censusRegister; @ExcelProperty(value = "矫正开始时间", index = 16) private Date correctBegin; @ExcelProperty(value = "矫正结束时间", index = 17) private Date correctEnd; @ExcelProperty(value = "矫正类型", index = 18) private String correctType; @ExcelProperty(value = "罪名", index = 19) private String charges; @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/ComMngPopulationCorrectMistakeExcelVO.java
New file @@ -0,0 +1,84 @@ package com.panzhihua.common.model.vos.community; import com.alibaba.excel.annotation.ExcelProperty; import com.panzhihua.common.model.helper.encrypt.EncryptDecryptClass; import com.panzhihua.common.model.helper.encrypt.EncryptDecryptField; import lombok.Data; import java.io.Serializable; /** * @description: 批量导入社区矫正人员 * @author: txb */ @Data @EncryptDecryptClass public class ComMngPopulationCorrectMistakeExcelVO implements Serializable { @ExcelProperty(value = "序号", index = 0) private String serialNumber; @ExcelProperty(value = "姓名", index = 1) private String name; @ExcelProperty(value = "身份证号码", index = 3) @EncryptDecryptField private String cardNo; @ExcelProperty(value = "民族", index = 2) private String nation; @ExcelProperty(value = "联系电话", index = 4) private String phone; @ExcelProperty(value = "是否租住", index = 10) private String isRent; @ExcelProperty(value = "街/路/巷", index = 5) private String road; @ExcelProperty(value = "小区号", index = 6) private String doorNo; @ExcelProperty(value = "楼排号", index = 7) private String floor; @ExcelProperty(value = "单元号", index = 8) private String unitNo; @ExcelProperty(value = "户室(房间号)", index = 9) private String houseNo; @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 11) private String houseStatus; @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 12) private String housePurpose; @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 13) private String controlStatus; @ExcelProperty(value = "外地/本地(1.本地 2.外地)", index = 14) private String outOrLocal; @ExcelProperty(value = "户口所在地", index = 15) private String censusRegister; @ExcelProperty(value = "矫正开始时间", index = 16) private String correctBegin; @ExcelProperty(value = "矫正结束时间", index = 17) private String correctEnd; @ExcelProperty(value = "矫正类型", index = 18) private String correctType; @ExcelProperty(value = "罪名", index = 19) private String charges; @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/ComMngPopulationCultExcelVO.java
New file @@ -0,0 +1,111 @@ 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 ComMngPopulationCultExcelVO implements Serializable { @ExcelProperty(value = "姓名", index = 1) private String name; @ExcelProperty(value = "身份证号码", index = 2) @EncryptDecryptField private String cardNo; @ExcelProperty(value = "民族", index = 3) private String nation; @ExcelProperty(value = "职业", index = 4) private String profession; @ExcelProperty(value = "婚姻状况(1.未婚 2.已婚 3.离异 4.丧偶 5.分居 6.其他)", index = 5) private Integer marriage; @ExcelProperty(value = "文化程度(1.小学 2.初中 3.高中 4.中专 5.大专 6.本科 7.硕士 8.博士 9.其他)", index = 6) private Integer cultureLevel; @ExcelProperty(value = "政治面貌", index = 7) private Integer politicalOutlook; @ExcelProperty(value = "街/路/巷", index = 8) private String road; @ExcelProperty(value = "小区号", index = 9) private String doorNo; @ExcelProperty(value = "楼排号", index = 10) private String floor; @ExcelProperty(value = "单元号", index = 11) private String unitNo; @ExcelProperty(value = "户室(房间号)", index = 12) private String houseNo; @ExcelProperty(value = "是否租住", index = 13) private Integer isRent; @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 14) private Integer houseStatus; @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 15) private Integer housePurpose; @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 16) private Integer controlStatus; @ExcelProperty(value = "外地/本地(1.本地 2.外地)", index = 17) private Integer outOrLocal; @ExcelProperty(value = "户口所在地", index = 18) private String censusRegister; @ExcelProperty(value = "邪教名称", index = 19) private String cultName; @ExcelProperty(value = "基本情况", index = 20) private String basicSituation; @ExcelProperty(value = "备注", index = 21) 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; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationDrugExcelVO.java
New file @@ -0,0 +1,102 @@ 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 ComMngPopulationDrugExcelVO implements Serializable { @ExcelProperty(value = "姓名", index = 1) private String name; @ExcelProperty(value = "身份证号码", index = 3) @EncryptDecryptField private String cardNo; @ExcelProperty(value = "民族", index = 2) private String nation; @ExcelProperty(value = "联系电话", index = 4) private String phone; @ExcelProperty(value = "是否租住", index = 10) private Integer isRent; @ExcelProperty(value = "街/路/巷", index = 5) private String road; @ExcelProperty(value = "小区号", index = 6) private String doorNo; @ExcelProperty(value = "楼排号", index = 7) private String floor; @ExcelProperty(value = "单元号", index = 8) private String unitNo; @ExcelProperty(value = "户室(房间号)", index = 9) private String houseNo; @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 11) private Integer houseStatus; @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 12) private Integer housePurpose; @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 13) private Integer controlStatus; @ExcelProperty(value = "外地/本地(1.本地 2.外地)", index = 14) private Integer outOrLocal; @ExcelProperty(value = "户口所在地", index = 15) private String censusRegister; @ExcelProperty(value = "备注", index = 16) 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/ComMngPopulationDrugMistakeExcelVO.java
New file @@ -0,0 +1,71 @@ 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 ComMngPopulationDrugMistakeExcelVO implements Serializable { @ExcelProperty(value = "姓名", index = 0) private String name; @ExcelProperty(value = "身份证号码", index = 2) @EncryptDecryptField private String cardNo; @ExcelProperty(value = "民族", index = 1) private String nation; @ExcelProperty(value = "联系电话", index = 3) private String phone; @ExcelProperty(value = "是否租住", index = 9) private String isRent; @ExcelProperty(value = "街/路/巷", index = 4) private String road; @ExcelProperty(value = "小区号", index = 5) private String doorNo; @ExcelProperty(value = "楼排号", index = 6) private String floor; @ExcelProperty(value = "单元号", index = 7) private String unitNo; @ExcelProperty(value = "户室(房间号)", index = 8) private String houseNo; @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 10) private String houseStatus; @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 11) private String housePurpose; @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 12) private String controlStatus; @ExcelProperty(value = "外地/本地(1.本地 2.外地)", index = 13) private String outOrLocal; @ExcelProperty(value = "户口所在地", index = 14) private String censusRegister; @ExcelProperty(value = "备注", index = 15) private String remark; @ExcelProperty(value = "错误信息", index = 16) private String mistake; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationMajorExcelVO.java
New file @@ -0,0 +1,117 @@ 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 ComMngPopulationMajorExcelVO 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 road; @ExcelProperty(value = "小区号", index = 4) private String doorNo; @ExcelProperty(value = "楼排号", index = 5) private String floor; @ExcelProperty(value = "单元号", index = 6) private String unitNo; @ExcelProperty(value = "户室(房间号)", index = 7) private String houseNo; @ExcelProperty(value = "是否租住", index = 8) private Integer isRent; @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 9) private Integer houseStatus; @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 10) private Integer housePurpose; @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 11) private Integer controlStatus; @ExcelProperty(value = "外地/本地(1.本地 2.外地)", index = 12) private Integer outOrLocal; @ExcelProperty(value = "户口所在地", index = 13) private String censusRegister; @ExcelProperty(value = "文化程度(1.小学 2.初中 3.高中 4.中专 5.大专 6.本科 7.硕士 8.博士 9.其他)", index = 14) private Integer cultureLevel; @ExcelProperty(value = "经济状况", index = 15) private String economicCondition; @ExcelProperty(value = "监护人", index = 16) private String guarDian; @ExcelProperty(value = "监护人联系电话", index = 17) private String guarDianPhone; @ExcelProperty(value = "与患者关系", index = 18) private String patientRelation; @ExcelProperty(value = "目前诊断", index = 19) private String diagnose; @ExcelProperty(value = "其他", index = 20) private String other; /** * 去重字段,使用(姓名+身份证号+街路巷+小区号+楼牌号+单元号+户室)组合字段进行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/ComMngPopulationMajorMistakeExcelVO.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 ComMngPopulationMajorMistakeExcelVO 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 road; @ExcelProperty(value = "小区号", index = 4) private String doorNo; @ExcelProperty(value = "楼排号", index = 5) private String floor; @ExcelProperty(value = "单元号", index = 6) private String unitNo; @ExcelProperty(value = "户室(房间号)", index = 7) private String houseNo; @ExcelProperty(value = "是否租住", index = 8) private String isRent; @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 9) private String houseStatus; @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 10) private String housePurpose; @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 11) private String controlStatus; @ExcelProperty(value = "外地/本地(1.本地 2.外地)", index = 12) private String outOrLocal; @ExcelProperty(value = "户口所在地", index = 13) private String censusRegister; @ExcelProperty(value = "文化程度(1.小学 2.初中 3.高中 4.中专 5.大专 6.本科 7.硕士 8.博士 9.其他)", index = 14) private String cultureLevel; @ExcelProperty(value = "经济状况", index = 15) private String economicCondition; @ExcelProperty(value = "监护人", index = 16) private String guarDian; @ExcelProperty(value = "监护人联系电话", index = 17) private String guarDianPhone; @ExcelProperty(value = "与患者关系", index = 18) private String patientRelation; @ExcelProperty(value = "目前诊断", index = 19) private String diagnose; @ExcelProperty(value = "其他", index = 20) private String other; @ExcelProperty(value = "错误信息", index = 16) private String mistake; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComMngPopulationRehabilitationExcelVO.java
New file @@ -0,0 +1,109 @@ 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 ComMngPopulationRehabilitationExcelVO implements Serializable { @ExcelProperty(value = "姓名", index = 1) private String name; @ExcelProperty(value = "民族", index = 2) private String nation; @ExcelProperty(value = "身份证号码", index = 3) @EncryptDecryptField private String cardNo; @ExcelProperty(value = "联系电话", index = 4) private String phone; @ExcelProperty(value = "籍贯", index = 5) private String nativePlace; @ExcelProperty(value = "街/路/巷", index = 6) private String road; @ExcelProperty(value = "小区号", index = 7) private String doorNo; @ExcelProperty(value = "楼排号", index = 8) private String floor; @ExcelProperty(value = "单元号", index = 9) private String unitNo; @ExcelProperty(value = "户室(房间号)", index = 10) private String houseNo; @ExcelProperty(value = "是否租住", index = 11) private Integer isRent; @ExcelProperty(value = "房屋状态(1.自住 2.租住 3.其他)", index = 12) private Integer houseStatus; @ExcelProperty(value = "房屋用途(1.住宅 2.公寓 3.宿舍 4.仓库 5.其他)", index = 13) private Integer housePurpose; @ExcelProperty(value = "管控状态(1.常规 2.关注 3.管控)", index = 14) private Integer controlStatus; @ExcelProperty(value = "外地/本地(1.本地 2.外地)", index = 15) private Integer outOrLocal; @ExcelProperty(value = "户口所在地", index = 16) private String censusRegister; @ExcelProperty(value = "主要亲属", index = 17) private String mainRelatives; @ExcelProperty(value = "与人员关系", index = 18) private String patientRelation; @ExcelProperty(value = "列管原因及类型", index = 19) private String rehabReasonAndType; @ExcelProperty(value = "是否列管", index = 20) private Integer isRehab; @ExcelProperty(value = "备注", index = 21) 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; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwDangerReportVO.java
@@ -107,7 +107,7 @@ * 隐患名称 */ @ApiModelProperty("隐患名称") private String dagerName; private String dangerName; /** * 排查时间 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/community/ComSwPatrolRecordVO.java
@@ -218,6 +218,9 @@ @JsonSerialize(using = ToStringSerializer.class) private Long serviceId; @ApiModelProperty("隐患or安全记录(1.隐患 2.安全记录)") private Integer dangerOrRecord; /** * 巡查类型 */ springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -1703,6 +1703,36 @@ R listSavePopulationServeExcelVO(@RequestBody List<ComMngPopulationServeExcelVO> list, @RequestParam(value = "communityId") Long communityId); /** * 批量导入吸毒人员 * * @param list 吸毒人员数据 * @param communityId 社区id * @return 导入结果 */ @PostMapping("/common/data/population/importDrug") R listSavePopulationDrugExcelVO(@RequestBody List<ComMngPopulationDrugExcelVO> list, @RequestParam(value = "communityId") Long communityId); /** * 批量导入社区矫正人员 * * @param list 社区矫正人员数据 * @param communityId 社区id * @return 导入结果 */ @PostMapping("/common/data/population/importCorrect") R listSavePopulationCorrectExcelVO(@RequestBody List<ComMngPopulationCorrectExcelVO> list, @RequestParam(value = "communityId") Long communityId); /** * 批量导入重精人员 * * @param list 重精人员数据 * @param communityId 社区id * @return 导入结果 */ @PostMapping("/common/data/population/importMajor") R listSavePopulationMajorExcelVO(@RequestBody List<ComMngPopulationMajorExcelVO> list, @RequestParam(value = "communityId") Long communityId); /** * 确认导入实有人口(有则更新,无则新建) * * @param list 用户信息 springcloud_k8s_panzhihuazhihuishequ/community_backstage/src/main/java/com/panzhihua/community_backstage/api/PopulationApi.java
@@ -9,8 +9,7 @@ import com.panzhihua.common.constants.Constants; import com.panzhihua.common.controller.BaseController; import com.panzhihua.common.enums.*; import com.panzhihua.common.listen.ComMngPopulationConfirmServeExcelListen; import com.panzhihua.common.listen.ComMngPopulationServeExcelListen; import com.panzhihua.common.listen.*; import com.panzhihua.common.model.dtos.community.*; import com.panzhihua.common.model.vos.community.ComExServicemanVO; import com.panzhihua.common.model.vos.LoginUserInfoVO; @@ -98,6 +97,60 @@ inputStream = file.getInputStream(); ComMngPopulationServeExcelListen comMngPopulationServeExcelListen = new ComMngPopulationServeExcelListen(communityService, this.getCommunityId(),userName,password,host,port,excelUrl,stringRedisTemplate); EasyExcel.read(inputStream, null, comMngPopulationServeExcelListen).sheet().doRead(); } catch (IOException e) { log.error("导入模板失败【{}】", e.getMessage()); e.printStackTrace(); } return R.ok(); } @ApiOperation(value = "excel导入吸毒人员") @PostMapping(value = "/serve/importDrug", consumes = "multipart/*", headers = "content-type=multipart/form-date") public R importDrug(@RequestParam MultipartFile file, HttpServletRequest request) { //获取文件名 String fileName = file.getOriginalFilename(); log.info("传入文件名字【{}】", fileName); InputStream inputStream = null; try { inputStream = file.getInputStream(); ComMngPopulationDrugExcelListen comMngPopulationDrugExcelListen = new ComMngPopulationDrugExcelListen(communityService, this.getCommunityId(),userName,password,host,port,excelUrl,stringRedisTemplate); EasyExcel.read(inputStream, null, comMngPopulationDrugExcelListen).sheet().doRead(); } catch (IOException e) { log.error("导入模板失败【{}】", e.getMessage()); e.printStackTrace(); } return R.ok(); } @ApiOperation(value = "excel导入社区矫正人员") @PostMapping(value = "/serve/importCorrect", consumes = "multipart/*", headers = "content-type=multipart/form-date") public R importCorrect(@RequestParam MultipartFile file, HttpServletRequest request) { //获取文件名 String fileName = file.getOriginalFilename(); log.info("传入文件名字【{}】", fileName); InputStream inputStream = null; try { inputStream = file.getInputStream(); ComMngPopulationCorrectExcelListen comMngPopulationCorrectExcelListen = new ComMngPopulationCorrectExcelListen(communityService, this.getCommunityId(),userName,password,host,port,excelUrl,stringRedisTemplate); EasyExcel.read(inputStream, null, comMngPopulationCorrectExcelListen).sheet().doRead(); } catch (IOException e) { log.error("导入模板失败【{}】", e.getMessage()); e.printStackTrace(); } return R.ok(); } @ApiOperation(value = "excel导入重精人员") @PostMapping(value = "/serve/importMajor", consumes = "multipart/*", headers = "content-type=multipart/form-date") public R importMajor(@RequestParam MultipartFile file, HttpServletRequest request) { //获取文件名 String fileName = file.getOriginalFilename(); log.info("传入文件名字【{}】", fileName); InputStream inputStream = null; try { inputStream = file.getInputStream(); ComMngPopulationMajorExcelListen comMngPopulationMajorExcelListen = new ComMngPopulationMajorExcelListen(communityService, this.getCommunityId(),userName,password,host,port,excelUrl,stringRedisTemplate); EasyExcel.read(inputStream, null, comMngPopulationMajorExcelListen).sheet().doRead(); } catch (IOException e) { log.error("导入模板失败【{}】", e.getMessage()); e.printStackTrace(); @@ -1337,8 +1390,6 @@ head16.add("户口所在地"); List<String> head17 = new ArrayList<String>(); head17.add("备注"); List<String> head18 = new ArrayList<String>(); head18.add("*为必填项,默认为否"); list.add(head0); list.add(head1); list.add(head2); @@ -1357,7 +1408,6 @@ list.add(head15); list.add(head16); list.add(head17); list.add(head18); return list; } @@ -1410,8 +1460,6 @@ head21.add("罪名"); List<String> head22 = new ArrayList<String>(); head22.add("备注"); List<String> head23 = new ArrayList<String>(); head23.add("*为必填项,默认为否"); list.add(head0); list.add(head1); list.add(head2); @@ -1435,7 +1483,6 @@ list.add(head20); list.add(head21); list.add(head22); list.add(head23); return list; } @@ -1566,8 +1613,6 @@ head60.add("填表人"); List<String> head61 = new ArrayList<String>(); head61.add("填表人联系电话"); List<String> head62 = new ArrayList<String>(); head62.add("*为必填项,默认为否"); list.add(head0); list.add(head1); list.add(head2); @@ -1630,7 +1675,6 @@ list.add(head59); list.add(head60); list.add(head61); list.add(head62); return list; } @@ -1679,8 +1723,6 @@ head19.add("户口所在地"); List<String> head20 = new ArrayList<String>(); head20.add("备注"); List<String> head21 = new ArrayList<String>(); head21.add("*为必填项,默认为否"); list.add(head0); list.add(head1); list.add(head2); @@ -1702,7 +1744,6 @@ list.add(head18); list.add(head19); list.add(head20); list.add(head21); return list; } @@ -1799,8 +1840,6 @@ head43.add("申请理由"); List<String> head44 = new ArrayList<String>(); head44.add("审核意见"); List<String> head45 = new ArrayList<String>(); head45.add("*为必填项,默认为否"); list.add(head0); list.add(head1); list.add(head2); @@ -1846,7 +1885,6 @@ list.add(head42); list.add(head43); list.add(head44); list.add(head45); return list; } @@ -2108,4 +2146,172 @@ return R.fail(); } } @ApiOperation(value = "下载导入失败吸毒人员数据") @PostMapping("/download/error/Drugpopulation") public R downloadErrorDrugPopulation(@RequestParam(value = "key") String key) { List<ComMngPopulationDrugMistakeExcelVO> 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,ComMngPopulationDrugMistakeExcelVO.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, ComMngPopulationDrugMistakeExcelVO.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/Correctpopulation") public R downloadErrorCorrectPopulation(@RequestParam(value = "key") String key) { List<ComMngPopulationCorrectMistakeExcelVO> 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,ComMngPopulationCorrectMistakeExcelVO.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, ComMngPopulationCorrectMistakeExcelVO.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/Majorpopulation") public R downloadErrorMajorPopulation(@RequestParam(value = "key") String key) { List<ComMngPopulationMajorMistakeExcelVO> 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,ComMngPopulationMajorMistakeExcelVO.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, ComMngPopulationMajorMistakeExcelVO.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
@@ -330,6 +330,45 @@ } /** * 批量导入吸毒人员 * * @param list 吸毒人员数据 * @param communityId 社区id * @return 导入结果 */ @PostMapping("population/importDrug") @Transactional(rollbackFor = Exception.class) public R listSavePopulationDrugExcelVO(@RequestBody List<ComMngPopulationDrugExcelVO> list, @RequestParam(value = "communityId") Long communityId){ return comMngPopulationService.listSaveDrugPopulation(list, communityId); } /** * 批量导入社区矫正人员 * * @param list 社区矫正人员数据 * @param communityId 社区id * @return 导入结果 */ @PostMapping("population/importCorrect") @Transactional(rollbackFor = Exception.class) public R listSavePopulationCorrectExcelVO(@RequestBody List<ComMngPopulationCorrectExcelVO> list, @RequestParam(value = "communityId") Long communityId){ return comMngPopulationService.listSaveCorrectPopulation(list, communityId); } /** * 批量导入重精人员 * * @param list 重精人员数据 * @param communityId 社区id * @return 导入结果 */ @Transactional(rollbackFor = Exception.class) @PostMapping("population/importMajor") public R listSavePopulationMajorExcelVO(@RequestBody List<ComMngPopulationMajorExcelVO> list, @RequestParam(value = "communityId") Long communityId){ return comMngPopulationService.listSaveMajorPopulation(list, communityId); } /** * 确认导入实有人口(有则更新,无则新建) * * @param list 用户信息 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/DictionaryApi.java
@@ -11,7 +11,6 @@ import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; import javax.validation.Valid; import java.util.List; /** 字典 @@ -34,7 +33,7 @@ * @date 2021/6/10 17:00 */ @PostMapping("/insertDiction") R insertDiction(@RequestBody @Valid DictionaryVO dictionaryVO, @ApiIgnore BindingResult results){ R insertDiction(@RequestBody DictionaryVO dictionaryVO, @ApiIgnore BindingResult results){ if (results.hasErrors()) { return R.fail(results.getFieldError().getDefaultMessage()); } @@ -48,7 +47,7 @@ * @date 2021/6/10 17:00 */ @PostMapping("/insertDictionItem") R insertDictionItem(@RequestBody @Valid BcDictionaryVO dictionaryVO, @ApiIgnore BindingResult results){ R insertDictionItem(@RequestBody BcDictionaryVO dictionaryVO, @ApiIgnore BindingResult results){ if (results.hasErrors()) { return R.fail(results.getFieldError().getDefaultMessage()); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComMngPopulationService.java
@@ -15,12 +15,11 @@ import com.panzhihua.common.model.dtos.grid.admin.PageComMngVillagePopulationDTO; import com.panzhihua.common.model.dtos.user.PageInputUserDTO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComMngPopulationServeExcelVO; import com.panzhihua.common.model.vos.community.ComMngPopulationVO; import com.panzhihua.common.model.vos.community.EditComMngPopulationVO; import com.panzhihua.common.model.vos.community.*; import com.panzhihua.common.model.vos.user.ComMngTagVO; import com.panzhihua.common.model.vos.user.UserElectronicFileVO; import com.panzhihua.service_community.model.dos.ComMngPopulationDO; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -83,6 +82,33 @@ R listSavePopulation(List<ComMngPopulationServeExcelVO> list, Long communityId); /** * 导入吸毒人员 * @param list * @param communityId * @return */ R listSaveDrugPopulation(List<ComMngPopulationDrugExcelVO> list, Long communityId); /** * 批量导入社区矫正人员 * * @param list 社区矫正人员数据 * @param communityId 社区id * @return 导入结果 */ R listSaveCorrectPopulation(List<ComMngPopulationCorrectExcelVO> list, Long communityId); /** * 批量导入重精人员 * * @param list 重精人员数据 * @param communityId 社区id * @return 导入结果 */ R listSaveMajorPopulation(List<ComMngPopulationMajorExcelVO> list, Long communityId); /** * 确认导入实有人口(有则更新,无则新建) * * @param list 用户信息 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComMngPopulationServiceImpl.java
@@ -562,7 +562,679 @@ return R.ok(mistakes); } @Override @Transactional(rollbackFor = Exception.class) public R listSaveDrugPopulation(List<ComMngPopulationDrugExcelVO> 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<ComMngPopulationDrugMistakeExcelVO> 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 (ComMngPopulationDrugExcelVO 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{ ComMngPopulationDrugMistakeExcelVO mistake = new ComMngPopulationDrugMistakeExcelVO(); BeanUtils.copyProperties(vo,mistake); setDrugMistake(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 = saveDrugPopulationHouse(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 = updateDrugPopulationDO(vo,populationDO,labelList); updateList.add(updatePopulationDO); }else{ //不存在实有人口,则新增 populationDO = saveDrugPopulationDO(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 listSaveCorrectPopulation(List<ComMngPopulationCorrectExcelVO> 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<ComMngPopulationCorrectMistakeExcelVO> 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 (ComMngPopulationCorrectExcelVO 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{ ComMngPopulationCorrectMistakeExcelVO mistake = new ComMngPopulationCorrectMistakeExcelVO(); BeanUtils.copyProperties(vo,mistake); setCorrectMistake(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 = saveCorrectPopulationHouse(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 = updateCorrectPopulationDO(vo,populationDO,labelList); updateList.add(updatePopulationDO); }else{ //不存在实有人口,则新增 populationDO = saveCorrectPopulationDO(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 public R listSaveMajorPopulation(List<ComMngPopulationMajorExcelVO> 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<ComMngPopulationMajorMistakeExcelVO> 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 (ComMngPopulationMajorExcelVO 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{ ComMngPopulationMajorMistakeExcelVO mistake = new ComMngPopulationMajorMistakeExcelVO(); BeanUtils.copyProperties(vo,mistake); setMajorMistake(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 = saveMajorPopulationHouse(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 = updateMajorPopulationDO(vo,populationDO,labelList); updateList.add(updatePopulationDO); }else{ //不存在实有人口,则新增 populationDO = saveMajorPopulationDO(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); 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 updateDrugPopulationDO(ComMngPopulationDrugExcelVO 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 updateCorrectPopulationDO(ComMngPopulationCorrectExcelVO 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 updateMajorPopulationDO(ComMngPopulationMajorExcelVO vo, ComMngPopulationDO populationDO,List<String> labelList){ BeanUtils.copyProperties(vo, populationDO); List<String> userTag = vo.getUserTagStr().stream().map(userTagStr -> userTagStr.split("\\(")[0]).collect(Collectors.toList()); //如果导入数据标签中有当前社区标签列表中不包含的标签,则删除 @@ -623,6 +1295,102 @@ return populationDO; } private ComMngPopulationDO saveDrugPopulationDO(ComMngPopulationDrugExcelVO 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 saveCorrectPopulationDO(ComMngPopulationCorrectExcelVO 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 saveMajorPopulationDO(ComMngPopulationMajorExcelVO 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 ComMngPopulationHouseDO savePopulationHouse(ComMngPopulationServeExcelVO vo, ComMngVillageDO comMngVillageDO, Long communityId,StringBuilder areaPath, String actName) { //查询该房屋未建立,执行建立房屋信息 ComMngPopulationHouseDO populationHouseDO = new ComMngPopulationHouseDO(); @@ -647,6 +1415,129 @@ 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 saveDrugPopulationHouse(ComMngPopulationDrugExcelVO 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 saveCorrectPopulationHouse(ComMngPopulationCorrectExcelVO 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 saveMajorPopulationHouse(ComMngPopulationMajorExcelVO 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()); @@ -2002,6 +2893,51 @@ mvo.setDeath(PopulOutOrLocalEnum.getCnDescByName(vo.getDeath())); } private void setDrugMistake(ComMngPopulationDrugMistakeExcelVO mvo, ComMngPopulationDrugExcelVO vo){ // mvo.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCnDescByName(vo.getPoliticalOutlook())); mvo.setIsRent(PopulHouseUseEnum.getCnDescByName(vo.getIsRent())); // mvo.setRelation(PopulRelationEnum.getCnDescByName(vo.getRelation())); 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.setResidence(PopulRelationEnum.getCnDescByName(vo.getResidence())); // mvo.setPersonType(PopulPersonTypeEnum.getCnDescByName(vo.getPersonType())); // mvo.setDeath(PopulOutOrLocalEnum.getCnDescByName(vo.getDeath())); } private void setCorrectMistake(ComMngPopulationCorrectMistakeExcelVO mvo, ComMngPopulationCorrectExcelVO vo){ // mvo.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCnDescByName(vo.getPoliticalOutlook())); mvo.setIsRent(PopulHouseUseEnum.getCnDescByName(vo.getIsRent())); // mvo.setRelation(PopulRelationEnum.getCnDescByName(vo.getRelation())); 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.setResidence(PopulRelationEnum.getCnDescByName(vo.getResidence())); // mvo.setPersonType(PopulPersonTypeEnum.getCnDescByName(vo.getPersonType())); // mvo.setDeath(PopulOutOrLocalEnum.getCnDescByName(vo.getDeath())); } private void setMajorMistake(ComMngPopulationMajorMistakeExcelVO mvo, ComMngPopulationMajorExcelVO vo){ // mvo.setPoliticalOutlook(PopulPoliticalOutlookEnum.getCnDescByName(vo.getPoliticalOutlook())); mvo.setIsRent(PopulHouseUseEnum.getCnDescByName(vo.getIsRent())); // mvo.setRelation(PopulRelationEnum.getCnDescByName(vo.getRelation())); 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.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/ComSwPatrolRecordServiceImpl.java
@@ -65,6 +65,11 @@ .lambda().eq(ComSwPatrolRecordReportDO::getPatrolRecordId,patrol.getId())); if(recordReportDO != null){ patrol.setServiceId(recordReportDO.getReportId()); if (null != comSwDangerReportDAO.selectById(recordReportDO.getReportId())) { patrol.setDangerOrRecord(1); }else{ patrol.setDangerOrRecord(2); } } }); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComSwRotaServiceImpl.java
@@ -36,6 +36,8 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @auther txb @@ -123,7 +125,9 @@ return R.fail("该值班表不存在"); } BeanUtils.copyProperties(comSwRotaDO,comSwRotaVO); comSwRotaVO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").format(comSwRotaDO.getRotaDate())); if (null != comSwRotaDO.getRotaDate()) { comSwRotaVO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").format(comSwRotaDO.getRotaDate())); } comSwRotaVO.setWeekDay(DateUtils.dateToWeek(comSwRotaVO.getRotaDate())); StringBuilder leaderNameString = new StringBuilder(); StringBuilder leaderPhoneString = new StringBuilder(); @@ -282,23 +286,41 @@ } ComSwRotaDO comSwRotaDO = new ComSwRotaDO(); String[] leaderPhones = comSwRotaExcelVO.getLeaderPhone().split("、"); String[] leaderNames = comSwRotaExcelVO.getLeaderName().split("、"); List<String> leaderIds = new ArrayList<>(); for (String leaderPhone : leaderPhones) { String id = comSwRotaDAO.getTeamIdsByTeamPhone(leaderPhone); for (int i = 0; i < leaderPhones.length; i++) { String id = comSwRotaDAO.getTeamIdsByTeamPhone(leaderPhones[i]); if (StringUtils.isEmpty(id)) { return R.fail(leaderNames[i] + "为非社区团队人员或该人员电话未维护!"); } leaderIds.add(id); } String[] personPhones = comSwRotaExcelVO.getPersonPhone().split("、"); String[] personNames = comSwRotaExcelVO.getPersonName().split("、"); List<String> personIds = new ArrayList<>(); for (String personPhone : personPhones) { String id = comSwRotaDAO.getTeamIdsByTeamPhone(personPhone); for (int i = 0; i < leaderPhones.length; i++) { String id = comSwRotaDAO.getTeamIdsByTeamPhone(personPhones[i]); if (StringUtils.isEmpty(id)) { return R.fail(personNames[i] + "为非社区团队人员或该人员电话未维护!"); } personIds.add(id); } BeanUtils.copyProperties(comSwRotaExcelVO, comSwRotaDO); comSwRotaDO.setId(Snowflake.getId()); comSwRotaDO.setCommunityId(communityId); if (StringUtils.isNotEmpty(comSwRotaExcelVO.getRotaDate())) { String el = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29) \n" + "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29) "; Pattern p = Pattern.compile(el); Matcher m = p.matcher(comSwRotaExcelVO.getRotaDate()); if (!m.matches()) { return R.fail(comSwRotaExcelVO.getRotaDate() + "日期格式不正确"); } } try { comSwRotaDO.setRotaDate(new SimpleDateFormat("yyyy-MM-dd").parse(comSwRotaExcelVO.getRotaDate())); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); comSwRotaDO.setRotaDate(sdf.parse(comSwRotaExcelVO.getRotaDate())); } catch (ParseException e) { e.printStackTrace(); }