|
@@ -0,0 +1,185 @@
|
|
|
+package cn.cslg.pas.factorys.EsBuilderFactory;
|
|
|
+
|
|
|
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
|
|
|
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
|
|
|
+import co.elastic.clients.json.JsonData;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class PrioritiesNestedQueryBuilder implements IQueryBuilder{
|
|
|
+ private String field = "";
|
|
|
+ private String value = "";
|
|
|
+ private String operator = "";
|
|
|
+ public String path = "";
|
|
|
+ public static final int YEAR = 4;
|
|
|
+ public static final int MONTHONE = 6;
|
|
|
+ public static final int MONTH = 7;
|
|
|
+ public static final int DAYONE = 8;
|
|
|
+ public static final int DAY = 10;
|
|
|
+ public static final String EQ = "=";
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Query creteQuery() throws ParseException {
|
|
|
+ Query query = null;
|
|
|
+ if (value != null && !"".equals(value)) {
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ if (value.length() == YEAR) {
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy");
|
|
|
+ Date year = format.parse(value);
|
|
|
+ calendar.setTime(year);
|
|
|
+ String yearTime = String.valueOf(calendar.getTime().getTime());
|
|
|
+ calendar.add(Calendar.YEAR, 1);
|
|
|
+ String yearNextTime = String.valueOf(calendar.getTime().getTime());
|
|
|
+ switch (operator) {
|
|
|
+ case NumberQueryBuilder.LT:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).lt(JsonData.of(yearTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.LTE:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).lte(JsonData.of(yearTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.GT:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gt(JsonData.of(yearTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.GTE:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gte(JsonData.of(yearTime)));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gte(JsonData.of(yearTime)).lte(JsonData.of(yearNextTime)));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else if (value.length() == MONTH || value.length() == MONTHONE) {
|
|
|
+ Date month = new Date();
|
|
|
+ if (value.contains("-")) {
|
|
|
+ SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM");
|
|
|
+ month = format2.parse(value);
|
|
|
+ } else if (value.contains("/")) {
|
|
|
+ SimpleDateFormat format3 = new SimpleDateFormat("yyyy/MM");
|
|
|
+ month = format3.parse(value);
|
|
|
+ } else {
|
|
|
+ SimpleDateFormat format1 = new SimpleDateFormat("yyyyMM");
|
|
|
+ month = format1.parse(value);
|
|
|
+ }
|
|
|
+ calendar.setTime(month);
|
|
|
+ String monthTime = String.valueOf(calendar.getTime().getTime());
|
|
|
+ calendar.add(Calendar.MONTH, 1);
|
|
|
+ String monthNextTime = String.valueOf(calendar.getTime().getTime());
|
|
|
+ switch (operator) {
|
|
|
+ case NumberQueryBuilder.LT:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).lt(JsonData.of(monthTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.LTE:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).lte(JsonData.of(monthTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.GT:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gt(JsonData.of(monthTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.GTE:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gte(JsonData.of(monthTime)));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gte(JsonData.of(monthTime)).lte(JsonData.of(monthNextTime)));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else if (value.length() == DAY || value.length() == DAYONE) {
|
|
|
+ Date day = new Date();
|
|
|
+ if (value.contains("-")) {
|
|
|
+ SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ day = format2.parse(value);
|
|
|
+ } else if (value.contains("/")) {
|
|
|
+ SimpleDateFormat format3 = new SimpleDateFormat("yyyy/MM/dd");
|
|
|
+ day = format3.parse(value);
|
|
|
+ } else {
|
|
|
+ SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd");
|
|
|
+ day = format1.parse(value);
|
|
|
+ }
|
|
|
+ calendar.setTime(day);
|
|
|
+ String dayTime = String.valueOf(day.getTime());
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ String nextDayTime = String.valueOf(calendar.getTime().getTime());
|
|
|
+ switch (operator) {
|
|
|
+ case NumberQueryBuilder.LT:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).lt(JsonData.of(dayTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.LTE:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).lte(JsonData.of(dayTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.GT:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gt(JsonData.of(dayTime)));
|
|
|
+ break;
|
|
|
+ case NumberQueryBuilder.GTE:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gte(JsonData.of(dayTime)));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gte(JsonData.of(dayTime)).lte(JsonData.of(nextDayTime)));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ query = QueryBuilders
|
|
|
+ .range(range -> range.field(field).gte(JsonData.of(1)).lte(JsonData.of(2)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Query finalQuery = query;
|
|
|
+ Query nestedQuery = QueryBuilders.nested(z -> z.path(path).query(finalQuery));
|
|
|
+ return nestedQuery;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getField() {
|
|
|
+ return field;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setField(String field) {
|
|
|
+ this.field = field;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setValue(String value) {
|
|
|
+ this.value = value;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getOperator() {
|
|
|
+ return operator;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setOperator(String operator) {
|
|
|
+ this.operator = operator;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String getPath() {
|
|
|
+ return path;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setPath(String path) {
|
|
|
+ this.path = path;
|
|
|
+ }
|
|
|
+}
|