鞍钢鲅鱼圈能源管控系统后端代码
潘志宝
2025-05-19 1f8b4cacad4152fe0e98bffb9348c9e2199c02a9
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java
@@ -99,6 +99,10 @@
    @Autowired
    private PowerMaxdemandDetService powerMaxdemandDetService;
    public static final String VALUE = "value";
    public static final String TIME = "time";
    @GetMapping("/net-factor/list")
    @Operation(summary = "功率因数-电网拓扑")
    public CommonResult<List<PowerNetFactorDTO>> getPowerNetFactorList(@RequestParam Map<String, Object> params) {
@@ -571,47 +575,55 @@
    @GetMapping("/demand/list")
    @Operation(summary = "负荷移植-月最大需量,实测需量,有功功率")
    public CommonResult<List<PowerDemandDTO>> getPowerDemandList(@RequestParam Map<String, Object> params) {
        List<PowerDemandDTO> result = new ArrayList<>();
        List<PowerDemandEntity> list = powerDemandService.list(params);
        List<PowerDemandDTO> result = ConvertUtils.sourceToTarget(list, PowerDemandDTO.class);
        if (CollectionUtils.isEmpty(result)) {
            return success(result);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        Date start = calendar.getTime();
        Date end = new Date();
        for (PowerDemandDTO dto : result) {
        for (PowerDemandEntity entity : list) {
            PowerDemandDTO demandDTO = new PowerDemandDTO();
            demandDTO.setId(entity.getId());
            demandDTO.setCode(entity.getCode());
            demandDTO.setName(entity.getName());
            List<String> points = new ArrayList<>();
            if (StringUtils.isNotBlank(dto.getCurDemand())) {
                points.add(dto.getCurDemand());
            if (StringUtils.isNotBlank(entity.getCurDemand())) {
                points.add(entity.getCurDemand());
            }
            if (StringUtils.isNotBlank(dto.getActivePower())) {
                points.add(dto.getActivePower());
            if (StringUtils.isNotBlank(entity.getActivePower())) {
                points.add(entity.getActivePower());
            }
            if (!CollectionUtils.isEmpty(points)) {
                Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points);
                if (pointsRealValue.get(dto.getCurDemand()) != null) {
                    dto.setCurDemand(pointsRealValue.get(dto.getCurDemand()).toString());
                if (pointsRealValue.get(entity.getCurDemand()) != null) {
                    demandDTO.setCurDemand(new BigDecimal(pointsRealValue.get(entity.getCurDemand()).toString()));
                }
                if (pointsRealValue.get(dto.getActivePower()) != null) {
                    dto.setActivePower(pointsRealValue.get(dto.getActivePower()).toString());
                if (pointsRealValue.get(entity.getActivePower()) != null) {
                    demandDTO.setActivePower(new BigDecimal(pointsRealValue.get(entity.getActivePower()).toString()));
                }
            }
            if (!StringUtils.isEmpty(dto.getMaxDemand())) {
                Date start = calendar.getTime();
            if (!StringUtils.isEmpty(entity.getMaxDemand())) {
                ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO();
                apiPointValueQueryDTO.setStart(start);
                apiPointValueQueryDTO.setPointNo(dto.getMaxDemand());
                Map<String, Object> maxValue = dataPointApi.queryPointMaxValue(apiPointValueQueryDTO);
                apiPointValueQueryDTO.setEnd(end);
                apiPointValueQueryDTO.setPointNo(entity.getMaxDemand());
                Map<String, Object> maxValue = dataPointApi.queryPointMaxTimeValue(apiPointValueQueryDTO);
                if (maxValue != null) {
                    dto.setMaxDemand(maxValue.get(dto.getMaxDemand()) == null ? "" : maxValue.get(dto.getMaxDemand()).toString());
                    demandDTO.setMaxDemand(new BigDecimal(maxValue.get(VALUE).toString()));
                    demandDTO.setOccurTime(DateUtils.parse( maxValue.get(TIME).toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
                }
            }
            result.add(demandDTO);
        }
        return success(result);
    }
@@ -655,15 +667,11 @@
    @PostMapping("/demand-query/list")
    @Operation(summary = "负荷移植-需量值查询")
    public CommonResult<List<PowerDemandQueryRespDTO>> getDemandDropdownList(@RequestBody PowerDemandQueryDTO queryDto) {
    public CommonResult<List<PowerDemandQueryRespDTO>> getDemandQueryList(@RequestBody PowerDemandQueryDTO queryDto) {
        List<PowerDemandQueryRespDTO> result = new ArrayList<>();
        if (StringUtils.isBlank(queryDto.getCode())) {
            log.info("code isBlank");
            return success(result);
        }
        log.info("code=" + queryDto.getCode());
        if (StringUtils.isBlank(queryDto.getNodeCode())) {
            log.info("NodeCode isBlank");
        }
        PowerDemandEntity entity = powerDemandService.getByCode(queryDto.getCode());
        if (entity == null) {
@@ -687,91 +695,66 @@
        params0.put("groupName", entity.getName());
        List<PowerNetDropdownEntity> dropdownList = powerNetDropdownService.list(params0);
        List<String> pointNos = new ArrayList<>();
        Map<String, String> demandPointMap = new HashMap<>();
        for (PowerNetDropdownEntity netDropdown : dropdownList) {
            demandPointMap.put(netDropdown.getNodeCode(), netDropdown.getExt1());
            if (StringUtils.isNotBlank(netDropdown.getExt1())) {
                pointNos.add(netDropdown.getExt1());
            }
        }
        if (StringUtils.isBlank(queryDto.getNodeCode()) || queryDto.getCurDemand() == null) {
            log.info("查询当前值");
            Map<String, Object> pointsRealValue = new HashMap<>();
            if (!CollectionUtils.isEmpty(pointNos)) {
                pointsRealValue = dataPointApi.queryPointsRealValue(pointNos);
        for(PowerNetDropdownEntity netDropdown : dropdownList) {
            PowerDemandQueryRespDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerDemandQueryRespDTO.class);
            dto.setCurDemand(null);
            result.add(dto);
        }
        if (queryDto.getCurDemand() == null) {
            log.info("查询值为空,显示空白");
            return success(result);
        }
        ApiPointValueQueryDTO queryCodeValue = new ApiPointValueQueryDTO();
        queryCodeValue.setStart(startTime);
        queryCodeValue.setEnd(endTime);
        List<ApiPointValueDTO> codeValueList = dataPointApi.queryPointHistoryValue(queryCodeValue);
        if (CollectionUtils.isEmpty(codeValueList)) {
            return success(result);
        }
        ApiPointValueDTO curValue = new ApiPointValueDTO();
        for (ApiPointValueDTO valueDTO : codeValueList) {
            if (Math.abs(queryDto.getCurDemand().doubleValue() - valueDTO.getV()) <= 0.0001) {
                log.info("curValue is find");
                curValue = valueDTO;
                break;
            }
            for (PowerNetDropdownEntity netDropdown : dropdownList) {
                PowerDemandQueryRespDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerDemandQueryRespDTO.class);
                BigDecimal demand = null;
                if (pointsRealValue.get(netDropdown.getExt1()) != null) {
                    demand = new BigDecimal(pointsRealValue.get(netDropdown.getExt1()).toString());
                }
                dto.setCurDemand(demand);
                dto.setDataTime(calendar.getTime());
                result.add(dto);
            }
        } else {
            log.info("查询历史值");
            String nodeCode = queryDto.getNodeCode();
            if (StringUtils.isBlank(nodeCode)) {
                log.info("nodeCode isBlank");
                return success(result);
            }
            PowerNetDropdownEntity powerNetDropdownEntity = powerNetDropdownService.getByNodeCode(nodeCode);
            if (powerNetDropdownEntity == null) {
                log.info("PowerNetDropdownEntity is null");
                return success(result);
            }
            ApiPointsValueQueryDTO valueQueryDTO = new ApiPointsValueQueryDTO();
            valueQueryDTO.setPointNos(pointNos);
            valueQueryDTO.setStart(startTime);
            valueQueryDTO.setEnd(endTime);
            Map<String, List<Map<String, Object>>> pointsHisValues = dataPointApi.queryPointsHistoryValue(valueQueryDTO);
            if (CollectionUtils.isEmpty(pointsHisValues)) {
                log.info("pointsHisValues is null");
                return success(result);
            }
        }
        log.info("curValue={}", curValue);
        if (curValue.getT() == null) {
            log.info("curValue is not find");
            return success(result);
        }
            ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO();
            pointValueQueryDTO.setStart(startTime);
            pointValueQueryDTO.setEnd(endTime);
            pointValueQueryDTO.setPointNo(powerNetDropdownEntity.getExt1());
            List<ApiPointValueDTO> hisValue = dataPointApi.queryPointHistoryValue(pointValueQueryDTO);
            if (CollectionUtils.isEmpty(hisValue)) {
                log.info("hisValue is null");
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTime(curValue.getT());
        ApiPointsValueQueryDTO valueQueryDTO = new ApiPointsValueQueryDTO();
        valueQueryDTO.setPointNos(pointNos);
        valueQueryDTO.setEnd(calendar1.getTime());
        calendar1.add(Calendar.MINUTE, -1);
        valueQueryDTO.setStart(calendar1.getTime());
        Map<String, List<Map<String, Object>>> pointsHisValues = dataPointApi.queryPointsHistoryValue(valueQueryDTO);
        if (CollectionUtils.isEmpty(pointsHisValues)) {
            log.info("pointsHisValues is null");
            return success(result);
        }
        for(PowerDemandQueryRespDTO respDTO : result) {
            if (StringUtils.isBlank(demandPointMap.get(respDTO.getNodeCode()))) {
                continue;
            }
            ApiPointValueDTO curValue = null;
            Collections.reverse(hisValue);
            for (ApiPointValueDTO valueDTO : hisValue) {
                if ((queryDto.getCurDemand().doubleValue() - valueDTO.getV()) <= 0.0001) {
                    curValue = valueDTO;
                    log.info("curValue is find");
                    break;
                }
            List<Map<String, Object>> hisList = pointsHisValues.get(demandPointMap.get(respDTO.getNodeCode()));
            if (CollectionUtils.isEmpty(hisList)) {
                continue;
            }
            if (curValue == null) {
                log.info("curValue is null");
                for (PowerNetDropdownEntity netDropdown : dropdownList) {
                    PowerDemandQueryRespDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerDemandQueryRespDTO.class);
                    if (dto.getNodeCode().equals(nodeCode)) {
                        dto.setCurDemand(queryDto.getCurDemand());
                    }
                    result.add(dto);
                }
                return success(result);
            }
            log.info("curValue=" + curValue);
            for (PowerNetDropdownEntity netDropdown : dropdownList) {
                PowerDemandQueryRespDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerDemandQueryRespDTO.class);
                if (!CollectionUtils.isEmpty(pointsHisValues.get(netDropdown.getExt1()))) {
                    Map<String, BigDecimal> pointValueMap = new HashMap<>();
                    pointsHisValues.get(netDropdown.getExt1()).forEach(item -> {
                        pointValueMap.put(item.get("time").toString(), DecimalUtil.toBigDecimal(item.get("value")));
                    });
                    dto.setCurDemand(pointValueMap.get(DateUtils.format(curValue.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)));
                    dto.setDataTime(curValue.getT());
                }
                result.add(dto);
            }
            Map<String, Object> valueMap = hisList.get(hisList.size() - 1);
            respDTO.setDataTime(DateUtils.parse(valueMap.get("time").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
            respDTO.setCurDemand( DecimalUtil.toBigDecimal(valueMap.get("value")));
        }
        return success(result);
    }
@@ -849,12 +832,13 @@
        start = calendar.getTime();
        apiPointValueQueryDTO.setStart(start);
        apiPointValueQueryDTO.setEnd(new Date());
        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());
            result.setMax(monthValues.stream().max(Double::compareTo).get());
            result.setMin(monthValues.stream().min(Double::compareTo).get());
        Map<String, Object> maxV = dataPointApi.queryPointMaxValueRange(apiPointValueQueryDTO);
        Map<String, Object> minV = dataPointApi.queryPointMaxValueRange(apiPointValueQueryDTO);
        if (maxV != null && maxV.containsKey(pointNo)) {
            result.setMax(new BigDecimal(maxV.get(pointNo).toString()));
        }
        if (minV != null && minV.containsKey(pointNo)) {
            result.setMin(new BigDecimal(minV.get(pointNo).toString()));
        }
        return success(result);
    }
@@ -939,13 +923,14 @@
            apiPointValueQueryDTO1.setStart(start1);
            apiPointValueQueryDTO1.setEnd(new Date());
            apiPointValueQueryDTO1.setPointNo(pointNo);
            List<ApiPointValueDTO> monthChartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO1);
            if (!CollectionUtils.isEmpty(monthChartData)) {
                List<Double> monthValues = monthChartData.stream().map(item -> item.getV()).collect(Collectors.toList());
                powerHistoryDTO.setMax(monthValues.stream().max(Double::compareTo).get());
                powerHistoryDTO.setMin(monthValues.stream().min(Double::compareTo).get());
            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()));
            }
            result.put(nodeCode, powerHistoryDTO);
        }
        return success(result);
@@ -1050,9 +1035,9 @@
    @PostMapping("/demand/history-list")
    @Operation(summary = "负荷移植-实测需量有功功率历史(多code)")
    public CommonResult<LinkedHashMap<String, List<Object[]>>> getPowerDemandHistoryList(@RequestBody PowerDemandHisReqDTO dto) {
    public CommonResult<LinkedHashMap<String, PowerHistoryDTO>> getPowerDemandHistoryList(@RequestBody PowerDemandHisReqDTO dto) {
        log.info("请求参数: {}", JSONObject.toJSONString(dto));
        LinkedHashMap<String, List<Object[]>> result = new LinkedHashMap<>();
        LinkedHashMap<String, PowerHistoryDTO> result = new LinkedHashMap<>();
        // 参数校验
        if (CollectionUtils.isEmpty(dto.getCodeList())) {
@@ -1071,7 +1056,16 @@
            startTime = cal.getTime();
        }
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(Calendar.DAY_OF_MONTH, 1);
        calendar1.set(Calendar.HOUR_OF_DAY, 0);
        calendar1.set(Calendar.MINUTE, 0);
        calendar1.set(Calendar.SECOND, 0);
        calendar1.set(Calendar.MILLISECOND, 0);
        Date start1 = calendar1.getTime();
        for (String code : dto.getCodeList()) {
            PowerHistoryDTO powerHistoryDTO = new PowerHistoryDTO();
            PowerNetFactorQuery powerNetFactorQuery = new PowerNetFactorQuery();
            PowerDemandEntity powerDemandEntity = powerDemandService.getByCode(code);
            PowerNetDropdownEntity powerNetDropdownEntity = powerNetDropdownService.getByNodeCode(code);
@@ -1113,7 +1107,23 @@
                    })
                    .collect(Collectors.toList());
            result.put(code, dataList);
            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()));
            }
            result.put(code, powerHistoryDTO);
        }
        return success(result);