From 2885884dd7585544cddfcba9cb72c8c085abcfab Mon Sep 17 00:00:00 2001 From: "583641232@qq.com" <583641232@qq.com> Date: Tue, 20 Aug 2024 15:00:58 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=20=E5=88=86=E6=9E=90=E6=8A=A5?= =?UTF-8?q?=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cas-admin/src/main/resources/application.yml | 3 +- .../impl/AnalysisReportServiceImpl.java | 94 ++++----------- .../datacenter/domain/PlateNumberInfo.java | 3 +- ...lDto.java => PlateNumberExportAllDto.java} | 2 +- .../datacenter/service/BankService.java | 5 + .../datacenter/service/IndexInitService.java | 2 +- .../service/QueryCenterService.java | 4 +- .../service/impl/BankServiceImpl.java | 108 +++++++++++++++++- 8 files changed, 138 insertions(+), 83 deletions(-) rename cas-system/src/main/java/com/inscloudtech/datacenter/domain/dto/export/{PlateNumberInfoExportAllDto.java => PlateNumberExportAllDto.java} (95%) diff --git a/cas-admin/src/main/resources/application.yml b/cas-admin/src/main/resources/application.yml index 5124718..3883bf5 100644 --- a/cas-admin/src/main/resources/application.yml +++ b/cas-admin/src/main/resources/application.yml @@ -14,8 +14,9 @@ cas: cacheLazy: false profile: /app/asb/uploadPath # authUnit: 云南农垦集团有限责任公司纪委 +# authStartDate: 2024-08-08 authUnit: 宏创信科 - authStartDate: 2024-08-14 + authStartDate: 2024-08-15 authDuration: 90 captcha: diff --git a/cas-system/src/main/java/com/inscloudtech/analysiscenter/service/impl/AnalysisReportServiceImpl.java b/cas-system/src/main/java/com/inscloudtech/analysiscenter/service/impl/AnalysisReportServiceImpl.java index 51a0777..d40ce26 100644 --- a/cas-system/src/main/java/com/inscloudtech/analysiscenter/service/impl/AnalysisReportServiceImpl.java +++ b/cas-system/src/main/java/com/inscloudtech/analysiscenter/service/impl/AnalysisReportServiceImpl.java @@ -39,12 +39,14 @@ import com.inscloudtech.datacenter.domain.BankStatement; import com.inscloudtech.datacenter.domain.OpeningAccountInfo; import com.inscloudtech.bankStatementAnalysis.util.AsposeUtil; +import com.sun.deploy.util.SystemUtils; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.springframework.http.MediaType; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; @@ -828,10 +830,14 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { if(StrUtil.isNotEmpty(cardHolderName)){ req.setCardHolderName(cardHolderName); } - List bsList = new ArrayList<>(); try { - bsList = bankService.getBSList(req); + long start1 = System.currentTimeMillis(); +// bsList = bankService.getBSList(req); +// long start2 = System.currentTimeMillis(); +// System.out.println((start2 -start1)/1000 ); + bsList = bankService.getBSListByCardHolderName(req); + } catch (Exception e) { e.printStackTrace(); } @@ -962,7 +968,7 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { } return false; } - + private final ThreadPoolTaskExecutor threadPoolTaskExecutor; /** * 内部人员涉嫌关联交易 @@ -974,6 +980,7 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { //用于-内部人员间接关系:A流水中出现的名字C,在所有的B的流水中也出现了,则是间接关系 Map> tpBsCNameAndCounterpartMap = new HashMap<>(); + List rst = new ArrayList<>(); //交易对象 以所有名称字段拼接key,对象为value Map tpMap = getTransactionPartnerMap(caseId); @@ -1054,10 +1061,10 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { if(tpCardHolderNameSet.contains(name)){ tpCardHolderNameSet.remove(name); } - List tpBsList = getBankStatementByCardHolderNameSet(tpCardHolderNameSet, caseId); - if (CollectionUtil.isEmpty(tpBsList)) { - return rst; - } + + // 根据交易对象流水获取 1交易对象名字为key,交易对象的卡号为value的Map 2交易对象名字为key,交易对象的交易对手的名字为value的Map + getTpBsCNameAndCardMap(tpCardHolderNameSet, caseId,tpBsCNameAndCardMap,tpBsCNameAndCounterpartMap); + GetPersonReq req = new GetPersonReq(); req.setCaseId(caseId); List personInfo = bankService.getPersonInfo(req); @@ -1066,38 +1073,8 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { .collect(Collectors.toMap(AnalysisPerson::getLabel, AnalysisPerson::getType)); - // 根据交易对象流水获取 1交易对象名字为key,交易对象的卡号为value的Map 2交易对象名字为key,交易对象的交易对手的名字为value的Map - for (BankStatement item : tpBsList) { - String cardHolderName = item.getCardHolderName(); - if (StrUtil.isEmpty(cardHolderName)) { - continue; - } - String cardNumber = item.getCardNumber(); - String counterpartyName = item.getCounterpartyName(); - if (StrUtil.isNotEmpty(cardNumber)) { - Set cardSet; - if (tpBsCNameAndCardMap.containsKey(cardHolderName)) { - cardSet = tpBsCNameAndCardMap.get(cardHolderName); - } else { - cardSet = new HashSet<>(); - } - cardSet.add(cardNumber); - tpBsCNameAndCardMap.put(cardHolderName, cardSet); - } - if (StrUtil.isNotEmpty(counterpartyName)) { - List tempBsList; - if (tpBsCNameAndCounterpartMap.containsKey(cardHolderName)) { - tempBsList = tpBsCNameAndCounterpartMap.get(cardHolderName); - } else { - tempBsList = new ArrayList<>(); - } - tempBsList.add(item); - tpBsCNameAndCounterpartMap.put(cardHolderName, tempBsList); - } - - } // 根据分析对象的流水,以分析对象的交易对手名字为key分组的流水Map @@ -1164,6 +1141,13 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { return rst; } + private void getTpBsCNameAndCardMap(Set cardHolderNameSet, String caseId, Map> tpBsCNameAndCardMap, Map> tpBsCNameAndCounterpartMap) { + GetBSFieldValueCountReq req = new GetBSFieldValueCountReq(); + req.setCaseId(caseId); + req.setCardHolderNameSet(cardHolderNameSet); + bankService.getTpBsCNameAndCardMap(req,tpBsCNameAndCardMap,tpBsCNameAndCounterpartMap); + } + /** * 外部人员涉嫌关联交易 @@ -1214,43 +1198,9 @@ public class AnalysisReportServiceImpl implements IAnalysisReportService { if(cardHolderNameSet.contains(name)){ cardHolderNameSet.remove(name); } - List familyBsList = getBankStatementByCardHolderNameSet(cardHolderNameSet, caseId); - if (CollectionUtil.isEmpty(familyBsList)) { - return rst; - } // 根据交易对象流水获取 1交易对象名字为key,交易对象的卡号为value的Map 2交易对象名字为key,交易对象的交易对手的名字为value的Map - for (BankStatement item : familyBsList) { - String cardHolderName = item.getCardHolderName(); - if (StrUtil.isEmpty(cardHolderName)) { - continue; - } - String cardNumber = item.getCardNumber(); - String counterpartyName = item.getCounterpartyName(); - - if (StrUtil.isNotEmpty(cardNumber)) { - Set cardSet; - if (familyBsCNameAndCardMap.containsKey(cardHolderName)) { - cardSet = familyBsCNameAndCardMap.get(cardHolderName); - } else { - cardSet = new HashSet<>(); - } - cardSet.add(cardNumber); - familyBsCNameAndCardMap.put(cardHolderName, cardSet); - } - - if (StrUtil.isNotEmpty(counterpartyName)) { - List tempBsList; - if (familyBsCNameAndCounterpartMap.containsKey(cardHolderName)) { - tempBsList = familyBsCNameAndCounterpartMap.get(cardHolderName); - } else { - tempBsList = new ArrayList<>(); - } - tempBsList.add(item); - familyBsCNameAndCounterpartMap.put(cardHolderName, tempBsList); - } - - } + getTpBsCNameAndCardMap(cardHolderNameSet, caseId,familyBsCNameAndCardMap,familyBsCNameAndCounterpartMap); // 根据分析对象的流水,以分析对象的交易对手名字为key分组的流水Map diff --git a/cas-system/src/main/java/com/inscloudtech/datacenter/domain/PlateNumberInfo.java b/cas-system/src/main/java/com/inscloudtech/datacenter/domain/PlateNumberInfo.java index 373bc56..008b282 100644 --- a/cas-system/src/main/java/com/inscloudtech/datacenter/domain/PlateNumberInfo.java +++ b/cas-system/src/main/java/com/inscloudtech/datacenter/domain/PlateNumberInfo.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.inscloudtech.common.annotation.DeduplicationField; import com.inscloudtech.common.annotation.UpdateValueLog; import com.inscloudtech.common.core.domain.BaseEntity; +import com.inscloudtech.datacenter.service.IndexInitService; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.easyes.annotation.IndexField; @@ -24,7 +25,7 @@ import org.dromara.easyes.annotation.rely.RefreshPolicy; @Data @EqualsAndHashCode(callSuper = true) @ExcelIgnoreUnannotated -@IndexName(value = "dc_plate_number",refreshPolicy = RefreshPolicy.IMMEDIATE) +@IndexName(value = IndexInitService.PLATE_NUMBER_INDEX,refreshPolicy = RefreshPolicy.IMMEDIATE) public class PlateNumberInfo extends BaseEntity { /** id */ diff --git a/cas-system/src/main/java/com/inscloudtech/datacenter/domain/dto/export/PlateNumberInfoExportAllDto.java b/cas-system/src/main/java/com/inscloudtech/datacenter/domain/dto/export/PlateNumberExportAllDto.java similarity index 95% rename from cas-system/src/main/java/com/inscloudtech/datacenter/domain/dto/export/PlateNumberInfoExportAllDto.java rename to cas-system/src/main/java/com/inscloudtech/datacenter/domain/dto/export/PlateNumberExportAllDto.java index c1088b8..4655350 100644 --- a/cas-system/src/main/java/com/inscloudtech/datacenter/domain/dto/export/PlateNumberInfoExportAllDto.java +++ b/cas-system/src/main/java/com/inscloudtech/datacenter/domain/dto/export/PlateNumberExportAllDto.java @@ -25,7 +25,7 @@ import org.dromara.easyes.annotation.rely.FieldType; @Data @EqualsAndHashCode(callSuper = true) @ExcelIgnoreUnannotated -public class PlateNumberInfoExportAllDto extends ExportBaseEntity { +public class PlateNumberExportAllDto extends ExportBaseEntity { @ExcelProperty("车牌号") private String plateNumber; diff --git a/cas-system/src/main/java/com/inscloudtech/datacenter/service/BankService.java b/cas-system/src/main/java/com/inscloudtech/datacenter/service/BankService.java index 86d9aa3..e8602fb 100644 --- a/cas-system/src/main/java/com/inscloudtech/datacenter/service/BankService.java +++ b/cas-system/src/main/java/com/inscloudtech/datacenter/service/BankService.java @@ -18,6 +18,7 @@ import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author Administrator @@ -84,4 +85,8 @@ public interface BankService { void save2AnalysisResult(AnalysisDto dto); void save2AnalysisResultOai(AnalysisDto dto); + + List getBSListByCardHolderName(GetBSFieldValueCountReq req); + + void getTpBsCNameAndCardMap(GetBSFieldValueCountReq req, Map> tpBsCNameAndCardMap, Map> tpBsCNameAndCounterpartMap); } diff --git a/cas-system/src/main/java/com/inscloudtech/datacenter/service/IndexInitService.java b/cas-system/src/main/java/com/inscloudtech/datacenter/service/IndexInitService.java index 074a7c3..2d6e4c7 100644 --- a/cas-system/src/main/java/com/inscloudtech/datacenter/service/IndexInitService.java +++ b/cas-system/src/main/java/com/inscloudtech/datacenter/service/IndexInitService.java @@ -30,7 +30,7 @@ public class IndexInitService { public static final String CAR_INFO_MAPPING = "{\"properties\":{\"address\":{\"type\":\"keyword\"},\"analysisResultId\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"bgc\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"carNo\":{\"type\":\"keyword\"},\"carType\":{\"type\":\"keyword\"},\"caseId\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"createBy\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"createTime\":{\"type\":\"date\",\"format\":\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"},\"idCard\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"name\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"registration\":{\"type\":\"keyword\"},\"remark\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"updateBy\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"updateTime\":{\"type\":\"date\",\"format\":\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"}}}"; public static final String PLATE_NUMBER_INDEX = "dc_plate_number"; - public static final String PLATE_NUMBER_MAPPING = "{\"properties\":{\"plateNumber\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"sourceFile\":{\"type\":\"keyword\"},\"bsHolder\":{\"type\":\"keyword\"},\"hasDeal\":{\"type\":\"byte\"},\"sourceContent\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"holder\":{\"type\":\"keyword\"},\"bankName\":{\"type\":\"keyword\"},\"caseId\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"createBy\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"createTime\":{\"type\":\"date\",\"format\":\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"},\"remark\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"updateBy\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"updateTime\":{\"type\":\"date\",\"format\":\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"}}}"; + public static final String PLATE_NUMBER_MAPPING = "{\"properties\":{\"carNo\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"sourceFile\":{\"type\":\"keyword\"},\"bsHolder\":{\"type\":\"keyword\"},\"hasDeal\":{\"type\":\"byte\"},\"sourceContent\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"holder\":{\"type\":\"keyword\"},\"bankName\":{\"type\":\"keyword\"},\"caseId\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"createBy\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"createTime\":{\"type\":\"date\",\"format\":\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"},\"remark\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"updateBy\":{\"type\":\"text\",\"fields\":{\"keyword\":{\"type\":\"keyword\",\"ignore_above\":256}}},\"updateTime\":{\"type\":\"date\",\"format\":\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"}}}"; public static final String COLLECTION_INFORMATION_INDEX = "dc_collection_information"; public static final String COLLECTION_INFORMATION_MAPPING = "{\"properties\":{\"actionInfo\":{\"type\":\"keyword\"},\"analysisResultId\":{\"type\":\"keyword\"},\"assetsInfo\":{\"type\":\"keyword\"},\"basicInfo\":{\"type\":\"keyword\"},\"caseId\":{\"type\":\"keyword\"},\"createBy\":{\"type\":\"keyword\"},\"createTime\":{\"type\":\"date\",\"format\":\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"},\"informationSources\":{\"type\":\"keyword\"},\"name\":{\"type\":\"keyword\"},\"relationInfo\":{\"type\":\"keyword\"},\"remark\":{\"type\":\"keyword\"},\"updateBy\":{\"type\":\"keyword\"},\"updateTime\":{\"type\":\"date\",\"format\":\"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"}}}"; diff --git a/cas-system/src/main/java/com/inscloudtech/datacenter/service/QueryCenterService.java b/cas-system/src/main/java/com/inscloudtech/datacenter/service/QueryCenterService.java index 7f21f7f..67c58a5 100644 --- a/cas-system/src/main/java/com/inscloudtech/datacenter/service/QueryCenterService.java +++ b/cas-system/src/main/java/com/inscloudtech/datacenter/service/QueryCenterService.java @@ -1432,8 +1432,8 @@ public class QueryCenterService { private static final List SERVICE_LIST_MERGE = Arrays.asList(BankService.class, OpeningAccountInfoService.class,ITransactionPartnerService.class, IPublicFamilyService.class, IRealEstateService.class, ICarInfoService.class,IOtherAssetsService.class,IOtherInformationService.class, IAnalysisResultService.class, - IAnalysisReportService.class, - PlateNumberInfo.class, CollectionInformation.class); + IAnalysisReportService.class, CollectionInformation.class, + PlateNumberInfo.class); public void caseMerge(AnalysisDto bo) { diff --git a/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java b/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java index de81338..f5d58cb 100644 --- a/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java +++ b/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java @@ -93,7 +93,9 @@ import java.io.IOException; import java.math.BigDecimal; import java.time.Duration; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executors; import java.util.function.Function; import java.util.stream.Collectors; import java.util.zip.ZipEntry; @@ -271,6 +273,7 @@ public class BankServiceImpl implements BankService { } } + @SneakyThrows @Override public List getBSList(GetBSFieldValueCountReq req) { @@ -291,10 +294,13 @@ public class BankServiceImpl implements BankService { while (true) { SearchHits hits = searchResponse.getHits(); for (SearchHit hit : hits) { - JSONObject json = JSONUtil.parseObj(hit.getSourceAsString()); - json.put("id", hit.getId()); - dataList.add(JSONUtil.toBean(json,BankStatement.class)); + threadPoolTaskExecutor.execute(() -> { + JSONObject json = JSONUtil.parseObj(hit.getSourceAsString()); + json.put("id", hit.getId()); + dataList.add(JSONUtil.toBean(json, BankStatement.class)); + }); } + // 继续滚动获取下一页数据 SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId); scrollRequest.scroll(TimeValue.timeValueMinutes(1L)); @@ -1403,7 +1409,6 @@ public class BankServiceImpl implements BankService { int pageNum = req.getPageNum(); int pageSize = req.getPageSize(); - SAPageInfo pageInfo; if (pageNum == 1) { pageInfo = esBsMapper.searchAfterPage(wrapper, null, pageSize); @@ -1711,7 +1716,7 @@ public class BankServiceImpl implements BankService { public void analysisFile(File file, String bankNo, String caseId, String bankName) { try { String completeKey = Constants.COMPLETE_BANK_COUNT +caseId; - long start = System.currentTimeMillis(); + // 导入数据 switch (bankNo) { case Constants.BANK_IMPORT_MODEL_BANK_FDB: // 富滇银行 @@ -2187,6 +2192,99 @@ public class BankServiceImpl implements BankService { } } + @Override + public List getBSListByCardHolderName(GetBSFieldValueCountReq req) { + LambdaEsQueryWrapper queryWrapper = EsWrappers.lambdaQuery(BankStatement.class); + queryWrapper.eq(BankStatement::getCaseId, req.getCaseId()); + queryWrapper.eq(StrUtil.isNotEmpty(req.getCardHolderName()),BankStatement::getCardHolderName, req.getCardHolderName()); + queryWrapper.in(CollectionUtil.isNotEmpty(req.getCardHolderNameSet()),BankStatement::getCardHolderName, req.getCardHolderNameSet()); + return esBsMapper.selectList(queryWrapper); + } + + @SneakyThrows + @Override + public void getTpBsCNameAndCardMap(GetBSFieldValueCountReq req, Map> tpBsCNameAndCardMap, Map> tpBsCNameAndCounterpartMap) { + SearchSourceBuilder searchSourceBuilder = buildSearchSourceBuilder(req); + + SearchRequest searchRequest = new SearchRequest("dc_bank_statement"); + Scroll scroll = new Scroll(TimeValue.timeValueMinutes(3)); // 设置一次读取的最大连接时长 + + searchSourceBuilder.size(QueryCenterService.MAX_PAGE_SIZE); + searchRequest.source(searchSourceBuilder); + searchRequest.scroll(scroll); + SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); + SearchHits responseHits = searchResponse.getHits(); + String scrollId = searchResponse.getScrollId(); + List dataList = new ArrayList<>(); + long total = responseHits.getTotalHits().value; + if (total > QueryCenterService.MAX_PAGE_SIZE) { + while (true) { + SearchHits hits = searchResponse.getHits(); + for (SearchHit hit : hits) { + setTpBsCNameAndCounterpartMap(hit,tpBsCNameAndCardMap,tpBsCNameAndCounterpartMap); + } + + // 继续滚动获取下一页数据 + SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId); + scrollRequest.scroll(TimeValue.timeValueMinutes(1L)); + searchResponse = restHighLevelClient.scroll(scrollRequest, RequestOptions.DEFAULT); + scrollId = searchResponse.getScrollId(); + + // 判断是否还有数据 + if (searchResponse.getHits().getHits().length == 0) { + break; + } + } + ClearScrollRequest clearScrollRequest = new ClearScrollRequest(); + clearScrollRequest.addScrollId(scrollId); + restHighLevelClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT); + } else { + SearchHit[] hits = responseHits.getHits(); + for (SearchHit hit : hits) { + setTpBsCNameAndCounterpartMap(hit,tpBsCNameAndCardMap,tpBsCNameAndCounterpartMap); + } + } + } + + void setTpBsCNameAndCounterpartMap(SearchHit hit, Map> tpBsCNameAndCardMap, Map> tpBsCNameAndCounterpartMap){ + threadPoolTaskExecutor.execute(() -> { + JSONObject json = JSONUtil.parseObj(hit.getSourceAsString()); + json.put("id", hit.getId()); + BankStatement item = JSONUtil.toBean(json, BankStatement.class); + String cardHolderName = item.getCardHolderName(); + if (StrUtil.isEmpty(cardHolderName)) { + return; + } + String cardNumber = item.getCardNumber(); + String counterpartyName = item.getCounterpartyName(); + + if (StrUtil.isNotEmpty(cardNumber)) { + Set cardSet; + if (tpBsCNameAndCardMap.containsKey(cardHolderName)) { + cardSet = tpBsCNameAndCardMap.get(cardHolderName); + } else { + cardSet = new HashSet<>(); + } + cardSet.add(cardNumber); + tpBsCNameAndCardMap.put(cardHolderName, cardSet); + } + + if (StrUtil.isNotEmpty(counterpartyName)) { + List tempBsList; + if (tpBsCNameAndCounterpartMap.containsKey(cardHolderName)) { + tempBsList = tpBsCNameAndCounterpartMap.get(cardHolderName); + } else { + tempBsList = new ArrayList<>(); + } + tempBsList.add(item); + tpBsCNameAndCounterpartMap.put(cardHolderName, tempBsList); + } + }); + } + + /** * 复制出新的caseId为null的数,重新计算MD5 * @param dto