Browse Source

线路15分钟发电量

malijun 1 year ago
parent
commit
1bbfc8a02a
18 changed files with 769 additions and 66 deletions
  1. 23 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/controller/GetTypeController.java
  2. 41 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/controller/MeterInfoController.java
  3. 92 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/entity/ProMeterLineFDL15Min.java
  4. 2 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/entity/vo/MeterInfoVo.java
  5. 6 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/job/MeterJob.java
  6. 11 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/mapper/ProMeterLineFDL15MinMapper.java
  7. 172 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveLineFDL15MinTest.java
  8. 26 30
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryDay.java
  9. 36 19
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryMonthYear.java
  10. 34 9
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryMonthYearTest.java
  11. 16 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/iService/IProMeterLineFDL15MinService.java
  12. 13 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/impl/ProMeterLineFDL15MinServiceImpl.java
  13. 8 2
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveFDL_Day_Month_Year.java
  14. 138 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveLineFDL_15Min.java
  15. 15 4
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveSWDL_Day_Month_Year.java
  16. 98 0
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetMeterInfo.java
  17. 33 2
      electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetPowerstation_Type_Class_Name.java
  18. 5 0
      electricity/meter/src/main/resources/mappers-postgresql/ProMeterLineFDL15MinMapper.xml

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

@@ -103,4 +103,27 @@ public class GetTypeController {
         return new Result<>(200, "成功", response);
     }
 
+
+
+    /**
+     * 获取线路
+     *
+     * @param windId     风场nem_code
+     * @return 根据nem_code返回meter_type;
+     * 根据nem_code,meter_type返回meter_class;
+     * 根据nem_code,meter_type,meter_class返回name;
+     */
+    @GetMapping("/getLinename")
+    public Result<Object> getLineName(
+            @RequestParam(required = false) String windId
+
+    ) {
+        List<MeterInfoVo> meterTypeListVo = getPowerstationTypeClassName.getLineName(windId);
+
+        Map<String, Object> response = new HashMap<>();
+        response.put("type", meterTypeListVo);
+        return new Result<>(200, "成功", response);
+
+    }
+
 }

+ 41 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/controller/MeterInfoController.java

@@ -21,6 +21,47 @@ public class MeterInfoController {
 
     @Resource
     GetMeterInfo getMeterInfo;
+    /**
+     * 获取根据传入不同参数获取线路小时发电量
+     *
+     * @param windId     风场ID
+     * @param meterType  测点一级类型
+     * @param meterClass 测点二级分类
+     * @param name       测点名称
+     * @param startTime  开始时间(时间戳)
+     * @param endTime    结束时间(时间戳)
+     * @param page       第几页
+     * @param perPage    每页几条数据
+     * @return 时间段内的每日底码数据
+     */
+    @GetMapping("/meterinfo/linefdl")
+    public Result<Object> getLineFDL_15Min(
+            @RequestParam(required = false) String windId,
+            @RequestParam(required = false) String meterType,
+            @RequestParam(required = false) String meterClass,
+            @RequestParam(required = false) String name,
+            @RequestParam(required = false) long startTime,
+            @RequestParam(required = false) long endTime,
+            @RequestParam(defaultValue = "1") int page,
+            @RequestParam(defaultValue = "25") int perPage
+    ) {
+        ArrayList<MeterInfoVo> meterInfoByWindIdList = getMeterInfo.getLineFDL_hour(windId, meterType, meterClass, name, startTime, endTime);
+        // 进行排序
+        meterInfoByWindIdList.sort(Comparator.comparing(MeterInfoVo::getName));
+        // 进行分页处理
+        int totalItems = meterInfoByWindIdList.size();
+        int startIndex = (page - 1) * perPage;
+        int endIndex = Math.min(startIndex + perPage, totalItems);
+        List<MeterInfoVo> paginatedList = meterInfoByWindIdList.subList(startIndex, endIndex);
+        // 构建响应
+        Map<String, Object> response = new HashMap<>();
+        response.put("lineFDL", paginatedList);
+        response.put("totalItems", totalItems);
+        response.put("page", page);
+        response.put("perPage", perPage);
+        return new Result<>(200, "成功", response);
+
+    }
 
     /**
      * 获取根据传入不同参数获取每日底码信息

+ 92 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/entity/ProMeterLineFDL15Min.java

@@ -0,0 +1,92 @@
+package com.gyee.gaia.meter.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 风机日发电量表
+ * </p>
+ */
+@TableName("pro_meter_lineFDL_15min")
+@Data
+public class ProMeterLineFDL15Min extends Model<ProMeterLineFDL15Min> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键;主键自增
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 底码字段名称
+     */
+    private String name;
+
+    /**
+     * 开始时间
+     */
+    private LocalDateTime startTime;
+
+    /**
+     * 开始值
+     */
+    private BigDecimal startValue;
+    /**
+     * 截止时间
+     */
+    private LocalDateTime endTime;
+    /**
+     * 截止值
+     */
+    private BigDecimal endValue;
+    /**
+     * 日电量
+     */
+    private BigDecimal dayValue;
+
+    /**
+     * 测点编码
+     */
+    private String code;
+
+    /**
+     * 创建人;创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间;创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人;更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间;更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 备注;备注
+     */
+    private String remark;
+
+    /**
+     * 场站
+     */
+    private String windpowerstationId;
+
+}

+ 2 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/entity/vo/MeterInfoVo.java

@@ -15,6 +15,8 @@ public class MeterInfoVo {
     private String name;
     private String nemCode;
     private DateTime date;
+    private DateTime startTime;
+    private DateTime endTime;
     private BigDecimal startCode;
     private BigDecimal endCode;
     private BigDecimal rdl;

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

@@ -26,6 +26,8 @@ public class MeterJob {
     SaveSWDL_Day_Month_Year saveSWDLDayMonthYear;
     @Resource
     SaveMeterInfoYesterday saveMeterInfoYesterday;
+    @Resource
+    SaveLineFDL_15Min saveLineFDL_15Min;
 
 
     @XxlJob("MeterJob_FD")
@@ -143,6 +145,10 @@ public class MeterJob {
 
 
 
+    @XxlJob("saveLineFDL_15Min")
+    void saveLineFDL_15Min(){
+        saveLineFDL_15Min.saveLineFDL_15Min();
+    }
 
 
 }

+ 11 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/mapper/ProMeterLineFDL15MinMapper.java

@@ -0,0 +1,11 @@
+package com.gyee.gaia.meter.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.gaia.meter.entity.ProMeterLineFDL15Min;
+import org.apache.ibatis.annotations.Mapper;
+
+
+@Mapper
+public interface ProMeterLineFDL15MinMapper extends BaseMapper<ProMeterLineFDL15Min> {
+
+}

+ 172 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveLineFDL15MinTest.java

@@ -0,0 +1,172 @@
+package com.gyee.gaia.meter.service;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.gaia.meter.adapter.Adapter;
+import com.gyee.gaia.meter.entity.*;
+import com.gyee.gaia.meter.service.impl.MeterPointServiceImpl;
+import com.gyee.gaia.meter.service.impl.PowerStationServiceImpl;
+import com.gyee.gaia.meter.service.impl.ProMeterLineFDL15MinServiceImpl;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Author: malijun
+ * Data  : 2023: 04: 27
+ **/
+@SpringBootTest
+class SaveLineFDL15MinTest {
+
+
+    @Resource
+    Adapter adapter;
+    @Resource
+    PowerStationServiceImpl powerStationService;
+    @Resource
+    MeterPointServiceImpl meterPointService;
+    @Resource
+    ProMeterLineFDL15MinServiceImpl proMeterLineFDL15MinService;
+
+
+    @Value("${start.time}")
+    private String startTimeString;
+    @Value("${end.time}")
+    private String endTimeString;
+
+
+
+    @Test
+    void saveBottomCode() {
+
+        //1,查询所有风电场
+        List<PowerStation> powerStationList = powerStationService.list(new QueryWrapper<PowerStation>()
+                .like("nem_code", "_FDC_"));
+
+        for (PowerStation powerStation : powerStationList) {
+            //2,根据场站ID得到场站下所有测点
+            List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                    .eq("windpowerstation_id", powerStation.getId())
+                    .eq("property", "CD")
+                    .eq("meter_type", "线路")
+                    .like("meter_class", "集电线路")
+            );
+
+            //3,遍历测点,拿到每个测点的nem_code
+            for (MeterPoint meterPoint : meterPointList) {
+                System.out.println(meterPoint);
+                //获取测点code
+                String pointcode = meterPoint.getNemCode();
+
+                //设置取值开始时间
+                String startString = startTimeString;
+                DateTime startDateTime = DateUtil.parse(startString);
+
+                //设置取值结束时间
+                String endDateString = endTimeString;
+                DateTime endDateTime0 = DateUtil.parse(endDateString);
+                DateTime endDateTime = DateUtil.endOfDay(endDateTime0);
+
+                //指定开始日期到结束日期的天数
+                LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+                LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+                long between0 = ChronoUnit.MINUTES.between(day1, day2);
+                int between = (int) (between0/15);
+
+
+                for (int i = 0; i <= between; i++) {
+
+                    //开始时间00:00:01
+                    DateTime dateTime1 = DateUtil.offsetMinute(startDateTime, (i-1)*15);
+                    DateTime dateTime2 = DateUtil.offsetMinute(startDateTime, i*15);
+                    BigDecimal bigDecimal1 = new BigDecimal(0);
+                    BigDecimal bigDecimal2 = new BigDecimal(0);
+                    BigDecimal rfdl = new BigDecimal(0);
+
+
+                    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() > 50000 || rfdl.doubleValue() < 0) {
+
+                            ArrayList<Double> arrayList = new ArrayList<>();
+                            for (PointData pointData : historyRaw) {
+                                arrayList.add(pointData.getValue());
+                            }
+                            int index = -1;
+                            // 定义增长阈值
+                            double threshold = 50000.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());
+                            }
+                        }
+                    }
+
+                    ProMeterLineFDL15Min meterInfoBottomcode = new ProMeterLineFDL15Min();
+                    meterInfoBottomcode.setName(meterPoint.getDescription());
+                    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<ProMeterLineFDL15Min> queryWrapper = new QueryWrapper<>();
+                    queryWrapper
+                            .eq("start_time", dateTime1.toLocalDateTime())
+                            .eq("code", meterPoint.getNemCode());
+                    List<ProMeterLineFDL15Min> list = proMeterLineFDL15MinService.list(queryWrapper);
+                    if (list.size() > 0) {
+                        meterInfoBottomcode.update(queryWrapper);
+                    } else {
+                        meterInfoBottomcode.insert();
+                    }
+                }
+            }
+        }
+    }
+
+
+
+
+}
+
+
+
+
+
+
+
+
+

+ 26 - 30
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryDay.java

@@ -386,7 +386,6 @@ class SaveMeterInfoHistoryDay {
 
             //3,遍历测点,拿到每个测点的nem_code
             for (MeterPoint meterPoint : meterPointList) {
-                System.out.println(meterPoint);
                 //获取测点code
                 String pointcode = meterPoint.getNemCode();
 
@@ -628,16 +627,12 @@ class SaveMeterInfoHistoryDay {
         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_");
-            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));
         }
 
@@ -653,17 +648,13 @@ class SaveMeterInfoHistoryDay {
 
         for (MeterPoint meterPoint : meterPointJSDList) {
             String formula1 = meterPoint.getFormula();
-            System.out.println("转换前的公式:" + formula1);
             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))
                     .toArray(String[]::new);
-            System.out.println("过滤后公式中的测点数:" + meterPointCodes.length);
-            System.out.println(Arrays.toString(meterPointCodes));
 
 
             for (int i = 0; i <= between; i++) {
@@ -675,12 +666,9 @@ class SaveMeterInfoHistoryDay {
                 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_);
 //
                     try {
                         if (meterPointCode.startsWith("DL")) {
-                            System.out.println("计算测点DL:" + meterPointCode);
                             for (MeterInfoCalculating meterInfoCalculating : list1) {
                                 if (meterInfoCalculating.getCode().equals(meterPointCode) && meterInfoCalculating.getDate().equals(dateTime1.toLocalDateTime())) {
 
@@ -690,7 +678,6 @@ class SaveMeterInfoHistoryDay {
                                 }
                             }
                         } else {
-                            System.out.println("计算测点Bottom:" + meterPointCode);
 
                             for (MeterInfoBottomcode meterInfoBottomcode : list2) {
                                 if (meterInfoBottomcode.getCode().equals(meterPointCode) && meterInfoBottomcode.getStartTime().equals(dateTime1.toLocalDateTime())) {
@@ -706,10 +693,8 @@ class SaveMeterInfoHistoryDay {
 
                     }
                 }
-                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());
@@ -1675,21 +1660,17 @@ class SaveMeterInfoHistoryDay {
         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));
         }
 
@@ -1705,21 +1686,17 @@ class SaveMeterInfoHistoryDay {
 
         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++) {
@@ -1735,12 +1712,9 @@ class SaveMeterInfoHistoryDay {
                             .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())) {
 
@@ -1750,7 +1724,6 @@ class SaveMeterInfoHistoryDay {
                                 }
                             }
                         } else {
-                            System.out.println("计算测点Bottom:" + meterPointCode);
 
                             for (MeterInfoBottomcode meterInfoBottomcode : list2) {
                                 if (meterInfoBottomcode.getCode().equals(meterPointCode) && meterInfoBottomcode.getStartTime().equals(dateTime1.toLocalDateTime())) {
@@ -1766,10 +1739,8 @@ class SaveMeterInfoHistoryDay {
 
                     }
                 }
-                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());
@@ -1845,6 +1816,31 @@ class SaveMeterInfoHistoryDay {
         this.saveCalculatingNBQFDL();
         this.saveBottomCode_GF();
         this.saveCalculating_GF();
+
+        //需要修正石板泉4期上网电量
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+
+    }
+
+    //光伏总,
+    @XxlJob("save")
+    public void save() {
+        this.saveEquipmentRfdl_GF1();
+        this.saveCalculatingNBQFDL();
+        this.saveBottomCode_GF();
+        this.saveCalculating_GF();
+
+        //需要修正石板泉4期上网电量
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+        this.saveCalculating_FJ();
+
+        //日月年
+        saveMeterInfoHistoryMonthYear.sumGF_FD();
+
+
     }
 
 
@@ -1880,8 +1876,8 @@ class SaveMeterInfoHistoryDay {
     //补数(全)
     @XxlJob("meterinfoDayMonthYear_GF_FD")
     public void  meterinfoDayMonthYear(){
-        saveMeterInfoHistoryMonthYear.sumGF_FD();
         this.saveGF_FD();
+        saveMeterInfoHistoryMonthYear.sumGF_FD();
 
     }
 

+ 36 - 19
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryMonthYear.java

@@ -507,7 +507,10 @@ public class SaveMeterInfoHistoryMonthYear {
 
     void savePowerstationFdl_Month() {
 
-        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_POWERSTATIONFDL_MONTH"));
+        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_POWERSTATIONFDL_MONTH")
+                .like("windpowerstation_id", "FDC")
+        );
 //        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_NFDL"));
 
         //设置取值开始时间
@@ -561,7 +564,10 @@ public class SaveMeterInfoHistoryMonthYear {
 
     void savePowerstationFdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -960,7 +966,10 @@ public class SaveMeterInfoHistoryMonthYear {
 
     void savePowerstationSwdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1021,7 +1030,10 @@ public class SaveMeterInfoHistoryMonthYear {
 
     void savePowerstationSwdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1166,7 +1178,11 @@ public class SaveMeterInfoHistoryMonthYear {
             dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).like("code", "%_SWDL_MONTH"));
+            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .like("code", "%_SWDL_MONTH")
+                    .like("windpowerstation_id", "_FDC_")
+            );
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -1422,10 +1438,7 @@ public class SaveMeterInfoHistoryMonthYear {
             meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
 
             QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-            queryWrapper
-                    .eq("code", meterPoint.getNemCode())
-                    .eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0))
-                    .eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
             List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
             if (list.size() > 0) {
                 meterInfoCalculating.update(queryWrapper);
@@ -1604,9 +1617,7 @@ public class SaveMeterInfoHistoryMonthYear {
         meterInfoCalculating.setUpdateTime(LocalDateTime.now());
 
         QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-        queryWrapper
-                .eq("code", meterPoint.getNemCode())
-                .eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
+        queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
         List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
         if (list.size() > 0) {
             meterInfoCalculating.update(queryWrapper);
@@ -1650,7 +1661,7 @@ public class SaveMeterInfoHistoryMonthYear {
                 List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
                         .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
                         .eq("date", dateTime1.toLocalDateTime())
-                        .like("code", "%_GFSWDL_PO"));
+                        .like("code", "_GFSWDL_PO"));
 
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
                     //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
@@ -1670,7 +1681,10 @@ public class SaveMeterInfoHistoryMonthYear {
             meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
 
             QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            queryWrapper
+                    .eq("code", meterPoint.getNemCode())
+                    .eq("date", dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0))
+                    .eq("windpowerstation_id", meterPoint.getWindpowerstationId());
             List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
             if (list.size() > 0) {
                 meterInfoCalculating.update(queryWrapper);
@@ -1712,7 +1726,7 @@ public class SaveMeterInfoHistoryMonthYear {
                 List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
                         .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
                         .eq("date", dateTime1.toLocalDateTime())
-                        .like("code", "%POWERSTATIONSWDL_MONTH"));
+                        .like("code", "POWERSTATIONSWDL_MONTH"));
 
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
                     //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
@@ -1720,8 +1734,6 @@ public class SaveMeterInfoHistoryMonthYear {
                 }
 
             }
-
-
             // 将每个场站的每个月的value值存入到MeterInfoCalculating
             MeterInfoCalculating meterInfoCalculating = new MeterInfoCalculating();
             meterInfoCalculating.setName(meterPoint.getName());
@@ -1733,7 +1745,10 @@ public class SaveMeterInfoHistoryMonthYear {
             meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
 
             QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            queryWrapper
+                    .eq("code", meterPoint.getNemCode())
+                    .eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0))
+                    .eq("windpowerstation_id", meterPoint.getWindpowerstationId());
             List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
             if (list.size() > 0) {
                 meterInfoCalculating.update(queryWrapper);
@@ -1913,7 +1928,9 @@ public class SaveMeterInfoHistoryMonthYear {
         meterInfoCalculating.setUpdateTime(LocalDateTime.now());
 
         QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
+        queryWrapper
+                .eq("code", meterPoint.getNemCode())
+                .eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
         List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
         if (list.size() > 0) {
             meterInfoCalculating.update(queryWrapper);

+ 34 - 9
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryMonthYearTest.java

@@ -510,7 +510,10 @@ public class SaveMeterInfoHistoryMonthYearTest {
     @Test
     void savePowerstationFdl_Month() {
 
-        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_POWERSTATIONFDL_MONTH"));
+        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_POWERSTATIONFDL_MONTH")
+                .like("windpowerstation_id", "FDC")
+        );
 //        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_NFDL"));
 
         //设置取值开始时间
@@ -565,7 +568,10 @@ public class SaveMeterInfoHistoryMonthYearTest {
     @Test
     void savePowerstationFdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -972,7 +978,10 @@ public class SaveMeterInfoHistoryMonthYearTest {
     @Test
     void savePowerstationSwdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1034,7 +1043,10 @@ public class SaveMeterInfoHistoryMonthYearTest {
     @Test
     void savePowerstationSwdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = startTimeString;
@@ -1081,7 +1093,10 @@ public class SaveMeterInfoHistoryMonthYearTest {
             meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
 
             QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            queryWrapper
+                    .eq("code", meterPoint.getNemCode())
+                    .eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0))
+                    .eq("windpowerstation_id", meterPoint.getWindpowerstationId());
             List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
             if (list.size() > 0) {
                 meterInfoCalculating.update(queryWrapper);
@@ -1183,7 +1198,11 @@ public class SaveMeterInfoHistoryMonthYearTest {
             dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).like("code", "%_SWDL_MONTH"));
+            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .like("code", "%_SWDL_MONTH")
+                    .like("windpowerstation_id", "_FDC_")
+            );
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -1241,7 +1260,10 @@ public class SaveMeterInfoHistoryMonthYearTest {
             dateTime1 = DateUtil.offsetMonth(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路期次)
-            MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).eq("code", "DL.NX_GD_FCSWDL_MONTH"));
+            MeterInfoCalculating meterInfoCalculating = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .eq("code", "DL.NX_GD_FCSWDL_MONTH")
+            );
 
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculating != null) {
@@ -1670,7 +1692,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
                 List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
                         .eq("windpowerstation_id", meterPoint.getWindpowerstationId())
                         .eq("date", dateTime1.toLocalDateTime())
-                        .like("code", "%_GFSWDL_PO"));
+                        .like("code", "_GFSWDL_PO"));
 
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
                     //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
@@ -1690,7 +1712,10 @@ public class SaveMeterInfoHistoryMonthYearTest {
             meterInfoCalculating.setWindpowerstationId(meterPoint.getWindpowerstationId());
 
             QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0)).eq("windpowerstation_id", meterPoint.getWindpowerstationId());
+            queryWrapper
+                    .eq("code", meterPoint.getNemCode())
+                    .eq("date", dateTime1.toLocalDateTime().withDayOfMonth(1).withNano(0).withSecond(0).withMinute(0).withHour(0))
+                    .eq("windpowerstation_id", meterPoint.getWindpowerstationId());
             List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
             if (list.size() > 0) {
                 meterInfoCalculating.update(queryWrapper);

+ 16 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/service/iService/IProMeterLineFDL15MinService.java

@@ -0,0 +1,16 @@
+package com.gyee.gaia.meter.service.iService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gyee.gaia.meter.entity.ProMeterLineFDL15Min;
+
+/**
+ * <p>
+ * 公司日发电量表 服务类
+ * </p>
+ *
+ * @author gfhd
+ * @since 2023-04-28
+ */
+public interface IProMeterLineFDL15MinService extends IService<ProMeterLineFDL15Min> {
+
+}

+ 13 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/service/impl/ProMeterLineFDL15MinServiceImpl.java

@@ -0,0 +1,13 @@
+package com.gyee.gaia.meter.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.gaia.meter.entity.ProMeterLineFDL15Min;
+import com.gyee.gaia.meter.mapper.ProMeterLineFDL15MinMapper;
+import com.gyee.gaia.meter.service.iService.IProMeterLineFDL15MinService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ProMeterLineFDL15MinServiceImpl extends ServiceImpl<ProMeterLineFDL15MinMapper, ProMeterLineFDL15Min> implements IProMeterLineFDL15MinService {
+
+}

+ 8 - 2
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveFDL_Day_Month_Year.java

@@ -349,7 +349,10 @@ public class SaveFDL_Day_Month_Year {
 
     void savePowerstationFdl_Month() {
 
-        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_POWERSTATIONFDL_MONTH"));
+        List<MeterPoint> meterPointJSD_YFDLList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_POWERSTATIONFDL_MONTH")
+                .like("windpowerstation_id", "FDC")
+        );
 //        List<MeterPoint> meterPointJSD_NFDLList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_NFDL"));
 
         //设置取值开始时间
@@ -402,7 +405,10 @@ public class SaveFDL_Day_Month_Year {
 
     void savePowerstationFdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = DateUtil.now();

+ 138 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveLineFDL_15Min.java

@@ -0,0 +1,138 @@
+package com.gyee.gaia.meter.service.meter;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.gaia.meter.adapter.Adapter;
+import com.gyee.gaia.meter.entity.MeterPoint;
+import com.gyee.gaia.meter.entity.PointData;
+import com.gyee.gaia.meter.entity.PowerStation;
+import com.gyee.gaia.meter.entity.ProMeterLineFDL15Min;
+import com.gyee.gaia.meter.service.impl.MeterPointServiceImpl;
+import com.gyee.gaia.meter.service.impl.PowerStationServiceImpl;
+import com.gyee.gaia.meter.service.impl.ProMeterLineFDL15MinServiceImpl;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Author: malijun
+ * Data  : 2023: 05: 09
+ **/
+
+@Component
+public class SaveLineFDL_15Min {
+
+    @Resource
+    PowerStationServiceImpl powerStationService;
+    @Resource
+    MeterPointServiceImpl meterPointService;
+    @Resource
+    ProMeterLineFDL15MinServiceImpl proMeterLineFDL15MinService;
+    @Resource
+    Adapter adapter;
+
+
+
+    public void saveLineFDL_15Min() {
+
+        //1,查询所有风电场
+        List<PowerStation> powerStationList = powerStationService.list(new QueryWrapper<PowerStation>()
+                .like("nem_code", "_FDC_"));
+
+        for (PowerStation powerStation : powerStationList) {
+            //2,根据场站ID得到场站下所有测点
+            List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                    .eq("windpowerstation_id", powerStation.getId())
+                    .eq("property", "CD")
+                    .eq("meter_type", "线路")
+                    .like("meter_class", "集电线路")
+            );
+
+            //3,遍历测点,拿到每个测点的nem_code
+            for (MeterPoint meterPoint : meterPointList) {
+                //获取测点code
+                String pointcode = meterPoint.getNemCode();
+
+                //2,获取当前日期,当日开始时间
+                DateTime nowDateTime = DateUtil.parse(DateUtil.now());
+
+                //开始时间00:00:01
+                DateTime dateTime1 = DateUtil.offsetMinute(nowDateTime, -15);
+                DateTime dateTime2 = DateUtil.offsetMinute(nowDateTime, 0);
+                BigDecimal bigDecimal1 = new BigDecimal(0);
+                BigDecimal bigDecimal2 = new BigDecimal(0);
+                BigDecimal rfdl = new BigDecimal(0);
+
+                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() > 50000 || rfdl.doubleValue() < 0) {
+
+                        ArrayList<Double> arrayList = new ArrayList<>();
+                        for (PointData pointData : historyRaw) {
+                            arrayList.add(pointData.getValue());
+                        }
+                        int index = -1;
+                        // 定义增长阈值
+                        double threshold = 50000.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());
+                        }
+                    }
+                }
+
+                ProMeterLineFDL15Min meterInfoBottomcode = new ProMeterLineFDL15Min();
+                meterInfoBottomcode.setName(meterPoint.getDescription());
+                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<ProMeterLineFDL15Min> queryWrapper = new QueryWrapper<>();
+                queryWrapper
+                        .eq("start_time", dateTime1.toLocalDateTime())
+                        .eq("code", meterPoint.getNemCode());
+                List<ProMeterLineFDL15Min> list = proMeterLineFDL15MinService.list(queryWrapper);
+                if (list.size() > 0) {
+                    meterInfoBottomcode.update(queryWrapper);
+                } else {
+                    meterInfoBottomcode.insert();
+                }
+
+            }
+        }
+    }
+
+
+}
+
+
+

+ 15 - 4
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveSWDL_Day_Month_Year.java

@@ -210,7 +210,10 @@ public class SaveSWDL_Day_Month_Year {
 
     void savePowerstationSwdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = DateUtil.now();
@@ -267,7 +270,10 @@ public class SaveSWDL_Day_Month_Year {
 
     void savePowerstationSwdl_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", "FDC")
+        );
 
         //设置取值开始时间
         String startString = DateUtil.now();
@@ -394,7 +400,10 @@ 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", "%_SWDL_MONTH"));
+            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .like("windpowerstation_id", "_FDC_")
+                    .like("code", "%_SWDL_MONTH"));
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -761,7 +770,9 @@ public class SaveSWDL_Day_Month_Year {
         meterInfoCalculating.setUpdateTime(LocalDateTime.now());
 
         QueryWrapper<MeterInfoCalculating> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("code", meterPoint.getNemCode()).eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
+        queryWrapper
+                .eq("code", meterPoint.getNemCode())
+                .eq("date", dateTime1.toLocalDateTime().withDayOfYear(1).withNano(0).withSecond(0).withMinute(0).withHour(0));
         List<MeterInfoCalculating> list = meterInfoCalculatingService.list(queryWrapper);
         if (list.size() > 0) {
             meterInfoCalculating.update(queryWrapper);

+ 98 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetMeterInfo.java

@@ -40,6 +40,8 @@ public class GetMeterInfo {
     MeterPointServiceImpl meterPointService;
     @Resource
     EquipmentServiceImpl equipmentService;
+    @Resource
+    ProMeterLineFDL15MinServiceImpl proMeterLineFDL15MinService;
 
     //获取风机发电量,每日
     public ArrayList<MeterInfoVo> getEquipmentInfoById(String windId, String id, long startTime, long endTime) {
@@ -808,6 +810,17 @@ public class GetMeterInfo {
         return null;
     }
 
+    //三个辅助方法合并成一个通用方法
+    @Nullable
+    private <T> T findObjectByCodeAndDateLine(@NotNull List<T> objects, String code, LocalDateTime date, Function<T, String> getCodeFunction, Function<T, LocalDateTime> getDateFunction) {
+        for (T object : objects) {
+            if (getCodeFunction.apply(object).equals(code) && getDateFunction.apply(object).isEqual(date)) {
+                return object;
+            }
+        }
+        return null;
+    }
+
     // 辅助方法,根据日期和NemCode查找对象
     @Nullable
     private MeterInfoCalculating findMeterInfoCalculating(@NotNull List<MeterInfoCalculating> meterInfoCalculatings, String nemCode, DateTime date) {
@@ -843,4 +856,89 @@ public class GetMeterInfo {
     }
 
 
+
+    //获取底码数据,每月
+    public ArrayList<MeterInfoVo> getLineFDL_hour(String windId, String meterType, String meterClass, String name, long startTime, long endTime) {
+        //时间戳转为字符串
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String format1 = simpleDateFormat.format(new Date(startTime));
+        String format2 = simpleDateFormat.format(new Date(endTime));
+        //字符串转为DateTime类型
+        DateTime startDateTime0 = DateUtil.parse(format1);
+        DateTime startDateTime = DateUtil.beginOfHour(startDateTime0);
+        DateTime endDateTime0 = DateUtil.parse(format2);
+        DateTime endDateTime = DateUtil.beginOfHour(endDateTime0);
+
+        //转为LocalDateTime类型,计算间隔数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+
+        long betweenMin = ChronoUnit.MINUTES.between(day1, day2);
+        int between= (int) (betweenMin/15);
+
+        long betweenHour = ChronoUnit.HOURS.between(day1, day2);
+
+        //VO对象集合
+        ArrayList<MeterInfoVo> meterInfoVos = new ArrayList<>();
+        //条件构造器查询
+        List<MeterPoint> meterPoints = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("windpowerstation_id", windId)
+                .like("property", "CD")
+                .eq(StringUtil.isBlank(meterType), "meter_type", "线路")
+                .like(StringUtil.isBlank(meterClass),"meter_class", "集电线路")
+                .eq(StringUtil.isNotBlank(meterType), "meter_type", meterType)
+                .eq(StringUtil.isNotBlank(meterClass), "meter_class", meterClass)
+                .eq(StringUtil.isNotBlank(name), "description", name)
+
+        );
+        //时间集合,以便后面批量查询
+        List<DateTime> dateTimes = new ArrayList<>();
+        for (int i = 0; i < between; i++) {
+            DateTime dateTime4 = DateUtil.offsetMinute(startDateTime, (i+1)*15);
+            dateTimes.add(dateTime4);
+        }
+        //条件构造器批量查询
+        List<ProMeterLineFDL15Min> meterInfoBottomcodes = proMeterLineFDL15MinService.list(new QueryWrapper<ProMeterLineFDL15Min>()
+                .in("end_time", dateTimes));
+
+        //遍历每小时
+        for (int i = 0; i < betweenHour; i++) {
+            //每小时开始和结束
+            DateTime dateTime0 = DateUtil.offsetHour(startDateTime, i);
+            DateTime dateTime1 = DateUtil.beginOfHour(dateTime0);
+            DateTime dateTime2 = DateUtil.offsetHour(dateTime1,1);
+
+            //遍历测点,累加每15分钟到每小时
+            for (MeterPoint meterPoint : meterPoints) {
+                //每台风机VO对象,先赋值时间,名称
+                MeterInfoVo meterInfoVo = new MeterInfoVo();
+                meterInfoVo.setStartTime(dateTime1);
+                meterInfoVo.setEndTime(dateTime2);
+                meterInfoVo.setName(meterPoint.getDescription());
+                //初始化月发电量
+                BigDecimal ydl = BigDecimal.valueOf(0);
+                //循环遍历每15分钟
+                for (int j = 1; j <= 4; j++) {
+                    DateTime dateTime3 = DateUtil.offsetMinute(dateTime1, j*15);
+                    ProMeterLineFDL15Min meterInfoBottomcode = findObjectByCodeAndDateLine(meterInfoBottomcodes, meterPoint.getNemCode(), dateTime3.toLocalDateTime(), ProMeterLineFDL15Min::getCode, ProMeterLineFDL15Min::getEndTime);
+                    if (meterInfoBottomcode != null) {
+                        //当月第一天底码,起码
+                        if (j == 1) {
+                            meterInfoVo.setStartCode(meterInfoBottomcode.getStartValue());
+                        }
+                        ydl = ydl.add(meterInfoBottomcode.getDayValue());
+                        //每天赋值一次止码,最后一天的止码为当月止码
+                        if (j == 4) {
+                            meterInfoVo.setEndCode(meterInfoBottomcode.getEndValue());
+                        }
+                    }
+                }
+                meterInfoVo.setRdl(ydl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
+                meterInfoVos.add(meterInfoVo);
+            }
+
+        }
+        return meterInfoVos;
+    }
+
 }

+ 33 - 2
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetPowerstation_Type_Class_Name.java

@@ -72,7 +72,7 @@ public class GetPowerstation_Type_Class_Name {
         //判断传入参数是否为空,并根据传入参数在meterPoint查询计算点
         if (windId != null) {
             List<MeterPoint> meterTypeList = meterPointService.list(new QueryWrapper<MeterPoint>()
-                    .in("property", "JSD","JSD_QCFDL")
+                    .in("property", "JSD", "JSD_QCFDL")
                     .eq("windpowerstation_id", windId)
                     .eq(StringUtils.isNotBlank(type), "meter_type", type)
                     .eq(StringUtils.isNotBlank(meterClass), "meter_class", meterClass)
@@ -110,7 +110,7 @@ public class GetPowerstation_Type_Class_Name {
         //判断传入参数是否为空,并根据传入参数在meterPoint查询计算点
         if (windId != null) {
             List<MeterPoint> meterTypeList = meterPointService.list(new QueryWrapper<MeterPoint>()
-                    .in("property", "JSD","JSD_QCFDL","JSD_GF","JSD_NBQFDL")
+                    .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)
@@ -182,6 +182,37 @@ public class GetPowerstation_Type_Class_Name {
     }
 
 
+    /*获取LINE的一级类型,二级分类,具体名称*/
+    public List<MeterInfoVo> getLineName(String windId) {
+
+        if (windId != null) {
+            List<MeterPoint> meterTypeList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                    .eq("property", "CD")
+                    .eq("windpowerstation_id", windId)
+                    .eq("meter_type", "线路")
+                    .like("meter_class", "集电线路")
+            );
+
+            Set<String> encounteredMeterTypes = new HashSet<>();
+            List<MeterInfoVo> meterTypeListVo = new ArrayList<>();
+
+            for (MeterPoint meterPoint : meterTypeList) {
+                String meterType;
+                meterType = meterPoint.getDescription();
+                if (!encounteredMeterTypes.contains(meterType)) {
+                    MeterInfoVo meterInfoVo = new MeterInfoVo();
+                    meterInfoVo.setName(meterType);
+                    meterTypeListVo.add(meterInfoVo);
+                    encounteredMeterTypes.add(meterType);
+                }
+            }
+            return meterTypeListVo;
+        }
+        return null;
+
+    }
+
+
     /*获取场站下风机编号*/
     public List<MeterInfoVo> getEquipmentId(String windId) {
         //设备表中根据场站ID查询风机编号

+ 5 - 0
electricity/meter/src/main/resources/mappers-postgresql/ProMeterLineFDL15MinMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.gaia.meter.mapper.ProMeterLineFDL15MinMapper">
+
+</mapper>