|
@@ -1,5 +1,6 @@
|
|
|
package com.ruoyi;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.thread.ThreadUtil;
|
|
@@ -13,18 +14,24 @@ import com.ruoyi.ucp.service.*;
|
|
|
import com.ruoyi.ucp.util.CalcCache;
|
|
|
import org.apache.commons.math3.fitting.PolynomialCurveFitter;
|
|
|
import org.apache.commons.math3.fitting.WeightedObservedPoints;
|
|
|
+import org.junit.Test;
|
|
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.net.URI;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class JavaFunctionJobHandler extends IJobHandler {
|
|
|
|
|
|
+/* @Resource
|
|
|
+ private PointInfo pointInfo;*/
|
|
|
+
|
|
|
@Resource
|
|
|
private AdapterApi adapter;
|
|
|
@Resource
|
|
@@ -322,61 +329,6 @@ public class JavaFunctionJobHandler extends IJobHandler {
|
|
|
stationInfoHourService.saveOrUpdateBatch(byHours);
|
|
|
}
|
|
|
|
|
|
- public void writeReportPool(Date date) {
|
|
|
- //date当天零点
|
|
|
- DateTime time = DateUtil.beginOfDay(date);
|
|
|
- //date昨天零点
|
|
|
- DateTime time0 = DateUtil.offsetDay(time, -1);
|
|
|
- DateTime beginOfMonth = DateUtil.beginOfMonth(time0);
|
|
|
- DateTime beginOfYear = DateUtil.beginOfYear(time0);
|
|
|
-
|
|
|
- QueryWrapper<StationInfoDay> wrapper = new QueryWrapper<>();
|
|
|
- wrapper.eq("record_date", time0);
|
|
|
- List<StationInfoDay> days = stationInfoDayService.list(wrapper);
|
|
|
- Map<String, StationInfoDay> dayMap = days.stream().collect(Collectors.toMap(StationInfoDay::getStationId, Function.identity()));
|
|
|
- wrapper = new QueryWrapper<>();
|
|
|
- wrapper.select("sum(rfdl) rfdl,sum(swdl) swdl,sum(gwdl) gwdl,sum(cydl) cydl,sum(zhcydl) zhcydl,station_id")
|
|
|
- .between("record_date", beginOfMonth.toJdkDate(), time0.toJdkDate())
|
|
|
- .groupBy("station_id");
|
|
|
- List<StationInfoDay> monthDays = stationInfoDayService.list(wrapper);
|
|
|
- Map<String, StationInfoDay> monthMap = monthDays.stream().collect(Collectors.toMap(StationInfoDay::getStationId, Function.identity()));
|
|
|
- wrapper = new QueryWrapper<>();
|
|
|
- wrapper.select("sum(rfdl) rfdl,sum(swdl) swdl,sum(gwdl) gwdl,sum(cydl) cydl,sum(zhcydl) zhcydl,station_id")
|
|
|
- .between("record_date", beginOfYear.toJdkDate(), time0.toJdkDate())
|
|
|
- .groupBy("station_id");
|
|
|
- List<StationInfoDay> yearDays = stationInfoDayService.list(wrapper);
|
|
|
- Map<String, StationInfoDay> yearMap = yearDays.stream().collect(Collectors.toMap(StationInfoDay::getStationId, Function.identity()));
|
|
|
- QueryWrapper<ProEconReportIndicatorPool> wrapperrp = new QueryWrapper<>();
|
|
|
- wrapperrp.eq("record_date", time0).last("and foreign_key_id = windpowerstation_id");
|
|
|
- List<ProEconReportIndicatorPool> pools = reportIndicatorPoolService.list(wrapperrp);
|
|
|
-// pools = pools.stream().filter(p -> p.getWindpowerstationId().equals("GJNY_SXGS_ZZ_FDC_STA")).collect(Collectors.toList());
|
|
|
-
|
|
|
- StationInfoDay day, month, year;
|
|
|
- List<ProEconReportIndicatorPool> poolList = new ArrayList<>();
|
|
|
- for (ProEconReportIndicatorPool pool : pools) {
|
|
|
- String stationId = pool.getWindpowerstationId();
|
|
|
- day = dayMap.get(stationId);
|
|
|
- pool.setRfdldb(day.getRfdl().doubleValue());
|
|
|
- pool.setRswdldb(day.getSwdl().doubleValue());
|
|
|
- pool.setRgwgwdldb(day.getGwdl().doubleValue());
|
|
|
- pool.setRfdcydldb(day.getCydl().doubleValue());
|
|
|
- pool.setRzhcydldb(day.getZhcydl().doubleValue());
|
|
|
- month = monthMap.get(stationId);
|
|
|
- pool.setYfdldb(month.getRfdl().doubleValue());
|
|
|
- pool.setYswdldb(month.getSwdl().doubleValue());
|
|
|
- pool.setYgwgwdldb(month.getGwdl().doubleValue());
|
|
|
- pool.setYfdcydldb(month.getCydl().doubleValue());
|
|
|
- pool.setYzhcydldb(month.getZhcydl().doubleValue());
|
|
|
- year = yearMap.get(stationId);
|
|
|
- pool.setNfdldb(year.getRfdl().doubleValue());
|
|
|
- pool.setNswdldb(year.getSwdl().doubleValue());
|
|
|
- pool.setNgwgwdldb(year.getGwdl().doubleValue());
|
|
|
- pool.setNfdcydldb(year.getCydl().doubleValue());
|
|
|
- pool.setNzhcydldb(year.getZhcydl().doubleValue());
|
|
|
- poolList.add(pool);
|
|
|
- }
|
|
|
- reportIndicatorPoolService.saveOrUpdateBatch(poolList);
|
|
|
- }
|
|
|
|
|
|
public void calcLineDjlRfdl(Date date) {
|
|
|
//date当天零点
|
|
@@ -1044,12 +996,7 @@ public class JavaFunctionJobHandler extends IJobHandler {
|
|
|
StateAi::getModel, Collectors.toMap(StateAi::getOriginalState, StateAi::getMappingState)));
|
|
|
|
|
|
// Map<String, Map<Double,Double>> fitMap = new HashMap<>();
|
|
|
- int i = 0;
|
|
|
for (PointInfo ef : entityFs) {
|
|
|
- if (i < 280) {
|
|
|
- i++;
|
|
|
- continue;
|
|
|
- }
|
|
|
String wtId = ef.getTurbineId();
|
|
|
PointInfo glInfo = glMap.get(wtId);
|
|
|
getSnapDataByEntity(ef, start, end, 60);
|
|
@@ -1075,13 +1022,15 @@ public class JavaFunctionJobHandler extends IJobHandler {
|
|
|
}
|
|
|
ef.setPointDatas(null);
|
|
|
glInfo.setPointDatas(null);
|
|
|
- stringRedisTemplate.opsForValue().set("glqxnh:" + end.getMonth() + ":" + wtId, JSON.toJSONString(fit));
|
|
|
+ stringRedisTemplate.opsForValue().set("edfs:" + end.getMonth() + ":" + wtId, JSON.toJSONString(fit));
|
|
|
}
|
|
|
System.out.println("苹果天涯");
|
|
|
// stringRedisTemplate.opsForValue().set("glqxnh", JSON.toJSONString(fitMap));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
public Map<Double, Double> dataProcessAndFit(PointInfo fsPI, PointInfo glPI, PointInfo ztPI, Map<Double, Double> modelPowerMap, double capacity) {
|
|
|
+ System.out.println("开始拟合");
|
|
|
List<PointData> fsPds = fsPI.getPointDatas();
|
|
|
List<PointData> glPds = glPI.getPointDatas();
|
|
|
List<PointData> ztPds = ztPI.getPointDatas();
|
|
@@ -1114,30 +1063,40 @@ public class JavaFunctionJobHandler extends IJobHandler {
|
|
|
}
|
|
|
Map<Double, Double> glyc = new TreeMap<>();
|
|
|
PolynomialCurveFitter fitter = PolynomialCurveFitter.create(4);
|
|
|
- double[] result = fitter.fit(points.toList());
|
|
|
- double min = calcMin(result);
|
|
|
- System.out.println(ztPI.getTurbineId());
|
|
|
- System.out.println(ztPI.getSpare());
|
|
|
- System.out.println(min);
|
|
|
- double[] max = calcMax(result);
|
|
|
- if (min == 0 || max[0] == 0 || max[1] == 0) {
|
|
|
- System.out.println();
|
|
|
- }
|
|
|
- System.out.println(max[0] + "," + max[1]);
|
|
|
- double ru;
|
|
|
- for (double i = 0; i < 25; i += 0.01) {
|
|
|
- i = NumberUtil.round(i, 2).doubleValue();
|
|
|
- if (i < 3) {
|
|
|
- ru = 0.0;
|
|
|
- } else if (i < min) {
|
|
|
- ru = modelPowerMap.get(i);
|
|
|
- } else if (i < max[0]) {
|
|
|
- ru = calcPoly(i, result);
|
|
|
- } else {
|
|
|
- ru = max[1];
|
|
|
+ try {
|
|
|
+ double[] result = fitter.fit(points.toList());
|
|
|
+
|
|
|
+
|
|
|
+ double min = calcMin(result);
|
|
|
+ System.out.println(ztPI.getTurbineId());
|
|
|
+ System.out.println(ztPI.getSpare());
|
|
|
+ System.out.println(min);
|
|
|
+ double[] max = calcMax(result);
|
|
|
+ if (min == 0 || max[0] == 0 || max[1] == 0) {
|
|
|
+ System.out.println();
|
|
|
+ }
|
|
|
+ System.out.println(max[0] + "," + max[1]);
|
|
|
+ double ru;
|
|
|
+ for (double i = 0; i < 25; i += 0.01) {
|
|
|
+ i = NumberUtil.round(i, 2).doubleValue();
|
|
|
+ if (i < 3) {
|
|
|
+ ru = 0.0;
|
|
|
+ } else if (i < min) {
|
|
|
+ ru = modelPowerMap.get(i);
|
|
|
+ } else if (i < max[0]) {
|
|
|
+ ru = calcPoly(i, result);
|
|
|
+ } else {
|
|
|
+ ru = max[1];
|
|
|
+ }
|
|
|
+ glyc.put(i, NumberUtil.round(ru, 2).doubleValue());
|
|
|
}
|
|
|
- glyc.put(i, NumberUtil.round(ru, 2).doubleValue());
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println(ztPI.getTurbineId());
|
|
|
+ System.out.println(ztPI.getSpare());
|
|
|
+ System.out.println(e.getMessage());
|
|
|
}
|
|
|
+ System.out.println("拟合完成" + glyc);
|
|
|
return glyc;
|
|
|
}
|
|
|
|
|
@@ -1204,4 +1163,756 @@ public class JavaFunctionJobHandler extends IJobHandler {
|
|
|
}
|
|
|
return y;
|
|
|
}
|
|
|
-}
|
|
|
+
|
|
|
+
|
|
|
+ //切入切出风速
|
|
|
+
|
|
|
+ public void cutInWindSpeed() {
|
|
|
+ //date当天零点
|
|
|
+ DateTime timeNow00 = DateUtil.beginOfDay(new Date());
|
|
|
+ //date昨天零点
|
|
|
+ DateTime timeBegin00 = DateUtil.offsetDay(timeNow00, -1);
|
|
|
+ //上个月
|
|
|
+ DateTime timeBegin2 = DateUtil.offsetMonth(timeBegin00, -1);
|
|
|
+ //上个月第一天
|
|
|
+ DateTime timeBegin1 = DateUtil.beginOfMonth(timeBegin2);
|
|
|
+ //上个月最后一天
|
|
|
+ DateTime timeEnd2 = DateUtil.endOfMonth(timeBegin2);
|
|
|
+ //上个月天数
|
|
|
+ int days = (int) DateUtil.betweenDay(timeBegin1, timeEnd2, false);
|
|
|
+ //遍历天数
|
|
|
+ for (int i = 1; i <= days; i++) {
|
|
|
+ DateTime timeNow = DateUtil.offsetDay(timeBegin1, i);
|
|
|
+ DateTime timeBegin = DateUtil.offsetDay(timeBegin1, i - 1);
|
|
|
+
|
|
|
+
|
|
|
+ List<PointInfo> turbineZt = calcTurbineAizt(timeBegin, timeNow, 60);
|
|
|
+ List<PointInfo> turbineZtDI = calcTurbineDizt(timeBegin, timeNow, 60);
|
|
|
+ turbineZt.addAll(turbineZtDI);
|
|
|
+
|
|
|
+ //所有风机的风速测点
|
|
|
+ QueryWrapper<PointInfo> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("uniform_code", "AI066");
|
|
|
+
|
|
|
+ List<PointInfo> pointInfos = getEntity("AI066", "turbine");
|
|
|
+// List<PointInfo> pointInfos = pointInfo.selectList(queryWrapper);
|
|
|
+
|
|
|
+ //定义切入风速map集合
|
|
|
+ ConcurrentHashMap<String, ConcurrentHashMap<String, Double>> mapIn = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
+ //定义切出风速集合
|
|
|
+ ConcurrentHashMap<String, ConcurrentHashMap<String, Double>> mapOut = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
+
|
|
|
+ //插入集合
|
|
|
+ List<TurbineInfoDay> interest = new ArrayList<>();
|
|
|
+ //更新集合
|
|
|
+ List<TurbineInfoDay> update = new ArrayList<>();
|
|
|
+ //遍历每台风机,取出每台风机的pointDatas
|
|
|
+ for (PointInfo turbine : turbineZt) {
|
|
|
+
|
|
|
+ mapIn.put(turbine.getTurbineId(), new ConcurrentHashMap<>());
|
|
|
+ mapOut.put(turbine.getTurbineId(), new ConcurrentHashMap<>());
|
|
|
+
|
|
|
+ List<PointData> pointDatas = turbine.getPointDatas();
|
|
|
+
|
|
|
+ //风速测点key
|
|
|
+ String windSpeedKey = null;
|
|
|
+
|
|
|
+
|
|
|
+ //遍历pointInfos,找出pointData1的id和pointInfos中相等的,取出pointInfo的pointKey
|
|
|
+ for (PointInfo info : pointInfos) {
|
|
|
+ if (Objects.equals(turbine.getTurbineId(), info.getTurbineId())) {
|
|
|
+ windSpeedKey = info.getPointKey();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //遍历pointDatas,取出当前状态和后一个状态
|
|
|
+ for (int k = 1; k < pointDatas.size(); k++) {
|
|
|
+ PointData pointData1 = pointDatas.get(k - 1);
|
|
|
+ PointData pointData2 = pointDatas.get(k);
|
|
|
+ double value1 = pointData1.getValue();
|
|
|
+ double value2 = pointData2.getValue();
|
|
|
+ //切入时间
|
|
|
+ long ts1;
|
|
|
+ //切出时间
|
|
|
+ long ts2;
|
|
|
+
|
|
|
+ //如果1的值为0,2的值为2,则为切入状态
|
|
|
+ if (value1 == 0 && value2 == 2) {
|
|
|
+ ts1 = pointData2.getTs();
|
|
|
+// String stringDate = DateUtil.date(ts1).toString("yyyy-MM-dd HH:mm:ss");
|
|
|
+// System.out.println(turbine.getTurbineId() + "切入" + stringDate);
|
|
|
+ //切入时间前5分钟
|
|
|
+ long ts11 = ts1 - 300000;
|
|
|
+ //根据风速key,从适配器取切入前5分钟的所有风速
|
|
|
+ List<PointData> pointDatas1 = adapter.getHistorySnap(goldenUri(), windSpeedKey, ts11, ts1, 10);
|
|
|
+ //平均所有风速即为平均切入风速
|
|
|
+ double avgCutInWindSpeed = pointDatas1.stream().mapToDouble(PointData::getValue).average().orElse(0);
|
|
|
+// System.out.println(turbine.getTurbineId() + "切入风速" + avgCutInWindSpeed);
|
|
|
+
|
|
|
+ //存入map集合,外层key为turbineId,内层key为ts1,value为平均切入风速
|
|
|
+
|
|
|
+ mapIn.get(turbine.getTurbineId()).put(String.valueOf(ts1), avgCutInWindSpeed);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //切出
|
|
|
+ if (value1 == 2 && value2 != 2) {
|
|
|
+ ts2 = pointData2.getTs();
|
|
|
+ String stringDate = DateUtil.date(ts2).toString("yyyy-MM-dd HH:mm:ss");
|
|
|
+// System.out.println(turbine.getTurbineId() + "切出" + stringDate);
|
|
|
+ //切出时间前5分钟
|
|
|
+ long ts22 = ts2 - 300000;
|
|
|
+ List<PointData> pointDatas2 = adapter.getHistorySnap(goldenUri(), windSpeedKey, ts22, ts2, 10);
|
|
|
+ double avgCutOutWindSpeed = pointDatas2.stream().mapToDouble(PointData::getValue).average().orElse(0);
|
|
|
+// System.out.println(turbine.getTurbineId() + "切出风速" + avgCutOutWindSpeed);
|
|
|
+
|
|
|
+ //存入map集合,外层key为turbineId,内层key为ts2,value为平均切出风速
|
|
|
+
|
|
|
+ mapOut.get(turbine.getTurbineId()).put(String.valueOf(ts2), avgCutOutWindSpeed);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //遍历map集合,取出每个风机的所有切入风速,算一个平均值
|
|
|
+ ConcurrentHashMap<String, Double> mapTurbineValues = mapIn.get(turbine.getTurbineId());
|
|
|
+ //平均切入风速
|
|
|
+ double avgCutInWindSpeed = 0;
|
|
|
+ if (mapTurbineValues != null) {
|
|
|
+ AtomicReference<Double> sum = new AtomicReference<>(0.0);
|
|
|
+ //遍历mapTurbineValues,V大于5的舍弃,剩余算平均值
|
|
|
+ for (String key : mapTurbineValues.keySet()) {
|
|
|
+ if (mapTurbineValues.get(key) > 5) {
|
|
|
+ mapTurbineValues.remove(key);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mapTurbineValues.forEach((k1, v) -> {
|
|
|
+ sum.updateAndGet(v1 -> v1 + v);
|
|
|
+ });
|
|
|
+
|
|
|
+ //如果值为空则置0
|
|
|
+ if (sum.get() == 0) {
|
|
|
+ avgCutInWindSpeed = 0;
|
|
|
+ } else {
|
|
|
+ avgCutInWindSpeed = sum.get() / mapTurbineValues.size();
|
|
|
+ }
|
|
|
+ System.out.println(turbine.getTurbineId() + "切入平均风速" + avgCutInWindSpeed + "时间" + timeBegin);
|
|
|
+ }
|
|
|
+
|
|
|
+ //遍历map集合,取出每个风机的所有切出风速,算一个平均值
|
|
|
+ ConcurrentHashMap<String, Double> mapTurbineValues2 = mapOut.get(turbine.getTurbineId());
|
|
|
+
|
|
|
+ double avgCutOutWindSpeed;
|
|
|
+ if (mapTurbineValues2 != null) {
|
|
|
+ AtomicReference<Double> sum = new AtomicReference<>(0.0);
|
|
|
+
|
|
|
+ for (String key : mapTurbineValues2.keySet()) {
|
|
|
+ if (mapTurbineValues2.get(key) > 5) {
|
|
|
+ mapTurbineValues2.remove(key);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ mapTurbineValues2.forEach((k2, v) -> {
|
|
|
+ sum.updateAndGet(v1 -> v1 + v);
|
|
|
+ });
|
|
|
+
|
|
|
+ if (sum.get() == 0) {
|
|
|
+ avgCutOutWindSpeed = 0;
|
|
|
+ } else {
|
|
|
+ avgCutOutWindSpeed = sum.get() / mapTurbineValues2.size();
|
|
|
+ }
|
|
|
+ System.out.println(turbine.getTurbineId() + "切出平均风速" + avgCutOutWindSpeed + "时间" + timeBegin);
|
|
|
+ }
|
|
|
+
|
|
|
+ //存入数据库
|
|
|
+ String turbineId = turbine.getTurbineId();
|
|
|
+ Date jdkDate = timeBegin.toJdkDate();
|
|
|
+ System.out.println(turbineId + " " + jdkDate);
|
|
|
+ QueryWrapper<TurbineInfoDay> turbineInfoDayQueryWrapper = new QueryWrapper<>();
|
|
|
+ turbineInfoDayQueryWrapper.eq("turbine_id", turbine.getTurbineId());
|
|
|
+ turbineInfoDayQueryWrapper.eq("record_date", timeBegin.toJdkDate());
|
|
|
+ TurbineInfoDay one = turbineInfoDayService.getOne(turbineInfoDayQueryWrapper);
|
|
|
+ System.out.println(one);
|
|
|
+ if (one == null) {
|
|
|
+ TurbineInfoDay turbineInfoDay = new TurbineInfoDay();
|
|
|
+ turbineInfoDay.setTurbineId(turbine.getTurbineId());
|
|
|
+ turbineInfoDay.setRecordDate(timeBegin.toJdkDate());
|
|
|
+ turbineInfoDay.setXfqrfs(avgCutInWindSpeed);
|
|
|
+ System.out.println(turbineInfoDay);
|
|
|
+
|
|
|
+ interest.add(turbineInfoDay);
|
|
|
+// turbineInfoDayService.save(turbineInfoDay);
|
|
|
+ } else {
|
|
|
+ one.setXfqrfs(avgCutInWindSpeed);
|
|
|
+ System.out.println(one);
|
|
|
+// turbineInfoDayService.updateById(one);
|
|
|
+ update.add(one);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // //批量插入
|
|
|
+// turbineInfoDayService.saveBatch(interest);
|
|
|
+// //批量更新
|
|
|
+// turbineInfoDayService.updateBatchById(update);
|
|
|
+// //批量插入或更新
|
|
|
+ turbineInfoDayService.saveOrUpdateBatch(interest);
|
|
|
+ turbineInfoDayService.saveOrUpdateBatch(update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //算额定风速
|
|
|
+ public void calcGlqxnh_edfs() {
|
|
|
+ //date当天零点
|
|
|
+ DateTime timeNow00 = DateUtil.beginOfDay(new Date());
|
|
|
+ //date昨天零点
|
|
|
+ DateTime timeBegin00 = DateUtil.offsetDay(timeNow00, -1);
|
|
|
+ //上个月
|
|
|
+ DateTime timeBegin2 = DateUtil.offsetMonth(timeBegin00, -1);
|
|
|
+ //上个月第一天
|
|
|
+ DateTime timeBegin1 = DateUtil.beginOfMonth(timeBegin2);
|
|
|
+ //上个月最后一天
|
|
|
+ DateTime timeEnd2 = DateUtil.endOfMonth(timeBegin2);
|
|
|
+ //上个月天数
|
|
|
+ int days = (int) DateUtil.betweenDay(timeBegin1, timeEnd2, false);
|
|
|
+ //遍历天数
|
|
|
+ for (int i = 1; i <= days; i++) {
|
|
|
+ DateTime end = DateUtil.offsetDay(timeBegin1, i);
|
|
|
+ DateTime start = DateUtil.offsetDay(timeBegin1, i - 1);
|
|
|
+
|
|
|
+ //风速
|
|
|
+ List<PointInfo> entityFs = getEntity("AI066", "turbine");
|
|
|
+ //功率
|
|
|
+ List<PointInfo> entityGl = getEntity("AI114", "turbine");
|
|
|
+ Map<String, PointInfo> glMap = entityGl.stream().collect(Collectors.toMap(PointInfo::getTurbineId, Function.identity()));
|
|
|
+
|
|
|
+ Map<String, EquipmentModel> map = equipmentModelService.map();
|
|
|
+
|
|
|
+ List<PointInfo> entity = new ArrayList<>();
|
|
|
+ List<PointInfo> entity0 = getEntity("MX000", "state");
|
|
|
+ List<PointInfo> entity1 = getEntity("MX001", "state");
|
|
|
+ List<PointInfo> entity2 = getEntity("MX002", "state");
|
|
|
+ List<PointInfo> entity4 = getEntity("MX004", "state");
|
|
|
+ List<PointInfo> entity6 = getEntity("MX006", "state");
|
|
|
+ entity.addAll(entity0);
|
|
|
+ entity.addAll(entity1);
|
|
|
+ entity.addAll(entity2);
|
|
|
+ entity.addAll(entity4);
|
|
|
+ entity.addAll(entity6);
|
|
|
+ List<String> keys = entity.stream().map(PointInfo::getPointKey).collect(Collectors.toList());
|
|
|
+ Map<String, PointData> latest = adapter.getHistorySection(goldenUri(), String.join(",", keys), start.getTime());
|
|
|
+ Map<String, Map<String, PointInfo>> wtUcPis = entity.stream().collect(Collectors.groupingBy(PointInfo::getTurbineId, Collectors.toMap(PointInfo::getUniformCode, Function.identity())));
|
|
|
+
|
|
|
+ List<PointInfo> entityAiZt = getEntity("AI422", "state");
|
|
|
+ Map<String, PointInfo> aiztMap = entityAiZt.stream().collect(Collectors.toMap(PointInfo::getTurbineId, Function.identity()));
|
|
|
+ List<StateAi> list = stateAiService.list();
|
|
|
+ Map<String, Map<Integer, Integer>> collectAi = list.stream().collect(Collectors.groupingBy(
|
|
|
+ StateAi::getModel, Collectors.toMap(StateAi::getOriginalState, StateAi::getMappingState)));
|
|
|
+
|
|
|
+// Map<String, Map<Double,Double>> fitMap = new HashMap<>();
|
|
|
+
|
|
|
+ //插入集合
|
|
|
+ List<TurbineInfoDay> interest = new ArrayList<>();
|
|
|
+ //更新集合
|
|
|
+ List<TurbineInfoDay> update = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+ for (PointInfo ef : entityFs) {
|
|
|
+ String wtId = ef.getTurbineId();
|
|
|
+ PointInfo glInfo = glMap.get(wtId);
|
|
|
+ getSnapDataByEntity(ef, start, end, 60);
|
|
|
+ getSnapDataByEntity(glInfo, start, end, 60);
|
|
|
+ List<PointData> peek = ef.getPointDatas().stream().peek(pd -> pd.setDoubleValue(
|
|
|
+ NumberUtil.round(pd.getValue(), 2).doubleValue())).collect(Collectors.toList());
|
|
|
+ ef.setPointDatas(peek);
|
|
|
+
|
|
|
+ try {
|
|
|
+ PointInfo turbineZt = calcTurbineDizt2(wtUcPis.get(wtId), latest, start, end, 60);
|
|
|
+ PointInfo turbineAizt = calcTurbineAizt2(aiztMap.get(wtId), collectAi, start, end, 60);
|
|
|
+
|
|
|
+
|
|
|
+ Map<Double, Double> fit = new TreeMap<>();
|
|
|
+ double capacity = 2000;
|
|
|
+ if (turbineZt != null) {
|
|
|
+ System.out.println("数据处理拟合");
|
|
|
+ capacity = map.get(turbineZt.getSpare()).getPowerProduction();
|
|
|
+ fit = dataProcessAndFit(ef, glInfo, turbineZt, CalcCache.bzgl.get(turbineZt.getSpare()), capacity);
|
|
|
+// fitMap.put(wtId, fit);
|
|
|
+ turbineZt.setPointDatas(null);
|
|
|
+ }
|
|
|
+ if (turbineAizt != null) {
|
|
|
+ System.out.println("数据处理拟合");
|
|
|
+ capacity = map.get(turbineAizt.getSpare()).getPowerProduction();
|
|
|
+ fit = dataProcessAndFit(ef, glInfo, turbineAizt, CalcCache.bzgl.get(turbineAizt.getSpare()), capacity);
|
|
|
+// fitMap.put(wtId, fit);
|
|
|
+ turbineAizt.setPointDatas(null);
|
|
|
+ }
|
|
|
+ ef.setPointDatas(null);
|
|
|
+ glInfo.setPointDatas(null);
|
|
|
+
|
|
|
+ //存redis
|
|
|
+// stringRedisTemplate.opsForValue().set("glqxnh:" + end.getMonth() + ":" + wtId, JSON.toJSONString(fit));
|
|
|
+
|
|
|
+ System.out.println("拟合曲线的大小" + fit.size() + ":" + wtId);
|
|
|
+
|
|
|
+ //符合条件的风速和
|
|
|
+ List<Double> listDouble = new ArrayList<>();
|
|
|
+ //遍历fit集合,取出值与capacity相等的key
|
|
|
+ if (!fit.isEmpty()) {
|
|
|
+ for (double key : fit.keySet()) {
|
|
|
+ Double v = fit.get(key);
|
|
|
+ //如果v-capacity的值小于10大于-10,则把key加入listDouble
|
|
|
+ if ((Math.abs(v - capacity) <= 10) && Math.abs(v - capacity) >= -10) {
|
|
|
+ listDouble.add(key);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //取出listDouble的值求平均值
|
|
|
+ double agValue = 0;
|
|
|
+ if (!listDouble.isEmpty()) {
|
|
|
+ for (Double aDouble : listDouble) {
|
|
|
+ agValue += aDouble;
|
|
|
+ }
|
|
|
+ agValue = agValue / listDouble.size();
|
|
|
+ }
|
|
|
+ System.out.println("wtId:" + wtId + "agValue平均额定风速:" + agValue);
|
|
|
+
|
|
|
+
|
|
|
+ //存入数据库
|
|
|
+ System.out.println(wtId + " " + start);
|
|
|
+ QueryWrapper<TurbineInfoDay> turbineInfoDayQueryWrapper = new QueryWrapper<>();
|
|
|
+ turbineInfoDayQueryWrapper.eq("turbine_id", wtId);
|
|
|
+ turbineInfoDayQueryWrapper.eq("record_date", start);
|
|
|
+ TurbineInfoDay one = turbineInfoDayService.getOne(turbineInfoDayQueryWrapper);
|
|
|
+ System.out.println(one);
|
|
|
+ if (one == null) {
|
|
|
+ TurbineInfoDay turbineInfoDay = new TurbineInfoDay();
|
|
|
+ turbineInfoDay.setTurbineId(wtId);
|
|
|
+ turbineInfoDay.setRecordDate(start);
|
|
|
+ turbineInfoDay.setEdfs(agValue);
|
|
|
+ System.out.println(turbineInfoDay);
|
|
|
+// turbineInfoDayService.save(turbineInfoDay);
|
|
|
+ interest.add(turbineInfoDay);
|
|
|
+ } else {
|
|
|
+ one.setEdfs(agValue);
|
|
|
+ System.out.println(one);
|
|
|
+// turbineInfoDayService.updateById(one);
|
|
|
+ update.add(one);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println(wtId + " " + start);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // //批量插入
|
|
|
+// turbineInfoDayService.saveBatch(interest);
|
|
|
+// //批量更新
|
|
|
+// turbineInfoDayService.updateBatchById(update);
|
|
|
+// //批量插入或更新
|
|
|
+ turbineInfoDayService.saveOrUpdateBatch(interest);
|
|
|
+ turbineInfoDayService.saveOrUpdateBatch(update);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+// stringRedisTemplate.opsForValue().set("glqxnh", JSON.toJSONString(fitMap));
|
|
|
+ }
|
|
|
+
|
|
|
+ //环境温度
|
|
|
+ public void ambientTemperature() {
|
|
|
+ //date当天零点
|
|
|
+ DateTime timeNow = DateUtil.beginOfDay(new Date());
|
|
|
+ //date昨天零点
|
|
|
+ DateTime timeBegin = DateUtil.offsetDay(timeNow, -1);
|
|
|
+
|
|
|
+
|
|
|
+ //所有风机的温度
|
|
|
+ QueryWrapper<PointInfo> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("uniform_code", "AI072");
|
|
|
+
|
|
|
+ List<PointInfo> pointInfos = getEntity("AI072", "turbine");
|
|
|
+
|
|
|
+ //插入集合
|
|
|
+ List<TurbineInfoDay> interest = new ArrayList<>();
|
|
|
+ //更新集合
|
|
|
+ List<TurbineInfoDay> update = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+ //遍历pointInfos
|
|
|
+ for (PointInfo turbine : pointInfos) {
|
|
|
+ List<PointData> pointDatas = adapter.getHistorySnap(goldenUri(), turbine.getPointKey(), timeBegin.getTime(), timeNow.getTime(), 10);
|
|
|
+ //遍历pointDatas,取出数据算平均值
|
|
|
+ double avgCutInWindSpeed = 0;
|
|
|
+ for (PointData pointData : pointDatas) {
|
|
|
+ avgCutInWindSpeed += pointData.getValue();
|
|
|
+ }
|
|
|
+ avgCutInWindSpeed /= pointDatas.size();
|
|
|
+
|
|
|
+ //存入数据库
|
|
|
+ String turbineId = turbine.getTurbineId();
|
|
|
+ Date jdkDate = timeBegin.toJdkDate();
|
|
|
+ System.out.println(turbineId + " " + jdkDate);
|
|
|
+ QueryWrapper<TurbineInfoDay> turbineInfoDayQueryWrapper = new QueryWrapper<>();
|
|
|
+ turbineInfoDayQueryWrapper.eq("turbine_id", turbine.getTurbineId());
|
|
|
+ turbineInfoDayQueryWrapper.eq("record_date", timeBegin.toJdkDate());
|
|
|
+ TurbineInfoDay one = turbineInfoDayService.getOne(turbineInfoDayQueryWrapper);
|
|
|
+ System.out.println(one);
|
|
|
+ if (one == null) {
|
|
|
+ TurbineInfoDay turbineInfoDay = new TurbineInfoDay();
|
|
|
+ turbineInfoDay.setTurbineId(turbine.getTurbineId());
|
|
|
+ turbineInfoDay.setRecordDate(timeBegin.toJdkDate());
|
|
|
+ turbineInfoDay.setHjwd(avgCutInWindSpeed);
|
|
|
+ System.out.println(turbineInfoDay);
|
|
|
+ interest.add(turbineInfoDay);
|
|
|
+// turbineInfoDayService.save(turbineInfoDay);
|
|
|
+ } else {
|
|
|
+ one.setHjwd(avgCutInWindSpeed);
|
|
|
+ System.out.println(one);
|
|
|
+ update.add(one);
|
|
|
+// turbineInfoDayService.updateById(one);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+// //批量插入
|
|
|
+// turbineInfoDayService.saveBatch(interest);
|
|
|
+// //批量更新
|
|
|
+// turbineInfoDayService.updateBatchById(update);
|
|
|
+// //批量插入或更新
|
|
|
+ turbineInfoDayService.saveOrUpdateBatch(interest);
|
|
|
+ turbineInfoDayService.saveOrUpdateBatch(update);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void writeReportPool(Date date) {
|
|
|
+ //date当天零点
|
|
|
+ DateTime time = DateUtil.beginOfDay(date);
|
|
|
+ //date昨天零点
|
|
|
+ DateTime time0 = DateUtil.offsetDay(time, -1);
|
|
|
+ DateTime beginOfMonth = DateUtil.beginOfMonth(time0);
|
|
|
+ DateTime beginOfYear = DateUtil.beginOfYear(time0);
|
|
|
+
|
|
|
+ QueryWrapper<StationInfoDay> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.eq("record_date", time0);
|
|
|
+ List<StationInfoDay> days = stationInfoDayService.list(wrapper);
|
|
|
+ Map<String, StationInfoDay> dayMap = days.stream().collect(Collectors.toMap(StationInfoDay::getStationId, Function.identity()));
|
|
|
+ wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select("sum(rfdl) rfdl,sum(swdl) swdl,sum(gwdl) gwdl,sum(cydl) cydl,sum(zhcydl) zhcydl,station_id")
|
|
|
+ .between("record_date", beginOfMonth.toJdkDate(), time0.toJdkDate())
|
|
|
+ .groupBy("station_id");
|
|
|
+ List<StationInfoDay> monthDays = stationInfoDayService.list(wrapper);
|
|
|
+ Map<String, StationInfoDay> monthMap = monthDays.stream().collect(Collectors.toMap(StationInfoDay::getStationId, Function.identity()));
|
|
|
+ wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select("sum(rfdl) rfdl,sum(swdl) swdl,sum(gwdl) gwdl,sum(cydl) cydl,sum(zhcydl) zhcydl,station_id")
|
|
|
+ .between("record_date", beginOfYear.toJdkDate(), time0.toJdkDate())
|
|
|
+ .groupBy("station_id");
|
|
|
+ List<StationInfoDay> yearDays = stationInfoDayService.list(wrapper);
|
|
|
+ Map<String, StationInfoDay> yearMap = yearDays.stream().collect(Collectors.toMap(StationInfoDay::getStationId, Function.identity()));
|
|
|
+
|
|
|
+// QueryWrapper<ProEconReportIndicatorPool> wrapperrp = new QueryWrapper<>();
|
|
|
+// wrapperrp.eq("record_date", time0).last("and foreign_key_id = windpowerstation_id");
|
|
|
+// List<ProEconReportIndicatorPool> pools = reportIndicatorPoolService.list(wrapperrp);
|
|
|
+
|
|
|
+ QueryWrapper<ProEconReportIndicatorPool> wrapperrp = new QueryWrapper<>();
|
|
|
+ wrapperrp.eq("record_date", time0)
|
|
|
+ .in("foreign_key_id", days.stream().map(StationInfoDay::getStationId).collect(Collectors.toList()));
|
|
|
+ List<ProEconReportIndicatorPool> pools = reportIndicatorPoolService.list(wrapperrp);
|
|
|
+
|
|
|
+ if (!pools.isEmpty()) {
|
|
|
+ StationInfoDay day, month, year;
|
|
|
+ List<ProEconReportIndicatorPool> poolList = new ArrayList<>();
|
|
|
+ for (ProEconReportIndicatorPool pool : pools) {
|
|
|
+ String stationId = pool.getForeignKeyId();
|
|
|
+ day = dayMap.get(stationId);
|
|
|
+ pool.setRfdldb(day.getRfdl().doubleValue());
|
|
|
+ pool.setRswdldb(day.getSwdl().doubleValue());
|
|
|
+ pool.setRgwgwdldb(day.getGwdl().doubleValue());
|
|
|
+ pool.setRfdcydldb(day.getCydl().doubleValue());
|
|
|
+ pool.setRzhcydldb(day.getZhcydl().doubleValue());
|
|
|
+ month = monthMap.get(stationId);
|
|
|
+ pool.setYfdldb(month.getRfdl().doubleValue());
|
|
|
+ pool.setYswdldb(month.getSwdl().doubleValue());
|
|
|
+ pool.setYgwgwdldb(month.getGwdl().doubleValue());
|
|
|
+ pool.setYfdcydldb(month.getCydl().doubleValue());
|
|
|
+ pool.setYzhcydldb(month.getZhcydl().doubleValue());
|
|
|
+ year = yearMap.get(stationId);
|
|
|
+ pool.setNfdldb(year.getRfdl().doubleValue());
|
|
|
+ pool.setNswdldb(year.getSwdl().doubleValue());
|
|
|
+ pool.setNgwgwdldb(year.getGwdl().doubleValue());
|
|
|
+ pool.setNfdcydldb(year.getCydl().doubleValue());
|
|
|
+ pool.setNzhcydldb(year.getZhcydl().doubleValue());
|
|
|
+ poolList.add(pool);
|
|
|
+ }
|
|
|
+ reportIndicatorPoolService.saveOrUpdateBatch(poolList);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ List<ProEconReportIndicatorPool> poolList = new ArrayList<>();
|
|
|
+ for (StationInfoDay day : days) {
|
|
|
+ ProEconReportIndicatorPool pool = new ProEconReportIndicatorPool();
|
|
|
+ pool.setRecordDate(time0.toLocalDateTime().toLocalDate());
|
|
|
+ pool.setForeignKeyId(day.getStationId());
|
|
|
+ poolList.add(pool);
|
|
|
+ }
|
|
|
+ reportIndicatorPoolService.saveOrUpdateBatch(poolList);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void writeReportPoolProject(Date date) {
|
|
|
+ //date当天零点
|
|
|
+ DateTime time = DateUtil.beginOfDay(date);
|
|
|
+ //date昨天零点
|
|
|
+ DateTime time0 = DateUtil.offsetDay(time, -1);
|
|
|
+ DateTime beginOfMonth = DateUtil.beginOfMonth(time0);
|
|
|
+ DateTime beginOfYear = DateUtil.beginOfYear(time0);
|
|
|
+
|
|
|
+ QueryWrapper<LineInfoDay> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select("sum(rfdl) rfdl,sum(swdl) swdl,sum(gwdl) gwdl,sum(cydl) cydl,project_id")
|
|
|
+ .eq("record_date", time0)
|
|
|
+ .groupBy("project_id");
|
|
|
+ List<LineInfoDay> days = lineInfoDayService.list(wrapper);
|
|
|
+ Map<String, LineInfoDay> dayMap = days.stream().collect(Collectors.toMap(LineInfoDay::getProjectId, Function.identity()));
|
|
|
+ wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select("sum(rfdl) rfdl,sum(swdl) swdl,sum(gwdl) gwdl,sum(cydl) cydl,project_id")
|
|
|
+ .between("record_date", beginOfMonth, time0)
|
|
|
+ .groupBy("project_id");
|
|
|
+ List<LineInfoDay> monthDays = lineInfoDayService.list(wrapper);
|
|
|
+ Map<String, LineInfoDay> monthMap = monthDays.stream().collect(Collectors.toMap(LineInfoDay::getProjectId, Function.identity()));
|
|
|
+ wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select("sum(rfdl) rfdl,sum(swdl) swdl,sum(gwdl) gwdl,sum(cydl) cydl,project_id")
|
|
|
+ .between("record_date", beginOfYear, time0)
|
|
|
+ .groupBy("project_id");
|
|
|
+ List<LineInfoDay> yearDays = lineInfoDayService.list(wrapper);
|
|
|
+ Map<String, LineInfoDay> yearMap = yearDays.stream().collect(Collectors.toMap(LineInfoDay::getProjectId, Function.identity()));
|
|
|
+
|
|
|
+ QueryWrapper<ProEconReportIndicatorPool> wrapperrp = new QueryWrapper<>();
|
|
|
+ wrapperrp.eq("record_date", time0).last("and foreign_key_id = project_id");
|
|
|
+ List<ProEconReportIndicatorPool> pools = reportIndicatorPoolService.list(wrapperrp);
|
|
|
+
|
|
|
+
|
|
|
+ QueryWrapper<ProEconReportIndicatorPool> wrapperrp2 = new QueryWrapper<>();
|
|
|
+ wrapperrp2.eq("record_date", time0)
|
|
|
+ .in("foreign_key_id", days.stream().map(LineInfoDay::getProjectId).collect(Collectors.toList()));
|
|
|
+ List<ProEconReportIndicatorPool> pools2 = reportIndicatorPoolService.list(wrapperrp2);
|
|
|
+
|
|
|
+ if (!pools2.isEmpty()) {
|
|
|
+ LineInfoDay day, month, year;
|
|
|
+ List<ProEconReportIndicatorPool> poolList = new ArrayList<>();
|
|
|
+ String projectId;
|
|
|
+ for (ProEconReportIndicatorPool pool : pools2) {
|
|
|
+ projectId = pool.getForeignKeyId();
|
|
|
+ day = dayMap.get(projectId);
|
|
|
+ pool.setRfdldb(day.getRfdl().doubleValue());
|
|
|
+ pool.setRswdldb(day.getSwdl());
|
|
|
+ pool.setRgwgwdldb(day.getGwdl());
|
|
|
+ pool.setRfdcydldb(day.getCydl());
|
|
|
+ pool.setRzhcydldb(day.getRfdl().doubleValue() + day.getGwdl() - day.getSwdl());
|
|
|
+ month = monthMap.get(projectId);
|
|
|
+ pool.setYfdldb(month.getRfdl().doubleValue());
|
|
|
+ pool.setYswdldb(month.getSwdl());
|
|
|
+ pool.setYgwgwdldb(month.getGwdl());
|
|
|
+ pool.setYfdcydldb(month.getCydl());
|
|
|
+ pool.setRzhcydldb(month.getRfdl().doubleValue() + month.getGwdl() - month.getSwdl());
|
|
|
+ year = yearMap.get(projectId);
|
|
|
+ pool.setNfdldb(year.getRfdl().doubleValue());
|
|
|
+ pool.setNswdldb(year.getSwdl());
|
|
|
+ pool.setNgwgwdldb(year.getGwdl());
|
|
|
+ pool.setNfdcydldb(year.getCydl());
|
|
|
+ pool.setRzhcydldb(year.getRfdl().doubleValue() + year.getGwdl() - year.getSwdl());
|
|
|
+ poolList.add(pool);
|
|
|
+ }
|
|
|
+ reportIndicatorPoolService.saveOrUpdateBatch(poolList);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ List<ProEconReportIndicatorPool> poolList = new ArrayList<>();
|
|
|
+ for (LineInfoDay day : days) {
|
|
|
+ ProEconReportIndicatorPool pool = new ProEconReportIndicatorPool();
|
|
|
+ pool.setRecordDate(time0.toLocalDateTime().toLocalDate());
|
|
|
+ pool.setForeignKeyId(day.getProjectId());
|
|
|
+ poolList.add(pool);
|
|
|
+ }
|
|
|
+ reportIndicatorPoolService.saveOrUpdateBatch(poolList);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void writeReportPoolPjfs(Date date) {
|
|
|
+ //date当天零点
|
|
|
+ DateTime time = DateUtil.beginOfDay(date);
|
|
|
+ //date昨天零点
|
|
|
+ DateTime time0 = DateUtil.offsetDay(time, -1);
|
|
|
+ DateTime beginOfMonth = DateUtil.beginOfMonth(time0);
|
|
|
+ DateTime beginOfYear = DateUtil.beginOfYear(time0);
|
|
|
+
|
|
|
+ QueryWrapper<TurbineInfoDay> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select("avg(pjfs) pjfs,project_id")
|
|
|
+ .eq("record_date", time0)
|
|
|
+ .groupBy("project_id");
|
|
|
+ List<TurbineInfoDay> days = turbineInfoDayService.list(wrapper);
|
|
|
+ Map<String, TurbineInfoDay> dayMap = days.stream().collect(Collectors.toMap(TurbineInfoDay::getProjectId, Function.identity()));
|
|
|
+ wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select("avg(pjfs) pjfs,project_id")
|
|
|
+ .between("record_date", beginOfMonth, time0)
|
|
|
+ .groupBy("project_id");
|
|
|
+ List<TurbineInfoDay> monthDays = turbineInfoDayService.list(wrapper);
|
|
|
+ Map<String, TurbineInfoDay> monthMap = monthDays.stream().collect(Collectors.toMap(TurbineInfoDay::getProjectId, Function.identity()));
|
|
|
+ wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.select("avg(pjfs) pjfs,project_id")
|
|
|
+ .between("record_date", beginOfYear, time0)
|
|
|
+ .groupBy("project_id");
|
|
|
+ List<TurbineInfoDay> yearDays = turbineInfoDayService.list(wrapper);
|
|
|
+ Map<String, TurbineInfoDay> yearMap = yearDays.stream().collect(Collectors.toMap(TurbineInfoDay::getProjectId, Function.identity()));
|
|
|
+
|
|
|
+// QueryWrapper<ProEconReportIndicatorPool> wrapperrp = new QueryWrapper<>();
|
|
|
+// wrapperrp.eq("record_date", time0).last("and foreign_key_id = project_id");
|
|
|
+
|
|
|
+ QueryWrapper<ProEconReportIndicatorPool> wrapperrp = new QueryWrapper<>();
|
|
|
+ wrapperrp.eq("record_date", time0)
|
|
|
+ .in("foreign_key_id", days.stream().map(TurbineInfoDay::getProjectId).collect(Collectors.toList()));
|
|
|
+ List<ProEconReportIndicatorPool> pools = reportIndicatorPoolService.list(wrapperrp);
|
|
|
+
|
|
|
+
|
|
|
+ ProEconReportIndicatorPool GSPJFS = new ProEconReportIndicatorPool();
|
|
|
+ GSPJFS.setRecordDate(time0.toLocalDateTime().toLocalDate());
|
|
|
+ GSPJFS.setForeignKeyId("GJNY_SXGS_DBXNY_ZGS0");
|
|
|
+ GSPJFS.setCompanyId("GJNY_SXGS_DBXNY_ZGS");
|
|
|
+ reportIndicatorPoolService.save(GSPJFS);
|
|
|
+
|
|
|
+
|
|
|
+ wrapperrp = new QueryWrapper<>();
|
|
|
+ wrapperrp.eq("record_date", time0).eq("foreign_key_id", "GJNY_SXGS_DBXNY_ZGS0");
|
|
|
+ List<ProEconReportIndicatorPool> pools2 = reportIndicatorPoolService.list(wrapperrp);
|
|
|
+
|
|
|
+ TurbineInfoDay day, month, year;
|
|
|
+ String projectId;
|
|
|
+
|
|
|
+ if (!pools.isEmpty()) {
|
|
|
+ for (ProEconReportIndicatorPool pool : pools) {
|
|
|
+ projectId = pool.getForeignKeyId();
|
|
|
+ day = dayMap.get(projectId);
|
|
|
+ pool.setRpjfs(day.getPjfs());
|
|
|
+ month = monthMap.get(projectId);
|
|
|
+ pool.setYpjfs(month.getPjfs());
|
|
|
+ year = yearMap.get(projectId);
|
|
|
+ pool.setNpjfs(year.getPjfs());
|
|
|
+ }
|
|
|
+ double v1 = pools.stream().mapToDouble(ProEconReportIndicatorPool::getRpjfs).average().orElse(0);
|
|
|
+ double v2 = pools.stream().mapToDouble(ProEconReportIndicatorPool::getYpjfs).average().orElse(0);
|
|
|
+ double v3 = pools.stream().mapToDouble(ProEconReportIndicatorPool::getNpjfs).average().orElse(0);
|
|
|
+ if (CollUtil.isNotEmpty(pools2)) {
|
|
|
+ pools2.get(0).setRpjfs(v1);
|
|
|
+ pools2.get(0).setYpjfs(v2);
|
|
|
+ pools2.get(0).setNpjfs(v3);
|
|
|
+ reportIndicatorPoolService.saveOrUpdateBatch(pools2);
|
|
|
+ }
|
|
|
+ reportIndicatorPoolService.saveOrUpdateBatch(pools);
|
|
|
+ } else {
|
|
|
+ List<ProEconReportIndicatorPool> poolList = new ArrayList<>();
|
|
|
+ for (TurbineInfoDay day2 : days) {
|
|
|
+ ProEconReportIndicatorPool pool = new ProEconReportIndicatorPool();
|
|
|
+ pool.setRecordDate(time0.toLocalDateTime().toLocalDate());
|
|
|
+ pool.setForeignKeyId(day2.getProjectId());
|
|
|
+ poolList.add(pool);
|
|
|
+ }
|
|
|
+ reportIndicatorPoolService.saveOrUpdateBatch(poolList);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void gongsizhibiao() {
|
|
|
+ //date当天零点
|
|
|
+ DateTime time = DateUtil.beginOfDay(new Date());
|
|
|
+ //date昨天零点
|
|
|
+ DateTime time0 = DateUtil.offsetDay(time, -1);
|
|
|
+ DateTime beginOfMonth = DateUtil.beginOfMonth(time0);
|
|
|
+ DateTime beginOfYear = DateUtil.beginOfYear(time0);
|
|
|
+
|
|
|
+ QueryWrapper<ProEconReportIndicatorPool> wrapper = new QueryWrapper<>();
|
|
|
+ wrapper.eq("record_date", time0)
|
|
|
+ //包含"STA"
|
|
|
+ .like("foreign_key_id", "_STA");
|
|
|
+ List<ProEconReportIndicatorPool> list = reportIndicatorPoolService.list(wrapper);
|
|
|
+ //遍历list,累加指标RFDL
|
|
|
+
|
|
|
+ //公司指标,日发电量
|
|
|
+ double rfdl = 0;
|
|
|
+ //公司指标,日上网电量
|
|
|
+ double swdl = 0;
|
|
|
+ //公司指标,日购网电量
|
|
|
+ double gwdl = 0;
|
|
|
+ //公司指标,日综合厂用电量
|
|
|
+ double zhcydl = 0;
|
|
|
+
|
|
|
+ //公司指标,月发电量
|
|
|
+ double yfdl = 0;
|
|
|
+ //公司指标,月上网电量
|
|
|
+ double yswdl = 0;
|
|
|
+ //公司指标,月购网电量
|
|
|
+ double ygwdl = 0;
|
|
|
+ //公司指标,月综合厂用电量
|
|
|
+ double yzhcydl = 0;
|
|
|
+
|
|
|
+ //公司指标,年发电量
|
|
|
+ double nfdl = 0;
|
|
|
+ //公司指标,年上网电量
|
|
|
+ double nswdl = 0;
|
|
|
+ //公司指标,年购网电量
|
|
|
+ double ngwdl = 0;
|
|
|
+ //公司指标,年综合厂用电量
|
|
|
+ double nzhcydl = 0;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ for (ProEconReportIndicatorPool pool : list) {
|
|
|
+ rfdl += pool.getRfdldb();
|
|
|
+ swdl += pool.getRswdldb();
|
|
|
+ gwdl += pool.getRgwgwdldb();
|
|
|
+ zhcydl += pool.getRzhcydldb();
|
|
|
+ yfdl += pool.getYfdldb();
|
|
|
+ yswdl += pool.getYswdldb();
|
|
|
+ ygwdl += pool.getYgwgwdldb();
|
|
|
+ yzhcydl += pool.getYzhcydldb();
|
|
|
+ nfdl += pool.getNfdldb();
|
|
|
+ nswdl += pool.getNswdldb();
|
|
|
+ ngwdl += pool.getNgwgwdldb();
|
|
|
+ nzhcydl += pool.getNzhcydldb();
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<ProEconReportIndicatorPool> wrapperrp2 = new QueryWrapper<>();
|
|
|
+ wrapperrp2.eq("record_date", time0).eq("foreign_key_id", "GJNY_SXGS_DBXNY_ZGS0");
|
|
|
+ ProEconReportIndicatorPool GSZB = reportIndicatorPoolService.getOne(wrapperrp2);
|
|
|
+ //公司指标集合
|
|
|
+ GSZB.setRfdldb(rfdl);
|
|
|
+ GSZB.setRswdldb(swdl);
|
|
|
+ GSZB.setRgwgwdldb(gwdl);
|
|
|
+ GSZB.setRzhcydldb(zhcydl);
|
|
|
+ GSZB.setYfdldb(yfdl);
|
|
|
+ GSZB.setYswdldb(yswdl);
|
|
|
+ GSZB.setYgwgwdldb(ygwdl);
|
|
|
+ GSZB.setYzhcydldb(yzhcydl);
|
|
|
+ GSZB.setNfdldb(nfdl);
|
|
|
+ GSZB.setNswdldb(nswdl);
|
|
|
+ GSZB.setNgwgwdldb(ngwdl);
|
|
|
+ GSZB.setNzhcydldb(nzhcydl);
|
|
|
+
|
|
|
+ reportIndicatorPoolService.saveOrUpdate(GSZB);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|