鞍钢鲅鱼圈能源管控系统后端代码
潘志宝
昨天 f0e0b56862ea08b8152c33e6977b30cd1b284186
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -27,6 +27,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static com.iailab.framework.common.pojo.CommonResult.success;
@@ -157,8 +158,8 @@
    @GetMapping("/net-factor-dropdown/list")
    @Operation(summary = "功率因数-电网拓扑下拉列表")
    public CommonResult<List<PowerNetFactorDropdownDTO>> getPowerNetFactorDropdownList(@RequestParam String nodeName) {
        List<PowerNetFactorEntity> list = powerNetFactorService.listDropdown(nodeName);
    public CommonResult<List<PowerNetFactorDropdownDTO>> getPowerNetFactorDropdownList(@RequestParam String nodeCode) {
        List<PowerNetFactorEntity> list = powerNetFactorService.listDropdown(nodeCode);
        List<PowerNetFactorDropdownDTO> result = ConvertUtils.sourceToTarget(list, PowerNetFactorDropdownDTO.class);
        return success(result);
    }
@@ -362,62 +363,57 @@
        return success(result);
    }
    @GetMapping("/net-factor/historyData")
    @PostMapping("/net-factor/history")
    @Operation(summary = "功率因数-根据nodeName获取最近1440min历史数据,月最大,最小值")
    public CommonResult<PowerHistoryDTO> getPowerHistoryData(@RequestParam Map<String, Object> params) {
        PowerNetFactorEntity powerNetFactor = powerNetFactorService.list(params).get(0);
    public CommonResult<PowerHistoryDTO> getPowerHistoryData(@RequestBody PowerNetFactorHisReqDTO dto) {
        log.info("PowerNetFactorHisReqDTO=" + JSONObject.toJSONString(dto));
        String nodeCode = dto.getNodeCode();
        if (StringUtils.isBlank(nodeCode)) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST);
        }
        String queryType = dto.getQueryType();
        if (StringUtils.isBlank(queryType)) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST);
        }
        PowerNetFactorEntity powerNetFactor = powerNetFactorService.getByNodeCode(nodeCode);
        PowerHistoryDTO result = new PowerHistoryDTO();
        if (powerNetFactor == null) {
            log.info("powerNetFactor is null");
            return success(result);
        }
        log.info("开始查询,");
        ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO();
        String pointNo = "";
        Date start = null;
        Date end = null;
        switch (params.get("queryType").toString()) {
            case "p":
        switch (queryType.toUpperCase()) {
            case "P":
                pointNo = powerNetFactor.getCurP();
            case "q":
                break;
            case "Q":
                pointNo = powerNetFactor.getCurQ();
            case "cos":
                break;
            case "COS":
                pointNo = powerNetFactor.getCurCos();
                break;
            default:
                break;
        }
        //查询图表
        apiPointValueQueryDTO.setPointNo(pointNo);
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (params.get("startTime") != null) {
            try {
                start = ft.parse(params.get("startTime").toString());
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        } else {
            start = new Date(System.currentTimeMillis() - 1440L * 60 * 1000);
        }
        apiPointValueQueryDTO.setStart(start);
        if (params.get("endTime") != null) {
            try {
                end = ft.parse(params.get("endTime").toString());
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        } else {
            end = new Date();
        }
        Calendar calendar0 = Calendar.getInstance();
        calendar0.set(Calendar.MILLISECOND, 0);
        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();
        apiPointValueQueryDTO.setEnd(end);
        apiPointValueQueryDTO.setStart(start);
        List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
        List<List<Object>> dataList = new ArrayList<>();
        for (ApiPointValueDTO dto : chartData) {
            List<Object> data = new ArrayList<>();
            String time = ft.format(dto.getT());
            double value = dto.getV();
            data.add(time);
            data.add(value);
        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);
@@ -435,17 +431,12 @@
        apiPointValueQueryDTO.setStart(start);
        apiPointValueQueryDTO.setEnd(new Date());
        List<ApiPointValueDTO> monthChartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO);
        List<List<Object>> monthDataList = new ArrayList<>();
        for (ApiPointValueDTO dto : monthChartData) {
            List<Object> data = new ArrayList<>();
            String time = ft.format(dto.getT());
            double value = dto.getV();
            data.add(time);
            data.add(value);
            monthDataList.add(data);
        List<Double> monthValues = new ArrayList<>();
        if (CollectionUtils.isEmpty(monthChartData)) {
            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());
        }
        result.setMax(getMax(monthDataList));
        result.setMin(getMin(monthDataList));
        return success(result);
    }
@@ -470,23 +461,99 @@
    }
    @GetMapping("/adjust-factor")
    @Operation(summary = "负荷移植-调整后的功率因数与无功倒送量")
    @Operation(summary = "功率因数-调整后的功率因数与无功倒送量")
    public CommonResult<Map<String, Double>> getPowerAdjustFactor(@RequestParam Map<String, Object> params) {
        List<PowerAdjustedFactorEntity> list = powerAdjustedFactorService.list(params);
        List<PowerAdjustedFactorDTO> dtoList = ConvertUtils.sourceToTarget(list, PowerAdjustedFactorDTO.class);
        Map<String, Double> result = new HashMap<>();
        if (CollectionUtils.isEmpty(list)) {
            log.info("PowerAdjustedFactor List is empty");
            return success(result);
        }
        List<String> points = new ArrayList<>();
        Map<String, Object> dataMap = new HashMap<>();
        for (PowerAdjustedFactorDTO dto : dtoList) {
            points.add(dto.getPointNo());
            if (StringUtils.isNotBlank(dto.getPointNo())) {
                points.add(dto.getPointNo());
            }
        }
        dataMap = dataPointApi.queryPointsRealValue(points);
        if (!CollectionUtils.isEmpty(points)) {
            dataMap = dataPointApi.queryPointsRealValue(points);
        }
        for (PowerAdjustedFactorDTO powerAdjustedFactorDTO : dtoList) {
            result.put(powerAdjustedFactorDTO.getName(), Double.parseDouble(dataMap.get(powerAdjustedFactorDTO.getPointNo()).toString()));
            Double value = dataMap.get(powerAdjustedFactorDTO.getPointNo()) == null ? 0 : Double.parseDouble(dataMap.get(powerAdjustedFactorDTO.getPointNo()).toString());
            result.put(powerAdjustedFactorDTO.getName(), value);
        }
        return success(result);
    }
    @PostMapping("/demand/history")
    @Operation(summary = "负荷移植-实测需量,有功功率 历史")
    public CommonResult<PowerHistoryDTO> getPowerDemandHistory(@RequestBody PowerDemandHisReqDTO dto) {
        log.info("请求参数: {}", JSONObject.toJSONString(dto));
        // 参数校验
        if (StringUtils.isBlank(dto.getCode())) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "code不能为空");
        }
        if (StringUtils.isBlank(dto.getQueryType())) {
            return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空");
        }
        PowerDemandEntity powerDemand = powerDemandService.getByCode(dto.getCode());
        if (powerDemand == null) {
            log.info("未找到code对应的数据: {}", dto.getCode());
            return success(new PowerHistoryDTO());
        }
        String queryType = dto.getQueryType().toUpperCase();
        String pointNo;
        switch (queryType.toUpperCase()) {
            case "D":
                pointNo = powerDemand.getCurDemand();
                break;
            case "P":
                pointNo = powerDemand.getActivePower();
                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);
    }
}