| | |
| | | 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.*; |
| | |
| | | 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; |
| | |
| | | |
| | | 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<>(); |
| | |
| | | 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() + "发生无功返送;"; |
| | | } |
| | | } |
| | |
| | | return success(result); |
| | | } |
| | | |
| | | @PostMapping("/net-factor/export-day") |
| | | @Operation(summary = "功率因数-电网拓扑功率导出(功率日累计)") |
| | | public CommonResult<List<PowerFactorExcelDTO>> getPowerFactorExcel(@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) { |
| | |
| | | log.info("开始查询,"); |
| | | ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); |
| | | String pointNo = ""; |
| | | String[] pointNoArr = new String[2]; |
| | | switch (queryType.toUpperCase()) { |
| | | case "P": |
| | | pointNo = powerNetFactorQuery.getCurP(); |
| | |
| | | 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); |
| | |
| | | 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); |
| | | |
| | | //查询月最大最小值 |
| | |
| | | log.info("开始查询,"); |
| | | ApiPointValueQueryDTO apiPointValueQueryDTO = new ApiPointValueQueryDTO(); |
| | | String pointNo = ""; |
| | | String[] pointNoArr = new String[2]; |
| | | switch (queryType.toUpperCase()) { |
| | | case "P": |
| | | pointNo = powerNetFactorQuery.getCurP(); |
| | |
| | | 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); |