diff options
| author | wxs <[email protected]> | 2022-09-16 17:38:32 +0800 |
|---|---|---|
| committer | wangwei <[email protected]> | 2022-09-21 16:44:45 +0800 |
| commit | 760e6ce1b5a975db160de409e88a8d15f0fcab9b (patch) | |
| tree | dfc2309b38b825ac963deabff10f6fc25cbcb389 | |
| parent | 3382c5a45f1dc4d9326b77f2b8c65378c6296b6a (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.java | 38 |
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()); |
