5 天以前 | dengzedong | ![]() |
5 天以前 | dengzedong | ![]() |
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/HttpCollector.java
@@ -10,6 +10,7 @@ import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsdb; import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsdc; import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsde; import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsdy; import com.iailab.module.data.channel.http.collector.ihdb.HttpCollectorForIhd; import com.iailab.module.data.channel.http.entity.HttpApiEntity; import com.iailab.module.data.channel.http.service.HttpApiService; @@ -41,6 +42,9 @@ @Autowired private HttpCollectorForAsdc httpCollectorForAsdc; @Autowired private HttpCollectorForAsdy httpCollectorForAsdy; public Object getTagValue(String apiId, String tag) { HttpApiEntity httpApi = httpApiService.getFromCatch(apiId); if (httpApi == null) { @@ -57,6 +61,8 @@ valueMap = httpCollectorForAsde.getTagValues(apiId, tagNames); } else if (SourceApiEnum.ASDC.getCode().equals(httpApi.getCode())) { valueMap = httpCollectorForAsdc.getTagValues(apiId, tagNames); } else if (SourceApiEnum.ASDY.getCode().equals(httpApi.getCode())) { valueMap = httpCollectorForAsdy.getTagValues(apiId, tagNames); } if (valueMap.get(tag) == null) { return CommonConstant.BAD_VALUE; iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/SourceApiEnum.java
@@ -14,7 +14,8 @@ iHyperDB("iHyperDB", "宝信IHD"), ASDB("ASDB", "鞍钢DB"), ASDE("ASDE", "鞍钢电力"), ASDC("ASDC", "鞍钢煤气"); ASDC("ASDC", "鞍钢煤气"), ASDY("ASDY", "鞍钢产量数据"); private String code; private String desc; iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/HttpCollectorForAsdb.java
@@ -26,7 +26,6 @@ @Slf4j @Component public class HttpCollectorForAsdb { private static Map<String, HttpApiEntity> apiMap = new HashMap<>(); @Autowired private HttpApiService httpApiService; @@ -37,12 +36,7 @@ public static final long offset = 10; private HttpApiEntity getHttpApi(String id) { if (apiMap.containsKey(id)) { return apiMap.get(id); } HttpApiEntity httpApi = httpApiService.info(id); apiMap.put(id, httpApi); return httpApi; return httpApiService.getFromCatch(id); } public BigDecimal getTagValue(String sourceId, String tagNo) { iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/HttpCollectorForAsdc.java
@@ -30,7 +30,6 @@ @Slf4j @Component public class HttpCollectorForAsdc { private static Map<String, HttpApiEntity> apiMap = new HashMap<>(); @Autowired private HttpApiService httpApiService; @@ -41,12 +40,7 @@ public static final long offset = 10; private HttpApiEntity getHttpApi(String id) { if (apiMap.containsKey(id)) { return apiMap.get(id); } HttpApiEntity httpApi = httpApiService.info(id); apiMap.put(id, httpApi); return httpApi; return httpApiService.getFromCatch(id); } public BigDecimal getTagValue(String sourceId, String tagNo) { iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/HttpCollectorForAsde.java
@@ -30,7 +30,6 @@ @Slf4j @Component public class HttpCollectorForAsde { private static Map<String, HttpApiEntity> apiMap = new HashMap<>(); @Autowired private HttpApiService httpApiService; @@ -41,12 +40,7 @@ public static final long offset = 10; private HttpApiEntity getHttpApi(String id) { if (apiMap.containsKey(id)) { return apiMap.get(id); } HttpApiEntity httpApi = httpApiService.info(id); apiMap.put(id, httpApi); return httpApi; return httpApiService.getFromCatch(id); } public BigDecimal getTagValue(String sourceId, String tagNo) { iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/asdb/HttpCollectorForAsdy.java
对比新文件 @@ -0,0 +1,150 @@ package com.iailab.module.data.channel.http.collector.asdb; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.iailab.framework.common.constant.CommonConstant; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.framework.common.util.http.HttpUtils; import com.iailab.module.data.channel.http.entity.HttpApiEntity; import com.iailab.module.data.channel.http.service.HttpApiService; import com.iailab.module.data.common.enums.DataSourceType; import com.iailab.module.data.common.utils.TagUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.util.*; import java.util.concurrent.TimeUnit; /** * @author PanZhibao * @Description * @createTime 2025年03月26日 */ @Slf4j @Component public class HttpCollectorForAsdy { @Autowired private HttpApiService httpApiService; @Autowired private RedisTemplate redisTemplate; public static final long offset = 10; private HttpApiEntity getHttpApi(String id) { return httpApiService.getFromCatch(id); } public BigDecimal getTagValue(String sourceId, String tagNo) { BigDecimal value = CommonConstant.BAD_VALUE; HttpApiEntity httpApi = this.getHttpApi(sourceId); //先查缓存 String catchKey = "IailabData:" + httpApi.getCode() + ":" + tagNo; if (redisTemplate.hasKey(catchKey)) { log.info("查找IailabData缓存: " + catchKey); return new BigDecimal(redisTemplate.opsForValue().get(catchKey).toString()); } String responseStr = HttpUtils.sendGet(httpApi.getUrl(), null, ""); JSONObject jsonObject = JSON.parseObject(responseStr); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND,0); calendar.set(Calendar.SECOND,0); calendar.set(Calendar.MINUTE,0); calendar.set(Calendar.HOUR_OF_DAY,0); calendar.add(Calendar.DAY_OF_YEAR,-1); String time = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { String cacheValue = "0"; if (entry.getValue() instanceof String) { cacheValue = entry.getValue().toString(); }else if (entry.getValue() instanceof JSONObject) { JSONObject objectValue = (JSONObject) entry.getValue(); if (objectValue.containsKey(time)){ cacheValue = objectValue.get(time).toString(); } } if (entry.getKey().equals(tagNo)) { value = new BigDecimal(cacheValue); } log.info("存入IailabData缓存: " + catchKey); redisTemplate.opsForValue().set("IailabData:" + httpApi.getCode() + ":" + entry.getKey(), cacheValue, offset, TimeUnit.SECONDS); } return value; } public Map<String, Object> getTagValues(String sourceId, List<String> tagNames) { Map<String, Object> result = new HashMap<>(); try { if (CollectionUtils.isEmpty(tagNames)) { return result; } for (String tagName : tagNames) { result.put(tagName, getTagValue(sourceId, tagName)); } } catch (Exception ex) { log.info("getCurrentValue异常"); ex.printStackTrace(); throw ex; } return result; } public Map<String, Object> getTagValues(List<Object[]> params, Date collectTime) { Map<String, Object> result = new HashMap<>(); if (CollectionUtils.isEmpty(params)) { return new HashMap<>(); } try { HttpApiEntity httpApi = this.getHttpApi(params.get(0)[0].toString()); this.getByHtp(httpApi.getUrl(), httpApi.getCode(), result, params); } catch (Exception ex) { ex.printStackTrace(); } return result; } private void getByHtp(String url, String sourceName, Map<String, Object> result, List<Object[]> params) { log.info("HttpCollectorForAsdy.getByHtp:url=" + url); log.info("HttpCollectorForAsdy.getByHtp:params=" + JSONArray.toJSONString(params)); String responseStr = HttpUtils.sendGet(url, null, ""); log.info("HttpCollectorForAsdy.getByHtp:responseStr=" + responseStr); JSONObject jsonObject = JSON.parseObject(responseStr); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND,0); calendar.set(Calendar.SECOND,0); calendar.set(Calendar.MINUTE,0); calendar.set(Calendar.HOUR_OF_DAY,0); calendar.add(Calendar.DAY_OF_YEAR,-1); String time = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); Map<String, BigDecimal> valueGroup = new HashMap<>(); for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { String value = "0"; if (entry.getValue() instanceof String) { value = entry.getValue().toString(); }else if (entry.getValue() instanceof JSONObject) { JSONObject objectValue = (JSONObject) entry.getValue(); if (objectValue.containsKey(time)){ value = objectValue.get(time).toString(); } } valueGroup.put(entry.getKey(),new BigDecimal(value)); } for (Object[] item : params) { if (valueGroup.containsKey(item[1].toString())) { result.put(TagUtils.genTagId(DataSourceType.HTTP.getCode(), sourceName, item[1].toString()), valueGroup.get(item[1].toString())); } } } } iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/collector/ihdb/HttpCollectorForIhd.java
@@ -33,7 +33,6 @@ @Slf4j @Component public class HttpCollectorForIhd { private static Map<String, HttpApiEntity> apiMap = new HashMap<>(); @Autowired private HttpApiService httpApiService; @@ -91,12 +90,7 @@ private static final String Q = "q"; private HttpApiEntity getHttpApi(String id) { if (apiMap.containsKey(id)) { return apiMap.get(id); } HttpApiEntity httpApi = httpApiService.info(id); apiMap.put(id, httpApi); return httpApi; return httpApiService.getFromCatch(id); } public BigDecimal getTagValue(String sourceId, String tagNo, Integer dimension, String valueType) { iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/http/service/impl/HttpApiServiceImpl.java
@@ -40,11 +40,13 @@ @Override public void update(HttpApiEntity httpApiEntity) { idMap.remove(httpApiEntity.getId()); httpApiDao.updateById(httpApiEntity); } @Override public void delete(String id) { idMap.remove(id); httpApiDao.deleteById(id); } iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/point/collection/handler/MeasureHandle.java
@@ -5,6 +5,7 @@ import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsdb; import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsdc; import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsde; import com.iailab.module.data.channel.http.collector.asdb.HttpCollectorForAsdy; import com.iailab.module.data.channel.http.collector.ihdb.HttpCollectorForIhd; import com.iailab.module.data.channel.opcda.collector.OpcDACollector; import com.iailab.module.data.common.enums.CommonConstant; @@ -68,6 +69,9 @@ @Autowired private HttpCollectorForAsdc httpCollectorForAsdc; @Autowired private HttpCollectorForAsdy httpCollectorForAsdy; @Resource private DaPointService daPointService; @@ -89,6 +93,7 @@ List<Object[]> httpTagAsdb = new ArrayList<>(); List<Object[]> httpTagAsde = new ArrayList<>(); List<Object[]> httpTagAsdc = new ArrayList<>(); List<Object[]> httpTagAsdy = new ArrayList<>(); dtos.stream().forEach(item -> { if (DataSourceType.OPCUA.getCode().equals(item.getSourceType())) { @@ -115,6 +120,10 @@ } else if (SourceApiEnum.ASDC.getCode().equals(item.getSourceName())) { if (item.getTagNo() != null && item.getDimension() != null && item.getValueType() != null) { httpTagAsdc.add(new Object[]{item.getSourceId(), item.getTagNo(), item.getDimension(), item.getValueType()}); } } else if (SourceApiEnum.ASDY.getCode().equals(item.getSourceName())) { if (item.getTagNo() != null && item.getDimension() != null && item.getValueType() != null) { httpTagAsdy.add(new Object[]{item.getSourceId(), item.getTagNo(), item.getDimension(), item.getValueType()}); } } } @@ -144,6 +153,9 @@ } if (!CollectionUtils.isEmpty(httpTagAsdc)) { tagValues.putAll(httpCollectorForAsdc.getTagValues(httpTagAsdc, collectTime)); } if (!CollectionUtils.isEmpty(httpTagAsdy)) { tagValues.putAll(httpCollectorForAsdy.getTagValues(httpTagAsdy, collectTime)); } this.toCommonResult(collectTime, dtos, tagValues, dataMap, result,listGood,listBad); log.info("测量点处理结束"); @@ -238,6 +250,8 @@ value = httpCollectorForAsde.getTagValue(item.getSourceId(), item.getTagNo()); } else if (SourceApiEnum.ASDC.getCode().equals(item.getSourceName())) { value = httpCollectorForAsdc.getTagValue(item.getSourceId(), item.getTagNo()); } else if (SourceApiEnum.ASDY.getCode().equals(item.getSourceName())) { value = httpCollectorForAsdy.getTagValue(item.getSourceId(), item.getTagNo()); } } else { log.info("没有匹配的TagNo=" + item.getTagNo());