Browse Source

1.1版本,统一调度

malijun 1 year ago
parent
commit
4a1c28590b

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

@@ -61,6 +61,7 @@ public class MeterInfoController {
         response.put("page", page);
         response.put("perPage", perPage);
         return new Result<>(200, "成功", response);
+
     }
 
 

+ 51 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/entity/vo/SisViewVO.java

@@ -38,4 +38,55 @@ public class SisViewVO {
 
 
 
+
+    //装机容量
+    public BigDecimal gfzjrl;
+    //日发电量
+    public BigDecimal gfrfdl;
+    //月发电量
+    public BigDecimal gfyfdl;
+    //年发电量
+    public BigDecimal gfnfdl;
+    //上网电量
+    public BigDecimal gfswdl;
+    //埃肯发电量
+    public BigDecimal akfdl;
+    //大武口发电量
+    public BigDecimal dwkfdl;
+    //海子井发电量
+    public BigDecimal hzjfdl;
+    //平罗发电量
+    public BigDecimal plfdl;
+    //马场湖发电量
+    public BigDecimal mchfdl;
+    //宣和发电量
+    public BigDecimal xhfdl;
+
+    //月利用小时
+    public BigDecimal gfylyxs;
+    //年利用小时
+    public BigDecimal gfnlyxs;
+
+
+    //总
+    //装机容量
+    public BigDecimal zjrl;
+    //日发电量
+    public BigDecimal rfdl;
+    //月发电量
+    public BigDecimal yfdl;
+    //年发电量
+    public BigDecimal nfdl;
+    //月利用小时
+    public BigDecimal ylyxs;
+    //年利用小时
+    public BigDecimal nlyxs;
+    //日上网电量
+    public BigDecimal swdl;
+
+
+
+
+
+
 }

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

@@ -90,6 +90,59 @@ public class MeterJob {
 
 
 
+    @XxlJob("MeterJob_GF_FD")
+    void meterJob_GF_FD() {
+
+        //设备日发电量(407台风机)
+        saveEquipmentFDL.saveEquipmentRfdl_GF();
+        //期次风机发电量(14个期次)
+        saveEquipmentFDL.saveCalculatingNBQFDL();
+
+        //底码表数据,起始底码,截止底码,日电量
+        saveBottomcode.saveBottomCode_GF();
+
+        saveCalculating.saveCalculating_GF();
+
+
+        //风机日月年发电量
+        saveFDLDayMonthYear.sum_GF();
+
+        //风机日月年上网电量
+        saveSWDLDayMonthYear.sum_GF();
+
+
+        //设备日发电量(407台风机)
+        saveEquipmentFDL.saveEquipmentRfdl();
+        //期次风机发电量(14个期次)
+        saveEquipmentFDL.saveCalculatingFJFDL();
+
+        //底码表数据,起始底码,截止底码,日电量
+        saveBottomcode.saveBottomCode();
+
+        //计算有公式的发电量,场用电量等(由于后面数据需要用前面算出来的数,所以执行3-4次)
+        saveCalculating.saveCalculating();
+        saveCalculating.saveCalculating();
+        saveCalculating.saveCalculating();
+        saveCalculating.saveCalculating();
+
+        //风机日月年发电量
+        saveFDLDayMonthYear.sum();
+
+        //风机日月年上网电量
+        saveSWDLDayMonthYear.sum();
+
+    }
+
+    @XxlJob("SaveMeterInfoYesterday_GF_FD")
+    void meterJob_GF_FD_Yesterday() {
+
+        saveMeterInfoYesterday.saveMeterInfoYesterday_GF();
+        saveMeterInfoYesterday.saveMeterInfoYesterday_FD();
+
+    }
+
+
+
 
 
 }

+ 544 - 9
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryDay.java

@@ -163,6 +163,158 @@ class SaveMeterInfoHistoryDay {
         }
     }
 
+    //优化批量更新
+    void saveEquipmentRfdl_FJ1() {
+
+        //设置取值开始时间
+        String startString = startTimeString;
+        DateTime startDateTime = DateUtil.parse(startString);
+
+        //设置取值结束时间
+        String endDateString = endTimeString;
+        DateTime endDateTime = DateUtil.parse(endDateString);
+
+        //指定开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+        long between = ChronoUnit.DAYS.between(day1, day2);
+
+        //1,在testingpoint中根据 uniform_code=AI064 和code like "%_FJ_%" 取出所有风机的电量测点code
+        List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
+                .eq("uniform_code", "AI064")
+                .like("code", "%_FJ_%")
+        );
+
+
+        //批量查询的thingIDs
+        ArrayList<String> thingIds = new ArrayList<>();
+        for (TestingPoint testingPoint1 : testingPointList) {
+            //获取设备ID
+            String thingId = testingPoint1.getThingId();
+            thingIds.add(thingId);
+        }
+
+
+        ArrayList<DateTime> dateTimes = new ArrayList<>();
+        for (int i = 0; i <= between; i++) {
+            DateTime dateTime4 = DateUtil.offsetDay(startDateTime, i);
+//            LocalDateTime localDateTime5 = dateTime4.toLocalDateTime();
+            dateTimes.add(dateTime4);
+        }
+
+        QueryWrapper<MeterInfoEquipment> queryWrapper = new QueryWrapper<>();
+        queryWrapper
+                .in("equipment_nem_code", thingIds)
+                .in("date", dateTimes);
+        List<MeterInfoEquipment> listMeterInfoEquipment = meterInfoEquipmentService.list(queryWrapper);
+
+
+        ArrayList<MeterInfoEquipment> insertList = new ArrayList<>();
+        ArrayList<MeterInfoEquipment> updateList = new ArrayList<>();
+
+
+        //2,遍历list,每次取出一个code
+        for (TestingPoint testingPoint : testingPointList) {
+            //获取测点code
+            String pointcode = testingPoint.getCode();
+            //获取设备ID
+            String thingId = testingPoint.getThingId();
+
+            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 (rfdl.doubleValue() > 50000 || 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 > 50000 || 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));
+                        }
+                    }
+                }
+
+                //避免出现过大错误数据,异常数据给死值4444.4444
+                if (rfdl.doubleValue() > 100000 || 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());
+
+
+                boolean found = false;
+                for (MeterInfoEquipment meterInfoEquipmentOne : listMeterInfoEquipment) {
+                    if (DateUtil.isSameDay(new DateTime(meterInfoEquipmentOne.getDate()), dateTime1)
+                            && (thingId1.getNemCode().equals(meterInfoEquipmentOne.getEquipmentNemCode()))
+                    ) {
+                        found = true;
+                        break;
+                    }
+                }
+                if (found) {
+                    QueryWrapper<MeterInfoEquipment> queryWrapper1 = new QueryWrapper<>();
+                    queryWrapper1.eq("equipment_nem_code", thingId1.getNemCode()).eq("date", dateTime1.toLocalDateTime());
+                    meterInfoEquipment.update(queryWrapper1);
+                } else {
+                    insertList.add(meterInfoEquipment);
+                }
+            }
+        }
+        if (insertList.size() > 0) {
+            meterInfoEquipmentService.saveBatch(insertList);
+        }
+
+
+    }
+
     //电计量底码表
     void saveCalculatingProjectFDL() {
 
@@ -939,6 +1091,385 @@ class SaveMeterInfoHistoryDay {
         }
     }
 
+    //光伏日发电量,优化批量插入或者更新
+    void saveEquipmentRfdl_GF1() {
+
+        //设置取值开始时间
+        String startString = startTimeString;
+        DateTime startDateTime = DateUtil.parse(startString);
+
+        //设置取值结束时间
+        String endDateString = endTimeString;
+        DateTime endDateTime = DateUtil.parse(endDateString);
+
+        //指定开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+        long between = ChronoUnit.DAYS.between(day1, day2);
+
+
+        //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_%")
+        );
+
+        //批量查询的thingIDs
+        ArrayList<String> thingIds = new ArrayList<>();
+        for (TestingPoint testingPoint1 : testingPointList) {
+            //获取设备ID
+            String thingId = testingPoint1.getThingId();
+            thingIds.add(thingId);
+        }
+
+
+        ArrayList<DateTime> dateTimes = new ArrayList<>();
+        for (int i = 0; i <= between; i++) {
+            DateTime dateTime4 = DateUtil.offsetDay(startDateTime, i);
+//            LocalDateTime localDateTime5 = dateTime4.toLocalDateTime();
+            dateTimes.add(dateTime4);
+        }
+
+        QueryWrapper<MeterInfoEquipment> queryWrapper = new QueryWrapper<>();
+        queryWrapper
+                .in("equipment_nem_code", thingIds)
+                .in("date", dateTimes);
+        List<MeterInfoEquipment> listMeterInfoEquipment = meterInfoEquipmentService.list(queryWrapper);
+
+
+        ArrayList<MeterInfoEquipment> insertList = new ArrayList<>();
+        ArrayList<MeterInfoEquipment> updateList = new ArrayList<>();
+
+
+        //2,遍历list,每次取出一个code
+        for (TestingPoint testingPoint : testingPointList) {
+            //获取测点code
+            String pointcode = testingPoint.getCode();
+            //获取设备ID
+            String thingId = testingPoint.getThingId();
+
+
+            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());
+
+
+                //遍历listMeterInfoEquipment,有则放入更新集合,没有则放入插入集合
+                boolean found = false;
+                for (MeterInfoEquipment meterInfoEquipmentOne : listMeterInfoEquipment) {
+                    if (DateUtil.isSameDay(new DateTime(meterInfoEquipmentOne.getDate()), dateTime1)
+                            && (thingId1.getNemCode().equals(meterInfoEquipmentOne.getEquipmentNemCode()))
+//                            && (!rfdl.equals(meterInfoEquipmentOne.getRfdl()))
+                    ) {
+                        found = true;
+                        break;
+                    }
+                }
+                if (found) {
+                    QueryWrapper<MeterInfoEquipment> queryWrapper1 = new QueryWrapper<>();
+                    queryWrapper1.eq("equipment_nem_code", thingId1.getNemCode()).eq("date", dateTime1.toLocalDateTime());
+                    meterInfoEquipment.update(queryWrapper1);
+                } else {
+                    insertList.add(meterInfoEquipment);
+                }
+            }
+        }
+        if (insertList.size() > 0) {
+            meterInfoEquipmentService.saveBatch(insertList);
+        }
+
+    }
+
     //光伏逆变器日发电量(场站)
     void saveCalculatingNBQFDL() {
 
@@ -1288,7 +1819,8 @@ class SaveMeterInfoHistoryDay {
     //风场总
     @XxlJob("saveFD")
     public  void saveFD() {
-        this.saveEquipmentRfdl();
+//        this.saveEquipmentRfdl();
+        this.saveEquipmentRfdl_FJ1();
         this.saveBottomCode();
         this.saveCalculatingProjectFDL();
         //优化后
@@ -1306,7 +1838,8 @@ class SaveMeterInfoHistoryDay {
     //光伏总
     @XxlJob("saveGF")
     public void saveGF() {
-        this.saveEquipmentRfdl_GF();
+//        this.saveEquipmentRfdl_GF();
+        this.saveEquipmentRfdl_GF1();
         this.saveCalculatingNBQFDL();
         this.saveBottomCode_GF();
         this.saveCalculating_GF();
@@ -1314,9 +1847,10 @@ class SaveMeterInfoHistoryDay {
 
 
     //风场+光伏
-    @XxlJob("saveFD_GF")
-    public void saveFD_GF() {
-        this.saveEquipmentRfdl();
+    @XxlJob("saveGF_FD")
+    public void saveGF_FD() {
+//        this.saveEquipmentRfdl();
+        this.saveEquipmentRfdl_FJ1();
         this.saveBottomCode();
         this.saveCalculatingProjectFDL();
         //优化后
@@ -1331,16 +1865,17 @@ class SaveMeterInfoHistoryDay {
 //        this.saveCalculating();
 //        this.saveCalculating();
 
-        this.saveEquipmentRfdl_GF();
+//        this.saveEquipmentRfdl_GF();
+        this.saveEquipmentRfdl_GF1();
         this.saveCalculatingNBQFDL();
         this.saveBottomCode_GF();
         this.saveCalculating_GF();
     }
 
-    @XxlJob("meterinfoDayMonthYear_FD_GF")
+    @XxlJob("meterinfoDayMonthYear_GF_FD")
     public void  meterinfoDayMonthYear(){
-        saveMeterInfoHistoryMonthYear.sumFD_GF();
-        this.saveFD_GF();
+        saveMeterInfoHistoryMonthYear.sumGF_FD();
+        this.saveGF_FD();
 
     }
 

+ 180 - 21
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryDayTest.java

@@ -52,7 +52,7 @@ class SaveMeterInfoHistoryDayTest {
 
     //风机日发电量
     @Test
-    void saveEquipmentRfdl() {
+    void saveEquipmentRfdl_FJ() {
 
         //1,在testingpoint中根据 uniform_code=AI064 和code like "%_FJ_%" 取出所有风机的电量测点code
         List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
@@ -161,6 +161,160 @@ class SaveMeterInfoHistoryDayTest {
         }
     }
 
+
+    //优化批量更新
+    @Test
+    void saveEquipmentRfdl_FJ1() {
+
+        //设置取值开始时间
+        String startString = startTimeString;
+        DateTime startDateTime = DateUtil.parse(startString);
+
+        //设置取值结束时间
+        String endDateString = endTimeString;
+        DateTime endDateTime = DateUtil.parse(endDateString);
+
+        //指定开始日期到结束日期的天数
+        LocalDateTime day1 = LocalDateTimeUtil.of(startDateTime);
+        LocalDateTime day2 = LocalDateTimeUtil.of(endDateTime);
+        long between = ChronoUnit.DAYS.between(day1, day2);
+
+        //1,在testingpoint中根据 uniform_code=AI064 和code like "%_FJ_%" 取出所有风机的电量测点code
+        List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
+                .eq("uniform_code", "AI064")
+                .like("code", "%_FJ_%")
+        );
+
+
+        //批量查询的thingIDs
+        ArrayList<String> thingIds = new ArrayList<>();
+        for (TestingPoint testingPoint1 : testingPointList) {
+            //获取设备ID
+            String thingId = testingPoint1.getThingId();
+            thingIds.add(thingId);
+        }
+
+
+        ArrayList<DateTime> dateTimes = new ArrayList<>();
+        for (int i = 0; i <= between; i++) {
+            DateTime dateTime4 = DateUtil.offsetDay(startDateTime, i);
+//            LocalDateTime localDateTime5 = dateTime4.toLocalDateTime();
+            dateTimes.add(dateTime4);
+        }
+
+        QueryWrapper<MeterInfoEquipment> queryWrapper = new QueryWrapper<>();
+        queryWrapper
+                .in("equipment_nem_code", thingIds)
+                .in("date", dateTimes);
+        List<MeterInfoEquipment> listMeterInfoEquipment = meterInfoEquipmentService.list(queryWrapper);
+
+
+        ArrayList<MeterInfoEquipment> insertList = new ArrayList<>();
+        ArrayList<MeterInfoEquipment> updateList = new ArrayList<>();
+
+
+        //2,遍历list,每次取出一个code
+        for (TestingPoint testingPoint : testingPointList) {
+            //获取测点code
+            String pointcode = testingPoint.getCode();
+            //获取设备ID
+            String thingId = testingPoint.getThingId();
+
+            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 (rfdl.doubleValue() > 50000 || 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 > 50000 || 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));
+                        }
+                    }
+                }
+
+                //避免出现过大错误数据,异常数据给死值4444.4444
+                if (rfdl.doubleValue() > 100000 || 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());
+
+
+                boolean found = false;
+                for (MeterInfoEquipment meterInfoEquipmentOne : listMeterInfoEquipment) {
+                    if (DateUtil.isSameDay(new DateTime(meterInfoEquipmentOne.getDate()), dateTime1)
+                            && (thingId1.getNemCode().equals(meterInfoEquipmentOne.getEquipmentNemCode()))
+                    ) {
+                        found = true;
+                        break;
+                    }
+                }
+                if (found) {
+                    QueryWrapper<MeterInfoEquipment> queryWrapper1 = new QueryWrapper<>();
+                    queryWrapper1.eq("equipment_nem_code", thingId1.getNemCode()).eq("date", dateTime1.toLocalDateTime());
+                    meterInfoEquipment.update(queryWrapper1);
+                } else {
+                    insertList.add(meterInfoEquipment);
+                }
+            }
+        }
+        if (insertList.size() > 0) {
+            meterInfoEquipmentService.saveBatch(insertList);
+        }
+
+
+    }
+
     //电计量底码表
     @Test
     void saveCalculatingProjectFDL() {
@@ -982,7 +1136,6 @@ class SaveMeterInfoHistoryDayTest {
             dateTimes.add(dateTime4);
         }
 
-
         QueryWrapper<MeterInfoEquipment> queryWrapper = new QueryWrapper<>();
         queryWrapper
                 .in("equipment_nem_code", thingIds)
@@ -1294,30 +1447,33 @@ class SaveMeterInfoHistoryDayTest {
                 meterInfoEquipment.setName(thingId1.getName());
                 meterInfoEquipment.setDate(dateTime1.toLocalDateTime());
                 meterInfoEquipment.setRfdl(rfdl);
+                meterInfoEquipment.setUpdateTime(LocalDateTime.now());
 
 
                 //遍历listMeterInfoEquipment,有则放入更新集合,没有则放入插入集合
-                boolean add = false;
+                boolean found = false;
                 for (MeterInfoEquipment meterInfoEquipmentOne : listMeterInfoEquipment) {
-                    if (dateTime1.toLocalDateTime().equals(meterInfoEquipmentOne.getDate()) && thingId1.getNemCode().equals(meterInfoEquipmentOne.getEquipmentNemCode())) {
-                        add = updateList.add(meterInfoEquipment);
+                    if (DateUtil.isSameDay(new DateTime(meterInfoEquipmentOne.getDate()), dateTime1)
+                            && (thingId1.getNemCode().equals(meterInfoEquipmentOne.getEquipmentNemCode()))
+//                            && (!rfdl.equals(meterInfoEquipmentOne.getRfdl()))
+                    ) {
+                        found = true;
+                        break;
                     }
                 }
-                if (!add) {
+                if (found) {
+                    QueryWrapper<MeterInfoEquipment> queryWrapper1 = new QueryWrapper<>();
+                    queryWrapper1.eq("equipment_nem_code", thingId1.getNemCode()).eq("date", dateTime1.toLocalDateTime());
+                    meterInfoEquipment.update(queryWrapper1);
+                } else {
                     insertList.add(meterInfoEquipment);
                 }
-
-//
-//                if (listMeterInfoEquipment.contains(meterInfoEquipment)) {
-//                    updateList.add(meterInfoEquipment);
-//                } else {
-//                    insertList.add(meterInfoEquipment);
-//                }
-
             }
         }
-        meterInfoEquipmentService.saveBatch(insertList);
-        meterInfoEquipmentService.updateBatchById(updateList);
+        if (insertList.size() > 0) {
+            meterInfoEquipmentService.saveBatch(insertList);
+        }
+
     }
 
 
@@ -1668,8 +1824,10 @@ class SaveMeterInfoHistoryDayTest {
 
     //风场总
     @Test
-    void saveFJ() {
-        this.saveEquipmentRfdl();
+    void saveFD() {
+//        this.saveEquipmentRfdl();
+        //优化批量插入
+        this.saveEquipmentRfdl_FJ1();
         this.saveBottomCode();
         this.saveCalculatingProjectFDL();
         //优化后
@@ -1688,6 +1846,7 @@ class SaveMeterInfoHistoryDayTest {
     @Test
     void saveGF() {
 //        this.saveEquipmentRfdl_GF();
+        //优化批量插入
         this.saveEquipmentRfdl_GF1();
         this.saveCalculatingNBQFDL();
         this.saveBottomCode_GF();
@@ -1697,15 +1856,15 @@ class SaveMeterInfoHistoryDayTest {
 
     //风场+光伏
     @Test
-    void saveFJ_GF() {
+    void saveGF_FD() {
 
-        this.saveEquipmentRfdl_GF();
+        this.saveEquipmentRfdl_GF1();
         this.saveCalculatingNBQFDL();
         this.saveBottomCode_GF();
         this.saveCalculating_GF();
 
 
-        this.saveEquipmentRfdl();
+        this.saveEquipmentRfdl_FJ1();
         this.saveBottomCode();
         this.saveCalculatingProjectFDL();
         //优化后

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

@@ -1968,8 +1968,8 @@ public class SaveMeterInfoHistoryMonthYear {
 
 
     //所有风机+光伏
-    @XxlJob("sumFD_GF")
-    void sumFD_GF() {
+    @XxlJob("sumGF_FD")
+    void sumGF_FD() {
 
         this.savePowerstationFdl_GF_Month();
         this.savePowerstationFdl_GF_Year();

+ 10 - 3
electricity/meter/src/main/java/com/gyee/gaia/meter/service/SaveMeterInfoHistoryMonthYearTest.java

@@ -645,7 +645,9 @@ public class SaveMeterInfoHistoryMonthYearTest {
             dateTime1 = DateUtil.offsetDay(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).like("code", "%_JDXLFDL_P0"));
+            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .like("code", "%_JDXLFDL_P0"));
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -1122,7 +1124,9 @@ public class SaveMeterInfoHistoryMonthYearTest {
             dateTime1 = DateUtil.offsetDay(startDateTime, i);
 
             //根据每个场站的id,dateTime1,和集电线路总发电量的code拿到产站日发电量(集电线路项目期次侧)
-            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>().eq("date", dateTime1.toLocalDateTime()).like("code", "%_SWDL_P0"));
+            List<MeterInfoCalculating> meterInfoCalculatingDay = meterInfoCalculatingService.list(new QueryWrapper<MeterInfoCalculating>()
+                    .eq("date", dateTime1.toLocalDateTime())
+                    .like("code", "%_SWDL_P0"));
             //MeterInfoCalculating,拿到每个记录的value值并累加到monthValue
             if (meterInfoCalculatingDay.size() > 0) {
                 for (MeterInfoCalculating meterInfoCalculating : meterInfoCalculatingDay) {
@@ -1941,6 +1945,9 @@ public class SaveMeterInfoHistoryMonthYearTest {
     }
 
 
+
+
+
     //所有风机
     @Test
     void sum_FC() {
@@ -1996,7 +2003,7 @@ public class SaveMeterInfoHistoryMonthYearTest {
 
     //所有风机+光伏
     @Test
-    void sumFC_GF() {
+    void sumGF_FD() {
 
         this.savePowerstationFdl_GF_Month();
         this.savePowerstationFdl_GF_Year();

+ 101 - 6
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/GetView.java

@@ -24,7 +24,7 @@ public class GetView {
     @Resource
     MeterInfoBottomcodeServiceImpl meterInfoBottomcodeService;
 
-    public SisViewVO getView(){
+    public SisViewVO getView() {
 
         //获取当天开始时间
         DateTime now = DateTime.now();
@@ -61,7 +61,6 @@ public class GetView {
         sisViewVO.setFcylyxs(oneFCYFDL.getValue().divide(BigDecimal.valueOf(66.4), 2, RoundingMode.HALF_EVEN));
 
 
-
         //总风场年发电量
         MeterInfoCalculating oneFCNFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
                 .eq("date", dateTimeYear.toLocalDateTime())
@@ -79,40 +78,136 @@ public class GetView {
         sisViewVO.setMhsfdl(oneMHSFDL.getValue());
 
         //牛首山山日发电量
-        MeterInfoCalculating oneNSSFDL = meterInfoCalculatingService.getOne(new QueryWrapper< MeterInfoCalculating>()
+        MeterInfoCalculating oneNSSFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
                 .eq("date", dateTimeDay.toLocalDateTime())
                 .eq("code", "DL.NX_GD_NSSF_JDXLFDL_P0")
         );
         sisViewVO.setNssfdl(oneNSSFDL.getValue());
 
         //青山日发电量
-        MeterInfoCalculating oneQSFDL = meterInfoCalculatingService.getOne(new QueryWrapper< MeterInfoCalculating>()
+        MeterInfoCalculating oneQSFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
                 .eq("date", dateTimeDay.toLocalDateTime())
                 .eq("code", "DL.NX_GD_QSF_JDXLFDL_P0")
         );
         sisViewVO.setQsfdl(oneQSFDL.getValue());
 
         //石板泉日发电量
-        MeterInfoCalculating oneSBQFDL = meterInfoCalculatingService.getOne(new QueryWrapper< MeterInfoCalculating>()
+        MeterInfoCalculating oneSBQFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
                 .eq("date", dateTimeDay.toLocalDateTime())
                 .eq("code", "DL.NX_GD_SBQF_JDXLFDL_P0")
         );
         sisViewVO.setSbqfdl(oneSBQFDL.getValue());
 
         //香山日发电量
-        MeterInfoCalculating oneXSFDL = meterInfoCalculatingService.getOne(new QueryWrapper< MeterInfoCalculating>()
+        MeterInfoCalculating oneXSFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
                 .eq("date", dateTimeDay.toLocalDateTime())
                 .eq("code", "DL.NX_GD_XSF_JDXLFDL_P0")
         );
         sisViewVO.setXsfdl(oneXSFDL.getValue());
 
 
+        //光伏
+        //装机容量
+        sisViewVO.setGfzjrl(BigDecimal.valueOf(122.56));
+
+        //总光伏日发电量
+        MeterInfoCalculating oneGFRFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeDay.toLocalDateTime())
+                .eq("code", "DL.NX_GD_GFFDL_DAY")
+        );
+        sisViewVO.setGfrfdl(oneGFRFDL.getValue());
+        ;
+
+        //总光伏日上网电量
+        MeterInfoCalculating oneGFSWDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeDay.toLocalDateTime())
+                .eq("code", "DL.NX_GD_GFSWDL_DAY")
+        );
+        sisViewVO.setGfswdl(oneGFSWDL.getValue());
+
+        //总光伏月发电量
+        MeterInfoCalculating oneGFYFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeMonth.toLocalDateTime())
+                .eq("code", "DL.NX_GD_GFFDL_MONTH")
+        );
+        sisViewVO.setGfyfdl(oneGFYFDL.getValue());
+        //总光伏月利用小时
+        sisViewVO.setGfylyxs(oneGFYFDL.getValue().divide(BigDecimal.valueOf(12.256), 2, RoundingMode.HALF_EVEN));
+
+
+        //总光伏年发电量
+        MeterInfoCalculating oneGFNFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeYear.toLocalDateTime())
+                .eq("code", "DL.NX_GD_GFFDL_YEAR")
+        );
+        sisViewVO.setGfnfdl(oneGFNFDL.getValue());
+        //总光伏年利用小时
+        sisViewVO.setGfnlyxs(oneGFNFDL.getValue().divide(BigDecimal.valueOf(12.156), 2, RoundingMode.HALF_EVEN));
+
+        //埃肯日发电量
+        MeterInfoCalculating oneAKFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeDay.toLocalDateTime())
+                .eq("code", "DL.NX_GD_AK_GFJDXLFDL_PO")
+        );
+        sisViewVO.setAkfdl(oneAKFDL.getValue());
+
+        //大武口日发电量
+        MeterInfoCalculating oneDKWFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeDay.toLocalDateTime())
+                .eq("code", "DL.NX_GD_DWK_GFJDXLFDL_PO")
+        );
+        sisViewVO.setDwkfdl(oneDKWFDL.getValue());
+
+        //海子井日发电量
+        MeterInfoCalculating oneHZJFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeDay.toLocalDateTime())
+                .eq("code", "DL.NX_GD_HZJ_GFJDXLFDL_PO")
+        );
+        sisViewVO.setHzjfdl(oneHZJFDL.getValue());
+
+        //马场湖日发电量
+        MeterInfoCalculating oneMCHFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeDay.toLocalDateTime())
+                .eq("code", "DL.NX_GD_MCH_GFJDXLFDL_PO")
+        );
+        sisViewVO.setMchfdl(oneMCHFDL.getValue());
+
+        //平罗日发电量
+        MeterInfoCalculating onePLFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeDay.toLocalDateTime())
+                .eq("code", "DL.NX_GD_PL_GFJDXLFDL_PO")
+        );
+        sisViewVO.setPlfdl(onePLFDL.getValue());
+
+        //宣和日发电量
+        MeterInfoCalculating oneXHFDL = meterInfoCalculatingService.getOne(new QueryWrapper<MeterInfoCalculating>()
+                .eq("date", dateTimeDay.toLocalDateTime())
+                .eq("code", "DL.NX_GD_XH_GFJDXLFDL_PO")
+        );
+        sisViewVO.setXhfdl(oneXHFDL.getValue());
+
+
+        //总
+        //装机容量
+        sisViewVO.setZjrl(BigDecimal.valueOf(786.56));
 
+        //日发电量
+        sisViewVO.setRfdl(oneFCRFDL.getValue().add(oneGFRFDL.getValue()));
 
+        //月发电量
+        sisViewVO.setYfdl(oneFCYFDL.getValue().add(oneGFYFDL.getValue()));
 
+        //月利用小时
+        sisViewVO.setYlyxs(oneFCYFDL.getValue().add(oneGFYFDL.getValue()).divide(BigDecimal.valueOf(786.56), 2, RoundingMode.HALF_EVEN));
 
+        //年发电量
+        sisViewVO.setNfdl(oneFCNFDL.getValue().add(oneGFNFDL.getValue()));
 
+        //年利用小时
+        sisViewVO.setNlyxs(oneFCNFDL.getValue().add(oneGFNFDL.getValue()).divide(BigDecimal.valueOf(786.56), 2, RoundingMode.HALF_EVEN));
 
+        //日上网电量
+        sisViewVO.setSwdl(oneFCSWDL.getValue().add(oneGFSWDL.getValue()));
 
 
         return sisViewVO;

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

@@ -36,7 +36,8 @@ public class SaveFDL_Day_Month_Year {
 
     void saveLineFdl_Month() {
 
-        List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>().eq("property", "JSD_LINEFDL_MONTH"));
+        List<MeterPoint> meterPointList = meterPointService.list(new QueryWrapper<MeterPoint>()
+                .eq("property", "JSD_LINEFDL_MONTH"));
         for (MeterPoint meterPoint : meterPointList) {
             System.out.println(meterPoint.getName() + ":" + meterPoint);
 

+ 3 - 0
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meter/SaveMeterInfoYesterday.java

@@ -422,6 +422,9 @@ class SaveMeterInfoYesterday {
         }
     }
 
+
+
+
     //调用上面4个,第四个需要3-4次
     public void saveMeterInfoYesterday_FD() {
         this.saveEquipmentRfdl();

+ 47 - 45
electricity/meter/src/main/java/com/gyee/gaia/meter/service/meterInfo/GetMeterInfo.java

@@ -121,34 +121,36 @@ public class GetMeterInfo {
                 .eq(StringUtil.isNotBlank(name), "name", name)
         );
 
-        //所有测点的code加入meterPointNemCodes集合,以便后面根据code批量查询
-        List<String> meterPointNemCodes = new ArrayList<>();
-        for (MeterPoint meterPoint : meterPoints) {
-            meterPointNemCodes.add(meterPoint.getNemCode());
-        }
+        if (meterPoints.size() > 0) {
+            //所有测点的code加入meterPointNemCodes集合,以便后面根据code批量查询
+            List<String> meterPointNemCodes = new ArrayList<>();
+            for (MeterPoint meterPoint : meterPoints) {
+                meterPointNemCodes.add(meterPoint.getNemCode());
+            }
 
-        //所有查询日期加入dateTimes 集合,以便后面根据时间批量查询
-        List<DateTime> dateTimes = new ArrayList<>();
-        for (int i = 0; i <= betweenDays; i++) {
-            DateTime dateTime4 = DateUtil.offsetDay(startDateTime, i);
-            dateTimes.add(dateTime4);
-        }
+            //所有查询日期加入dateTimes 集合,以便后面根据时间批量查询
+            List<DateTime> dateTimes = new ArrayList<>();
+            for (int i = 0; i <= betweenDays; i++) {
+                DateTime dateTime4 = DateUtil.offsetDay(startDateTime, i);
+                dateTimes.add(dateTime4);
+            }
 
-        //条件构造器,根据时间集合和code集合批量查询
-        List<MeterInfoBottomcode> meterInfoBottomcodes = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>()
-                .in("start_time", dateTimes)
-                .in("code", meterPointNemCodes)
-        );
+            //条件构造器,根据时间集合和code集合批量查询
+            List<MeterInfoBottomcode> meterInfoBottomcodes = meterInfoBottomcodeService.list(new QueryWrapper<MeterInfoBottomcode>()
+                    .in("start_time", dateTimes)
+                    .in("code", meterPointNemCodes)
+            );
 
-        //遍历查询到的数据,赋值VO对象,添加入VO对象集合,返回
-        for (MeterInfoBottomcode meterInfoBottomcode : meterInfoBottomcodes) {
-            MeterInfoVo meterInfoVo = new MeterInfoVo();
-            meterInfoVo.setDate(new DateTime(meterInfoBottomcode.getStartTime()));
-            meterInfoVo.setName(meterInfoBottomcode.getName());
-            meterInfoVo.setStartCode(meterInfoBottomcode.getStartValue());
-            meterInfoVo.setEndCode(meterInfoBottomcode.getEndValue());
-            meterInfoVo.setRdl(meterInfoBottomcode.getDayValue());
-            meterInfoVos.add(meterInfoVo);
+            //遍历查询到的数据,赋值VO对象,添加入VO对象集合,返回
+            for (MeterInfoBottomcode meterInfoBottomcode : meterInfoBottomcodes) {
+                MeterInfoVo meterInfoVo = new MeterInfoVo();
+                meterInfoVo.setDate(new DateTime(meterInfoBottomcode.getStartTime()));
+                meterInfoVo.setName(meterInfoBottomcode.getName());
+                meterInfoVo.setStartCode(meterInfoBottomcode.getStartValue());
+                meterInfoVo.setEndCode(meterInfoBottomcode.getEndValue());
+                meterInfoVo.setRdl(meterInfoBottomcode.getDayValue());
+                meterInfoVos.add(meterInfoVo);
+            }
         }
         return meterInfoVos;
     }
@@ -175,12 +177,12 @@ public class GetMeterInfo {
 
         //条件构造器查询
         List<MeterPoint> meterPoints = meterPointService.list(new QueryWrapper<MeterPoint>()
-                .eq("windpowerstation_id", windId)
+                        .eq("windpowerstation_id", windId)
 //                .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)
+                        .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)
         );
 
         //code集合,以便批量查询
@@ -461,12 +463,12 @@ public class GetMeterInfo {
         ArrayList<MeterInfoVo> meterInfoVos = new ArrayList<>();
         //条件构造器查询计算点
         List<MeterPoint> meterPoints = meterPointService.list(new QueryWrapper<MeterPoint>()
-                .eq("windpowerstation_id", windId)
-                .in("property", "JSD", "JSD_QCFDL","JSD_NBQFDL","JSD_GF")
+                        .eq("windpowerstation_id", windId)
+                        .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)
+                        .eq(StringUtil.isNotBlank(meterType), "meter_type", meterType)
+                        .eq(StringUtil.isNotBlank(meterClass), "meter_class", meterClass)
+                        .eq(StringUtil.isNotBlank(name), "name", name)
 
         );
 
@@ -512,7 +514,7 @@ public class GetMeterInfo {
 
         //遍历计算点集合,如果meter_type中包含率,则取这个测点的nem_code和公式formula,解析公式中的nem_code
         for (MeterPoint meterPoint : meterPoints) {
-            if (meterPoint.getMeterType().endsWith("率")){
+            if (meterPoint.getMeterType().endsWith("率")) {
 
                 String nemCode = meterPoint.getNemCode();
 
@@ -534,8 +536,8 @@ public class GetMeterInfo {
                     System.out.println("替换后的点code:" + meterPointCode_);
 
                     //拿公式中的nem_code在meterInfoVos集合中取出VO数据点
-                    for (MeterInfoVo meterInfoVo: meterInfoVos) {
-                        if( meterInfoVo.getNemCode().equals(meterPointCode)){
+                    for (MeterInfoVo meterInfoVo : meterInfoVos) {
+                        if (meterInfoVo.getNemCode().equals(meterPointCode)) {
                             map.put(meterPointCode_, meterInfoVo.getRdl());
                         }
                     }
@@ -544,8 +546,8 @@ public class GetMeterInfo {
                 //公式重新计算率
                 BigDecimal bigDecimal1 = (BigDecimal) ScriptShell.parseExpr(formula2, map);
 
-                for (MeterInfoVo meterInfoVo: meterInfoVos) {
-                    if(meterInfoVo.getNemCode().equals(nemCode)){
+                for (MeterInfoVo meterInfoVo : meterInfoVos) {
+                    if (meterInfoVo.getNemCode().equals(nemCode)) {
                         meterInfoVo.setRdl(bigDecimal1);
                         break;
                     }
@@ -743,12 +745,12 @@ public class GetMeterInfo {
         ArrayList<MeterInfoVo> meterInfoVos = new ArrayList<>();
         //条件构造器查询计算点
         List<MeterPoint> meterPoints = meterPointService.list(new QueryWrapper<MeterPoint>()
-                .eq("windpowerstation_id", windId)
+                        .eq("windpowerstation_id", windId)
 //                .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)
+                        .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)
 
         );