|
@@ -1,21 +1,15 @@
|
|
|
package com.middle.platform.data.biz.service;
|
|
package com.middle.platform.data.biz.service;
|
|
|
|
|
|
|
|
-import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
-import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
|
|
import com.middle.platform.data.biz.mapper.TaosMapper;
|
|
import com.middle.platform.data.biz.mapper.TaosMapper;
|
|
|
-import com.middle.platform.data.biz.pojo.OriginalPara;
|
|
|
|
|
-import com.middle.platform.data.biz.pojo.ProductPara;
|
|
|
|
|
-import com.middle.platform.data.biz.pojo.PropertyDto;
|
|
|
|
|
-import com.middle.platform.data.biz.utils.TsUtil;
|
|
|
|
|
import com.middle.platform.manage.api.pojo.ProductVo;
|
|
import com.middle.platform.manage.api.pojo.ProductVo;
|
|
|
-import com.middle.platform.redis.constant.CacheConstant;
|
|
|
|
|
import com.middle.platform.redis.service.CacheService;
|
|
import com.middle.platform.redis.service.CacheService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
-import java.time.LocalDateTime;
|
|
|
|
|
-import java.util.*;
|
|
|
|
|
|
|
+import java.util.concurrent.LinkedBlockingQueue;
|
|
|
|
|
+import java.util.concurrent.ThreadPoolExecutor;
|
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author xucaiqin
|
|
* @author xucaiqin
|
|
@@ -28,6 +22,10 @@ public class DataAnalyseService {
|
|
|
private final TaosMapper taosMapper;
|
|
private final TaosMapper taosMapper;
|
|
|
private final CacheService cacheService;
|
|
private final CacheService cacheService;
|
|
|
private final ProductAnalyse productAnalyse;
|
|
private final ProductAnalyse productAnalyse;
|
|
|
|
|
+ private final TaosService taosService;
|
|
|
|
|
+
|
|
|
|
|
+ private final ThreadPoolExecutor threadPoolExecutor =
|
|
|
|
|
+ new ThreadPoolExecutor(7, 400, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(50));
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 源数据处理
|
|
* 源数据处理
|
|
@@ -36,20 +34,27 @@ public class DataAnalyseService {
|
|
|
* @param payload
|
|
* @param payload
|
|
|
*/
|
|
*/
|
|
|
public void rawData(String msgId, ProductVo productVo, Object payload) {
|
|
public void rawData(String msgId, ProductVo productVo, Object payload) {
|
|
|
- cacheService.setKey(String.format(CacheConstant.ONLINE_CACHE, productVo.getGuid()), LocalDateTime.now());
|
|
|
|
|
- Object o = cacheService.getKey(String.format(CacheConstant.TD_ORG_CACHE, productVo.getCode(), productVo.getGuid()));
|
|
|
|
|
- if (Objects.isNull(o)) {
|
|
|
|
|
- taosMapper.createOriginalTable(productVo.getGuid(), productVo.getCode());
|
|
|
|
|
- cacheService.setKey(String.format(CacheConstant.TD_ORG_CACHE, productVo.getCode(), productVo.getGuid()), true);
|
|
|
|
|
- }
|
|
|
|
|
- OriginalPara originalPara = new OriginalPara();
|
|
|
|
|
- originalPara.setCode(productVo.getCode());
|
|
|
|
|
- originalPara.setGuid(productVo.getGuid());
|
|
|
|
|
- originalPara.setRawStr(payload.toString());
|
|
|
|
|
- originalPara.setTs(new Date());
|
|
|
|
|
- originalPara.setMsgId(msgId);
|
|
|
|
|
-
|
|
|
|
|
- taosMapper.insertOriginal(originalPara);
|
|
|
|
|
|
|
+// threadPoolExecutor.execute(() -> {
|
|
|
|
|
+//// StopWatch stopWatch = new StopWatch();
|
|
|
|
|
+//// stopWatch.start("源数据表判断");
|
|
|
|
|
+// cacheService.setKey(String.format(CacheConstant.ONLINE_CACHE, productVo.getGuid()), LocalDateTime.now());
|
|
|
|
|
+// Object o = cacheService.getKey(String.format(CacheConstant.TD_ORG_CACHE, productVo.getCode(), productVo.getGuid()));
|
|
|
|
|
+// if (Objects.isNull(o)) {
|
|
|
|
|
+// taosMapper.createOriginalTable(productVo.getGuid(), productVo.getCode());
|
|
|
|
|
+// cacheService.setKey(String.format(CacheConstant.TD_ORG_CACHE, productVo.getCode(), productVo.getGuid()), true);
|
|
|
|
|
+// }
|
|
|
|
|
+//// stopWatch.stop();
|
|
|
|
|
+//// stopWatch.start("源数据表写入");
|
|
|
|
|
+// OriginalPara originalPara = new OriginalPara();
|
|
|
|
|
+// originalPara.setCode(productVo.getCode());
|
|
|
|
|
+// originalPara.setGuid(productVo.getGuid());
|
|
|
|
|
+// originalPara.setRawStr(payload.toString());
|
|
|
|
|
+// originalPara.setTs(new Date());
|
|
|
|
|
+// originalPara.setMsgId(msgId);
|
|
|
|
|
+// taosService.addRaw(originalPara);
|
|
|
|
|
+//// stopWatch.stop();
|
|
|
|
|
+//// log.info("源数据耗时:{}", stopWatch.prettyPrint());
|
|
|
|
|
+// });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -59,45 +64,52 @@ public class DataAnalyseService {
|
|
|
* @param productVo
|
|
* @param productVo
|
|
|
*/
|
|
*/
|
|
|
public void analyzeData(String msgId, ProductVo productVo, Object data) {
|
|
public void analyzeData(String msgId, ProductVo productVo, Object data) {
|
|
|
- log.info("源数据:{}", data);
|
|
|
|
|
- //1.云函数解析
|
|
|
|
|
- Object cloudData = productAnalyse.dataConvert(productVo, data);
|
|
|
|
|
- log.info("云函数解析:{}", cloudData);
|
|
|
|
|
- //2.物模型解析
|
|
|
|
|
- Map<String, PropertyDto> modData = productAnalyse.modConvert(productVo, cloudData);
|
|
|
|
|
- log.info("物模型解析:{}", modData);
|
|
|
|
|
- //判断是否创建子表
|
|
|
|
|
- tableCheck(productVo);
|
|
|
|
|
- //数据写入
|
|
|
|
|
- ProductPara productPara;
|
|
|
|
|
- List<ProductPara> list = new ArrayList<>();
|
|
|
|
|
- if(CollUtil.isNotEmpty(modData)){
|
|
|
|
|
- for (Map.Entry<String, PropertyDto> map : modData.entrySet()) {
|
|
|
|
|
- map.getValue().setTime(LocalDateTimeUtil.formatNormal(LocalDateTime.now()));
|
|
|
|
|
- productPara = new ProductPara();
|
|
|
|
|
- productPara.setCode(productVo.getCode());
|
|
|
|
|
- productPara.setGuid(productVo.getGuid());
|
|
|
|
|
- productPara.setLine(map.getKey());
|
|
|
|
|
- productPara.setReserve("");
|
|
|
|
|
- productPara.setVal(map.getValue().getVal());
|
|
|
|
|
- productPara.setMsgId(msgId);
|
|
|
|
|
- productPara.setTs(TsUtil.getAndIncrement());
|
|
|
|
|
- productPara.setOriginTime(new Date());//todo 有则获取
|
|
|
|
|
- list.add(productPara);
|
|
|
|
|
- cacheService.setHashKey(String.format(CacheConstant.D_DATA_CACHE, productVo.getGuid()), map.getKey(), map.getValue());
|
|
|
|
|
- if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
- taosMapper.batchInsert(list, productVo.getGuid(), productVo.getCode());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+// log.info("源数据:{}", data);
|
|
|
|
|
+// threadPoolExecutor.execute(() -> {
|
|
|
|
|
+//// StopWatch stopWatch = new StopWatch();
|
|
|
|
|
+//// stopWatch.start("云函数解析");
|
|
|
|
|
+// //1.云函数解析
|
|
|
|
|
+//// Object cloudData = productAnalyse.dataConvert(productVo);
|
|
|
|
|
+//// log.info("云函数解析:{}", cloudData);
|
|
|
|
|
+// //stopWatch.stop();
|
|
|
|
|
+//// 2.物模型解析
|
|
|
|
|
+//// stopWatch.start("物模型解析");
|
|
|
|
|
+//// Map<String, PropertyDto> modData = productAnalyse.modConvert(productVo, data);
|
|
|
|
|
+//// log.info("物模型解析:{}", modData);
|
|
|
|
|
+//// stopWatch.stop();
|
|
|
|
|
+// //判断是否创建子表
|
|
|
|
|
+//// stopWatch.start("子表判断");
|
|
|
|
|
+// tableCheck(productVo);
|
|
|
|
|
+//// stopWatch.stop();
|
|
|
|
|
+// //数据写入
|
|
|
|
|
+//// stopWatch.start("数据写入");
|
|
|
|
|
+// PropertyData propertyData = new PropertyData();
|
|
|
|
|
+// ProductPara productPara;
|
|
|
|
|
+// List<ProductPara> list = new ArrayList<>();
|
|
|
|
|
+// if (CollUtil.isNotEmpty(modData)) {
|
|
|
|
|
+// for (Map.Entry<String, PropertyDto> map : modData.entrySet()) {
|
|
|
|
|
+// map.getValue().setTime(LocalDateTimeUtil.formatNormal(LocalDateTime.now()));
|
|
|
|
|
+// productPara = new ProductPara();
|
|
|
|
|
+// propertyData.setTable(productVo.getCode() + "_" + productVo.getGuid());
|
|
|
|
|
+//// productPara.setCode(productVo.getCode());
|
|
|
|
|
+//// productPara.setGuid(productVo.getGuid());
|
|
|
|
|
+// productPara.setLine(map.getKey());
|
|
|
|
|
+// productPara.setReserve("");
|
|
|
|
|
+// productPara.setVal(map.getValue().getVal());
|
|
|
|
|
+// productPara.setMsgId(msgId);
|
|
|
|
|
+// productPara.setTs(TsUtil.getAndIncrement());
|
|
|
|
|
+// productPara.setOriginTime(new Date());//todo 有则获取
|
|
|
|
|
+// list.add(productPara);
|
|
|
|
|
+// cacheService.setHashKey(String.format(CacheConstant.D_DATA_CACHE, productVo.getGuid()), map.getKey(), map.getValue());
|
|
|
|
|
+// }
|
|
|
|
|
+// propertyData.setData(list);
|
|
|
|
|
+// taosService.addData(propertyData);
|
|
|
|
|
+// }
|
|
|
|
|
+//// stopWatch.stop();
|
|
|
|
|
+//// log.info("设备数据:{}", stopWatch.prettyPrint());
|
|
|
|
|
+// });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void tableCheck(ProductVo productVo) {
|
|
|
|
|
- Object o = cacheService.getKey(String.format(CacheConstant.TD_CACHE, productVo.getCode(), productVo.getGuid()));
|
|
|
|
|
- if (Objects.isNull(o)) {
|
|
|
|
|
- taosMapper.createDeviceTable(productVo.getGuid(), productVo.getCode());
|
|
|
|
|
- cacheService.setKey(String.format(CacheConstant.TD_CACHE, productVo.getCode(), productVo.getGuid()), true);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
}
|
|
}
|