Browse Source

光伏日月年发电量,上网电量

malijun 1 year ago
parent
commit
72776657ba
15 changed files with 1718 additions and 150 deletions
  1. 3 3
      electricity/meter/src/main/java/com/gyee/gaia/meter/controller/GetTypeController.java
  2. 1 1
      electricity/meter/src/main/java/com/gyee/gaia/meter/entity/MeterInfoBottomcode.java
  3. 1 1
      electricity/meter/src/main/java/com/gyee/gaia/meter/entity/MeterInfoCalculating.java
  4. 1 1
      electricity/meter/src/main/java/com/gyee/gaia/meter/entity/MeterInfoEquipment.java
  5. 34 12
      electricity/meter/src/main/java/com/gyee/gaia/meter/job/MeterJob.java
  6. 25 15
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryDayTest.java
  7. 129 67
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryMonthYearTest.java
  8. 115 6
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveBottomcode.java
  9. 183 8
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveCalculating.java
  10. 375 3
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveEquipmentFDL.java
  11. 37 7
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveFDL_Day_Month_Year.java
  12. 704 9
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveMeterInfoYesterday.java
  13. 45 13
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveSWDL_Day_Month_Year.java
  14. 6 3
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetMeterInfo.java
  15. 59 1
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetPowerstation_Type_Class_Name.java

+ 3 - 3
electricity/meter/src/main/java/com/gyee/gaia/meter/controller/GetTypeController.java

@@ -25,12 +25,12 @@ public class GetTypeController {
 
 
     /**
-     * @return 所有风的name和nem_code, 已经排序
+     * @return 所有风+光的name和nem_code, 已经排序
      */
     @GetMapping("/infoall")
     public Result<Object> getPowerstation() {
         //查询返回所有风场的name和nem_code,已经排序
-        ArrayList<MeterInfoVo> powerStationsVo = getPowerstationTypeClassName.getPowerstation();
+        ArrayList<MeterInfoVo> powerStationsVo = getPowerstationTypeClassName.getPowerstationAll();
         //构建响应map
         Map<String, Object> response = new HashMap<>();
         response.put("fdc", powerStationsVo);
@@ -55,7 +55,7 @@ public class GetTypeController {
             @RequestParam(required = false) String meterClass
     ) {
 
-        List<MeterInfoVo> meterTypeListVo = getPowerstationTypeClassName.getMeterTypeCalculating(windId, type, meterClass);
+        List<MeterInfoVo> meterTypeListVo = getPowerstationTypeClassName.getMeterTypeCalculatingAll(windId, type, meterClass);
         Map<String, Object> response = new HashMap<>();
         response.put("type", meterTypeListVo);
         return new Result<>(200, "成功", response);

+ 1 - 1
electricity/meter/src/main/java/com/gyee/gaia/meter/entity/MeterInfoBottomcode.java

@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
  * 风机日发电量表
  * </p>
  */
-@TableName("pro_meter_bottomcode_1")
+@TableName("pro_meter_bottomcode")
 @Data
 public class MeterInfoBottomcode extends Model<MeterInfoBottomcode> implements Serializable {
 

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

@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
  * 线路日发电量表
  * </p>
  */
-@TableName("pro_meter_calculating_1")
+@TableName("pro_meter_calculating")
 @Data
 public class MeterInfoCalculating extends Model<MeterInfoCalculating> implements Serializable {
 

+ 1 - 1
electricity/meter/src/main/java/com/gyee/gaia/meter/entity/MeterInfoEquipment.java

@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
  * 风机日发电量表
  * </p>
  */
-@TableName("pro_meter_equipment_1")
+@TableName("pro_meter_equipment")
 @Data
 public class MeterInfoEquipment extends Model<MeterInfoEquipment> implements Serializable {
 

+ 34 - 12
electricity/meter/src/main/java/com/gyee/gaia/meter/job/MeterJob.java

@@ -28,8 +28,8 @@ public class MeterJob {
     SaveMeterInfoYesterday saveMeterInfoYesterday;
 
 
-    @XxlJob("MeterJob")
-    void meterJob() {
+    @XxlJob("MeterJob_FD")
+    void meterJob_FD() {
 
         //设备日发电量(407台风机)
         saveEquipmentFDL.saveEquipmentRfdl();
@@ -45,29 +45,51 @@ public class MeterJob {
         saveCalculating.saveCalculating();
         saveCalculating.saveCalculating();
 
-    }
+        //风机日月年发电量
+        saveFDLDayMonthYear.sum();
 
+        //风机日月年上网电量
+        saveSWDLDayMonthYear.sum();
 
-    @XxlJob("MeterJob_FDL_Day_Month_Year")
-    void meterJob2() {
-        saveFDLDayMonthYear.sum();
+    }
 
 
+    @XxlJob("SaveMeterInfoYesterday_FD")
+    void meterJob_FD_Yesterday() {
+        saveMeterInfoYesterday.saveMeterInfoYesterday_FD();
     }
 
-    @XxlJob("MeterJob_SWDL_Day_Month_Year")
-    void meterJob3() {
-        saveSWDLDayMonthYear.sum();
 
+    @XxlJob("MeterJob_GF")
+    void meterJob_GF() {
+
+        //设备日发电量(407台风机)
+        saveEquipmentFDL.saveEquipmentRfdl_GF();
+        //期次风机发电量(14个期次)
+        saveEquipmentFDL.saveCalculatingNBQFDL();
+
+        //底码表数据,起始底码,截止底码,日电量
+        saveBottomcode.saveBottomCode_GF();
+
+        saveCalculating.saveCalculating_GF();
+
+
+        //风机日月年发电量
+        saveFDLDayMonthYear.sum_GF();
+
+        //风机日月年上网电量
+        saveSWDLDayMonthYear.sum_GF();
 
     }
 
-    @XxlJob("SaveMeterInfoYesterday")
-    void meterJob4() {
-        saveMeterInfoYesterday.saveMeterInfoYesterday();
 
+    @XxlJob("SaveMeterInfoYesterday_GF")
+    void meterJob_GF_Yesterday() {
+        saveMeterInfoYesterday.saveMeterInfoYesterday_GF();
     }
 
 
 
+
+
 }

+ 25 - 15
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryDayTest.java

@@ -357,8 +357,7 @@ class SaveMeterInfoHistoryDayTest {
             String formula2 = formula1.replaceAll("DL.NX", "DL_NX").replaceAll("DJL.", "DJL_");
             System.out.println("转换后的公式字符串:" + formula2);
 
-            //分割公式字符串,得到每一的个code
-//            String[] meterPointCodes = StringUtils.split(formula1, "[+\\-*/()]");
+
             String[] meterPointCodes = StringUtils.split(formula1, "[+-*/()]");
             meterPointCodes = Arrays.stream(meterPointCodes)
                     .filter(meterPointCode -> !(meterPointCode.length() < 8))
@@ -371,10 +370,8 @@ class SaveMeterInfoHistoryDayTest {
                 HashMap<String, Object> map = new HashMap<>();
                 //开始时间
                 DateTime dateTime1 = DateUtil.offsetDay(startDateTime, i);
-//                DateTime dateTime2 = DateUtil.offsetDay(startDateTime, i + 1);
-                //遍历code数据,拿到每一个code,用code和时间,在meter_info_bottom中拿到dayValue
+
                 for (String meterPointCode : meterPointCodes) {
-//                    String meterPointCode_ = meterPointCode.replaceAll("\\.", "_");
                     String meterPointCode_ = meterPointCode.replaceAll("DL.", "DL_").replaceAll("DJL.", "DJL_");
                     System.out.println("要查询的点code:" + meterPointCode);
                     System.out.println("替换后的点code:" + meterPointCode_);
@@ -483,7 +480,6 @@ class SaveMeterInfoHistoryDayTest {
             String formula2 = formula1.replaceAll("DL.NX", "DL_NX").replaceAll("DJL.", "DJL_");
             System.out.println("转换后的公式字符串:" + formula2);
 
-
             String[] meterPointCodes = StringUtils.split(formula1, "[+-*/()]");
             meterPointCodes = Arrays.stream(meterPointCodes)
                     .filter(meterPointCode -> !(meterPointCode.length() < 8))
@@ -946,7 +942,7 @@ class SaveMeterInfoHistoryDayTest {
         }
     }
 
-    //电计量底码表
+    //光伏逆变器日发电量(场站)
     @Test
     void saveCalculatingNBQFDL() {
 
@@ -1301,10 +1297,16 @@ class SaveMeterInfoHistoryDayTest {
         this.saveEquipmentRfdl();
         this.saveBottomCode();
         this.saveCalculatingProjectFDL();
-        this.saveCalculating();
-        this.saveCalculating();
-        this.saveCalculating();
-        this.saveCalculating();
+        //优化后
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+        //优化前
+//        this.saveCalculating();
+//        this.saveCalculating();
+//        this.saveCalculating();
+//        this.saveCalculating();
     }
 
     //光伏总
@@ -1323,10 +1325,18 @@ class SaveMeterInfoHistoryDayTest {
         this.saveEquipmentRfdl();
         this.saveBottomCode();
         this.saveCalculatingProjectFDL();
-        this.saveCalculating();
-        this.saveCalculating();
-        this.saveCalculating();
-        this.saveCalculating();
+        //优化后
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+
+        //优化前
+//        this.saveCalculating();
+//        this.saveCalculating();
+//        this.saveCalculating();
+//        this.saveCalculating();
+
         this.saveEquipmentRfdl_GF();
         this.saveCalculatingNBQFDL();
         this.saveBottomCode_GF();

+ 129 - 67
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryMonthYearTest.java

@@ -990,7 +990,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
             double monthValue = 0.0;
             for (int i = 0; i <= between; i++) {
                 //开始时间00:00:01
-                dateTime1 = DateUtil.offsetDay(startDateTime, i);
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
                 //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
                 List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
@@ -1052,10 +1052,13 @@ public class SaveMeterInfoHistoryMonthYearTest {
             double monthValue = 0.0;
             for (int i = 0; i <= between; i++) {
                 //开始时间00:00:01
-                dateTime1 = DateUtil.offsetDay(startDateTime, i);
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i * 12);
 
                 //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
-                List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%SWDL_SBS%_YEAR"));
+                List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                        .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
+                        .eq("date", dateTime1.toLocalDateTime())
+                        .like("code", "%SWDL_SBS%_YEAR"));
 
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
                     //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
@@ -1094,8 +1097,8 @@ public class SaveMeterInfoHistoryMonthYearTest {
         MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>().eq("property", "JSD_FCSWDL_DAY"));
         //设置取值开始时间
         String startString = startTimeString;
-        DateTime startDateTime0 = DateUtil.parse(startString);
-        DateTime startDateTime = DateUtil.beginOfMonth(startDateTime0);
+        DateTime startDateTime = DateUtil.parse(startString);
+//        DateTime startDateTime = DateUtil.beginOfMonth(startDateTime0);
 
         //设置取值结束时间
         String endDateString = endTimeString;
@@ -1113,8 +1116,6 @@ public class SaveMeterInfoHistoryMonthYearTest {
         DateTime dateTime1 = DateTime.of(0);
 
 
-
-
         for (int i = 0; i <= between; i++) {
             double monthValue = 0.0;
             //开始时间00:00:00
@@ -1270,8 +1271,8 @@ public class SaveMeterInfoHistoryMonthYearTest {
         MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>().eq("property", "JSD_FCGWDL_DAY"));
         //设置取值开始时间
         String startString = startTimeString;
-        DateTime startDateTime0 = DateUtil.parse(startString);
-        DateTime startDateTime = DateUtil.beginOfMonth(startDateTime0);
+        DateTime startDateTime = DateUtil.parse(startString);
+//        DateTime startDateTime = DateUtil.beginOfMonth(startDateTime0);
 
         //设置取值结束时间
         String endDateString = endTimeString;
@@ -1289,7 +1290,6 @@ public class SaveMeterInfoHistoryMonthYearTest {
         DateTime dateTime1 = DateTime.of(0);
 
 
-
         for (int i = 0; i <= between; i++) {
             double monthValue = 0.0;
             //开始时间00:00:00
@@ -1311,7 +1311,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
             meterInfoCalculating.setCode(meterPoint.getNemCode());
             //LocalDateTime只显示年月(实际为每月的1号00:00:00)
             meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
-            meterInfoCalculating.setValue(BigDecimal.valueOf(monthValue).divide(BigDecimal.valueOf(10000),4,RoundingMode.HALF_EVEN));
+            meterInfoCalculating.setValue(BigDecimal.valueOf(monthValue).divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
             meterInfoCalculating.setUpdateTime(LocalDateTime.now());
 
             QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
@@ -1327,47 +1327,14 @@ public class SaveMeterInfoHistoryMonthYearTest {
     }
 
 
-    //所有风机
-    @Test
-    void sum() {
-        this.saveLineFdl_Month();
-        this.saveLineFdl_Year();
-
-        this.saveProjectFdl_Month();
-        this.saveProjectFdl_Year();
-
-        this.savePowerstationFdl_Month();
-        this.savePowerstationFdl_Year();
-
-        this.saveWindStationFdl_Day();
-        this.saveWindStationFdl_Month();
-        this.saveWindStationFdl_Year();
-
-        this.saveSBSSwdl_Month();
-        this.saveSBSSwdl_Year();
-
-        this.savePowerstationSwdl_Month();
-        this.savePowerstationSwdl_Year();
-
-        this.saveWindStationSwdl_Day();
-        this.saveWindStationSwdl_Month();
-        this.saveWindStationSwdl_Year();
-
-
-        this.saveWindStationGwdl_Day();
-
-
-    }
-
-
-
     //光伏
     @Test
     void savePowerstationFdl_GF_Month() {
 
         List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
-                .eq("property", "JSD_POWERSTATIONFDL_MONTH"));
-//        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_NFDL"));
+                .eq("property", "JSD_POWERSTATIONFDL_MONTH")
+                .like("windpowerstation_id", "_GDC_")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1424,7 +1391,10 @@ public class SaveMeterInfoHistoryMonthYearTest {
     @Test
     void savePowerstationFdl_GF_Year() {
 
-        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_POWERSTATIONFDL_YEAR"));
+        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_POWERSTATIONFDL_YEAR")
+                .like("windpowerstation_id", "_GDC_")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1601,7 +1571,9 @@ public class SaveMeterInfoHistoryMonthYearTest {
     @Test
     void saveWindStationFdl_GF_Year() {
 
-        MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>().eq("property", "JSD_GFFDL_YEAR"));
+        MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_GFFDL_YEAR")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1661,7 +1633,9 @@ public class SaveMeterInfoHistoryMonthYearTest {
     void savePowerstationSwdl_GF_Month() {
 
         List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
-                .eq("property", "JSD_SWDL_MONTH"));
+                .eq("property", "JSD_SWDL_MONTH")
+                .like("windpowerstation_id", "_GDC_")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1689,7 +1663,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
                 List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
                         .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
                         .eq("date", dateTime1.toLocalDateTime())
-                        .like("code", "_POWERSTATIONSWDL_P0"));
+                        .like("code", "%_GFSWDL_PO"));
 
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
                     //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
@@ -1721,14 +1695,12 @@ public class SaveMeterInfoHistoryMonthYearTest {
 
     }
 
-
-
-
     @Test
     void savePowerstationSwdl_GF_Year() {
 
         List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
-                .eq("property", "JSD_SWDL_YEAR"));
+                .eq("property", "JSD_SWDL_YEAR")
+                .like("windpowerstation_id", "_GDC_"));
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1748,7 +1720,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
             double monthValue = 0.0;
             for (int i = 0; i <= between; i++) {
                 //开始时间00:00:01
-                dateTime1 = DateUtil.offsetDay(startDateTime, i);
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
                 //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
                 List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
@@ -1769,7 +1741,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
             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.setDate(dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
             meterInfoCalculating.setValue(BigDecimal.valueOf(monthValue));
             meterInfoCalculating.setUpdateTime(LocalDateTime.now());
             meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
@@ -1788,13 +1760,14 @@ public class SaveMeterInfoHistoryMonthYearTest {
     }
 
     @Test
-    void saveWindStationSwdl_GF_Day() {
+    void saveGFSwdl_GF_Day() {
 
-        MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>().eq("property", "JSD_GFSWDL_DAY"));
+        MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_GFSWDL_DAY"));
         //设置取值开始时间
         String startString = startTimeString;
-        DateTime startDateTime0 = DateUtil.parse(startString);
-        DateTime startDateTime = DateUtil.beginOfMonth(startDateTime0);
+        DateTime startDateTime = DateUtil.parse(startString);
+//        DateTime startDateTime = DateUtil.beginOfMonth(startDateTime0);
 
         //设置取值结束时间
         String endDateString = endTimeString;
@@ -1812,8 +1785,6 @@ public class SaveMeterInfoHistoryMonthYearTest {
         DateTime dateTime1 = DateTime.of(0);
 
 
-
-
         for (int i = 0; i <= between; i++) {
             double monthValue = 0.0;
             //开始时间00:00:00
@@ -1822,7 +1793,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
             List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
                     .eq("date", dateTime1.toLocalDateTime())
-                    .like("code", "%_GFSWDL_P0"));
+                    .like("code", "%_GFSWDL_PO"));
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -1853,7 +1824,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
     }
 
     @Test
-    void saveWindStationSwdl_GF_Month() {
+    void saveGFSwdl_GF_Month() {
 
         MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>().eq("property", "JSD_GFSWDL_MONTH"));
         //设置取值开始时间
@@ -1912,7 +1883,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
     }
 
     @Test
-    void saveWindStationSwdl_GF_Year() {
+    void saveGFSwdl_GF_Year() {
 
         MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>().eq("property", "JSD_GFSWDL_YEAR"));
 
@@ -1970,17 +1941,108 @@ public class SaveMeterInfoHistoryMonthYearTest {
     }
 
 
+    //所有风机
+    @Test
+    void sum() {
+        this.saveLineFdl_Month();
+        this.saveLineFdl_Year();
 
+        this.saveProjectFdl_Month();
+        this.saveProjectFdl_Year();
 
+        this.savePowerstationFdl_Month();
+        this.savePowerstationFdl_Year();
 
+        this.saveWindStationFdl_Day();
+        this.saveWindStationFdl_Month();
+        this.saveWindStationFdl_Year();
 
+        this.saveSBSSwdl_Month();
+        this.saveSBSSwdl_Year();
+
+        this.savePowerstationSwdl_Month();
+        this.savePowerstationSwdl_Year();
 
-//所有光伏
+        this.saveWindStationSwdl_Day();
+        this.saveWindStationSwdl_Month();
+        this.saveWindStationSwdl_Year();
+
+
+        this.saveWindStationGwdl_Day();
+
+
+    }
+
+    //所有光伏
     @Test
     void sum2() {
+        this.savePowerstationFdl_GF_Month();
+        this.savePowerstationFdl_GF_Year();
+
+        this.saveWindStationFdl_GF_Day();
+        this.saveWindStationFdl_GF_Month();
+        this.saveWindStationFdl_GF_Year();
+
+        this.savePowerstationSwdl_GF_Month();
+        this.savePowerstationSwdl_GF_Year();
+
+        this.saveGFSwdl_GF_Day();
+        this.saveGFSwdl_GF_Month();
+        this.saveGFSwdl_GF_Year();
+
+
+    }
+
+
+    //所有风机+光伏
+    @Test
+    void sum3() {
+        this.saveLineFdl_Month();
+        this.saveLineFdl_Year();
+
+        this.saveProjectFdl_Month();
+        this.saveProjectFdl_Year();
+
+        this.savePowerstationFdl_Month();
+        this.savePowerstationFdl_Year();
+
+        this.saveWindStationFdl_Day();
+        this.saveWindStationFdl_Month();
+        this.saveWindStationFdl_Year();
+
+        this.saveSBSSwdl_Month();
+        this.saveSBSSwdl_Year();
+
+        this.savePowerstationSwdl_Month();
+        this.savePowerstationSwdl_Year();
+
+        this.saveWindStationSwdl_Day();
+        this.saveWindStationSwdl_Month();
+        this.saveWindStationSwdl_Year();
+
+
+        this.saveWindStationGwdl_Day();
+
+        this.savePowerstationFdl_GF_Month();
+        this.savePowerstationFdl_GF_Year();
+
+        this.saveWindStationFdl_GF_Day();
+        this.saveWindStationFdl_GF_Month();
+        this.saveWindStationFdl_GF_Year();
+
+        this.savePowerstationSwdl_GF_Month();
+        this.savePowerstationSwdl_GF_Year();
+
+        this.saveGFSwdl_GF_Day();
+        this.saveGFSwdl_GF_Month();
+        this.saveGFSwdl_GF_Year();
+
 
     }
 
+
+
+
 }
 
 

+ 115 - 6
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveBottomcode.java

@@ -42,7 +42,8 @@ public class SaveBottomcode {
    public void saveBottomCode() {
 
         //1,查询所有风电场
-        List<PowerStation> powerStationList = powerStationService.list(new QueryWrapper<PowerStation>().like("nem_code", "_FDC_"));
+        List<PowerStation> powerStationList = powerStationService.list(new QueryWrapper<PowerStation>()
+                .like("nem_code", "_FDC_"));
 
         for (PowerStation powerStation : powerStationList) {
 
@@ -61,7 +62,6 @@ public class SaveBottomcode {
 
 
                 //开始时间00:00:01
-                DateTime dateTime1 = startDateTime;
 
                 //结束时间第
 //                DateTime dateTime2 = DateUtil.offsetDay(startDateTime, 1);
@@ -74,14 +74,14 @@ public class SaveBottomcode {
                 BigDecimal rfdl = new BigDecimal(0);
 
                 Map<String, PointData> historySection = adapter.getHistorySection(pointcode, dateTime0.getTime());
-                double value0 = 0;
+                double value0;
                 if (!historySection.isEmpty()) {
                     value0 = historySection.get(pointcode).getValue();
                     bigDecimal1 = new BigDecimal(Double.toString(value0));
                 }
 
                 //从适配器拿当日数据
-                List<PointData> historyRaw = adapter.getHistoryRaw(pointcode, dateTime1.getTime(), dateTime2.getTime());
+                List<PointData> historyRaw = adapter.getHistoryRaw(pointcode, startDateTime.getTime(), dateTime2.getTime());
 
 
 
@@ -132,7 +132,7 @@ public class SaveBottomcode {
 
                 MeterInfoBottomcode meterInfoBottomcode = new MeterInfoBottomcode();
                 meterInfoBottomcode.setName(meterPoint.getName());
-                meterInfoBottomcode.setStartTime(dateTime1.toLocalDateTime());
+                meterInfoBottomcode.setStartTime(startDateTime.toLocalDateTime());
                 meterInfoBottomcode.setStartValue(bigDecimal1);
                 meterInfoBottomcode.setEndTime(nowDateTime.toLocalDateTime());
                 meterInfoBottomcode.setEndValue(bigDecimal2);
@@ -142,7 +142,7 @@ public class SaveBottomcode {
 
                 //判断有无数据,插入或者更新
                 QueryWrapper<MeterInfoBottomcode> queryWrapper = new QueryWrapper<>();
-                queryWrapper.eq("start_time", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
+                queryWrapper.eq("start_time", startDateTime.toLocalDateTime()).eq("code", meterPoint.getNemCode());
                 List<MeterInfoBottomcode> list = meterInfoBottomcodeService.list(queryWrapper);
                 if (list.size() > 0) {
                     meterInfoBottomcode.update(queryWrapper);
@@ -158,6 +158,115 @@ public class SaveBottomcode {
     }
 
 
+    //光伏底码数据
+   public void saveBottomCode_GF() {
+
+        //1,查询所有光电场
+        List<PowerStation> powerStationList = powerStationService.list(new QueryWrapper<PowerStation>()
+                .like("nem_code", "_GDC_"));
+
+        for (PowerStation powerStation : powerStationList) {
+
+            //2,根据场站ID得到场站下所有测点
+            List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                    .eq("windpowerstation_id", powerStation.getId())
+                    .eq("property", "CD")
+            );
+
+            if (meterPointList.size() > 0) {
+
+                //3,遍历测点,拿到每个测点的nem_code
+                for (MeterPoint meterPoint : meterPointList) {
+                    System.out.println(meterPoint);
+                    //获取测点code
+                    String pointcode = meterPoint.getNemCode();
+
+                    //2,获取当前日期,当日开始时间
+                    DateTime nowDateTime = DateUtil.parse(DateUtil.now());
+                    DateTime startDateTime = DateUtil.beginOfDay(nowDateTime);
+
+                    //结束时间第
+//                DateTime dateTime2 = DateUtil.offsetDay(startDateTime, 1);
+                    DateTime dateTime2 = DateUtil.offsetMillisecond(DateUtil.offsetDay(startDateTime, 1), -1);
+                    DateTime dateTime0 = DateUtil.offsetMillisecond(startDateTime, -1);
+
+                        BigDecimal bigDecimal1 = new BigDecimal(0);
+                        BigDecimal bigDecimal2 = new BigDecimal(0);
+                        BigDecimal rfdl = new BigDecimal(0);
+
+                        Map<String, PointData> historySection = adapter.getHistorySection(pointcode, dateTime0.getTime());
+                        double value0 = 0;
+                        if (!historySection.isEmpty()) {
+                            value0 = historySection.get(pointcode).getValue();
+                        }
+                        bigDecimal1 = new BigDecimal(Double.toString(value0));
+
+                        List<PointData> historyRaw = adapter.getHistoryRaw(pointcode, startDateTime.getTime(), dateTime2.getTime());
+
+                        if (historyRaw.size() > 0) {
+//                        bigDecimal1 = new BigDecimal(Double.toString(historyRaw.get(0).getValue()));
+                            bigDecimal1 = bigDecimal1.divide(meterPoint.getXs(), 4, RoundingMode.HALF_EVEN);
+                            bigDecimal2 = new BigDecimal(Double.toString(historyRaw.get(historyRaw.size() - 1).getValue()));
+                            bigDecimal2 = bigDecimal2.divide(meterPoint.getXs(), 4, RoundingMode.HALF_EVEN);
+                            rfdl = bigDecimal2.subtract(bigDecimal1).multiply(meterPoint.getMagnification());
+
+                            if (rfdl.doubleValue() > 1000000 || rfdl.doubleValue() < 0) {
+
+                                ArrayList<Double> arrayList = new ArrayList<>();
+                                for (PointData pointData : historyRaw) {
+                                    arrayList.add(pointData.getValue());
+                                }
+                                int index = -1;
+                                // 定义增长阈值
+                                double threshold = 15000.0;
+
+                                for (int j = 1; j < arrayList.size(); j++) {
+                                    double current = arrayList.get(j);
+                                    double previous = arrayList.get(j - 1);
+                                    double difference = current - previous;
+                                    if (difference > threshold) {
+                                        index = j;
+                                        break;
+                                    }
+                                }
+                                if (index != -1) {
+                                    double valueGrow2 = arrayList.get(index);
+                                    BigDecimal bigDecimalGrow2 = new BigDecimal(Double.toString(valueGrow2));
+                                    double valueGrow1 = arrayList.get(index - 1);
+                                    BigDecimal bigDecimalGrow1 = new BigDecimal(Double.toString(valueGrow1));
+                                    rfdl = (bigDecimal2.subtract(bigDecimalGrow2).add(bigDecimalGrow1).subtract(bigDecimal1)).multiply(meterPoint.getMagnification());
+                                }
+                            }
+                        }
+
+                        MeterInfoBottomcode meterInfoBottomcode = new MeterInfoBottomcode();
+                        meterInfoBottomcode.setName(meterPoint.getName());
+                        meterInfoBottomcode.setStartTime(startDateTime.toLocalDateTime());
+                        meterInfoBottomcode.setStartValue(bigDecimal1);
+                        meterInfoBottomcode.setEndTime(dateTime2.toLocalDateTime());
+                        meterInfoBottomcode.setEndValue(bigDecimal2);
+                        meterInfoBottomcode.setDayValue(rfdl);
+                        meterInfoBottomcode.setCode(pointcode);
+                        meterInfoBottomcode.setWindpowerstationId(meterPoint.getWindpowerstationId());
+
+                        QueryWrapper<MeterInfoBottomcode> queryWrapper = new QueryWrapper<>();
+                        queryWrapper.eq("start_time", startDateTime.toLocalDateTime()).eq("code", meterPoint.getNemCode());
+                        List<MeterInfoBottomcode> list = meterInfoBottomcodeService.list(queryWrapper);
+                        if (list.size() > 0) {
+                            meterInfoBottomcode.update(queryWrapper);
+                        } else {
+                            meterInfoBottomcode.insert();
+                        }
+
+                }
+            }
+        }
+    }
+
+
+
+
+
 }
 
 

+ 183 - 8
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveCalculating.java

@@ -2,6 +2,7 @@ package com.gyee.gaia.meter.service.meter;
 
 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.MeterInfoBottomcode;
 import com.gyee.gaia.meter.entity.MeterInfoCalculating;
@@ -16,7 +17,10 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -43,7 +47,9 @@ public class SaveCalculating {
         DateTime startDateTime = DateUtil.beginOfDay(nowDateTime);
 
         //meterPoint表中,有公式的计算点
-        List<MeterPoint> meterPointJSDList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD").ne("formula", ""));
+        List<MeterPoint> meterPointJSDList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD")
+                .ne("formula", ""));
 
         for (MeterPoint meterPoint : meterPointJSDList) {
 
@@ -63,7 +69,6 @@ public class SaveCalculating {
             //map存公式中测点的数据
             HashMap<String, Object> map = new HashMap<>();
             //开始时间
-            DateTime dateTime1 = startDateTime;
 
             //遍历code数组,拿到每一个code,用code和时间,在meter_info_bottom中拿到dayValue
             for (String meterPointCode : meterPointCodes) {
@@ -73,10 +78,10 @@ public class SaveCalculating {
                 //如果字符串以DL开头,从meter_info_calculating表中取,否则从meter_info_bottom表中取
                 try {
                     if (meterPointCode.startsWith("DL")) {
-                        MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("code", meterPointCode).eq("date", dateTime1));
+                        MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("code", meterPointCode).eq("date", startDateTime));
                         map.put(meterPointCode_, meterInfoCalculating.getValue());
                     } else {
-                        MeterInfoBottomcode meterInfoBottomcode = meterInfoBottomcodeService.getOne(new QueryWrapper<MeterInfoBottomcode>().eq("code", meterPointCode).eq("start_time", dateTime1));
+                        MeterInfoBottomcode meterInfoBottomcode = meterInfoBottomcodeService.getOne(new QueryWrapper<MeterInfoBottomcode>().eq("code", meterPointCode).eq("start_time", startDateTime));
                         map.put(meterPointCode_, meterInfoBottomcode.getDayValue());
                     }
                 } catch (Exception e) {
@@ -92,13 +97,13 @@ public class SaveCalculating {
                 MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
                 meterInfoCalculating.setName(meterPoint.getName());
                 meterInfoCalculating.setCode(meterPoint.getNemCode());
-                meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
+                meterInfoCalculating.setDate(startDateTime.toLocalDateTime());
                 meterInfoCalculating.setValue(bigDecimal1);
                 meterInfoCalculating.setUpdateTime(nowDateTime.toLocalDateTime());
                 meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
 
                 QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-                queryWrapper.eq("date", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
+                queryWrapper.eq("date", startDateTime.toLocalDateTime()).eq("code", meterPoint.getNemCode());
                 List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
                 if (list.size() > 0) {
                     meterInfoCalculating.update(queryWrapper);
@@ -110,13 +115,13 @@ public class SaveCalculating {
                 MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
                 meterInfoCalculating.setName(meterPoint.getName());
                 meterInfoCalculating.setCode(meterPoint.getNemCode());
-                meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
+                meterInfoCalculating.setDate(startDateTime.toLocalDateTime());
                 meterInfoCalculating.setValue(BigDecimal.valueOf(0));
                 meterInfoCalculating.setUpdateTime(LocalDateTime.now());
                 meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
 
                 QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-                queryWrapper.eq("date", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
+                queryWrapper.eq("date", startDateTime.toLocalDateTime()).eq("code", meterPoint.getNemCode());
                 List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
                 if (list.size() > 0) {
                     meterInfoCalculating.update(queryWrapper);
@@ -132,6 +137,176 @@ public class SaveCalculating {
 
 
     }
+
+
+    //有公式的计算光伏电量
+    public  void saveCalculating_GF() {
+
+        //获取当前日期,当日开始时间
+        DateTime nowDateTime = DateUtil.parse(DateUtil.now());
+        DateTime startDateTime = DateUtil.beginOfDay(nowDateTime);
+        DateTime endDateTime = DateUtil.endOfDay(nowDateTime);
+
+        //指定开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+        long between = ChronoUnit.DAYS.between(day1, day2);
+
+        List<MeterPoint> meterPointJSDList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_GF")
+                .ne("formula", ""));
+
+
+        //时间集合,以便后面批量查询
+        List<DateTime> dateTimes = new ArrayList<>();
+        for (int i = 0; i <= between; i++) {
+            DateTime dateTime4 = DateUtil.offsetDay(startDateTime, i);
+            dateTimes.add(dateTime4);
+        }
+        //code集合,以便后面批量查询
+        List<String> codes = new ArrayList<>();
+        for (MeterPoint meterPoint : meterPointJSDList) {
+            String formula1 = meterPoint.getFormula();
+            System.out.println("转换前的公式:" + formula1);
+            String formula2 = formula1
+                    .replaceAll("DL.NX", "DL_NX")
+                    .replaceAll("DJL.", "DJL_")
+                    .replaceAll("PLSJ1.NX", "PLSJ1_NX")
+                    ;
+            System.out.println("转换后的公式字符串:" + formula2);
+
+
+            String[] meterPointCodes = StringUtils.split(formula1, "[+-*/()]");
+            meterPointCodes = Arrays.stream(meterPointCodes)
+                    .filter(meterPointCode -> !(meterPointCode.length() < 8))
+                    .toArray(String[]::new);
+            System.out.println("过滤后公式中的测点数:" + meterPointCodes.length);
+            System.out.println(Arrays.toString(meterPointCodes));
+            codes.addAll(Arrays.asList(meterPointCodes));
+        }
+
+        //批量查询
+        List<MeterInfoCalculating> list1 = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                .in("code", codes)
+                .in("date", dateTimes)
+        );
+        List<MeterInfoBottomcode> list2 = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>()
+                .in("code", codes)
+                .in("start_time", dateTimes));
+
+
+        for (MeterPoint meterPoint : meterPointJSDList) {
+            String formula1 = meterPoint.getFormula();
+            System.out.println("转换前的公式:" + formula1);
+            String formula2 = formula1
+                    .replaceAll("DL.NX", "DL_NX")
+                    .replaceAll("DJL.", "DJL_")
+                    .replaceAll("PLSJ1.NX", "PLSJ1_NX")
+                    ;
+            System.out.println("转换后的公式字符串:" + formula2);
+
+
+            String[] meterPointCodes = StringUtils.split(formula1, "[+-*/()]");
+            meterPointCodes = Arrays.stream(meterPointCodes)
+                    .filter(meterPointCode -> !(meterPointCode.length() < 8))
+                    .toArray(String[]::new);
+            System.out.println("过滤后公式中的测点数:" + meterPointCodes.length);
+            System.out.println(Arrays.toString(meterPointCodes));
+
+
+            for (int i = 0; i <= between; i++) {
+                HashMap<String, Object> map = new HashMap<>();
+                //开始时间
+                DateTime dateTime1 = DateUtil.offsetDay(startDateTime, i);
+//                DateTime dateTime2 = DateUtil.offsetDay(startDateTime, i + 1);
+                //遍历code数据,拿到每一个code,用code和时间,在meter_info_bottom中拿到dayValue
+                for (String meterPointCode : meterPointCodes) {
+//                    String meterPointCode_ = meterPointCode.replaceAll("\\.", "_");
+                    String meterPointCode_ = meterPointCode
+                            .replaceAll("DL.", "DL_")
+                            .replaceAll("DJL.", "DJL_")
+                            .replaceAll("PLSJ1.NX", "PLSJ1_NX")
+                            ;
+                    System.out.println("要查询的点code:" + meterPointCode);
+                    System.out.println("替换后的点code:" + meterPointCode_);
+//
+                    try {
+                        if (meterPointCode.startsWith("DL")) {
+                            System.out.println("计算测点DL:" + meterPointCode);
+                            for (MeterInfoCalculating meterInfoCalculating : list1) {
+                                if (meterInfoCalculating.getCode().equals(meterPointCode) && meterInfoCalculating.getDate().equals(dateTime1.toLocalDateTime())) {
+
+                                    System.out.println("DL点数据:" + meterInfoCalculating.getValue());
+                                    map.put(meterPointCode_, meterInfoCalculating.getValue());
+
+                                }
+                            }
+                        } else {
+                            System.out.println("计算测点Bottom:" + meterPointCode);
+
+                            for (MeterInfoBottomcode meterInfoBottomcode : list2) {
+                                if (meterInfoBottomcode.getCode().equals(meterPointCode) && meterInfoBottomcode.getStartTime().equals(dateTime1.toLocalDateTime())) {
+
+                                    System.out.println("Bottom点数据日电量:" + meterInfoBottomcode.getDayValue());
+                                    map.put(meterPointCode_, meterInfoBottomcode.getDayValue());
+                                }
+                            }
+                        }
+
+                    } catch (Exception e) {
+                        System.out.println("获取数据异常:" + e.getMessage());
+
+                    }
+                }
+                System.out.println("map集合:" + map);
+                try {
+                    BigDecimal bigDecimal1 = (BigDecimal) ScriptShell.parseExpr(formula2, map);
+                    System.out.println("公式计算后数据:" + bigDecimal1);
+                    MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+                    meterInfoCalculating.setName(meterPoint.getName());
+                    meterInfoCalculating.setCode(meterPoint.getNemCode());
+                    meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
+                    meterInfoCalculating.setValue(bigDecimal1.divide(BigDecimal.valueOf(10000),4, RoundingMode.HALF_EVEN));
+                    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);
+                    if (list.size() > 0) {
+                        meterInfoCalculating.update(queryWrapper);
+                    } else {
+                        meterInfoCalculating.insert();
+                    }
+
+                } catch (ArithmeticException e) {
+
+                    MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+                    meterInfoCalculating.setName(meterPoint.getName());
+                    meterInfoCalculating.setCode(meterPoint.getNemCode());
+                    meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
+                    meterInfoCalculating.setValue(BigDecimal.valueOf(0));
+                    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);
+                    if (list.size() > 0) {
+                        meterInfoCalculating.update(queryWrapper);
+                    } else {
+                        meterInfoCalculating.insert();
+                    }
+
+                } catch (Exception e) {
+                    System.out.println("存入异常  :" + e.getMessage());
+
+
+                }
+
+            }
+        }
+    }
 }
 
 

+ 375 - 3
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveEquipmentFDL.java

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -36,11 +37,13 @@ public class SaveEquipmentFDL {
     @Resource
     MeterInfoCalculatingServiceImpl meterInfoCalculatingService;
 
-
+    //风机日发电量
     public void saveEquipmentRfdl() {
 
         //1,在testingpoint中根据 uniform_code=AI064 和code like "%_FJ_%" 取出所有风机的电量测点code
-        List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>().eq("uniform_code", "AI064").like("code", "%_FJ_%"));
+        List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
+                .eq("uniform_code", "AI064")
+                .like("code", "%_FJ_%"));
 
         //2,遍历list,每次取出一个code
         for (TestingPoint testingPoint : testingPointList) {
@@ -151,7 +154,6 @@ public class SaveEquipmentFDL {
         }
     }
 
-
     //项目期次风机总发电量
     public void saveCalculatingFJFDL() {
 
@@ -207,4 +209,374 @@ public class SaveEquipmentFDL {
 
     }
 
+    //光伏日发电量
+    public void saveEquipmentRfdl_GF() {
+
+
+        //1,在testingpoint中根据 uniform_code=AI064 和code like "%_G_IN_%" 取出所有光伏的电量测点code
+        List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
+                .eq("uniform_code", "AI064")
+                .like("thing_id", "%_G_IN_%")
+        );
+
+        //2,遍历list,每次取出一个code
+        for (TestingPoint testingPoint : testingPointList) {
+            //获取测点code
+            String pointcode = testingPoint.getCode();
+            //获取设备ID
+            String thingId = testingPoint.getThingId();
+
+            //2,获取当前日期,当日开始时间
+            DateTime nowDateTime = DateUtil.parse(DateUtil.now());
+            DateTime startDateTime = DateUtil.beginOfDay(nowDateTime);
+
+
+
+            DateTime dateTime0 = DateUtil.offsetMillisecond(startDateTime, -1);
+//            DateTime dateTime2 = DateUtil.offsetDay(startDateTime, 1);
+            DateTime dateTime2 = DateUtil.offsetMillisecond(DateUtil.offsetDay(startDateTime, 1), -1);
+
+
+                //8,结束点发电量减去开始点发电量得到日发电量(单位Kwh)
+                Map<String, PointData> historySection = adapter.getHistorySection(pointcode, dateTime0.getTime());
+                double value0 = 0;
+                if (!historySection.isEmpty()) {
+                    value0 = historySection.get(pointcode).getValue();
+                }
+                BigDecimal bigDecimal1 = new BigDecimal(Double.toString(value0));
+
+
+                List<PointData> historyRaw = adapter.getHistoryRaw(pointcode, startDateTime.getTime(), dateTime2.getTime());
+
+                BigDecimal rfdl = new BigDecimal(0);
+
+
+                if (historyRaw.size() > 0) {
+//                    BigDecimal bigDecimal1 = new BigDecimal(Double.toString(historyRaw.get(0).getValue()));
+                    BigDecimal bigDecimal2 = new BigDecimal(Double.toString(historyRaw.get(historyRaw.size() - 1).getValue()));
+                    rfdl = bigDecimal2.subtract(bigDecimal1);
+
+
+                    if (testingPoint.getStationId().equals("NX_GDDL_PL_GDC_STA")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_040_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_042_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_041_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_043_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_045_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                    }
+
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_017_AI0021")) {
+                        rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_014_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_018_AI0021")) {
+                        rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_019_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_015_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_016_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_011_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_012_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_013_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_020_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+
+                    if (testingPoint.getStationId().equals("NX_GDDL_MCH_GDC_STA")) {
+                        rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                    }
+
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_035_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_038_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_039_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_033_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_034_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_037_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_040_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_041_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_042_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_036_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+
+                    if (rfdl.doubleValue() > 15000 || rfdl.doubleValue() < 0) {
+
+                        ArrayList<Double> arrayList = new ArrayList<>();
+                        for (PointData pointData : historyRaw) {
+                            arrayList.add(pointData.getValue());
+                        }
+
+                        int index = -1;
+                        for (int j = 1; j < arrayList.size(); j++) {
+                            double current = arrayList.get(j);
+                            double previous = arrayList.get(j - 1);
+                            double difference = current - previous;
+                            if (difference > 15000 || difference < -1) {
+                                index = j;
+                                break;
+                            }
+                        }
+                        if (index != -1) {
+                            double valueGrow2 = arrayList.get(index);
+                            BigDecimal bigDecimalGrow2 = new BigDecimal(Double.toString(valueGrow2));
+                            double valueGrow1 = arrayList.get(index - 1);
+                            BigDecimal bigDecimalGrow1 = new BigDecimal(Double.toString(valueGrow1));
+                            rfdl = (bigDecimal2.subtract(bigDecimalGrow2)).add(bigDecimalGrow1.subtract(bigDecimal1));
+                            if (testingPoint.getStationId().equals("NX_GDDL_PL_GDC_STA")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_040_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_042_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_041_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_043_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_045_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                            }
+
+
+                            if (testingPoint.getStationId().equals("NX_GDDL_MCH_GDC_STA")) {
+                                rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_014_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_018_AI0021")) {
+                                rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_019_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_015_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_017_AI0021")) {
+                                rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_016_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_011_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_012_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_013_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_020_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_035_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_038_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_039_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_033_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_034_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_037_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_040_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_041_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_042_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_036_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                        }
+                    }
+                }
+
+
+                //避免出现过大错误数据,异常数据给死值4444.4444
+                if (rfdl.doubleValue() > 15000 || rfdl.doubleValue() < 0){
+                    rfdl= BigDecimal.valueOf(4444.4444);
+                }
+                //9,company_nem_code   (powerstation_nem_code project_nem_code line_nem_code equipment_nem_code )都在basic equipment中叫project_id    name date rfdl 存入meterInfo表中
+                Equipment thingId1 = equipmentService.getOne(new QueryWrapper<Equipment>().eq("nem_code", thingId));
+
+                MeterInfoEquipment meterInfoEquipment = new MeterInfoEquipment();
+                meterInfoEquipment.setPowerstationNemCode(thingId1.getWindpowerstationId());
+                meterInfoEquipment.setProjectNemCode(thingId1.getProjectId());
+                meterInfoEquipment.setLineNemCode(thingId1.getLineId());
+                meterInfoEquipment.setEquipmentNemCode(thingId1.getNemCode());
+                meterInfoEquipment.setName(thingId1.getName());
+                meterInfoEquipment.setDate(startDateTime.toLocalDateTime());
+                meterInfoEquipment.setRfdl(rfdl);
+                meterInfoEquipment.setUpdateTime(LocalDateTime.now());
+                QueryWrapper<MeterInfoEquipment> queryWrapper = new QueryWrapper<>();
+                queryWrapper.eq("equipment_nem_code", thingId1.getNemCode()).eq("date", startDateTime.toLocalDateTime());
+                List<MeterInfoEquipment> list = meterInfoEquipmentService.list(queryWrapper);
+                if (list.size() > 0) {
+                    meterInfoEquipment.update(queryWrapper);
+                } else {
+                    meterInfoEquipment.insert();
+                }
+
+        }
+    }
+
+    //光伏逆变器日发电量(场站)
+    public void saveCalculatingNBQFDL() {
+        //获取当前日期,当日开始时间
+        DateTime nowDateTime = DateUtil.parse(DateUtil.now());
+        DateTime startDateTime = DateUtil.beginOfDay(nowDateTime);
+
+        //1,所有期次发电量测点
+        List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_NBQFDL"));
+
+        //遍历期次发电量测点,拿到场站id,
+        for (MeterPoint meterPoint : meterPointList) {
+            String projectId = meterPoint.getWindpowerstationId();
+
+                List<MeterInfoEquipment> meterInfoEquipments = meterInfoEquipmentService.list(new QueryWrapper<MeterInfoEquipment>()
+                        .eq("powerstation_nem_code", projectId)
+                        .eq("date", startDateTime));
+                BigDecimal bigDecimal = BigDecimal.valueOf(0);
+                for (MeterInfoEquipment meterInfoEquipment : meterInfoEquipments) {
+                    bigDecimal = bigDecimal.add(meterInfoEquipment.getRfdl());
+                }
+
+                MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+                meterInfoCalculating.setName(meterPoint.getName());
+                meterInfoCalculating.setDate(startDateTime.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<>();
+                queryWrapper.eq("date", startDateTime.toLocalDateTime()).eq("code", meterPoint.getNemCode());
+                List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
+                if (list.size() > 0) {
+                    meterInfoCalculating.update(queryWrapper);
+                } else {
+                    meterInfoCalculating.insert();
+                }
+
+        }
+    }
+
+
+
 }

+ 37 - 7
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveFDL_Day_Month_Year.java

@@ -610,7 +610,9 @@ public class SaveFDL_Day_Month_Year {
     void savePowerstationFdl_GF_Month() {
 
         List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
-                .eq("property", "JSD_POWERSTATIONFDL_MONTH"));
+                .eq("property", "JSD_POWERSTATIONFDL_MONTH")
+                .like("windpowerstation_id", "_GDC_")
+        );
 
         //设置取值开始时间
         String startString = DateUtil.now();
@@ -632,7 +634,10 @@ public class SaveFDL_Day_Month_Year {
                 dateTime1 = DateUtil.offsetDay(startDateTime, i);
 
                 //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
-                MeterInfoCalculating meterInfoCalculatingDay = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%_JDXLFDL_P0"));
+                MeterInfoCalculating meterInfoCalculatingDay = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                        .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
+                        .eq("date", dateTime1.toLocalDateTime())
+                        .like("code", "_GFJDXLFDL_PO"));
 
                 //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
                 if (meterInfoCalculatingDay != null) {
@@ -663,7 +668,9 @@ public class SaveFDL_Day_Month_Year {
     void savePowerstationFdl_GF_Year() {
 
         List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
-                .eq("property", "JSD_POWERSTATIONFDL_YEAR"));
+                .eq("property", "JSD_POWERSTATIONFDL_YEAR")
+                .like("windpowerstation_id", "_GDC_")
+        );
 
         //设置取值开始时间
         String startString = DateUtil.now();
@@ -686,7 +693,10 @@ public class SaveFDL_Day_Month_Year {
                 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", "%_POWERSTATIONFDL_MONTH"));
+                MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                        .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
+                        .eq("date", dateTime1.toLocalDateTime())
+                        .like("code", "%_POWERSTATIONFDL_MONTH"));
 
                 //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
                 if (meterInfoCalculating != null) {
@@ -727,7 +737,9 @@ public class SaveFDL_Day_Month_Year {
         //开始时间00:00:00
 
         //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-        List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", startDateTime.toLocalDateTime()).like("code", "%_GFJDXLFDL_P0"));
+        List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", startDateTime.toLocalDateTime())
+                .like("code", "%_GFJDXLFDL_PO"));
         //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
         if (meterInfoCalculatingDay.size() > 0) {
             for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -783,7 +795,9 @@ public class SaveFDL_Day_Month_Year {
             dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).like("code", "%_POWERSTATIONFDL_MONTH"));
+            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .like("code", "_POWERSTATIONFDL_MONTH"));
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -839,7 +853,9 @@ public class SaveFDL_Day_Month_Year {
             dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路期次)
-            MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).eq("code", "DL.NX_GD_GFFDL_MONTH"));
+            MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .eq("code", "DL.NX_GD_GFFDL_MONTH"));
 
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculating != null) {
@@ -886,5 +902,19 @@ public class SaveFDL_Day_Month_Year {
 
     }
 
+    public void sum_GF() {
+
+
+        this.savePowerstationFdl_GF_Month();
+        this.savePowerstationFdl_GF_Year();
+
+
+        this.saveGFFdl_GF_Day();
+        this.saveGFFdl_GF_Month();
+        this.saveGFFdl_GF_Year();
+
+
+    }
+
 
 }

+ 704 - 9
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveMeterInfoYesterday.java

@@ -46,7 +46,6 @@ class SaveMeterInfoYesterday {
 
 
     //风机日发电量
-
     void saveEquipmentRfdl() {
 
 
@@ -155,8 +154,7 @@ class SaveMeterInfoYesterday {
         }
     }
 
-    //电计量底码表
-
+    //项目期次风机总发电量
     void saveCalculatingProjectFDL() {
 
 
@@ -210,7 +208,7 @@ class SaveMeterInfoYesterday {
         }
     }
 
-
+    //风电电计量底码表
     void saveBottomCode() {
 
         //1,查询所有风电场
@@ -323,10 +321,8 @@ class SaveMeterInfoYesterday {
             }
         }
     }
-    //项目期次风机总发电量
-
-    //有公式的计算电量
 
+    //风电有公式的计算电量
     void saveCalculating() {
 
         //设置取值开始时间
@@ -427,8 +423,7 @@ class SaveMeterInfoYesterday {
     }
 
     //调用上面4个,第四个需要3-4次
-
-    public void saveMeterInfoYesterday() {
+    public void saveMeterInfoYesterday_FD() {
         this.saveEquipmentRfdl();
         this.saveBottomCode();
         this.saveCalculatingProjectFDL();
@@ -440,6 +435,706 @@ class SaveMeterInfoYesterday {
     }
 
 
+
+    //光伏日发电量
+    void saveEquipmentRfdl_GF() {
+
+
+        //1,在testingpoint中根据 uniform_code=AI064 和code like "%_G_IN_%" 取出所有光伏的电量测点code
+        List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
+                .eq("uniform_code", "AI064")
+                .like("thing_id", "%_G_IN_%")
+        );
+
+        //2,遍历list,每次取出一个code
+        for (TestingPoint testingPoint : testingPointList) {
+            //获取测点code
+            String pointcode = testingPoint.getCode();
+            //获取设备ID
+            String thingId = testingPoint.getThingId();
+
+            //设置取值开始时间
+            DateTime now = DateTime.now();
+            DateTime startDay = DateUtil.offsetDay(now, -1);
+            DateTime startDateTime = DateUtil.beginOfDay(startDay);
+            //设置取值结束时间
+            DateTime endDay = DateUtil.offsetDay(now, -1);
+            DateTime endDateTime = DateUtil.endOfDay(endDay);
+
+            //指定开始日期到结束日期的天数
+            LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+            LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+            long between = ChronoUnit.DAYS.between(day1, day2);
+
+            for (int i = 0; i <= between; i++) {
+
+                DateTime dateTime0 = DateUtil.offsetMillisecond(DateUtil.offsetDay(startDateTime, i), -1);
+                DateTime dateTime1 = DateUtil.offsetDay(startDateTime, i);
+//                DateTime dateTime2 = DateUtil.offsetDay(startDateTime, i + 1);
+                DateTime dateTime2 = DateUtil.offsetMillisecond(DateUtil.offsetDay(startDateTime, i + 1), -1);
+
+                //8,结束点发电量减去开始点发电量得到日发电量(单位Kwh)
+                Map<String, PointData> historySection = adapter.getHistorySection(pointcode, dateTime0.getTime());
+                double value0 = 0;
+                if (!historySection.isEmpty()) {
+                    value0 = historySection.get(pointcode).getValue();
+                }
+                BigDecimal bigDecimal1 = new BigDecimal(Double.toString(value0));
+
+
+                List<PointData> historyRaw = adapter.getHistoryRaw(pointcode, dateTime1.getTime(), dateTime2.getTime());
+
+                BigDecimal rfdl = new BigDecimal(0);
+
+
+                if (historyRaw.size() > 0) {
+//                    BigDecimal bigDecimal1 = new BigDecimal(Double.toString(historyRaw.get(0).getValue()));
+                    BigDecimal bigDecimal2 = new BigDecimal(Double.toString(historyRaw.get(historyRaw.size() - 1).getValue()));
+                    rfdl = bigDecimal2.subtract(bigDecimal1);
+
+
+                    if (testingPoint.getStationId().equals("NX_GDDL_PL_GDC_STA")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_040_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_042_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_041_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_043_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_045_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                    }
+
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_017_AI0021")) {
+                        rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_014_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_018_AI0021")) {
+                        rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_019_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_015_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_016_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_011_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_012_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_013_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_020_AI0021")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+
+                    if (testingPoint.getStationId().equals("NX_GDDL_MCH_GDC_STA")) {
+                        rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                    }
+
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_035_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_038_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_039_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_033_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_034_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_037_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_040_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_041_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_042_AI0005")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+                    if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_036_AI0055")) {
+                        rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                    }
+
+
+                    if (rfdl.doubleValue() > 15000 || rfdl.doubleValue() < 0) {
+
+                        ArrayList<Double> arrayList = new ArrayList<>();
+                        for (PointData pointData : historyRaw) {
+                            arrayList.add(pointData.getValue());
+                        }
+
+                        int index = -1;
+                        for (int j = 1; j < arrayList.size(); j++) {
+                            double current = arrayList.get(j);
+                            double previous = arrayList.get(j - 1);
+                            double difference = current - previous;
+                            if (difference > 15000 || difference < -1) {
+                                index = j;
+                                break;
+                            }
+                        }
+                        if (index != -1) {
+                            double valueGrow2 = arrayList.get(index);
+                            BigDecimal bigDecimalGrow2 = new BigDecimal(Double.toString(valueGrow2));
+                            double valueGrow1 = arrayList.get(index - 1);
+                            BigDecimal bigDecimalGrow1 = new BigDecimal(Double.toString(valueGrow1));
+                            rfdl = (bigDecimal2.subtract(bigDecimalGrow2)).add(bigDecimalGrow1.subtract(bigDecimal1));
+                            if (testingPoint.getStationId().equals("NX_GDDL_PL_GDC_STA")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_040_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_042_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_041_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_043_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("PLGF.NX_GD_PLG_GF_P2_L2_045_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_EVEN);
+                            }
+
+
+                            if (testingPoint.getStationId().equals("NX_GDDL_MCH_GDC_STA")) {
+                                rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_014_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_018_AI0021")) {
+                                rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_019_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_015_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_017_AI0021")) {
+                                rfdl = rfdl.multiply(BigDecimal.valueOf(1000));
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_016_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_011_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_012_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_013_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("DWKGF.NX_GD_DWKG_GF_P1_L2_020_AI0021")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_035_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_038_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_039_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_033_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_034_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_037_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_040_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_041_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_042_AI0005")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                            if (testingPoint.getCode().equals("XHGF.NX_GD_XHG_GF_P1_L4_036_AI0055")) {
+                                rfdl = rfdl.divide(BigDecimal.valueOf(10), 2, RoundingMode.HALF_EVEN);
+                            }
+
+                        }
+                    }
+                }
+
+
+                //避免出现过大错误数据,异常数据给死值4444.4444
+                if (rfdl.doubleValue() > 15000 || rfdl.doubleValue() < 0){
+                    rfdl= BigDecimal.valueOf(4444.4444);
+                }
+                //9,company_nem_code   (powerstation_nem_code project_nem_code line_nem_code equipment_nem_code )都在basic equipment中叫project_id    name date rfdl 存入meterInfo表中
+                Equipment thingId1 = equipmentService.getOne(new QueryWrapper<Equipment>().eq("nem_code", thingId));
+
+                MeterInfoEquipment meterInfoEquipment = new MeterInfoEquipment();
+                meterInfoEquipment.setPowerstationNemCode(thingId1.getWindpowerstationId());
+                meterInfoEquipment.setProjectNemCode(thingId1.getProjectId());
+                meterInfoEquipment.setLineNemCode(thingId1.getLineId());
+                meterInfoEquipment.setEquipmentNemCode(thingId1.getNemCode());
+                meterInfoEquipment.setName(thingId1.getName());
+                meterInfoEquipment.setDate(dateTime1.toLocalDateTime());
+                meterInfoEquipment.setRfdl(rfdl);
+                meterInfoEquipment.setUpdateTime(LocalDateTime.now());
+                QueryWrapper<MeterInfoEquipment> queryWrapper = new QueryWrapper<>();
+                queryWrapper.eq("equipment_nem_code", thingId1.getNemCode()).eq("date", dateTime1.toLocalDateTime());
+                List<MeterInfoEquipment> list = meterInfoEquipmentService.list(queryWrapper);
+                if (list.size() > 0) {
+                    meterInfoEquipment.update(queryWrapper);
+                } else {
+                    meterInfoEquipment.insert();
+                }
+            }
+        }
+    }
+
+    //光伏逆变器日发电量(场站)
+    void saveCalculatingNBQFDL() {
+
+
+        //设置取值开始时间
+        DateTime now = DateTime.now();
+        DateTime startDay = DateUtil.offsetDay(now, -1);
+        DateTime startDateTime = DateUtil.beginOfDay(startDay);
+        //设置取值结束时间
+        DateTime endDay = DateUtil.offsetDay(now, -1);
+        DateTime endDateTime = DateUtil.endOfDay(endDay);
+
+        //指定开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+        long between = ChronoUnit.DAYS.between(day1, day2);
+
+
+        //1,所有期次发电量测点
+        List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_NBQFDL"));
+
+        //遍历期次发电量测点,拿到场站id,
+        for (MeterPoint meterPoint : meterPointList) {
+            String projectId = meterPoint.getWindpowerstationId();
+
+            for (int i = 0; i <= between; i++) {
+                DateTime dateTime1 = DateUtil.offsetDay(startDateTime, i);
+
+                List<MeterInfoEquipment> meterInfoEquipments = meterInfoEquipmentService.list(new QueryWrapper<MeterInfoEquipment>().eq("powerstation_nem_code", projectId).eq("date", dateTime1));
+                BigDecimal bigDecimal = BigDecimal.valueOf(0);
+                for (MeterInfoEquipment meterInfoEquipment : meterInfoEquipments) {
+                    bigDecimal = bigDecimal.add(meterInfoEquipment.getRfdl());
+                }
+
+                MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+                meterInfoCalculating.setName(meterPoint.getName());
+                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<>();
+                queryWrapper.eq("date", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
+                List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
+                if (list.size() > 0) {
+                    meterInfoCalculating.update(queryWrapper);
+                } else {
+                    meterInfoCalculating.insert();
+                }
+            }
+        }
+    }
+
+    //光伏底码数据
+    void saveBottomCode_GF() {
+
+        //1,查询所有光电场
+        List<PowerStation> powerStationList = powerStationService.list(new QueryWrapper<PowerStation>()
+                .like("nem_code", "_GDC_"));
+
+        for (PowerStation powerStation : powerStationList) {
+
+            //2,根据场站ID得到场站下所有测点
+            List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                    .eq("windpowerstation_id", powerStation.getId())
+                    .eq("property", "CD")
+            );
+
+            if (meterPointList.size() > 0) {
+
+                //3,遍历测点,拿到每个测点的nem_code
+                for (MeterPoint meterPoint : meterPointList) {
+                    System.out.println(meterPoint);
+                    //获取测点code
+                    String pointcode = meterPoint.getNemCode();
+
+                    //设置取值开始时间
+                    DateTime now = DateTime.now();
+                    DateTime startDay = DateUtil.offsetDay(now, -1);
+                    DateTime startDateTime = DateUtil.beginOfDay(startDay);
+                    //设置取值结束时间
+                    DateTime endDay = DateUtil.offsetDay(now, -1);
+                    DateTime endDateTime = DateUtil.endOfDay(endDay);
+
+                    //指定开始日期到结束日期的天数
+                    LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+                    LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+                    long between = ChronoUnit.DAYS.between(day1, day2);
+
+                    for (int i = 0; i <= between; i++) {
+
+                        //开始时间,前一天最后
+                        DateTime dateTime0 = DateUtil.offsetMillisecond(DateUtil.offsetDay(startDateTime, i), -1);
+
+                        DateTime dateTime1 = DateUtil.offsetDay(startDateTime, i);
+                        //结束时间,当天最后
+                        DateTime dateTime2 = DateUtil.offsetMillisecond(DateUtil.offsetDay(startDateTime, i + 1), -1);
+
+                        BigDecimal bigDecimal1 = new BigDecimal(0);
+                        BigDecimal bigDecimal2 = new BigDecimal(0);
+                        BigDecimal rfdl = new BigDecimal(0);
+
+                        Map<String, PointData> historySection = adapter.getHistorySection(pointcode, dateTime0.getTime());
+                        double value0 = 0;
+                        if (!historySection.isEmpty()) {
+                            value0 = historySection.get(pointcode).getValue();
+                        }
+                        bigDecimal1 = new BigDecimal(Double.toString(value0));
+
+                        List<PointData> historyRaw = adapter.getHistoryRaw(pointcode, dateTime1.getTime(), dateTime2.getTime());
+
+                        if (historyRaw.size() > 0) {
+//                        bigDecimal1 = new BigDecimal(Double.toString(historyRaw.get(0).getValue()));
+                            bigDecimal1 = bigDecimal1.divide(meterPoint.getXs(), 4, RoundingMode.HALF_EVEN);
+                            bigDecimal2 = new BigDecimal(Double.toString(historyRaw.get(historyRaw.size() - 1).getValue()));
+                            bigDecimal2 = bigDecimal2.divide(meterPoint.getXs(), 4, RoundingMode.HALF_EVEN);
+                            rfdl = bigDecimal2.subtract(bigDecimal1).multiply(meterPoint.getMagnification());
+
+                            if (rfdl.doubleValue() > 1000000 || rfdl.doubleValue() < 0) {
+
+                                ArrayList<Double> arrayList = new ArrayList<>();
+                                for (PointData pointData : historyRaw) {
+                                    arrayList.add(pointData.getValue());
+                                }
+                                int index = -1;
+                                // 定义增长阈值
+                                double threshold = 15000.0;
+
+                                for (int j = 1; j < arrayList.size(); j++) {
+                                    double current = arrayList.get(j);
+                                    double previous = arrayList.get(j - 1);
+                                    double difference = current - previous;
+                                    if (difference > threshold) {
+                                        index = j;
+                                        break;
+                                    }
+                                }
+                                if (index != -1) {
+                                    double valueGrow2 = arrayList.get(index);
+                                    BigDecimal bigDecimalGrow2 = new BigDecimal(Double.toString(valueGrow2));
+                                    double valueGrow1 = arrayList.get(index - 1);
+                                    BigDecimal bigDecimalGrow1 = new BigDecimal(Double.toString(valueGrow1));
+                                    rfdl = (bigDecimal2.subtract(bigDecimalGrow2).add(bigDecimalGrow1).subtract(bigDecimal1)).multiply(meterPoint.getMagnification());
+                                }
+                            }
+                        }
+
+                        MeterInfoBottomcode meterInfoBottomcode = new MeterInfoBottomcode();
+                        meterInfoBottomcode.setName(meterPoint.getName());
+                        meterInfoBottomcode.setStartTime(dateTime1.toLocalDateTime());
+                        meterInfoBottomcode.setStartValue(bigDecimal1);
+                        meterInfoBottomcode.setEndTime(dateTime2.toLocalDateTime());
+                        meterInfoBottomcode.setEndValue(bigDecimal2);
+                        meterInfoBottomcode.setDayValue(rfdl);
+                        meterInfoBottomcode.setCode(pointcode);
+                        meterInfoBottomcode.setWindpowerstationId(meterPoint.getWindpowerstationId());
+
+                        QueryWrapper<MeterInfoBottomcode> queryWrapper = new QueryWrapper<>();
+                        queryWrapper.eq("start_time", dateTime1.toLocalDateTime()).eq("code", meterPoint.getNemCode());
+                        List<MeterInfoBottomcode> list = meterInfoBottomcodeService.list(queryWrapper);
+                        if (list.size() > 0) {
+                            meterInfoBottomcode.update(queryWrapper);
+                        } else {
+                            meterInfoBottomcode.insert();
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    //有公式的计算光伏电量
+    void saveCalculating_GF() {
+
+        //设置取值开始时间
+        DateTime now = DateTime.now();
+        DateTime startDay = DateUtil.offsetDay(now, -1);
+        DateTime startDateTime = DateUtil.beginOfDay(startDay);
+        //设置取值结束时间
+        DateTime endDay = DateUtil.offsetDay(now, -1);
+        DateTime endDateTime = DateUtil.endOfDay(endDay);
+
+        //指定开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+        long between = ChronoUnit.DAYS.between(day1, day2);
+
+        List<MeterPoint> meterPointJSDList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_GF")
+                .ne("formula", ""));
+
+
+        //时间集合,以便后面批量查询
+        List<DateTime> dateTimes = new ArrayList<>();
+        for (int i = 0; i <= between; i++) {
+            DateTime dateTime4 = DateUtil.offsetDay(startDateTime, i);
+            dateTimes.add(dateTime4);
+        }
+        //code集合,以便后面批量查询
+        List<String> codes = new ArrayList<>();
+        for (MeterPoint meterPoint : meterPointJSDList) {
+            String formula1 = meterPoint.getFormula();
+            System.out.println("转换前的公式:" + formula1);
+            String formula2 = formula1
+                    .replaceAll("DL.NX", "DL_NX")
+                    .replaceAll("DJL.", "DJL_")
+                    .replaceAll("PLSJ1.NX", "PLSJ1_NX")
+                    ;
+            System.out.println("转换后的公式字符串:" + formula2);
+
+
+            String[] meterPointCodes = StringUtils.split(formula1, "[+-*/()]");
+            meterPointCodes = Arrays.stream(meterPointCodes)
+                    .filter(meterPointCode -> !(meterPointCode.length() < 8))
+                    .toArray(String[]::new);
+            System.out.println("过滤后公式中的测点数:" + meterPointCodes.length);
+            System.out.println(Arrays.toString(meterPointCodes));
+            codes.addAll(Arrays.asList(meterPointCodes));
+        }
+
+        //批量查询
+        List<MeterInfoCalculating> list1 = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                .in("code", codes)
+                .in("date", dateTimes)
+        );
+        List<MeterInfoBottomcode> list2 = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>()
+                .in("code", codes)
+                .in("start_time", dateTimes));
+
+
+        for (MeterPoint meterPoint : meterPointJSDList) {
+            String formula1 = meterPoint.getFormula();
+            System.out.println("转换前的公式:" + formula1);
+            String formula2 = formula1
+                    .replaceAll("DL.NX", "DL_NX")
+                    .replaceAll("DJL.", "DJL_")
+                    .replaceAll("PLSJ1.NX", "PLSJ1_NX")
+                    ;
+            System.out.println("转换后的公式字符串:" + formula2);
+
+
+            String[] meterPointCodes = StringUtils.split(formula1, "[+-*/()]");
+            meterPointCodes = Arrays.stream(meterPointCodes)
+                    .filter(meterPointCode -> !(meterPointCode.length() < 8))
+                    .toArray(String[]::new);
+            System.out.println("过滤后公式中的测点数:" + meterPointCodes.length);
+            System.out.println(Arrays.toString(meterPointCodes));
+
+
+            for (int i = 0; i <= between; i++) {
+                HashMap<String, Object> map = new HashMap<>();
+                //开始时间
+                DateTime dateTime1 = DateUtil.offsetDay(startDateTime, i);
+//                DateTime dateTime2 = DateUtil.offsetDay(startDateTime, i + 1);
+                //遍历code数据,拿到每一个code,用code和时间,在meter_info_bottom中拿到dayValue
+                for (String meterPointCode : meterPointCodes) {
+//                    String meterPointCode_ = meterPointCode.replaceAll("\\.", "_");
+                    String meterPointCode_ = meterPointCode
+                            .replaceAll("DL.", "DL_")
+                            .replaceAll("DJL.", "DJL_")
+                            .replaceAll("PLSJ1.NX", "PLSJ1_NX")
+                            ;
+                    System.out.println("要查询的点code:" + meterPointCode);
+                    System.out.println("替换后的点code:" + meterPointCode_);
+//
+                    try {
+                        if (meterPointCode.startsWith("DL")) {
+                            System.out.println("计算测点DL:" + meterPointCode);
+                            for (MeterInfoCalculating meterInfoCalculating : list1) {
+                                if (meterInfoCalculating.getCode().equals(meterPointCode) && meterInfoCalculating.getDate().equals(dateTime1.toLocalDateTime())) {
+
+                                    System.out.println("DL点数据:" + meterInfoCalculating.getValue());
+                                    map.put(meterPointCode_, meterInfoCalculating.getValue());
+
+                                }
+                            }
+                        } else {
+                            System.out.println("计算测点Bottom:" + meterPointCode);
+
+                            for (MeterInfoBottomcode meterInfoBottomcode : list2) {
+                                if (meterInfoBottomcode.getCode().equals(meterPointCode) && meterInfoBottomcode.getStartTime().equals(dateTime1.toLocalDateTime())) {
+
+                                    System.out.println("Bottom点数据日电量:" + meterInfoBottomcode.getDayValue());
+                                    map.put(meterPointCode_, meterInfoBottomcode.getDayValue());
+                                }
+                            }
+                        }
+
+                    } catch (Exception e) {
+                        System.out.println("获取数据异常:" + e.getMessage());
+
+                    }
+                }
+                System.out.println("map集合:" + map);
+                try {
+                    BigDecimal bigDecimal1 = (BigDecimal) ScriptShell.parseExpr(formula2, map);
+                    System.out.println("公式计算后数据:" + bigDecimal1);
+                    MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+                    meterInfoCalculating.setName(meterPoint.getName());
+                    meterInfoCalculating.setCode(meterPoint.getNemCode());
+                    meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
+                    meterInfoCalculating.setValue(bigDecimal1.divide(BigDecimal.valueOf(10000),4,RoundingMode.HALF_EVEN));
+                    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);
+                    if (list.size() > 0) {
+                        meterInfoCalculating.update(queryWrapper);
+                    } else {
+                        meterInfoCalculating.insert();
+                    }
+
+                } catch (ArithmeticException e) {
+
+                    MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
+                    meterInfoCalculating.setName(meterPoint.getName());
+                    meterInfoCalculating.setCode(meterPoint.getNemCode());
+                    meterInfoCalculating.setDate(dateTime1.toLocalDateTime());
+                    meterInfoCalculating.setValue(BigDecimal.valueOf(0));
+                    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);
+                    if (list.size() > 0) {
+                        meterInfoCalculating.update(queryWrapper);
+                    } else {
+                        meterInfoCalculating.insert();
+                    }
+
+                } catch (Exception e) {
+                    System.out.println("存入异常  :" + e.getMessage());
+
+
+                }
+
+            }
+        }
+    }
+
+
+    //调用上面4个,第四个需要3-4次
+    public void saveMeterInfoYesterday_GF() {
+        this.saveEquipmentRfdl_GF();
+        this.saveCalculatingNBQFDL();
+        this.saveBottomCode_GF();
+        this.saveCalculating_GF();
+    }
+
+
+
+
+
+
+
+
+
+
+
+
 }
 
 

+ 45 - 13
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveSWDL_Day_Month_Year.java

@@ -229,7 +229,7 @@ public class SaveSWDL_Day_Month_Year {
             double monthValue = 0.0;
             for (int i = 0; i <= between; i++) {
                 //开始时间00:00:01
-                dateTime1 = DateUtil.offsetDay(startDateTime, i);
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
                 //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
                 List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%SWDL_SBS%_MONTH"));
@@ -286,7 +286,7 @@ public class SaveSWDL_Day_Month_Year {
             double monthValue = 0.0;
             for (int i = 0; i <= between; i++) {
                 //开始时间00:00:01
-                dateTime1 = DateUtil.offsetDay(startDateTime, i);
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i*12);
 
                 //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
                 List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%SWDL_SBS%_YEAR"));
@@ -326,7 +326,6 @@ public class SaveSWDL_Day_Month_Year {
 
         MeterPoint meterPoint = meterPointService.getOne(new QueryWrapper<MeterPoint>().eq("property", "JSD_FCSWDL_DAY"));
         //设置取值开始时间
-        //设置取值开始时间
         String startString = DateUtil.now();
         DateTime nowDateTime = DateUtil.parse(startString);
         DateTime startDateTime = DateUtil.beginOfDay(nowDateTime);
@@ -337,7 +336,9 @@ public class SaveSWDL_Day_Month_Year {
             //开始时间00:00:00
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", startDateTime.toLocalDateTime()).like("code", "%_SWDL_P0"));
+            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", startDateTime.toLocalDateTime())
+                    .like("code", "%_SWDL_P0"));
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -479,10 +480,14 @@ public class SaveSWDL_Day_Month_Year {
 
 
 
+
     //光伏
     void savePowerstationSwdl_GF_Month() {
 
-        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_SWDL_MONTH"));
+        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_SWDL_MONTH")
+                .like("windpowerstation_id", "_GDC_")
+        );
 
         //设置取值开始时间
         String startString = DateUtil.now();
@@ -501,10 +506,13 @@ public class SaveSWDL_Day_Month_Year {
             double monthValue = 0.0;
             for (int i = 0; i <= between; i++) {
                 //开始时间00:00:01
-                dateTime1 = DateUtil.offsetDay(startDateTime, i);
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
                 //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
-                List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%SWDL_SBS%_MONTH"));
+                List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                        .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
+                        .eq("date", dateTime1.toLocalDateTime())
+                        .like("code", "%_GFSWDL_PO"));
 
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
                     //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
@@ -539,7 +547,10 @@ public class SaveSWDL_Day_Month_Year {
 
     void savePowerstationSwdl_GF_Year() {
 
-        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_SWDL_YEAR"));
+        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_SWDL_YEAR")
+                .like("windpowerstation_id", "_GDC_")
+        );
 
         //设置取值开始时间
         String startString = DateUtil.now();
@@ -558,10 +569,13 @@ public class SaveSWDL_Day_Month_Year {
             double monthValue = 0.0;
             for (int i = 0; i <= between; i++) {
                 //开始时间00:00:01
-                dateTime1 = DateUtil.offsetDay(startDateTime, i);
+                dateTime1 = DateUtil.offsetMonth(startDateTime, i*12);
 
                 //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路总发电量)
-                List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("windpowerstation_id", meterPoint.getWindpowerstationId()).eq("date", dateTime1.toLocalDateTime()).like("code", "%SWDL_SBS%_YEAR"));
+                List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                        .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
+                        .eq("date", dateTime1.toLocalDateTime())
+                        .like("code", "%POWERSTATIONSWDL_MONTH"));
 
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
                     //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
@@ -609,7 +623,9 @@ public class SaveSWDL_Day_Month_Year {
         //开始时间00:00:00
 
         //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-        List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", startDateTime.toLocalDateTime()).like("code", "%_GFSWDL_P0"));
+        List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", startDateTime.toLocalDateTime())
+                .like("code", "%_GFSWDL_PO"));
         //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
         if (meterInfoCalculatingDay.size() > 0) {
             for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -665,7 +681,9 @@ public class SaveSWDL_Day_Month_Year {
             dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).like("code", "%_POWERSTATIONSWDL_MONTH"));
+            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .like("code", "%POWERSTATIONSWDL_MONTH"));
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -721,7 +739,9 @@ public class SaveSWDL_Day_Month_Year {
             dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路期次)
-            MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).eq("code", "DL.NX_GD_GFSWDL_MONTH"));
+            MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .eq("code", "DL.NX_GD_GFSWDL_MONTH"));
 
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculating != null) {
@@ -765,5 +785,17 @@ public class SaveSWDL_Day_Month_Year {
 
     }
 
+    public void sum_GF() {
+
+        this.savePowerstationSwdl_GF_Month();
+        this.savePowerstationSwdl_GF_Year();
+
+        this.saveGFStationSwdl_GF_Day();
+        this.saveGFStationSwdl_GF_Month();
+        this.saveGFStationSwdl_GF_Year();
+
+
+    }
+
 
 }

+ 6 - 3
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetMeterInfo.java

@@ -176,7 +176,8 @@ public class GetMeterInfo {
         //条件构造器查询
         List<MeterPoint> meterPoints = meterPointService.list(new QueryWrapper<MeterPoint>()
                 .eq("windpowerstation_id", windId)
-                .eq("property", "JSD")
+//                .eq("property", "JSD")
+                .in("property", "JSD","JSD_GF","JSD_NBQFDL")
                 .eq(StringUtil.isNotBlank(meterType), "meter_type", meterType)
                 .eq(StringUtil.isNotBlank(meterClass), "meter_class", meterClass)
                 .eq(StringUtil.isNotBlank(name), "name", name)
@@ -461,7 +462,8 @@ public class GetMeterInfo {
         //条件构造器查询计算点
         List<MeterPoint> meterPoints = meterPointService.list(new QueryWrapper<MeterPoint>()
                 .eq("windpowerstation_id", windId)
-                .in("property", "JSD", "JSD_QCFDL")
+                .in("property", "JSD", "JSD_QCFDL","JSD_NBQFDL","JSD_GF")
+//                .in("property", "JSD", "JSD_QCFDL")
                 .eq(StringUtil.isNotBlank(meterType), "meter_type", meterType)
                 .eq(StringUtil.isNotBlank(meterClass), "meter_class", meterClass)
                 .eq(StringUtil.isNotBlank(name), "name", name)
@@ -742,7 +744,8 @@ public class GetMeterInfo {
         //条件构造器查询计算点
         List<MeterPoint> meterPoints = meterPointService.list(new QueryWrapper<MeterPoint>()
                 .eq("windpowerstation_id", windId)
-                .in("property", "JSD", "JSD_QCFDL")
+//                .in("property", "JSD", "JSD_QCFDL")
+                .in("property", "JSD", "JSD_QCFDL","JSD_NBQFDL","JSD_GF")
                 .eq(StringUtil.isNotBlank(meterType), "meter_type", meterType)
                 .eq(StringUtil.isNotBlank(meterClass), "meter_class", meterClass)
                 .eq(StringUtil.isNotBlank(name), "name", name)

+ 59 - 1
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetPowerstation_Type_Class_Name.java

@@ -35,7 +35,26 @@ public class GetPowerstation_Type_Class_Name {
     /*获取所有风场排序后的VO对象*/
     public ArrayList<MeterInfoVo> getPowerstation() {
         //获取所有风场,并排序
-        List<PowerStation> powerStations = powerStationService.list(new QueryWrapper<PowerStation>().eq("wind_type", "-1").orderBy(true, true, "order_num"));
+        List<PowerStation> powerStations = powerStationService.list(new QueryWrapper<PowerStation>()
+                .eq("wind_type", "-1")
+                .orderBy(true, true, "order_num"));
+        //创建VO对象,遍历每个风场,赋值name和nem_code,并返回
+        ArrayList<MeterInfoVo> powerStationsVo = new ArrayList<>();
+        for (PowerStation powerStation : powerStations) {
+            MeterInfoVo meterInfoVo = new MeterInfoVo();
+            meterInfoVo.setName(powerStation.getName());
+            meterInfoVo.setNemCode(powerStation.getNemCode());
+            powerStationsVo.add(meterInfoVo);
+        }
+        return powerStationsVo;
+    }
+
+    /*获取所有风场排序后的VO对象*/
+    public ArrayList<MeterInfoVo> getPowerstationAll() {
+        //获取所有风场,并排序
+        List<PowerStation> powerStations = powerStationService.list(new QueryWrapper<PowerStation>()
+//                .eq("wind_type", "-1")
+                .orderBy(true, true, "order_num"));
         //创建VO对象,遍历每个风场,赋值name和nem_code,并返回
         ArrayList<MeterInfoVo> powerStationsVo = new ArrayList<>();
         for (PowerStation powerStation : powerStations) {
@@ -86,6 +105,44 @@ public class GetPowerstation_Type_Class_Name {
         return null;
     }
 
+    /*获取计算点的的一级类型,二级分类,具体名称*/
+    public List<MeterInfoVo> getMeterTypeCalculatingAll(String windId, String type, String meterClass) {
+        //判断传入参数是否为空,并根据传入参数在meterPoint查询计算点
+        if (windId != null) {
+            List<MeterPoint> meterTypeList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                    .in("property", "JSD","JSD_QCFDL","JSD_GF","JSD_NBQFDL")
+                    .eq("windpowerstation_id", windId)
+                    .eq(StringUtils.isNotBlank(type), "meter_type", type)
+                    .eq(StringUtils.isNotBlank(meterClass), "meter_class", meterClass)
+            );
+
+            //encounteredMeterTypes存不重复的测点类型
+            Set<String> encounteredMeterTypes = new HashSet<>();
+            //返回的VO对象
+            List<MeterInfoVo> meterTypeListVo = new ArrayList<>();
+            //遍历测点集合,判断传入参数是否为空,分别返回一级类型,二级分类,name
+            for (MeterPoint meterPoint : meterTypeList) {
+                String meterType;
+                if (StringUtils.isNotBlank(meterClass) && StringUtils.isNotBlank(type)) {
+                    meterType = meterPoint.getName();
+                } else if (StringUtils.isNotBlank(type)) {
+                    meterType = meterPoint.getMeterClass();
+                } else {
+                    meterType = meterPoint.getMeterType();
+                }
+
+                if (!encounteredMeterTypes.contains(meterType)) {
+                    MeterInfoVo meterInfoVo = new MeterInfoVo();
+                    meterInfoVo.setName(meterType);
+                    meterTypeListVo.add(meterInfoVo);
+                    encounteredMeterTypes.add(meterType);
+                }
+            }
+            return meterTypeListVo;
+        }
+        return null;
+    }
+
     /*获取侧点的一级类型,二级分类,具体名称*/
     public List<MeterInfoVo> getMeterTypeBottom(String windId, String type, String meterClass) {
 
@@ -124,6 +181,7 @@ public class GetPowerstation_Type_Class_Name {
 
     }
 
+
     /*获取场站下风机编号*/
     public List<MeterInfoVo> getEquipmentId(String windId) {
         //设备表中根据场站ID查询风机编号