From c7ec0ceff9cf30cabbd8d071c1ef75d20d04548f Mon Sep 17 00:00:00 2001 From: 潘志宝 <979469083@qq.com> Date: 星期二, 01 四月 2025 17:33:28 +0800 Subject: [PATCH] Day频率数据采集时分秒置0 getByMin --- iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java | 29 +++++++++++++++++++++-------- 1 files changed, 21 insertions(+), 8 deletions(-) diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java index 66dc01f..22b0cbd 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/CalculateHandle.java @@ -1,10 +1,12 @@ package com.iailab.module.data.point.collection.handler; +import com.alibaba.fastjson.JSON; import com.iailab.framework.common.util.string.StrUtils; import com.iailab.module.data.common.enums.CommonConstant; import com.iailab.module.data.common.enums.DataTypeEnum; import com.iailab.module.data.common.enums.JsErrorCode; import com.iailab.module.data.common.utils.JavaScriptHandler; +import com.iailab.module.data.enums.DataPointFreqEnum; import com.iailab.module.data.point.collection.PointCollector; import com.iailab.module.data.point.collection.utils.GenInfluxPointValueUtils; import com.iailab.module.data.point.dto.DaPointDTO; @@ -12,6 +14,7 @@ import com.iailab.module.data.influxdb.pojo.InfluxPointValuePOJO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; + import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +24,7 @@ import java.math.BigDecimal; import java.util.*; +import java.util.stream.Stream; /** * 计算点处理 @@ -50,18 +54,21 @@ public static final String regex = "[+\\-\\*/()\\&\\|\\>\\<]"; - public List<InfluxPointValuePOJO> handle(Date collectTime, List<DaPointDTO> dtos, Map<String, Object> dataMap,List<String> listGood,List<String> listBad) { + public List<InfluxPointValuePOJO> handle(Date collectTime, List<DaPointDTO> dtos, Map<String, Object> dataMap, List<String> listGood, List<String> listBad) { List<InfluxPointValuePOJO> result = new ArrayList<>(); try { log.info("计算点处理开始"); if (CollectionUtils.isEmpty(dtos)) { return result; } + log.info(JSON.toJSONString(listBad)); dtos.forEach(dto -> { try { - Object value = singleCompute(dto, dataMap, listGood, listBad); - InfluxPointValuePOJO pojo = GenInfluxPointValueUtils.getByPoint(dto, value); - pojo.setTimestamp(collectTime.toInstant()); + Object rawValue = singleCompute(dto, dataMap, listGood, listBad); + BigDecimal coefficient = dto.getUnittransfactor() == null ? BigDecimal.ONE : dto.getUnittransfactor(); + BigDecimal calValue = new BigDecimal(rawValue.toString()).multiply(coefficient); + InfluxPointValuePOJO pojo = GenInfluxPointValueUtils.getByPoint(dto, calValue); + pojo.setTimestamp(GenInfluxPointValueUtils.getByMin(collectTime, DataPointFreqEnum.getEumByCode(dto.getMinfreqid()))); result.add(pojo); } catch (Exception ex) { ex.printStackTrace(); @@ -77,11 +84,15 @@ return result; } - private Object singleCompute(DaPointDTO dto, Map<String, Object> dataMap,List<String> listGood,List<String> listBad) { + private Object singleCompute(DaPointDTO dto, Map<String, Object> dataMap, List<String> listGood, List<String> listBad) { String expression = dto.getExpression(); + log.info("PointNo=" + dto.getPointNo() + ";SourceExpression=" + expression); String[] arr = expression.split(regex); + // 去掉arr中的空格 + arr = Stream.of(arr).filter(StringUtils::isNotBlank).toArray(String[]::new); // 判断arr都在dataMap中包含 if (!Arrays.stream(arr).allMatch(dataMap::containsKey)) { + log.info("dataMap not contains key"); listBad.add(dto.getPointNo()); return CommonConstant.BAD_VALUE; } @@ -131,7 +142,9 @@ if (redisTemplate.hasKey(PointCollector.PV + item.getPointNo())) { value = redisTemplate.opsForValue().get(PointCollector.PV + item.getPointNo()); } else { - value = singleCompute(item); + Object rawValue = singleCompute(item); + BigDecimal coefficient = item.getUnittransfactor() == null ? BigDecimal.ONE : item.getUnittransfactor(); + value = new BigDecimal(rawValue.toString()).multiply(coefficient); } data.put(item.getPointNo(), value); }); @@ -154,10 +167,10 @@ dataMap.putAll(constantHandle.getCurrent(pointNos)); if (dataMap.get(s) == null) { log.info("计算点数据异常"); - log.info("pointNo=" + dto.getPointNo() +";dataMap.key=" + s); + log.info("pointNo=" + dto.getPointNo() + ";dataMap.key=" + s); return CommonConstant.BAD_VALUE; } - String valueStr = dataMap.get(s).toString(); + String valueStr = dataMap.get(s).toString(); if (StrUtils.isNumeric(valueStr) && new BigDecimal(valueStr).compareTo(CommonConstant.BAD_VALUE) == 0) { log.info("BAD_VALUE:" + s); } -- Gitblit v1.9.3