鞍钢鲅鱼圈能源管控系统后端代码
已修改8个文件
已添加14个文件
886 ■■■■■ 文件已修改
ansteel-biz/db/mysql.sql 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PlantController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java 258 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerFactorExcelDTO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerFactorExcelReqDTO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/PowerUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantConfDao.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantIndexConfDao.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantConfEntity.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantIndexConfEntity.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantConfService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantIndexConfService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantConfServiceImpl.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantIndexConfServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantDataVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantIndexDataVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/resources/application.yaml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/鞍钢数据接口文档_master.doc 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/db/mysql.sql
@@ -923,9 +923,73 @@
    `id`         varchar(36) NOT NULL COMMENT 'id',
    `cde_index`  varchar(36) DEFAULT NULL COMMENT '类型',
    `name_index` varchar(36) DEFAULT NULL COMMENT '名称',
    `point_no1`   varchar(36) DEFAULT NULL COMMENT '测点1',
    `point_no2`   varchar(36) DEFAULT NULL COMMENT '测点2',
    `point_no3`   varchar(36) DEFAULT NULL COMMENT '测点3',
    `point_no1`  varchar(36) DEFAULT NULL COMMENT '测点1',
    `point_no2`  varchar(36) DEFAULT NULL COMMENT '测点2',
    `point_no3`  varchar(36) DEFAULT NULL COMMENT '测点3',
    `sort`       int NULL DEFAULT NULL COMMENT '排序',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='功率因数管控';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='功率因数管控';
-- ----------------------------
-- 日报表
-- ----------------------------
CREATE TABLE `t_xxb_duty_report`
(
    `id`         varchar(36) NOT NULL COMMENT 'id',
    `cde_index`  varchar(36) DEFAULT NULL COMMENT '类型',
    `name_index` varchar(36) DEFAULT NULL COMMENT '名称',
    `point_no1`  varchar(36) DEFAULT NULL COMMENT '测点1',
    `point_no2`  varchar(36) DEFAULT NULL COMMENT '测点2',
    `point_no3`  varchar(36) DEFAULT NULL COMMENT '测点3',
    `sort`       int NULL DEFAULT NULL COMMENT '排序',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='功率因数管控';
-- ----------------------------
-- 135机组数据配置表
-- ----------------------------
DROP TABLE IF EXISTS `t_plant_conf`;
CREATE TABLE `t_plant_conf`
(
    `id`            varchar(36) NOT NULL COMMENT 'id',
    `data_category` varchar(20) DEFAULT NULL COMMENT '数据类别(REAL:实时,HIS:历史)',
    `data_type`     varchar(20) DEFAULT NULL COMMENT '数据类型',
    `data_no`       varchar(20) DEFAULT NULL COMMENT '数据编码',
    `business_type` varchar(20) NULL DEFAULT NULL COMMENT '业务类别',
    `business_desc` varchar(20) NULL DEFAULT NULL COMMENT '业务描述',
    `ind_code`      varchar(20) NULL DEFAULT NULL COMMENT '指标编码',
    `ind_name`      varchar(20) NULL DEFAULT NULL COMMENT '指标名称',
    `ind_unit`      varchar(20) NULL DEFAULT NULL COMMENT '指标单位',
    `remark`        varchar(100) NULL DEFAULT NULL COMMENT '备注',
    `ext1`          varchar(20) NULL DEFAULT NULL COMMENT '拓展字段1',
    `ext2`          varchar(20) NULL DEFAULT NULL COMMENT '拓展字段2',
    `ext3`          varchar(20) NULL DEFAULT NULL COMMENT '拓展字段3',
    `ext4`          varchar(20) NULL DEFAULT NULL COMMENT '拓展字段4',
    `ext5`          varchar(20) NULL DEFAULT NULL COMMENT '拓展字段5',
    `sort`          int NULL DEFAULT NULL COMMENT '排序',
    PRIMARY KEY (`id`),
    KEY             `idx_business_type` (`business_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='135机组数据配置表';
-- ----------------------------
-- 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机组指标数据配置表';
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java
@@ -122,8 +122,8 @@
                    result.setCogGapAmount(data.get("cog_gap") == null ? 0 : DecimalUtil.toBigDecimal(data.get("cog_gap"), 1).intValue());//焦化减高炉煤气-数量
                    result.setBfgShengyue(DecimalUtil.toBigDecimal(data.get("BFG_shengyu")));
                    if (data.get("zhongabnAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("中板工序", data.get("zhongabnAdvice")));
                    if (data.get("zhongbanAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("中板工序", data.get("zhongbanAdvice")));
                    }
                    if (data.get("houbanAdvice") != null) {
                        adviceList.add(DecimalUtil.toPowerTransferDetRespVO("厚板工序", data.get("houbanAdvice")));
@@ -181,7 +181,8 @@
    @PostMapping("/predict-data/tn-value")
    @Operation(summary = "获取T+N预测数据")
    public CommonResult<List<MdkPredictDataDTO>> getPredictTnValue(PredictTnValueReqVO reqVO) {
    public CommonResult<List<MdkPredictDataDTO>> getPredictTnValue(@RequestBody PredictTnValueReqVO reqVO) {
        log.info("PredictTnValueReqVO:"+reqVO);
        List<MdkPredictDataDTO> list = mcsApi.getPredictTnValue(reqVO);
        return success(list);
    }
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PlantController.java
对比新文件
@@ -0,0 +1,49 @@
package com.iailab.module.ansteel.api.controller.admin;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.module.ansteel.plant.service.PlantConfService;
import com.iailab.module.ansteel.plant.service.PlantIndexConfService;
import com.iailab.module.ansteel.plant.vo.PlantDataVO;
import com.iailab.module.ansteel.plant.vo.PlantIndexDataVO;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月16日
 */
@Slf4j
@RestController
@RequestMapping("/ansteel/api/plant")
public class PlantController {
    @Autowired
     private PlantConfService plantConfService;
    @Autowired
     private PlantIndexConfService plantIndexConfService;
    @GetMapping("/data")
    @Operation(summary = "135机组数据")
    public CommonResult<List<PlantDataVO>> getPlantData(@RequestParam("businessType") String businessType) {
        List<PlantDataVO> result = plantConfService.getPlantData(businessType);
        return success(result);
    }
    @GetMapping("/ind-data")
    @Operation(summary = "135机组指标数据")
    public CommonResult<List<PlantIndexDataVO>> getPlantIndexData(@RequestParam("businessType") String businessType) {
        List<PlantIndexDataVO> result = plantIndexConfService.getPlantIndexData(businessType);
        return success(result);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -13,7 +13,6 @@
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.enums.TransferTypeEnum;
import com.iailab.module.ansteel.common.utils.DecimalUtil;
import com.iailab.module.ansteel.common.utils.PowerUtil;
import com.iailab.module.ansteel.power.entity.*;
@@ -27,19 +26,15 @@
import com.iailab.module.model.api.mcs.dto.PredictLastValueReqVO;
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 io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.iailab.framework.common.pojo.CommonResult.error;
@@ -115,10 +110,10 @@
    public static final String TIME = "time";
    private String pointNo = "F0000201825";
    //private String pointNo = "F0000201825";
    @GetMapping("/net-factor/list")
    @Operation(summary = "功率因数-电网拓扑")
    @Operation(summary = "功率因数-电网拓扑列表")
    public CommonResult<List<PowerNetFactorDTO>> getPowerNetFactorList(@RequestParam Map<String, Object> params) {
        log.info("功率因数电网拓扑");
        List<PowerNetFactorDTO> result = new ArrayList<>();
@@ -352,7 +347,7 @@
            Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points);
            if (pointsRealValue.get(entity.getCurQ()) != null) {
                BigDecimal curQ = new BigDecimal(pointsRealValue.get(entity.getCurQ()).toString());
                if (curQ.compareTo(BigDecimal.ZERO) == entity.getCurFlag()) {
                if (entity.getCurFlag() != null && curQ.compareTo(BigDecimal.ZERO) == entity.getCurFlag()) {
                    message = entity.getNodeName() + "发生无功返送;";
                }
            }
@@ -844,6 +839,106 @@
        return success(result);
    }
    @PostMapping("/net-factor/export-day")
    @Operation(summary = "功率因数-电网拓扑功率导出(功率日累计)")
    public CommonResult<List<PowerFactorExcelDTO>> getPowerFactorExportDay(@RequestBody PowerFactorExcelReqDTO dto) {
        List<PowerFactorExcelDTO> result = new ArrayList<>();
        if (dto.getStartTime() == null) {
            dto.setStartTime(new Date());
        }
        if (dto.getEndTime() == null) {
            dto.setEndTime(new Date());
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dto.getStartTime());
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        Date startTime = calendar.getTime();
        calendar.setTime(dto.getEndTime());
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        Date endTime = calendar.getTime();
        String pointNo = "=";
        String[] pointNoArr = new String[2];
        String queryType = dto.getQueryType();
        PowerNetFactorEntity powerNetFactorEntity = powerNetFactorService.getByNodeCode(dto.getNodeCode());
        Calendar curDay = Calendar.getInstance();
        curDay.setTime(startTime);
        do {
            PowerFactorExcelDTO excelDTO = new PowerFactorExcelDTO();
            switch (queryType.toUpperCase()) {
                case "P":
                    pointNo = powerNetFactorEntity.getCurP();
                    break;
                case "Q":
                    pointNo = powerNetFactorEntity.getCurQ();
                    break;
                default:
                    return success(result);
            }
            if (StringUtils.isEmpty(pointNo)) {
                return success(result);
            }
            List<Double> valueList = new ArrayList<>();
            ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO();
            apiPointValueQueryDTO.setPointNo(pointNo);
            apiPointValueQueryDTO.setStart(curDay.getTime());
            curDay.add(Calendar.DAY_OF_YEAR, 1);
            apiPointValueQueryDTO.setEnd(curDay.getTime());
            List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
            for (ApiPointValueDTO pv : chartData) {
                Object[] data = new Object[2];
                data[0] = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
                data[1] = pv.getV();
                valueList.add(pv.getV());
            }
            double day = 0;
            double max = 0;
            double min = 0;
            double avg = 0;
            double fsl = 0;
            if (!CollectionUtils.isEmpty(valueList)) {
                day = valueList.stream().mapToDouble(Double::doubleValue).sum();
                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 (powerNetFactorEntity.getCurFlag() != null && powerNetFactorEntity.getCurFlag().intValue() != 0) {
                    for ( Double val : valueList) {
                        if (new BigDecimal(val).compareTo(BigDecimal.ZERO) != powerNetFactorEntity.getCurFlag()) {
                            // 未发生返送
                            continue;
                        }
                        fsl += val;
                    }
                }
            }
            excelDTO.setDay(new BigDecimal(day).setScale(2, BigDecimal.ROUND_HALF_UP));
            excelDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP));
            excelDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP));
            excelDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP));
            // 当查询为P, Q,且有返送flag时 计算 返送累计
            if (("P".equals(queryType.toUpperCase()) || "Q".equals(queryType.toUpperCase())) &&
                    powerNetFactorEntity.getCurFlag() != null &&
                    powerNetFactorEntity.getCurFlag().intValue() != 0) {
                excelDTO.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP));
            }
            excelDTO.setDate(DateUtils.format(apiPointValueQueryDTO.getStart()));
        } while (curDay.getTime().getTime() <= endTime.getTime());
        return success(result);
    }
    @PostMapping("/net-factor/history")
    @Operation(summary = "功率因数-电网拓扑功率历史")
    public CommonResult<PowerHistoryDTO> getPowerHistoryData(@RequestBody PowerNetFactorHisReqDTO dto) {
@@ -872,6 +967,7 @@
        log.info("开始查询,");
        ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO();
        String pointNo = "";
        String[] pointNoArr = new String[2];
        switch (queryType.toUpperCase()) {
            case "P":
                pointNo = powerNetFactorQuery.getCurP();
@@ -882,11 +978,22 @@
            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.setPointNo(pointNo);
        List<Object[]> dataList = new ArrayList<>();
        Calendar calendar0 = Calendar.getInstance();
        calendar0.set(Calendar.MILLISECOND, 0);
        calendar0.set(Calendar.SECOND, 0);
@@ -895,16 +1002,42 @@
        Date start = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime();
        apiPointValueQueryDTO.setEnd(end);
        apiPointValueQueryDTO.setStart(start);
        List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
        List<Object[]> dataList = new ArrayList<>();
        for (ApiPointValueDTO pv : chartData) {
            Object[] data = new Object[2];
            data[0] = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
            data[1] = pv.getV();
            dataList.add(data);
        }
        List<String> categories = DateUtils.getTimeScale(start, end, 60);
        result.setCategories(categories);
        if (StringUtils.isNotBlank(pointNo)) {
            apiPointValueQueryDTO.setPointNo(pointNo);
            List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
            for (ApiPointValueDTO pv : chartData) {
                Object[] data = new Object[2];
                data[0] = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
                data[1] = pv.getV();
                dataList.add(data);
            }
        } 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());
            }
            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) {
                Object[] data = new Object[2];
                data[0] = cate;
                data[1] = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate));
                dataList.add(data);
            }
        }
        result.setDataList(dataList);
        //查询月最大最小值
@@ -969,6 +1102,7 @@
            log.info("开始查询,");
            ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO();
            String pointNo = "";
            String[] pointNoArr = new String[2];
            switch (queryType.toUpperCase()) {
                case "P":
                    pointNo = powerNetFactorQuery.getCurP();
@@ -979,60 +1113,70 @@
                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.setPointNo(pointNo);
            apiPointValueQueryDTO.setEnd(end0);
            apiPointValueQueryDTO.setStart(start0);
            List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
            List<Object[]> dataList = new ArrayList<>();
            List<Double> valueList = new ArrayList<>();
            for (ApiPointValueDTO pv : chartData) {
                Object[] data = new Object[2];
                data[0] = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
                data[1] = pv.getV();
                dataList.add(data);
                valueList.add(pv.getV());
            }
            powerHistoryDTO.setDataList(dataList);
            //查询月最大最小值
            /*ApiPointValueQueryDTO apiPointValueQueryDTO1 = new ApiPointValueQueryDTO();
            apiPointValueQueryDTO1.setStart(start1);
            apiPointValueQueryDTO1.setEnd(new Date());
            apiPointValueQueryDTO1.setPointNo(pointNo);
            Map<String, Object> maxV = dataPointApi.queryPointMaxValueRange(apiPointValueQueryDTO1);
            Map<String, Object> minV = dataPointApi.queryPointMaxValueRange(apiPointValueQueryDTO1);
            if (maxV != null && maxV.containsKey(pointNo)) {
                powerHistoryDTO.setMax(new BigDecimal(maxV.get(pointNo).toString()));
            }
            if (minV != null && minV.containsKey(pointNo)) {
                powerHistoryDTO.setMin(new BigDecimal(minV.get(pointNo).toString()));
            }*/
            if (StringUtils.isNotBlank(pointNo)) {
                List<Double> valueList = new ArrayList<>();
                apiPointValueQueryDTO.setPointNo(pointNo);
                List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
                for (ApiPointValueDTO pv : chartData) {
                    Object[] data = new Object[2];
                    data[0] = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
                    data[1] = pv.getV();
                    dataList.add(data);
                    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();
                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();
                for (Double val : valueList) {
                    if (val < 0) {
                        fsl += val;
                    if (powerNetFactorQuery.getCurFlag() != null && powerNetFactorQuery.getCurFlag().intValue() != 0) {
                        for ( Double val : valueList) {
                            if (new BigDecimal(val).compareTo(BigDecimal.ZERO) != powerNetFactorQuery.getCurFlag()) {
                                // 未发生返送
                                continue;
                            }
                            fsl += val;
                        }
                    }
                }
            }
            powerHistoryDTO.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP));
            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.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));
                }
            } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) {
            }
            powerHistoryDTO.setDataList(dataList);
            result.put(nodeCode, powerHistoryDTO);
        }
        return success(result);
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerFactorExcelDTO.java
对比新文件
@@ -0,0 +1,38 @@
package com.iailab.module.ansteel.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
 * 功率因数导出
 *
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月16日
 */
@Data
public class PowerFactorExcelDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "日累计")
    private BigDecimal day;
    @Schema(description = "最大值")
    private BigDecimal max;
    @Schema(description = "最小值")
    private BigDecimal min;
    @Schema(description = "平均值")
    private BigDecimal avg;
    @Schema(description = "返送累计")
    private BigDecimal fsl;
    @Schema(description = "日期")
    private String date;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerFactorExcelReqDTO.java
对比新文件
@@ -0,0 +1,27 @@
package com.iailab.module.ansteel.api.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月16日
 */
@Data
public class PowerFactorExcelReqDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String nodeCode;
    private String queryType;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java
@@ -17,10 +17,12 @@
     * 当前有功
     */
    private String curP;
    /**
     * 当前无功
     */
    private String curQ;
    /**
     * 当前功率因数
     */
@@ -30,4 +32,9 @@
     * 当前需量
     */
    private String curDem;
    /**
     * 无功返送判断条件
     */
    private Integer curFlag;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/PowerUtil.java
@@ -14,7 +14,11 @@
    /**
     * 计算功率因数 p /(根号:p²+Q²)
     **/
    public static Double calculateCos(double PValue, double QValue) {
    public static Double calculateCos(Double PValue, Double QValue) {
        if (PValue == null || QValue == null) {
            return null;
        }
        // 绝对值
        PValue = Math.abs(PValue);
        QValue = Math.abs(QValue);
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java
@@ -46,6 +46,8 @@
    @Autowired
    private McsApi mcsApi;
    private final static double LIM = -20d;
    private final static String POINT_NO = "C0000201107";
    @Override
@@ -69,7 +71,7 @@
                flag = false;
            }
            for (ApiPointValueDTO apiPointValueDTO : valueList) {
                if (apiPointValueDTO.getV() < 0) {
                if (apiPointValueDTO.getV() < LIM) {
                    flag = false;
                    break;
                }
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantConfDao.java
对比新文件
@@ -0,0 +1,15 @@
package com.iailab.module.ansteel.plant.dao;
import com.iailab.framework.common.dao.BaseDao;
import com.iailab.module.ansteel.plant.entity.PlantConfEntity;
import com.iailab.module.ansteel.report.entity.DutyReportEntity;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月15日
 */
@Mapper
public interface PlantConfDao extends BaseDao<PlantConfEntity> {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantIndexConfDao.java
对比新文件
@@ -0,0 +1,14 @@
package com.iailab.module.ansteel.plant.dao;
import com.iailab.framework.common.dao.BaseDao;
import com.iailab.module.ansteel.plant.entity.PlantIndexConfEntity;
import org.apache.ibatis.annotations.Mapper;
/**
 * @description:
 * @author: dzd
 * @date: 2025/6/16 13:59
 **/
@Mapper
public interface PlantIndexConfDao extends BaseDao<PlantIndexConfEntity> {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantConfEntity.java
对比新文件
@@ -0,0 +1,54 @@
package com.iailab.module.ansteel.plant.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月15日
 */
@Data
@TableName("t_plant_conf")
public class PlantConfEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId
    private String id;
    private String dataCategory;
    private String dataType;
    private String dataNo;
    private String businessType;
    private String businessDesc;
    private String indCode;
    private String indName;
    private String indUnit;
    private String remark;
    private String ext1;
    private String ext2;
    private String ext3;
    private String ext4;
    private String ext5;
    private Integer sort;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantIndexConfEntity.java
对比新文件
@@ -0,0 +1,50 @@
package com.iailab.module.ansteel.plant.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
 * @description:
 * @author: dzd
 * @date: 2025/6/16 13:59
 **/
@Data
@TableName("t_plant_index_conf")
public class PlantIndexConfEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId
    private String id;
    private String businessType;
    private String indType;
    private String indCode;
    private String indName;
    private String indUnit;
    private String indAvg;
    private String indTheory;
    private String indOptimal;
    private String indReal;
    private String indDeviationValue;
    private String indDeviationRate;
    private String indPrevious;
    private Integer sort;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/package-info.java
对比新文件
@@ -0,0 +1 @@
package com.iailab.module.ansteel.plant;
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantConfService.java
对比新文件
@@ -0,0 +1,19 @@
package com.iailab.module.ansteel.plant.service;
import com.iailab.module.ansteel.plant.entity.PlantConfEntity;
import com.iailab.module.ansteel.plant.vo.PlantDataVO;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月15日
 */
public interface PlantConfService {
    List<PlantConfEntity> list(Map<String, Object> params);
    List<PlantDataVO> getPlantData(String businessType);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantIndexConfService.java
对比新文件
@@ -0,0 +1,18 @@
package com.iailab.module.ansteel.plant.service;
import com.iailab.module.ansteel.plant.entity.PlantConfEntity;
import com.iailab.module.ansteel.plant.vo.PlantIndexDataVO;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
 * @description:
 * @author: dzd
 * @date: 2025/6/16 13:56
 **/
public interface PlantIndexConfService {
    List<PlantIndexDataVO> getPlantIndexData(String businessType);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantConfServiceImpl.java
对比新文件
@@ -0,0 +1,108 @@
package com.iailab.module.ansteel.plant.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum;
import com.iailab.module.ansteel.plant.dao.PlantConfDao;
import com.iailab.module.ansteel.plant.entity.PlantConfEntity;
import com.iailab.module.ansteel.plant.service.PlantConfService;
import com.iailab.module.ansteel.plant.vo.PlantDataVO;
import com.iailab.module.data.api.arc.ArcDataApi;
import com.iailab.module.data.api.arc.dto.ApiArcDataDTO;
import com.iailab.module.data.api.ind.IndItemApi;
import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO;
import com.iailab.module.data.api.point.DataPointApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年06月15日
 */
@Slf4j
@Service
public class PlantConfServiceImpl implements PlantConfService {
    @Resource
    private PlantConfDao plantConfDao;
    @Resource
    private DataPointApi dataPointApi;
    @Resource
    private IndItemApi indItemApi;
    @Resource
    private ArcDataApi arcDataApi;
    private final BigDecimal badValue = new BigDecimal(-2);
    @Override
    public List<PlantConfEntity> list(Map<String, Object> params) {
        String businessType = (String) params.get("businessType");
        QueryWrapper<PlantConfEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(StringUtils.isNotBlank(businessType), "business_type", businessType);
        return plantConfDao.selectList(queryWrapper);
    }
    @Override
    public List<PlantDataVO> getPlantData(String businessType) {
        QueryWrapper<PlantConfEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("business_type",businessType);
        List<PlantConfEntity> plantConfList = plantConfDao.selectList(queryWrapper);
        // 筛选DATAPOINT一次性查询出全部
        List<String> pointNos = plantConfList.stream().filter(e -> e.getDataType().equals(ProcessConfDataTypeEnum.DATAPOINT.getCode())).map(PlantConfEntity::getDataNo).collect(Collectors.toList());
        Map<String, Object> pointValues = new HashMap<>();
        if (!CollectionUtils.isEmpty(pointNos)) {
            pointValues = dataPointApi.queryPointsRealValue(pointNos);
        }
        List<PlantDataVO> result = new ArrayList<>(plantConfList.size());
        for (PlantConfEntity plantConf : plantConfList) {
            String dataNo = plantConf.getDataNo();
            String dataType = plantConf.getDataType();
            PlantDataVO plantData = new PlantDataVO();
            plantData.setCode(plantConf.getIndCode());
            plantData.setName(plantConf.getIndName());
            plantData.setUnit(plantConf.getIndUnit());
            plantData.setSort(plantConf.getSort());
            switch (ProcessConfDataTypeEnum.getEumByCode(dataType)) {
                case DATAPOINT:
                    if (pointValues.containsKey(dataNo)) {
                        plantData.setValue(new BigDecimal(pointValues.get(dataNo).toString()));
                    }else {
                        plantData.setValue(badValue);
                    }
                    break;
                case IND:
                    List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(dataNo);
                    if (!CollectionUtils.isEmpty(indValues)) {
                        plantData.setValue(new BigDecimal(indValues.get(0).getDataValue().toString()));
                    }else {
                        plantData.setValue(badValue);
                    }
                    break;
                case ARC:
                    ApiArcDataDTO apiArcDataDTO = arcDataApi.queryArcLastValue(dataNo);
                    if (apiArcDataDTO != null) {
                        plantData.setValue(apiArcDataDTO.getArcValue());
                    }else {
                        plantData.setValue(badValue);
                    }
                    break;
                default:
                    plantData.setValue(badValue);
                    break;
            }
            result.add(plantData);
        }
        return result;
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantIndexConfServiceImpl.java
对比新文件
@@ -0,0 +1,70 @@
package com.iailab.module.ansteel.plant.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.module.ansteel.plant.dao.PlantIndexConfDao;
import com.iailab.module.ansteel.plant.entity.PlantIndexConfEntity;
import com.iailab.module.ansteel.plant.service.PlantIndexConfService;
import com.iailab.module.ansteel.plant.vo.PlantIndexDataVO;
import com.iailab.module.data.api.point.DataPointApi;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * @description:
 * @author: dzd
 * @date: 2025/6/16 13:57
 **/
@Slf4j
@Service
public class PlantIndexConfServiceImpl implements PlantIndexConfService {
    @Resource
    private PlantIndexConfDao plantIndexConfDao;
    @Resource
    private DataPointApi dataPointApi;
    private final BigDecimal badValue = new BigDecimal(-2);
    @Override
    public List<PlantIndexDataVO> getPlantIndexData(String businessType) {
        QueryWrapper<PlantIndexConfEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("business_type",businessType);
        List<PlantIndexConfEntity> PlantIndexConfList = plantIndexConfDao.selectList(queryWrapper);
        // 筛选DATAPOINT一次性查询出全部
        List<String> pointNos = PlantIndexConfList.stream().flatMap(e -> Stream.of(e.getIndAvg(),e.getIndTheory(),e.getIndOptimal(),e.getIndReal(),e.getIndDeviationValue(),e.getIndDeviationRate(),e.getIndPrevious())).collect(Collectors.toList());
        Map<String, Object> pointValues = new HashMap<>();
        if (!CollectionUtils.isEmpty(pointNos)) {
            pointValues = dataPointApi.queryPointsRealValue(pointNos);
        }
        List<PlantIndexDataVO> result = new ArrayList<>(PlantIndexConfList.size());
        for (PlantIndexConfEntity PlantIndexConf : PlantIndexConfList) {
            PlantIndexDataVO plantData = new PlantIndexDataVO();
            plantData.setType(PlantIndexConf.getIndType());
            plantData.setCode(PlantIndexConf.getIndCode());
            plantData.setName(PlantIndexConf.getIndName());
            plantData.setUnit(PlantIndexConf.getIndUnit());
            plantData.setSort(PlantIndexConf.getSort());
            plantData.setIndAvg(pointValues.containsKey(PlantIndexConf.getIndAvg()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndAvg()).toString()) : badValue);
            plantData.setIndTheory(pointValues.containsKey(PlantIndexConf.getIndTheory()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndTheory()).toString()) : badValue);
            plantData.setIndOptimal(pointValues.containsKey(PlantIndexConf.getIndOptimal()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndOptimal()).toString()) : badValue);
            plantData.setIndReal(pointValues.containsKey(PlantIndexConf.getIndReal()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndReal()).toString()) : badValue);
            plantData.setIndDeviationValue(pointValues.containsKey(PlantIndexConf.getIndDeviationValue()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndDeviationValue()).toString()) : badValue);
            plantData.setIndDeviationRate(pointValues.containsKey(PlantIndexConf.getIndDeviationRate()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndDeviationRate()).toString()) : badValue);
            plantData.setIndPrevious(pointValues.containsKey(PlantIndexConf.getIndPrevious()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndPrevious()).toString()) : badValue);
            result.add(plantData);
        }
        return result;
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantDataVO.java
对比新文件
@@ -0,0 +1,28 @@
package com.iailab.module.ansteel.plant.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
 * @description:
 * @author: dzd
 * @date: 2025/6/16 13:59
 **/
@Data
public class PlantDataVO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String code;
    private String name;
    private String unit;
    private BigDecimal value;
    private Integer sort;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantIndexDataVO.java
对比新文件
@@ -0,0 +1,40 @@
package com.iailab.module.ansteel.plant.vo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
 * @description:
 * @author: dzd
 * @date: 2025/6/16 13:59
 **/
@Data
public class PlantIndexDataVO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String code;
    private String name;
    private String unit;
    private String type;
    private BigDecimal indAvg;
    private BigDecimal indTheory;
    private BigDecimal indOptimal;
    private BigDecimal indReal;
    private BigDecimal indDeviationValue;
    private BigDecimal indDeviationRate;
    private BigDecimal indPrevious;
    private Integer sort;
}
ansteel-biz/src/main/resources/application.yaml
@@ -188,6 +188,7 @@
      - t_power_price_det
      - t_power_factor_control
      - t_xxb_duty_report
      - t_plant_conf
  swagger:
    title: 鞍钢鲅鱼圈能源管控系统
    description: 鞍钢鲅鱼圈能源管控系统
doc/鞍钢数据接口文档_master.doc
Binary files differ