鞍钢鲅鱼圈能源管控系统后端代码
潘志宝
5 天以前 5646e9910ecaf10df4550b4d29fb0618415551f9
检查每天的需量与这个月的最大值比较
已修改1个文件
已添加9个文件
446 ■■■■■ 文件已修改
ansteel-biz/db/mysql.sql 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPowerMaxdemandTask.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerMaxdemandDetDao.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerMaxdemandMainDao.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerMaxdemandDetEntity.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerMaxdemandMainEntity.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerMaxdemandDetService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerMaxdemandMainService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerMaxdemandDetServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerMaxdemandMainServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/db/mysql.sql
@@ -785,18 +785,50 @@
DROP TABLE IF EXISTS `t_gas_pred_conf`;
CREATE TABLE `t_gas_pred_conf`
(
    `id`         varchar(36) NOT NULL COMMENT 'id',
    `chart_code` varchar(50) NULL DEFAULT NULL COMMENT '预测图编号',
    `user_type`  varchar(50) NULL DEFAULT NULL COMMENT '用户类型(发生,消耗)',
    `item_no`    varchar(50) NULL DEFAULT NULL COMMENT '预测项编号',
    `item_name`  varchar(50) NULL DEFAULT NULL COMMENT '预测项名称',
    `out_key`    varchar(50) NULL DEFAULT NULL COMMENT '预测项输出key',
    `out_name`   varchar(50) NULL DEFAULT NULL COMMENT '预测项输出名称',
    `id`              varchar(36) NOT NULL COMMENT 'id',
    `chart_code`      varchar(50) NULL DEFAULT NULL COMMENT '预测图编号',
    `user_type`       varchar(50) NULL DEFAULT NULL COMMENT '用户类型(发生,消耗)',
    `item_no`         varchar(50) NULL DEFAULT NULL COMMENT '预测项编号',
    `item_name`       varchar(50) NULL DEFAULT NULL COMMENT '预测项名称',
    `out_key`         varchar(50) NULL DEFAULT NULL COMMENT '预测项输出key',
    `out_name`        varchar(50) NULL DEFAULT NULL COMMENT '预测项输出名称',
    `is_default_load` int DEFAULT NULL COMMENT '是否默认加载',
    `sort`       int NULL DEFAULT NULL COMMENT '排序',
    `sort`            int NULL DEFAULT NULL COMMENT '排序',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '煤气预测析配置';
ALTER TABLE `t_gas_pred_conf`
ADD COLUMN `out_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '预测项输出id' AFTER `item_name`,
    ADD COLUMN `out_id` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '预测项输出id' AFTER `item_name`,
ADD COLUMN `is_default_load` int DEFAULT NULL COMMENT '是否默认加载' AFTER `out_name`;
-- ----------------------------
-- 负荷移植-最大需量发生记录
-- ----------------------------
DROP TABLE IF EXISTS `t_power_maxdemand_main`;
CREATE TABLE `t_power_maxdemand_main`
(
    `id`         varchar(36) NOT NULL COMMENT 'id',
    `occur_time` datetimeL COMMENT '发生时间',
    `code`       varchar(50) NULL DEFAULT NULL COMMENT '编号',
    `name`       varchar(50) NULL DEFAULT NULL COMMENT '名称',
    `max_demand` decimal(10, 2) NULL DEFAULT NULL COMMENT '最大需量',
    PRIMARY KEY (`id`) USING BTREE,
    key          idx_code (code)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '负荷移植最大需量发生记录';
-- ----------------------------
-- 负荷移植-最大需量发生记录详情
-- ----------------------------
DROP TABLE IF EXISTS `t_power_maxdemand_det`;
CREATE TABLE `t_power_maxdemand_det`
(
    `id`         varchar(36) NOT NULL COMMENT 'id',
    `rel_id`     varchar(36) NULL DEFAULT NULL COMMENT '关联ID',
    `occur_time` datetime COMMENT '发生时间',
    `code`       varchar(50) NULL DEFAULT NULL COMMENT '编号',
    `name`       varchar(50) NULL DEFAULT NULL COMMENT '名称',
    `max_demand` decimal(10, 2) NULL DEFAULT NULL COMMENT '最大需量',
    `sort`       int NULL DEFAULT NULL COMMENT '排序',
    PRIMARY KEY (`id`) USING BTREE,
    key          idx_rel_id (rel_id)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC COMMENT '负荷移植最大需量发生记录详情';
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunPowerMaxdemandTask.java
对比新文件
@@ -0,0 +1,150 @@
package com.iailab.module.ansteel.job.task;
import com.iailab.module.ansteel.common.utils.DecimalUtil;
import com.iailab.module.ansteel.power.entity.PowerDemandEntity;
import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity;
import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity;
import com.iailab.module.ansteel.power.entity.PowerNetDropdownEntity;
import com.iailab.module.ansteel.power.service.PowerDemandService;
import com.iailab.module.ansteel.power.service.PowerMaxdemandDetService;
import com.iailab.module.ansteel.power.service.PowerMaxdemandMainService;
import com.iailab.module.ansteel.power.service.PowerNetDropdownService;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
/**
 * 检查每天的需量与这个月的最大值比较
 * 如果大于,则保存
 * 每天23:59执行
 *
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月08日
 */
@Component("runPowerMaxdemandTask")
public class RunPowerMaxdemandTask implements ITask {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Autowired
    private PowerDemandService powerDemandService;
    @Autowired
    private PowerMaxdemandMainService powerMaxdemandMainService;
    @Autowired
    private PowerNetDropdownService powerNetDropdownService;
    @Autowired
    private PowerMaxdemandDetService powerMaxdemandDetService;
    @Resource
    private DataPointApi dataPointApi;
    @Override
    public void run(String params) {
        logger.info("RunPowerMaxdemandTask start");
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        Date nowTime = calendar.getTime();
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        Date dayStart = calendar.getTime();
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        Date monStart = calendar.getTime();
        try {
            Map<String, Object> params0 = new HashMap<>();
            List<PowerDemandEntity> demandList = powerDemandService.list(params0);
            if (CollectionUtils.isEmpty(demandList)) {
                logger.info("demandList is empty");
                return;
            }
            for (PowerDemandEntity demand : demandList) {
                // 查询今天的最大需量
                ApiPointValueQueryDTO pointValueQuery0 = new ApiPointValueQueryDTO();
                pointValueQuery0.setStart(dayStart);
                pointValueQuery0.setEnd(nowTime);
                pointValueQuery0.setPointNo(demand.getCurDemand());
                Map<String, Object> maxValue = dataPointApi.queryPointMaxValue(pointValueQuery0);
                BigDecimal todayMax = BigDecimal.ZERO;
                if (CollectionUtils.isEmpty(maxValue) && maxValue.containsKey(demand.getCurDemand())) {
                    todayMax = new BigDecimal(maxValue.get(demand.getCurDemand()).toString());
                }
                List<ApiPointValueDTO> valueList = dataPointApi.queryPointHistoryValue(pointValueQuery0);
                if (CollectionUtils.isEmpty(valueList)) {
                    logger.info("valueList is empty");
                    continue;
                }
                Date occurTime = new Date(nowTime.getTime());
                for (ApiPointValueDTO apiPointValueDTO : valueList) {
                    if (Math.abs(apiPointValueDTO.getV() - todayMax.doubleValue()) < 0.001) {
                        occurTime = apiPointValueDTO.getT();
                        break;
                    }
                }
                // 查询本月需量发生记录
                BigDecimal monthMax = powerMaxdemandMainService.getMax(demand.getCode(), monStart, nowTime);
                // 保存记录
                if (todayMax.compareTo(monthMax) <= 0) {
                    continue;
                }
                PowerMaxdemandMainEntity mainEntity = new PowerMaxdemandMainEntity();
                mainEntity.setCode(demand.getCode());
                mainEntity.setName(demand.getName());
                mainEntity.setOccurTime(occurTime);
                mainEntity.setMaxDemand(todayMax);
                String mainId = powerMaxdemandMainService.add(mainEntity);
                Map<String, Object> params1 = new HashMap<>();
                params1.put("pCode", demand.getCode());
                List<PowerNetDropdownEntity> dropdownList = powerNetDropdownService.list(params1);
                if (CollectionUtils.isEmpty(dropdownList)) {
                    logger.info("dropdownList is empty");
                    continue;
                }
                for (PowerNetDropdownEntity dropdown : dropdownList) {
                    if (StringUtils.isBlank(dropdown.getExt1())) {
                        continue;
                    }
                    Calendar calendar1 = Calendar.getInstance();
                    calendar1.setTime(occurTime);
                    calendar1.add(Calendar.MINUTE, 1);
                    ApiPointValueQueryDTO pointValueQuery1 = new ApiPointValueQueryDTO();
                    pointValueQuery1.setStart(occurTime);
                    pointValueQuery1.setEnd(calendar1.getTime());
                    pointValueQuery1.setPointNo(dropdown.getExt1());
                    List<ApiPointValueDTO> valueList1 = dataPointApi.queryPointHistoryValue(pointValueQuery1);
                    if (CollectionUtils.isEmpty(valueList1)) {
                        logger.info("valueList1 is empty");
                        continue;
                    }
                    PowerMaxdemandDetEntity detEntity = new PowerMaxdemandDetEntity();
                    detEntity.setRelId(mainId);
                    detEntity.setCode(dropdown.getNodeCode());
                    detEntity.setName(dropdown.getNodeName());
                    detEntity.setOccurTime(occurTime);
                    detEntity.setMaxDemand(BigDecimal.valueOf(valueList1.get(0).getV()));
                    powerMaxdemandDetService.add(detEntity);
                }
            }
            logger.info("RunPowerMaxdemandTask end");
        } catch (Exception e) {
            logger.error("RunPowerMaxdemandTask error", e);
            e.printStackTrace();
        }
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerMaxdemandDetDao.java
对比新文件
@@ -0,0 +1,14 @@
package com.iailab.module.ansteel.power.dao;
import com.iailab.framework.common.dao.BaseDao;
import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月07日
 */
@Mapper
public interface PowerMaxdemandDetDao extends BaseDao<PowerMaxdemandDetEntity> {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerMaxdemandMainDao.java
对比新文件
@@ -0,0 +1,14 @@
package com.iailab.module.ansteel.power.dao;
import com.iailab.framework.common.dao.BaseDao;
import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月07日
 */
@Mapper
public interface PowerMaxdemandMainDao extends BaseDao<PowerMaxdemandMainEntity> {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerMaxdemandDetEntity.java
对比新文件
@@ -0,0 +1,55 @@
package com.iailab.module.ansteel.power.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月07日
 */
@Data
@TableName("t_power_maxdemand_det")
public class PowerMaxdemandDetEntity implements Serializable {
    /**
     * id
     */
    @TableId
    private String id;
    /**
     * 关联ID
     */
    private String relId;
    /**
     * 发生时间
     */
    private Date occurTime;
    /**
     * 编号
     */
    private String code;
    /**
     * 名称
     */
    private String name;
    /**
     * 最大需量
     */
    private BigDecimal maxDemand;
    /**
     * 排序
     */
    private Integer sort;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerMaxdemandMainEntity.java
对比新文件
@@ -0,0 +1,46 @@
package com.iailab.module.ansteel.power.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月07日
 */
@Data
@TableName("t_power_maxdemand_main")
public class PowerMaxdemandMainEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId
    private String id;
    /**
     * 发生时间
     */
    private Date occurTime;
    /**
     * 编号
     */
    private String code;
    /**
     * 名称
     */
    private String name;
    /**
     * 最大需量
     */
    private BigDecimal maxDemand;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerMaxdemandDetService.java
对比新文件
@@ -0,0 +1,13 @@
package com.iailab.module.ansteel.power.service;
import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月07日
 */
public interface PowerMaxdemandDetService {
    void add(PowerMaxdemandDetEntity entity);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerMaxdemandMainService.java
对比新文件
@@ -0,0 +1,18 @@
package com.iailab.module.ansteel.power.service;
import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月07日
 */
public interface PowerMaxdemandMainService {
    String add(PowerMaxdemandMainEntity entity);
    BigDecimal getMax(String code, Date start, Date end);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerMaxdemandDetServiceImpl.java
对比新文件
@@ -0,0 +1,29 @@
package com.iailab.module.ansteel.power.service.impl;
import com.iailab.module.ansteel.power.dao.PowerMaxdemandDetDao;
import com.iailab.module.ansteel.power.entity.PowerMaxdemandDetEntity;
import com.iailab.module.ansteel.power.service.PowerMaxdemandDetService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.UUID;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月07日
 */
@Slf4j
@Service
public class PowerMaxdemandDetServiceImpl implements PowerMaxdemandDetService {
    @Resource
    private PowerMaxdemandDetDao powerMaxdemandDetDao;
    @Override
    public void add(PowerMaxdemandDetEntity entity) {
        entity.setId(UUID.randomUUID().toString());
        powerMaxdemandDetDao.insert(entity);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerMaxdemandMainServiceImpl.java
对比新文件
@@ -0,0 +1,57 @@
package com.iailab.module.ansteel.power.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.module.ansteel.power.dao.PowerMaxdemandMainDao;
import com.iailab.module.ansteel.power.entity.PowerMaxdemandMainEntity;
import com.iailab.module.ansteel.power.service.PowerMaxdemandMainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年05月07日
 */
@Slf4j
@Service
public class PowerMaxdemandMainServiceImpl implements PowerMaxdemandMainService {
    @Autowired
    private PowerMaxdemandMainDao powerMaxdemandMainDao;
    @Override
    public String add(PowerMaxdemandMainEntity entity) {
        entity.setId(UUID.randomUUID().toString());
        powerMaxdemandMainDao.insert(entity);
        return entity.getId();
    }
    @Override
    public BigDecimal getMax(String code, Date start, Date end) {
        BigDecimal max = new BigDecimal(0);
        QueryWrapper<PowerMaxdemandMainEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("code", code)
                .ge("occur_time", start)
                .le("occur_time", end);
        List<PowerMaxdemandMainEntity> list = powerMaxdemandMainDao.selectList(queryWrapper);
        if (CollectionUtils.isEmpty(list)) {
            return max;
        }
        List<Double> demandValueList = list.stream().map(item -> {
            return item.getMaxDemand().doubleValue();
        }).collect(Collectors.toList());
        max = new BigDecimal(demandValueList.stream().max(Double::compareTo).get());
        log.info("max : {}", max);
        return max;
    }
}