Browse Source

计算保存月发电量,年发电量

malijun 1 year ago
parent
commit
5f076266e6

+ 4 - 4
electricity/meter/src/main/java/com/gyee/gaia/meter/entity/MeterInfoCalculating.java

@@ -12,7 +12,7 @@ import java.time.LocalDateTime;
 
 /**
  * <p>
- * 线路日发电量表
+ * 计算日电量
  * </p>
  */
 @TableName("pro_meter_calculating")
@@ -28,12 +28,12 @@ public class MeterInfoCalculating extends Model<MeterInfoCalculating> implements
     private Integer id;
 
     /**
-     * 线路编码;线路编码
+     * 场站id
      */
     private String windpowerstationId;
 
     /**
-     * 线路名称;线路名称
+     * 名称
      */
     private String name;
 
@@ -75,7 +75,7 @@ public class MeterInfoCalculating extends Model<MeterInfoCalculating> implements
     private String remark;
 
     /**
-     * 计算点凑得
+     * 计算点code
      */
     private String code;
 

+ 7 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/job/MeterJob.java

@@ -21,6 +21,10 @@ public class MeterJob {
     SaveEquipmentRfdl saveEquipmentRfdl;
     @Resource
     SaveBottomcode saveBottomcode;
+    @Resource
+    SavaMonthFdl savaMonthFdl;
+    @Resource
+    SavaYearFdl savaYearFdl;
 
 
 
@@ -32,6 +36,9 @@ public class MeterJob {
         saveCalculating.saveCalculating();
         saveCalculating.saveCalculating();
         saveCalculating.saveCalculating();
+        savaMonthFdl.savaMonthFdl();
+        savaYearFdl.savaYearFdl();
+
 
     }
 

+ 84 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/job/SavaMonthFdl.java

@@ -0,0 +1,84 @@
+package com.gyee.gaia.meter.job;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.gaia.meter.entity.MeterInfoCalculating;
+import com.gyee.gaia.meter.entity.MeterPoint;
+import com.gyee.gaia.meter.service.impl.MeterInfoCalculatingServiceImpl;
+import com.gyee.gaia.meter.service.impl.MeterPointServiceImpl;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.List;
+
+/**
+ * Author: malijun
+ * Data  : 2023: 05: 17
+ **/
+@Component
+public class SavaMonthFdl {
+
+    @Resource
+    MeterInfoCalculatingServiceImpl meterInfoCalculatingService;
+    @Resource
+    MeterPointServiceImpl meterPointService;
+
+    @XxlJob("saveMonthFdl")
+    void savaMonthFdl() {
+
+        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_YFDL"));
+
+        //设置取值开始时间
+        DateTime nowDateTime = DateUtil.parse(DateUtil.now());
+        DateTime startDateTime = DateUtil.beginOfMonth(nowDateTime);
+
+        //开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(nowDateTime);
+
+        long between = ChronoUnit.DAYS.between(day1, day2);
+
+        //2,meterPointJSD_YFDLList
+        for (MeterPoint meterPoint : meterPointJSD_YFDLList) {
+
+            DateTime dateTime1 = DateTime.of(0);
+            double monthValue = 0.0;
+            for (int i = 0; i <= between; i++) {
+                //开始时间00:00:01
+                dateTime1 = DateUtil.offsetSecond(DateUtil.offsetDay(startDateTime, i), 1);
+
+                //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
+                MeterInfoCalculating meterInfoCalculatingDay = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%_JDXLFDL_P0"));
+
+                //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
+                if (meterInfoCalculatingDay != null) {
+                    monthValue = monthValue + meterInfoCalculatingDay.getValue().doubleValue();
+                }
+            }
+            // 将每个场站的每个月的value值存入到MeterInfoCalculating
+            MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+            meterInfoCalculating.setName(meterPoint.getName());
+            meterInfoCalculating.setCode(meterPoint.getNemCode());
+            //LocalDateTime只显示年月(实际为每月的1号00:00:00)
+            meterInfoCalculating.setDate(dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
+            meterInfoCalculating.setValue(BigDecimal.valueOf(monthValue));
+            meterInfoCalculating.setUpdateTime(LocalDateTime.now());
+            meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
+
+            QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
+            if (list.size() > 0) {
+                meterInfoCalculating.update(queryWrapper);
+            } else {
+                meterInfoCalculating.insert();
+            }
+        }
+    }
+}

+ 83 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/job/SavaYearFdl.java

@@ -0,0 +1,83 @@
+package com.gyee.gaia.meter.job;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.gaia.meter.entity.MeterInfoCalculating;
+import com.gyee.gaia.meter.entity.MeterPoint;
+import com.gyee.gaia.meter.service.impl.MeterInfoCalculatingServiceImpl;
+import com.gyee.gaia.meter.service.impl.MeterPointServiceImpl;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.List;
+
+/**
+ * Author: malijun
+ * Data  : 2023: 05: 17
+ **/
+@Component
+public class SavaYearFdl {
+
+    @Resource
+    MeterInfoCalculatingServiceImpl meterInfoCalculatingService;
+    @Resource
+    MeterPointServiceImpl meterPointService;
+
+@XxlJob("saveYearFdl")
+    void savaYearFdl() {
+
+        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_NFDL"));
+
+        //设置取值开始时间
+        DateTime nowDateTime = DateUtil.parse(DateUtil.now());
+        DateTime startDateTime = DateUtil.beginOfYear(nowDateTime);
+
+        //开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(nowDateTime);
+        long between = ChronoUnit.MONTHS.between(day1, day2);
+
+        //2,meterPointJSD_YFDLList
+        for (MeterPoint meterPoint : meterPointJSD_NFDLList) {
+
+            DateTime dateTime1 = DateTime.of(0);
+            double yearValue = 0.0;
+            for (int i = 0; i <= between; i++) {
+                //开始时间00:00:01
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i);
+
+                //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
+                MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%_JDXLFDL_MONTH"));
+
+                //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
+                if (meterInfoCalculating!=null ) {
+                    yearValue = yearValue + meterInfoCalculating.getValue().doubleValue();
+                }
+            }
+            // 将每个场站的每个月的value值存入到MeterInfoCalculating
+            MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+            meterInfoCalculating.setName(meterPoint.getName());
+            meterInfoCalculating.setCode(meterPoint.getNemCode());
+            //LocalDateTime只显示年月(实际为每月的1号00:00:00)
+            meterInfoCalculating.setDate(dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
+            meterInfoCalculating.setValue(BigDecimal.valueOf(yearValue));
+            meterInfoCalculating.setUpdateTime(LocalDateTime.now());
+            meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
+
+            QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
+            if (list.size() > 0) {
+                meterInfoCalculating.update(queryWrapper);
+            } else {
+                meterInfoCalculating.insert();
+            }
+        }
+    }
+}

+ 3 - 3
electricity/meter/src/main/java/com/gyee/gaia/meter/job/SaveBottomcode.java

@@ -80,8 +80,8 @@ public class SaveBottomcode {
                     bigDecimal2 = bigDecimal2.divide(meterPoint.getXs(), 4, RoundingMode.HALF_EVEN);
                     rfdl = bigDecimal2.subtract(bigDecimal1).multiply(meterPoint.getMagnification());
 
-                    //如果日电量大于3000000千瓦时,或者小于0,说明数据异常,进行数据处理
-                    if (rfdl.doubleValue() > 3000000 || rfdl.doubleValue() < 0) {
+                    //如果日电量大于5000000千瓦时,或者小于0,说明数据异常,进行数据处理
+                    if (rfdl.doubleValue() > 5000000 || rfdl.doubleValue() < 0) {
 
                         //数组集合存当日所有数据
                         ArrayList<Double> arrayList = new ArrayList<>();
@@ -91,7 +91,7 @@ public class SaveBottomcode {
                         //定义突变数据索引
                         int index = -1;
                         // 定义增长阈值
-                        double threshold = 3000000.0;
+                        double threshold = 5000000.0;
                         //遍历数组集合,拿到当前值和前一个值,相减得到变化值
                         for (int j = 1; j < arrayList.size(); j++) {
                             double current = arrayList.get(j);

+ 1 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/job/SaveEquipmentRfdl.java

@@ -72,6 +72,7 @@ public class SaveEquipmentRfdl {
                 rfdl = bigDecimal2.subtract(bigDecimal1);
 
                 //如果日发电量大于50000千瓦时或者小于0,说明数据异常进行处理
+
                 if (rfdl.doubleValue() > 50000 || rfdl.doubleValue() < 0) {
 
                     //数据集合放所有数据

+ 6 - 18
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryTest.java

@@ -25,7 +25,7 @@ import java.util.*;
  * Data  : 2023: 04: 27
  **/
 @SpringBootTest
-class SaveMeterInfoHistoryTest {
+class SaveMeterInfoHistory_DayTest {
 
 
     @Resource
@@ -194,7 +194,7 @@ class SaveMeterInfoHistoryTest {
                         bigDecimal2 = bigDecimal2.divide(meterPoint.getXs(), 4, RoundingMode.HALF_EVEN);
                         rfdl = bigDecimal2.subtract(bigDecimal1).multiply(meterPoint.getMagnification());
 
-                        if (rfdl.doubleValue() > 5000000||rfdl.doubleValue()<0) {
+                        if (rfdl.doubleValue() > 5000000 || rfdl.doubleValue() < 0) {
 
                             ArrayList<Double> arrayList = new ArrayList<>();
                             for (PointData pointData : historyRaw) {
@@ -241,14 +241,9 @@ class SaveMeterInfoHistoryTest {
                     } else {
                         meterInfoBottomcode.insert();
                     }
-
                 }
-
-
             }
         }
-
-
     }
 
     //项目期期风机总发电量
@@ -294,6 +289,7 @@ class SaveMeterInfoHistoryTest {
                 meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
                 meterInfoCalculating.setValue(bigDecimal.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
                 meterInfoCalculating.setCode(meterPoint.getNemCode());
+                meterInfoCalculating.setUpdateTime(LocalDateTime.now());
                 meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
 
                 QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
@@ -304,13 +300,8 @@ class SaveMeterInfoHistoryTest {
                 } else {
                     meterInfoCalculating.insert();
                 }
-
             }
-
-
         }
-
-
     }
 
     //用公式计算
@@ -388,7 +379,9 @@ class SaveMeterInfoHistoryTest {
                         meterInfoCalculating.setCode(meterPoint.getNemCode());
                         meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
                         meterInfoCalculating.setValue(bigDecimal1);
+                        meterInfoCalculating.setUpdateTime(LocalDateTime.now());
                         meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
+
                         QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
                         queryWrapper.eq("date", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
                         List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
@@ -400,15 +393,9 @@ class SaveMeterInfoHistoryTest {
                     } catch (Exception e) {
                         System.out.println("存入异常  :" + e.getMessage());
                     }
-
-
                 }
             }
-
-
         }
-
-
     }
 
     //调用上面4个,第四个需要3次
@@ -420,6 +407,7 @@ class SaveMeterInfoHistoryTest {
         this.saveCalculating();
         this.saveCalculating();
         this.saveCalculating();
+        this.saveCalculating();
 
 
     }

+ 149 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistory_Month_YearTest.java

@@ -0,0 +1,149 @@
+package com.gyee.gaia.meter.service;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.gaia.meter.entity.MeterInfoCalculating;
+import com.gyee.gaia.meter.entity.MeterPoint;
+import com.gyee.gaia.meter.service.impl.MeterInfoCalculatingServiceImpl;
+import com.gyee.gaia.meter.service.impl.MeterPointServiceImpl;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.List;
+
+/**
+ * Author: malijun
+ * Data  : 2023: 05: 17
+ **/
+@SpringBootTest
+public class SaveMeterInfoHistory_Month_YearTest {
+
+    @Resource
+    MeterInfoCalculatingServiceImpl meterInfoCalculatingService;
+    @Resource
+    MeterPointServiceImpl meterPointService;
+
+    @Value("${start.time}")
+    private String startTimeString;
+
+    @Test
+    void saveMeterInfoHistoryMonthTest() {
+
+        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_YFDL"));
+//        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_NFDL"));
+
+        //设置取值开始时间
+        String startString = startTimeString;
+        DateTime startDateTime0 = DateUtil.parse(startString);
+        DateTime startDateTime = DateUtil.beginOfMonth(startDateTime0);
+        DateTime endDateTime = DateUtil.endOfMonth(startDateTime0);
+
+        //开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+        long between = ChronoUnit.DAYS.between(day1, day2);
+
+        //2,meterPointJSD_YFDLList
+        for (MeterPoint meterPoint : meterPointJSD_YFDLList) {
+
+            DateTime dateTime1 = DateTime.of(0);
+            double monthValue = 0.0;
+            for (int i = 0; i <= between; i++) {
+                //开始时间00:00:01
+                dateTime1 = DateUtil.offsetSecond(DateUtil.offsetDay(startDateTime, i), 1);
+
+                //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
+                MeterInfoCalculating meterInfoCalculatingDay = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%_JDXLFDL_P0"));
+
+                //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
+                if (meterInfoCalculatingDay != null) {
+                    monthValue = monthValue + meterInfoCalculatingDay.getValue().doubleValue();
+                }
+            }
+            // 将每个场站的每个月的value值存入到MeterInfoCalculating
+            MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+            meterInfoCalculating.setName(meterPoint.getName());
+            meterInfoCalculating.setCode(meterPoint.getNemCode());
+            //LocalDateTime只显示年月(实际为每月的1号00:00:00)
+            meterInfoCalculating.setDate(dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
+            meterInfoCalculating.setValue(BigDecimal.valueOf(monthValue));
+            meterInfoCalculating.setUpdateTime(LocalDateTime.now());
+            meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
+
+            QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
+            if (list.size() > 0) {
+                meterInfoCalculating.update(queryWrapper);
+            } else {
+                meterInfoCalculating.insert();
+            }
+        }
+    }
+
+    @Test
+    void saveMeterInfoHistoryYearTest() {
+
+        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_NFDL"));
+
+        //设置取值开始时间
+        String startString = startTimeString;
+        DateTime startDateTime0 = DateUtil.parse(startString);
+        DateTime startDateTime = DateUtil.beginOfYear(startDateTime0);
+        DateTime endDateTime = DateUtil.endOfYear(startDateTime0);
+
+        //开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+        long between = ChronoUnit.MONTHS.between(day1, day2);
+        System.out.println(between);
+
+        //2,meterPointJSD_YFDLList
+        for (MeterPoint meterPoint : meterPointJSD_NFDLList) {
+
+            DateTime dateTime1 = DateTime.of(0);
+            double yearValue = 0.0;
+            for (int i = 0; i <= between; i++) {
+                //开始时间00:00:01
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i);
+
+                //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
+                MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%_JDXLFDL_MONTH"));
+
+                //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
+                if (meterInfoCalculating != null) {
+                    yearValue = yearValue + meterInfoCalculating.getValue().doubleValue();
+                }
+            }
+            // 将每个场站的每个月的value值存入到MeterInfoCalculating
+            MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+            meterInfoCalculating.setName(meterPoint.getName());
+            meterInfoCalculating.setCode(meterPoint.getNemCode());
+            //LocalDateTime只显示年月(实际为每月的1号00:00:00)
+            meterInfoCalculating.setDate(dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
+            meterInfoCalculating.setValue(BigDecimal.valueOf(yearValue));
+            meterInfoCalculating.setUpdateTime(LocalDateTime.now());
+            meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
+
+            QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
+            if (list.size() > 0) {
+                meterInfoCalculating.update(queryWrapper);
+            } else {
+                meterInfoCalculating.insert();
+            }
+        }
+    }
+
+
+}
+
+

+ 2 - 2
electricity/meter/src/main/resources/application.properties

@@ -6,9 +6,9 @@
 adapter.url=http://192.168.1.67:8011/ts
 
 #动态配置开始日期
-start.time=2023-04-01
+start.time=2023-05-16
 #动态配置结束日期
-end.time=2023-04-30
+end.time=2023-05-16
 
 meter.stations=MHS_FDC,NSS_FDC