GYEE 5 mesiacov pred
rodič
commit
4143f4ecef

+ 116 - 125
ruoyi-admin/src/test/java/com/ruoyi/JavaFunctionJobHandler.java

@@ -1050,12 +1050,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);
@@ -1081,125 +1076,13 @@ 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 void calcGlqxnh_edfs(Date start, Date end) {
-        //风速
-        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<>();
-        int i = 0;
-        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);
-
-            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) {
-                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) {
-                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));
-
 
-            //符合条件的风速和
-            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);
-            } else {
-                one.setEdfs(agValue);
-                System.out.println(one);
-                turbineInfoDayService.updateById(one);
-            }
-
-
-        }
-
-//        stringRedisTemplate.opsForValue().set("glqxnh", JSON.toJSONString(fitMap));
-    }
 
     public Map<Double, Double> dataProcessAndFit(PointInfo fsPI, PointInfo glPI, PointInfo ztPI, Map<Double, Double> modelPowerMap, double capacity) {
         List<PointData> fsPds = fsPI.getPointDatas();
@@ -1501,17 +1384,125 @@ public class JavaFunctionJobHandler extends IJobHandler {
         }
     }
 
+    //算额定风速
+    public void calcGlqxnh_edfs() {
 
-    //满发下风速
-    @Test
-    public void fullSpeedWindSpeed() {
         //date当天零点
-        DateTime timeNow = DateUtil.beginOfDay(new Date());
+        Date end = DateUtil.beginOfDay(new Date()).toJdkDate();
         //date昨天零点
-        DateTime timeBegin = DateUtil.offsetDay(timeNow, -1);
+        Date start = DateUtil.offsetDay(end, -1).toJdkDate();
+
+        //风速
+        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<>();
+        int i = 0;
+        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);
+
+            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) {
+                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) {
+                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));
 
-        //功率曲线拟合,
-        calcGlqxnh_edfs(timeBegin.toJdkDate(), timeNow.toJdkDate());
+
+            //符合条件的风速和
+            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);
+            } else {
+                one.setEdfs(agValue);
+                System.out.println(one);
+                turbineInfoDayService.updateById(one);
+            }
+
+
+        }
+
+//        stringRedisTemplate.opsForValue().set("glqxnh", JSON.toJSONString(fitMap));
+    }
 
 
 

+ 0 - 236
ruoyi-admin/src/test/java/com/ruoyi/ZhiBiaoCalculation.java

@@ -1,236 +0,0 @@
-package com.ruoyi;
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.TypeReference;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ruoyi.ucp.entity.PointData;
-import com.ruoyi.ucp.entity.PointInfo;
-import com.ruoyi.ucp.entity.TurbineInfoDay;
-import com.ruoyi.ucp.feign.AdapterApi;
-import com.ruoyi.ucp.service.impl.TurbineInfoDayServiceImpl;
-import com.ruoyi.ucp.util.CalcCache;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Author: malijun
- * Data  : 2024: 07: 01
- * 指标计算
- **/
-
-@SpringBootTest
-@RunWith(SpringRunner.class)
-public class ZhiBiaoCalculation {
-
-    @Autowired
-    private JavaFunctionJobHandler javaFunctionJobHandler;
-
-    @Resource
-    private PointInfo pointInfo;
-
-    @Resource
-    private AdapterApi adapter;
-
-    @Resource
-    private TurbineInfoDayServiceImpl turbineInfoDayService;
-
-
-
-
-    //切入切出风速
-    @Test
-    public void cutInWindSpeed() {
-        //date当天零点
-        DateTime timeNow = DateUtil.beginOfDay(new Date());
-        //date昨天零点
-        DateTime timeBegin = DateUtil.offsetDay(timeNow, -1);
-        List<PointInfo> turbineZt = javaFunctionJobHandler.calcTurbineAizt(timeBegin, timeNow, 60);
-        List<PointInfo> turbineZtDI = javaFunctionJobHandler.calcTurbineDizt(timeBegin, timeNow, 60);
-        turbineZt.addAll(turbineZtDI);
-
-        //所有风机的风速测点
-        QueryWrapper<PointInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("uniform_code", "AI066");
-        List<PointInfo> pointInfos = pointInfo.selectList(queryWrapper);
-
-        //定义切入风速map集合
-        ConcurrentHashMap<String, ConcurrentHashMap<String, Double>> mapIn = new ConcurrentHashMap<>();
-
-        //定义切出风速集合
-        ConcurrentHashMap<String, ConcurrentHashMap<String, Double>> mapOut = new ConcurrentHashMap<>();
-
-
-        //遍历每台风机,取出每台风机的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(javaFunctionJobHandler.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(javaFunctionJobHandler.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);
-                turbineInfoDayService.save(turbineInfoDay);
-            } else {
-                one.setXfqrfs(avgCutInWindSpeed);
-                System.out.println(one);
-                turbineInfoDayService.updateById(one);
-            }
-
-        }
-    }
-
-
-    //满发下风速
-    @Test
-    public void fullSpeedWindSpeed() {
-        //date当天零点
-        DateTime timeNow = DateUtil.beginOfDay(new Date());
-        //date昨天零点
-        DateTime timeBegin = DateUtil.offsetDay(timeNow, -1);
-
-        //功率曲线拟合,
-        javaFunctionJobHandler.calcGlqxnh_edfs(timeBegin.toJdkDate(), timeNow.toJdkDate());
-
-
-
-
-
-    }
-
-
-
-
-}

+ 1 - 1
universal-computing-platform/src/main/java/com/ruoyi/ucp/entity/PointInfo.java

@@ -21,7 +21,7 @@ import java.util.List;
  */
 @Data
 @TableName("point_info")
-public class PointInfo extends implements Serializable {
+public class PointInfo  implements Serializable {
 
     private static final long serialVersionUID = 1L;