summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwxs <[email protected]>2022-09-16 17:38:32 +0800
committerwangwei <[email protected]>2022-09-21 16:44:45 +0800
commit760e6ce1b5a975db160de409e88a8d15f0fcab9b (patch)
treedfc2309b38b825ac963deabff10f6fc25cbcb389
parent3382c5a45f1dc4d9326b77f2b8c65378c6296b6a (diff)
fix(GTPC推荐) Galaxy 实时推荐接口之GTP-C Mobile Identities和APNs相关TEID推荐(TSG-11935)(优化查询)359
-rw-r--r--src/main/java/com/mesalab/services/service/impl/RelationServiceImpl.java38
1 files changed, 31 insertions, 7 deletions
diff --git a/src/main/java/com/mesalab/services/service/impl/RelationServiceImpl.java b/src/main/java/com/mesalab/services/service/impl/RelationServiceImpl.java
index f0dfe7da..661da376 100644
--- a/src/main/java/com/mesalab/services/service/impl/RelationServiceImpl.java
+++ b/src/main/java/com/mesalab/services/service/impl/RelationServiceImpl.java
@@ -1,6 +1,7 @@
package com.mesalab.services.service.impl;
+import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
@@ -30,6 +31,7 @@ import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.util.*;
+import java.util.stream.Collectors;
import static java.util.stream.Collectors.joining;
@@ -79,7 +81,7 @@ public class RelationServiceImpl implements RelationService , EnvironmentAware {
private String generateQuerySql(ComDSLObject.Query query) {
List<ComDSLObject.Query.FilterBean> match = query.getParameters().getMatch();
- StringBuffer fieldWhere = new StringBuffer();
+ StringBuffer filter = new StringBuffer();
for (ComDSLObject.Query.FilterBean filterBean : match) {
match = new ArrayList<>();
if (StringUtil.equals(MatchEnum.REGEX.getType(), filterBean.getType())) {
@@ -88,13 +90,34 @@ public class RelationServiceImpl implements RelationService , EnvironmentAware {
ComDSLObject.Query.FilterBean bean = entry.getValue();
match.add(generateRowKey(bean));
}
- fieldWhere.append(parseMath(match));
+ filter.append(parseMath(match));
} else {
- match.add(filterBean);
- fieldWhere.append(parseMath(match));
+ match.add(generateRowKey(filterBean));
+ filter.append(parseMath(match));
}
}
+ StringBuffer sb = new StringBuffer(" AND (");
+ List<String> list = match.stream().filter(e -> !StringUtil.equals(e.getFieldKey(), "ROWKEY")).map(e -> e.getFieldKey()).distinct().collect(Collectors.toList());
+ for (String str : list) {
+ if (StringUtil.equals(str,"imei")){
+ sb.append("ROWKEY like '0%'");
+ } else if (StringUtil.equals(str,"imsi")){
+ sb.append("ROWKEY like '1%'");
+ } else if (StringUtil.equals(str,"phone_number")){
+ sb.append("ROWKEY like '2%'");
+ } else if (StringUtil.equals(str,"apn")){
+ sb.append("ROWKEY like '3%'");
+ }
+ sb.append(" OR ");
+ }
+ StringBuffer fieldWhere;
+ if (CollectionUtil.isNotEmpty(list)) {
+ fieldWhere = sb.delete(sb.length() - 3, sb.length()).append(")").append(filter);
+ } else {
+ fieldWhere = filter;
+ }
+
String sql = String.format(Objects.requireNonNull(env.getProperty("GTPC_KNOWLEDGE_BASE")), fieldWhere, entityConfigSource.getTopGTPCDefaultSize());
log.info("real time relation gtpc query sql: {}", sql);
return sql;
@@ -106,8 +129,9 @@ public class RelationServiceImpl implements RelationService , EnvironmentAware {
//Phone Number,APN 倒排
String fieldKey = filterBean.getFieldKey();
List<String> fieldValues = filterBean.getFieldValues();
- //imei,imsi前缀匹配查询时,应使用Row Key进行筛选
- if (StringUtil.equals(filterBean.getType(), MatchEnum.PREFIX.getType())
+ String type = filterBean.getType();
+ //imei,imsi前缀匹配查询时,应使用Row Key进行筛选
+ if (StringUtil.equals(type, MatchEnum.PREFIX.getType())
&& (StringUtil.equals(fieldKey, "imei") || StringUtil.equals(fieldKey, "imsi"))) {
if (StringUtil.equals(fieldKey, "imei")) {
@@ -123,7 +147,7 @@ public class RelationServiceImpl implements RelationService , EnvironmentAware {
}
filterBean.setFieldKey("ROWKEY");
//phone_number,apn 后缀匹配查询时,应使用Row Key进行筛选
- } else if (StringUtil.equals(filterBean.getType(), MatchEnum.SUFFIX.getType())
+ } else if (StringUtil.equals(type, MatchEnum.SUFFIX.getType())
&& (StringUtil.equals(fieldKey, "phone_number") || StringUtil.equals(fieldKey, "apn"))) {
for (int i = 0; i < fieldValues.size(); i++) {
fieldValues.set(i, new StringBuffer(fieldValues.get(i)).reverse().toString());