代码调整

This commit is contained in:
2023-06-13 10:13:39 +08:00
parent c37bc9a53f
commit 172eaf70b2
216 changed files with 12 additions and 11701 deletions

View File

@@ -1,53 +0,0 @@
#当前服务的基本信息
microservice:
ename: @artifactId@
name: '@name@'
version: @version@
sentinel:
url: @sentinel.url@
gateway:
url: @gateway.url@
server:
port: 10210
#feign接口开启服务熔断降级处理
feign:
sentinel:
enabled: true
spring:
application:
name: @artifactId@
#nacos注册中心以及配置中心的指定
cloud:
nacos:
discovery:
ip: @service.server.url@
server-addr: @nacos.url@
namespace: @nacos.namespace@
config:
server-addr: @nacos.url@
namespace: @nacos.namespace@
file-extension: yaml
shared-configs:
- data-id: share-config.yaml
refresh: true
- data-Id: algorithm-config.yaml
refresh: true
main:
allow-bean-definition-overriding: true
#项目日志的配置
logging:
config: http://@nacos.url@/nacos/v1/cs/configs?tenant=@nacos.namespace@&group=DEFAULT_GROUP&dataId=logback.xml
level:
root: info
#mybatis配置信息
mybatis-plus:
#别名扫描
type-aliases-package: com.njcn.algorithm.pojo
mqtt:
client-id: @artifactId@${random.value}

View File

@@ -1,172 +0,0 @@
> 前言:
>
> 为了方便开发中使用influx时序数据库摒弃了在代码中拼接查询sql语句确保查询结果的准确性之余提高代码的阅读性。同时优化处理了部分开发过程遇到的问题
>
> * 时区问题:开发者无需关注,默认为 tz('Asia/Shanghai')
> * 返回的Instant类型的时间在序列化到前端页面时格式不对添加@JsonSerialize(using = InstantDateSerializer.class)处理解决
> * 同时由于influx针对or查询时超过100个连接是性能会有比较严重的影响提供了influx的正则表达式的查询方法InfluxQueryWrapper.regular(),此方案还待测试检查
#### 1、快速上手
目前没有采用泛型的方式,是因为想返回实体更灵活,可以指定任意想要映射的实体。
```java
//两个构造方法:
/***
* 返回和查询用的同一个实体
* @param measurement 查询目标表
*/
public InfluxQueryWrapper(Class measurement) {
this.measurement = measurement;
this.resultEntity = measurement;
this.initSql();
}
/***
* 返回和查询用的不是同一个实体
* @param measurement 查询目标表
* @param resultEntity 返回映射实体
*/
public InfluxQueryWrapper(Class measurement, Class resultEntity) {
this.measurement = measurement;
this.resultEntity = resultEntity;
this.initSql();
}
```
初始化完成后便已经确定目标measurementinflux表名以及返回实体。
###### 示例:
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
//生成 select * from "data_flicker" tz('Asia/Shanghai')
```
#### 2、函数使用
##### 2.1、select
select(ICFunction<T, R>... fieldsStr):此函数指定查询返回的那几个字段
###### 示例:
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
influxQueryWrapper.select(DataFlicker::getTime);
//生成 select time from "data_flicker" tz('Asia/Shanghai')
```
##### 2.2、count统计
count(ICFunction<T, R> columnName):累计总数;
count(ICFunction<T, R> columnName, ICFunction<T, R> resultName):累计总数,返回属性名不同
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
influxQueryWrapper.count(DataFlicker::getTime,StatisticsResult::getValue);
//生成 select COUNT("time") as value from "data_flicker" tz('Asia/Shanghai')
```
> 类似的还有mean平均值、median中位数、mode最常出现的值、spread最大与最小值的差、sum求和、abs绝对值、max最大值、min最小值
##### 2.3、top最大值的几条记录
top(ICFunction<T, R> columnName, int num):最大值的一个结果集合
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
influxQueryWrapper.top(DataFlicker::getTime,5);
//生成最大的前5某个属性的集合
//select TOP("time",5) as value from "data_flicker" tz('Asia/Shanghai')
```
> 类似的还有bottom最小值的几条记录
##### 2.4、maxSamePrefixAndSuffix针对前缀或后缀相同的属性批量处理最大值
maxSamePrefixAndSuffix(String prefix, String suffix, List<Object> diffContent):开发过程中遇到表字段前后缀一致时,需要批量处理的。
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.maxSamePrefixAndSuffix("v_","",timesList);
//生成最大的前5某个属性的集合
//select MAX("v_1") as v_1,MAX("v_2") as v_2,MAX("v_3") as v_3,MAX("v_4") as v_4 as value from "data_v" tz('Asia/Shanghai')
```
> 类似的还有minSamePrefixAndSuffix针对前缀或后缀相同的属性批量处理最小值
##### 2.5、percentile百分之最大值
目前灿能项目常用于cp95最大值
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
influxQueryWrapper.percentile(DataFlicker::getTime,95);
//select PERCENTILE("time",95) as value from "data_flicker" tz('Asia/Shanghai')
```
##### 2.6、between区间
between(ICFunction<T, R> fieldName, Object val1, Object val2):作为条件区间语句生成
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
influxQueryWrapper.between(DataFlicker::getTime,"2022-04-30 16:00:00","2022-05-30 16:00:00");
//select * from "data_flicker" where time >='2022-04-30 16:00:00' AND time <='2022-05-30 16:00:00' tz('Asia/Shanghai')
```
##### 2.7、eq等于
eq(ICFunction<T, R> columnName, Object columnValue)指定某字段等于xxx
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
influxQueryWrapper.eq(DataFlicker::getTime,"2022-05-30 16:00:00");
//select * from "data_flicker" where time ='2022-04-30 16:00:00' tz('Asia/Shanghai')
```
> 类似的还有ne不等于、gt大于、ge大于等于、lt小于、le小于等于
##### 2.8、or拼接多条件
or(ICFunction<T, R> fieldName, List<Object> columnValues)查询某字段等于集合内的值时的结果类似于关系数据库的in函数
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.or(DataV::getLineId,lineList);
//select * from "data_v" where (line_id = "111" or line_id = "222") tz('Asia/Shanghai')
```
##### 2.9、regular正则模糊查询
regular(ICFunction<T, R> fieldName, List<String> columnValues)查询条件有多个选项时效果等同于关系型数据库的in同时or的内容如果超过100个选项时会带来严重的性能问题查询很慢可以调整为正则模糊查询
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.regular(DataV::getLineId,lineList);
//select * from "data_v" where line_id =~/^111|222|333$/ tz('Asia/Shanghai')
```
##### 2.10、groupBy分组
> influxdb只能针对tag去分组
groupBy(ICFunction<T, R>... columnName)以tag去分组
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.groupBy(DataV::getLineId,DataV::getGualityFlag);
//select * from "data_v" group by line_id,quality_flag tz('Asia/Shanghai')
```
##### 2.11、timeDesc以时间降序
```java
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.timeDesc();
//select * from "data_v" order by time desc tz('Asia/Shanghai')
```
> 类似的还有timeAsc以时间升序