From 387d631b57d2b197af42fae2def0392315e925c2 Mon Sep 17 00:00:00 2001 From: "583641232@qq.com" <583641232@qq.com> Date: Fri, 23 Aug 2024 16:59:44 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=A0=B9=E6=8D=AE=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=85=B3=E9=94=AE=E5=AD=97=E6=A8=A1=E7=B3=8A=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=EF=BC=8C=E8=BF=94=E5=9B=9E=E5=AD=97=E6=AE=B5=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/datacenter/BankController.java | 11 + .../datacenter/service/BankService.java | 2 + .../service/impl/BankServiceImpl.java | 247 ++++++++++++++++++ 3 files changed, 260 insertions(+) diff --git a/cas-admin/src/main/java/com/inscloudtech/web/controller/datacenter/BankController.java b/cas-admin/src/main/java/com/inscloudtech/web/controller/datacenter/BankController.java index 5cf8cec..0e5c523 100644 --- a/cas-admin/src/main/java/com/inscloudtech/web/controller/datacenter/BankController.java +++ b/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 { 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 6b505ae..71a168f 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 @@ -91,4 +91,6 @@ public interface BankService { List getBSListByCardHolderName(GetBSFieldValueCountReq req); void getTpBsCNameAndCardMap(GetBSFieldValueCountReq req, Map> tpBsCNameAndCardMap, Map> tpBsCNameAndCounterpartMap); + + JSONObject getFieldsLikeValueCount(GetBSFieldValueCountReq req) throws IOException; } 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 e4fcd00..b314d6f 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 @@ -689,6 +689,206 @@ public class BankServiceImpl implements BankService { return searchSourceBuilder; } + SearchSourceBuilder buildLikeSearchSourceBuilder(GetBSFieldValueCountReq req){ + + Map 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 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 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 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 map = aggregations.asMap(); + for (String field : fields) { + String groupByField = "groupBy_" + field; + if (map.containsKey(groupByField)) { + Terms terms = (Terms) map.get(groupByField); + List buckets = terms.getBuckets(); + List 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> tpBsCNameAndCardMap, Map> tpBsCNameAndCounterpartMap){ threadPoolTaskExecutor.execute(() -> {