|
@@ -2,11 +2,8 @@ package com.gyee.gaia.realtime.wind.job;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.gyee.gaia.common.data.point.PointData;
|
|
|
-import com.gyee.gaia.common.data.point.TestingPoint;
|
|
|
import com.gyee.gaia.common.data.taos.RealtimeAverageTarget;
|
|
|
-import com.gyee.gaia.dao.sql.point.ITestingPointService;
|
|
|
import com.gyee.gaia.dao.sql.taos.IRealtimeAverageTargetService;
|
|
|
import com.gyee.gaia.realtime.wind.adapter.IAdapterApi;
|
|
|
import com.gyee.gaia.realtime.wind.config.AppConfig;
|
|
@@ -19,122 +16,46 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.time.LocalDateTime;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayDeque;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
-import java.util.concurrent.Executors;
|
|
|
-import java.util.concurrent.ScheduledExecutorService;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
@Order(2)
|
|
|
@Component
|
|
|
public class CauseJobHandler implements ApplicationRunner {
|
|
|
|
|
|
@Resource
|
|
|
- private ITestingPointService testingPointService;
|
|
|
- @Resource
|
|
|
private AppConfig appConfig;
|
|
|
@Resource
|
|
|
- private IRealtimeAverageTargetService realtimeAverageTargetService;
|
|
|
- @Resource
|
|
|
private IAdapterApi adapterApi;
|
|
|
@Resource
|
|
|
+ private IRealtimeAverageTargetService realtimeAverageTargetService;
|
|
|
+ @Resource
|
|
|
private ThreadPoolTaskExecutor taskExecutor;
|
|
|
- private String pointCodes;
|
|
|
+
|
|
|
private Map<String, ArrayDeque<PointData>> pdaqMap = new ConcurrentHashMap<>();
|
|
|
- /**
|
|
|
- * 风机id,uniformcode,点名
|
|
|
- */
|
|
|
- private Map<String, Map<String, String>> equipUcMap = new HashMap<>();
|
|
|
|
|
|
private boolean isload = false;
|
|
|
|
|
|
+ //@Resource
|
|
|
+ //private DataFillJobHandler dataFillJobHandler;
|
|
|
+
|
|
|
@Override
|
|
|
public void run(ApplicationArguments args) throws Exception {
|
|
|
|
|
|
- CacheContext.equipMap.keySet().forEach(em -> equipUcMap.put(em, new HashMap<>()));
|
|
|
-
|
|
|
- Collection<String> uniformCodeList = appConfig.getUniformcodeOne().values();
|
|
|
-
|
|
|
- //根据uniformcode获取测点
|
|
|
- QueryWrapper<TestingPoint> tpWrapper = new QueryWrapper<>();
|
|
|
- tpWrapper.eq("thing_type", "windturbine");
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
-
|
|
|
- //获取最新更新时间
|
|
|
- /*QueryWrapper<RealtimeAverageTarget> ratWrapper = new QueryWrapper<>();
|
|
|
- ratWrapper.select("max(time)");
|
|
|
- Map<String, Object> map = realtimeAverageTargetService.getMap(ratWrapper);
|
|
|
- Date max;
|
|
|
- if (map != null && map.size() > 0) {
|
|
|
- max = (Date) map.get("max");
|
|
|
- } else {
|
|
|
- max = DateUtil.beginOfDay(DateUtil.date());
|
|
|
- }*/
|
|
|
-
|
|
|
- //风机号,时间,RealtimeAverageTarget
|
|
|
- Map<String, Map<Long, RealtimeAverageTarget>> ratssmm = new HashMap<>();
|
|
|
- List<RealtimeAverageTarget> rats = new ArrayList<>();
|
|
|
- //5个指标
|
|
|
- for (String value : uniformCodeList) {
|
|
|
- //每个指标407个风机
|
|
|
- List<TestingPoint> list = testingPointService.list(tpWrapper.clone().eq("uniform_code", value));
|
|
|
-
|
|
|
- List<PointData> rawByKey;
|
|
|
- RealtimeAverageTarget target = null;
|
|
|
- //每个指标每个风机
|
|
|
- for (TestingPoint point : list) {
|
|
|
- String thingId = point.getThingId();
|
|
|
- sb.append(",").append(point.getCode());
|
|
|
- equipUcMap.get(thingId).put(value, point.getCode());
|
|
|
- /*rawByKey = adapterApi.getRawByKey(point.getCode(), max.getTime(), System.currentTimeMillis());
|
|
|
- Map<Long, Double> collect = rawByKey.stream().collect(Collectors.groupingBy(data -> data.getTs() / 60000, Collectors.averagingDouble(PointData::getDoubleValue)));
|
|
|
- //TODO 补缺的时间
|
|
|
- for (Map.Entry<Long, Double> entry : collect.entrySet()) {
|
|
|
- if(target==null){
|
|
|
- target = new RealtimeAverageTarget();
|
|
|
- target.setTime(new Timestamp(entry.getKey()*60000));
|
|
|
- target.setEquipmentId(thingId);
|
|
|
- setRats(target, value,entry.getValue());
|
|
|
- rats.add(target);
|
|
|
-
|
|
|
- if(!ratssmm.containsKey(thingId)) ratssmm.put(thingId, new HashMap<>());
|
|
|
- ratssmm.get(thingId).put(entry.getKey(), target);
|
|
|
- }else {
|
|
|
- RealtimeAverageTarget averageTarget = ratssmm.get(thingId).get(entry.getKey());
|
|
|
- if(averageTarget!=null) setRats(averageTarget, value, entry.getValue());
|
|
|
- }
|
|
|
- }*/
|
|
|
- }
|
|
|
- }
|
|
|
- //realtimeAverageTargetService.saveBatch(rats, 3000);
|
|
|
-
|
|
|
- pointCodes = sb.delete(0, 1).toString();
|
|
|
+ //dataFillJobHandler.calcEquipPowerGenDay();
|
|
|
init();
|
|
|
taskExecutor.submit(this::refreshQueue);
|
|
|
isload = true;
|
|
|
- //taskExecutor.submit(this::calcRealtimeAverageTarget);
|
|
|
- }
|
|
|
-
|
|
|
- private void setRats(RealtimeAverageTarget target, String uc, double value) {
|
|
|
- if (uc.equals(appConfig.getUniformcodeOne().get("wind-speed"))) {
|
|
|
- target.setWindSpeed((float) value);
|
|
|
- } else if (uc.equals(appConfig.getUniformcodeOne().get("active-power"))) {
|
|
|
- target.setPower((float) value);
|
|
|
- } else if (uc.equals(appConfig.getUniformcodeOne().get("generator_speed"))) {
|
|
|
- target.setGeneratorSpeed((float) value);
|
|
|
- } else if (uc.equals(appConfig.getUniformcodeOne().get("impeller_speed"))) {
|
|
|
- target.setImpellerSpeed((float) value);
|
|
|
- } else if (uc.equals(appConfig.getUniformcodeOne().get("wind_direction"))) {
|
|
|
- target.setWindDirection((float) value);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
private void init() throws InterruptedException {
|
|
|
|
|
|
//缓存1分钟的值填满pdaqMap
|
|
|
for (int i = 0; i < 60; i++) {
|
|
|
- Map<String, PointData> latest = adapterApi.getLatest(pointCodes);
|
|
|
+ Map<String, PointData> latest = adapterApi.getLatest(CacheContext.pointCodes);
|
|
|
if (i == 0) {
|
|
|
latest.forEach((k, v) -> {
|
|
|
ArrayDeque<PointData> pdaq = new ArrayDeque<>(60);
|
|
@@ -154,7 +75,7 @@ public class CauseJobHandler implements ApplicationRunner {
|
|
|
|
|
|
try {
|
|
|
while (true) {
|
|
|
- Map<String, PointData> latest = adapterApi.getLatest(pointCodes);
|
|
|
+ Map<String, PointData> latest = adapterApi.getLatest(CacheContext.pointCodes);
|
|
|
latest.forEach((k, v) -> {
|
|
|
pdaqMap.get(k).poll();
|
|
|
pdaqMap.get(k).offer(v);
|
|
@@ -169,7 +90,7 @@ public class CauseJobHandler implements ApplicationRunner {
|
|
|
@Scheduled(fixedRate = 60000)
|
|
|
private void calcRealtimeAverageTarget() {
|
|
|
|
|
|
- if(!isload) return;
|
|
|
+ if (!isload) return;
|
|
|
try {
|
|
|
String pointCode = null;
|
|
|
RealtimeAverageTarget target;
|
|
@@ -177,11 +98,11 @@ public class CauseJobHandler implements ApplicationRunner {
|
|
|
//uniformcode,点名
|
|
|
Map<String, String> entryValue;
|
|
|
Map<String, String> uniformcodeOne = appConfig.getUniformcodeOne();
|
|
|
- float speed;
|
|
|
+ double speed;
|
|
|
Double power;
|
|
|
|
|
|
List<RealtimeAverageTarget> targets = new ArrayList<>();
|
|
|
- for (Map.Entry<String, Map<String, String>> entry : equipUcMap.entrySet()) {
|
|
|
+ for (Map.Entry<String, Map<String, String>> entry : CacheContext.equipUcMap.entrySet()) {
|
|
|
|
|
|
entryValue = entry.getValue();
|
|
|
|
|
@@ -193,18 +114,18 @@ public class CauseJobHandler implements ApplicationRunner {
|
|
|
pointCode = entryValue.get(uniformcodeOne.get("wind-speed"));
|
|
|
if (pointCode != null) {
|
|
|
v = pdaqMap.get(pointCode).stream().mapToDouble(data -> data.getDoubleValue()).average().orElse(0);
|
|
|
- speed = NumberUtil.round(v, 2).floatValue();
|
|
|
- target.setWindSpeed(speed);
|
|
|
- if(speed<3) {
|
|
|
+ speed = NumberUtil.round(v, 2).doubleValue();
|
|
|
+ target.setWindSpeed((float) speed);
|
|
|
+ if (speed < 3) {
|
|
|
power = Double.valueOf(0);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
power = CacheContext.mpdsMapMap.get(CacheContext.equipModelMap.get(entry.getKey())).get(speed);
|
|
|
}
|
|
|
- if(power==null){
|
|
|
+ if (power == null) {
|
|
|
power = Double.valueOf(0);
|
|
|
- System.out.println(entry.getKey()+speed);
|
|
|
+ System.out.println(entry.getKey() + speed);
|
|
|
}
|
|
|
- target.setTheoryGeneration(NumberUtil.round(power/60, 3).floatValue());
|
|
|
+ target.setTheoryGeneration(NumberUtil.round(power / 60, 3).floatValue());
|
|
|
}
|
|
|
pointCode = entryValue.get(uniformcodeOne.get("active-power"));
|
|
|
if (pointCode != null) {
|
|
@@ -228,7 +149,7 @@ public class CauseJobHandler implements ApplicationRunner {
|
|
|
}
|
|
|
targets.add(target);
|
|
|
}
|
|
|
- //realtimeAverageTargetService.saveBatch(targets);
|
|
|
+ realtimeAverageTargetService.saveBatch(targets);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|