鞍钢鲅鱼圈能源管控系统后端代码
25bf9a00a2b369bd19ba0fdeed241b3158293700..3fa4371a1b425963c2a0a7f5e3fee08749e5b148
10 天以前 潘志宝
折线图时间格式华
3fa437 对比 | 目录
10 天以前 潘志宝
最大需量发生记录分页 默认展示当月
2381ac 对比 | 目录
10 天以前 潘志宝
实测需量、有功功率的二级界面也增加最大值(发生时间)、最小值(发生时间)、平均值。
b6300b 对比 | 目录
10 天以前 潘志宝
所有关口进线的二级界面(表格/曲线)均增加(CCPP/135/CDQ/TRT/余热)的选项。
0bdd92 对比 | 目录
10 天以前 潘志宝
所有关口进线的二级界面(表格/曲线)均增加(CCPP/135/CDQ/TRT/余热)的选项。
e077f3 对比 | 目录
10 天以前 潘志宝
电网拓扑下拉列表 追加公共
f2c577 对比 | 目录
10 天以前 潘志宝
Merge remote-tracking branch 'origin/master'
3e25a8 对比 | 目录
10 天以前 潘志宝
电网拓扑下拉列表 追加公共
c2d8a1 对比 | 目录
10 天以前 dengzedong
执行天粒度调度方案定时任务
3f40de 对比 | 目录
10 天以前 潘志宝
功率历史追加最值时间
0f45ad 对比 | 目录
10 天以前 潘志宝
t_sync_log
dc7528 对比 | 目录
10 天以前 潘志宝
电网拓扑功率历史,增加最值发生时间
2815d0 对比 | 目录
10 天以前 潘志宝
导出实时数据
f1f8ae 对比 | 目录
10 天以前 潘志宝
导出实时数据
567cc0 对比 | 目录
10 天以前 潘志宝
电网拓扑功率历史导出(多code)
b4b118 对比 | 目录
10 天以前 潘志宝
月报表导出接口
8f10bf 对比 | 目录
10 天以前 潘志宝
Merge remote-tracking branch 'origin/master'
7dd07a 对比 | 目录
10 天以前 潘志宝
月报表导出接口
61777d 对比 | 目录
10 天以前 dengzedong
文档更新
4c3ff1 对比 | 目录
10 天以前 潘志宝
实时数据导出接口
169b88 对比 | 目录
已删除1个文件
已修改13个文件
已添加9个文件
751 ■■■■■ 文件已修改
ansteel-biz/db/mysql.sql 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/FileController.java 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerHistoryDTO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataChartRespVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataViewDTO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataViewSimpleDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/DataServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportCosVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportPqVO.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PreDataByOutReqVO.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/CalendarUtil.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/PowerUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/ems/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/security/config/SecurityConfiguration.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunDayScheduleModuleTask.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/dao/SyncLogDao.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/entity/SyncLogEntity.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/service/SyncLogService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/service/impl/SyncLogServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/鞍钢数据接口文档_master.doc 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/db/mysql.sql
@@ -976,20 +976,30 @@
-- xiz135机组指标数据配置表
-- ----------------------------
DROP TABLE IF EXISTS `t_plant_index_conf`;
CREATE TABLE `t_plant_index_conf` (
                                      `id` varchar(36) NOT NULL COMMENT 'id',
                                      `business_type` varchar(20) DEFAULT NULL COMMENT '业务类别',
                                      `business_desc` varchar(20) DEFAULT NULL COMMENT '业务描述',
                                      `ind_code` varchar(20) DEFAULT NULL COMMENT '指标编码',
                                      `ind_name` varchar(20) DEFAULT NULL COMMENT '指标名称',
                                      `ind_unit` varchar(20) DEFAULT NULL COMMENT '指标单位',
                                      `ind_avg` varchar(20)  DEFAULT NULL COMMENT '历史平均',
                                      `ind_theory` varchar(20) DEFAULT NULL COMMENT '理论值',
                                      `ind_optimal` varchar(20) DEFAULT NULL COMMENT '最优值',
                                      `ind_real` varchar(20) DEFAULT NULL COMMENT '实时值',
                                      `ind_deviation_value` varchar(20) DEFAULT NULL COMMENT '偏差值',
                                      `ind_deviation_rate` varchar(20) DEFAULT NULL COMMENT '偏差率',
                                      `ind_previous` varchar(20) DEFAULT NULL COMMENT '上班数据',
                                      `sort` int DEFAULT NULL COMMENT '排序',
                                      PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='135机组指标数据配置表';
CREATE TABLE `t_plant_index_conf`
(
    `id`                  varchar(36) NOT NULL COMMENT 'id',
    `business_type`       varchar(20) DEFAULT NULL COMMENT '业务类别',
    `business_desc`       varchar(20) DEFAULT NULL COMMENT '业务描述',
    `ind_code`            varchar(20) DEFAULT NULL COMMENT '指标编码',
    `ind_name`            varchar(20) DEFAULT NULL COMMENT '指标名称',
    `ind_unit`            varchar(20) DEFAULT NULL COMMENT '指标单位',
    `ind_avg`             varchar(20) DEFAULT NULL COMMENT '历史平均',
    `ind_theory`          varchar(20) DEFAULT NULL COMMENT '理论值',
    `ind_optimal`         varchar(20) DEFAULT NULL COMMENT '最优值',
    `ind_real`            varchar(20) DEFAULT NULL COMMENT '实时值',
    `ind_deviation_value` varchar(20) DEFAULT NULL COMMENT '偏差值',
    `ind_deviation_rate`  varchar(20) DEFAULT NULL COMMENT '偏差率',
    `ind_previous`        varchar(20) DEFAULT NULL COMMENT '上班数据',
    `sort`                int         DEFAULT NULL COMMENT '排序',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='135机组指标数据配置表';
CREATE TABLE `t_sync_log`
(
    `id`         varchar(36) NOT NULL COMMENT 'id',
    `table_name` varchar(50) NULL DEFAULT NULL COMMENT '表名称',
    `remark`     varchar(50) NULL DEFAULT NULL COMMENT '备注',
    create_date  datetime COMMENT '创建时间',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '同步日志';
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/FileController.java
文件已删除
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());
@@ -728,9 +736,20 @@
            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);
        }
        Map<String, Object> params1 = new HashMap<>();
        params1.put("groupName", "COMMON1");
        List<PowerNetDropdownEntity> list1 = powerNetDropdownService.list(params1);
        if (!CollectionUtils.isEmpty(list1)) {
            list.addAll(list1);
        }
        List<String> points = list.stream().map(item -> {
            return item.getCurCos();
        }).collect(Collectors.toList());
@@ -1136,6 +1155,136 @@
        return success(result);
    }
    @PostMapping("/net-factor/export-history")
    @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(firstCol);
        List<List<Object>> exportData = new ArrayList<>();
        List<String> nodeCodeList = dto.getNodeCodeList();
        if (CollectionUtils.isEmpty(nodeCodeList)) {
            return;
        }
        String queryType = dto.getQueryType();
        if (StringUtils.isBlank(queryType)) {
            return;
        }
        Calendar calendar0 = Calendar.getInstance();
        calendar0.set(Calendar.MILLISECOND, 0);
        calendar0.set(Calendar.SECOND, 0);
        Date end0 = dto.getEndTime() == null ? calendar0.getTime() : dto.getEndTime();
        calendar0.set(Calendar.MINUTE, 0);
        calendar0.set(Calendar.HOUR_OF_DAY, 0);
        Date start0 = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime();
        Map<String, Map<String, Object>> dataAll = new HashMap<>();
        List<String> categories = DateUtils.getTimeScale(start0, end0, 60);
        for (String nodeCode : nodeCodeList) {
            PowerNetFactorQuery powerNetFactorQuery = null;
            PowerNetFactorEntity powerNetFactorEntity = powerNetFactorService.getByNodeCode(nodeCode);
            PowerNetDropdownEntity powerNetDropdownEntity = powerNetDropdownService.getByNodeCode(nodeCode);
            if (powerNetFactorEntity != null) {
                powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetFactorEntity, PowerNetFactorQuery.class);
            } else if (powerNetDropdownEntity != null) {
                powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetDropdownEntity, PowerNetFactorQuery.class);
            }
            if (powerNetFactorQuery == null) {
                log.info("powerNetFactor is null");
                continue;
            }
            column.add(powerNetFactorQuery.getNodeName());
            log.info("开始查询,");
            ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO();
            String pointNo = "";
            String[] pointNoArr = new String[2];
            switch (queryType.toUpperCase()) {
                case "P":
                    pointNo = powerNetFactorQuery.getCurP();
                    break;
                case "Q":
                    pointNo = powerNetFactorQuery.getCurQ();
                    break;
                case "COS":
                    pointNo = powerNetFactorQuery.getCurCos();
                    break;
                case "DAYCOS":
                    pointNoArr[0] = powerNetFactorEntity.getPDay();
                    pointNoArr[1] = powerNetFactorEntity.getQDay();
                    break;
                case "MONTHCOS":
                    pointNoArr[0] = powerNetFactorEntity.getPMon();
                    pointNoArr[1] = powerNetFactorEntity.getQMon();
                    break;
                default:
                    break;
            }
            //查询图表
            apiPointValueQueryDTO.setEnd(end0);
            apiPointValueQueryDTO.setStart(start0);
            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) {
                    String key = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
                    Object val = pv.getV();
                    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<>();
                for (ApiPointValueDTO pv : chartDataP) {
                    dataMapP.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV());
                }
                apiPointValueQueryDTO.setPointNo(pointNoArr[1]);
                List<ApiPointValueDTO> chartDataQ = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
                Map<String, Double> dataMapQ = new HashMap<>();
                for (ApiPointValueDTO pv : chartDataQ) {
                    dataMapQ.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV());
                }
                for (String cate : categories) {
                    Double cos = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate));
                    Object val = cos == null ? 0 : new BigDecimal(cos).setScale(2, BigDecimal.ROUND_HALF_UP);
                    dataMap.put(cate, val);
                }
            }
            dataAll.put(powerNetFactorQuery.getNodeName(), dataMap);
        }
        log.info("column=" + JSONArray.toJSONString(column));
        for (String cate : categories) {
            List<Object> row = new ArrayList<>();
            for (String col : column) {
                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);
    }
    @PostMapping("/net-factor/history-list")
    @Operation(summary = "功率因数-电网拓扑功率历史(多code)")
    public CommonResult<LinkedHashMap<String, PowerHistoryDTO>> getPowerHistoryList(@RequestBody PowerNetFactorHisReqDTO dto) {
@@ -1204,9 +1353,14 @@
            apiPointValueQueryDTO.setEnd(end0);
            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)) {
                List<Double> valueList = new ArrayList<>();
                apiPointValueQueryDTO.setPointNo(pointNo);
                List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
                for (ApiPointValueDTO pv : chartData) {
@@ -1217,15 +1371,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()) {
@@ -1236,21 +1384,60 @@
                        }
                    }
                }
                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);
                Map<String, Double> dataMapP = new HashMap<>();
                for (ApiPointValueDTO pv : chartDataP) {
                    dataMapP.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV());
                }
            } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) {
                apiPointValueQueryDTO.setPointNo(pointNoArr[1]);
                List<ApiPointValueDTO> chartDataQ = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
                Map<String, Double> dataMapQ = new HashMap<>();
                for (ApiPointValueDTO pv : chartDataQ) {
                    dataMapQ.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV());
                }
                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;
                    dataList.add(data);
                    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);
        }
@@ -1414,6 +1601,7 @@
                    throw new IllegalArgumentException("不支持的queryType: " + queryType);
            }
            // 查询历史数据
            ApiPointValueQueryDTO query = new ApiPointValueQueryDTO();
            query.setPointNo(pointNo);
@@ -1428,10 +1616,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);
@@ -1442,7 +1633,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);
        }
@@ -1491,6 +1715,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 -> {
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerHistoryDTO.java
@@ -33,4 +33,10 @@
    @Schema(description = "返送累计")
    private BigDecimal fsl;
    @Schema(description = "最大值发生时间")
    private String maxTime;
    @Schema(description = "最小值发生时间")
    private String minTime;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java
@@ -14,6 +14,11 @@
    private static final long serialVersionUID = 1L;
    /**
     * 节点名称
     */
    private String nodeName;
    /**
     * 当前有功
     */
    private String curP;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataChartRespVO.java
@@ -1,7 +1,6 @@
package com.iailab.module.ansteel.api.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.iailab.module.model.api.mcs.dto.PreDataViewRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -19,8 +18,8 @@
    private static final long serialVersionUID = 1L;
    @Schema(description = "预测时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date predictTime;
    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private String predictTime;
    @Schema(description = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataViewDTO.java
@@ -35,8 +35,7 @@
    private String resultName;
    @Schema(description = "预测时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date predictTime;
    private String predictTime;
    @Schema(description = "量程上限")
    private BigDecimal rangeH;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PreDataViewSimpleDTO.java
@@ -23,8 +23,8 @@
    private String itemName;
    @Schema(description = "预测时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date predictTime;
    // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private String predictTime;
    @Schema(description = "当时预测值")
    private List<Object[]> curData;
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/service/impl/DataServiceImpl.java
@@ -175,7 +175,7 @@
        if (predictItem == null || predictItem.getLastTime() == null) {
            return null;
        }
        String timeFormat = StringUtils.isBlank(reqVO.getTimeFormat()) ? DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND : reqVO.getTimeFormat();
        int lengthLeft = tMap.get(CommonConstant.LENGTH_LEFT) == null ? predictItem.getPredictLength() : new BigDecimal(tMap.get(CommonConstant.LENGTH_LEFT)).intValue();
        int lengthRight = tMap.get(CommonConstant.LENGTH_RIGHT) == null ? predictItem.getPredictLength() : new BigDecimal(tMap.get(CommonConstant.LENGTH_RIGHT)).intValue();
        String trendsDataH = tMap.get(CommonConstant.TRENDSDATA_H) == null ? null : tMap.get(CommonConstant.TRENDSDATA_H);
@@ -186,10 +186,24 @@
        Date[] timeArray = calResultTime(predictItem, reqVO.getStartTime(), reqVO.getEndTime(), lengthLeft, lengthRight);
        Date startTime = timeArray[1];
        Date endTime = timeArray[2];
        String timeFormat = null;
        if (StringUtils.isNotBlank(reqVO.getTimeFormat())) {
            timeFormat = reqVO.getTimeFormat();
        } else if ((endTime.getTime() - startTime.getTime()) < 1000 * 60 * 60 * 24 ) {
            // 时间范围短,默认使用短时间格式 "HH:mm"
            timeFormat = DateUtils.FORMAT_SIMPLE_TIME;
        } else {
            timeFormat = DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
        }
        final String finalTimeFormat = timeFormat;
        reqVO.setTimeFormat(finalTimeFormat);
        PreDataSingleChartRespVO resultOld = mcsApi.getPreDataSingleChart(reqVO);
        PreDataChartRespVO result = ConvertUtils.sourceToTarget(resultOld, PreDataChartRespVO.class);
        result.setPredictTime(DateUtils.format(resultOld.getPredictTime(), finalTimeFormat));
        PreDataViewDTO preDataView = ConvertUtils.sourceToTarget(resultOld.getDataView(), PreDataViewDTO.class);
        preDataView.setPredictTime(DateUtils.format(resultOld.getDataView().getPredictTime(), finalTimeFormat));
        if (StringUtils.isNotBlank(trendsDataH)) {
            // 动态上限
            ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO();
@@ -200,7 +214,7 @@
            List<Object[]> newList = new ArrayList<>();
            trendsDataHList.forEach(item -> {
                Object[] dataItem = new Object[2];
                dataItem[0] = DateUtils.format(item.getT(), "yyyy-MM-dd HH:mm:00");
                dataItem[0] = DateUtils.format(item.getT(), finalTimeFormat);
                dataItem[1] = item.getV();
                newList.add(dataItem);
            });
@@ -216,7 +230,7 @@
            List<Object[]> newList = new ArrayList<>();
            trendsDataLList.forEach(item -> {
                Object[] dataItem = new Object[2];
                dataItem[0] = DateUtils.format(item.getT(), "yyyy-MM-dd HH:mm:00");
                dataItem[0] = DateUtils.format(item.getT(), finalTimeFormat);
                dataItem[1] = item.getV();
                newList.add(dataItem);
            });
@@ -478,11 +492,13 @@
    @Override
    public List<PreDataViewSimpleDTO> getPreDataByOutIds(PreDataBarLineReqVO reqVO) {
        PreDataBarLineRespVO preDataBarLineRespVO = mcsApi.getPreDataCharts(reqVO);
        String predictTime = DateUtils.format(preDataBarLineRespVO.getPredictTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        List<PreDataViewSimpleDTO> preDataViewSimpleDTOList = new ArrayList<>();
        preDataBarLineRespVO.getDataViewList().forEach(item -> {
            PreDataViewSimpleDTO preDataViewSimpleDTO = new PreDataViewSimpleDTO();
            preDataViewSimpleDTO.setItemName(item.getResultName());
            preDataViewSimpleDTO.setPredictTime(preDataBarLineRespVO.getPredictTime());
            preDataViewSimpleDTO.setPredictTime(predictTime);
            preDataViewSimpleDTO.setCurData(item.getCurData());
            preDataViewSimpleDTO.setRealData(item.getRealData());
            preDataViewSimpleDTO.setPreDataN(item.getPreDataN().stream()
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportCosVO.java
@@ -26,7 +26,7 @@
    private BigDecimal cos;
    @Schema(description = "日最大功率因数")
    @ExcelProperty("采集值")
    @ExcelProperty("日最大功率因数")
    private BigDecimal max;
    @Schema(description = "日最小功率因数")
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportPqVO.java
@@ -22,22 +22,22 @@
    private String date;
    @Schema(description = "受电功率累计")
    @ExcelProperty("采集值")
    @ExcelProperty("受电功率累计")
    private BigDecimal sdl;
    @Schema(description = "返送功率累计")
    @ExcelProperty("采集值")
    @ExcelProperty("返送功率累计")
    private BigDecimal fsl;
    @Schema(description = "日最大功率")
    @ExcelProperty("采集值")
    @ExcelProperty("日最大功率")
    private BigDecimal max;
    @Schema(description = "日最小功率")
    @ExcelProperty("采集值")
    @ExcelProperty("日最小功率")
    private BigDecimal min;
    @Schema(description = "日平均功率")
    @ExcelProperty("采集值")
    @ExcelProperty("日平均功率")
    private BigDecimal avg;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PreDataByOutReqVO.java
对比新文件
@@ -0,0 +1,44 @@
package com.iailab.module.ansteel.api.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月18日
 */
@Data
public class PreDataByOutReqVO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "查询ID列表")
    private List<String[]> queryIds;
    @Schema(description = "输出ID列表")
    private List<String> outIds;
    @Schema(description = "预测时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date predictTime;
    @Schema(description = "开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @Schema(description = "结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
    @Schema(description = "数据精度,小于0,不限制位数,大于0设置位数")
    private Integer prec;
    @Schema(description = "时间格式化")
    private String timeFormat;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/CalendarUtil.java
对比新文件
@@ -0,0 +1,22 @@
package com.iailab.module.ansteel.common.utils;
import java.util.Calendar;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月18日
 */
public class CalendarUtil {
    public static Date getMonthFirstDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return calendar.getTime();
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/PowerUtil.java
@@ -30,7 +30,7 @@
            if (result.compareTo(BigDecimal.ONE) >= 0) {
                return 0.99;
            }
            return result.doubleValue();
            return result.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/ems/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.module.ansteel.ems;
ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/security/config/SecurityConfiguration.java
@@ -29,9 +29,6 @@
                registry.requestMatchers("/actuator").anonymous()
                        .requestMatchers("/actuator/**").anonymous();
                // 导出文件流接口
                registry.requestMatchers("/ansteel/api/file/**");
                // RPC 服务的安全配置
                registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll();
            }
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunDayScheduleModuleTask.java
对比新文件
@@ -0,0 +1,51 @@
package com.iailab.module.ansteel.job.task;
import com.iailab.module.model.api.mdk.MdkApi;
import com.iailab.module.model.api.mdk.dto.MdkScheduleReqDTO;
import com.iailab.module.model.api.mdk.dto.MdkScheduleRespDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Calendar;
/**
 * 执行天粒度调度方案定时任务
 */
@Component("runDayScheduleModuleTask")
public class RunDayScheduleModuleTask implements ITask {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Autowired
    private MdkApi mdkApi;
    @Override
    public void run(String params) {
        logger.info("runDayScheduleModuleTask定时任务正在执行,参数为:{}", params);
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.MINUTE,0);
            calendar.set(Calendar.HOUR_OF_DAY,0);
            MdkScheduleReqDTO dto = new MdkScheduleReqDTO();
            dto.setScheduleTime(calendar.getTime());
            dto.setScheduleCode(params);
            MdkScheduleRespDTO mdkScheduleRespDTO = mdkApi.doSchedule(dto);
            logger.info(params + "调度方案执行完成," + mdkScheduleRespDTO);
            logger.info("调度方案结果开始下发");
            if (mdkApi.scheduleModelOut(mdkScheduleRespDTO)) {
                logger.info("调度方案结果下发成功");
            } else {
                logger.error("调度方案结果下发失败");
            }
        } catch (Exception ex) {
            logger.error("runDayScheduleModuleTask运行异常");
            ex.printStackTrace();
        }
        logger.info("runDayScheduleModuleTask运行完成");
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/dao/SyncLogDao.java
对比新文件
@@ -0,0 +1,9 @@
package com.iailab.module.ansteel.sync.dao;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月18日
 */
public interface SyncLogDao {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/entity/SyncLogEntity.java
对比新文件
@@ -0,0 +1,9 @@
package com.iailab.module.ansteel.sync.entity;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月18日
 */
public class SyncLogEntity {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.module.ansteel.sync;
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/service/SyncLogService.java
对比新文件
@@ -0,0 +1,9 @@
package com.iailab.module.ansteel.sync.service;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月18日
 */
public class SyncLogService {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/sync/service/impl/SyncLogServiceImpl.java
对比新文件
@@ -0,0 +1,9 @@
package com.iailab.module.ansteel.sync.service.impl;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月18日
 */
public class SyncLogServiceImpl {
}
doc/鞍钢数据接口文档_master.doc
Binary files differ