package com.fzzy.gateway.hx2023.service; import com.alibaba.fastjson2.JSONObject; import com.fzzy.api.data.PushProtocol; import com.fzzy.data.ConfigData; import com.fzzy.gateway.api.GatewayDeviceReportService; import com.fzzy.gateway.data.BaseReqData; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.hx2023.ScConstant; import com.fzzy.gateway.hx2023.data.LprData; import com.fzzy.gateway.hx2023.data.WebSocketPacket; import com.fzzy.gateway.hx2023.data.WebSocketPacketHeader; import com.fzzy.gateway.hx2023.data.WeightInfo; import com.fzzy.gateway.hx2023.kafka.KafkaDeviceReportService; import com.fzzy.mqtt.MqttGatewayService; import jdk.nashorn.internal.runtime.regexp.joni.Config; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Slf4j @Component public class DeviceReportServiceImpl implements GatewayDeviceReportService { @Resource private KafkaDeviceReportService kafkaDeviceReportService; @Resource private MqttGatewayService publishService; @Resource private ConfigData configData; @Override public String getProtocol() { return PushProtocol.GATEWAY_SC_2023.getCode(); } @Override public BaseResp reportGrainData(BaseReqData reqData) { String topic = ScConstant.TOPIC_REPORT; topic = topic.replace("${productId}", reqData.getProductId()).replace("${deviceId}", reqData.getDeviceId()); //如果是测试模式不执行推送 if(configData.getActive().indexOf("dev")>=0){ log.info("----------------------------推送MQTT粮情信息,注:调试模式不推送---------------------------"); log.info("-----TOPIC-----{}", topic); log.info("-----Message-----{}", reqData.getData()); return new BaseResp(); } publishService.publishMqttWithTopic(reqData.getData(), topic); log.info("----------------------------推送MQTT粮情信息---------------------------"); log.info("-----TOPIC-----{}", topic); log.info("-----Message-----{}", reqData.getData()); return new BaseResp(); } @Override public BaseResp reportWeightData(BaseReqData reqData) { String topic = ScConstant.TOPIC_MESSAGE_REPORT; topic = topic.replace("${productId}", reqData.getProductId()).replace("${deviceId}", reqData.getDeviceId()); if (null == reqData.getData()) { GatewayDevice device = reqData.getDevice(); WebSocketPacket packet = new WebSocketPacket(); WebSocketPacketHeader header = new WebSocketPacketHeader(); header.setDeviceName(device.getDeviceName()); header.setProductId(device.getProductId()); packet.setHeaders(header); packet.setMessageType(ScConstant.MESSAGE_TYPE_REPORT_PROPERTY); packet.setDeviceId(device.getDeviceId()); //设置信息主体 WeightInfo weightInfo = new WeightInfo(); weightInfo.setGrossWeight(reqData.getWeight()); weightInfo.setNetWeight(reqData.getWeight()); weightInfo.setNetWeight(reqData.getWeight()); weightInfo.setWeightUnit("KG"); JSONObject jsonObject = new JSONObject(); jsonObject.put("weightInfo", JSONObject.toJSONString(weightInfo)); packet.setProperties(jsonObject); packet.setTimestamp(System.currentTimeMillis()); reqData.setData(JSONObject.toJSONString(packet)); } publishService.publishMqttWithTopic(reqData.getData(), topic); log.info("----------------------------推送MQTT地磅信息---------------------------"); log.info("-----TOPIC-----{}", topic); log.info("-----Message-----{}", reqData.getData()); return new BaseResp(); } @Override public BaseResp reportLprData(BaseReqData reqData) { String topic = ScConstant.TOPIC_MESSAGE_REPORT; topic = topic.replace("${productId}", reqData.getProductId()).replace("${deviceId}", reqData.getDeviceId()); GatewayDevice device = reqData.getDevice(); if (StringUtils.isEmpty(reqData.getData())) { WebSocketPacket packet = new WebSocketPacket(); WebSocketPacketHeader header = new WebSocketPacketHeader(); header.setDeviceName(reqData.getDeviceName()); header.setProductId(reqData.getProductId()); packet.setHeaders(header); packet.setMessageType(ScConstant.MESSAGE_TYPE_REPORT_PROPERTY); packet.setDeviceId(reqData.getDeviceId()); packet.setMessageId(System.currentTimeMillis() + ""); //设置信息主体 LprData lpr = new LprData(); lpr.setDeviceId(reqData.getDeviceId()); lpr.setCarNumber(reqData.getCarNumber()); JSONObject jsonObject = new JSONObject(); jsonObject.put("carNumber", reqData.getCarNumber()); jsonObject.put("position", device.getPosition()); packet.setProperties(jsonObject); packet.setTimestamp(System.currentTimeMillis()); reqData.setData(JSONObject.toJSONString(packet)); } publishService.publishMqttWithTopic(reqData.getData(), topic); log.info("----------------------------推送MQTT车牌识别信息---------------------------"); log.info("-----TOPIC-----{}", topic); log.info("-----Message-----{}", reqData.getData()); return new BaseResp(); } @Override public BaseResp reportGrainDataByKafka(BaseReqData reqData) { String topic = ScConstant.TOPIC_MESSAGE_REPORT; kafkaDeviceReportService.publishWithTopic(reqData.getData(), topic); return new BaseResp(); } }