From d8a4a8ad6cd2d55b78cfe203a0c467e742297ced Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期一, 16 六月 2025 16:56:55 +0800 Subject: [PATCH] getPowerFactorExportDay --- ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java | 258 ++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 201 insertions(+), 57 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 aa6cdd4..c783374 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 @@ -13,7 +13,6 @@ import com.iailab.module.ansteel.api.vo.PowerMaxDemandMainPageReqVO; import com.iailab.module.ansteel.common.constant.CommonConstant; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; -import com.iailab.module.ansteel.common.enums.TransferTypeEnum; import com.iailab.module.ansteel.common.utils.DecimalUtil; import com.iailab.module.ansteel.common.utils.PowerUtil; import com.iailab.module.ansteel.power.entity.*; @@ -27,19 +26,15 @@ import com.iailab.module.model.api.mcs.dto.PredictLastValueReqVO; import com.iailab.module.model.api.mdk.MdkApi; import com.iailab.module.model.api.mdk.dto.MdkScheduleReqDTO; -import com.iailab.module.model.api.mdk.dto.MdkScheduleRespDTO; import io.swagger.v3.oas.annotations.Operation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; -import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; -import java.lang.reflect.Array; import java.math.BigDecimal; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; import static com.iailab.framework.common.pojo.CommonResult.error; @@ -115,10 +110,10 @@ public static final String TIME = "time"; - private String pointNo = "F0000201825"; + //private String pointNo = "F0000201825"; @GetMapping("/net-factor/list") - @Operation(summary = "功率因数-电网拓扑") + @Operation(summary = "功率因数-电网拓扑列表") public CommonResult<List<PowerNetFactorDTO>> getPowerNetFactorList(@RequestParam Map<String, Object> params) { log.info("功率因数电网拓扑"); List<PowerNetFactorDTO> result = new ArrayList<>(); @@ -352,7 +347,7 @@ Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points); if (pointsRealValue.get(entity.getCurQ()) != null) { BigDecimal curQ = new BigDecimal(pointsRealValue.get(entity.getCurQ()).toString()); - if (curQ.compareTo(BigDecimal.ZERO) == entity.getCurFlag()) { + if (entity.getCurFlag() != null && curQ.compareTo(BigDecimal.ZERO) == entity.getCurFlag()) { message = entity.getNodeName() + "发生无功返送;"; } } @@ -844,6 +839,106 @@ return success(result); } + @PostMapping("/net-factor/export-day") + @Operation(summary = "功率因数-电网拓扑功率导出(功率日累计)") + public CommonResult<List<PowerFactorExcelDTO>> getPowerFactorExportDay(@RequestBody PowerFactorExcelReqDTO dto) { + List<PowerFactorExcelDTO> result = new ArrayList<>(); + if (dto.getStartTime() == null) { + dto.setStartTime(new Date()); + } + if (dto.getEndTime() == null) { + dto.setEndTime(new Date()); + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(dto.getStartTime()); + calendar.set(Calendar.MILLISECOND, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.HOUR_OF_DAY, 0); + Date startTime = calendar.getTime(); + calendar.setTime(dto.getEndTime()); + calendar.set(Calendar.MILLISECOND, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.HOUR_OF_DAY, 23); + Date endTime = calendar.getTime(); + + String pointNo = "="; + String[] pointNoArr = new String[2]; + String queryType = dto.getQueryType(); + PowerNetFactorEntity powerNetFactorEntity = powerNetFactorService.getByNodeCode(dto.getNodeCode()); + Calendar curDay = Calendar.getInstance(); + curDay.setTime(startTime); + do { + PowerFactorExcelDTO excelDTO = new PowerFactorExcelDTO(); + switch (queryType.toUpperCase()) { + case "P": + pointNo = powerNetFactorEntity.getCurP(); + break; + case "Q": + pointNo = powerNetFactorEntity.getCurQ(); + break; + default: + return success(result); + } + if (StringUtils.isEmpty(pointNo)) { + return success(result); + } + + List<Double> valueList = new ArrayList<>(); + ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); + apiPointValueQueryDTO.setPointNo(pointNo); + apiPointValueQueryDTO.setStart(curDay.getTime()); + curDay.add(Calendar.DAY_OF_YEAR, 1); + apiPointValueQueryDTO.setEnd(curDay.getTime()); + List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); + 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(); + valueList.add(pv.getV()); + } + + + double day = 0; + double max = 0; + double min = 0; + double avg = 0; + double fsl = 0; + if (!CollectionUtils.isEmpty(valueList)) { + day = valueList.stream().mapToDouble(Double::doubleValue).sum(); + max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble(); + min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble(); + avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble(); + + if (powerNetFactorEntity.getCurFlag() != null && powerNetFactorEntity.getCurFlag().intValue() != 0) { + for ( Double val : valueList) { + if (new BigDecimal(val).compareTo(BigDecimal.ZERO) != powerNetFactorEntity.getCurFlag()) { + // 未发生返送 + continue; + } + fsl += val; + } + } + } + + excelDTO.setDay(new BigDecimal(day).setScale(2, BigDecimal.ROUND_HALF_UP)); + excelDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); + excelDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); + excelDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); + + // 当查询为P, Q,且有返送flag时 计算 返送累计 + if (("P".equals(queryType.toUpperCase()) || "Q".equals(queryType.toUpperCase())) && + powerNetFactorEntity.getCurFlag() != null && + powerNetFactorEntity.getCurFlag().intValue() != 0) { + excelDTO.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP)); + } + + excelDTO.setDate(DateUtils.format(apiPointValueQueryDTO.getStart())); + } while (curDay.getTime().getTime() <= endTime.getTime()); + return success(result); + } + @PostMapping("/net-factor/history") @Operation(summary = "功率因数-电网拓扑功率历史") public CommonResult<PowerHistoryDTO> getPowerHistoryData(@RequestBody PowerNetFactorHisReqDTO dto) { @@ -872,6 +967,7 @@ log.info("开始查询,"); ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); String pointNo = ""; + String[] pointNoArr = new String[2]; switch (queryType.toUpperCase()) { case "P": pointNo = powerNetFactorQuery.getCurP(); @@ -882,11 +978,22 @@ case "COS": pointNo = powerNetFactorQuery.getCurCos(); break; + case "DAYCOS": + pointNoArr[0] = powerNetFactorEntity.getPDay(); + pointNoArr[1] = powerNetFactorEntity.getQDay(); + break; + case "MONTHCOS": + pointNoArr[0] = powerNetFactorEntity.getPMon(); + pointNoArr[1] = powerNetFactorEntity.getQMon(); + break; default: break; } + + //查询图表 - apiPointValueQueryDTO.setPointNo(pointNo); + List<Object[]> dataList = new ArrayList<>(); + Calendar calendar0 = Calendar.getInstance(); calendar0.set(Calendar.MILLISECOND, 0); calendar0.set(Calendar.SECOND, 0); @@ -895,16 +1002,42 @@ Date start = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime(); apiPointValueQueryDTO.setEnd(end); apiPointValueQueryDTO.setStart(start); - List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); - 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); result.setCategories(categories); + if (StringUtils.isNotBlank(pointNo)) { + apiPointValueQueryDTO.setPointNo(pointNo); + List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); + 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); + } + + } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) { + apiPointValueQueryDTO.setPointNo(pointNoArr[0]); + List<ApiPointValueDTO> chartDataP = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); + Map<String, Double> dataMapP = new HashMap<>(); + for (ApiPointValueDTO pv : chartDataP) { + dataMapP.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); + } + + apiPointValueQueryDTO.setPointNo(pointNoArr[1]); + List<ApiPointValueDTO> chartDataQ = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); + Map<String, Double> dataMapQ = new HashMap<>(); + for (ApiPointValueDTO pv : chartDataQ) { + dataMapQ.put(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND), pv.getV()); + } + + for (String cate : categories) { + Object[] data = new Object[2]; + data[0] = cate; + data[1] = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate)); + dataList.add(data); + } + } + result.setDataList(dataList); //查询月最大最小值 @@ -969,6 +1102,7 @@ log.info("开始查询,"); ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); String pointNo = ""; + String[] pointNoArr = new String[2]; switch (queryType.toUpperCase()) { case "P": pointNo = powerNetFactorQuery.getCurP(); @@ -979,60 +1113,70 @@ case "COS": pointNo = powerNetFactorQuery.getCurCos(); break; + case "DAYCOS": + pointNoArr[0] = powerNetFactorEntity.getPDay(); + pointNoArr[1] = powerNetFactorEntity.getQDay(); + break; + case "MONTHCOS": + pointNoArr[0] = powerNetFactorEntity.getPMon(); + pointNoArr[1] = powerNetFactorEntity.getQMon(); + break; default: break; } //查询图表 - apiPointValueQueryDTO.setPointNo(pointNo); apiPointValueQueryDTO.setEnd(end0); apiPointValueQueryDTO.setStart(start0); - List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); List<Object[]> dataList = new ArrayList<>(); - List<Double> valueList = 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); - valueList.add(pv.getV()); - } - 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())); - }*/ + if (StringUtils.isNotBlank(pointNo)) { + List<Double> valueList = new ArrayList<>(); + apiPointValueQueryDTO.setPointNo(pointNo); + List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); + 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); + valueList.add(pv.getV()); + } - double fsl = 0; - double max = 0; - double min = 0; - double avg = 0; - if (!CollectionUtils.isEmpty(valueList)) { - max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble(); - min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble(); - avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble(); + double fsl = 0; + double max = 0; + double min = 0; + double avg = 0; + if (!CollectionUtils.isEmpty(valueList)) { + max = valueList.stream().mapToDouble(Double::doubleValue).max().getAsDouble(); + min = valueList.stream().mapToDouble(Double::doubleValue).min().getAsDouble(); + avg = valueList.stream().mapToDouble(Double::doubleValue).average().getAsDouble(); - for (Double val : valueList) { - if (val < 0) { - fsl += val; + if (powerNetFactorQuery.getCurFlag() != null && powerNetFactorQuery.getCurFlag().intValue() != 0) { + for ( Double val : valueList) { + if (new BigDecimal(val).compareTo(BigDecimal.ZERO) != powerNetFactorQuery.getCurFlag()) { + // 未发生返送 + continue; + } + fsl += val; + } } } - } - powerHistoryDTO.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP)); - powerHistoryDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); - powerHistoryDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); - powerHistoryDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); + powerHistoryDTO.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); + powerHistoryDTO.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); + powerHistoryDTO.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); + + // 当查询为P, Q,且有返送flag时 计算 返送累计 + if (("P".equals(queryType.toUpperCase()) || "Q".equals(queryType.toUpperCase())) && + powerNetFactorQuery.getCurFlag() != null && + powerNetFactorQuery.getCurFlag().intValue() != 0) { + powerHistoryDTO.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP)); + } + + } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) { + + } + powerHistoryDTO.setDataList(dataList); result.put(nodeCode, powerHistoryDTO); } return success(result); -- Gitblit v1.9.3