Browse Source

根据字段关键字模糊查询,返回字段统计值

master
583641232@qq.com 1 year ago
parent
commit
387d631b57
  1. 11
      cas-admin/src/main/java/com/inscloudtech/web/controller/datacenter/BankController.java
  2. 2
      cas-system/src/main/java/com/inscloudtech/datacenter/service/BankService.java
  3. 247
      cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java

11
cas-admin/src/main/java/com/inscloudtech/web/controller/datacenter/BankController.java

@ -308,6 +308,17 @@ public class BankController extends BaseController {
return R.ok(bankService.getFieldsValueCount(req));
}
/**
* 根据字段关键字模糊查询返回字段统计值
* @param req
* @return
* @throws IOException
*/
@PostMapping("/getFieldsLikeValueCount")
public R getFieldsLikeValueCount(@RequestBody GetBSFieldValueCountReq req) throws IOException {
return R.ok(bankService.getFieldsLikeValueCount(req));
}
//"查询字段统计值")
@PostMapping("/oai/getFieldsValueCount")
public R getFieldsValueCountForOAI(@RequestBody GetOpeningAccountInfoListReq req) throws IOException {

2
cas-system/src/main/java/com/inscloudtech/datacenter/service/BankService.java

@ -91,4 +91,6 @@ public interface BankService {
List<BankStatement> getBSListByCardHolderName(GetBSFieldValueCountReq req);
void getTpBsCNameAndCardMap(GetBSFieldValueCountReq req, Map<String, Set<String>> tpBsCNameAndCardMap, Map<String, List<BankStatement>> tpBsCNameAndCounterpartMap);
JSONObject getFieldsLikeValueCount(GetBSFieldValueCountReq req) throws IOException;
}

247
cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java

@ -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(() -> {

Loading…
Cancel
Save