From 7df4fcb8c640fefac7bdd406cbd10ebb5e8388b9 Mon Sep 17 00:00:00 2001
From: liriming <1343021927@qq.com>
Date: 星期四, 26 六月 2025 17:06:04 +0800
Subject: [PATCH] 功率因数超限报警原因溯源修改

---
 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java |  210 +++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 166 insertions(+), 44 deletions(-)

diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
index bea2bfd..5211007 100644
--- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
+++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -16,6 +16,7 @@
 import com.iailab.module.ansteel.api.vo.PowerMaxDemandMainPageReqVO;
 import com.iailab.module.ansteel.common.constant.CommonConstant;
 import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum;
+import com.iailab.module.ansteel.common.utils.CalendarUtil;
 import com.iailab.module.ansteel.common.utils.DecimalUtil;
 import com.iailab.module.ansteel.common.utils.PowerUtil;
 import com.iailab.module.ansteel.power.entity.*;
@@ -302,6 +303,13 @@
             params.put("groupName", entity.getNodeName());
         }
         list = powerNetDropdownService.list(params);
+
+        // 追加公共 2025-06-18
+        Map<String, Object> paramsCom = new HashMap<>();
+        paramsCom.put("groupName", "COMMON1");
+        List<PowerNetDropdownEntity> comList = powerNetDropdownService.list(paramsCom);
+        list.addAll(comList);
+
         List<String> points = list.stream().map(item -> {
             return item.getCurCos();
         }).collect(Collectors.toList());
@@ -706,6 +714,8 @@
                 if (maxdemandMainEntity != null) {
                     demandDTO.setMaxDemand(maxdemandMainEntity.getMaxDemand());
                     demandDTO.setOccurTime(maxdemandMainEntity.getOccurTime());
+                } else {
+                    demandDTO.setMaxDemand(BigDecimal.ZERO);
                 }
             }
             result.add(demandDTO);
@@ -728,9 +738,29 @@
             log.info("PowerDemandEntity is null");
             return success(result);
         }
+        List<PowerNetDropdownEntity> list = new ArrayList<>();
         Map<String, Object> params0 = new HashMap<>();
         params0.put("groupName", entity.getName());
-        List<PowerNetDropdownEntity> list = powerNetDropdownService.list(params0);
+        List<PowerNetDropdownEntity> list0 = powerNetDropdownService.list(params0);
+        if (!CollectionUtils.isEmpty(list0)) {
+            list.addAll(list0);
+        }
+
+        // 所有关口进线的二级界面(表格/曲线)均增加(CCPP/135/CDQ/TRT/余热)的选项。
+        Map<String, Object> params1 = new HashMap<>();
+        params1.put("groupName", "COMMON1");
+        List<PowerNetDropdownEntity> list1 = powerNetDropdownService.list(params1);
+        if (!CollectionUtils.isEmpty(list1)) {
+            list.addAll(list1);
+        }
+
+        Map<String, Object> params2 = new HashMap<>();
+        params2.put("groupName", "COMMON2");
+        List<PowerNetDropdownEntity> list2 = powerNetDropdownService.list(params2);
+        if (!CollectionUtils.isEmpty(list2)) {
+            list.addAll(list2);
+        }
+
         List<String> points = list.stream().map(item -> {
             return item.getCurCos();
         }).collect(Collectors.toList());
@@ -1137,11 +1167,13 @@
     }
 
     @PostMapping("/net-factor/export-history")
-    @Operation(summary = "功率因数-电网拓扑功率历史(多code)")
+    @Operation(summary = "功率因数-电网拓扑功率历史导出(多code)")
     public void exportPowerHistoryList(HttpServletResponse response, HttpServletRequest
             request, @RequestBody PowerNetFactorHisReqDTO dto) throws IOException {
+        log.info("exportPowerHistoryList开始");
+        String firstCol = "时间";
         List<String> column = new ArrayList<>();
-        column.add("时间");
+        column.add(firstCol);
         List<List<Object>> exportData = new ArrayList<>();
 
         List<String> nodeCodeList = dto.getNodeCodeList();
@@ -1183,19 +1215,36 @@
             String[] pointNoArr = new String[2];
             switch (queryType.toUpperCase()) {
                 case "P":
+                    if (StringUtils.isBlank(powerNetFactorQuery.getCurP())) {
+                        continue;
+                    }
                     pointNo = powerNetFactorQuery.getCurP();
                     break;
                 case "Q":
+                    if (StringUtils.isBlank(powerNetFactorQuery.getCurQ())) {
+                        continue;
+                    }
                     pointNo = powerNetFactorQuery.getCurQ();
                     break;
                 case "COS":
+                    if (StringUtils.isBlank(powerNetFactorQuery.getCurCos())) {
+                        continue;
+                    }
                     pointNo = powerNetFactorQuery.getCurCos();
                     break;
                 case "DAYCOS":
+                    if (powerNetFactorEntity == null ||
+                            StringUtils.isBlank(powerNetFactorEntity.getPDay()) || StringUtils.isBlank(powerNetFactorEntity.getQDay())) {
+                        continue;
+                    }
                     pointNoArr[0] = powerNetFactorEntity.getPDay();
                     pointNoArr[1] = powerNetFactorEntity.getQDay();
                     break;
                 case "MONTHCOS":
+                    if (powerNetFactorEntity == null ||
+                            StringUtils.isBlank(powerNetFactorEntity.getPMon()) || StringUtils.isBlank(powerNetFactorEntity.getQMon())) {
+                        continue;
+                    }
                     pointNoArr[0] = powerNetFactorEntity.getPMon();
                     pointNoArr[1] = powerNetFactorEntity.getQMon();
                     break;
@@ -1209,6 +1258,7 @@
             Map<String, Object> dataMap = new HashMap<>();
 
             if (StringUtils.isNotBlank(pointNo)) {
+                log.info("查询功率");
                 apiPointValueQueryDTO.setPointNo(pointNo);
                 List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
                 for (ApiPointValueDTO pv : chartData) {
@@ -1217,6 +1267,7 @@
                     dataMap.put(key, val);
                 }
             } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) {
+                log.info("查询累计功率");
                 apiPointValueQueryDTO.setPointNo(pointNoArr[0]);
                 List<ApiPointValueDTO> chartDataP = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
                 Map<String, Double> dataMapP = new HashMap<>();
@@ -1240,14 +1291,25 @@
             }
             dataAll.put(powerNetFactorQuery.getNodeName(), dataMap);
         }
-
+        log.info("column=" + JSONArray.toJSONString(column));
         for (String cate : categories) {
             List<Object> row = new ArrayList<>();
             for (String col : column) {
-                row.add(dataAll.get(col).get(cate));
+                if (firstCol.equals(col)) {
+                    row.add(cate);
+                } else if (dataAll.get(col) == null) {
+                    log.info(col + " is null");
+                    row.add("");
+                } else if (dataAll.get(col).get(cate) == null) {
+                    log.info(col + cate + " is null");
+                    row.add("");
+                } else {
+                    row.add(dataAll.get(col).get(cate));
+                }
             }
+            exportData.add(row);
         }
-
+        log.info("exportData.size=" + exportData.size());
         ExcelUtils.write(response,  "历史.xlsx", "历史数据", column, exportData);
     }
 
@@ -1295,19 +1357,36 @@
             String[] pointNoArr = new String[2];
             switch (queryType.toUpperCase()) {
                 case "P":
+                    if (StringUtils.isBlank(powerNetFactorQuery.getCurP())) {
+                        continue;
+                    }
                     pointNo = powerNetFactorQuery.getCurP();
                     break;
                 case "Q":
+                    if (StringUtils.isBlank(powerNetFactorQuery.getCurQ())) {
+                        continue;
+                    }
                     pointNo = powerNetFactorQuery.getCurQ();
                     break;
                 case "COS":
+                    if (StringUtils.isBlank(powerNetFactorQuery.getCurCos())) {
+                        continue;
+                    }
                     pointNo = powerNetFactorQuery.getCurCos();
                     break;
                 case "DAYCOS":
+                    if (powerNetFactorEntity == null ||
+                            StringUtils.isBlank(powerNetFactorEntity.getPDay()) || StringUtils.isBlank(powerNetFactorEntity.getQDay())) {
+                        continue;
+                    }
                     pointNoArr[0] = powerNetFactorEntity.getPDay();
                     pointNoArr[1] = powerNetFactorEntity.getQDay();
                     break;
                 case "MONTHCOS":
+                    if (powerNetFactorEntity == null ||
+                            StringUtils.isBlank(powerNetFactorEntity.getPMon()) || StringUtils.isBlank(powerNetFactorEntity.getQMon())) {
+                        continue;
+                    }
                     pointNoArr[0] = powerNetFactorEntity.getPMon();
                     pointNoArr[1] = powerNetFactorEntity.getQMon();
                     break;
@@ -1320,6 +1399,11 @@
             apiPointValueQueryDTO.setStart(start0);
             List<Object[]> dataList = new ArrayList<>();
             List<Double> valueList = new ArrayList<>();
+            double max = 0;
+            double min = 0;
+            double avg = 0;
+            String maxTime = "";
+            String minTime = "";
 
             if (StringUtils.isNotBlank(pointNo)) {
                 apiPointValueQueryDTO.setPointNo(pointNo);
@@ -1332,15 +1416,9 @@
                     valueList.add(pv.getV());
                 }
 
+                // 返送累计
                 double fsl = 0;
-                double max = 0;
-                double min = 0;
-                double avg = 0;
                 if (!CollectionUtils.isEmpty(valueList)) {
-                    max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble();
-                    min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble();
-                    avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
-
                     if (powerNetFactorQuery.getCurFlag() != null && powerNetFactorQuery.getCurFlag().intValue() != 0) {
                         for ( Double val : valueList) {
                             if (new BigDecimal(val).compareTo(BigDecimal.ZERO) != powerNetFactorQuery.getCurFlag()) {
@@ -1351,18 +1429,7 @@
                         }
                     }
                 }
-
-                powerHistoryDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP));
-                powerHistoryDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP));
-                powerHistoryDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP));
-
-                // 当查询为P, Q,且有返送flag时 计算 返送累计
-                if (("P".equals(queryType.toUpperCase()) || "Q".equals(queryType.toUpperCase())) &&
-                        powerNetFactorQuery.getCurFlag() != null &&
-                        powerNetFactorQuery.getCurFlag().intValue() != 0) {
-                    powerHistoryDTO.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP));
-                }
-
+                powerHistoryDTO.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP));
             } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) {
                 apiPointValueQueryDTO.setPointNo(pointNoArr[0]);
                 List<ApiPointValueDTO> chartDataP = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
@@ -1380,26 +1447,42 @@
 
                 for (String cate : categories) {
                     Double cos = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate));
+                    if (cos == null) {
+                        continue;
+                    }
                     Object[] data = new Object[2];
                     data[0] = cate;
-                    data[1] = cos == null ? 0 : new BigDecimal(cos).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    data[1] = cos;
                     dataList.add(data);
-                    if (cos != null) {
-                        valueList.add(cos);
-                    }
-                    double max = 0;
-                    double min = 0;
-                    double avg = 0;
-                    if (!CollectionUtils.isEmpty(valueList)) {
-                        max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble();
-                        min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble();
-                        avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
-                    }
-                    powerHistoryDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP));
-                    powerHistoryDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP));
-                    powerHistoryDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP));
+                    valueList.add(cos);
                 }
             }
+
+            if (!CollectionUtils.isEmpty(valueList)) {
+                // max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble();
+                // min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble();
+                avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
+                max = valueList.get(0).doubleValue();
+                min = valueList.get(0).doubleValue();
+                for (Object[] dataItem : dataList) {
+                    String time = (String) dataItem[0];
+                    double value = (double)dataItem[1];
+                    if (value > max) {
+                        max = value;
+                        maxTime = time;
+                    }
+                    if (value < min) {
+                        min = value;
+                        minTime = time;
+                    }
+                }
+            }
+
+            powerHistoryDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP));
+            powerHistoryDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP));
+            powerHistoryDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP));
+            powerHistoryDTO.setMaxTime(maxTime);
+            powerHistoryDTO.setMinTime(minTime);
             powerHistoryDTO.setDataList(dataList);
             result.put(nodeCode, powerHistoryDTO);
         }
@@ -1563,6 +1646,7 @@
                     throw new IllegalArgumentException("不支持的queryType: " + queryType);
             }
 
+
             // 查询历史数据
             ApiPointValueQueryDTO query = new ApiPointValueQueryDTO();
             query.setPointNo(pointNo);
@@ -1577,10 +1661,13 @@
                     })
                     .collect(Collectors.toList());
 
+            List<Double> valueList = chartData.stream().map(pv -> {
+                return pv.getV();
+            }).collect(Collectors.toList());
             powerHistoryDTO.setDataList(dataList);
 
             //查询月最大最小值
-            ApiPointValueQueryDTO apiPointValueQueryDTO1 = new ApiPointValueQueryDTO();
+            /*ApiPointValueQueryDTO apiPointValueQueryDTO1 = new ApiPointValueQueryDTO();
             apiPointValueQueryDTO1.setStart(start1);
             apiPointValueQueryDTO1.setEnd(new Date());
             apiPointValueQueryDTO1.setPointNo(pointNo);
@@ -1591,7 +1678,40 @@
             }
             if (minV != null && minV.containsKey(pointNo)) {
                 powerHistoryDTO.setMin(new BigDecimal(minV.get(pointNo).toString()));
+            }*/
+
+
+            double max = 0;
+            double min = 0;
+            double avg = 0;
+            String maxTime = "";
+            String minTime = "";
+            if (!CollectionUtils.isEmpty(valueList)) {
+                // max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble();
+                // min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble();
+                avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
+                max = valueList.get(0).doubleValue();
+                min = valueList.get(0).doubleValue();
+                for (Object[] dataItem : dataList) {
+                    String time = (String) dataItem[0];
+                    double value = (double)dataItem[1];
+                    if (value > max) {
+                        max = value;
+                        maxTime = time;
+                    }
+                    if (value < min) {
+                        min = value;
+                        minTime = time;
+                    }
+                }
             }
+
+            powerHistoryDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP));
+            powerHistoryDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP));
+            powerHistoryDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP));
+            powerHistoryDTO.setMaxTime(maxTime);
+            powerHistoryDTO.setMinTime(minTime);
+            powerHistoryDTO.setDataList(dataList);
 
             result.put(code, powerHistoryDTO);
         }
@@ -1640,6 +1760,11 @@
             log.info("code is blank");
             return error(GlobalErrorCodeConstants.BAD_REQUEST);
         }
+        // 默认只展示当月
+        if(reqVO.getStartTime() == null) {
+            reqVO.setStartTime(CalendarUtil.getMonthFirstDay());
+        }
+
         PageResult<PowerMaxdemandMainEntity> page = powerMaxDemandMainService.page(reqVO);
         PageResult<PowerMaxDemandMainDTO> result = BeanUtils.toBean(page, PowerMaxDemandMainDTO.class);
         result.getList().forEach(dto0 -> {
@@ -1716,9 +1841,6 @@
         calendar.set(Calendar.SECOND, 0);
         calendar.set(Calendar.MINUTE, 0);
 
-        if (!CollectionUtils.isEmpty(powerFactorReqVO.getContentList())) {
-
-        }
         MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
         dto.setScheduleTime(calendar.getTime());
         dto.setScheduleCode("AnsteelOffPowerAC");

--
Gitblit v1.9.3