| ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/qymqtt/AutoMqtt.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/qymqtt/newM/EmqClient.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/qymqtt/newM/MessageCallback.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/qymqtt/newM/QosEnum.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/MqttCustomerClient.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/PushCallback.java | ●●●●● patch | view | raw | blame | history |
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -17,7 +17,9 @@ import com.ruoyi.sy.service.*; import com.ruoyi.sy.service.impl.*; import com.ruoyi.utils.gps.GeoTools; import com.ruoyi.utils.qymqtt.MqttCustomerClient; import com.ruoyi.utils.qymqtt.newM.EmqClient; import com.ruoyi.utils.qymqtt.newM.QosEnum; import com.ruoyi.utils.qymqtt.oldM.MqttCustomerClient; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.paho.client.mqttv3.MqttException; @@ -453,9 +455,9 @@ map.put("A02", 110000);//导通第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = com.alibaba.fastjson.JSON.toJSONString(map); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(carId+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); EmqClient emqClient = new EmqClient(carId+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); log.info("车辆"+carId+"解封命令发送成功!"); // mqttOnce.publishCar(carId,ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"解封"); } @@ -484,9 +486,9 @@ map.put(key, 0.01); map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = com.alibaba.fastjson.JSON.toJSONString(map); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(carId+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); EmqClient emqClient = new EmqClient(carId+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); // mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"开锁:"+currents); while(true){ ArdSyCarLock ardSyCarLock1 = lockService.getCurrentInfo(ardSyCarRtu.getId(),currents); @@ -504,9 +506,9 @@ map.put("A02", 100000);//断开第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = com.alibaba.fastjson.JSON.toJSONString(map); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(carId+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); EmqClient emqClient = new EmqClient(carId+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); log.info("车辆"+carId+"施封命令发送成功!"); // mqttOnce.publishCar(carId,ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"施封"); } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
@@ -19,7 +19,9 @@ import com.ruoyi.sy.vo.RtuVo; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.utils.qymqtt.MqttCustomerClient; import com.ruoyi.utils.qymqtt.newM.EmqClient; import com.ruoyi.utils.qymqtt.newM.QosEnum; import com.ruoyi.utils.qymqtt.oldM.MqttCustomerClient; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttException; import org.springframework.beans.factory.annotation.Autowired; @@ -251,15 +253,11 @@ map.put("A02", 110000);//导通第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); try { MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(rtuTypeParam.getCarId()+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); return AjaxResult.success("解封命令发送成功!"); EmqClient emqClient = new EmqClient(rtuTypeParam.getCarId()+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); return AjaxResult.success("解封命令发送成功!"); // return AjaxResult.success(mqttOnce.publishCar(rtuTypeParam.getCarId(),ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"解封")); } catch (MqttException e) { log.debug("解封指令发生失败"+e); } } //0施封 if(rtuTypeParam.getType()==0){ @@ -285,14 +283,10 @@ map.put(key, 0.01); map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); try { MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(rtuTypeParam.getCarId()+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); EmqClient emqClient = new EmqClient(rtuTypeParam.getCarId()+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); // mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"开锁:"+currents); } catch (MqttException e) { log.debug("开锁指令发生失败"+e); } while(true){ ArdSyCarLock ardSyCarLock1 = getCurrentInfo(ardSyCarRtu.getId(),currents); Double currentInfo1 = ardSyCarLock1.getCurrentInfo(); @@ -309,15 +303,11 @@ map.put("A02", 100000);//断开第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); try { MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(rtuTypeParam.getCarId()+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); return AjaxResult.success("施封命令发生成功!"); EmqClient emqClient = new EmqClient(rtuTypeParam.getCarId()+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); return AjaxResult.success("施封命令发生成功!"); // return AjaxResult.success(mqttOnce.publishCar(rtuTypeParam.getCarId(),ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"施封")); } catch (MqttException e) { log.debug("施封指令发生失败"+e); } } } return AjaxResult.success(); @@ -353,50 +343,13 @@ map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); System.out.println(mapString); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(lockTypeParam.getCarId()+"change"+UUID.randomUUID()); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); EmqClient emqClient = new EmqClient(lockTypeParam.getCarId()+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); // MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); // mqttCustomerClient.connect(lockTypeParam.getCarId()+"change"+UUID.randomUUID()); // mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); return AjaxResult.success("开关锁命令发送成功,发送进度为"+lockTypeParam.getNum()); // QueryWrapper<SysConfig> queryWrapper1 = new QueryWrapper<>(); // queryWrapper1.eq("config_key","ElectromagneticLockUrl"); // SysConfig sysConfig = configMapper.selectOne(queryWrapper1); // String url = ""; // if(sysConfig!=null){ // url = sysConfig.getConfigValue(); // }else { // return AjaxResult.error("配置表无地址数据"); // } // MqttConsumer mqttConsumer = new MqttConsumer(); // mqttConsumer.getClientCar(url,lockTypeParam.getCarId()); // mqttConsumer.publishCar(1,false,ardSyCarRtu.getTopicPublish(),mapString); // mqttConsumer.disConnect(); // return AjaxResult.success(); //MqttOnce客户端-----开始 // MqttOnce mqttOnce = new MqttOnce(); // return AjaxResult.success(mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(), mapString,"开关锁指令"+lockTypeParam.getNum())); //MqttOnce客户端-----结束 //EmqClient客户端-----开始 // EmqClient emqClient = new EmqClient("tcp://112.98.126.2:1883",String.valueOf(UUID.randomUUID())); // emqClient.connect("admin","xzx12345"); // log.info("主题:"+ardSyCarRtu.getTopicPublish()); // emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); // System.out.println("////////////////////"); // System.out.println(mapString); // emqClient.disConnect(); // return AjaxResult.success(ardSyCarRtu.getTopicPublish()+"开关锁指令"+lockTypeParam.getNum()+"发布成功!"); //EmqClient客户端-----结束 //demo------开始 // EmqClient emqClient = new EmqClient("tcp://112.98.126.2:1883","mqttTestp"); // emqClient.connect("admin","xzx12345"); // Map<String,Object> map = new HashMap(); // map.put("D03", 99.99);//范围是0.01到99.99 // map.put("res", String.valueOf(new Date().getTime())); // System.out.println(map); // String msg = JSON.toJSONString(map); // emqClient.publish("/p14/set/",msg,QosEnum.QoS2,false); // emqClient.disConnect(); // return AjaxResult.success(); //demo----结束 } @Override ard-work/src/main/java/com/ruoyi/utils/qymqtt/AutoMqtt.java
@@ -2,6 +2,8 @@ import com.ruoyi.sy.domain.ArdSyCarRtu; import com.ruoyi.sy.service.ArdSyCarRtuService; import com.ruoyi.utils.qymqtt.newM.EmqClient; import com.ruoyi.utils.qymqtt.newM.QosEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -17,7 +19,7 @@ @Autowired private ArdSyCarRtuService ardSyCarRtuService; // @PostConstruct @PostConstruct public void init() { // ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); // //获取电磁锁地址 @@ -28,9 +30,13 @@ String carId = rtu.getCarId(); String subscribe = rtu.getTopicSubscribe(); try { MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(carId+"mqtt"+ UUID.randomUUID()); mqttCustomerClient.subscribe(subscribe); // MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); // mqttCustomerClient.connect(carId+"mqtt"+ UUID.randomUUID()); // mqttCustomerClient.subscribe(subscribe); EmqClient emqClient = new EmqClient(carId+"mqttSubscribe"); emqClient.connect(); emqClient.subscribe(subscribe, QosEnum.QoS2); log.info("订阅主题:"+subscribe); }catch (Exception e) { e.printStackTrace(); } ard-work/src/main/java/com/ruoyi/utils/qymqtt/newM/EmqClient.java
New file @@ -0,0 +1,115 @@ package com.ruoyi.utils.qymqtt.newM; import javax.annotation.PreDestroy; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.sy.service.ArdSyCarRtuService; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttClientPersistence; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class EmqClient { private IMqttClient mqttClient; private MessageCallback messageCallback; public EmqClient(String clientId){ ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); //获取电磁锁地址 String mqttUrl = carRtuService.url("ElectromagneticLockUrl"); MqttClientPersistence mempersitence = new MemoryPersistence();//持久化方式 try { this.mqttClient = new MqttClient(mqttUrl,clientId,mempersitence);//设置连接broker的host及clientId this.messageCallback = new MessageCallback(); } catch (MqttException e) { System.out.println("初始化客户端mqttClient对象失败"); System.out.println("brokerUrl:"+mqttUrl); System.out.println("clientId:"+clientId); e.getMessage(); } } //连接broker public void connect(){ MqttConnectOptions options = new MqttConnectOptions(); options.setAutomaticReconnect(true); options.setUserName("admin"); options.setPassword("xzx12345".toCharArray()); options.setCleanSession(true);//设置为临时会话 mqttClient.setCallback(messageCallback);//设置回调 try { mqttClient.connect(options); } catch (MqttException e) { System.out.println("mqtt客户端连接服务端失败"); e.getMessage(); } } //断开连接 @PreDestroy//该注解对象销毁后触发 public void disConnect(){ try { mqttClient.disconnect(); } catch (MqttException e) { System.out.println("断开连接产生异常"); e.getMessage(); } } //重连 public void reConnect(){ try { mqttClient.reconnect(); } catch (MqttException e) { System.out.println("重连失败,失败原因"); e.getMessage(); } } //发布消息 传参为主题,消息,等级,是否保留消息 public void publish(String topic, String msg, QosEnum qos, boolean retain){ MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setPayload(msg.getBytes()); mqttMessage.setQos(qos.value()); mqttMessage.setRetained(retain); try { mqttClient.publish(topic,mqttMessage); mqttClient.disconnect(); } catch (MqttException e) { System.out.println("发布消息失败"); System.out.println("主题:"+topic); System.out.println("消息:"+msg); System.out.println("qos等级:"+qos.value()); e.getMessage(); } } //订阅 public void subscribe(String topicFilter,QosEnum qos){ try { mqttClient.subscribe(topicFilter,qos.value()); } catch (MqttException e) { System.out.println("订阅主题"+topicFilter+"失败"); System.out.println("qos等级:"+qos.value()); e.getMessage(); } } //取消订阅 public void unSubscribe(String topicFilter){ try { mqttClient.unsubscribe(topicFilter); } catch (MqttException e) { System.out.println("取消订阅主题"+topicFilter+"失败"); e.getMessage(); } } } ard-work/src/main/java/com/ruoyi/utils/qymqtt/newM/MessageCallback.java
New file @@ -0,0 +1,104 @@ package com.ruoyi.utils.qymqtt.newM; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.sy.domain.ArdSyCarLock; import com.ruoyi.sy.domain.ArdSyCarRtu; import com.ruoyi.sy.service.ArdSyCarLockService; import com.ruoyi.sy.service.ArdSyCarRtuService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttMessage; import com.alibaba.fastjson.JSON; @Slf4j public class MessageCallback implements MqttCallback { private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //注入电子锁Bean ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); ArdSyCarLockService carLockService = SpringUtils.getBean(ArdSyCarLockService.class); @Override//丢失了对服务端的连接后触发的回调 public void connectionLost(Throwable arg0) { // 资源的清理 重连 System.out.println(arg0.getMessage()); arg0.printStackTrace(); System.out.println("丢失了对服务端的连接"); } @Override //消息发布者消息发布完成产生的回调 public void deliveryComplete(IMqttDeliveryToken token) { System.out.println("deliveryComplete---------" + token.isComplete()); int messageId = token.getMessageId(); String[] topics = token.getTopics(); String clientId = token.getClient().getClientId(); // byte[] msg = token.getMessage().getPayload(); String topicStr = ""; for(String topic : topics){ topicStr = topicStr + topic + ","; } topicStr = topicStr.substring(0, topicStr.length() - 1); System.out.println("消息发布完成,messageId="+messageId+",topics="+topicStr+",clientId="+clientId); } @Override//消息订阅者收到消息后触发的回调 public void messageArrived(String topic, MqttMessage message) throws Exception { try { System.out.println("【车辆锁主题】:"+topic+"【车辆锁信息】:"+new String(message.getPayload(), StandardCharsets.UTF_8)); //出来回调数据 List<ArdSyCarLock> ardSyCarLocks = carLockService.data(new String(message.getPayload(), StandardCharsets.UTF_8)); //根据topic查询RTUID ArdSyCarRtu ardSyCarRtu = carRtuService.subscribeByCarId(topic); String RTU = ardSyCarRtu.getId(); //根据RTUID查询锁 List<ArdSyCarLock> ardSyCarLockList = carLockService.carLock(RTU); for (int i = 0; i < ardSyCarLocks.size(); i++) { ArdSyCarLock ardSyCarLockData = ardSyCarLocks.get(i); String relay = ardSyCarLockData.getRelay(); Integer relayInfo = ardSyCarLockData.getRelayInfo(); String current = ardSyCarLockData.getCurrents(); Double currentInfo = ardSyCarLockData.getCurrentInfo(); for (int j = 0; j < ardSyCarLockList.size(); j++) { ArdSyCarLock lock = ardSyCarLockList.get(j); String relay1 = lock.getRelay(); String current1 = lock.getCurrents(); Integer relayInfo1 = lock.getRelayInfo(); Double currentInfo1 = lock.getCurrentInfo(); Boolean upd = false; if(relay.equals(relay1)){ if(!relayInfo.equals(relayInfo1)){ lock.setRelayInfo(relayInfo); upd = true; } } if(current.equals(current1)){ if(!currentInfo.equals(currentInfo1)){ lock.setCurrentInfo(currentInfo); upd = true; } } if(upd){ int num = carLockService.updLock(lock); // log.debug("修改"+num+"数据"); } } } } catch (Exception e) { log.debug("车辆电磁锁处理mqtt消息异常:" + e); } } } ard-work/src/main/java/com/ruoyi/utils/qymqtt/newM/QosEnum.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.utils.qymqtt.newM; public enum QosEnum { QoS0(0),QoS1(1),QoS2(2); private final int value; QosEnum(int value) { this.value = value; } public int value(){ return this.value; } } ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/MqttCustomerClient.java
File was renamed from ard-work/src/main/java/com/ruoyi/utils/qymqtt/MqttCustomerClient.java @@ -1,11 +1,10 @@ package com.ruoyi.utils.qymqtt; package com.ruoyi.utils.qymqtt.oldM; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.sy.service.ArdSyCarRtuService; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PreDestroy; ard-work/src/main/java/com/ruoyi/utils/qymqtt/oldM/PushCallback.java
File was renamed from ard-work/src/main/java/com/ruoyi/utils/qymqtt/PushCallback.java @@ -1,4 +1,4 @@ package com.ruoyi.utils.qymqtt; package com.ruoyi.utils.qymqtt.oldM; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.sy.domain.ArdSyCarLock;