|
@ -65,12 +65,13 @@ public class CGSAnalysisHelper { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (File excelFile : excelFileList) { |
|
|
for (File excelFile : excelFileList) { |
|
|
|
|
|
String bankName = ""; |
|
|
try { |
|
|
try { |
|
|
String excelFileName = excelFile.getAbsolutePath(); |
|
|
String excelFileName = excelFile.getAbsolutePath(); |
|
|
if(excelFileName.contains("金融理财")){ |
|
|
if(excelFileName.contains("金融理财")){ |
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|
String bankName = ""; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(excelFileName.contains("_")){ |
|
|
if(excelFileName.contains("_")){ |
|
|
int count = countString(excelFileName, "_"); |
|
|
int count = countString(excelFileName, "_"); |
|
@ -84,29 +85,29 @@ public class CGSAnalysisHelper { |
|
|
List<CGSOpenAccountInfo> baseInfoList = new ArrayList<>(); |
|
|
List<CGSOpenAccountInfo> baseInfoList = new ArrayList<>(); |
|
|
String sourceFile = HelperUtil.getSourceFileName(excelFileName,BANK_NAME); |
|
|
String sourceFile = HelperUtil.getSourceFileName(excelFileName,BANK_NAME); |
|
|
|
|
|
|
|
|
for (int sheetNo = 0; sheetNo < wb.getWorksheets().getCount(); sheetNo++) { |
|
|
|
|
|
try { |
|
|
|
|
|
Worksheet worksheet = wb.getWorksheets().get(sheetNo); |
|
|
|
|
|
String worksheetName = worksheet.getName(); |
|
|
|
|
|
if(worksheetName.equals("交易流水信息")){ |
|
|
|
|
|
saveBS(wb,sheetNo,excelFileName,bankName,caseId); |
|
|
|
|
|
} else if(worksheetName.equals("客户基本信息")){ |
|
|
|
|
|
getBaseInfo(wb,sheetNo,excelFileName,baseInfoList); |
|
|
|
|
|
} else if(worksheetName.equals("账户基本信息")){ |
|
|
|
|
|
saveOpenInfo(wb,sheetNo,excelFileName,baseInfoList,bankName); |
|
|
|
|
|
} else if(worksheetName.equals("查询反馈结果") || worksheetName.equals("强制措施信息") |
|
|
|
|
|
|| worksheetName.equals("账户共有权信息")|| worksheetName.equals("关联子账户信息")){ |
|
|
|
|
|
continue; |
|
|
|
|
|
}else { |
|
|
|
|
|
throw new TemplateNotFindException(sourceFile + BankStatementConstants.NAME_WITH_SHEET_NAME+ worksheetName); |
|
|
|
|
|
|
|
|
for (int sheetNo = 0; sheetNo < wb.getWorksheets().getCount(); sheetNo++) { |
|
|
|
|
|
try { |
|
|
|
|
|
Worksheet worksheet = wb.getWorksheets().get(sheetNo); |
|
|
|
|
|
String worksheetName = worksheet.getName(); |
|
|
|
|
|
if(worksheetName.equals("交易流水信息")){ |
|
|
|
|
|
saveBS(wb,sheetNo,excelFileName,bankName,caseId,sourceFile); |
|
|
|
|
|
} else if(worksheetName.equals("客户基本信息")){ |
|
|
|
|
|
getBaseInfo(wb,sheetNo,excelFileName,baseInfoList); |
|
|
|
|
|
} else if(worksheetName.equals("账户基本信息")){ |
|
|
|
|
|
saveOpenInfo(wb,sheetNo,excelFileName,baseInfoList,bankName); |
|
|
|
|
|
} else if(worksheetName.equals("查询反馈结果") || worksheetName.equals("强制措施信息") |
|
|
|
|
|
|| worksheetName.equals("账户共有权信息")|| worksheetName.equals("关联子账户信息")){ |
|
|
|
|
|
continue; |
|
|
|
|
|
}else { |
|
|
|
|
|
throw new TemplateNotFindException(sourceFile + BankStatementConstants.NAME_WITH_SHEET_NAME+ worksheetName); |
|
|
|
|
|
} |
|
|
|
|
|
}catch (Exception e){ |
|
|
|
|
|
importResultService.record(caseId,bankName,e); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
}catch (Exception e){ |
|
|
}catch (Exception e){ |
|
|
importResultService.record(caseId,BANK_NAME,e); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
importResultService.record(caseId,bankName,e); |
|
|
} |
|
|
} |
|
|
}catch (Exception e){ |
|
|
|
|
|
importResultService.record(caseId,BANK_NAME,e); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -203,27 +204,26 @@ public class CGSAnalysisHelper { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void saveBS(Workbook wb,int sheetNo, String excelFileName,String bankName,String caseId){ |
|
|
|
|
|
|
|
|
void saveBS(Workbook wb,int sheetNo, String excelFileName,String bankName,String caseId,String sourceFile){ |
|
|
Cells cells = wb.getWorksheets().get(sheetNo).getCells(); |
|
|
Cells cells = wb.getWorksheets().get(sheetNo).getCells(); |
|
|
Cell cell = AsposeUtil.getCell(cells, "交易时间"); |
|
|
Cell cell = AsposeUtil.getCell(cells, "交易时间"); |
|
|
if (cell == null) { |
|
|
if (cell == null) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int headRowNum = cell.getRow() + 1; |
|
|
|
|
|
|
|
|
int headRowNum = cell.getRow() + 1; |
|
|
List<CGSBankStatement> bsList = new ArrayList<>(); |
|
|
List<CGSBankStatement> bsList = new ArrayList<>(); |
|
|
try (ExcelReader reader = EasyExcel.read(excelFileName).build()) { |
|
|
try (ExcelReader reader = EasyExcel.read(excelFileName).build()) { |
|
|
ReadSheet sheet = EasyExcel.readSheet(sheetNo) |
|
|
ReadSheet sheet = EasyExcel.readSheet(sheetNo) |
|
|
.headRowNumber(headRowNum) |
|
|
.headRowNumber(headRowNum) |
|
|
.head(CGSBankStatement.class) |
|
|
.head(CGSBankStatement.class) |
|
|
.registerReadListener(getBSReadListener(bsList,bankName,caseId)) |
|
|
|
|
|
|
|
|
.registerReadListener(getBSReadListener(bsList,bankName,caseId,sourceFile)) |
|
|
.build(); |
|
|
.build(); |
|
|
reader.read(sheet); |
|
|
reader.read(sheet); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
log.error("读取央地系统数据失败", e); |
|
|
log.error("读取央地系统数据失败", e); |
|
|
throw new ImportDataFailedException(e.getMessage(), excelFileName); |
|
|
|
|
|
|
|
|
throw new ImportDataFailedException(e.getMessage(), sourceFile); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -242,7 +242,7 @@ public class CGSAnalysisHelper { |
|
|
}; |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private ReadListener<CGSBankStatement> getBSReadListener(List<CGSBankStatement> bsList,String bankName,String caseId) { |
|
|
|
|
|
|
|
|
private ReadListener<CGSBankStatement> getBSReadListener(List<CGSBankStatement> bsList,String bankName,String caseId,String sourceFile) { |
|
|
return new ReadListener<CGSBankStatement>() { |
|
|
return new ReadListener<CGSBankStatement>() { |
|
|
@Override |
|
|
@Override |
|
|
public void invoke(CGSBankStatement data, AnalysisContext context) { |
|
|
public void invoke(CGSBankStatement data, AnalysisContext context) { |
|
@ -265,8 +265,9 @@ public class CGSAnalysisHelper { |
|
|
String.format("解析交易时间错误,无法将【%s】格式化为【%s】", transTime, format), new Exception()); |
|
|
String.format("解析交易时间错误,无法将【%s】格式化为【%s】", transTime, format), new Exception()); |
|
|
} |
|
|
} |
|
|
}catch (Exception e){ |
|
|
}catch (Exception e){ |
|
|
importResultService.record(caseId,bankName,e); |
|
|
|
|
|
|
|
|
importResultService.record(caseId,bankName,e,sourceFile); |
|
|
} |
|
|
} |
|
|
|
|
|
data.setSourceFile(sourceFile); |
|
|
data.setBankName(bankName); |
|
|
data.setBankName(bankName); |
|
|
data.setId(IdUtil.objectId()); |
|
|
data.setId(IdUtil.objectId()); |
|
|
bsList.add(data); |
|
|
bsList.add(data); |
|
@ -360,100 +361,99 @@ public class CGSAnalysisHelper { |
|
|
for (CGSBankStatement entity : cgsBankStatementList) { |
|
|
for (CGSBankStatement entity : cgsBankStatementList) { |
|
|
String sourceFile = entity.getSourceFile(); |
|
|
String sourceFile = entity.getSourceFile(); |
|
|
try { |
|
|
try { |
|
|
// 流水 |
|
|
|
|
|
String cardNumber = entity.getCardNumber(); |
|
|
|
|
|
if(StrUtil.isEmpty(cardNumber)){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 流水 |
|
|
|
|
|
String cardNumber = entity.getCardNumber(); |
|
|
|
|
|
if(StrUtil.isEmpty(cardNumber)){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
BankStatement bs = new BankStatement(); |
|
|
|
|
|
bs.setBankName(entity.getBankName()); |
|
|
|
|
|
bs.setCardHolderName(entity.getCardHolderName()); |
|
|
|
|
|
if (groupByCardNumber.containsKey(cardNumber)) { |
|
|
|
|
|
List<OpeningAccountInfo> abcCustomerInfoEntities = groupByCardNumber.get(cardNumber); |
|
|
|
|
|
OpeningAccountInfo oai = abcCustomerInfoEntities.get(0); |
|
|
|
|
|
bs.setIdCardNo(oai.getIdNo()); |
|
|
|
|
|
if(StrUtil.isNotEmpty(oai.getName())){ |
|
|
|
|
|
bs.setCardHolderName(oai.getName()); |
|
|
|
|
|
|
|
|
BankStatement bs = new BankStatement(); |
|
|
|
|
|
bs.setBankName(entity.getBankName()); |
|
|
|
|
|
bs.setCardHolderName(entity.getCardHolderName()); |
|
|
|
|
|
if (groupByCardNumber.containsKey(cardNumber)) { |
|
|
|
|
|
List<OpeningAccountInfo> abcCustomerInfoEntities = groupByCardNumber.get(cardNumber); |
|
|
|
|
|
OpeningAccountInfo oai = abcCustomerInfoEntities.get(0); |
|
|
|
|
|
bs.setIdCardNo(oai.getIdNo()); |
|
|
|
|
|
if(StrUtil.isNotEmpty(oai.getName())){ |
|
|
|
|
|
bs.setCardHolderName(oai.getName()); |
|
|
|
|
|
} |
|
|
|
|
|
bs.setPhone(oai.getPhone()); |
|
|
} |
|
|
} |
|
|
bs.setPhone(oai.getPhone()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bs.setCardNumber(cardNumber); |
|
|
|
|
|
// 4 交易时间 |
|
|
|
|
|
String transTime = entity.getTransTime(); |
|
|
|
|
|
|
|
|
bs.setCardNumber(cardNumber); |
|
|
|
|
|
// 4 交易时间 |
|
|
|
|
|
String transTime = entity.getTransTime(); |
|
|
|
|
|
|
|
|
if (StringUtils.isNotEmpty(transTime)) { |
|
|
|
|
|
bs.setTransactionTime(DateUtil.parse(transTime, format)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (StringUtils.isNotEmpty(transTime)) { |
|
|
|
|
|
bs.setTransactionTime(DateUtil.parse(transTime, format)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 2交易金额 |
|
|
|
|
|
// 借贷标记来计算 |
|
|
|
|
|
// 进,出 |
|
|
|
|
|
String creditMark = entity.getCreditMark(); |
|
|
|
|
|
if (StrUtil.isNotEmpty(creditMark)) { |
|
|
|
|
|
BigDecimal transactionAmount = NumberUtil.toBigDecimal(entity.getTransactionAmount()); |
|
|
|
|
|
if (creditMark.equalsIgnoreCase("进")) { |
|
|
|
|
|
bs.setTransactionAmount(transactionAmount); |
|
|
|
|
|
} else { |
|
|
|
|
|
bs.setTransactionAmount(BigDecimal.ZERO.subtract(transactionAmount)); |
|
|
|
|
|
|
|
|
// 2交易金额 |
|
|
|
|
|
// 借贷标记来计算 |
|
|
|
|
|
// 进,出 |
|
|
|
|
|
String creditMark = entity.getCreditMark(); |
|
|
|
|
|
if (StrUtil.isNotEmpty(creditMark)) { |
|
|
|
|
|
BigDecimal transactionAmount = NumberUtil.toBigDecimal(entity.getTransactionAmount()); |
|
|
|
|
|
if (creditMark.equalsIgnoreCase("进")) { |
|
|
|
|
|
bs.setTransactionAmount(transactionAmount); |
|
|
|
|
|
} else { |
|
|
|
|
|
bs.setTransactionAmount(BigDecimal.ZERO.subtract(transactionAmount)); |
|
|
|
|
|
} |
|
|
|
|
|
} else { // 没有借贷标志,说明交易金额是零 |
|
|
|
|
|
bs.setTransactionAmount(BigDecimal.ZERO); |
|
|
} |
|
|
} |
|
|
} else { // 没有借贷标志,说明交易金额是零 |
|
|
|
|
|
bs.setTransactionAmount(BigDecimal.ZERO); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 3 余额 |
|
|
|
|
|
bs.setBalance(entity.getBalance()); |
|
|
|
|
|
|
|
|
// 3 余额 |
|
|
|
|
|
bs.setBalance(entity.getBalance()); |
|
|
|
|
|
|
|
|
//去重 |
|
|
|
|
|
String uniqueKey = bs.getCardHolderName()+bs.getIdCardNo()+bs.getCardNumber()+bs.getTransactionTime()+bs.getTransactionAmount()+ |
|
|
|
|
|
bs.getBalance(); |
|
|
|
|
|
if (uniqueKeySet.contains(uniqueKey)) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
uniqueKeySet.add(uniqueKey); |
|
|
|
|
|
|
|
|
//去重 |
|
|
|
|
|
String uniqueKey = bs.getCardHolderName()+bs.getIdCardNo()+bs.getCardNumber()+bs.getTransactionTime()+bs.getTransactionAmount()+ |
|
|
|
|
|
bs.getBalance(); |
|
|
|
|
|
if (uniqueKeySet.contains(uniqueKey)) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
uniqueKeySet.add(uniqueKey); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 1 货币类型 |
|
|
|
|
|
bs.setTransCurrencyType(Constants.CURRENCY_TYPE_CHINA); |
|
|
|
|
|
|
|
|
// 1 货币类型 |
|
|
|
|
|
bs.setTransCurrencyType(Constants.CURRENCY_TYPE_CHINA); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bs.setCounterpartyName(entity.getCounterpartyName()); |
|
|
|
|
|
bs.setCounterpartyBankName(entity.getCounterpartyBankName()); |
|
|
|
|
|
bs.setCounterpartyAccount(entity.getCounterpartyAccount()); |
|
|
|
|
|
bs.setTransactionInstitutions(entity.getTransactionSituation()); |
|
|
|
|
|
bs.setSummary(entity.getTransSummary()); |
|
|
|
|
|
bs.setTransRemark(entity.getTransRemark()); |
|
|
|
|
|
bs.setTransChannel(entity.getTransChannel()); |
|
|
|
|
|
|
|
|
bs.setCounterpartyName(entity.getCounterpartyName()); |
|
|
|
|
|
bs.setCounterpartyBankName(entity.getCounterpartyBankName()); |
|
|
|
|
|
bs.setCounterpartyAccount(entity.getCounterpartyAccount()); |
|
|
|
|
|
bs.setTransactionInstitutions(entity.getTransactionSituation()); |
|
|
|
|
|
bs.setSummary(entity.getTransSummary()); |
|
|
|
|
|
bs.setTransRemark(entity.getTransRemark()); |
|
|
|
|
|
bs.setTransChannel(entity.getTransChannel()); |
|
|
|
|
|
|
|
|
String md5Id = HelperUtil.generateMD5Id(bs,caseId); |
|
|
|
|
|
//未导入数据内部去重 |
|
|
|
|
|
if(HelperUtil.deduplication(md5Id,uniqueKeySet)){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
String md5Id = HelperUtil.generateMD5Id(bs,caseId); |
|
|
|
|
|
//未导入数据内部去重 |
|
|
|
|
|
if(HelperUtil.deduplication(md5Id,uniqueKeySet)){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
bs.setSourceFile(entity.getSourceFile()); |
|
|
|
|
|
bs.setId(md5Id); |
|
|
|
|
|
bs.setCaseId(caseId); |
|
|
|
|
|
try { |
|
|
|
|
|
BeanUtils.beanAttributeValueTrim(bs); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
bsList.add(bs); |
|
|
|
|
|
|
|
|
bs.setSourceFile(entity.getSourceFile()); |
|
|
|
|
|
bs.setId(md5Id); |
|
|
|
|
|
bs.setCaseId(caseId); |
|
|
|
|
|
try { |
|
|
|
|
|
BeanUtils.beanAttributeValueTrim(bs); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
bsList.add(bs); |
|
|
HelperUtil.extractPlateNumber(bs,plateNumberInfoList); |
|
|
HelperUtil.extractPlateNumber(bs,plateNumberInfoList); |
|
|
|
|
|
|
|
|
|
|
|
if (bsList.size() >= batchSize) { |
|
|
|
|
|
List<BankStatement> dest = HelperUtil.getDest(bsList); |
|
|
|
|
|
HelperUtil.batchInsert2Es(dest, caseId); |
|
|
|
|
|
|
|
|
if (bsList.size() >= batchSize) { |
|
|
|
|
|
List<BankStatement> dest = HelperUtil.getDest(bsList); |
|
|
|
|
|
HelperUtil.batchInsert2Es(dest, caseId); |
|
|
|
|
|
|
|
|
|
|
|
bsList = ListUtils.newArrayListWithExpectedSize(batchSize); |
|
|
|
|
|
|
|
|
bsList = ListUtils.newArrayListWithExpectedSize(batchSize); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
importResultService.record(caseId, entity.getBankName(), e,sourceFile); |
|
|
} |
|
|
} |
|
|
} catch (Exception e) { |
|
|
|
|
|
importResultService.record(caseId, BANK_NAME, e,sourceFile); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
uniqueKeySet.clear(); |
|
|
uniqueKeySet.clear(); |
|
|