2025-06-16 | 潘志宝 | ![]() |
2025-06-16 | dengzedong | ![]() |
2025-06-16 | 潘志宝 | ![]() |
2025-06-16 | 潘志宝 | ![]() |
2025-06-16 | dengzedong | ![]() |
2025-06-16 | 潘志宝 | ![]() |
2025-06-16 | dengzedong | ![]() |
2025-06-16 | liriming | ![]() |
2025-06-16 | liriming | ![]() |
2025-06-16 | 潘志宝 | ![]() |
2025-06-16 | 潘志宝 | ![]() |
2025-06-16 | 潘志宝 | ![]() |
2025-06-16 | dengzedong | ![]() |
2025-06-16 | 潘志宝 | ![]() |
2025-06-16 | 潘志宝 | ![]() |
ansteel-biz/db/mysql.sql
@@ -923,9 +923,73 @@ `id` varchar(36) NOT NULL COMMENT 'id', `cde_index` varchar(36) DEFAULT NULL COMMENT '类型', `name_index` varchar(36) DEFAULT NULL COMMENT '名称', `point_no1` varchar(36) DEFAULT NULL COMMENT '测点1', `point_no2` varchar(36) DEFAULT NULL COMMENT '测点2', `point_no3` varchar(36) DEFAULT NULL COMMENT '测点3', `point_no1` varchar(36) DEFAULT NULL COMMENT '测点1', `point_no2` varchar(36) DEFAULT NULL COMMENT '测点2', `point_no3` varchar(36) DEFAULT NULL COMMENT '测点3', `sort` int NULL DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='功率因数管控'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='功率因数管控'; -- ---------------------------- -- 日报表 -- ---------------------------- CREATE TABLE `t_xxb_duty_report` ( `id` varchar(36) NOT NULL COMMENT 'id', `cde_index` varchar(36) DEFAULT NULL COMMENT '类型', `name_index` varchar(36) DEFAULT NULL COMMENT '名称', `point_no1` varchar(36) DEFAULT NULL COMMENT '测点1', `point_no2` varchar(36) DEFAULT NULL COMMENT '测点2', `point_no3` varchar(36) DEFAULT NULL COMMENT '测点3', `sort` int NULL DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='功率因数管控'; -- ---------------------------- -- 135机组数据配置表 -- ---------------------------- DROP TABLE IF EXISTS `t_plant_conf`; CREATE TABLE `t_plant_conf` ( `id` varchar(36) NOT NULL COMMENT 'id', `data_category` varchar(20) DEFAULT NULL COMMENT '数据类别(REAL:实时,HIS:历史)', `data_type` varchar(20) DEFAULT NULL COMMENT '数据类型', `data_no` varchar(20) DEFAULT NULL COMMENT '数据编码', `business_type` varchar(20) NULL DEFAULT NULL COMMENT '业务类别', `business_desc` varchar(20) NULL DEFAULT NULL COMMENT '业务描述', `ind_code` varchar(20) NULL DEFAULT NULL COMMENT '指标编码', `ind_name` varchar(20) NULL DEFAULT NULL COMMENT '指标名称', `ind_unit` varchar(20) NULL DEFAULT NULL COMMENT '指标单位', `remark` varchar(100) NULL DEFAULT NULL COMMENT '备注', `ext1` varchar(20) NULL DEFAULT NULL COMMENT '拓展字段1', `ext2` varchar(20) NULL DEFAULT NULL COMMENT '拓展字段2', `ext3` varchar(20) NULL DEFAULT NULL COMMENT '拓展字段3', `ext4` varchar(20) NULL DEFAULT NULL COMMENT '拓展字段4', `ext5` varchar(20) NULL DEFAULT NULL COMMENT '拓展字段5', `sort` int NULL DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`), KEY `idx_business_type` (`business_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='135机组数据配置表'; -- ---------------------------- -- xiz135机组指标数据配置表 -- ---------------------------- DROP TABLE IF EXISTS `t_plant_index_conf`; CREATE TABLE `t_plant_index_conf` ( `id` varchar(36) NOT NULL COMMENT 'id', `business_type` varchar(20) DEFAULT NULL COMMENT '业务类别', `business_desc` varchar(20) DEFAULT NULL COMMENT '业务描述', `ind_code` varchar(20) DEFAULT NULL COMMENT '指标编码', `ind_name` varchar(20) DEFAULT NULL COMMENT '指标名称', `ind_unit` varchar(20) DEFAULT NULL COMMENT '指标单位', `ind_avg` varchar(20) DEFAULT NULL COMMENT '历史平均', `ind_theory` varchar(20) DEFAULT NULL COMMENT '理论值', `ind_optimal` varchar(20) DEFAULT NULL COMMENT '最优值', `ind_real` varchar(20) DEFAULT NULL COMMENT '实时值', `ind_deviation_value` varchar(20) DEFAULT NULL COMMENT '偏差值', `ind_deviation_rate` varchar(20) DEFAULT NULL COMMENT '偏差率', `ind_previous` varchar(20) DEFAULT NULL COMMENT '上班数据', `sort` int DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='135机组指标数据配置表'; ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/ModelController.java
@@ -122,8 +122,8 @@ result.setCogGapAmount(data.get("cog_gap") == null ? 0 : DecimalUtil.toBigDecimal(data.get("cog_gap"), 1).intValue());//焦化减高炉煤气-数量 result.setBfgShengyue(DecimalUtil.toBigDecimal(data.get("BFG_shengyu"))); if (data.get("zhongabnAdvice") != null) { adviceList.add(DecimalUtil.toPowerTransferDetRespVO("中板工序", data.get("zhongabnAdvice"))); if (data.get("zhongbanAdvice") != null) { adviceList.add(DecimalUtil.toPowerTransferDetRespVO("中板工序", data.get("zhongbanAdvice"))); } if (data.get("houbanAdvice") != null) { adviceList.add(DecimalUtil.toPowerTransferDetRespVO("厚板工序", data.get("houbanAdvice"))); @@ -181,7 +181,8 @@ @PostMapping("/predict-data/tn-value") @Operation(summary = "获取T+N预测数据") public CommonResult<List<MdkPredictDataDTO>> getPredictTnValue(PredictTnValueReqVO reqVO) { public CommonResult<List<MdkPredictDataDTO>> getPredictTnValue(@RequestBody PredictTnValueReqVO reqVO) { log.info("PredictTnValueReqVO:"+reqVO); List<MdkPredictDataDTO> list = mcsApi.getPredictTnValue(reqVO); return success(list); } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/PlantController.java
对比新文件 @@ -0,0 +1,49 @@ package com.iailab.module.ansteel.api.controller.admin; import com.iailab.framework.common.pojo.CommonResult; import com.iailab.module.ansteel.plant.service.PlantConfService; import com.iailab.module.ansteel.plant.service.PlantIndexConfService; import com.iailab.module.ansteel.plant.vo.PlantDataVO; import com.iailab.module.ansteel.plant.vo.PlantIndexDataVO; import io.swagger.v3.oas.annotations.Operation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; import static com.iailab.framework.common.pojo.CommonResult.success; /** * @author PanZhibao * @Description * @createTime 2025年06月16日 */ @Slf4j @RestController @RequestMapping("/ansteel/api/plant") public class PlantController { @Autowired private PlantConfService plantConfService; @Autowired private PlantIndexConfService plantIndexConfService; @GetMapping("/data") @Operation(summary = "135机组数据") public CommonResult<List<PlantDataVO>> getPlantData(@RequestParam("businessType") String businessType) { List<PlantDataVO> result = plantConfService.getPlantData(businessType); return success(result); } @GetMapping("/ind-data") @Operation(summary = "135机组指标数据") public CommonResult<List<PlantIndexDataVO>> getPlantIndexData(@RequestParam("businessType") String businessType) { List<PlantIndexDataVO> result = plantIndexConfService.getPlantIndexData(businessType); return success(result); } } 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); ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerFactorExcelDTO.java
对比新文件 @@ -0,0 +1,38 @@ package com.iailab.module.ansteel.api.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; /** * 功率因数导出 * * @author PanZhibao * @Description * @createTime 2025年06月16日 */ @Data public class PowerFactorExcelDTO implements Serializable { private static final long serialVersionUID = 1L; @Schema(description = "日累计") private BigDecimal day; @Schema(description = "最大值") private BigDecimal max; @Schema(description = "最小值") private BigDecimal min; @Schema(description = "平均值") private BigDecimal avg; @Schema(description = "返送累计") private BigDecimal fsl; @Schema(description = "日期") private String date; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerFactorExcelReqDTO.java
对比新文件 @@ -0,0 +1,27 @@ package com.iailab.module.ansteel.api.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; import java.util.Date; /** * @author PanZhibao * @Description * @createTime 2025年06月16日 */ @Data public class PowerFactorExcelReqDTO implements Serializable { private static final long serialVersionUID = 1L; private String nodeCode; private String queryType; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date endTime; } ansteel-biz/src/main/java/com/iailab/module/ansteel/api/dto/PowerNetFactorQuery.java
@@ -17,10 +17,12 @@ * 当前有功 */ private String curP; /** * 当前无功 */ private String curQ; /** * 当前功率因数 */ @@ -30,4 +32,9 @@ * 当前需量 */ private String curDem; /** * 无功返送判断条件 */ private Integer curFlag; } ansteel-biz/src/main/java/com/iailab/module/ansteel/common/utils/PowerUtil.java
@@ -14,7 +14,11 @@ /** * 计算功率因数 p /(根号:p²+Q²) **/ public static Double calculateCos(double PValue, double QValue) { public static Double calculateCos(Double PValue, Double QValue) { if (PValue == null || QValue == null) { return null; } // 绝对值 PValue = Math.abs(PValue); QValue = Math.abs(QValue); ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunOnPowerOptimTask.java
@@ -46,6 +46,8 @@ @Autowired private McsApi mcsApi; private final static double LIM = -20d; private final static String POINT_NO = "C0000201107"; @Override @@ -69,7 +71,7 @@ flag = false; } for (ApiPointValueDTO apiPointValueDTO : valueList) { if (apiPointValueDTO.getV() < 0) { if (apiPointValueDTO.getV() < LIM) { flag = false; break; } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantConfDao.java
对比新文件 @@ -0,0 +1,15 @@ package com.iailab.module.ansteel.plant.dao; import com.iailab.framework.common.dao.BaseDao; import com.iailab.module.ansteel.plant.entity.PlantConfEntity; import com.iailab.module.ansteel.report.entity.DutyReportEntity; import org.apache.ibatis.annotations.Mapper; /** * @author PanZhibao * @Description * @createTime 2025年06月15日 */ @Mapper public interface PlantConfDao extends BaseDao<PlantConfEntity> { } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/dao/PlantIndexConfDao.java
对比新文件 @@ -0,0 +1,14 @@ package com.iailab.module.ansteel.plant.dao; import com.iailab.framework.common.dao.BaseDao; import com.iailab.module.ansteel.plant.entity.PlantIndexConfEntity; import org.apache.ibatis.annotations.Mapper; /** * @description: * @author: dzd * @date: 2025/6/16 13:59 **/ @Mapper public interface PlantIndexConfDao extends BaseDao<PlantIndexConfEntity> { } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantConfEntity.java
对比新文件 @@ -0,0 +1,54 @@ package com.iailab.module.ansteel.plant.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; /** * @author PanZhibao * @Description * @createTime 2025年06月15日 */ @Data @TableName("t_plant_conf") public class PlantConfEntity implements Serializable { private static final long serialVersionUID = 1L; /** * id */ @TableId private String id; private String dataCategory; private String dataType; private String dataNo; private String businessType; private String businessDesc; private String indCode; private String indName; private String indUnit; private String remark; private String ext1; private String ext2; private String ext3; private String ext4; private String ext5; private Integer sort; } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/entity/PlantIndexConfEntity.java
对比新文件 @@ -0,0 +1,50 @@ package com.iailab.module.ansteel.plant.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; /** * @description: * @author: dzd * @date: 2025/6/16 13:59 **/ @Data @TableName("t_plant_index_conf") public class PlantIndexConfEntity implements Serializable { private static final long serialVersionUID = 1L; /** * id */ @TableId private String id; private String businessType; private String indType; private String indCode; private String indName; private String indUnit; private String indAvg; private String indTheory; private String indOptimal; private String indReal; private String indDeviationValue; private String indDeviationRate; private String indPrevious; private Integer sort; } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/package-info.java
对比新文件 @@ -0,0 +1 @@ package com.iailab.module.ansteel.plant; ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantConfService.java
对比新文件 @@ -0,0 +1,19 @@ package com.iailab.module.ansteel.plant.service; import com.iailab.module.ansteel.plant.entity.PlantConfEntity; import com.iailab.module.ansteel.plant.vo.PlantDataVO; import java.util.List; import java.util.Map; /** * @author PanZhibao * @Description * @createTime 2025年06月15日 */ public interface PlantConfService { List<PlantConfEntity> list(Map<String, Object> params); List<PlantDataVO> getPlantData(String businessType); } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/PlantIndexConfService.java
对比新文件 @@ -0,0 +1,18 @@ package com.iailab.module.ansteel.plant.service; import com.iailab.module.ansteel.plant.entity.PlantConfEntity; import com.iailab.module.ansteel.plant.vo.PlantIndexDataVO; import java.math.BigDecimal; import java.util.List; import java.util.Map; /** * @description: * @author: dzd * @date: 2025/6/16 13:56 **/ public interface PlantIndexConfService { List<PlantIndexDataVO> getPlantIndexData(String businessType); } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantConfServiceImpl.java
对比新文件 @@ -0,0 +1,108 @@ package com.iailab.module.ansteel.plant.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; import com.iailab.module.ansteel.plant.dao.PlantConfDao; import com.iailab.module.ansteel.plant.entity.PlantConfEntity; import com.iailab.module.ansteel.plant.service.PlantConfService; import com.iailab.module.ansteel.plant.vo.PlantDataVO; import com.iailab.module.data.api.arc.ArcDataApi; import com.iailab.module.data.api.arc.dto.ApiArcDataDTO; import com.iailab.module.data.api.ind.IndItemApi; import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO; import com.iailab.module.data.api.point.DataPointApi; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author PanZhibao * @Description * @createTime 2025年06月15日 */ @Slf4j @Service public class PlantConfServiceImpl implements PlantConfService { @Resource private PlantConfDao plantConfDao; @Resource private DataPointApi dataPointApi; @Resource private IndItemApi indItemApi; @Resource private ArcDataApi arcDataApi; private final BigDecimal badValue = new BigDecimal(-2); @Override public List<PlantConfEntity> list(Map<String, Object> params) { String businessType = (String) params.get("businessType"); QueryWrapper<PlantConfEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq(StringUtils.isNotBlank(businessType), "business_type", businessType); return plantConfDao.selectList(queryWrapper); } @Override public List<PlantDataVO> getPlantData(String businessType) { QueryWrapper<PlantConfEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("business_type",businessType); List<PlantConfEntity> plantConfList = plantConfDao.selectList(queryWrapper); // 筛选DATAPOINT一次性查询出全部 List<String> pointNos = plantConfList.stream().filter(e -> e.getDataType().equals(ProcessConfDataTypeEnum.DATAPOINT.getCode())).map(PlantConfEntity::getDataNo).collect(Collectors.toList()); Map<String, Object> pointValues = new HashMap<>(); if (!CollectionUtils.isEmpty(pointNos)) { pointValues = dataPointApi.queryPointsRealValue(pointNos); } List<PlantDataVO> result = new ArrayList<>(plantConfList.size()); for (PlantConfEntity plantConf : plantConfList) { String dataNo = plantConf.getDataNo(); String dataType = plantConf.getDataType(); PlantDataVO plantData = new PlantDataVO(); plantData.setCode(plantConf.getIndCode()); plantData.setName(plantConf.getIndName()); plantData.setUnit(plantConf.getIndUnit()); plantData.setSort(plantConf.getSort()); switch (ProcessConfDataTypeEnum.getEumByCode(dataType)) { case DATAPOINT: if (pointValues.containsKey(dataNo)) { plantData.setValue(new BigDecimal(pointValues.get(dataNo).toString())); }else { plantData.setValue(badValue); } break; case IND: List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(dataNo); if (!CollectionUtils.isEmpty(indValues)) { plantData.setValue(new BigDecimal(indValues.get(0).getDataValue().toString())); }else { plantData.setValue(badValue); } break; case ARC: ApiArcDataDTO apiArcDataDTO = arcDataApi.queryArcLastValue(dataNo); if (apiArcDataDTO != null) { plantData.setValue(apiArcDataDTO.getArcValue()); }else { plantData.setValue(badValue); } break; default: plantData.setValue(badValue); break; } result.add(plantData); } return result; } } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/service/impl/PlantIndexConfServiceImpl.java
对比新文件 @@ -0,0 +1,70 @@ package com.iailab.module.ansteel.plant.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iailab.module.ansteel.plant.dao.PlantIndexConfDao; import com.iailab.module.ansteel.plant.entity.PlantIndexConfEntity; import com.iailab.module.ansteel.plant.service.PlantIndexConfService; import com.iailab.module.ansteel.plant.vo.PlantIndexDataVO; import com.iailab.module.data.api.point.DataPointApi; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; /** * @description: * @author: dzd * @date: 2025/6/16 13:57 **/ @Slf4j @Service public class PlantIndexConfServiceImpl implements PlantIndexConfService { @Resource private PlantIndexConfDao plantIndexConfDao; @Resource private DataPointApi dataPointApi; private final BigDecimal badValue = new BigDecimal(-2); @Override public List<PlantIndexDataVO> getPlantIndexData(String businessType) { QueryWrapper<PlantIndexConfEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("business_type",businessType); List<PlantIndexConfEntity> PlantIndexConfList = plantIndexConfDao.selectList(queryWrapper); // 筛选DATAPOINT一次性查询出全部 List<String> pointNos = PlantIndexConfList.stream().flatMap(e -> Stream.of(e.getIndAvg(),e.getIndTheory(),e.getIndOptimal(),e.getIndReal(),e.getIndDeviationValue(),e.getIndDeviationRate(),e.getIndPrevious())).collect(Collectors.toList()); Map<String, Object> pointValues = new HashMap<>(); if (!CollectionUtils.isEmpty(pointNos)) { pointValues = dataPointApi.queryPointsRealValue(pointNos); } List<PlantIndexDataVO> result = new ArrayList<>(PlantIndexConfList.size()); for (PlantIndexConfEntity PlantIndexConf : PlantIndexConfList) { PlantIndexDataVO plantData = new PlantIndexDataVO(); plantData.setType(PlantIndexConf.getIndType()); plantData.setCode(PlantIndexConf.getIndCode()); plantData.setName(PlantIndexConf.getIndName()); plantData.setUnit(PlantIndexConf.getIndUnit()); plantData.setSort(PlantIndexConf.getSort()); plantData.setIndAvg(pointValues.containsKey(PlantIndexConf.getIndAvg()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndAvg()).toString()) : badValue); plantData.setIndTheory(pointValues.containsKey(PlantIndexConf.getIndTheory()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndTheory()).toString()) : badValue); plantData.setIndOptimal(pointValues.containsKey(PlantIndexConf.getIndOptimal()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndOptimal()).toString()) : badValue); plantData.setIndReal(pointValues.containsKey(PlantIndexConf.getIndReal()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndReal()).toString()) : badValue); plantData.setIndDeviationValue(pointValues.containsKey(PlantIndexConf.getIndDeviationValue()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndDeviationValue()).toString()) : badValue); plantData.setIndDeviationRate(pointValues.containsKey(PlantIndexConf.getIndDeviationRate()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndDeviationRate()).toString()) : badValue); plantData.setIndPrevious(pointValues.containsKey(PlantIndexConf.getIndPrevious()) ? new BigDecimal(pointValues.get(PlantIndexConf.getIndPrevious()).toString()) : badValue); result.add(plantData); } return result; } } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantDataVO.java
对比新文件 @@ -0,0 +1,28 @@ package com.iailab.module.ansteel.plant.vo; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; /** * @description: * @author: dzd * @date: 2025/6/16 13:59 **/ @Data public class PlantDataVO implements Serializable { private static final long serialVersionUID = 1L; private String code; private String name; private String unit; private BigDecimal value; private Integer sort; } ansteel-biz/src/main/java/com/iailab/module/ansteel/plant/vo/PlantIndexDataVO.java
对比新文件 @@ -0,0 +1,40 @@ package com.iailab.module.ansteel.plant.vo; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; /** * @description: * @author: dzd * @date: 2025/6/16 13:59 **/ @Data public class PlantIndexDataVO implements Serializable { private static final long serialVersionUID = 1L; private String code; private String name; private String unit; private String type; private BigDecimal indAvg; private BigDecimal indTheory; private BigDecimal indOptimal; private BigDecimal indReal; private BigDecimal indDeviationValue; private BigDecimal indDeviationRate; private BigDecimal indPrevious; private Integer sort; } ansteel-biz/src/main/resources/application.yaml
@@ -188,6 +188,7 @@ - t_power_price_det - t_power_factor_control - t_xxb_duty_report - t_plant_conf swagger: title: 鞍钢鲅鱼圈能源管控系统 description: 鞍钢鲅鱼圈能源管控系统 doc/鞍钢数据接口文档_master.docBinary files differ