|
@@ -1,15 +1,16 @@
|
|
|
package org.thingsboard.server.config;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.rabbitmq.client.Channel;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
+import org.springframework.amqp.core.Message;
|
|
|
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|
|
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -46,117 +47,117 @@ public class ReceiveHandler {
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ @RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_SCADA})
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void receive_scada(Object msg, Message message, Channel channel) {
|
|
|
+
|
|
|
+ byte[] body = message.getBody();
|
|
|
+ String encode = Base64.getEncoder().encodeToString(body);
|
|
|
+ byte[] decode = Base64.getDecoder().decode(encode);
|
|
|
+ String s = new String(decode);
|
|
|
+ log.info("获取到物联网设备发送的监听数据:{}", s);
|
|
|
+
|
|
|
+ String s1 = StrUtils.underlineToHump(s);
|
|
|
+ ScadaDeviceData scadaDeviceData = JSON.parseObject(s1, ScadaDeviceData.class);
|
|
|
+ if (!ObjectUtils.isEmpty(scadaDeviceData)) {
|
|
|
+ scadaDeviceData.setJsonData(s);
|
|
|
+ boolean b = deviceDataService.save(scadaDeviceData);
|
|
|
+ if (b) {
|
|
|
+
|
|
|
+ saveScadaHistoryData(scadaDeviceData);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ void saveScadaHistoryData(ScadaDeviceData scadaDeviceData) {
|
|
|
+ Date generationTime = StringUtils.hasText(scadaDeviceData.getGenerationTime())
|
|
|
+ ? DateUtil.parse(scadaDeviceData.getGenerationTime(), YYYY_MM_DD_HH_MM_SS) : new Date();
|
|
|
+ List<ScadaHistory> scadaHistories = new ArrayList<>();
|
|
|
+
|
|
|
+ if (StringUtils.hasText(scadaDeviceData.getPressure())) {
|
|
|
+ String value = matcherVal(scadaDeviceData.getPressure());
|
|
|
+ String codeType = JsonItemConst.g_pressure;
|
|
|
+ ScadaHistory history = getScadaHistory(scadaDeviceData, generationTime, value, codeType);
|
|
|
+ scadaHistories.add(history);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.hasText(scadaDeviceData.getCumPosFlows())) {
|
|
|
+ String value = matcherVal(scadaDeviceData.getCumPosFlows());
|
|
|
+ String codeType = JsonItemConst.g_cum_pos_flows;
|
|
|
+ ScadaHistory history = getScadaHistory(scadaDeviceData, generationTime, value, codeType);
|
|
|
+ scadaHistories.add(history);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.hasText(scadaDeviceData.getCumNegFlowsNum())) {
|
|
|
+ String value = matcherVal(scadaDeviceData.getCumNegFlowsNum());
|
|
|
+ String codeType = JsonItemConst.g_cum_neg_flows;
|
|
|
+ ScadaHistory history = getScadaHistory(scadaDeviceData, generationTime, value, codeType);
|
|
|
+ scadaHistories.add(history);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.hasText(scadaDeviceData.getInstantaneousFlow())) {
|
|
|
+ String value = matcherVal(scadaDeviceData.getInstantaneousFlow());
|
|
|
+ String codeType = JsonItemConst.g_instantaneous_flow;
|
|
|
+ ScadaHistory history = getScadaHistory(scadaDeviceData, generationTime, value, codeType);
|
|
|
+ scadaHistories.add(history);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.hasText(scadaDeviceData.getSignalQuality())) {
|
|
|
+ String value = matcherVal(scadaDeviceData.getSignalQuality());
|
|
|
+ String codeType = JsonItemConst.g_signal_quality;
|
|
|
+ ScadaHistory history = getScadaHistory(scadaDeviceData, generationTime, value, codeType);
|
|
|
+ scadaHistories.add(history);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.hasText(scadaDeviceData.getBatteryVoltage())) {
|
|
|
+ String value = matcherVal(scadaDeviceData.getBatteryVoltage());
|
|
|
+ String codeType = JsonItemConst.g_battery_voltage;
|
|
|
+ ScadaHistory history = getScadaHistory(scadaDeviceData, generationTime, value, codeType);
|
|
|
+ scadaHistories.add(history);
|
|
|
+ }
|
|
|
+ List<ScadaHistory> scadaHistoryList = new ArrayList<>();
|
|
|
+ if (!CollectionUtils.isEmpty(scadaHistories)){
|
|
|
+ for (ScadaHistory scadaHistory : scadaHistories) {
|
|
|
+ if (CollUtil.isNotEmpty(scadaHistoryService.list(new QueryWrapper<ScadaHistory>()
|
|
|
+ .eq("code", scadaHistory.getCode())
|
|
|
+ .eq("scada_time", scadaHistory.getScadaTime())))) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ scadaHistoryList.add(scadaHistory);
|
|
|
+ }
|
|
|
+ scadaHistoryService.saveBatch(scadaHistoryList);
|
|
|
+ if(CollUtil.isNotEmpty(scadaHistoryList)){
|
|
|
+
|
|
|
+ scadaMonitorService.remove(Wrappers.<ScadaMonitor>query().lambda().isNotNull(ScadaMonitor::getId));
|
|
|
+ List<ScadaMonitor> scadaMonitors = new ArrayList<>();
|
|
|
+ scadaHistoryList.forEach(d->{
|
|
|
+ ScadaMonitor scadaMonitor = new ScadaMonitor();
|
|
|
+ scadaMonitor.setCode(d.getCode());
|
|
|
+ scadaMonitor.setValue(d.getValue());
|
|
|
+ scadaMonitor.setScadaTime(d.getScadaTime());
|
|
|
+ scadaMonitor.setUpdateTime(d.getUpdateTime());
|
|
|
+ scadaMonitor.setType(0);
|
|
|
+ scadaMonitor.setCodeType(d.getCodeType());
|
|
|
+ scadaMonitors.add(scadaMonitor);
|
|
|
+ });
|
|
|
+ scadaMonitorService.saveBatch(scadaMonitors);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private ScadaHistory getScadaHistory(ScadaDeviceData scadaDeviceData, Date generationTime, String value, String codeType) {
|
|
|
+ ScadaHistory history = new ScadaHistory();
|
|
|
+ history.setCode(scadaDeviceData.getDeviceName());
|
|
|
+ history.setCodeType(codeType);
|
|
|
+ history.setValue(value);
|
|
|
+ history.setScadaTime(generationTime);
|
|
|
+ history.setUpdateTime(new Date());
|
|
|
+ return history;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|