|
|
@ -689,6 +689,206 @@ public class BankServiceImpl implements BankService { |
|
|
|
return searchSourceBuilder; |
|
|
|
} |
|
|
|
|
|
|
|
SearchSourceBuilder buildLikeSearchSourceBuilder(GetBSFieldValueCountReq req){ |
|
|
|
|
|
|
|
Map<String, Object> params = req.getParams(); |
|
|
|
if (params != null) { |
|
|
|
Object btObj = params.get("beginTransactionTime"); |
|
|
|
Object etObj = params.get("endTransactionTime"); |
|
|
|
req.setBeginTransactionTime(btObj == null?null:btObj.toString()); |
|
|
|
req.setEndTransactionTime(etObj == null?null:etObj.toString()); |
|
|
|
|
|
|
|
Object btaObj = params.get("beginTransactionAmount"); |
|
|
|
Object etaObj = params.get("endTransactionAmount"); |
|
|
|
req.setBeginTransactionAmount(btaObj == null?null:new BigDecimal(btaObj.toString())); |
|
|
|
req.setEndTransactionAmount(etaObj == null?null:new BigDecimal(etaObj.toString())); |
|
|
|
|
|
|
|
Object bbObj = params.get("beginBalance"); |
|
|
|
Object ebObj = params.get("endBalance"); |
|
|
|
req.setBeginBalance(bbObj == null?null:new BigDecimal(bbObj.toString())); |
|
|
|
req.setEndBalance(ebObj == null?null:new BigDecimal(ebObj.toString())); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
LambdaEsQueryWrapper<BankStatement> wrapper = EsWrappers.lambdaQuery(BankStatement.class); |
|
|
|
|
|
|
|
|
|
|
|
wrapper.in(CollectionUtil.isNotEmpty(req.getCardHolderNameSet()),BankStatement::getCardHolderName, req.getCardHolderNameSet()); |
|
|
|
|
|
|
|
|
|
|
|
// 查询条件 |
|
|
|
// 案件Id |
|
|
|
if(StrUtil.isNotEmpty(req.getAnalysisResultId())){ |
|
|
|
wrapper.eq(BankStatement::getAnalysisResultId, req.getAnalysisResultId()); |
|
|
|
}else { |
|
|
|
// 案件Id |
|
|
|
wrapper.eq(StrUtil.isNotEmpty(req.getCaseId()), BankStatement::getCaseId, req.getCaseId()); |
|
|
|
} |
|
|
|
// 银行 |
|
|
|
wrapper.like(StrUtil.isNotEmpty(req.getBankName()), BankStatement::getBankName, req.getBankName()); |
|
|
|
// 持卡人姓名 |
|
|
|
if(null != req.getCardHolderName()){ |
|
|
|
wrapper.like(BankStatement::getCardHolderName, req.getCardHolderName()); |
|
|
|
} |
|
|
|
|
|
|
|
// 身份证号 |
|
|
|
if(null != req.getIdCardNo()){ |
|
|
|
wrapper.like(BankStatement::getIdCardNo, req.getIdCardNo()); |
|
|
|
} |
|
|
|
// |
|
|
|
// // 手机号 |
|
|
|
// wrapper.like(StrUtil.isNotEmpty(req.getPhone()), BankStatement::getPhone, req.getPhone()); |
|
|
|
|
|
|
|
// 卡号 |
|
|
|
if(null != req.getCardNumber()){ |
|
|
|
if(req.getCardNumber().equals("")){ |
|
|
|
wrapper.eq(BankStatement::getCardNumber,""); |
|
|
|
} |
|
|
|
if(StrUtil.isNotEmpty(req.getCardNumber())){ |
|
|
|
wrapper.like(BankStatement::getCardNumber, req.getCardNumber()); |
|
|
|
} |
|
|
|
} |
|
|
|
// 交易时间 |
|
|
|
String beginTransTimeStr = req.getBeginTransactionTime(); |
|
|
|
String endTransTimeStr = req.getEndTransactionTime(); |
|
|
|
if (StrUtil.isNotEmpty(beginTransTimeStr) && StrUtil.isNotBlank(endTransTimeStr)) { |
|
|
|
String pattern = "yyyy-MM-dd HH:mm:ss"; |
|
|
|
Date beginTransTime = DateUtil.parse(beginTransTimeStr, pattern); |
|
|
|
Date endTransTime = DateUtil.parse(endTransTimeStr, pattern); |
|
|
|
|
|
|
|
wrapper.between(true, BankStatement::getTransactionTime, beginTransTime.getTime(), endTransTime.getTime()); |
|
|
|
} |
|
|
|
|
|
|
|
// 交易金额 |
|
|
|
if (req.getBeginTransactionAmount() != null) { |
|
|
|
if (req.getEndTransactionAmount() != null |
|
|
|
&& req.getBeginTransactionAmount().compareTo(req.getEndTransactionAmount()) <= 0) { |
|
|
|
wrapper.between( |
|
|
|
BankStatement::getTransactionAmount, |
|
|
|
req.getBeginTransactionAmount(), |
|
|
|
req.getEndTransactionAmount()); |
|
|
|
} else { |
|
|
|
// 支持单边搜索,若开始区间填写1000,则搜索1000+,包括小于-1000的数据,结束区间填写1000,搜索小于1000的数据,包括大于-1000的数诫 |
|
|
|
BigDecimal begin = req.getBeginTransactionAmount(); |
|
|
|
BigDecimal end = req.getBeginTransactionAmount().negate(); |
|
|
|
if (begin.compareTo(end) > 0) { |
|
|
|
BigDecimal tmp = begin; |
|
|
|
begin = end; |
|
|
|
end = tmp; |
|
|
|
} |
|
|
|
|
|
|
|
BigDecimal finalBegin = begin; |
|
|
|
BigDecimal finalEnd = end; |
|
|
|
wrapper.not(w -> w.between(BankStatement::getTransactionAmount, finalBegin, finalEnd)); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 结束区间填写1000,搜索小于1000的数据,包括大于-1000的数诫 |
|
|
|
if (req.getEndTransactionAmount() != null) { |
|
|
|
BigDecimal begin = req.getEndTransactionAmount(); |
|
|
|
BigDecimal end = req.getEndTransactionAmount().negate(); |
|
|
|
if (begin.compareTo(end) > 0) { |
|
|
|
BigDecimal tmp = begin; |
|
|
|
begin = end; |
|
|
|
end = tmp; |
|
|
|
} |
|
|
|
|
|
|
|
wrapper.between(BankStatement::getTransactionAmount, begin, end); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 余额 |
|
|
|
if (req.getBeginBalance() != null) { |
|
|
|
if (req.getEndBalance() != null && req.getBeginBalance().compareTo(req.getEndBalance()) <= 0) { |
|
|
|
wrapper.between(BankStatement::getBalance, req.getBeginBalance(), req.getEndBalance()); |
|
|
|
} else { |
|
|
|
// 支持单达搜索,若开始区间填写1000,则搜索1000+,包括小于-1000的数据,结束区间填写1000,搜索小于1000的数据,包括大于-1000的数诫 |
|
|
|
BigDecimal begin = req.getBeginBalance(); |
|
|
|
BigDecimal end = begin.negate(); |
|
|
|
if (begin.compareTo(end) > 0) { |
|
|
|
BigDecimal tmp = begin; |
|
|
|
begin = end; |
|
|
|
end = tmp; |
|
|
|
} |
|
|
|
// 开始区间填写1000,则搜索1000+,包括小于-1000的数据 |
|
|
|
BigDecimal finalBegin = begin; |
|
|
|
BigDecimal finalEnd = end; |
|
|
|
wrapper.not(w -> w.between(BankStatement::getBalance, finalBegin, finalEnd)); |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (req.getEndBalance() != null) { |
|
|
|
BigDecimal begin = req.getEndBalance(); |
|
|
|
BigDecimal end = begin.negate(); |
|
|
|
|
|
|
|
if (begin.compareTo(end) > 0) { |
|
|
|
BigDecimal tmp = begin; |
|
|
|
begin = end; |
|
|
|
end = tmp; |
|
|
|
} |
|
|
|
|
|
|
|
wrapper.between(BankStatement::getBalance, begin, end); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 交易机构 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getTransactionInstitutions()), |
|
|
|
BankStatement::getTransactionInstitutions, |
|
|
|
req.getTransactionInstitutions()); |
|
|
|
// 对方户名 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getCounterpartyName()), |
|
|
|
BankStatement::getCounterpartyName, |
|
|
|
req.getCounterpartyName()); |
|
|
|
// 对方账号 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getCounterpartyAccount()), |
|
|
|
BankStatement::getCounterpartyAccount, |
|
|
|
req.getCounterpartyAccount()); |
|
|
|
// 对方行号 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getCounterpartyBankName()), |
|
|
|
BankStatement::getCounterpartyBankName, |
|
|
|
req.getCounterpartyBankName()); |
|
|
|
// 对方身份证号 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getCounterpartIdCardNo()), |
|
|
|
BankStatement::getCounterpartIdCardNo, |
|
|
|
req.getCounterpartIdCardNo()); |
|
|
|
// 摘要 |
|
|
|
wrapper.like(StrUtil.isNotEmpty(req.getSummary()), BankStatement::getSummary, escape(req.getSummary())); |
|
|
|
// 交易备注 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getTransRemark()), |
|
|
|
BankStatement::getTransRemark, |
|
|
|
escape(req.getTransRemark())); |
|
|
|
// 交易渠道 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getTransChannel()), BankStatement::getTransChannel, req.getTransChannel()); |
|
|
|
// 真实交易对手姓名 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getRealCounterpartyName()), |
|
|
|
BankStatement::getRealCounterpartyName, |
|
|
|
req.getRealCounterpartyName()); |
|
|
|
// 真实交易对手账号 |
|
|
|
wrapper.like( |
|
|
|
StrUtil.isNotEmpty(req.getRealCounterpartyAccount()), |
|
|
|
BankStatement::getRealCounterpartyAccount, |
|
|
|
req.getRealCounterpartyAccount()); |
|
|
|
// 备注 |
|
|
|
wrapper.like(StrUtil.isNotEmpty(req.getRemark()), BankStatement::getRemark, req.getRemark()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wrapper.orderByDesc("id"); |
|
|
|
|
|
|
|
SearchSourceBuilder searchSourceBuilder = esBsMapper.getSearchSourceBuilder(wrapper); |
|
|
|
return searchSourceBuilder; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String,Object> buildOAISearchSourceBuilder(GetOpeningAccountInfoListReq req){ |
|
|
|
|
|
|
|
GetOpeningAccountInfoListReq.OaiParams params = req.getParams(); |
|
|
@ -2278,6 +2478,53 @@ public class BankServiceImpl implements BankService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public JSONObject getFieldsLikeValueCount(GetBSFieldValueCountReq req) throws IOException { |
|
|
|
JSONObject resJson = new JSONObject(); |
|
|
|
SearchSourceBuilder searchSourceBuilder = buildLikeSearchSourceBuilder(req); |
|
|
|
String indexName = "dc_bank_statement"; |
|
|
|
List<String> fields = req.getFields(); |
|
|
|
for (String field : fields) { |
|
|
|
AggregationBuilder agg = AggregationBuilders.terms("groupBy_" + field) |
|
|
|
.field(field + ".keyword") |
|
|
|
.size(1000); |
|
|
|
searchSourceBuilder.aggregation(agg); |
|
|
|
} |
|
|
|
|
|
|
|
SearchRequest searchRequest = new SearchRequest(indexName); |
|
|
|
searchRequest.source(searchSourceBuilder); |
|
|
|
|
|
|
|
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); |
|
|
|
Aggregations aggregations = search.getAggregations(); |
|
|
|
// 获取name字段的聚合结果 |
|
|
|
Map<String, Aggregation> map = aggregations.asMap(); |
|
|
|
for (String field : fields) { |
|
|
|
String groupByField = "groupBy_" + field; |
|
|
|
if (map.containsKey(groupByField)) { |
|
|
|
Terms terms = (Terms) map.get(groupByField); |
|
|
|
List<? extends Terms.Bucket> buckets = terms.getBuckets(); |
|
|
|
List<StatisticsOption> tempList = new ArrayList<>(); |
|
|
|
for (Terms.Bucket bucket : buckets) { |
|
|
|
StatisticsOption statisticsOption = new StatisticsOption(); |
|
|
|
String value = bucket.getKey().toString(); |
|
|
|
statisticsOption.setLabel(StringUtils.isEmpty(value) ? "(空值)" : value); |
|
|
|
statisticsOption.setField(value); |
|
|
|
statisticsOption.setValue(value); |
|
|
|
statisticsOption.setCount(bucket.getDocCount()); |
|
|
|
tempList.add(statisticsOption); |
|
|
|
} |
|
|
|
|
|
|
|
tempList.sort(Comparator.comparing(StatisticsOption::getValue)); |
|
|
|
|
|
|
|
resJson.put(field, tempList); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return resJson; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void setTpBsCNameAndCounterpartMap(SearchHit hit, Map<String, |
|
|
|
Set<String>> tpBsCNameAndCardMap, Map<String, List<BankStatement>> tpBsCNameAndCounterpartMap){ |
|
|
|
threadPoolTaskExecutor.execute(() -> { |
|
|
|