From 169b88b3d8a7c6ae833b49c8d0fab843159485db Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期三, 18 六月 2025 08:45:32 +0800 Subject: [PATCH] 实时数据导出接口 --- /dev/null | 217 ------------------------------- ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PowerController.java | 151 +++++++++++++++++++++ ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/security/config/SecurityConfiguration.java | 3 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java | 5 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportPqVO.java | 10 ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportCosVO.java | 2 6 files changed, 161 insertions(+), 227 deletions(-) diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/FileController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/FileController.java deleted file mode 100644 index 63252d0..0000000 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/FileController.java +++ /dev/null @@ -1,217 +0,0 @@ -package com.iailab.module.ansteel.api.controller.admin; - -import com.iailab.framework.common.util.date.DateUtils; -import com.iailab.framework.excel.core.util.ExcelUtils; -import com.iailab.module.ansteel.api.dto.PowerFactorExcelDTO; -import com.iailab.module.ansteel.api.dto.PowerFactorExcelReqDTO; -import com.iailab.module.ansteel.api.vo.PowerExportCosVO; -import com.iailab.module.ansteel.api.vo.PowerExportPqVO; -import com.iailab.module.ansteel.common.utils.PowerUtil; -import com.iailab.module.ansteel.power.entity.PowerNetFactorEntity; -import com.iailab.module.ansteel.power.service.PowerNetFactorService; -import com.iailab.module.data.api.point.DataPointApi; -import com.iailab.module.data.api.point.dto.ApiPointValueDTO; -import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; -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.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.math.BigDecimal; -import java.util.*; - -/** - * 文件流接口 - * - * @author PanZhibao - * @Description - * @createTime 2025年06月17日 - */ -@Slf4j -@RestController -@RequestMapping("/ansteel/api/file") -public class FileController { - - @Autowired - private PowerNetFactorService powerNetFactorService; - - @Autowired - private DataPointApi dataPointApi; - - /** - * 导出功率日累计 - * 月报表导出:最大值、最小值、平均值、受电累计、返送累计 - * 日功率因数二级界面:最大值、最小值、平均值、日功率因数 - * 月功率因数二级界面:最大值、最小值、平均值、月功率因数 - * - * @param response - * @param request - * @param dto - */ - @PostMapping("/net-factor/export-day") - @Operation(summary = "功率因数-电网拓扑功率导出(功率日累计)") - public void getPowerFactorExportDay(HttpServletResponse response, HttpServletRequest - request, @RequestBody PowerFactorExcelReqDTO dto) throws IOException { - - List<PowerExportPqVO> exportPqList = new ArrayList<>(); - List<PowerExportCosVO> exportCos = 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 { - log.info("do excel"); - PowerFactorExcelDTO excelDTO = new PowerFactorExcelDTO(); - switch (queryType.toUpperCase()) { - case "P": - pointNo = powerNetFactorEntity.getCurP(); - break; - case "Q": - pointNo = powerNetFactorEntity.getCurQ(); - break; - case "DAYCOS": - pointNoArr[0] = powerNetFactorEntity.getPDay(); - pointNoArr[1] = powerNetFactorEntity.getQDay(); - break; - case "MONTHCOS": - pointNoArr[0] = powerNetFactorEntity.getPMon(); - pointNoArr[1] = powerNetFactorEntity.getQMon(); - break; - default: - return; - } - - ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); - apiPointValueQueryDTO.setStart(curDay.getTime()); - curDay.add(Calendar.DAY_OF_YEAR, 1); - apiPointValueQueryDTO.setEnd(curDay.getTime()); - List<Double> valueList = new ArrayList<>(); - Double lastValue = null; - 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(); - valueList.add(pv.getV()); - } - } else if (StringUtils.isNotBlank(pointNoArr[0]) && StringUtils.isNotBlank(pointNoArr[1])) { - List<String> categories = new ArrayList<>(); - - // P/Q - apiPointValueQueryDTO.setPointNo(pointNoArr[0]); - List<ApiPointValueDTO> chartDataP = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); - Map<String, Double> dataMapP = new HashMap<>(); - for (ApiPointValueDTO pv : chartDataP) { - categories.add(DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); - 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) { - Double cos = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate)); - valueList.add(cos); - } - - } - - 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(); - } - - if ("P".equals(queryType.toUpperCase()) || "Q".equals(queryType.toUpperCase())) { - PowerExportPqVO evo = new PowerExportPqVO(); - double sdl = 0; - double fsl = 0; - if (!CollectionUtils.isEmpty(valueList)) { - if (powerNetFactorEntity.getCurFlag() != null && powerNetFactorEntity.getCurFlag().intValue() != 0) { - for ( Double val : valueList) { - if (new BigDecimal(val).compareTo(BigDecimal.ZERO) != powerNetFactorEntity.getCurFlag()) { - // 未发生返送 - sdl += val; - } else { - // 发生返送 - fsl += val; - } - } - } - } - evo.setSdl(new BigDecimal(sdl).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setFsl(new BigDecimal(fsl).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setDate(DateUtils.format(apiPointValueQueryDTO.getStart())); - exportPqList.add(evo); - } else if ("DAYCOS".equals(queryType.toUpperCase()) || "MONTHCOS".equals(queryType.toUpperCase())) { - double dayLast = 0; - if (!CollectionUtils.isEmpty(valueList)) { - dayLast = valueList.get(valueList.size() - 1); - } - PowerExportCosVO evo = new PowerExportCosVO(); - evo.setCos(new BigDecimal(dayLast).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setMax(new BigDecimal(max).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setMin(new BigDecimal(min).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setAvg(new BigDecimal(avg).setScale(2, BigDecimal.ROUND_HALF_UP)); - evo.setDate(DateUtils.format(apiPointValueQueryDTO.getStart())); - exportCos.add(evo); - } - - } while (curDay.getTime().getTime() <= endTime.getTime()); - - if ("P".equals(queryType.toUpperCase()) || "Q".equals(queryType.toUpperCase())) { - String name = powerNetFactorEntity.getNodeName() + - queryType.toUpperCase().replace("P", "有功").replace("Q", "无功") + - "功率报表.xls"; - ExcelUtils.write(response, name, "功率数据", PowerExportPqVO.class, exportPqList); - } else if ("DAYCOS".equals(queryType.toUpperCase()) || "MONTHCOS".equals(queryType.toUpperCase())) { - String name = powerNetFactorEntity.getNodeName() + - queryType.toUpperCase().replace("DAYCOS", "日").replace("MONTHCOS", "月") + - "功率因数报表.xls"; - ExcelUtils.write(response, name, "功率数据", PowerExportPqVO.class, exportPqList); - } - } -} \ No newline at end of file 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 3d3b255..bea2bfd 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 @@ -1136,6 +1136,121 @@ return success(result); } + @PostMapping("/net-factor/export-history") + @Operation(summary = "功率因数-电网拓扑功率历史(多code)") + public void exportPowerHistoryList(HttpServletResponse response, HttpServletRequest + request, @RequestBody PowerNetFactorHisReqDTO dto) throws IOException { + List<String> column = new ArrayList<>(); + column.add("时间"); + List<List<Object>> exportData = new ArrayList<>(); + + List<String> nodeCodeList = dto.getNodeCodeList(); + if (CollectionUtils.isEmpty(nodeCodeList)) { + return; + } + String queryType = dto.getQueryType(); + if (StringUtils.isBlank(queryType)) { + return; + } + Calendar calendar0 = Calendar.getInstance(); + calendar0.set(Calendar.MILLISECOND, 0); + calendar0.set(Calendar.SECOND, 0); + Date end0 = dto.getEndTime() == null ? calendar0.getTime() : dto.getEndTime(); + calendar0.set(Calendar.MINUTE, 0); + calendar0.set(Calendar.HOUR_OF_DAY, 0); + Date start0 = dto.getStartTime() == null ? calendar0.getTime() : dto.getStartTime(); + + Map<String, Map<String, Object>> dataAll = new HashMap<>(); + List<String> categories = DateUtils.getTimeScale(start0, end0, 60); + for (String nodeCode : nodeCodeList) { + 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"); + continue; + } + column.add(powerNetFactorQuery.getNodeName()); + + log.info("开始查询,"); + ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); + String pointNo = ""; + String[] pointNoArr = new String[2]; + switch (queryType.toUpperCase()) { + case "P": + pointNo = powerNetFactorQuery.getCurP(); + break; + case "Q": + pointNo = powerNetFactorQuery.getCurQ(); + break; + 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.setEnd(end0); + apiPointValueQueryDTO.setStart(start0); + Map<String, Object> dataMap = new HashMap<>(); + + if (StringUtils.isNotBlank(pointNo)) { + apiPointValueQueryDTO.setPointNo(pointNo); + List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); + for (ApiPointValueDTO pv : chartData) { + String key = DateUtils.format(pv.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); + Object val = pv.getV(); + dataMap.put(key, val); + } + } 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) { + Double cos = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate)); + Object val = cos == null ? 0 : new BigDecimal(cos).setScale(2, BigDecimal.ROUND_HALF_UP); + dataMap.put(cate, val); + } + + } + dataAll.put(powerNetFactorQuery.getNodeName(), dataMap); + } + + for (String cate : categories) { + List<Object> row = new ArrayList<>(); + for (String col : column) { + row.add(dataAll.get(col).get(cate)); + } + } + + ExcelUtils.write(response, "历史.xlsx", "历史数据", column, exportData); + } + @PostMapping("/net-factor/history-list") @Operation(summary = "功率因数-电网拓扑功率历史(多code)") public CommonResult<LinkedHashMap<String, PowerHistoryDTO>> getPowerHistoryList(@RequestBody PowerNetFactorHisReqDTO dto) { @@ -1204,9 +1319,9 @@ apiPointValueQueryDTO.setEnd(end0); apiPointValueQueryDTO.setStart(start0); List<Object[]> dataList = new ArrayList<>(); + List<Double> valueList = new ArrayList<>(); if (StringUtils.isNotBlank(pointNo)) { - List<Double> valueList = new ArrayList<>(); apiPointValueQueryDTO.setPointNo(pointNo); List<ApiPointValueDTO> chartData = dataPointApi.queryPointHistoryValue(apiPointValueQueryDTO); for (ApiPointValueDTO pv : chartData) { @@ -1249,7 +1364,41 @@ } } 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) { + Double cos = PowerUtil.calculateCos(dataMapP.get(cate), dataMapQ.get(cate)); + Object[] data = new Object[2]; + data[0] = cate; + data[1] = cos == null ? 0 : new BigDecimal(cos).setScale(2, BigDecimal.ROUND_HALF_UP); + dataList.add(data); + if (cos != null) { + valueList.add(cos); + } + 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(); + } + 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.setDataList(dataList); result.put(nodeCode, powerHistoryDTO); diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java index 47bdc38..e54e538 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java @@ -14,6 +14,11 @@ private static final long serialVersionUID = 1L; /** + * 节点名称 + */ + private String nodeName; + + /** * 当前有功 */ private String curP; diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportCosVO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportCosVO.java index 53f7aae..a3319e5 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportCosVO.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportCosVO.java @@ -26,7 +26,7 @@ private BigDecimal cos; @Schema(description = "日最大功率因数") - @ExcelProperty("采集值") + @ExcelProperty("日最大功率因数") private BigDecimal max; @Schema(description = "日最小功率因数") diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportPqVO.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportPqVO.java index 32f8425..3162b2f 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportPqVO.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/vo/PowerExportPqVO.java @@ -22,22 +22,22 @@ private String date; @Schema(description = "受电功率累计") - @ExcelProperty("采集值") + @ExcelProperty("受电功率累计") private BigDecimal sdl; @Schema(description = "返送功率累计") - @ExcelProperty("采集值") + @ExcelProperty("返送功率累计") private BigDecimal fsl; @Schema(description = "日最大功率") - @ExcelProperty("采集值") + @ExcelProperty("日最大功率") private BigDecimal max; @Schema(description = "日最小功率") - @ExcelProperty("采集值") + @ExcelProperty("日最小功率") private BigDecimal min; @Schema(description = "日平均功率") - @ExcelProperty("采集值") + @ExcelProperty("日平均功率") private BigDecimal avg; } \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/security/config/SecurityConfiguration.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/security/config/SecurityConfiguration.java index 07058c4..a09fa54 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/security/config/SecurityConfiguration.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/framework/security/config/SecurityConfiguration.java @@ -29,9 +29,6 @@ registry.requestMatchers("/actuator").anonymous() .requestMatchers("/actuator/**").anonymous(); - // 导出文件流接口 - registry.requestMatchers("/ansteel/api/file/**"); - // RPC 服务的安全配置 registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); } -- Gitblit v1.9.3