鞍钢鲅鱼圈能源管控系统后端代码
潘志宝
2 天以前 6f98c66bbd3eb768d9e16eccea0c42f8f0247136
电容器投退指示灯
已添加8个文件
已修改5个文件
472 ■■■■ 文件已修改
ansteel-biz/db/mysql.sql 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerCapacitorDetDTO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerCapacitorHisDTO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorDropdownDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerCapacitorDetDao.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerCapacitorHisDao.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorDetEntity.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorHisEntity.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorDetService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorHisService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorDetServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorHisServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/db/mysql.sql
@@ -296,6 +296,7 @@
    `status_id` varchar(36) NULL DEFAULT NULL COMMENT '投运状态父ID',
    `type`      varchar(50) NULL DEFAULT NULL COMMENT '类型',
    `name`      varchar(50) NULL DEFAULT NULL COMMENT '电容器名称',
    `point_no`  varchar(50) NULL DEFAULT NULL COMMENT '下属测点编码',
    `remark`    varchar(50) NULL DEFAULT NULL COMMENT '备注',
    `sort`      int NULL DEFAULT NULL COMMENT '排序',
    PRIMARY KEY (`id`) USING BTREE
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -64,11 +64,17 @@
    @Autowired
    private PowerAdjustedFactorService powerAdjustedFactorService;
    @Resource
    @Autowired
    private DataPointApi dataPointApi;
    @Resource
    @Autowired
    private McsApi mcsApi;
    @Autowired
    private PowerCapacitorHisService powerCapacitorHisService;
    @Autowired
    private PowerCapacitorDetService powerCapacitorDetService;
    @GetMapping("/net-factor/list")
    @Operation(summary = "功率因数-电网拓扑")
@@ -245,11 +251,118 @@
        return success(result);
    }
    @PostMapping("/gen-status/history")
    @Operation(summary = "功率因数-发电机组功率历史")
    public CommonResult<PowerHistoryDTO> getPowerGenStatusHistory(@RequestBody PowerGenStatusHisReqDTO dto) {
        log.info("请求参数: {}", JSONObject.toJSONString(dto));
        // 参数校验
        if (StringUtils.isBlank(dto.getId())) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "id不能为空");
        }
        if (StringUtils.isBlank(dto.getQueryType())) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空");
        }
        PowerGenStatusEntity powerGenStatus = powerGenStatusDaoService.getById(dto.getId());
        if (powerGenStatus == null) {
            log.info("未找到code对应的数据: {}", dto.getId());
            return success(new PowerHistoryDTO());
        }
        String queryType = dto.getQueryType().toUpperCase();
        String pointNo;
        switch (queryType.toUpperCase()) {
            case "D":
                pointNo = powerGenStatus.getCurP();
                break;
            case "P":
                pointNo = powerGenStatus.getCurQ();
                break;
            case "COS":
                pointNo = powerGenStatus.getCurCOS();
                break;
            default:
                throw new IllegalArgumentException("不支持的queryType: " + queryType);
        }
        // 默认查最近24小时
        Date end = Optional.ofNullable(dto.getEndTime()).orElseGet(() -> {
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.MILLISECOND, 0);
            cal.set(Calendar.SECOND, 0);
            return cal.getTime();
        });
        Date start = Optional.ofNullable(dto.getStartTime()).orElseGet(() -> {
            Calendar cal = Calendar.getInstance();
            cal.setTime(end);
            cal.add(Calendar.MINUTE, -1440); // 24小时前
            return cal.getTime();
        });
        // 查询历史数据
        ApiPointValueQueryDTO query = new ApiPointValueQueryDTO();
        query.setPointNo(pointNo);
        query.setStart(start);
        query.setEnd(end);
        log.info("开始查询发电机组功率历史数据,测点: {}", pointNo);
        List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(query);
        // 构建返回结果
        PowerHistoryDTO result = new PowerHistoryDTO();
        result.setCategories(DateUtils.getTimeScale(start, end, 60));
        result.setDataList(chartData.stream()
                .map(pv -> new Object[]{
                        DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND),
                        pv.getV()
                })
                .collect(Collectors.toList()));
        return success(result);
    }
    @GetMapping("/capacitor-status/list")
    @Operation(summary = "功率因数-电容器投运状态")
    @Operation(summary = "功率因数-电容器投退状态")
    public CommonResult<List<PowerCapacitorStatusDTO>> getPowerCapacitorStatusList(@RequestParam Map<String, Object> params) {
        List<PowerCapacitorStatusEntity> list = powerCapacitorStatusService.list(params);
        return success(ConvertUtils.sourceToTarget(list, PowerCapacitorStatusDTO.class));
    }
    @GetMapping("/capacitor-det/list")
    @Operation(summary = "功率因数-电容器投退指示灯")
    public CommonResult<List<PowerCapacitorDetDTO>> getPowerCapacitorDetList(@RequestParam Map<String, Object> params) {
        List<PowerCapacitorDetEntity> list = powerCapacitorDetService.list(params);
        List<String> points = list.stream().map(item -> {
            return item.getPointNo();
        }).collect(Collectors.toList());
        Map<String, Object> pointsRealValue = new HashMap<>();
        if (!CollectionUtils.isEmpty(points)) {
            pointsRealValue = dataPointApi.queryPointsRealValue(points);
        }
        List<PowerCapacitorDetDTO> result = new ArrayList<>();
        for (PowerCapacitorDetEntity entity : list) {
            PowerCapacitorDetDTO dto = ConvertUtils.sourceToTarget(entity, PowerCapacitorDetDTO.class);
            dto.setStatus(0);
            if (!pointsRealValue.containsKey(entity.getPointNo()) || pointsRealValue.get(entity.getPointNo()) == null) {
                continue;
            }
            BigDecimal val = new BigDecimal(pointsRealValue.get(entity.getPointNo()).toString());
            if (val.compareTo(BigDecimal.ZERO) >= 0.1) {
                dto.setStatus(1);
            }
            result.add(dto);
        }
        return success(result);
    }
    @GetMapping("/capacitor-det/list")
    @Operation(summary = "功率因数-电容器投退历史")
    public CommonResult<List<PowerCapacitorHisDTO>> getPowerCapacitorHisList(@RequestParam Map<String, Object> params) {
        List<PowerCapacitorHisEntity> list = powerCapacitorHisService.list(params);
        return success(ConvertUtils.sourceToTarget(list, PowerCapacitorHisDTO.class));
    }
    @GetMapping("/control-main/list")
@@ -405,7 +518,7 @@
        calendar0.set(Calendar.SECOND, 0);
        Date end = dto.getEndTime() == null ? calendar0.getTime() : dto.getEndTime();
        calendar0.add(Calendar.MINUTE, -1440);
        Date start = dto.getStartTime() == null ?  calendar0.getTime() : dto.getStartTime();
        Date start = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime();
        apiPointValueQueryDTO.setEnd(end);
        apiPointValueQueryDTO.setStart(start);
        List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
@@ -433,31 +546,11 @@
        List<ApiPointValueDTO> monthChartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
        List<Double> monthValues = new ArrayList<>();
        if (CollectionUtils.isEmpty(monthChartData)) {
            monthValues =  monthChartData.stream().map(item -> item.getV()).collect(Collectors.toList());
            monthValues = monthChartData.stream().map(item -> item.getV()).collect(Collectors.toList());
            result.setMax(monthValues.stream().max(Double::compareTo).get());
            result.setMin(monthValues.stream().min(Double::compareTo).get());
        }
        return success(result);
    }
    private double getMin(List<List<Object>> dataList) {
        double result = Double.parseDouble(dataList.get(0).get(1).toString());
        for (int i = 0; i < dataList.size() - 1; i++) {
            if (result > Double.parseDouble(dataList.get(i).get(1).toString())) {
                result = Double.parseDouble(dataList.get(i).get(1).toString());
            }
        }
        return result;
    }
    private double getMax(List<List<Object>> dataList) {
        double result = 0;
        for (int i = 0; i < dataList.size() - 1; i++) {
            if (result < Double.parseDouble(dataList.get(i).get(1).toString())) {
                result = Double.parseDouble(dataList.get(i).get(1).toString());
            }
        }
        return result;
    }
    @GetMapping("/adjust-factor")
@@ -556,75 +649,5 @@
        return success(result);
    }
    @PostMapping("/gen/history")
    @Operation(summary = "功率因数-发电机组功率历史")
    public CommonResult<PowerHistoryDTO> getPowerGenStatusHistory(@RequestBody PowerGenStatusHisReqDTO dto) {
        log.info("请求参数: {}", JSONObject.toJSONString(dto));
        // 参数校验
        if (StringUtils.isBlank(dto.getId())) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "id不能为空");
        }
        if (StringUtils.isBlank(dto.getQueryType())) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空");
        }
        PowerGenStatusEntity powerGenStatus = powerGenStatusDaoService.getById(dto.getId());
        if (powerGenStatus == null) {
            log.info("未找到code对应的数据: {}", dto.getId());
            return success(new PowerHistoryDTO());
        }
        String queryType = dto.getQueryType().toUpperCase();
        String pointNo;
        switch (queryType.toUpperCase()) {
            case "D":
                pointNo = powerGenStatus.getCurP();
                break;
            case "P":
                pointNo = powerGenStatus.getCurQ();
                break;
            case "COS":
                pointNo = powerGenStatus.getCurCOS();
                break;
            default:
                throw new IllegalArgumentException("不支持的queryType: " + queryType);
        }
        // 默认查最近24小时
        Date end = Optional.ofNullable(dto.getEndTime()).orElseGet(() -> {
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.MILLISECOND, 0);
            cal.set(Calendar.SECOND, 0);
            return cal.getTime();
        });
        Date start = Optional.ofNullable(dto.getStartTime()).orElseGet(() -> {
            Calendar cal = Calendar.getInstance();
            cal.setTime(end);
            cal.add(Calendar.MINUTE, -1440); // 24小时前
            return cal.getTime();
        });
        // 查询历史数据
        ApiPointValueQueryDTO query = new ApiPointValueQueryDTO();
        query.setPointNo(pointNo);
        query.setStart(start);
        query.setEnd(end);
        log.info("开始查询发电机组功率历史数据,测点: {}", pointNo);
        List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(query);
        // 构建返回结果
        PowerHistoryDTO result = new PowerHistoryDTO();
        result.setCategories(DateUtils.getTimeScale(start, end, 60));
        result.setDataList(chartData.stream()
                .map(pv -> new Object[]{
                        DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND),
                        pv.getV()
                })
                .collect(Collectors.toList()));
        return success(result);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerCapacitorDetDTO.java
对比新文件
@@ -0,0 +1,28 @@
package com.iailab.module.ansteel.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年04月27日
 */
@Data
public class PowerCapacitorDetDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "id")
    private String id;
    @Schema(description = "类型")
    private String type;
    @Schema(description = "电容器名称")
    private String name;
    @Schema(description = "投退指示灯")
    private Integer status;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerCapacitorHisDTO.java
对比新文件
@@ -0,0 +1,35 @@
package com.iailab.module.ansteel.api.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年04月27日
 */
@Data
public class PowerCapacitorHisDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    @Schema(description = "id")
    private String id;
    @Schema(description = "电容器名称")
    private String name;
    @Schema(description = "状态")
    private String status;
    @Schema(description = "内容")
    private String content;
    @Schema(description = "备注")
    private String remark;
    @Schema(description = "i创建时间d")
    private String createDate;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorDropdownDTO.java
@@ -22,4 +22,8 @@
    @Schema(description = "节点名称")
    private String nodeName;
    @Schema(description = "当前功率因数")
    private String curCos;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerCapacitorDetDao.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.PowerCapacitorDetEntity;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年04月27日
 */
@Mapper
public interface PowerCapacitorDetDao extends BaseDao<PowerCapacitorDetEntity> {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/dao/PowerCapacitorHisDao.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.PowerCapacitorHisEntity;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年04月27日
 */
@Mapper
public interface PowerCapacitorHisDao extends BaseDao<PowerCapacitorHisEntity> {
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorDetEntity.java
@@ -12,7 +12,7 @@
 * @createTime 2025年04月27日
 */
@Data
@TableName("t_power_adjusted_factor")
@TableName("t_power_capacitor_det")
public class PowerCapacitorDetEntity implements Serializable {
    private static final long serialVersionUID = 1L;
@@ -21,4 +21,34 @@
     */
    @TableId
    private String id;
    /**
     * 投运状态父ID
     */
    private String statusId;
    /**
     * 类型
     */
    private String type;
    /**
     * 电容器名称
     */
    private String name;
    /**
     * 测点编码
     */
    private String pointNo;
    /**
     * 备注
     */
    private String remark;
    /**
     * 排序
     */
    private Integer sort;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/entity/PowerCapacitorHisEntity.java
@@ -21,4 +21,34 @@
     */
    @TableId
    private String id;
    /**
     * 详情ID
     */
    private String detId;
    /**
     * 电容器名称
     */
    private String name;
    /**
     * 状态
     */
    private String status;
    /**
     * 内容
     */
    private String content;
    /**
     * 备注
     */
    private String remark;
    /**
     * 创建时间
     */
    private String createDate;
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorDetService.java
对比新文件
@@ -0,0 +1,16 @@
package com.iailab.module.ansteel.power.service;
import com.iailab.module.ansteel.power.entity.PowerCapacitorDetEntity;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年04月27日
 */
public interface PowerCapacitorDetService {
    List<PowerCapacitorDetEntity> list(Map<String, Object> params);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/PowerCapacitorHisService.java
对比新文件
@@ -0,0 +1,16 @@
package com.iailab.module.ansteel.power.service;
import com.iailab.module.ansteel.power.entity.PowerCapacitorHisEntity;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年04月27日
 */
public interface PowerCapacitorHisService {
    List<PowerCapacitorHisEntity> list(Map<String, Object> params);
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorDetServiceImpl.java
对比新文件
@@ -0,0 +1,35 @@
package com.iailab.module.ansteel.power.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.module.ansteel.power.dao.PowerCapacitorDetDao;
import com.iailab.module.ansteel.power.entity.PowerCapacitorDetEntity;
import com.iailab.module.ansteel.power.service.PowerCapacitorDetService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年04月27日
 */
@Slf4j
@Service
public class PowerCapacitorDetServiceImpl implements PowerCapacitorDetService {
    @Resource
    private PowerCapacitorDetDao powerCapacitorDetDao;
    @Override
    public List<PowerCapacitorDetEntity> list(Map<String, Object> params) {
        String statusId = (String) params.get("statusId");
        QueryWrapper<PowerCapacitorDetEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(StringUtils.isNotBlank(statusId), "status_id", statusId)
                .orderByAsc("sort");
        return powerCapacitorDetDao.selectList(queryWrapper);
    }
}
ansteel-biz/src/main/java/com/iailab/module/ansteel/power/service/impl/PowerCapacitorHisServiceImpl.java
对比新文件
@@ -0,0 +1,34 @@
package com.iailab.module.ansteel.power.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iailab.module.ansteel.power.dao.PowerCapacitorHisDao;
import com.iailab.module.ansteel.power.entity.PowerCapacitorHisEntity;
import com.iailab.module.ansteel.power.service.PowerCapacitorHisService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @Description
 * @createTime 2025年04月27日
 */
@Slf4j
@Service
public class PowerCapacitorHisServiceImpl implements PowerCapacitorHisService {
    @Resource
    private PowerCapacitorHisDao powerCapacitorHisDao;
    @Override
    public List<PowerCapacitorHisEntity> list(Map<String, Object> params) {
        String detId = (String) params.get("detId");
        QueryWrapper<PowerCapacitorHisEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("det_id", detId)
                .orderByDesc("create_date");
        return powerCapacitorHisDao.selectList(queryWrapper);
    }
}