调整influxDB的常量池,并提供工具类

This commit is contained in:
2022-10-14 15:44:32 +08:00
parent cb1569cffd
commit 1efdfa5cd6
5 changed files with 538 additions and 24 deletions

View File

@@ -0,0 +1,149 @@
package com.njcn.influxdb.utils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.StrUtil;
import com.njcn.influxdb.param.InfluxDBSqlConstant;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author hongawen
* @version 1.0.0
* @date 2022年10月14日 14:29
*/
@Component
public class AssembleSqlUtil {
private StringBuffer sql;
/**
* 组装对应表所有数据
*
* @param tabName 表名
* @return 表数据
*/
public AssembleSqlUtil select(String tabName) {
if (StrUtil.isNotBlank(tabName)) {
this.sql = new StringBuffer().append(InfluxDBSqlConstant.SELECT).append(InfluxDBSqlConstant.ALL).append(InfluxDBSqlConstant.FROM).append(tabName);
return this;
} else {
return null;
}
}
/**
* 组装指定表对应各个属性的值
*
* @param fields 属性名
* @param tabName 表名
* @return sql语句
*/
public AssembleSqlUtil selectField(List<String> fields, String tabName) {
//未传属性时,组装查询所有属性
if (CollectionUtil.isEmpty(fields)) {
return this.select(tabName);
}
this.sql = new StringBuffer().append(InfluxDBSqlConstant.SELECT)
.append(String.join(StrPool.COMMA, fields))
.append(StrPool.C_SPACE)
.append(InfluxDBSqlConstant.FROM)
.append(tabName);
return this;
}
/**
* 组装查询条件
*
* @param andMap AND 关系
* @param orField OR 字段
* @param orValue OR 值
* @return sql语句
*/
public AssembleSqlUtil where(Map<String, Object> andMap, String orField, List<String> orValue) {
this.sql.append(InfluxDBSqlConstant.WHERE);
if (MapUtil.isNotEmpty(andMap)) {
for (String key : andMap.keySet()) {
this.sql.append(key).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(andMap.get(key)).append(InfluxDBSqlConstant.QM).append(InfluxDBSqlConstant.AND);
}
if (StrUtil.isBlank(orField)) {
this.sql.delete(this.sql.lastIndexOf(InfluxDBSqlConstant.AND), this.sql.length());
}
}
if (StrUtil.isNotBlank(orField)) {
StringBuffer orData = new StringBuffer();
for (String value : orValue) {
orData.append(orField).append(InfluxDBSqlConstant.EQ).append(InfluxDBSqlConstant.QM).append(value).append(InfluxDBSqlConstant.QM).append(InfluxDBSqlConstant.OR);
}
this.sql.append(InfluxDBSqlConstant.LBK).append(StrUtil.removeSuffix(orData, InfluxDBSqlConstant.OR)).append(InfluxDBSqlConstant.RBK);
}
return this;
}
/**
* 组装查询分组sql
* @param field 属性
* @param fieldList 属性集合
* @return sql语句
*/
public AssembleSqlUtil groupBy(String field, List<String> fieldList) {
if (StrUtil.isNotBlank(field)) {
this.sql.append(InfluxDBSqlConstant.GB).append(field);
} else {
if (!CollUtil.isEmpty(fieldList)) {
for (String fieldValue : fieldList) {
this.sql.append(InfluxDBSqlConstant.GB).append(fieldValue).append(StrPool.C_COMMA);
}
this.sql.delete(this.sql.indexOf(StrPool.COMMA), this.sql.length());
}
}
return this;
}
/**
* 组装查询排序sql
* @param field 字段
* @param sortBy 排序
* @return sql语句
*/
public AssembleSqlUtil orderBy(String field, String sortBy) {
if (StrUtil.isNotBlank(sortBy)) {
this.sql.append(InfluxDBSqlConstant.OB).append(field).append(sortBy);
} else {
this.sql.append(InfluxDBSqlConstant.OB).append(field).append(InfluxDBSqlConstant.DESC);
}
return this;
}
/**
* sql结束
*/
public String over() {
return sql.append(InfluxDBSqlConstant.TZ).toString();
}
/**
* 调用案例最后以over()方法结束
*/
public static void main(String[] args) {
AssembleSqlUtil assembleSqlUtil = new AssembleSqlUtil();
Map<String,Object> map = new HashMap<>();
map.put("字段1",100);
map.put("字段2",200);
String orField = "字段3";
List<String> ia = new ArrayList<>();
ia.add("1");
ia.add("2");
System.out.println(assembleSqlUtil.select("data_a").where(map,orField,ia).groupBy(orField,null).orderBy("time","desc").over());
System.out.println(assembleSqlUtil.selectField(Stream.of("a", "d", "c", "b").collect(Collectors.toList()), "test").over());
}
}