diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/S2SqlDateHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/S2SqlDateHelper.java index 741f5f89c..6da417634 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/S2SqlDateHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/S2SqlDateHelper.java @@ -3,6 +3,7 @@ package com.tencent.supersonic.chat.core.utils; import com.tencent.supersonic.chat.api.pojo.ViewSchema; import com.tencent.supersonic.chat.core.pojo.QueryContext; 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.DateUtils; import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig; @@ -47,18 +48,19 @@ public class S2SqlDateHelper { } Integer unit = defaultConfig.getUnit(); String period = defaultConfig.getPeriod(); + TimeMode timeMode = defaultConfig.getTimeMode(); if (Objects.nonNull(unit)) { // If the unit is set to less than 0, then do not add relative date. if (unit < 0) { return Pair.of(null, null); } DatePeriodEnum datePeriodEnum = DatePeriodEnum.get(period); - if (Objects.isNull(datePeriodEnum)) { - return Pair.of(DateUtils.getBeforeDate(unit), DateUtils.getBeforeDate(1)); - } else { - return Pair.of(DateUtils.getBeforeDate(unit, datePeriodEnum), - DateUtils.getBeforeDate(1, datePeriodEnum)); + String startDate = DateUtils.getBeforeDate(unit, datePeriodEnum); + String endDate = DateUtils.getBeforeDate(1, datePeriodEnum); + if (TimeMode.LAST.equals(timeMode)) { + endDate = startDate; } + return Pair.of(startDate, endDate); } return Pair.of(defaultDate, defaultDate); } diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/core/utils/S2SqlDateHelperTest.java b/chat/core/src/test/java/com/tencent/supersonic/chat/core/utils/S2SqlDateHelperTest.java index 2066c0bf9..54fd38e4b 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/core/utils/S2SqlDateHelperTest.java +++ b/chat/core/src/test/java/com/tencent/supersonic/chat/core/utils/S2SqlDateHelperTest.java @@ -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.enums.QueryType; 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.SchemaElement; import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig; @@ -24,10 +25,10 @@ class S2SqlDateHelperTest { QueryContext queryContext = buildQueryContext(viewId); String referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, null); - Assert.assertNotNull(referenceDate); + Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(0)); referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId); - Assert.assertNotNull(referenceDate); + Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(0)); ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId); QueryConfig queryConfig = viewSchema.getQueryConfig(); @@ -38,11 +39,11 @@ class S2SqlDateHelperTest { queryConfig.getTagTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig); referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId); - Assert.assertNotNull(referenceDate); + Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(20)); timeDefaultConfig.setUnit(1); referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId); - Assert.assertNotNull(referenceDate); + Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(1)); timeDefaultConfig.setUnit(-1); referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId); @@ -55,10 +56,12 @@ class S2SqlDateHelperTest { QueryContext queryContext = buildQueryContext(viewId); Pair 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); - Assert.assertNotNull(startEndDate); + Assert.assertNull(startEndDate.getLeft()); + Assert.assertNull(startEndDate.getRight()); ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId); QueryConfig queryConfig = viewSchema.getQueryConfig(); @@ -70,20 +73,34 @@ class S2SqlDateHelperTest { queryConfig.getMetricTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig); 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); - 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); 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); startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC); Assert.assertNull(startEndDate.getLeft()); 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) { diff --git a/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java b/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java index ca1c46e69..105d82418 100644 --- a/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java +++ b/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java @@ -68,6 +68,9 @@ public class DateUtils { } public static String getBeforeDate(int intervalDay, DatePeriodEnum datePeriodEnum) { + if (Objects.isNull(datePeriodEnum)) { + return getBeforeDate(intervalDay); + } SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); String currentDate = dateFormat.format(new Date()); return getBeforeDate(currentDate, intervalDay, datePeriodEnum); @@ -101,7 +104,7 @@ public class DateUtils { int month = tempDate.get(ChronoField.MONTH_OF_YEAR); int firstMonthOfQuarter = ((month - 1) / 3) * 3 + 1; return tempDate.with(ChronoField.MONTH_OF_YEAR, firstMonthOfQuarter) - .with(TemporalAdjusters.firstDayOfMonth()); + .with(TemporalAdjusters.firstDayOfMonth()); }; result = result.with(firstDayOfQuarter); }