|
@@ -3,86 +3,73 @@ package com.middle.platform.data.biz.service;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
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.utils.TsUtil;
|
|
|
|
|
-import com.middle.platform.manage.api.pojo.ProductVo;
|
|
|
|
|
|
|
+import com.middle.platform.data.biz.pojo.HistoryPara;
|
|
|
|
|
+import com.middle.platform.data.biz.pojo.PropertyDto;
|
|
|
|
|
+import com.middle.platform.data.biz.pojo.PropertyVo;
|
|
|
|
|
+import com.middle.platform.data.biz.pojo.mod.ModDto;
|
|
|
|
|
+import com.middle.platform.data.biz.pojo.mod.Property;
|
|
|
|
|
+import com.middle.platform.manage.api.feign.DeviceApi;
|
|
|
|
|
+import com.middle.platform.manage.api.feign.ModApi;
|
|
|
|
|
+import com.middle.platform.manage.api.pojo.DeviceVo;
|
|
|
import com.middle.platform.redis.constant.CacheConstant;
|
|
import com.middle.platform.redis.constant.CacheConstant;
|
|
|
import com.middle.platform.redis.service.CacheService;
|
|
import com.middle.platform.redis.service.CacheService;
|
|
|
-import jakarta.annotation.Resource;
|
|
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
-import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author xucaiqin
|
|
* @author xucaiqin
|
|
|
- * @date 2023-12-24 15:33:31
|
|
|
|
|
|
|
+ * @date 2023-12-26 10:14:27
|
|
|
*/
|
|
*/
|
|
|
-@Component
|
|
|
|
|
-@Slf4j
|
|
|
|
|
|
|
+@Service
|
|
|
|
|
+@RequiredArgsConstructor
|
|
|
public class DataService {
|
|
public class DataService {
|
|
|
- @Resource
|
|
|
|
|
- private TaosMapper taosMapper;
|
|
|
|
|
- @Resource
|
|
|
|
|
- private CacheService cacheService;
|
|
|
|
|
|
|
+ private final TaosMapper taosMapper;
|
|
|
|
|
+ private final CacheService cacheService;
|
|
|
|
|
+ private final DeviceApi deviceApi;
|
|
|
|
|
+ private final ModApi modApi;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 源数据处理
|
|
|
|
|
|
|
+ * 查询设备的属性数据
|
|
|
*
|
|
*
|
|
|
- * @param productVo
|
|
|
|
|
- * @param payload
|
|
|
|
|
|
|
+ * @param guid 设备guid
|
|
|
|
|
+ * @return
|
|
|
*/
|
|
*/
|
|
|
- public void rawData(String msgId, ProductVo productVo, Object payload) {
|
|
|
|
|
- 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);
|
|
|
|
|
|
|
+ public Object queryData(String guid, String name) {
|
|
|
|
|
+ List<PropertyDto> hash = cacheService.getHash(String.format(CacheConstant.D_DATA_CACHE, guid));
|
|
|
|
|
+ if (StringUtils.isNotBlank(name) && CollUtil.isNotEmpty(hash)) {
|
|
|
|
|
+ return hash.stream().filter(a -> StringUtils.equals(a.getName(), name)).collect(Collectors.toList());
|
|
|
}
|
|
}
|
|
|
- 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);
|
|
|
|
|
|
|
+ return hash;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 解析后的数据
|
|
|
|
|
|
|
+ * 历史记录查询
|
|
|
*
|
|
*
|
|
|
- * @param msgId
|
|
|
|
|
- * @param productVo
|
|
|
|
|
- * @param modData
|
|
|
|
|
|
|
+ * @param historyPara
|
|
|
|
|
+ * @return
|
|
|
*/
|
|
*/
|
|
|
- public void analyzeData(String msgId, ProductVo productVo, Object modData) {
|
|
|
|
|
- log.info("解析后的数据:{}", modData);
|
|
|
|
|
- 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);
|
|
|
|
|
|
|
+ public List<PropertyVo> historyData(HistoryPara historyPara) {
|
|
|
|
|
+ DeviceVo deviceVo = deviceApi.deviceCache(historyPara.getGuid());
|
|
|
|
|
+ if (Objects.isNull(deviceVo)) {
|
|
|
|
|
+ return new ArrayList<>();
|
|
|
}
|
|
}
|
|
|
- if (modData instanceof JSONObject jsonObject) {
|
|
|
|
|
- List<ProductPara> list = new ArrayList<>();
|
|
|
|
|
- ProductPara productPara;
|
|
|
|
|
- for (Map.Entry<String, Object> map : jsonObject.entrySet()) {
|
|
|
|
|
- productPara = new ProductPara();
|
|
|
|
|
- productPara.setCode(productVo.getCode());
|
|
|
|
|
- productPara.setGuid(productVo.getGuid());
|
|
|
|
|
- productPara.setLine(map.getKey());
|
|
|
|
|
- productPara.setReserve("");
|
|
|
|
|
- productPara.setVal(String.valueOf(map.getValue()));
|
|
|
|
|
- productPara.setMsgId(msgId);
|
|
|
|
|
- productPara.setTs(TsUtil.getAndIncrement());
|
|
|
|
|
- productPara.setOriginTime(new Date());//todo 有则获取
|
|
|
|
|
- list.add(productPara);
|
|
|
|
|
- }
|
|
|
|
|
- if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
- taosMapper.batchInsert(list, productVo.getGuid(), productVo.getCode());
|
|
|
|
|
|
|
+ if (Objects.equals(historyPara.getType(), 1)) {
|
|
|
|
|
+ List<PropertyVo> query = taosMapper.query(deviceVo.getCode(), historyPara.getGuid(), historyPara.getLine(), historyPara.getStartTime(), historyPara.getEndTime());
|
|
|
|
|
+ if (CollUtil.isNotEmpty(query)) {
|
|
|
|
|
+ Map<String, String> map = Optional.ofNullable(modApi.queryMod(deviceVo.getProductId())).map(mod -> {
|
|
|
|
|
+ ModDto modDto = JSONObject.parseObject(mod, ModDto.class);
|
|
|
|
|
+ return Optional.ofNullable(modDto).map(ModDto::getProperties).orElse(new ArrayList<>());
|
|
|
|
|
+ }).map(properties -> properties.stream().collect(Collectors.toMap(Property::getIdentifier, Property::getName, (a, b) -> a))).orElse(new HashMap<>());
|
|
|
|
|
+ for (PropertyVo propertyVo : query) {
|
|
|
|
|
+ propertyVo.setLineLabel(map.get(propertyVo.getLine()));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+ return query;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ return taosMapper.queryRaw(deviceVo.getCode(), historyPara.getGuid(), historyPara.getStartTime(), historyPara.getEndTime());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
}
|
|
}
|