package com.panzhihua.common.listen;
|
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.alibaba.fastjson.JSONArray;
|
import com.google.common.collect.Lists;
|
import com.panzhihua.common.constants.BcDictionaryConstants;
|
import com.panzhihua.common.constants.Constants;
|
import com.panzhihua.common.enums.*;
|
import com.panzhihua.common.exceptions.ServiceException;
|
import com.panzhihua.common.model.vos.BcDictionaryVO;
|
import com.panzhihua.common.model.vos.R;
|
import com.panzhihua.common.model.vos.community.ComMngPopulationVeteransExcelVO;
|
import com.panzhihua.common.model.vos.community.ComMngPopulationVeteransMistakeExcelVO;
|
import com.panzhihua.common.service.community.CommunityService;
|
import com.panzhihua.common.utlis.ListUtils;
|
import com.panzhihua.common.utlis.PayUtil;
|
import com.panzhihua.common.utlis.StringUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.ValueOperations;
|
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.concurrent.TimeUnit;
|
import java.util.stream.Collectors;
|
|
/**
|
* @description: 退役军人导入监听
|
* @author: txb
|
*/
|
@Slf4j
|
public class ComMngPopulationVeteransExcelListen 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 ComMngPopulationVeteransExcelListen(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 Veterans = Constants.VETERANS_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;
|
|
}
|
|
|
}
|