From 05897ff203f1d60d555d1a266ecbea2575dd55c9 Mon Sep 17 00:00:00 2001 From: "583641232@qq.com" <583641232@qq.com> Date: Fri, 13 Sep 2024 11:25:44 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=20=20=E5=85=B4=E4=B8=9A=E9=93=B6?= =?UTF-8?q?=E8=A1=8C-=E4=BF=A1=E7=94=A8=E5=8D=A1=E6=96=B0=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/ImportCommonStatement.java | 4 +- .../helper/CIBDataAnalysisHelper.java | 81 ++++++++++++++++++- 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ImportCommonStatement.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ImportCommonStatement.java index 01e3d38..770724b 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ImportCommonStatement.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ImportCommonStatement.java @@ -22,7 +22,7 @@ public class ImportCommonStatement { @ExcelProperty("客户名称") private String cardHolderName; - @ExcelProperty({"客户账号"}) + @ExcelProperty({"客户账号","卡号"}) private String cardNumber; @ExcelProperty({"交易日期"}) @@ -56,7 +56,7 @@ public class ImportCommonStatement { @ExcelProperty({"交易渠道","渠道名称"}) private String transChannel; - @ExcelProperty("交易摘要") + @ExcelProperty({"交易摘要","交易描述1"}) private String summary; @ExcelIgnore diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/CIBDataAnalysisHelper.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/CIBDataAnalysisHelper.java index 1d81b3a..c4c9032 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/CIBDataAnalysisHelper.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/CIBDataAnalysisHelper.java @@ -1,6 +1,8 @@ package com.inscloudtech.bankStatementAnalysis.helper; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; @@ -17,6 +19,8 @@ import com.alibaba.excel.util.ListUtils; import com.aspose.cells.*; import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.inscloudtech.bankStatementAnalysis.domain.ImportCommonStatement; +import com.inscloudtech.bankStatementAnalysis.domain.entity.PSBCStatementEntity; import com.inscloudtech.bankStatementAnalysis.helper.HelperUtil; import com.inscloudtech.bankStatementAnalysis.service.ImportService; import com.inscloudtech.common.constant.BankStatementConstants; @@ -104,7 +108,8 @@ public class CIBDataAnalysisHelper { throw new TemplateNotFindException(sourceFileWithSheetName); }else { Cell c = AsposeUtil.getCell(cells, "信用卡历史账单"); - if (tradeCell != null && c == null) { + Cell creditCardFlag = AsposeUtil.getCell(cells, "名下的交易明细"); + if (tradeCell != null && c == null && creditCardFlag == null) { ExcelReader reader = EasyExcel.read(excelFile).build(); Class clazz = CIBStatementEntity.class; ReadSheet sheet = EasyExcel.readSheet(sheetNo) @@ -115,6 +120,8 @@ public class CIBDataAnalysisHelper { reader.read(sheet); }else if(c != null){ readCreditCardBS(cells,sourceFileWithSheetName,caseId,sheetNo,excelFile); + }else if(creditCardFlag != null){ + readCreditCardBS20240913(cells,sourceFileWithSheetName,caseId,sheetNo,excelFile,creditCardFlag); }else { throw new TemplateNotFindException(sourceFileWithSheetName); } @@ -129,6 +136,74 @@ public class CIBDataAnalysisHelper { } } + private void readCreditCardBS20240913(Cells cells, String sourceFileWithSheetName, String caseId, int sheetNo, File excelFile, Cell creditCardFlag) { + + String value = creditCardFlag.getStringValue(); // 尊敬的xxx先生/女士: + String[] split = value.split("名下的交易明细"); + // 客户名称 + String cardHolderName = split[0]; + + if (StringUtils.isEmpty(cardHolderName)) { + throw new ImportDataFailedException("无法获取客户名称.",sourceFileWithSheetName); + } + + Cell tr = AsposeUtil.getCell(cells, "交易日期"); + + try (ExcelReader r = EasyExcel.read(excelFile).build()) { + String finalCardHolderName = cardHolderName; + ReadSheet readSheet = EasyExcel.readSheet(sheetNo) + .headRowNumber(tr.getRow() + 1) + .head(ImportCommonStatement.class) + .registerReadListener(new ReadListener() { + private static final int BATCH_SIZE = Constants.BATCH_SIZE; + private List cacheList = + ListUtils.newArrayListWithExpectedSize(BATCH_SIZE); + + @Override + public void invoke(ImportCommonStatement importData, AnalysisContext context) { + CIBCreditCardBSEntity entry = new CIBCreditCardBSEntity(); + BeanUtil.copyProperties(importData,entry); + + String id = IdUtil.objectId(); + entry.setId(id); + + entry.setCardHolderName(finalCardHolderName); + entry.setSourceFile(sourceFileWithSheetName); + String transactionTime1 = importData.getTransactionTime(); + if(transactionTime1.length() == 8){ + transactionTime1 = transactionTime1.substring(0,6); + } + String transactionTime = importData.getTransactionDate() + transactionTime1; + entry.setTransactionTime(DateUtil.parse(transactionTime, DatePattern.PURE_DATETIME_FORMAT)); + cacheList.add(entry); + if (cacheList.size() >= BATCH_SIZE) { + saveData(); + cacheList = ListUtils.newArrayListWithExpectedSize(BATCH_SIZE); + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + // 保存不够一百条数据的批次 + if (!cacheList.isEmpty()) { + saveData(); + } + + } + + private void saveData() { + esCIBCreditCardBankStatementMapper.insertBatch(cacheList); + cacheList = ListUtils.newArrayListWithExpectedSize(BATCH_SIZE); + } + }) + .build(); + r.read(readSheet); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ImportDataFailedException(e.getMessage(), sourceFileWithSheetName); + } + } + private void readBSWithLikeCSV(Cells cells, String caseId,String sourceFile,int headRow) { try { Cell cardHolderNameCell = cells.get(0, 0); @@ -277,7 +352,9 @@ public class CIBDataAnalysisHelper { String cardHolderName = entity.getCardHolderName(); bs.setCardHolderName(cardHolderName); importService.setIdCardAndCardNumberByCardHolderName(oaiMap,cardHolderName,bs); - + if (StrUtil.isEmpty(bs.getCardNumber())){ + bs.setCardNumber(entity.getCardNumber()); + } bs.setSummary(entity.getSummary()); bs.setTransCurrencyType(Constants.CURRENCY_TYPE_CHINA); bs.setTransactionAmount(BigDecimal.valueOf(Double.parseDouble(entity.getTransactionAmount())));