[improvement][project]Use DatePeriodEnum to replace DAY/MONTH/YEAR period constants.

This commit is contained in:
jerryjzhang
2024-09-22 17:14:55 +08:00
parent ae889bb0ae
commit cd08cf51c5
28 changed files with 170 additions and 339 deletions

View File

@@ -26,7 +26,7 @@ public class S2SqlDateHelper {
}
TimeMode timeMode = timeConfig.getTimeMode();
DatePeriodEnum datePeriod = DatePeriodEnum.get(timeConfig.getPeriod());
DatePeriodEnum datePeriod = timeConfig.getPeriod();
String startDate;
String endDate;
switch (timeMode) {

View File

@@ -1,7 +1,7 @@
package com.tencent.supersonic.headless.chat.parser.rule;
import com.tencent.supersonic.common.pojo.Constants;
import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.enums.DatePeriodEnum;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.chat.ChatQueryContext;
import com.tencent.supersonic.headless.chat.parser.SemanticParser;
@@ -132,11 +132,11 @@ public class TimeRangeParser implements SemanticParser {
String detectWord = matcher.group("periodStr");
DateConf info = new DateConf();
info.setPeriod(getPeriodConstant(zhPeriod));
info.setDateMode(DateConf.DateMode.RECENT);
info.setPeriod(DatePeriodEnum.fromChName(zhPeriod));
info.setDateMode(DateConf.DateMode.BETWEEN);
info.setDetectWord(detectWord);
info.setStartDate(LocalDate.now().minusDays(days).toString());
info.setEndDate(LocalDate.now().minusDays(1).toString());
info.setEndDate(LocalDate.now().toString());
info.setUnit(num);
return info;
@@ -166,19 +166,6 @@ public class TimeRangeParser implements SemanticParser {
}
}
private String getPeriodConstant(String zhPeriod) {
switch (zhPeriod) {
case "":
return Constants.WEEK;
case "":
return Constants.MONTH;
case "":
return Constants.YEAR;
default:
return Constants.DAY;
}
}
private int zhNumParse(String zhNumStr) {
Stack<Integer> stack = new Stack<>();
String numStr = "一二三四五六七八九";

View File

@@ -49,13 +49,11 @@ public abstract class DetailSemanticQuery extends RuleSemanticQuery {
&& timeDefaultConfig.getUnit() != -1) {
DateConf dateInfo = new DateConf();
int unit = timeDefaultConfig.getUnit();
String startDate = LocalDate.now().plusDays(-unit).toString();
String startDate = LocalDate.now().minusDays(unit).toString();
String endDate = startDate;
if (TimeMode.LAST.equals(timeDefaultConfig.getTimeMode())) {
dateInfo.setDateMode(DateConf.DateMode.BETWEEN);
} else if (TimeMode.RECENT.equals(timeDefaultConfig.getTimeMode())) {
dateInfo.setDateMode(DateConf.DateMode.RECENT);
endDate = LocalDate.now().plusDays(-1).toString();
dateInfo.setDateMode(DateConf.DateMode.BETWEEN);
if (TimeMode.RECENT.equals(timeDefaultConfig.getTimeMode())) {
endDate = LocalDate.now().toString();
}
dateInfo.setUnit(unit);
dateInfo.setPeriod(timeDefaultConfig.getPeriod());

View File

@@ -56,13 +56,11 @@ public abstract class MetricSemanticQuery extends RuleSemanticQuery {
&& Objects.nonNull(timeDefaultConfig.getUnit())
&& timeDefaultConfig.getUnit() != -1) {
int unit = timeDefaultConfig.getUnit();
String startDate = LocalDate.now().plusDays(-unit).toString();
String startDate = LocalDate.now().minusDays(unit).toString();
String endDate = startDate;
if (TimeMode.LAST.equals(timeDefaultConfig.getTimeMode())) {
dateInfo.setDateMode(DateConf.DateMode.BETWEEN);
} else if (TimeMode.RECENT.equals(timeDefaultConfig.getTimeMode())) {
dateInfo.setDateMode(DateConf.DateMode.RECENT);
endDate = LocalDate.now().plusDays(-1).toString();
dateInfo.setDateMode(DateConf.DateMode.BETWEEN);
if (TimeMode.RECENT.equals(timeDefaultConfig.getTimeMode())) {
endDate = LocalDate.now().toString();
}
dateInfo.setUnit(unit);
dateInfo.setPeriod(timeDefaultConfig.getPeriod());

View File

@@ -2,12 +2,12 @@ package com.tencent.supersonic.headless.chat.utils;
import com.google.common.collect.Lists;
import com.tencent.supersonic.common.pojo.Aggregator;
import com.tencent.supersonic.common.pojo.Constants;
import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.Filter;
import com.tencent.supersonic.common.pojo.Order;
import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum;
import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum;
import com.tencent.supersonic.common.pojo.enums.DatePeriodEnum;
import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
@@ -23,7 +23,6 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -42,7 +41,7 @@ public class QueryReqBuilder {
queryStructReq.setDataSetId(parseInfo.getDataSetId());
queryStructReq.setDataSetName(parseInfo.getDataSet().getName());
queryStructReq.setQueryType(parseInfo.getQueryType());
queryStructReq.setDateInfo(rewrite2Between(parseInfo.getDateInfo()));
queryStructReq.setDateInfo(parseInfo.getDateInfo());
List<Filter> dimensionFilters = getFilters(parseInfo.getDimensionFilters());
queryStructReq.setDimensionFilters(dimensionFilters);
@@ -108,40 +107,6 @@ public class QueryReqBuilder {
}
}
private static DateConf rewrite2Between(DateConf dateInfo) {
if (Objects.isNull(dateInfo)) {
return null;
}
DateConf dateInfoNew = new DateConf();
BeanUtils.copyProperties(dateInfo, dateInfoNew);
if (DateConf.DateMode.RECENT.equals(dateInfo.getDateMode())) {
int unit = dateInfo.getUnit();
int days = 1;
switch (dateInfo.getPeriod()) {
case Constants.DAY:
days = 1;
break;
case Constants.WEEK:
days = 7;
break;
case Constants.MONTH:
days = 30;
break;
case Constants.YEAR:
days = 365;
break;
default:
break;
}
String startDate = LocalDate.now().plusDays(-(unit * days)).toString();
String endDate = LocalDate.now().plusDays(-1).toString();
dateInfoNew.setDateMode(DateConf.DateMode.BETWEEN);
dateInfoNew.setStartDate(startDate);
dateInfoNew.setEndDate(endDate);
}
return dateInfoNew;
}
public static QueryMultiStructReq buildMultiStructReq(SemanticParseInfo parseInfo) {
QueryStructReq queryStructReq = buildStructReq(parseInfo);
QueryMultiStructReq queryMultiStructReq = new QueryMultiStructReq();
@@ -282,10 +247,10 @@ public class QueryReqBuilder {
return "";
}
String dateField = TimeDimensionEnum.DAY.getName();
if (Constants.MONTH.equals(dateConf.getPeriod())) {
if (DatePeriodEnum.MONTH.equals(dateConf.getPeriod())) {
dateField = TimeDimensionEnum.MONTH.getName();
}
if (Constants.WEEK.equals(dateConf.getPeriod())) {
if (DatePeriodEnum.WEEK.equals(dateConf.getPeriod())) {
dateField = TimeDimensionEnum.WEEK.getName();
}
return dateField;

View File

@@ -1,6 +1,6 @@
package com.tencent.supersonic.headless.chat.utils;
import com.tencent.supersonic.common.pojo.Constants;
import com.tencent.supersonic.common.pojo.enums.DatePeriodEnum;
import com.tencent.supersonic.common.pojo.enums.TimeMode;
import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig;
import com.tencent.supersonic.headless.chat.corrector.S2SqlDateHelper;
@@ -13,14 +13,14 @@ class S2SqlDateHelperTest {
void testCurrentTimeMode() {
TimeDefaultConfig timeDefaultConfig = new TimeDefaultConfig();
timeDefaultConfig.setTimeMode(TimeMode.CURRENT);
timeDefaultConfig.setPeriod(Constants.MONTH);
timeDefaultConfig.setPeriod(DatePeriodEnum.MONTH);
Pair<String, String> dateRange =
S2SqlDateHelper.calculateDateRange("2024-09-21", timeDefaultConfig, "yyyy-MM-dd");
assert dateRange.getLeft().equals("2024-09-01");
assert dateRange.getRight().equals("2024-09-21");
timeDefaultConfig.setPeriod(Constants.YEAR);
timeDefaultConfig.setPeriod(DatePeriodEnum.YEAR);
dateRange =
S2SqlDateHelper.calculateDateRange("2024-09-21", timeDefaultConfig, "yyyy-MM-dd");
assert dateRange.getLeft().equals("2024-01-01");
@@ -32,20 +32,20 @@ class S2SqlDateHelperTest {
TimeDefaultConfig timeDefaultConfig = new TimeDefaultConfig();
timeDefaultConfig.setTimeMode(TimeMode.RECENT);
timeDefaultConfig.setUnit(3);
timeDefaultConfig.setPeriod(Constants.DAY);
timeDefaultConfig.setPeriod(DatePeriodEnum.DAY);
Pair<String, String> dateRange =
S2SqlDateHelper.calculateDateRange("2024-09-21", timeDefaultConfig, "yyyy-MM-dd");
assert dateRange.getLeft().equals("2024-09-18");
assert dateRange.getRight().equals("2024-09-21");
timeDefaultConfig.setPeriod(Constants.MONTH);
timeDefaultConfig.setPeriod(DatePeriodEnum.MONTH);
dateRange =
S2SqlDateHelper.calculateDateRange("2024-09-21", timeDefaultConfig, "yyyy-MM-dd");
assert dateRange.getLeft().equals("2024-06-21");
assert dateRange.getRight().equals("2024-09-21");
timeDefaultConfig.setPeriod(Constants.YEAR);
timeDefaultConfig.setPeriod(DatePeriodEnum.YEAR);
dateRange =
S2SqlDateHelper.calculateDateRange("2024-09-21", timeDefaultConfig, "yyyy-MM-dd");
assert dateRange.getLeft().equals("2021-09-21");
@@ -57,20 +57,20 @@ class S2SqlDateHelperTest {
TimeDefaultConfig timeDefaultConfig = new TimeDefaultConfig();
timeDefaultConfig.setTimeMode(TimeMode.LAST);
timeDefaultConfig.setUnit(3);
timeDefaultConfig.setPeriod(Constants.DAY);
timeDefaultConfig.setPeriod(DatePeriodEnum.DAY);
Pair<String, String> dateRange =
S2SqlDateHelper.calculateDateRange("2024-09-21", timeDefaultConfig, "yyyy-MM-dd");
assert dateRange.getLeft().equals("2024-09-18");
assert dateRange.getRight().equals("2024-09-18");
timeDefaultConfig.setPeriod(Constants.MONTH);
timeDefaultConfig.setPeriod(DatePeriodEnum.MONTH);
dateRange =
S2SqlDateHelper.calculateDateRange("2024-09-21", timeDefaultConfig, "yyyy-MM-dd");
assert dateRange.getLeft().equals("2024-06-21");
assert dateRange.getRight().equals("2024-06-21");
timeDefaultConfig.setPeriod(Constants.YEAR);
timeDefaultConfig.setPeriod(DatePeriodEnum.YEAR);
dateRange =
S2SqlDateHelper.calculateDateRange("2024-09-21", timeDefaultConfig, "yyyy-MM-dd");
assert dateRange.getLeft().equals("2021-09-21");