package com.fastbee.mq.service.impl;
|
|
import com.fastbee.common.core.mq.DeviceReportBo;
|
import com.fastbee.common.utils.gateway.mq.TopicsUtils;
|
import com.fastbee.mq.model.ReportDataBo;
|
import com.fastbee.mq.service.IDataHandler;
|
import com.fastbee.mq.service.IMqttMessagePublish;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
|
/**
|
* @author gsb
|
* @date 2023/2/27 14:42
|
*/
|
@Component
|
@Slf4j
|
public class DeviceOtherMsgHandler {
|
|
@Resource
|
private TopicsUtils topicsUtils;
|
@Resource
|
private IDataHandler dataHandler;
|
@Resource
|
private IMqttMessagePublish messagePublish;
|
|
/**
|
* 非属性消息消息处理入口
|
* @param bo
|
*/
|
public void messageHandler(DeviceReportBo bo){
|
String type = "";
|
String name = topicsUtils.parseTopicName(bo.getTopicName());
|
ReportDataBo data = this.buildReportData(bo);
|
switch (name) {
|
case "info":
|
dataHandler.reportDevice(data);
|
break;
|
case "ntp":
|
messagePublish.publishNtp(data);
|
break;
|
// 接收 property/get 模拟设备数据
|
case "property":
|
type = topicsUtils.parseTopicName4(bo.getTopicName());
|
break;
|
case "function":
|
data.setShadow(false);
|
data.setType(2);
|
data.setRuleEngine(true);
|
dataHandler.reportData(data);
|
break;
|
case "event":
|
data.setType(3);
|
data.setRuleEngine(true);
|
dataHandler.reportEvent(data);
|
break;
|
case "property-offline":
|
data.setShadow(true);
|
data.setType(1);
|
dataHandler.reportData(data);
|
break;
|
case "function-offline":
|
data.setShadow(true);
|
data.setType(2);
|
dataHandler.reportData(data);
|
break;
|
case "property-online":
|
break;
|
case "function-online":
|
type = topicsUtils.parseTopicName4(bo.getTopicName());
|
if (type.equals("get")) {
|
log.info("function-online:{}",bo);
|
//处理功能下发
|
messagePublish.sendFunctionMessage(bo);
|
}
|
break;
|
}
|
}
|
|
/**组装数据*/
|
private ReportDataBo buildReportData(DeviceReportBo bo){
|
String message = new String(bo.getData());
|
log.info("收到设备信息[{}]",message);
|
Long productId = topicsUtils.parseProductId(bo.getTopicName());
|
ReportDataBo dataBo = new ReportDataBo();
|
dataBo.setMessage(message);
|
dataBo.setProductId(productId);
|
dataBo.setSerialNumber(bo.getSerialNumber());
|
dataBo.setRuleEngine(false);
|
return dataBo;
|
}
|
|
}
|