mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 04:27:39 +00:00
(improvement)(headless) Remove redundant user dimensions in demo data (#663)
Co-authored-by: jolunoluo
This commit is contained in:
@@ -1,11 +1,15 @@
|
|||||||
package com.tencent.supersonic.auth.api.authentication.pojo;
|
package com.tencent.supersonic.auth.api.authentication.pojo;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
public class Organization {
|
public class Organization {
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
|
|||||||
@@ -44,7 +44,17 @@ public class DefaultUserAdaptor implements UserAdaptor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Organization> getOrganizationTree() {
|
public List<Organization> getOrganizationTree() {
|
||||||
return Lists.newArrayList();
|
Organization superSonic = new Organization("1", "0",
|
||||||
|
"Supersonic", "SuperSonic", Lists.newArrayList(), true);
|
||||||
|
Organization hr = new Organization("2", "1",
|
||||||
|
"Hr", "Supersonic/Hr", Lists.newArrayList(), false);
|
||||||
|
Organization sales = new Organization("3", "1",
|
||||||
|
"Sales", "Supersonic/Sales", Lists.newArrayList(), false);
|
||||||
|
Organization marketing = new Organization("4", "1",
|
||||||
|
"Marketing", "Supersonic/Marketing", Lists.newArrayList(), false);
|
||||||
|
List<Organization> subOrganization = Lists.newArrayList(hr, sales, marketing);
|
||||||
|
superSonic.setSubOrganizations(subOrganization);
|
||||||
|
return Lists.newArrayList(superSonic);
|
||||||
}
|
}
|
||||||
|
|
||||||
private User convert(UserDO userDO) {
|
private User convert(UserDO userDO) {
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package com.tencent.supersonic.headless.api.pojo;
|
package com.tencent.supersonic.headless.api.pojo;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
public class FieldParam {
|
public class FieldParam {
|
||||||
|
|
||||||
private String fieldName;
|
private String fieldName;
|
||||||
|
|||||||
@@ -22,12 +22,21 @@ public class Identify {
|
|||||||
|
|
||||||
private List<String> entityNames;
|
private List<String> entityNames;
|
||||||
|
|
||||||
|
private Integer isCreateDimension = 0;
|
||||||
|
|
||||||
public Identify(String name, String type, String bizName) {
|
public Identify(String name, String type, String bizName) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.bizName = bizName;
|
this.bizName = bizName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Identify(String name, String type, String bizName, Integer isCreateDimension) {
|
||||||
|
this.name = name;
|
||||||
|
this.type = type;
|
||||||
|
this.bizName = bizName;
|
||||||
|
this.isCreateDimension = isCreateDimension;
|
||||||
|
}
|
||||||
|
|
||||||
public String getFieldName() {
|
public String getFieldName() {
|
||||||
return bizName;
|
return bizName;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,6 @@ import com.tencent.supersonic.common.util.ContextUtils;
|
|||||||
import com.tencent.supersonic.common.util.DateModeUtils;
|
import com.tencent.supersonic.common.util.DateModeUtils;
|
||||||
import com.tencent.supersonic.common.util.SqlFilterUtils;
|
import com.tencent.supersonic.common.util.SqlFilterUtils;
|
||||||
import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper;
|
import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.sf.jsqlparser.JSQLParserException;
|
import net.sf.jsqlparser.JSQLParserException;
|
||||||
@@ -39,6 +35,11 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.apache.logging.log4j.util.Strings;
|
import org.apache.logging.log4j.util.Strings;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -248,7 +249,7 @@ public class QueryStructReq extends SemanticQueryReq {
|
|||||||
//6.Set where
|
//6.Set where
|
||||||
List<Filter> dimensionFilters = queryStructReq.getDimensionFilters();
|
List<Filter> dimensionFilters = queryStructReq.getDimensionFilters();
|
||||||
SqlFilterUtils sqlFilterUtils = ContextUtils.getBean(SqlFilterUtils.class);
|
SqlFilterUtils sqlFilterUtils = ContextUtils.getBean(SqlFilterUtils.class);
|
||||||
String whereClause = sqlFilterUtils.getWhereClause(dimensionFilters, false);
|
String whereClause = sqlFilterUtils.getWhereClause(dimensionFilters);
|
||||||
|
|
||||||
String sql = select.toString();
|
String sql = select.toString();
|
||||||
if (StringUtils.isNotBlank(whereClause)) {
|
if (StringUtils.isNotBlank(whereClause)) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import com.tencent.supersonic.headless.api.request.BatchDownloadReq;
|
|||||||
import com.tencent.supersonic.headless.api.request.DownloadStructReq;
|
import com.tencent.supersonic.headless.api.request.DownloadStructReq;
|
||||||
import com.tencent.supersonic.headless.api.enums.SemanticType;
|
import com.tencent.supersonic.headless.api.enums.SemanticType;
|
||||||
import com.tencent.supersonic.headless.api.request.ModelSchemaFilterReq;
|
import com.tencent.supersonic.headless.api.request.ModelSchemaFilterReq;
|
||||||
|
import com.tencent.supersonic.headless.api.request.QuerySqlReq;
|
||||||
import com.tencent.supersonic.headless.api.response.DimSchemaResp;
|
import com.tencent.supersonic.headless.api.response.DimSchemaResp;
|
||||||
import com.tencent.supersonic.headless.api.response.DimensionResp;
|
import com.tencent.supersonic.headless.api.response.DimensionResp;
|
||||||
import com.tencent.supersonic.headless.api.response.MetricResp;
|
import com.tencent.supersonic.headless.api.response.MetricResp;
|
||||||
@@ -72,7 +73,8 @@ public class DownloadServiceImpl implements DownloadService {
|
|||||||
String fileName = String.format("%s_%s.xlsx", "supersonic", DateUtils.format(new Date(), DateUtils.FORMAT));
|
String fileName = String.format("%s_%s.xlsx", "supersonic", DateUtils.format(new Date(), DateUtils.FORMAT));
|
||||||
File file = FileUtils.createTmpFile(fileName);
|
File file = FileUtils.createTmpFile(fileName);
|
||||||
try {
|
try {
|
||||||
SemanticQueryResp queryResult = queryService.queryByStructWithAuth(downloadStructReq, user);
|
QuerySqlReq querySqlReq = downloadStructReq.convert(downloadStructReq);
|
||||||
|
SemanticQueryResp queryResult = (SemanticQueryResp) queryService.queryBySql(querySqlReq, user);
|
||||||
DataDownload dataDownload = buildDataDownload(queryResult, downloadStructReq);
|
DataDownload dataDownload = buildDataDownload(queryResult, downloadStructReq);
|
||||||
EasyExcel.write(file).sheet("Sheet1").head(dataDownload.getHeaders()).doWrite(dataDownload.getData());
|
EasyExcel.write(file).sheet("Sheet1").head(dataDownload.getHeaders()).doWrite(dataDownload.getData());
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import com.tencent.supersonic.common.pojo.enums.StatusEnum;
|
|||||||
import com.tencent.supersonic.common.util.BeanMapper;
|
import com.tencent.supersonic.common.util.BeanMapper;
|
||||||
import com.tencent.supersonic.common.util.JsonUtil;
|
import com.tencent.supersonic.common.util.JsonUtil;
|
||||||
import com.tencent.supersonic.headless.api.enums.DimensionType;
|
import com.tencent.supersonic.headless.api.enums.DimensionType;
|
||||||
import com.tencent.supersonic.headless.api.enums.IdentifyType;
|
|
||||||
import com.tencent.supersonic.headless.api.enums.MetricDefineType;
|
import com.tencent.supersonic.headless.api.enums.MetricDefineType;
|
||||||
import com.tencent.supersonic.headless.api.enums.SemanticType;
|
import com.tencent.supersonic.headless.api.enums.SemanticType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Dim;
|
import com.tencent.supersonic.headless.api.pojo.Dim;
|
||||||
@@ -153,18 +152,38 @@ public class ModelConverter {
|
|||||||
&& !dim.getType().equalsIgnoreCase(DimensionType.time.name());
|
&& !dim.getType().equalsIgnoreCase(DimensionType.time.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isCreateDimension(Identify identify) {
|
||||||
|
return identify.getIsCreateDimension() == 1
|
||||||
|
&& StringUtils.isNotBlank(identify.getName());
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean isCreateMetric(Measure measure) {
|
private static boolean isCreateMetric(Measure measure) {
|
||||||
return measure.getIsCreateMetric() == 1
|
return measure.getIsCreateMetric() == 1
|
||||||
&& StringUtils.isNotBlank(measure.getName());
|
&& StringUtils.isNotBlank(measure.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Dim> getDimToCreateDimension(ModelDetail modelDetail) {
|
public static List<Dim> getDimToCreateDimension(ModelDetail modelDetail) {
|
||||||
|
if (CollectionUtils.isEmpty(modelDetail.getDimensions())) {
|
||||||
|
return Lists.newArrayList();
|
||||||
|
}
|
||||||
return modelDetail.getDimensions().stream()
|
return modelDetail.getDimensions().stream()
|
||||||
.filter(ModelConverter::isCreateDimension)
|
.filter(ModelConverter::isCreateDimension)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<Identify> getIdentityToCreateDimension(ModelDetail modelDetail) {
|
||||||
|
if (CollectionUtils.isEmpty(modelDetail.getIdentifiers())) {
|
||||||
|
return Lists.newArrayList();
|
||||||
|
}
|
||||||
|
return modelDetail.getIdentifiers().stream()
|
||||||
|
.filter(ModelConverter::isCreateDimension)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Measure> getMeasureToCreateMetric(ModelDetail modelDetail) {
|
public static List<Measure> getMeasureToCreateMetric(ModelDetail modelDetail) {
|
||||||
|
if (CollectionUtils.isEmpty(modelDetail.getMeasures())) {
|
||||||
|
return Lists.newArrayList();
|
||||||
|
}
|
||||||
return modelDetail.getMeasures().stream()
|
return modelDetail.getMeasures().stream()
|
||||||
.filter(ModelConverter::isCreateMetric)
|
.filter(ModelConverter::isCreateMetric)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
@@ -179,13 +198,11 @@ public class ModelConverter {
|
|||||||
dimensionReqs = dims.stream().filter(dim -> StringUtils.isNotBlank(dim.getName()))
|
dimensionReqs = dims.stream().filter(dim -> StringUtils.isNotBlank(dim.getName()))
|
||||||
.map(dim -> convert(dim, modelDO)).collect(Collectors.toList());
|
.map(dim -> convert(dim, modelDO)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
List<Identify> identifies = modelDetail.getIdentifiers();
|
List<Identify> identifies = getIdentityToCreateDimension(modelDetail);
|
||||||
if (CollectionUtils.isEmpty(identifies)) {
|
if (CollectionUtils.isEmpty(identifies)) {
|
||||||
return dimensionReqs;
|
return dimensionReqs;
|
||||||
}
|
}
|
||||||
dimensionReqs.addAll(identifies.stream()
|
dimensionReqs.addAll(identifies.stream()
|
||||||
.filter(i -> i.getType().equalsIgnoreCase(IdentifyType.primary.name()))
|
|
||||||
.filter(i -> StringUtils.isNotBlank(i.getName()))
|
|
||||||
.map(identify -> convert(identify, modelDO)).collect(Collectors.toList()));
|
.map(identify -> convert(identify, modelDO)).collect(Collectors.toList()));
|
||||||
return dimensionReqs;
|
return dimensionReqs;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,10 +31,6 @@ import com.tencent.supersonic.common.pojo.SysParameter;
|
|||||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||||
import com.tencent.supersonic.common.service.SysParameterService;
|
import com.tencent.supersonic.common.service.SysParameterService;
|
||||||
import com.tencent.supersonic.common.util.JsonUtil;
|
import com.tencent.supersonic.common.util.JsonUtil;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
@@ -43,6 +39,11 @@ import org.springframework.boot.CommandLineRunner;
|
|||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Order(3)
|
@Order(3)
|
||||||
@@ -185,7 +186,7 @@ public class ChatDemoLoader implements CommandLineRunner {
|
|||||||
|
|
||||||
ChatDetailConfigReq chatDetailConfig = new ChatDetailConfigReq();
|
ChatDetailConfigReq chatDetailConfig = new ChatDetailConfigReq();
|
||||||
ChatDefaultConfigReq chatDefaultConfigDetail = new ChatDefaultConfigReq();
|
ChatDefaultConfigReq chatDefaultConfigDetail = new ChatDefaultConfigReq();
|
||||||
List<Long> dimensionIds0 = Collections.singletonList(3L);
|
List<Long> dimensionIds0 = new ArrayList<>();
|
||||||
List<Long> metricIds0 = Arrays.asList(1L, 2L);
|
List<Long> metricIds0 = Arrays.asList(1L, 2L);
|
||||||
chatDefaultConfigDetail.setDimensionIds(dimensionIds0);
|
chatDefaultConfigDetail.setDimensionIds(dimensionIds0);
|
||||||
chatDefaultConfigDetail.setMetricIds(metricIds0);
|
chatDefaultConfigDetail.setMetricIds(metricIds0);
|
||||||
@@ -198,7 +199,7 @@ public class ChatDemoLoader implements CommandLineRunner {
|
|||||||
|
|
||||||
ChatAggConfigReq chatAggConfig = new ChatAggConfigReq();
|
ChatAggConfigReq chatAggConfig = new ChatAggConfigReq();
|
||||||
ChatDefaultConfigReq chatDefaultConfigAgg = new ChatDefaultConfigReq();
|
ChatDefaultConfigReq chatDefaultConfigAgg = new ChatDefaultConfigReq();
|
||||||
List<Long> dimensionIds1 = Arrays.asList(3L);
|
List<Long> dimensionIds1 = new ArrayList<>();
|
||||||
List<Long> metricIds1 = Arrays.asList(1L, 2L);
|
List<Long> metricIds1 = Arrays.asList(1L, 2L);
|
||||||
chatDefaultConfigAgg.setDimensionIds(dimensionIds1);
|
chatDefaultConfigAgg.setDimensionIds(dimensionIds1);
|
||||||
chatDefaultConfigAgg.setMetricIds(metricIds1);
|
chatDefaultConfigAgg.setMetricIds(metricIds1);
|
||||||
@@ -224,8 +225,8 @@ public class ChatDemoLoader implements CommandLineRunner {
|
|||||||
|
|
||||||
ChatDetailConfigReq chatDetailConfig = new ChatDetailConfigReq();
|
ChatDetailConfigReq chatDetailConfig = new ChatDetailConfigReq();
|
||||||
ChatDefaultConfigReq chatDefaultConfigDetail = new ChatDefaultConfigReq();
|
ChatDefaultConfigReq chatDefaultConfigDetail = new ChatDefaultConfigReq();
|
||||||
List<Long> dimensionIds0 = Arrays.asList(4L, 5L);
|
List<Long> dimensionIds0 = Collections.singletonList(3L);
|
||||||
List<Long> metricIds0 = Arrays.asList(3L);
|
List<Long> metricIds0 = Collections.singletonList(4L);
|
||||||
chatDefaultConfigDetail.setDimensionIds(dimensionIds0);
|
chatDefaultConfigDetail.setDimensionIds(dimensionIds0);
|
||||||
chatDefaultConfigDetail.setMetricIds(metricIds0);
|
chatDefaultConfigDetail.setMetricIds(metricIds0);
|
||||||
chatDefaultConfigDetail.setUnit(7);
|
chatDefaultConfigDetail.setUnit(7);
|
||||||
@@ -237,8 +238,8 @@ public class ChatDemoLoader implements CommandLineRunner {
|
|||||||
|
|
||||||
ChatAggConfigReq chatAggConfig = new ChatAggConfigReq();
|
ChatAggConfigReq chatAggConfig = new ChatAggConfigReq();
|
||||||
ChatDefaultConfigReq chatDefaultConfigAgg = new ChatDefaultConfigReq();
|
ChatDefaultConfigReq chatDefaultConfigAgg = new ChatDefaultConfigReq();
|
||||||
List<Long> dimensionIds1 = Arrays.asList(4L, 5L);
|
List<Long> dimensionIds1 = Collections.singletonList(3L);
|
||||||
List<Long> metricIds1 = Arrays.asList(3L);
|
List<Long> metricIds1 = Collections.singletonList(4L);
|
||||||
chatDefaultConfigAgg.setDimensionIds(dimensionIds1);
|
chatDefaultConfigAgg.setDimensionIds(dimensionIds1);
|
||||||
chatDefaultConfigAgg.setMetricIds(metricIds1);
|
chatDefaultConfigAgg.setMetricIds(metricIds1);
|
||||||
chatDefaultConfigAgg.setUnit(7);
|
chatDefaultConfigAgg.setUnit(7);
|
||||||
@@ -263,8 +264,8 @@ public class ChatDemoLoader implements CommandLineRunner {
|
|||||||
|
|
||||||
ChatDetailConfigReq chatDetailConfig = new ChatDetailConfigReq();
|
ChatDetailConfigReq chatDetailConfig = new ChatDetailConfigReq();
|
||||||
ChatDefaultConfigReq chatDefaultConfigDetail = new ChatDefaultConfigReq();
|
ChatDefaultConfigReq chatDefaultConfigDetail = new ChatDefaultConfigReq();
|
||||||
List<Long> dimensionIds0 = Arrays.asList(6L, 7L, 8L, 9L);
|
List<Long> dimensionIds0 = Arrays.asList(4L, 5L, 6L, 7L);
|
||||||
List<Long> metricIds0 = Arrays.asList(4L);
|
List<Long> metricIds0 = Arrays.asList(5L);
|
||||||
chatDefaultConfigDetail.setDimensionIds(dimensionIds0);
|
chatDefaultConfigDetail.setDimensionIds(dimensionIds0);
|
||||||
chatDefaultConfigDetail.setMetricIds(metricIds0);
|
chatDefaultConfigDetail.setMetricIds(metricIds0);
|
||||||
chatDefaultConfigDetail.setUnit(7);
|
chatDefaultConfigDetail.setUnit(7);
|
||||||
@@ -276,8 +277,8 @@ public class ChatDemoLoader implements CommandLineRunner {
|
|||||||
|
|
||||||
ChatAggConfigReq chatAggConfig = new ChatAggConfigReq();
|
ChatAggConfigReq chatAggConfig = new ChatAggConfigReq();
|
||||||
ChatDefaultConfigReq chatDefaultConfigAgg = new ChatDefaultConfigReq();
|
ChatDefaultConfigReq chatDefaultConfigAgg = new ChatDefaultConfigReq();
|
||||||
List<Long> dimensionIds1 = Arrays.asList(6L, 7L, 8L, 9L);
|
List<Long> dimensionIds1 = Arrays.asList(4L, 4L, 6L, 7L);
|
||||||
List<Long> metricIds1 = Arrays.asList(4L);
|
List<Long> metricIds1 = Arrays.asList(5L);
|
||||||
chatDefaultConfigAgg.setDimensionIds(dimensionIds1);
|
chatDefaultConfigAgg.setDimensionIds(dimensionIds1);
|
||||||
chatDefaultConfigAgg.setMetricIds(metricIds1);
|
chatDefaultConfigAgg.setMetricIds(metricIds1);
|
||||||
chatDefaultConfigAgg.setUnit(7);
|
chatDefaultConfigAgg.setUnit(7);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import com.tencent.supersonic.headless.api.enums.MetricDefineType;
|
|||||||
import com.tencent.supersonic.headless.api.enums.SemanticType;
|
import com.tencent.supersonic.headless.api.enums.SemanticType;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Dim;
|
import com.tencent.supersonic.headless.api.pojo.Dim;
|
||||||
import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams;
|
import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.DrillDownDimension;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Field;
|
import com.tencent.supersonic.headless.api.pojo.Field;
|
||||||
import com.tencent.supersonic.headless.api.pojo.FieldParam;
|
import com.tencent.supersonic.headless.api.pojo.FieldParam;
|
||||||
import com.tencent.supersonic.headless.api.pojo.Identify;
|
import com.tencent.supersonic.headless.api.pojo.Identify;
|
||||||
@@ -29,6 +30,7 @@ import com.tencent.supersonic.headless.api.pojo.MetricDefineByMeasureParams;
|
|||||||
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMetricParams;
|
import com.tencent.supersonic.headless.api.pojo.MetricDefineByMetricParams;
|
||||||
import com.tencent.supersonic.headless.api.pojo.MetricParam;
|
import com.tencent.supersonic.headless.api.pojo.MetricParam;
|
||||||
import com.tencent.supersonic.headless.api.pojo.ModelDetail;
|
import com.tencent.supersonic.headless.api.pojo.ModelDetail;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.RelateDimension;
|
||||||
import com.tencent.supersonic.headless.api.request.DatabaseReq;
|
import com.tencent.supersonic.headless.api.request.DatabaseReq;
|
||||||
import com.tencent.supersonic.headless.api.request.DimensionReq;
|
import com.tencent.supersonic.headless.api.request.DimensionReq;
|
||||||
import com.tencent.supersonic.headless.api.request.DomainReq;
|
import com.tencent.supersonic.headless.api.request.DomainReq;
|
||||||
@@ -88,6 +90,7 @@ public class ModelDemoDataLoader {
|
|||||||
addModel_4();
|
addModel_4();
|
||||||
updateDimension();
|
updateDimension();
|
||||||
updateMetric();
|
updateMetric();
|
||||||
|
updateMetric_pv();
|
||||||
addAuthGroup_1();
|
addAuthGroup_1();
|
||||||
addAuthGroup_2();
|
addAuthGroup_2();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -140,7 +143,7 @@ public class ModelDemoDataLoader {
|
|||||||
modelReq.setAdminOrgs(Collections.emptyList());
|
modelReq.setAdminOrgs(Collections.emptyList());
|
||||||
ModelDetail modelDetail = new ModelDetail();
|
ModelDetail modelDetail = new ModelDetail();
|
||||||
List<Identify> identifiers = new ArrayList<>();
|
List<Identify> identifiers = new ArrayList<>();
|
||||||
identifiers.add(new Identify("用户", IdentifyType.primary.name(), "user_name"));
|
identifiers.add(new Identify("用户", IdentifyType.primary.name(), "user_name", 1));
|
||||||
modelDetail.setIdentifiers(identifiers);
|
modelDetail.setIdentifiers(identifiers);
|
||||||
|
|
||||||
List<Dim> dimensions = new ArrayList<>();
|
List<Dim> dimensions = new ArrayList<>();
|
||||||
@@ -171,7 +174,7 @@ public class ModelDemoDataLoader {
|
|||||||
modelReq.setAdminOrgs(Collections.emptyList());
|
modelReq.setAdminOrgs(Collections.emptyList());
|
||||||
List<Identify> identifiers = new ArrayList<>();
|
List<Identify> identifiers = new ArrayList<>();
|
||||||
ModelDetail modelDetail = new ModelDetail();
|
ModelDetail modelDetail = new ModelDetail();
|
||||||
identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "s2_pv_uv_statis_user_name"));
|
identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "user_name", 0));
|
||||||
modelDetail.setIdentifiers(identifiers);
|
modelDetail.setIdentifiers(identifiers);
|
||||||
|
|
||||||
List<Dim> dimensions = new ArrayList<>();
|
List<Dim> dimensions = new ArrayList<>();
|
||||||
@@ -189,13 +192,13 @@ public class ModelDemoDataLoader {
|
|||||||
measures.add(measure2);
|
measures.add(measure2);
|
||||||
modelDetail.setMeasures(measures);
|
modelDetail.setMeasures(measures);
|
||||||
List<Field> fields = Lists.newArrayList();
|
List<Field> fields = Lists.newArrayList();
|
||||||
fields.add(Field.builder().fieldName("s2_pv_uv_statis_user_name").dataType("Varchar").build());
|
fields.add(Field.builder().fieldName("user_name").dataType("Varchar").build());
|
||||||
fields.add(Field.builder().fieldName("imp_date").dataType("Date").build());
|
fields.add(Field.builder().fieldName("imp_date").dataType("Date").build());
|
||||||
fields.add(Field.builder().fieldName("page").dataType("Varchar").build());
|
fields.add(Field.builder().fieldName("page").dataType("Varchar").build());
|
||||||
fields.add(Field.builder().fieldName("pv").dataType("Long").build());
|
fields.add(Field.builder().fieldName("pv").dataType("Long").build());
|
||||||
fields.add(Field.builder().fieldName("user_id").dataType("Varchar").build());
|
fields.add(Field.builder().fieldName("user_id").dataType("Varchar").build());
|
||||||
modelDetail.setFields(fields);
|
modelDetail.setFields(fields);
|
||||||
modelDetail.setSqlQuery("SELECT imp_date, user_name as s2_pv_uv_statis_user_name, page, 1 as pv, "
|
modelDetail.setSqlQuery("SELECT imp_date, user_name, page, 1 as pv, "
|
||||||
+ "user_name as user_id FROM s2_pv_uv_statis");
|
+ "user_name as user_id FROM s2_pv_uv_statis");
|
||||||
modelDetail.setQueryType("sql_query");
|
modelDetail.setQueryType("sql_query");
|
||||||
modelReq.setDomainId(1L);
|
modelReq.setDomainId(1L);
|
||||||
@@ -215,7 +218,7 @@ public class ModelDemoDataLoader {
|
|||||||
modelReq.setAdminOrgs(Collections.emptyList());
|
modelReq.setAdminOrgs(Collections.emptyList());
|
||||||
List<Identify> identifiers = new ArrayList<>();
|
List<Identify> identifiers = new ArrayList<>();
|
||||||
ModelDetail modelDetail = new ModelDetail();
|
ModelDetail modelDetail = new ModelDetail();
|
||||||
identifiers.add(new Identify("用户名称", IdentifyType.primary.name(), "stay_hours_user_name"));
|
identifiers.add(new Identify("用户", IdentifyType.primary.name(), "user_name", 0));
|
||||||
modelDetail.setIdentifiers(identifiers);
|
modelDetail.setIdentifiers(identifiers);
|
||||||
|
|
||||||
List<Dim> dimensions = new ArrayList<>();
|
List<Dim> dimensions = new ArrayList<>();
|
||||||
@@ -232,13 +235,12 @@ public class ModelDemoDataLoader {
|
|||||||
measures.add(measure1);
|
measures.add(measure1);
|
||||||
modelDetail.setMeasures(measures);
|
modelDetail.setMeasures(measures);
|
||||||
List<Field> fields = Lists.newArrayList();
|
List<Field> fields = Lists.newArrayList();
|
||||||
fields.add(Field.builder().fieldName("stay_hours_user_name").dataType("Varchar").build());
|
fields.add(Field.builder().fieldName("user_name").dataType("Varchar").build());
|
||||||
fields.add(Field.builder().fieldName("imp_date").dataType("Date").build());
|
fields.add(Field.builder().fieldName("imp_date").dataType("Date").build());
|
||||||
fields.add(Field.builder().fieldName("page").dataType("Varchar").build());
|
fields.add(Field.builder().fieldName("page").dataType("Varchar").build());
|
||||||
fields.add(Field.builder().fieldName("stay_hours").dataType("Double").build());
|
fields.add(Field.builder().fieldName("stay_hours").dataType("Double").build());
|
||||||
modelDetail.setFields(fields);
|
modelDetail.setFields(fields);
|
||||||
modelDetail.setSqlQuery(
|
modelDetail.setSqlQuery("select imp_date,user_name,stay_hours,page from s2_stay_time_statis");
|
||||||
"select imp_date,user_name as stay_hours_user_name,stay_hours,page from s2_stay_time_statis");
|
|
||||||
modelDetail.setQueryType("sql_query");
|
modelDetail.setQueryType("sql_query");
|
||||||
modelReq.setDomainId(1L);
|
modelReq.setDomainId(1L);
|
||||||
modelReq.setModelDetail(modelDetail);
|
modelReq.setModelDetail(modelDetail);
|
||||||
@@ -247,7 +249,7 @@ public class ModelDemoDataLoader {
|
|||||||
|
|
||||||
public void addModelRela_1() {
|
public void addModelRela_1() {
|
||||||
List<JoinCondition> joinConditions = Lists.newArrayList();
|
List<JoinCondition> joinConditions = Lists.newArrayList();
|
||||||
joinConditions.add(new JoinCondition("user_name", "s2_pv_uv_statis_user_name", FilterOperatorEnum.EQUALS));
|
joinConditions.add(new JoinCondition("user_name", "user_name", FilterOperatorEnum.EQUALS));
|
||||||
ModelRela modelRelaReq = new ModelRela();
|
ModelRela modelRelaReq = new ModelRela();
|
||||||
modelRelaReq.setDomainId(1L);
|
modelRelaReq.setDomainId(1L);
|
||||||
modelRelaReq.setFromModelId(1L);
|
modelRelaReq.setFromModelId(1L);
|
||||||
@@ -259,7 +261,7 @@ public class ModelDemoDataLoader {
|
|||||||
|
|
||||||
public void addModelRela_2() {
|
public void addModelRela_2() {
|
||||||
List<JoinCondition> joinConditions = Lists.newArrayList();
|
List<JoinCondition> joinConditions = Lists.newArrayList();
|
||||||
joinConditions.add(new JoinCondition("user_name", "stay_hours_user_name", FilterOperatorEnum.EQUALS));
|
joinConditions.add(new JoinCondition("user_name", "user_name", FilterOperatorEnum.EQUALS));
|
||||||
ModelRela modelRelaReq = new ModelRela();
|
ModelRela modelRelaReq = new ModelRela();
|
||||||
modelRelaReq.setDomainId(1L);
|
modelRelaReq.setDomainId(1L);
|
||||||
modelRelaReq.setFromModelId(1L);
|
modelRelaReq.setFromModelId(1L);
|
||||||
@@ -295,7 +297,7 @@ public class ModelDemoDataLoader {
|
|||||||
modelReq.setAdminOrgs(Collections.emptyList());
|
modelReq.setAdminOrgs(Collections.emptyList());
|
||||||
ModelDetail modelDetail = new ModelDetail();
|
ModelDetail modelDetail = new ModelDetail();
|
||||||
List<Identify> identifiers = new ArrayList<>();
|
List<Identify> identifiers = new ArrayList<>();
|
||||||
Identify identify = new Identify("歌手名", IdentifyType.primary.name(), "singer_name");
|
Identify identify = new Identify("歌手名", IdentifyType.primary.name(), "singer_name", 1);
|
||||||
identify.setEntityNames(Lists.newArrayList("歌手", "艺人"));
|
identify.setEntityNames(Lists.newArrayList("歌手", "艺人"));
|
||||||
identifiers.add(identify);
|
identifiers.add(identify);
|
||||||
modelDetail.setIdentifiers(identifiers);
|
modelDetail.setIdentifiers(identifiers);
|
||||||
@@ -325,9 +327,8 @@ public class ModelDemoDataLoader {
|
|||||||
|
|
||||||
public void updateDimension() throws Exception {
|
public void updateDimension() throws Exception {
|
||||||
DimensionReq dimensionReq = new DimensionReq();
|
DimensionReq dimensionReq = new DimensionReq();
|
||||||
dimensionReq.setModelId(1L);
|
|
||||||
dimensionReq.setType(DimensionType.categorical.name());
|
dimensionReq.setType(DimensionType.categorical.name());
|
||||||
dimensionReq.setId(4L);
|
dimensionReq.setId(3L);
|
||||||
dimensionReq.setName("页面");
|
dimensionReq.setName("页面");
|
||||||
dimensionReq.setBizName("page");
|
dimensionReq.setBizName("page");
|
||||||
dimensionReq.setModelId(3L);
|
dimensionReq.setModelId(3L);
|
||||||
@@ -359,6 +360,26 @@ public class ModelDemoDataLoader {
|
|||||||
metricTypeParams.setMeasures(measures);
|
metricTypeParams.setMeasures(measures);
|
||||||
metricReq.setMetricDefineByMeasureParams(metricTypeParams);
|
metricReq.setMetricDefineByMeasureParams(metricTypeParams);
|
||||||
metricReq.setMetricDefineType(MetricDefineType.MEASURE);
|
metricReq.setMetricDefineType(MetricDefineType.MEASURE);
|
||||||
|
metricReq.setRelateDimension(getRelateDimension(Lists.newArrayList(1L, 2L)));
|
||||||
|
metricService.updateMetric(metricReq, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateMetric_pv() throws Exception {
|
||||||
|
MetricReq metricReq = new MetricReq();
|
||||||
|
metricReq.setModelId(2L);
|
||||||
|
metricReq.setId(1L);
|
||||||
|
metricReq.setName("访问次数");
|
||||||
|
metricReq.setBizName("pv");
|
||||||
|
MetricDefineByMeasureParams metricTypeParams = new MetricDefineByMeasureParams();
|
||||||
|
metricTypeParams.setExpr("s2_pv_uv_statis_pv");
|
||||||
|
List<MeasureParam> measures = new ArrayList<>();
|
||||||
|
MeasureParam measure = new MeasureParam("s2_pv_uv_statis_pv",
|
||||||
|
"", AggOperatorEnum.SUM.getOperator());
|
||||||
|
measures.add(measure);
|
||||||
|
metricTypeParams.setMeasures(measures);
|
||||||
|
metricReq.setMetricDefineByMeasureParams(metricTypeParams);
|
||||||
|
metricReq.setMetricDefineType(MetricDefineType.MEASURE);
|
||||||
|
metricReq.setRelateDimension(getRelateDimension(Lists.newArrayList(1L, 2L)));
|
||||||
metricService.updateMetric(metricReq, user);
|
metricService.updateMetric(metricReq, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -373,10 +394,15 @@ public class ModelDemoDataLoader {
|
|||||||
MetricDefineByFieldParams metricTypeParams = new MetricDefineByFieldParams();
|
MetricDefineByFieldParams metricTypeParams = new MetricDefineByFieldParams();
|
||||||
metricTypeParams.setExpr("count(distinct user_id)");
|
metricTypeParams.setExpr("count(distinct user_id)");
|
||||||
List<FieldParam> fieldParams = new ArrayList<>();
|
List<FieldParam> fieldParams = new ArrayList<>();
|
||||||
fieldParams.add(FieldParam.builder().fieldName("user_id").build());
|
fieldParams.add(new FieldParam("user_id"));
|
||||||
metricTypeParams.setFields(fieldParams);
|
metricTypeParams.setFields(fieldParams);
|
||||||
|
RelateDimension relateDimension = new RelateDimension();
|
||||||
|
relateDimension.setDrillDownDimensions(Lists.newArrayList(
|
||||||
|
new DrillDownDimension(1L)));
|
||||||
|
metricReq.setRelateDimension(relateDimension);
|
||||||
metricReq.setMetricDefineByFieldParams(metricTypeParams);
|
metricReq.setMetricDefineByFieldParams(metricTypeParams);
|
||||||
metricReq.setMetricDefineType(MetricDefineType.FIELD);
|
metricReq.setMetricDefineType(MetricDefineType.FIELD);
|
||||||
|
metricReq.setRelateDimension(getRelateDimension(Lists.newArrayList(1L)));
|
||||||
metricService.createMetric(metricReq, user);
|
metricService.createMetric(metricReq, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,6 +425,7 @@ public class ModelDemoDataLoader {
|
|||||||
metricTypeParams.setMetrics(metrics);
|
metricTypeParams.setMetrics(metrics);
|
||||||
metricReq.setMetricDefineByMetricParams(metricTypeParams);
|
metricReq.setMetricDefineByMetricParams(metricTypeParams);
|
||||||
metricReq.setMetricDefineType(MetricDefineType.METRIC);
|
metricReq.setMetricDefineType(MetricDefineType.METRIC);
|
||||||
|
metricReq.setRelateDimension(getRelateDimension(Lists.newArrayList(1L)));
|
||||||
metricService.createMetric(metricReq, user);
|
metricService.createMetric(metricReq, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,11 +458,19 @@ public class ModelDemoDataLoader {
|
|||||||
authRules.add(authRule);
|
authRules.add(authRule);
|
||||||
|
|
||||||
authGroupReq.setAuthRules(authRules);
|
authGroupReq.setAuthRules(authRules);
|
||||||
authGroupReq.setDimensionFilters(Collections.singletonList("department in ('sales')"));
|
authGroupReq.setDimensionFilters(Collections.singletonList("user_name = 'tom'"));
|
||||||
authGroupReq.setDimensionFilterDescription("部门 in [sales]");
|
authGroupReq.setDimensionFilterDescription("用户名='tom'");
|
||||||
authGroupReq.setAuthorizedUsers(Collections.singletonList("tom"));
|
authGroupReq.setAuthorizedUsers(Collections.singletonList("tom"));
|
||||||
authGroupReq.setAuthorizedDepartmentIds(Collections.emptyList());
|
authGroupReq.setAuthorizedDepartmentIds(Collections.emptyList());
|
||||||
authService.addOrUpdateAuthGroup(authGroupReq);
|
authService.addOrUpdateAuthGroup(authGroupReq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RelateDimension getRelateDimension(List<Long> dimensionIds) {
|
||||||
|
RelateDimension relateDimension = new RelateDimension();
|
||||||
|
for (Long id : dimensionIds) {
|
||||||
|
relateDimension.getDrillDownDimensions().add(new DrillDownDimension(id));
|
||||||
|
}
|
||||||
|
return relateDimension;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -5,14 +5,14 @@ dean _1_2 36
|
|||||||
john _1_2 50
|
john _1_2 50
|
||||||
jack _1_2 38
|
jack _1_2 38
|
||||||
admin _1_2 70
|
admin _1_2 70
|
||||||
周杰伦 _4_9 100
|
周杰伦 _4_7 100
|
||||||
陈奕迅 _4_9 100
|
陈奕迅 _4_7 100
|
||||||
林俊杰 _4_9 100
|
林俊杰 _4_7 100
|
||||||
张碧晨 _4_9 100
|
张碧晨 _4_7 100
|
||||||
程响 _4_9 100
|
程响 _4_7 100
|
||||||
Taylor#Swift _4_9 100
|
Taylor#Swift _4_7 100
|
||||||
内地 _4_6 100
|
内地 _4_4 100
|
||||||
欧美 _4_6 100
|
欧美 _4_4 100
|
||||||
港台 _4_6 100
|
港台 _4_4 100
|
||||||
流行 _4_8 100
|
流行 _4_6 100
|
||||||
国风 _4_8 100
|
国风 _4_6 100
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
p1 _3_4 52
|
p1 _3_3 52
|
||||||
p2 _3_4 47
|
p2 _3_3 47
|
||||||
p3 _3_4 31
|
p3 _3_3 31
|
||||||
p4 _3_4 36
|
p4 _3_3 36
|
||||||
p5 _3_4 50
|
p5 _3_3 50
|
||||||
p6 _3_4 38
|
p6 _3_3 38
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
周杰伦 _4_9 9000
|
周杰伦 _4_7 9000
|
||||||
周深 _4_9 8000
|
周深 _4_7 8000
|
||||||
周传雄 _4_9 7000
|
周传雄 _4_7 7000
|
||||||
周华建 _4_9 6000
|
周华建 _4_7 6000
|
||||||
陈奕迅 _4_9 8000
|
陈奕迅 _4_7 8000
|
||||||
林俊杰 _4_9 7000
|
林俊杰 _4_7 7000
|
||||||
张碧晨 _4_9 7000
|
张碧晨 _4_7 7000
|
||||||
程响 _4_9 7000
|
程响 _4_7 7000
|
||||||
Taylor#Swift _4_9 7000
|
Taylor#Swift _4_7 7000
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
美国 _5_10 1
|
美国 _5_8 1
|
||||||
加拿大 _5_10 1
|
加拿大 _5_8 1
|
||||||
锡尔赫特、吉大港、库斯蒂亚 _5_10 1
|
锡尔赫特、吉大港、库斯蒂亚 _5_8 1
|
||||||
孟加拉国 _5_10 3
|
孟加拉国 _5_8 3
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
现代 _5_11 1
|
现代 _5_9 1
|
||||||
tagore _5_11 1
|
tagore _5_9 1
|
||||||
蓝调 _5_11 1
|
蓝调 _5_9 1
|
||||||
流行 _5_11 1
|
流行 _5_9 1
|
||||||
民间 _5_11 1
|
民间 _5_9 1
|
||||||
nazrul _5_11 1
|
nazrul _5_9 1
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
美国 _6_12 1
|
美国 _6_10 1
|
||||||
印度 _6_12 2
|
印度 _6_10 2
|
||||||
英国 _6_12 1
|
英国 _6_10 1
|
||||||
孟加拉国 _6_12 2
|
孟加拉国 _6_10 2
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
男性 _6_13 3
|
男性 _6_11 3
|
||||||
女性 _6_13 3
|
女性 _6_11 3
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
mp4 _7_16 4
|
mp4 _7_14 4
|
||||||
mp3 _7_16 2
|
mp3 _7_14 2
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
美国 _8_18 1
|
美国 _8_16 1
|
||||||
印度 _8_18 2
|
印度 _8_16 2
|
||||||
英国 _8_18 1
|
英国 _8_16 1
|
||||||
孟加拉国 _8_18 2
|
孟加拉国 _8_16 2
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
英文 _8_19 2
|
英文 _8_17 2
|
||||||
孟加拉语 _8_19 4
|
孟加拉语 _8_17 4
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
阿米·奥帕尔·霍伊 _8_21 1
|
阿米·奥帕尔·霍伊 _8_19 1
|
||||||
我的爱 _8_21 1
|
我的爱 _8_19 1
|
||||||
打败它 _8_21 1
|
打败它 _8_19 1
|
||||||
阿杰伊阿卡什 _8_21 1
|
阿杰伊阿卡什 _8_19 1
|
||||||
Tumi#长袍#尼罗布 _8_21 1
|
Tumi#长袍#尼罗布 _8_19 1
|
||||||
舒克诺#帕塔尔#努普尔#帕埃 _8_21 1
|
舒克诺#帕塔尔#努普尔#帕埃 _8_19 1
|
||||||
@@ -1,8 +1,5 @@
|
|||||||
package com.tencent.supersonic.integration;
|
package com.tencent.supersonic.integration;
|
||||||
|
|
||||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
|
||||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.SUM;
|
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||||
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
import com.tencent.supersonic.chat.api.pojo.response.ParseResp;
|
||||||
@@ -15,13 +12,17 @@ import com.tencent.supersonic.common.pojo.DateConf;
|
|||||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||||
import com.tencent.supersonic.util.DataUtils;
|
import com.tencent.supersonic.util.DataUtils;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||||
|
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.SUM;
|
||||||
|
|
||||||
|
|
||||||
public class MetricQueryTest extends BaseQueryTest {
|
public class MetricQueryTest extends BaseQueryTest {
|
||||||
@@ -39,6 +40,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
|||||||
expectedParseInfo.setAggType(NONE);
|
expectedParseInfo.setAggType(NONE);
|
||||||
|
|
||||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||||
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
|
||||||
|
|
||||||
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
||||||
FilterOperatorEnum.EQUALS, "alice", "用户", 2L));
|
FilterOperatorEnum.EQUALS, "alice", "用户", 2L));
|
||||||
@@ -73,7 +75,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
|||||||
expectedParseInfo.setAggType(NONE);
|
expectedParseInfo.setAggType(NONE);
|
||||||
|
|
||||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||||
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
|
||||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
|
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
|
||||||
expectedParseInfo.setQueryType(QueryType.METRIC);
|
expectedParseInfo.setQueryType(QueryType.METRIC);
|
||||||
|
|
||||||
@@ -102,6 +104,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
|||||||
expectedParseInfo.setAggType(NONE);
|
expectedParseInfo.setAggType(NONE);
|
||||||
|
|
||||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||||
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
|
||||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
||||||
|
|
||||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
|
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
|
||||||
@@ -122,7 +125,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
|||||||
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
|
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
|
||||||
expectedParseInfo.setAggType(NONE);
|
expectedParseInfo.setAggType(NONE);
|
||||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||||
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
|
||||||
List<String> list = new ArrayList<>();
|
List<String> list = new ArrayList<>();
|
||||||
list.add("alice");
|
list.add("alice");
|
||||||
list.add("lucy");
|
list.add("lucy");
|
||||||
@@ -147,9 +150,9 @@ public class MetricQueryTest extends BaseQueryTest {
|
|||||||
expectedParseInfo.setAggType(SUM);
|
expectedParseInfo.setAggType(SUM);
|
||||||
|
|
||||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||||
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
|
||||||
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问用户数"));
|
||||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("用户"));
|
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("用户"));
|
||||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("用户名"));
|
|
||||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("用户名称"));
|
|
||||||
|
|
||||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(3, DateConf.DateMode.RECENT, "DAY"));
|
expectedParseInfo.setDateInfo(DataUtils.getDateConf(3, DateConf.DateMode.RECENT, "DAY"));
|
||||||
expectedParseInfo.setQueryType(QueryType.METRIC);
|
expectedParseInfo.setQueryType(QueryType.METRIC);
|
||||||
@@ -168,6 +171,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
|||||||
expectedParseInfo.setAggType(SUM);
|
expectedParseInfo.setAggType(SUM);
|
||||||
|
|
||||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||||
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
|
||||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
||||||
|
|
||||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
|
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
|
||||||
@@ -193,7 +197,7 @@ public class MetricQueryTest extends BaseQueryTest {
|
|||||||
expectedParseInfo.setAggType(NONE);
|
expectedParseInfo.setAggType(NONE);
|
||||||
|
|
||||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||||
|
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
|
||||||
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
||||||
FilterOperatorEnum.EQUALS, "alice", "用户", 2L));
|
FilterOperatorEnum.EQUALS, "alice", "用户", 2L));
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package com.tencent.supersonic.integration;
|
package com.tencent.supersonic.integration;
|
||||||
|
|
||||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
||||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||||
@@ -13,15 +11,19 @@ import com.tencent.supersonic.common.pojo.DateConf.DateMode;
|
|||||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||||
import com.tencent.supersonic.util.DataUtils;
|
import com.tencent.supersonic.util.DataUtils;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.junit.Test;
|
|
||||||
|
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||||
|
|
||||||
public class TagQueryTest extends BaseQueryTest {
|
public class TagQueryTest extends BaseQueryTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void queryTest_metric_tag_query() throws Exception {
|
public void queryTest_metric_tag_query() throws Exception {
|
||||||
QueryResult actualResult = submitNewChat("艺人周杰伦的播放量", null);
|
MockConfiguration.mockTagAgent(agentService);
|
||||||
|
QueryResult actualResult = submitNewChat("艺人周杰伦的播放量", DataUtils.tagAgentId);
|
||||||
|
|
||||||
QueryResult expectedResult = new QueryResult();
|
QueryResult expectedResult = new QueryResult();
|
||||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||||
@@ -30,7 +32,7 @@ public class TagQueryTest extends BaseQueryTest {
|
|||||||
expectedResult.setQueryMode(MetricTagQuery.QUERY_MODE);
|
expectedResult.setQueryMode(MetricTagQuery.QUERY_MODE);
|
||||||
expectedParseInfo.setAggType(NONE);
|
expectedParseInfo.setAggType(NONE);
|
||||||
|
|
||||||
QueryFilter dimensionFilter = DataUtils.getFilter("singer_name", FilterOperatorEnum.EQUALS, "周杰伦", "歌手名", 9L);
|
QueryFilter dimensionFilter = DataUtils.getFilter("singer_name", FilterOperatorEnum.EQUALS, "周杰伦", "歌手名", 7L);
|
||||||
expectedParseInfo.getDimensionFilters().add(dimensionFilter);
|
expectedParseInfo.getDimensionFilters().add(dimensionFilter);
|
||||||
|
|
||||||
SchemaElement metric = SchemaElement.builder().name("播放量").build();
|
SchemaElement metric = SchemaElement.builder().name("播放量").build();
|
||||||
@@ -44,7 +46,8 @@ public class TagQueryTest extends BaseQueryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void queryTest_tag_list_filter() throws Exception {
|
public void queryTest_tag_list_filter() throws Exception {
|
||||||
QueryResult actualResult = submitNewChat("爱情、流行类型的艺人", null);
|
MockConfiguration.mockTagAgent(agentService);
|
||||||
|
QueryResult actualResult = submitNewChat("爱情、流行类型的艺人", DataUtils.tagAgentId);
|
||||||
|
|
||||||
QueryResult expectedResult = new QueryResult();
|
QueryResult expectedResult = new QueryResult();
|
||||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||||
@@ -56,7 +59,7 @@ public class TagQueryTest extends BaseQueryTest {
|
|||||||
List<String> list = new ArrayList<>();
|
List<String> list = new ArrayList<>();
|
||||||
list.add("流行");
|
list.add("流行");
|
||||||
QueryFilter dimensionFilter = DataUtils.getFilter("genre", FilterOperatorEnum.EQUALS,
|
QueryFilter dimensionFilter = DataUtils.getFilter("genre", FilterOperatorEnum.EQUALS,
|
||||||
"流行", "风格", 8L);
|
"流行", "风格", 6L);
|
||||||
expectedParseInfo.getDimensionFilters().add(dimensionFilter);
|
expectedParseInfo.getDimensionFilters().add(dimensionFilter);
|
||||||
|
|
||||||
SchemaElement metric = SchemaElement.builder().name("播放量").build();
|
SchemaElement metric = SchemaElement.builder().name("播放量").build();
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package com.tencent.supersonic.integration.mapper;
|
package com.tencent.supersonic.integration.mapper;
|
||||||
|
|
||||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
||||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||||
@@ -9,21 +7,23 @@ import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
|||||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||||
import com.tencent.supersonic.chat.core.query.rule.metric.MetricTagQuery;
|
import com.tencent.supersonic.chat.core.query.rule.metric.MetricTagQuery;
|
||||||
import com.tencent.supersonic.common.pojo.DateConf;
|
import com.tencent.supersonic.common.pojo.DateConf;
|
||||||
|
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||||
import com.tencent.supersonic.integration.BaseQueryTest;
|
import com.tencent.supersonic.integration.BaseQueryTest;
|
||||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
|
||||||
import com.tencent.supersonic.util.DataUtils;
|
import com.tencent.supersonic.util.DataUtils;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||||
|
|
||||||
public class MapperTest extends BaseQueryTest {
|
public class MapperTest extends BaseQueryTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void hanlp() throws Exception {
|
public void hanlp() throws Exception {
|
||||||
|
|
||||||
QueryReq queryContextReq = DataUtils.getQueryContextReq(10, "艺人周杰伦的播放量");
|
QueryReq queryContextReq = DataUtils.getQueryContextReq(10, "艺人周杰伦的播放量");
|
||||||
queryContextReq.setAgentId(1);
|
queryContextReq.setAgentId(DataUtils.tagAgentId);
|
||||||
|
|
||||||
QueryResult actualResult = submitNewChat("艺人周杰伦的播放量", 1);
|
QueryResult actualResult = submitNewChat("艺人周杰伦的播放量", DataUtils.tagAgentId);
|
||||||
|
|
||||||
QueryResult expectedResult = new QueryResult();
|
QueryResult expectedResult = new QueryResult();
|
||||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package com.tencent.supersonic.util;
|
package com.tencent.supersonic.util;
|
||||||
|
|
||||||
import static java.time.LocalDate.now;
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||||
@@ -16,6 +14,8 @@ import com.tencent.supersonic.chat.core.agent.RuleParserTool;
|
|||||||
import com.tencent.supersonic.common.pojo.DateConf;
|
import com.tencent.supersonic.common.pojo.DateConf;
|
||||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||||
|
|
||||||
|
import static java.time.LocalDate.now;
|
||||||
|
|
||||||
public class DataUtils {
|
public class DataUtils {
|
||||||
|
|
||||||
public static final Integer metricAgentId = 1;
|
public static final Integer metricAgentId = 1;
|
||||||
@@ -106,7 +106,6 @@ public class DataUtils {
|
|||||||
agent.setDescription("标签圈选");
|
agent.setDescription("标签圈选");
|
||||||
AgentConfig agentConfig = new AgentConfig();
|
AgentConfig agentConfig = new AgentConfig();
|
||||||
agentConfig.getTools().add(getRuleQueryTool());
|
agentConfig.getTools().add(getRuleQueryTool());
|
||||||
agentConfig.getTools().add(getPluginTool());
|
|
||||||
agent.setAgentConfig(JSONObject.toJSONString(agentConfig));
|
agent.setAgentConfig(JSONObject.toJSONString(agentConfig));
|
||||||
return agent;
|
return agent;
|
||||||
}
|
}
|
||||||
@@ -114,8 +113,8 @@ public class DataUtils {
|
|||||||
private static RuleParserTool getRuleQueryTool() {
|
private static RuleParserTool getRuleQueryTool() {
|
||||||
RuleParserTool ruleQueryTool = new RuleParserTool();
|
RuleParserTool ruleQueryTool = new RuleParserTool();
|
||||||
ruleQueryTool.setType(AgentToolType.NL2SQL_RULE);
|
ruleQueryTool.setType(AgentToolType.NL2SQL_RULE);
|
||||||
ruleQueryTool.setModelIds(Lists.newArrayList(1L, 2L));
|
ruleQueryTool.setModelIds(Lists.newArrayList(-1L));
|
||||||
ruleQueryTool.setQueryModes(Lists.newArrayList("METRIC_ENTITY", "METRIC_FILTER", "METRIC_MODEL",
|
ruleQueryTool.setQueryModes(Lists.newArrayList("METRIC_TAG", "METRIC_FILTER", "METRIC_MODEL",
|
||||||
"TAG_DETAIL", "TAG_LIST_FILTER", "TAG_ID"));
|
"TAG_DETAIL", "TAG_LIST_FILTER", "TAG_ID"));
|
||||||
return ruleQueryTool;
|
return ruleQueryTool;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ dean _1_2 36
|
|||||||
john _1_2 50
|
john _1_2 50
|
||||||
jack _1_2 38
|
jack _1_2 38
|
||||||
admin _1_2 70
|
admin _1_2 70
|
||||||
周杰伦 _4_9 100
|
周杰伦 _4_7 100
|
||||||
陈奕迅 _4_9 100
|
陈奕迅 _4_7 100
|
||||||
林俊杰 _4_9 100
|
林俊杰 _4_7 100
|
||||||
张碧晨 _4_9 100
|
张碧晨 _4_7 100
|
||||||
程响 _4_9 100
|
程响 _4_7 100
|
||||||
Taylor#Swift _4_9 100
|
Taylor#Swift _4_7 100
|
||||||
内地 _4_6 100
|
内地 _4_4 100
|
||||||
欧美 _4_6 100
|
欧美 _4_4 100
|
||||||
港台 _4_6 100
|
港台 _4_4 100
|
||||||
流行 _4_8 100
|
流行 _4_6 100
|
||||||
国风 _4_8 100
|
国风 _4_6 100
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
p1 _3_4 52
|
p1 _3_3 52
|
||||||
p2 _3_4 47
|
p2 _3_3 47
|
||||||
p3 _3_4 31
|
p3 _3_3 31
|
||||||
p4 _3_4 36
|
p4 _3_3 36
|
||||||
p5 _3_4 50
|
p5 _3_3 50
|
||||||
p6 _3_4 38
|
p6 _3_3 38
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
周杰伦 _4_9 9000
|
周杰伦 _4_7 9000
|
||||||
周深 _4_9 8000
|
周深 _4_7 8000
|
||||||
周传雄 _4_9 7000
|
周传雄 _4_7 7000
|
||||||
周华建 _4_9 6000
|
周华建 _4_7 6000
|
||||||
陈奕迅 _4_9 8000
|
陈奕迅 _4_7 8000
|
||||||
林俊杰 _4_9 7000
|
林俊杰 _4_7 7000
|
||||||
张碧晨 _4_9 7000
|
张碧晨 _4_7 7000
|
||||||
程响 _4_9 7000
|
程响 _4_7 7000
|
||||||
Taylor#Swift _4_9 7000
|
Taylor#Swift _4_7 7000
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
美国 _5_10 1
|
美国 _5_8 1
|
||||||
加拿大 _5_10 1
|
加拿大 _5_8 1
|
||||||
锡尔赫特、吉大港、库斯蒂亚 _5_10 1
|
锡尔赫特、吉大港、库斯蒂亚 _5_8 1
|
||||||
孟加拉国 _5_10 3
|
孟加拉国 _5_8 3
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
现代 _5_11 1
|
现代 _5_9 1
|
||||||
tagore _5_11 1
|
tagore _5_9 1
|
||||||
蓝调 _5_11 1
|
蓝调 _5_9 1
|
||||||
流行 _5_11 1
|
流行 _5_9 1
|
||||||
民间 _5_11 1
|
民间 _5_9 1
|
||||||
nazrul _5_11 1
|
nazrul _5_9 1
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
美国 _6_12 1
|
美国 _6_10 1
|
||||||
印度 _6_12 2
|
印度 _6_10 2
|
||||||
英国 _6_12 1
|
英国 _6_10 1
|
||||||
孟加拉国 _6_12 2
|
孟加拉国 _6_10 2
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
男性 _6_13 3
|
男性 _6_11 3
|
||||||
女性 _6_13 3
|
女性 _6_11 3
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
mp4 _7_16 4
|
mp4 _7_14 4
|
||||||
mp3 _7_16 2
|
mp3 _7_14 2
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
美国 _8_18 1
|
美国 _8_16 1
|
||||||
印度 _8_18 2
|
印度 _8_16 2
|
||||||
英国 _8_18 1
|
英国 _8_16 1
|
||||||
孟加拉国 _8_18 2
|
孟加拉国 _8_16 2
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
英文 _8_19 2
|
英文 _8_17 2
|
||||||
孟加拉语 _8_19 4
|
孟加拉语 _8_17 4
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
阿米·奥帕尔·霍伊 _8_21 1
|
阿米·奥帕尔·霍伊 _8_19 1
|
||||||
我的爱 _8_21 1
|
我的爱 _8_19 1
|
||||||
打败它 _8_21 1
|
打败它 _8_19 1
|
||||||
阿杰伊阿卡什 _8_21 1
|
阿杰伊阿卡什 _8_19 1
|
||||||
Tumi#长袍#尼罗布 _8_21 1
|
Tumi#长袍#尼罗布 _8_19 1
|
||||||
舒克诺#帕塔尔#努普尔#帕埃 _8_21 1
|
舒克诺#帕塔尔#努普尔#帕埃 _8_19 1
|
||||||
Reference in New Issue
Block a user