diff --git a/cas-admin/src/main/resources/application.yml b/cas-admin/src/main/resources/application.yml index 3883bf5..688c953 100644 --- a/cas-admin/src/main/resources/application.yml +++ b/cas-admin/src/main/resources/application.yml @@ -13,10 +13,10 @@ cas: # 缓存懒加载 cacheLazy: false profile: /app/asb/uploadPath -# authUnit: 云南农垦集团有限责任公司纪委 -# authStartDate: 2024-08-08 - authUnit: 宏创信科 - authStartDate: 2024-08-15 + authUnit: 云南农垦集团有限责任公司纪委 + authStartDate: 2024-08-08 +# authUnit: 宏创信科 +# authStartDate: 2024-08-15 authDuration: 90 captcha: diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ImportOpeningAccountInfo.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ImportOpeningAccountInfo.java index de6eca2..7e3d309 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ImportOpeningAccountInfo.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ImportOpeningAccountInfo.java @@ -25,11 +25,11 @@ public class ImportOpeningAccountInfo { @IndexId(type = IdType.CUSTOMIZE) private String id; - @ExcelProperty({"客户名称", "客户名","账户户名","姓名"}) + @ExcelProperty({"客户名称", "客户名","账户户名","姓名","公司名称"}) @IndexField(fieldType = FieldType.KEYWORD) private String name; - @ExcelProperty({"客户号"}) + @ExcelProperty({"客户号","客户编号"}) private String customerId; @ExcelProperty({"客户账号","客户主账号", "主账号", "卡号", "账号","卡号或帐号"}) diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ReadDto.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ReadDto.java index 150c1c0..ab8524a 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ReadDto.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/ReadDto.java @@ -19,6 +19,8 @@ public class ReadDto { private String excelFileName; private int headRowNumber; + private int endRow; + private int sheetNo; private Class headClass; private BaseEsMapper esMapper; diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/entity/ICBCBankStatementEntry.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/entity/ICBCBankStatementEntry.java index 6b4aed4..2b3496b 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/entity/ICBCBankStatementEntry.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/domain/entity/ICBCBankStatementEntry.java @@ -22,6 +22,7 @@ public class ICBCBankStatementEntry { @IndexId(type = IdType.CUSTOMIZE) private String id; + @ExcelProperty("持卡人") private String cardHolderName; @ExcelProperty({"账号","帐号"}) diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/BOCDataAnalysisHelper.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/BOCDataAnalysisHelper.java index 6acea87..eb96ea5 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/BOCDataAnalysisHelper.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/BOCDataAnalysisHelper.java @@ -76,7 +76,7 @@ public class BOCDataAnalysisHelper { Cell tradeCell = AsposeUtil.getCell(cells, "交易日期"); Cell contentCell = cells.get(0, 0); if (tradeCell != null) { - importService.readMultiplePersonAndMultipleHeadBankStatement(excelFileName, tradeCell.getRow() + 1, sheetNum, + importService.readMultiplePersonAndMultipleHeadBankStatement(excelFileName, tradeCell.getRow() + 1,null ,sheetNum, BOCPrivateBankStatementEntry.class, esBOCPrivateBankStatementMapper, "", nameWithSheetName, null); } else if (khcell != null || khjg != null) { Cell headCell = khcell == null?khjg:khcell; diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/ICBCDataAnalysisHelper.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/ICBCDataAnalysisHelper.java index ddbe84c..5ab3fd3 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/ICBCDataAnalysisHelper.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/helper/ICBCDataAnalysisHelper.java @@ -3,6 +3,8 @@ package com.inscloudtech.bankStatementAnalysis.helper; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSON; +import cn.hutool.json.JSONObject; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; @@ -103,7 +105,7 @@ public class ICBCDataAnalysisHelper { String withSheetName = sourceFile + BankStatementConstants.NAME_WITH_SHEET_NAME + worksheetName; /**20240418新增模板*/ if (cell420240418 != null) { - readBSFor20240418(cells,cell420240418,absolutePath, sheetNo,withSheetName); + readBSFor20240418(cells,absolutePath, sheetNo,withSheetName); }else if (khCell != null) { // 判断是否是开户信息 int rowNumber = khCell.getRow() + 1; @@ -127,20 +129,58 @@ public class ICBCDataAnalysisHelper { } } - private void readBSFor20240418(Cells cells,Cell dateCell,String absolutePath, int sheetNo,String sourceFile) { - int startRow = dateCell.getRow(); - Cell cardHolderNameCell = cells.get(startRow - 1, 1); - if(null == cardHolderNameCell || StrUtil.isEmpty(cardHolderNameCell.getStringValue())){ - throw new ImportDataFailedException("读取持卡人信息异常", sourceFile); - } + private void readBSFor20240418(Cells cells ,String absolutePath, int sheetNo,String sourceFile) { +// int startRow = dateCell.getRow(); +// Cell cardHolderNameCell = cells.get(startRow - 1, 1); +// if(null == cardHolderNameCell || StrUtil.isEmpty(cardHolderNameCell.getStringValue())){ +// throw new ImportDataFailedException("读取持卡人信息异常", sourceFile); +// } - String cardHolderName = cardHolderNameCell.getStringValue().trim(); + + List maps = new LinkedList<>(); + int maxRow = cells.getMaxRow(); List headFields = new ArrayList<>(); headFields.add(new HeadField("transactionAmount","发生额")); headFields.add(new HeadField("balance","余额")); headFields.add(new HeadField("accountNumber","商密二级,帐号")); - importService.readMultiplePersonAndMultipleHeadBankStatement(absolutePath,startRow + 1,sheetNo, + for(int i = 0; i < maxRow; i++){ + Cell dateCell = cells.get(i, 2); + String stringValue = dateCell.getStringValue(); + if (StrUtil.isEmpty(stringValue)) { + continue; + } + if(stringValue.equals("入帐日期")){ + int startRow = dateCell.getRow(); + Cell cardHolderNameCell = cells.get(startRow - 1, 1); + if(null == cardHolderNameCell || StrUtil.isEmpty(cardHolderNameCell.getStringValue())){ + throw new ImportDataFailedException("读取持卡人信息异常", sourceFile); + } + String cardHolderName = cardHolderNameCell.getStringValue().trim(); + JSONObject jsonObject = new JSONObject(); + jsonObject.putOnce("startRow",i); + jsonObject.putOnce("cardHolderName",cardHolderName); + maps.add(jsonObject); + } + } + int size = maps.size(); + for(int i = 0; i < size; i++){ + JSONObject jsonObject = maps.get(i); + String cardHolderName = jsonObject.getStr("cardHolderName"); + int headRowNumber = jsonObject.getInt("startRow") + 1; + int endRow = maxRow -1; + if(i + 1 < size){ + JSONObject nextRow = maps.get(i + 1); + endRow = nextRow.getInt("startRow") - 1; + } + + if(endRow - headRowNumber <= 1){ + continue; + } + importService.readMultiplePersonAndMultipleHeadBankStatement(absolutePath,headRowNumber,endRow,sheetNo, ICBCBankStatementEntry.class,bankStatementMapper,cardHolderName,sourceFile,headFields); + } + + } diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/service/ImportService.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/service/ImportService.java index ddacd20..90722a3 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/service/ImportService.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/service/ImportService.java @@ -26,7 +26,7 @@ public interface ImportService{ Map> getOAIMapByCardNumber(String caseId,String bankName); - void readMultiplePersonAndMultipleHeadBankStatement(String excelFileName, int headRowNumber, int sheetNo, Class clazz, BaseEsMapper baseEsMapper, + void readMultiplePersonAndMultipleHeadBankStatement(String excelFileName, int headRowNumber,Integer endRow, int sheetNo, Class clazz, BaseEsMapper baseEsMapper, String cardHolderName, String sourceFile, List headFields); diff --git a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/service/impl/ImportServiceImpl.java b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/service/impl/ImportServiceImpl.java index aa047e7..1924710 100644 --- a/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/service/impl/ImportServiceImpl.java +++ b/cas-system/src/main/java/com/inscloudtech/bankStatementAnalysis/service/impl/ImportServiceImpl.java @@ -10,11 +10,11 @@ import cn.hutool.json.JSONUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.exception.ExcelAnalysisStopException; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.read.metadata.ReadSheet; +import com.alibaba.excel.read.metadata.holder.ReadRowHolder; import com.alibaba.excel.util.ListUtils; - - import com.aspose.cells.Cell; import com.aspose.cells.Cells; import com.aspose.cells.Workbook; @@ -40,20 +40,16 @@ import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper; import org.dromara.easyes.core.core.BaseEsMapper; import org.dromara.easyes.core.core.EsWrappers; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import java.io.File; -import java.io.FileInputStream; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.*; import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; -import org.apache.xmlbeans.XmlException; -import org.springframework.web.multipart.MultipartFile; @Service @RequiredArgsConstructor @@ -234,7 +230,7 @@ public class ImportServiceImpl implements ImportService { * 一个excel里多个人流水,重复表头 */ @Override - public void readMultiplePersonAndMultipleHeadBankStatement(String excelFileName, int headRowNumber, int sheetNo, Class clazz, BaseEsMapper baseEsMapper, + public void readMultiplePersonAndMultipleHeadBankStatement(String excelFileName, int headRowNumber,Integer endRow, int sheetNo, Class clazz, BaseEsMapper baseEsMapper, String cardHolderName, String sourceFile, List headFields) { ReadDto readDto = new ReadDto(); @@ -245,7 +241,7 @@ public class ImportServiceImpl implements ImportService { readDto.setEsMapper(baseEsMapper); readDto.setCardHolderName(cardHolderName); readDto.setSourceFile(sourceFile); - + readDto.setEndRow(endRow); //过滤中途的表头行 readDto.setHeadFields(headFields); readDto.setReadListener(readMultiplePersonAndMultipleHeadBankStatementReadListener(readDto)); @@ -309,9 +305,12 @@ public class ImportServiceImpl implements ImportService { List cacheList = ListUtils.newArrayListWithExpectedSize( Constants.BATCH_SIZE); BaseEsMapper esMapper = readDto.getEsMapper(); Class headClass = readDto.getHeadClass(); +// int startRow = start; + final Integer endRow = readDto.getEndRow(); @Override public void invoke(T data, AnalysisContext context) { - + ReadRowHolder readRowHolder = context.readRowHolder(); + Integer rowIndex = readRowHolder.getRowIndex();//从0开始 String str = JSONUtil.toJsonStr(data); JSONObject obj = JSONUtil.parseObj(str); @@ -332,6 +331,8 @@ public class ImportServiceImpl implements ImportService { if (skip) { return; } + + if(StrUtil.isNotEmpty(readDto.getCardHolderName())){ obj.put("cardHolderName", readDto.getCardHolderName()); } @@ -341,6 +342,12 @@ public class ImportServiceImpl implements ImportService { obj.put("id", IdUtil.objectId()); cacheList.add(obj.toBean(headClass)); + if (endRow != null && rowIndex+1 >= endRow) { + esMapper.insertBatch(cacheList); + cacheList.clear(); + throw new ExcelAnalysisStopException("读完一段了"); + } + if (cacheList.size() >= Constants.BATCH_SIZE) { esMapper.insertBatch(cacheList); cacheList = ListUtils.newArrayListWithExpectedSize(Constants.BATCH_SIZE); diff --git a/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/DcImportResultServiceImpl.java b/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/DcImportResultServiceImpl.java index c3219ce..68682a0 100644 --- a/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/DcImportResultServiceImpl.java +++ b/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/DcImportResultServiceImpl.java @@ -2,6 +2,7 @@ package com.inscloudtech.datacenter.service.impl; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.exception.ExcelAnalysisStopException; import com.alibaba.excel.exception.ExcelDataConvertException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -33,6 +34,9 @@ public class DcImportResultServiceImpl extends ServiceImpl