From f7426b7804ad1ee1bfb3f1520ad035bcda54f852 Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期一, 28 四月 2025 17:34:25 +0800 Subject: [PATCH] 无功优化模型 --- ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java | 235 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 204 insertions(+), 31 deletions(-) diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java index c6dbdb2..fd34f95 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java @@ -7,6 +7,7 @@ import com.iailab.framework.common.util.date.DateUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.module.ansteel.api.dto.*; +import com.iailab.module.ansteel.common.utils.DecimalUtil; import com.iailab.module.ansteel.power.entity.*; import com.iailab.module.ansteel.power.service.*; import com.iailab.module.data.api.point.DataPointApi; @@ -22,10 +23,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import java.math.BigDecimal; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -75,6 +73,9 @@ @Autowired private PowerCapacitorDetService powerCapacitorDetService; + + @Autowired + private PowerNetDropdownService powerNetDropdownService; @GetMapping("/net-factor/list") @Operation(summary = "功率因数-电网拓扑") @@ -164,10 +165,39 @@ @GetMapping("/net-factor-dropdown/list") @Operation(summary = "功率因数-电网拓扑下拉列表") - public CommonResult<List<PowerNetFactorDropdownDTO>> getPowerNetFactorDropdownList(@RequestParam String nodeCode) { + public CommonResult<List<PowerNetDropdownDTO>> getPowerNetFactorDropdownList(@RequestParam String nodeCode) { log.info("nodeCode=" + nodeCode); - List<PowerNetFactorEntity> list = powerNetFactorService.listDropdown(nodeCode); - return success(ConvertUtils.sourceToTarget(list, PowerNetFactorDropdownDTO.class)); + List<PowerNetDropdownDTO> result = new ArrayList<>(); + PowerNetFactorEntity entity = powerNetFactorService.getByNodeCode(nodeCode); + if (entity == null) { + return success(result); + } + List<PowerNetDropdownEntity> list = new ArrayList<>(); + Map<String, Object> params = new HashMap<>(); + if ("望铁关口".equals(entity.getGroupName())) { + params.put("groupName", entity.getGroupName()); + params.put("neNodeName", entity.getNodeName()); + } else { + params.put("groupName", entity.getNodeName()); + } + list = powerNetDropdownService.list(params); + List<String> points = list.stream().map(item -> { + return item.getCurCos(); + }).collect(Collectors.toList()); + Map<String, Object> pointsRealValue = new HashMap<>(); + if (!CollectionUtils.isEmpty(points)) { + pointsRealValue = dataPointApi.queryPointsRealValue(points); + } + for (PowerNetDropdownEntity netDropdown : list) { + PowerNetDropdownDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerNetDropdownDTO.class); + BigDecimal curCos = BigDecimal.ZERO; + if (pointsRealValue.get(netDropdown.getCurCos()) != null) { + curCos = new BigDecimal(pointsRealValue.get(netDropdown.getCurCos()).toString()); + } + dto.setCurCos(curCos); + result.add(dto); + } + return success(result); } /** @@ -263,7 +293,7 @@ if (StringUtils.isBlank(dto.getQueryType())) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST, "queryType不能为空"); } - + log.info("id={}", dto.getId()); PowerGenStatusEntity powerGenStatus = powerGenStatusDaoService.getById(dto.getId()); if (powerGenStatus == null) { log.info("未找到code对应的数据: {}", dto.getId()); @@ -271,20 +301,22 @@ } String queryType = dto.getQueryType().toUpperCase(); + log.info("queryType={}", queryType); String pointNo; switch (queryType.toUpperCase()) { - case "D": + case "P": pointNo = powerGenStatus.getCurP(); break; - case "P": + case "Q": pointNo = powerGenStatus.getCurQ(); break; case "COS": - pointNo = powerGenStatus.getCurCOS(); + pointNo = powerGenStatus.getCurCos(); break; default: throw new IllegalArgumentException("不支持的queryType: " + queryType); } + log.info("开始查询,pointNo={}", pointNo); // 默认查最近24小时 Date end = Optional.ofNullable(dto.getEndTime()).orElseGet(() -> { @@ -334,6 +366,7 @@ @Operation(summary = "功率因数-电容器投退指示灯") public CommonResult<List<PowerCapacitorDetDTO>> getPowerCapacitorDetList(@RequestParam Map<String, Object> params) { List<PowerCapacitorDetEntity> list = powerCapacitorDetService.list(params); + log.info("list.size=" + list.size()); List<String> points = list.stream().map(item -> { return item.getPointNo(); }).collect(Collectors.toList()); @@ -345,6 +378,7 @@ List<PowerCapacitorDetDTO> result = new ArrayList<>(); for (PowerCapacitorDetEntity entity : list) { PowerCapacitorDetDTO dto = ConvertUtils.sourceToTarget(entity, PowerCapacitorDetDTO.class); + result.add(dto); dto.setStatus(0); if (!pointsRealValue.containsKey(entity.getPointNo()) || pointsRealValue.get(entity.getPointNo()) == null) { continue; @@ -353,12 +387,11 @@ if (val.compareTo(BigDecimal.ZERO) >= 0.1) { dto.setStatus(1); } - result.add(dto); } return success(result); } - @GetMapping("/capacitor-det/list") + @GetMapping("/capacitor-his/list") @Operation(summary = "功率因数-电容器投退历史") public CommonResult<List<PowerCapacitorHisDTO>> getPowerCapacitorHisList(@RequestParam Map<String, Object> params) { List<PowerCapacitorHisEntity> list = powerCapacitorHisService.list(params); @@ -434,11 +467,8 @@ if (StringUtils.isNotBlank(dto.getActivePower())) { points.add(dto.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()); } @@ -457,22 +487,159 @@ Date start = calendar.getTime(); ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); apiPointValueQueryDTO.setStart(start); - apiPointValueQueryDTO.setEnd(new Date()); apiPointValueQueryDTO.setPointNo(dto.getMaxDemand()); - List<ApiPointValueDTO> monthValues = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); - double max = 0; - for (int i = 0; i < monthValues.size() - 1; i++) { - if (max < monthValues.get(i).getV()) { - max = monthValues.get(i).getV(); - } + Object maxValue = dataPointApi.queryPointMaxValue(apiPointValueQueryDTO); + dto.setMaxDemand(maxValue == null ? "" : maxValue.toString()); + } + } + return success(result); + } + + @GetMapping("/demand-dropdown/list") + @Operation(summary = "负荷移植-功率因数下拉列表") + public CommonResult<List<PowerNetDropdownDTO>> getDemandDropdownList(@RequestParam String code) { + if (StringUtils.isBlank(code)) { + log.info("code isBlank"); + return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); + } + log.info("code=" + code); + + List<PowerNetDropdownDTO> result = new ArrayList<>(); + PowerDemandEntity entity = powerDemandService.getByCode(code); + if (entity == null) { + log.info("PowerDemandEntity is null"); + return success(result); + } + Map<String, Object> params0 = new HashMap<>(); + params0.put("groupName", entity.getName()); + List<PowerNetDropdownEntity> list = powerNetDropdownService.list(params0); + List<String> points = list.stream().map(item -> { + return item.getCurCos(); + }).collect(Collectors.toList()); + Map<String, Object> pointsRealValue = new HashMap<>(); + if (!CollectionUtils.isEmpty(points)) { + pointsRealValue = dataPointApi.queryPointsRealValue(points); + } + for (PowerNetDropdownEntity netDropdown : list) { + PowerNetDropdownDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerNetDropdownDTO.class); + BigDecimal curCos = BigDecimal.ZERO; + if (pointsRealValue.get(netDropdown.getCurCos()) != null) { + curCos = new BigDecimal(pointsRealValue.get(netDropdown.getCurCos()).toString()); + } + dto.setCurCos(curCos); + result.add(dto); + } + return success(result); + } + + @PostMapping("/demand-query/list") + @Operation(summary = "负荷移植-功率因数查询") + public CommonResult<List<PowerNetDropdownDTO>> getDemandDropdownList(@RequestBody PowerDemandQueryDTO queryDto) { + List<PowerNetDropdownDTO> result = new ArrayList<>(); + if (StringUtils.isBlank(queryDto.getCode())) { + log.info("code isBlank"); + } + log.info("code=" + queryDto.getCode()); + if (StringUtils.isBlank(queryDto.getNodeCode())) { + log.info("NodeCode isBlank"); + } + PowerDemandEntity entity = powerDemandService.getByCode(queryDto.getCode()); + if (entity == null) { + log.info("PowerDemandEntity is null"); + return success(result); + } + Map<String, Object> params0 = new HashMap<>(); + params0.put("groupName", entity.getName()); + List<PowerNetDropdownEntity> list = powerNetDropdownService.list(params0); + List<String> points = list.stream().map(item -> { + return item.getCurCos(); + }).collect(Collectors.toList()); + if (queryDto.getCurCos() == null) { + log.info("查询当前值"); + Map<String, Object> pointsRealValue = new HashMap<>(); + if (!CollectionUtils.isEmpty(points)) { + pointsRealValue = dataPointApi.queryPointsRealValue(points); + } + for (PowerNetDropdownEntity netDropdown : list) { + PowerNetDropdownDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerNetDropdownDTO.class); + BigDecimal curCos = BigDecimal.ZERO; + if (pointsRealValue.get(netDropdown.getCurCos()) != null) { + curCos = new BigDecimal(pointsRealValue.get(netDropdown.getCurCos()).toString()); } - dto.setMaxDemand(String.valueOf(max)); + dto.setCurCos(curCos); + 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(points); + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.MILLISECOND, 0); + calendar.set(Calendar.SECOND, 0); + Date startTime = queryDto.getStartTime(); + Date endTime = queryDto.getEndTime(); + if (endTime == null) { + endTime = calendar.getTime(); + } + if (startTime == null) { + calendar.add(Calendar.DAY_OF_YEAR, -1); + startTime = calendar.getTime(); + } + 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); } + ApiPointValueQueryDTO pointValueQueryDTO = new ApiPointValueQueryDTO(); + pointValueQueryDTO.setStart(startTime); + pointValueQueryDTO.setEnd(endTime); + pointValueQueryDTO.setPointNo(powerNetDropdownEntity.getCurCos()); + List<ApiPointValueDTO> hisValue = dataPointApi.queryPointHistoryValue(pointValueQueryDTO); + if (CollectionUtils.isEmpty(hisValue)) { + log.info("hisValue is null"); + } + ApiPointValueDTO curValue = null; + Collections.reverse(hisValue); + for (ApiPointValueDTO valueDTO : hisValue) { + curValue = valueDTO; + if ((queryDto.getCurCos().doubleValue() - valueDTO.getV()) <= 0.0001) { + break; + } + } + if (curValue == null) { + log.info("curValue is null"); + return success(result); + } + log.info("curValue=" + curValue); + for (PowerNetDropdownEntity netDropdown : list) { + PowerNetDropdownDTO dto = ConvertUtils.sourceToTarget(netDropdown, PowerNetDropdownDTO.class); + if (CollectionUtils.isEmpty(pointsHisValues.get(netDropdown.getCurCos()))) { + continue; + } + Map<String, BigDecimal> pointValueMap = new HashMap<>(); + pointsHisValues.get(netDropdown.getCurCos()).forEach(item -> { + pointValueMap.put(item.get("time").toString(), DecimalUtil.toBigDecimal(item.get("value"))); + + }); + dto.setCurCos(pointValueMap.get(DateUtils.format(curValue.getT(),DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND))); + result.add(dto); + } } - return success(result); } @@ -480,6 +647,7 @@ @Operation(summary = "功率因数-根据nodeName获取最近1440min历史数据,月最大,最小值") public CommonResult<PowerHistoryDTO> getPowerHistoryData(@RequestBody PowerNetFactorHisReqDTO dto) { log.info("PowerNetFactorHisReqDTO=" + JSONObject.toJSONString(dto)); + PowerHistoryDTO result = new PowerHistoryDTO(); String nodeCode = dto.getNodeCode(); if (StringUtils.isBlank(nodeCode)) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); @@ -488,25 +656,30 @@ if (StringUtils.isBlank(queryType)) { return CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST); } - PowerNetFactorEntity powerNetFactor = powerNetFactorService.getByNodeCode(nodeCode); - PowerHistoryDTO result = new PowerHistoryDTO(); - if (powerNetFactor == null) { + PowerNetFactorQuery powerNetFactorQuery = null; + PowerNetFactorEntity powerNetFactorEntity = powerNetFactorService.getByNodeCode(nodeCode); + PowerNetDropdownEntity powerNetDropdownEntity = powerNetDropdownService.getByNodeCode(nodeCode); + if (powerNetFactorEntity != null) { + powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetFactorEntity, PowerNetFactorQuery.class); + } else if (powerNetDropdownEntity != null) { + powerNetFactorQuery = ConvertUtils.sourceToTarget(powerNetDropdownEntity, PowerNetFactorQuery.class); + } + if (powerNetFactorQuery == null) { log.info("powerNetFactor is null"); return success(result); } log.info("开始查询,"); - ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); String pointNo = ""; switch (queryType.toUpperCase()) { case "P": - pointNo = powerNetFactor.getCurP(); + pointNo = powerNetFactorQuery.getCurP(); break; case "Q": - pointNo = powerNetFactor.getCurQ(); + pointNo = powerNetFactorQuery.getCurQ(); break; case "COS": - pointNo = powerNetFactor.getCurCos(); + pointNo = powerNetFactorQuery.getCurCos(); break; default: break; -- Gitblit v1.9.3