From 8502fb2a1648d1453f96b4288d68c16dfcf5bae5 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 12 五月 2025 16:19:49 +0800 Subject: [PATCH] feat(data): 新增mqtt电表数据解析和写入,新增opcua电表和温湿度计数据解析和写入 --- src/main/java/com/zhitan/service/impl/DataServiceImpl.java | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 58 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/zhitan/service/impl/DataServiceImpl.java b/src/main/java/com/zhitan/service/impl/DataServiceImpl.java index fc1af3d..18d8376 100644 --- a/src/main/java/com/zhitan/service/impl/DataServiceImpl.java +++ b/src/main/java/com/zhitan/service/impl/DataServiceImpl.java @@ -11,6 +11,7 @@ import com.zhitan.model.entity.ElectricPower; import com.zhitan.influxdb.InfluxdbRepository; import com.zhitan.mapper.CommonMapper; +import com.zhitan.model.entity.PowerEntity; import com.zhitan.redis.RedisCache; import com.zhitan.service.IDataService; import lombok.extern.slf4j.Slf4j; @@ -23,6 +24,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; /** * 鏁版嵁service @@ -118,6 +120,61 @@ repository.writePoints(points); } + + /** + * 鍐欏叆鐢靛姏鐩稿叧鏁版嵁-鍥哄畾鏍煎紡锛屽彲鑷畾涔変慨鏀� + * + * @param powerEntity 鍥哄畾鏍煎紡鐨勬暟鎹� + */ + @Override + public void writeTimeSeriesData(@NotNull PowerEntity powerEntity) { + List<IndexTemplate> templates = getIndexTemplate(); + // 鑾峰彇绫讳腑鎵�鏈夊0鏄庣殑瀛楁 + Field[] fields = powerEntity.getClass().getDeclaredFields(); + List<Point> points = new ArrayList<>(); + for (Field field : fields) { + IndexTemplate indexTemplate = templates.stream().filter(template -> + field.getName().equalsIgnoreCase(template.getGatewayKey())) + .findFirst().orElse(null); + if (indexTemplate != null) { + Point point = Point + .measurement(influxdbConfig.getMeasurement()) + .addTag(TAG, powerEntity.getSn() + "_" + indexTemplate.getCode()) + .time(Instant.now(), WritePrecision.S); + // 璁剧疆瀛楁鍙闂紝鍏佽璁块棶绉佹湁瀛楁 + field.setAccessible(true); + if (Number.class.isAssignableFrom(field.getType()) || field.getType().isPrimitive()) { + try { + // 鑾峰彇瀛楁鍊� + Object o = field.get(powerEntity); + if (o==null) { + // 鏌ヨ鍑烘渶鍚庝竴娆″啓鍏nfluxdb鐨勬暟鎹� + double lastValue = repository.getLastPoint(influxdbConfig.getMeasurement(), + TAG, powerEntity.getSn() + "_" + indexTemplate.getCode()); + if (lastValue>0) { + log.info("鏌ヨ鍑烘渶鍚庝竴娆″啓鍏nfluxdb鐨勬暟鎹�:{}", lastValue); + } + point.addField(FIELD_VALUE, lastValue); + } else { + // 瀹夊叏绫诲瀷杞崲 + if (o instanceof Number) { + double value = ((Number) o).doubleValue(); + point.addField(FIELD_VALUE, value); + // 浣跨敤 value... + } else { + log.error("瀛楁 {} 绫诲瀷闈炴硶: {}", field.getName(), o.getClass()); + } + } + points.add(point); + } catch (IllegalAccessException e) { + log.error("鑾峰彇灞炴�у�煎け璐�:{}", e.getMessage()); + } + } + } + } + repository.writePoints(points); + } + /** * 鑾峰彇鐐逛綅妯℃澘 */ @@ -126,7 +183,7 @@ List<IndexTemplate> result = redisCache.getCacheList(TEMPLATE_KEY); if (result == null || result.isEmpty()) { result = commonMapper.getIndexTemplate(); - redisCache.setCacheList(TEMPLATE_KEY, result); + redisCache.setCacheList(TEMPLATE_KEY, result, 120, TimeUnit.SECONDS); } return result; } -- Gitblit v1.9.3