Browse Source

杨总数据接入tdengine

hxf 1 year ago
parent
commit
ab08e1afa6

+ 54 - 0
neim-biz/src/main/java/com/jiayue/biz/domain/TotalBatteryData.java

@@ -0,0 +1,54 @@
+package com.jiayue.biz.domain;
+
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+public class TotalBatteryData {
+    private Timestamp ts;
+    private String fdl;
+    private String fdly;
+    private String fdln;
+    private String fd1;
+    private String fd1y;
+    private String fd1n;
+    private String fd2;
+    private String fd2y;
+    private String fd2n;
+    private String fd3;
+    private String fd3y;
+    private String fd3n;
+    private String fd4;
+    private String fd4y;
+    private String fd4n;
+    private String fd5;
+    private String fd5y;
+    private String fd5n;
+    private String fd6;
+    private String fd6y;
+    private String fd6n;
+    private String fd7;
+    private String fd7y;
+    private String fd7n;
+    private String fd8;
+    private String fd8y;
+    private String fd8n;
+    private String zfx;
+    private String pjfs;
+    private String zdfs;
+    private String zxfs;
+    private String wdzg;
+    private String wdzd;
+    /**
+     * 等效小时数
+     */
+    private Float equivalentHour;
+    /**
+     * 场站简称
+     */
+    private String stationNameEasy;
+
+
+
+}

+ 90 - 43
neim-biz/src/main/java/com/jiayue/biz/job/AirDensityJob.java

@@ -1,6 +1,9 @@
 package com.jiayue.biz.job;
 
 
+import ch.qos.logback.classic.spi.STEUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.db.Entity;
 import cn.hutool.json.JSONObject;
@@ -20,6 +23,11 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.sql.Timestamp;
@@ -56,6 +64,7 @@ public class AirDensityJob {
     private final com.jiayue.biz.api.apiHDY apiHDY;
 
     private final FanModelDataService fanModelDataService;
+    private final TotalBatteryDataService totalBatteryDataService;
 
 
     @Scheduled(cron = "0 0 19 * * ?")
@@ -219,7 +228,7 @@ public class AirDensityJob {
         }
     }
 
-    //存储杨总数据 TODO 缺少TD Engine 逻辑
+    //存储杨总数据
 //    @Scheduled(cron = "0 30 14 6 7 ?")
     public void saveJsonY() {
 //        String s = apiHDY.jsonY(DateUtil.format(new Date(), "yyyyMMdd"));
@@ -233,58 +242,96 @@ public class AirDensityJob {
                 continue;
             }
             FanJsonInfo towerJsonInfo = jsonObject1.toBean(FanJsonInfo.class);
-            String[] strArr = new String[]{towerJsonInfo.getFdln(), towerJsonInfo.getFd1n(), towerJsonInfo.getFd2n(), towerJsonInfo.getFd3n(), towerJsonInfo.getFd4n()};
-            List<String> collect = new ArrayList<>();
-            if (stationInfo.getStationBasicInfo().getStationType().equals("风")) {
-                collect = stationInfo.getFanTowerList().stream().map(FanTower::getFanModel).distinct().collect(Collectors.toList());
-            } else {
-                collect = stationInfo.getInverterInfos().stream().map(InverterInfo::getModelNumber).distinct().collect(Collectors.toList());
-            }
-            String fdn = "";
-            for (int i = 0; i < collect.size(); i++) {
-                if (collect.size() == 1) {
-                    fdn = strArr[i];
-                } else {
-                    fdn = strArr[i + 1];
-                }
-                String s1 = collect.get(i);
-                if (StrUtil.isBlank(s1)) {
-                    continue;
-                }
-                BigDecimal realTimeTotal = BigDecimal.ZERO;
+            //存储tdEngine
+            convertData(towerJsonInfo, stationInfo);
+            //存储mongo
+//            saveMongoBattery(stationInfo, towerJsonInfo, fanModelDataList);
+        }
+
+    }
 
+    public void saveMongoBattery(StationInfo stationInfo, FanJsonInfo towerJsonInfo, List<FanModelData> fanModelDataList) {
+        String[] strArr = new String[]{towerJsonInfo.getFdln(), towerJsonInfo.getFd1n(), towerJsonInfo.getFd2n(), towerJsonInfo.getFd3n(), towerJsonInfo.getFd4n()};
 
-                String s2 = CalculationUtil.getNumberFromStringForDian(s1);
-                if (StrUtil.isBlank(s2)) {
-                    continue;
-                }
-                //根据风机类型分组
-                Map<String, List<FanTower>> modelMap = stationInfo.getFanTowerList().stream()
-                        .collect(Collectors.groupingBy(FanTower::getFanModel));
-                int fanTotal = modelMap.get(s1).size();
-                fdn = new BigDecimal(fdn).multiply(BigDecimal.valueOf(10)).toString();
-                realTimeTotal = new BigDecimal(fdn).divide(new BigDecimal(s2).multiply(new BigDecimal(fanTotal)), 2, BigDecimal.ROUND_HALF_UP);//满发小时数(年)
-
-                //一期
-                FanModelData fanModelData = new FanModelData(UUID.randomUUID().toString(), stationInfo.getId(),
-                        stationInfo.getStationBasicInfo().getStationName(), s1, stationInfo.getStationBasicInfo().getAbbreviation(),
-                        new BigDecimal(towerJsonInfo.getPjfs()).setScale(2, RoundingMode.HALF_UP).toString(), towerJsonInfo.getZfx(),
-                        fdn, realTimeTotal.toString());
-                //发电量(年)
-                fdn = new BigDecimal(towerJsonInfo.getFd2n()).setScale(2, RoundingMode.HALF_UP).toString();
-                List<FanModelData> modelDataList = fanModelDataList.stream().filter(f -> f.getStationId().equals(stationInfo.getId())
-                        && f.getModelName().equals(s1)).collect(Collectors.toList());
-                if (modelDataList.size() > 0) {
+        List<String> collect = new ArrayList<>();
+        if (stationInfo.getStationBasicInfo().getStationType().equals("风")) {
+            collect = stationInfo.getFanTowerList().stream().map(FanTower::getFanModel).distinct().collect(Collectors.toList());
+        } else {
+            collect = stationInfo.getInverterInfos().stream().map(InverterInfo::getModelNumber).distinct().collect(Collectors.toList());
+        }
+        String fdn = "";
+        for (int i = 0; i < collect.size(); i++) {
+            if (collect.size() == 1) {
+                fdn = strArr[i];
+            } else {
+                fdn = strArr[i + 1];
+            }
+            String s1 = collect.get(i);
+            if (StrUtil.isBlank(s1)) {
+                continue;
+            }
+            BigDecimal realTimeTotal = BigDecimal.ZERO;
+            String s2 = CalculationUtil.getNumberFromStringForDian(s1);
+            if (StrUtil.isBlank(s2)) {
+                continue;
+            }
+            //根据风机类型分组
+            Map<String, List<FanTower>> modelMap = stationInfo.getFanTowerList().stream()
+                    .collect(Collectors.groupingBy(FanTower::getFanModel));
+            int fanTotal = modelMap.get(s1).size();
+            fdn = new BigDecimal(fdn).multiply(BigDecimal.valueOf(10)).toString();
+            realTimeTotal = new BigDecimal(fdn).divide(new BigDecimal(s2).multiply(new BigDecimal(fanTotal)), 2, BigDecimal.ROUND_HALF_UP);//满发小时数(年)
+            //一期
+            FanModelData fanModelData = new FanModelData(UUID.randomUUID().toString(), stationInfo.getId(),
+                    stationInfo.getStationBasicInfo().getStationName(), s1, stationInfo.getStationBasicInfo().getAbbreviation(),
+                    new BigDecimal(towerJsonInfo.getPjfs()).setScale(2, RoundingMode.HALF_UP).toString(), towerJsonInfo.getZfx(),
+                    fdn, realTimeTotal.toString());
+            //发电量(年)
+            fdn = new BigDecimal(towerJsonInfo.getFd2n()).setScale(2, RoundingMode.HALF_UP).toString();
+            List<FanModelData> modelDataList = fanModelDataList.stream().filter(f -> f.getStationId().equals(stationInfo.getId())
+                    && f.getModelName().equals(s1)).collect(Collectors.toList());
+            if (modelDataList.size() > 0) {
 //                    System.out.println("删除");
 //                    fanModelDataService.deleteFanModelData(modelDataList.get(0).getId());
 //
-                }
+            }
 //                System.out.println("新增");
 //                mongoTemplate.save(fanModelData);
 //
-            }
+        }
+    }
+
 
+    public void convertData(FanJsonInfo towerJsonInfo, StationInfo stationInfo) {
+        TotalBatteryData totalBatteryData = new TotalBatteryData();
+        BeanUtil.copyProperties(towerJsonInfo, totalBatteryData);
+        batteryMultiplyTen(totalBatteryData);
+        DateTime yesterday = DateUtil.yesterday();
+        totalBatteryData.setTs(new Timestamp(DateUtil.beginOfDay(yesterday).getTime()));
+        if (StrUtil.isNotBlank(stationInfo.getStationBasicInfo().getCapacity())) {
+            BigDecimal equivalentHour = new BigDecimal(totalBatteryData.getFdln()).divide(new BigDecimal(stationInfo.getStationBasicInfo().getCapacity()), 3, RoundingMode.HALF_UP);
+            totalBatteryData.setEquivalentHour(equivalentHour.floatValue());
+        }
+        totalBatteryData.setStationNameEasy(stationInfo.getStationBasicInfo().getAbbreviation());
+        totalBatteryDataService.insertOne(totalBatteryData);
+    }
 
+    public void batteryMultiplyTen(TotalBatteryData totalBatteryData) {
+        try {
+            Class<? extends TotalBatteryData> aClass = totalBatteryData.getClass();
+            Field[] declaredFields = aClass.getDeclaredFields();
+            for (Field declaredField : declaredFields) {
+                if (declaredField.getName().contains("fd")) {
+                    declaredField.setAccessible(true);
+                    PropertyDescriptor pd = new PropertyDescriptor(declaredField.getName(), aClass);
+                    Method getMethod = pd.getReadMethod();
+                    String invoke = (String) getMethod.invoke(totalBatteryData);
+                    BigDecimal batteryTen = new BigDecimal(invoke).multiply(BigDecimal.valueOf(10)).setScale(2,RoundingMode.HALF_UP);
+                    declaredField.set(totalBatteryData, batteryTen.toString());
+                }
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }
 
     }

+ 14 - 0
neim-biz/src/main/java/com/jiayue/biz/mapper/TotalBatteryDataMapper.java

@@ -0,0 +1,14 @@
+package com.jiayue.biz.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jiayue.biz.domain.TotalBatteryData;
+import org.apache.ibatis.annotations.Insert;
+
+@DS("tdengine")
+public interface TotalBatteryDataMapper extends BaseMapper<TotalBatteryData> {
+    @Insert("INSERT INTO total_battery_${stationNameEasy} USING total_battery_data TAGS(#{stationNameEasy}) VALUES(#{ts},#{fdl},#{fdly},#{fdln},#{fd1},#{fd1y},#{fd1n},#{fd2},#{fd2y},#{fd2n},#{fd3},#{fd3y},#{fd3n},#{fd4},#{fd4y},#{fd4n},#{fd5},#{fd5y},#{fd5n},#{fd6},#{fd6y},#{fd6n},#{fd7},#{fd7y},#{fd7n},#{fd8},#{fd8y},#{fd8n},#{zfx},#{pjfs},#{zdfs},#{zxfs},#{wdzg},#{wdzd},#{equivalentHour})")
+    int insertOne(TotalBatteryData totalBatteryData);
+
+
+}

+ 9 - 0
neim-biz/src/main/java/com/jiayue/biz/service/TotalBatteryDataService.java

@@ -0,0 +1,9 @@
+package com.jiayue.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jiayue.biz.domain.TotalBatteryData;
+
+public interface TotalBatteryDataService extends IService<TotalBatteryData> {
+    //新增 一条
+    void insertOne(TotalBatteryData totalBatteryData);
+}

+ 13 - 12
neim-biz/src/main/java/com/jiayue/biz/service/impl/HomePageServiceImpl.java

@@ -74,6 +74,8 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
 
     private final WindDirectionStatisticsDataService windDirectionStatisticsDataService;
 
+    private final TotalBatteryDataService totalBatteryDataService;
+
 
     private final BigDecimal threeParameterOne = new BigDecimal("1.146");
     private final BigDecimal threeParameterTow = new BigDecimal("77.42");
@@ -590,10 +592,8 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
     public Map<String, Object> selectStationTForAir(String stationId, String equipmentId, String month) {
         List<WindTowerInfo> windTowerInfoList = windTowerInfoService.lambdaQuery().eq(WindTowerInfo::getEquipmentNo, equipmentId).list();
         List<FanModelData> fanModelDataList = fanModelDataService.getFanModelDataList().stream().filter(f -> f.getStationId().equals(stationId)).collect(Collectors.toList());
-
+        List<TotalBatteryData> totalBatteryDataList = totalBatteryDataService.list();
         StationInfo stationInfo = stationInfoService.getOneStationInfo(stationId);
-
-
         String[] wdHeight = windTowerInfoList.get(0).getWdHeights().split(",");
 
         ArrayList<String> arrayList = new ArrayList(Arrays.asList(windTowerInfoList.get(0).getHeights().split(",")));
@@ -634,18 +634,19 @@ public class HomePageServiceImpl extends ServiceImpl<WindTowerDataParentTableMap
 
 
         if (fanModelDataList.size() > 0) {
-            BigDecimal hourMax = BigDecimal.ZERO;
+            TotalBatteryData totalBatteryData = totalBatteryDataList.stream().filter(t -> t.getStationNameEasy().equals(fanModelDataList.get(0).getStationNameEasy())).collect(Collectors.toList()).get(0);
             //年发电量
-            String generatingCapacity = fanModelDataList.get(0).getGeneratingCapacity();
-            if (StrUtil.isNotBlank(stationInfo.getStationBasicInfo().getCapacity())) {
-                hourMax = new BigDecimal(generatingCapacity).divide(new BigDecimal(stationInfo.getStationBasicInfo().getCapacity()), 2, RoundingMode.HALF_UP);
-            }
-            //发电量
-            dataMap.put("battery", generatingCapacity);
+            dataMap.put("battery", totalBatteryData.getFdln());
+            //日发电量
+            dataMap.put("batteryDay", totalBatteryData.getFdl());
+            //月发电量
+            dataMap.put("batteryMonth", totalBatteryData.getFdly());
+            //月发电量
+            dataMap.put("wsAve", totalBatteryData.getPjfs());
             //满发小时数
-            dataMap.put("hour", hourMax);
+            dataMap.put("hour", totalBatteryData.getEquivalentHour());
             //主风向
-            dataMap.put("wdSum", fanModelDataList.get(0).getWdSum());
+            dataMap.put("wdSum", totalBatteryData.getZfx());
         }
         List<EquipmentAttribute> equipmentAttributes = equipmentAttributeList.stream().filter(e -> e.getFieldName().equals(wdHeight[0] + "monthWdRose")).collect(Collectors.toList());
         List<WindDirectionStatisticsData> windDirectionStatisticsDataList = windDirectionStatisticsDataService.lambdaQuery().eq(WindDirectionStatisticsData::getEbId, equipmentAttributes.get(0).getId()).between(WindDirectionStatisticsData::getTime, yearDay, endTime)

+ 17 - 0
neim-biz/src/main/java/com/jiayue/biz/service/impl/TotalBatteryDataServiceImpl.java

@@ -0,0 +1,17 @@
+package com.jiayue.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jiayue.biz.domain.TotalBatteryData;
+import com.jiayue.biz.mapper.TotalBatteryDataMapper;
+import com.jiayue.biz.service.TotalBatteryDataService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TotalBatteryDataServiceImpl extends ServiceImpl<TotalBatteryDataMapper,TotalBatteryData>  implements TotalBatteryDataService {
+
+
+    public void insertOne(TotalBatteryData totalBatteryData){
+        super.baseMapper.insertOne(totalBatteryData);
+    }
+
+}