mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
(improvement)(chat) support TimeMode LAST, RECENT mode (#752)
This commit is contained in:
@@ -3,6 +3,7 @@ package com.tencent.supersonic.chat.core.utils;
|
|||||||
import com.tencent.supersonic.chat.api.pojo.ViewSchema;
|
import com.tencent.supersonic.chat.api.pojo.ViewSchema;
|
||||||
import com.tencent.supersonic.chat.core.pojo.QueryContext;
|
import com.tencent.supersonic.chat.core.pojo.QueryContext;
|
||||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||||
|
import com.tencent.supersonic.common.pojo.enums.TimeMode;
|
||||||
import com.tencent.supersonic.common.util.DatePeriodEnum;
|
import com.tencent.supersonic.common.util.DatePeriodEnum;
|
||||||
import com.tencent.supersonic.common.util.DateUtils;
|
import com.tencent.supersonic.common.util.DateUtils;
|
||||||
import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig;
|
import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig;
|
||||||
@@ -47,18 +48,19 @@ public class S2SqlDateHelper {
|
|||||||
}
|
}
|
||||||
Integer unit = defaultConfig.getUnit();
|
Integer unit = defaultConfig.getUnit();
|
||||||
String period = defaultConfig.getPeriod();
|
String period = defaultConfig.getPeriod();
|
||||||
|
TimeMode timeMode = defaultConfig.getTimeMode();
|
||||||
if (Objects.nonNull(unit)) {
|
if (Objects.nonNull(unit)) {
|
||||||
// If the unit is set to less than 0, then do not add relative date.
|
// If the unit is set to less than 0, then do not add relative date.
|
||||||
if (unit < 0) {
|
if (unit < 0) {
|
||||||
return Pair.of(null, null);
|
return Pair.of(null, null);
|
||||||
}
|
}
|
||||||
DatePeriodEnum datePeriodEnum = DatePeriodEnum.get(period);
|
DatePeriodEnum datePeriodEnum = DatePeriodEnum.get(period);
|
||||||
if (Objects.isNull(datePeriodEnum)) {
|
String startDate = DateUtils.getBeforeDate(unit, datePeriodEnum);
|
||||||
return Pair.of(DateUtils.getBeforeDate(unit), DateUtils.getBeforeDate(1));
|
String endDate = DateUtils.getBeforeDate(1, datePeriodEnum);
|
||||||
} else {
|
if (TimeMode.LAST.equals(timeMode)) {
|
||||||
return Pair.of(DateUtils.getBeforeDate(unit, datePeriodEnum),
|
endDate = startDate;
|
||||||
DateUtils.getBeforeDate(1, datePeriodEnum));
|
|
||||||
}
|
}
|
||||||
|
return Pair.of(startDate, endDate);
|
||||||
}
|
}
|
||||||
return Pair.of(defaultDate, defaultDate);
|
return Pair.of(defaultDate, defaultDate);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.tencent.supersonic.chat.core.pojo.QueryContext;
|
|||||||
import com.tencent.supersonic.common.pojo.Constants;
|
import com.tencent.supersonic.common.pojo.Constants;
|
||||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||||
import com.tencent.supersonic.common.pojo.enums.TimeMode;
|
import com.tencent.supersonic.common.pojo.enums.TimeMode;
|
||||||
|
import com.tencent.supersonic.common.util.DateUtils;
|
||||||
import com.tencent.supersonic.headless.api.pojo.QueryConfig;
|
import com.tencent.supersonic.headless.api.pojo.QueryConfig;
|
||||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||||
import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig;
|
import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig;
|
||||||
@@ -24,10 +25,10 @@ class S2SqlDateHelperTest {
|
|||||||
QueryContext queryContext = buildQueryContext(viewId);
|
QueryContext queryContext = buildQueryContext(viewId);
|
||||||
|
|
||||||
String referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, null);
|
String referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, null);
|
||||||
Assert.assertNotNull(referenceDate);
|
Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(0));
|
||||||
|
|
||||||
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
|
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
|
||||||
Assert.assertNotNull(referenceDate);
|
Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(0));
|
||||||
|
|
||||||
ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId);
|
ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId);
|
||||||
QueryConfig queryConfig = viewSchema.getQueryConfig();
|
QueryConfig queryConfig = viewSchema.getQueryConfig();
|
||||||
@@ -38,11 +39,11 @@ class S2SqlDateHelperTest {
|
|||||||
queryConfig.getTagTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig);
|
queryConfig.getTagTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig);
|
||||||
|
|
||||||
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
|
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
|
||||||
Assert.assertNotNull(referenceDate);
|
Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(20));
|
||||||
|
|
||||||
timeDefaultConfig.setUnit(1);
|
timeDefaultConfig.setUnit(1);
|
||||||
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
|
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
|
||||||
Assert.assertNotNull(referenceDate);
|
Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(1));
|
||||||
|
|
||||||
timeDefaultConfig.setUnit(-1);
|
timeDefaultConfig.setUnit(-1);
|
||||||
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
|
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
|
||||||
@@ -55,10 +56,12 @@ class S2SqlDateHelperTest {
|
|||||||
QueryContext queryContext = buildQueryContext(viewId);
|
QueryContext queryContext = buildQueryContext(viewId);
|
||||||
|
|
||||||
Pair<String, String> startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, null, QueryType.TAG);
|
Pair<String, String> startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, null, QueryType.TAG);
|
||||||
Assert.assertNotNull(startEndDate);
|
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(0));
|
||||||
|
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(0));
|
||||||
|
|
||||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG);
|
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG);
|
||||||
Assert.assertNotNull(startEndDate);
|
Assert.assertNull(startEndDate.getLeft());
|
||||||
|
Assert.assertNull(startEndDate.getRight());
|
||||||
|
|
||||||
ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId);
|
ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId);
|
||||||
QueryConfig queryConfig = viewSchema.getQueryConfig();
|
QueryConfig queryConfig = viewSchema.getQueryConfig();
|
||||||
@@ -70,20 +73,34 @@ class S2SqlDateHelperTest {
|
|||||||
queryConfig.getMetricTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig);
|
queryConfig.getMetricTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig);
|
||||||
|
|
||||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG);
|
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG);
|
||||||
Assert.assertNotNull(startEndDate);
|
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(20));
|
||||||
|
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(20));
|
||||||
|
|
||||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
|
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
|
||||||
Assert.assertNotNull(startEndDate);
|
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(20));
|
||||||
|
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(20));
|
||||||
|
|
||||||
timeDefaultConfig.setUnit(1);
|
timeDefaultConfig.setUnit(2);
|
||||||
timeDefaultConfig.setTimeMode(TimeMode.RECENT);
|
timeDefaultConfig.setTimeMode(TimeMode.RECENT);
|
||||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
|
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
|
||||||
Assert.assertNotNull(startEndDate);
|
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(2));
|
||||||
|
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(1));
|
||||||
|
|
||||||
|
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG);
|
||||||
|
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(2));
|
||||||
|
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(1));
|
||||||
|
|
||||||
timeDefaultConfig.setUnit(-1);
|
timeDefaultConfig.setUnit(-1);
|
||||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
|
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
|
||||||
Assert.assertNull(startEndDate.getLeft());
|
Assert.assertNull(startEndDate.getLeft());
|
||||||
Assert.assertNull(startEndDate.getRight());
|
Assert.assertNull(startEndDate.getRight());
|
||||||
|
|
||||||
|
timeDefaultConfig.setTimeMode(TimeMode.LAST);
|
||||||
|
timeDefaultConfig.setPeriod(Constants.DAY);
|
||||||
|
timeDefaultConfig.setUnit(5);
|
||||||
|
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
|
||||||
|
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(5));
|
||||||
|
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
private QueryContext buildQueryContext(Long viewId) {
|
private QueryContext buildQueryContext(Long viewId) {
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ public class DateUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String getBeforeDate(int intervalDay, DatePeriodEnum datePeriodEnum) {
|
public static String getBeforeDate(int intervalDay, DatePeriodEnum datePeriodEnum) {
|
||||||
|
if (Objects.isNull(datePeriodEnum)) {
|
||||||
|
return getBeforeDate(intervalDay);
|
||||||
|
}
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
|
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
|
||||||
String currentDate = dateFormat.format(new Date());
|
String currentDate = dateFormat.format(new Date());
|
||||||
return getBeforeDate(currentDate, intervalDay, datePeriodEnum);
|
return getBeforeDate(currentDate, intervalDay, datePeriodEnum);
|
||||||
@@ -101,7 +104,7 @@ public class DateUtils {
|
|||||||
int month = tempDate.get(ChronoField.MONTH_OF_YEAR);
|
int month = tempDate.get(ChronoField.MONTH_OF_YEAR);
|
||||||
int firstMonthOfQuarter = ((month - 1) / 3) * 3 + 1;
|
int firstMonthOfQuarter = ((month - 1) / 3) * 3 + 1;
|
||||||
return tempDate.with(ChronoField.MONTH_OF_YEAR, firstMonthOfQuarter)
|
return tempDate.with(ChronoField.MONTH_OF_YEAR, firstMonthOfQuarter)
|
||||||
.with(TemporalAdjusters.firstDayOfMonth());
|
.with(TemporalAdjusters.firstDayOfMonth());
|
||||||
};
|
};
|
||||||
result = result.with(firstDayOfQuarter);
|
result = result.with(firstDayOfQuarter);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user