算法执行入口调整

This commit is contained in:
2023-12-06 10:16:02 +08:00
parent 0101a85a38
commit 921d1dc7fe
11 changed files with 403 additions and 42 deletions

View File

@@ -1,14 +1,11 @@
package com.njcn.prepare.harmonic.api.liteflow; package com.njcn.prepare.harmonic.api.liteflow;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.prepare.harmonic.api.liteflow.fallback.LiteFlowFeignClientFallbackFactory; import com.njcn.prepare.harmonic.api.liteflow.fallback.LiteFlowFeignClientFallbackFactory;
import com.njcn.prepare.harmonic.pojo.bo.BaseParam; import com.njcn.prepare.harmonic.pojo.bo.BaseParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;

View File

@@ -1,12 +1,5 @@
FROM eclipse-temurin:8-jdk-centos7 FROM openjdk:8-jdk-alpine
MAINTAINER hongawen_13914774158@163.com
ENV JAVA_OPTS="-Xms1024m -Xmx1024m"
# 挂载时区的目录
VOLUME /usr/share/zoneinfo
# 设置时区为上海
ENV TZ=Asia/Shanghai
# 设置时区信息
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD target/prepareboot.jar prepareboot.jar ADD target/prepareboot.jar prepareboot.jar
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /prepareboot.jar ENTRYPOINT ["java","-jar","/prepareboot.jar"]
EXPOSE 10221 EXPOSE 10221
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone

View File

@@ -157,7 +157,7 @@
<plugin> <plugin>
<groupId>com.spotify</groupId> <groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId> <artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version> <version>1.2.2</version>
<executions> <executions>
<execution> <execution>
<id>build-image</id> <id>build-image</id>

View File

@@ -1,11 +1,40 @@
package com.njcn; package com.njcn;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.influx.constant.InfluxDbSqlConstant;
import com.njcn.influx.deprecated.InfluxDBPublicParam;
import com.njcn.influx.imapper.DataVMapper;
import com.njcn.influx.pojo.bo.MeasurementCount;
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
import com.njcn.influx.pojo.po.DataV;
import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.influx.utils.InfluxDbUtils;
import com.njcn.prepare.PrepareApplication; import com.njcn.prepare.PrepareApplication;
import com.njcn.prepare.harmonic.service.mysql.Impl.line.IntegrityServiceImpl;
import com.njcn.prepare.harmonic.service.mysql.Impl.line.LimitRateServiceImpl;
import com.njcn.prepare.harmonic.service.mysql.Impl.line.LimitTargetServiceImpl;
import com.njcn.prepare.harmonic.service.mysql.line.IntegrityService;
import lombok.SneakyThrows;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.context.web.WebAppConfiguration;
import javax.annotation.Resource;
import java.lang.reflect.Array;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/** /**
* @author hongawen * @author hongawen
* @version 1.0.0 * @version 1.0.0
@@ -16,4 +45,182 @@ import org.springframework.test.context.web.WebAppConfiguration;
@SpringBootTest(classes = PrepareApplication.class) @SpringBootTest(classes = PrepareApplication.class)
public class BaseJunitTest { public class BaseJunitTest {
@Resource
private DataVMapper dataVMapper;
@Resource
private InfluxDbUtils influxDbUtils;
//速度272
@SneakyThrows
@Test
public void test1() {
long time1 = System.currentTimeMillis();
List<String> list = Arrays.asList("1213aad4e6f51b0fc74701bd7eb531d1");
LocalDateTime startTime = LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse("2023-10-01", DatePattern.NORM_DATE_PATTERN));
LocalDateTime endTime = LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse("2023-10-01", DatePattern.NORM_DATE_PATTERN));
List<DataV> result1 ;
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
//最小值
influxQueryWrapper.minSamePrefixAndSuffix("v_","", HarmonicTimesUtil.harmonicTimesList(1,50,1));
influxQueryWrapper.regular(DataV::getLineId, list)
.eq(DataV::getValueType, "MIN")
.min(DataV::getFreq)
.min(DataV::getFreqDev)
.min(DataV::getRms)
.min(DataV::getRmsLvr)
.min(DataV::getVNeg)
.min(DataV::getVPos)
.min(DataV::getVThd)
.min(DataV::getVUnbalance)
.min(DataV::getVZero)
.min(DataV::getVlDev)
.min(DataV::getVuDev)
.groupBy(DataV::getLineId,DataV::getPhasicType,DataV::getQualityFlag,DataV::getValueType)
.between(DataV::getTime, startTime, endTime);
result1 = dataVMapper.getStatisticsByWraper(influxQueryWrapper);
System.out.println("result1==:" + result1);
//最大值
influxQueryWrapper.maxSamePrefixAndSuffix("v_","", HarmonicTimesUtil.harmonicTimesList(1,50,1));
influxQueryWrapper.regular(DataV::getLineId, list)
.eq(DataV::getValueType, "MIN")
.max(DataV::getFreq)
.max(DataV::getFreqDev)
.max(DataV::getRms)
.max(DataV::getRmsLvr)
.max(DataV::getVNeg)
.max(DataV::getVPos)
.max(DataV::getVThd)
.max(DataV::getVUnbalance)
.max(DataV::getVZero)
.max(DataV::getVlDev)
.max(DataV::getVuDev)
.groupBy(DataV::getLineId,DataV::getPhasicType,DataV::getQualityFlag,DataV::getValueType)
.between(DataV::getTime, startTime, endTime);
result1 = dataVMapper.getStatisticsByWraper(influxQueryWrapper);
//平均值
influxQueryWrapper.meanSamePrefixAndSuffix("v_","", HarmonicTimesUtil.harmonicTimesList(1,50,1));
influxQueryWrapper.regular(DataV::getLineId, list)
.eq(DataV::getValueType, "MIN")
.mean(DataV::getFreq)
.mean(DataV::getFreqDev)
.mean(DataV::getRms)
.mean(DataV::getRmsLvr)
.mean(DataV::getVNeg)
.mean(DataV::getVPos)
.mean(DataV::getVThd)
.mean(DataV::getVUnbalance)
.mean(DataV::getVZero)
.mean(DataV::getVlDev)
.mean(DataV::getVuDev)
.groupBy(DataV::getLineId,DataV::getPhasicType,DataV::getQualityFlag,DataV::getValueType)
.between(DataV::getTime, startTime, endTime);
result1 = dataVMapper.getStatisticsByWraper(influxQueryWrapper);
long time2 = System.currentTimeMillis();
System.out.println("time1==:" + (time2-time1));
}
//速度174
@SneakyThrows
@Test
public void test2() {
long time1 = System.currentTimeMillis();
String lineIndex = "1213aad4e6f51b0fc74701bd7eb531d1";
String startTime = "2023-10-01 00:00:00";
String endTime = "2023-10-01 23:59:59";
List<DataV> result = new ArrayList<>();
//最小值
StringBuilder stringBuilder1 = new StringBuilder();
StringBuilder stringBuilder2 = new StringBuilder();
stringBuilder1.append("min(freq) AS freq,min(freq_dev) AS freq_dev,min(rms) AS rms,min(rms_lvr) AS rms_lvr,min(v_neg) AS v_neg,min(v_pos) AS v_pos,min(v_thd) AS v_thd,min(v_unbalance) AS v_unbalance,min(v_zero) AS v_zero,min(vl_dev) AS vl_dev,min(vu_dev) AS vu_dev,");
for (int i = 1; i <= 50; i++) {
if (i == 50) {
stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i);
} else {
stringBuilder1.append("min(v_").append(i).append(") AS v_").append(i).append(",");
}
}
stringBuilder2.append("line_id='").append(lineIndex).append("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' and value_type = 'MIN' group by line_id,phasic_type,value_type,quality_flag ").append(InfluxDBPublicParam.TIME_ZONE);
String sql1 = "select " + stringBuilder1 + " from " + InfluxDBPublicParam.DATA_V + " where " + stringBuilder2;
QueryResult sqlResult1 = influxDbUtils.query(sql1);
InfluxDBResultMapper resultMapper1 = new InfluxDBResultMapper();
List<DataV> list1 = resultMapper1.toPOJO(sqlResult1, DataV.class);
//最大值
StringBuilder stringBuilder3 = new StringBuilder();
StringBuilder stringBuilder4 = new StringBuilder();
stringBuilder3.append("max(freq) AS freq,max(freq_dev) AS freq_dev,max(rms) AS rms,max(rms_lvr) AS rms_lvr,max(v_neg) AS v_neg,max(v_pos) AS v_pos,max(v_thd) AS v_thd,max(v_unbalance) AS v_unbalance,max(v_zero) AS v_zero,max(vl_dev) AS vl_dev,max(vu_dev) AS vu_dev,");
for (int i = 1; i <= 50; i++) {
if (i == 50) {
stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i);
} else {
stringBuilder3.append("max(v_").append(i).append(") AS v_").append(i).append(",");
}
}
stringBuilder4.append("line_id='").append(lineIndex).append("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' and value_type = 'MAX' group by line_id,phasic_type,value_type,quality_flag ").append(InfluxDBPublicParam.TIME_ZONE);
String sql2 = "select " + stringBuilder3 + " from " + InfluxDBPublicParam.DATA_V + " where " + stringBuilder4;
QueryResult sqlResult2 = influxDbUtils.query(sql2);
InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper();
List<DataV> list2 = resultMapper2.toPOJO(sqlResult2, DataV.class);
//平均值
StringBuilder stringBuilder5 = new StringBuilder();
StringBuilder stringBuilder6 = new StringBuilder();
stringBuilder5.append("mean(freq) AS freq,mean(freq_dev) AS freq_dev,mean(rms) AS rms,mean(rms_lvr) AS rms_lvr,mean(v_neg) AS v_neg,mean(v_pos) AS v_pos,mean(v_thd) AS v_thd,mean(v_unbalance) AS v_unbalance,mean(v_zero) AS v_zero,mean(vl_dev) AS vl_dev,mean(vu_dev) AS vu_dev,");
for (int i = 1; i <= 50; i++) {
if (i == 50) {
stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i);
} else {
stringBuilder5.append("mean(v_").append(i).append(") AS v_").append(i).append(",");
}
}
stringBuilder6.append("line_id='").append(lineIndex).append("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag ").append(InfluxDBPublicParam.TIME_ZONE);
String sql3 = "select " + stringBuilder5 + " from " + InfluxDBPublicParam.DATA_V + " where " + stringBuilder6;
QueryResult sqlResult3 = influxDbUtils.query(sql3);
InfluxDBResultMapper resultMapper3 = new InfluxDBResultMapper();
List<DataV> list3 = resultMapper3.toPOJO(sqlResult3, DataV.class);
// //CP95值
// StringBuilder stringBuilder7 = new StringBuilder();
// StringBuilder stringBuilder8 = new StringBuilder();
// stringBuilder7.append("percentile(freq,95) AS freq,percentile(freq_dev,95) AS freq_dev,percentile(rms,95) AS rms,percentile(rms_lvr,95) AS rms_lvr,percentile(v_neg,95) AS v_neg,percentile(v_pos,95) AS v_pos,percentile(v_thd,95) AS v_thd,percentile(v_unbalance,95) AS v_unbalance,percentile(v_zero,95) AS v_zero,percentile(vl_dev,95) AS vl_dev,percentile(vu_dev,95) AS vu_dev,");
// for (int i = 1; i <= 50; i++) {
// if (i == 50) {
// stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i);
// } else {
// stringBuilder7.append("percentile(v_").append(i).append(",95) AS v_").append(i).append(",");
// }
// }
// stringBuilder8.append("line_id='").append(lineIndex).append("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' and value_type = 'AVG' group by line_id,phasic_type,value_type,quality_flag ").append(InfluxDBPublicParam.TIME_ZONE);
// String sql4 = "select " + stringBuilder7 + " from " + InfluxDBPublicParam.DATA_V + " where " + stringBuilder8;
// QueryResult sqlResult4 = influxDbUtils.query(sql4);
// InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper();
// List<DataV> list4 = resultMapper4.toPOJO(sqlResult4, DataV.class);
// list4.forEach(item -> {
// item.setValueType("CP95");
// });
long time2 = System.currentTimeMillis();
System.out.println("time==:" + (time2-time1));
}
@SneakyThrows
@Test
public void test3() {
String lineIndex = "a166830bfc3a1b81a3635876ffed805e";
String time1 = "2023-11-11 00:00:00";
String time2 = "2023-11-11 23:59:59";
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.regular(DataV::getLineId, lineIndex)
.eq(DataV::getValueType, InfluxDbSqlConstant.CP95)
.regular(DataV::getPhasicType, Arrays.asList(InfluxDBTableConstant.PHASE_TYPE_A,InfluxDBTableConstant.PHASE_TYPE_B,InfluxDBTableConstant.PHASE_TYPE_C))
.eq(DataV::getQualityFlag, InfluxDBTableConstant.NORMAL)
.between(DataV::getTime, time1, time2);
List<DataV> list = dataVMapper.getStatisticsByWraper(influxQueryWrapper);
System.out.println("list==:" + list);
}
} }

View File

@@ -1,28 +0,0 @@
package com.njcn.system.timer.tasks;
import com.njcn.system.timer.TimerTaskRunner;
import org.springframework.stereotype.Component;
/**
* 定时同步用户数据
*
* @author hongawen
* @date 2020/6/30 22:09
*/
@Component
public class DemoTaskRunner implements TimerTaskRunner {
@Override
public void action() {
//定时同步用户数据
System.out.println("定时输出一段文字");
}
}

View File

@@ -0,0 +1,32 @@
package com.njcn.system.timer.tasks;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.njcn.prepare.harmonic.api.liteflow.LiteFlowFeignClient;
import com.njcn.prepare.harmonic.pojo.bo.BaseParam;
import com.njcn.system.timer.TimerTaskRunner;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
/**
* 类的介绍:装置算法执行链定时任务
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/12/6 9:35
*/
@Component
@RequiredArgsConstructor
public class deviceTaskRunner implements TimerTaskRunner {
private final LiteFlowFeignClient liteFlowFeignClient;
@Override
public void action() {
BaseParam baseParam = new BaseParam();
baseParam.setFullChain(true);
baseParam.setRepair(false);
baseParam.setDataDate(DateUtil.yesterday().toString(DatePattern.NORM_DATE_PATTERN));
liteFlowFeignClient.deviceExecutor(baseParam);
}
}

View File

@@ -0,0 +1,32 @@
package com.njcn.system.timer.tasks;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.njcn.prepare.harmonic.api.liteflow.LiteFlowFeignClient;
import com.njcn.prepare.harmonic.pojo.bo.BaseParam;
import com.njcn.system.timer.TimerTaskRunner;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
/**
* 类的介绍:母线算法执行链定时任务
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/12/6 9:35
*/
@Component
@RequiredArgsConstructor
public class generaTrixTaskRunner implements TimerTaskRunner {
private final LiteFlowFeignClient liteFlowFeignClient;
@Override
public void action() {
BaseParam baseParam = new BaseParam();
baseParam.setFullChain(true);
baseParam.setRepair(false);
baseParam.setDataDate(DateUtil.yesterday().toString(DatePattern.NORM_DATE_PATTERN));
liteFlowFeignClient.generaTrixExecutor(baseParam);
}
}

View File

@@ -0,0 +1,32 @@
package com.njcn.system.timer.tasks;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.njcn.prepare.harmonic.api.liteflow.LiteFlowFeignClient;
import com.njcn.prepare.harmonic.pojo.bo.BaseParam;
import com.njcn.system.timer.TimerTaskRunner;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
/**
* 类的介绍:监测点算法执行链定时任务
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/12/6 9:35
*/
@Component
@RequiredArgsConstructor
public class measurementTaskRunner implements TimerTaskRunner {
private final LiteFlowFeignClient liteFlowFeignClient;
@Override
public void action() {
BaseParam baseParam = new BaseParam();
baseParam.setFullChain(true);
baseParam.setRepair(false);
baseParam.setDataDate(DateUtil.yesterday().toString(DatePattern.NORM_DATE_PATTERN));
liteFlowFeignClient.measurementPointExecutor(baseParam);
}
}

View File

@@ -0,0 +1,32 @@
package com.njcn.system.timer.tasks;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.njcn.prepare.harmonic.api.liteflow.LiteFlowFeignClient;
import com.njcn.prepare.harmonic.pojo.bo.BaseParam;
import com.njcn.system.timer.TimerTaskRunner;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
/**
* 类的介绍:单位监测点算法执行链定时任务
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/12/6 9:35
*/
@Component
@RequiredArgsConstructor
public class orgTaskRunner implements TimerTaskRunner {
private final LiteFlowFeignClient liteFlowFeignClient;
@Override
public void action() {
BaseParam baseParam = new BaseParam();
baseParam.setFullChain(true);
baseParam.setRepair(false);
baseParam.setDataDate(DateUtil.yesterday().toString(DatePattern.NORM_DATE_PATTERN));
liteFlowFeignClient.orgPointExecutor(baseParam);
}
}

View File

@@ -0,0 +1,32 @@
package com.njcn.system.timer.tasks;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.njcn.prepare.harmonic.api.liteflow.LiteFlowFeignClient;
import com.njcn.prepare.harmonic.pojo.bo.BaseParam;
import com.njcn.system.timer.TimerTaskRunner;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
/**
* 类的介绍:变电站母线算法执行链定时任务
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/12/6 9:35
*/
@Component
@RequiredArgsConstructor
public class pmsDimTaskRunner implements TimerTaskRunner {
private final LiteFlowFeignClient liteFlowFeignClient;
@Override
public void action() {
BaseParam baseParam = new BaseParam();
baseParam.setFullChain(true);
baseParam.setRepair(false);
baseParam.setDataDate(DateUtil.yesterday().toString(DatePattern.NORM_DATE_PATTERN));
liteFlowFeignClient.pmsDimExecutor(baseParam);
}
}

View File

@@ -0,0 +1,32 @@
package com.njcn.system.timer.tasks;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.njcn.prepare.harmonic.api.liteflow.LiteFlowFeignClient;
import com.njcn.prepare.harmonic.pojo.bo.BaseParam;
import com.njcn.system.timer.TimerTaskRunner;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
/**
* 类的介绍:变电站算法执行链定时任务
*
* @author xuyang
* @version 1.0.0
* @createTime 2023/12/6 9:35
*/
@Component
@RequiredArgsConstructor
public class substationTaskRunner implements TimerTaskRunner {
private final LiteFlowFeignClient liteFlowFeignClient;
@Override
public void action() {
BaseParam baseParam = new BaseParam();
baseParam.setFullChain(true);
baseParam.setRepair(false);
baseParam.setDataDate(DateUtil.yesterday().toString(DatePattern.NORM_DATE_PATTERN));
liteFlowFeignClient.substationExecutor(baseParam);
}
}