ard-work/src/main/java/com/ruoyi/health/controller/HealthController.java
@@ -84,6 +84,7 @@ List<TreeDeptWell> treeDeptWells = new ArrayList<>(); if ((int) mapResult.get("code") == 200) { List<Map<String, Object>> listResult = (List<Map<String, Object>>) JSON.parse((String) mapResult.get("resdata")); // System.out.println(String.valueOf(listResult)); //循ç¯å¾å°æéä¸å¹é æ°æ® for (int i = 0; i < listResult.size(); i++) { String equipNumber = (String) listResult.get(i).get("EquipNumber"); ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java
@@ -188,7 +188,7 @@ @PostMapping("/onOff") @ApiOperation("è¿ç¨å¼é") public AjaxResult onOff(@RequestBody LockTypeParam lockTypeParam) { public AjaxResult onOff(@RequestBody LockTypeParam lockTypeParam) throws MqttException { return AjaxResult.success(ardSyCarLockService.onOff(lockTypeParam)); } ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -8,7 +8,6 @@ package com.ruoyi.sy.gps31; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.gps31.push.netty.PushClient; import com.gps31.push.netty.PushMsg; import com.gps31.push.netty.client.TcpClient; @@ -18,14 +17,12 @@ import com.ruoyi.sy.service.*; import com.ruoyi.sy.service.impl.*; import com.ruoyi.utils.gps.GeoTools; import com.ruoyi.utils.mqtt.MqttConsumer; import com.ruoyi.utils.mqtt.MqttOnce; import com.ruoyi.utils.qymqtt.MqttCustomerClient; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.paho.client.mqttv3.MqttException; import java.awt.geom.Point2D; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; @@ -93,6 +90,7 @@ String deptName = (String) result.get("deptName");//è·åé¨é¨åç§° String carModel = (String) result.get("carModel");//è·åè½¦è¾æ¨¡å Integer drct = (Integer) gpsMap.get("drct");//è·åè½¦è¾æ¨¡å Integer speed = (Integer) gpsMap.get("speed"); //å®ä¹2ç»´ç©ºé´ Point2D.Double point = new Point2D.Double(Double.parseDouble(lng), Double.parseDouble(lat)); List<Point2D.Double> pts = new ArrayList<Point2D.Double>(); @@ -106,12 +104,18 @@ ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); //æ³¨å ¥éBean ArdSyCarLockService lockService = SpringUtils.getBean(ArdSyCarLockService.class); //å建mqttå·¥å ·ç±»å¯¹è±¡ MqttOnce mqttOnce = new MqttOnce(); //æ¥è¯¢å®ä½æ²¹è½¦è¡¨ä¸æ¯å¦æè¯¥è½¦è¾ ArdAccessFence ardAccessFence = ardAccessFenceService.queryAccess(carId); //æ¥è¯¢ææè£ æ²¹ç¹å´æ List<ArdOilWall> ardOilWalls = ardOilWallService.accessAll(); //è½¦éæ è®° Boolean stop = true; //å¤æè½¦é if(speed>5){ //mqttå鿢å®Rtuç¶æ feng(carId,"æ½å°",carRtuService,lockService); stop = false; } //å¦ææ²¡æè¯´æè½¦è¾æªè¿å ¥è£ æ²¹ç¹ï¼éè¦å¹é ææè£ æ²¹ç¹å´æ if(ardAccessFence==null){ //è½¦è¾æªè¿å ¥è£ æ²¹ç¹ @@ -141,8 +145,10 @@ ardAccessFence1.setDrct(drct); ardAccessFence1.setIsAlarm(0); ardAccessFenceService.access(ardAccessFence1); //mqttå鿢å®Rtuç¶æ feng(carId,"è£ æ²¹ç¹",carRtuService,lockService,mqttOnce); if(stop){ //mqttå鿢å®Rtuç¶æ feng(carId,"è£ æ²¹ç¹",carRtuService,lockService); } break; } } @@ -201,8 +207,10 @@ ardAccessFence.setIntoShipmentTime(time); ardAccessFence.setNowWallName(ardOilWall.getName()); ardAccessFence.setLastTime(time); //mqttå鿢å®Rtuç¶æ feng(carId,"è£ æ²¹ç¹",carRtuService,lockService,mqttOnce); if(stop){ //mqttå鿢å®Rtuç¶æ feng(carId,"è£ æ²¹ç¹",carRtuService,lockService); } break; } } @@ -230,7 +238,7 @@ ardAccessFence.setLat(lat); ardAccessFenceService.updAccess(ardAccessFence); //å¼åºè£ æ²¹ç¹å´æ ï¼åéä¸éåæ½å°å½ä»¤ feng(carId,"æ½å°",carRtuService,lockService,mqttOnce); feng(carId,"æ½å°",carRtuService,lockService); } }else { //车è¾å·²ç»å¼åºè£ æ²¹ç¹ï¼æ¥çæ¯å¦æå¸æ²¹ç¹ID @@ -260,8 +268,10 @@ ardAccessFenceService.updAccess(ardAccessFence); //å·²ç»è¿å ¥å¸æ²¹ç¹ï¼ä¸å¨è·¯ä¸ä¸éè¦å车æ¥è¦ isRoad = false; //mqttå鿢å®Rtuç¶æ feng(carId,"叿²¹ç¹",carRtuService,lockService,mqttOnce); if(stop){ //mqttå鿢å®Rtuç¶æ feng(carId,"叿²¹ç¹",carRtuService,lockService); } break; } } @@ -304,7 +314,7 @@ } if (!GeoTools.IsPtInPoly(point, pts)) { //å¼åºäºå¸æ²¹ç¹å´æ ï¼åéä¸éåæ½è§£å°æä»¤ feng(carId,"æ½å°",carRtuService,lockService,mqttOnce); feng(carId,"æ½å°",carRtuService,lockService); //å é¤è¯¥æ¡è½¦è¾æ°æ® ardAccessFenceService.delAccess(carId); }else { @@ -420,9 +430,11 @@ sendMassage(); } private void feng(String carId,String type,ArdSyCarRtuService carRtuService,ArdSyCarLockService lockService,MqttOnce mqttOnce) throws MqttException { private void feng(String carId,String type,ArdSyCarRtuService carRtuService,ArdSyCarLockService lockService) throws MqttException { //æ¥è¯¢è£ æ²¹ç¹æ¢å®Rtuç¶æ ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId); //æ¥è¯¢éä¿¡æ¯ List<ArdSyCarLock> ardSyCarLocks = lockService.carLock(ardSyCarRtu.getId()); Integer fengType = null; if("è£ æ²¹ç¹".equals(type)){ fengType = ardSyCarRtu.getInstallType(); @@ -433,52 +445,70 @@ } //1è§£å° if(fengType==1){ Map<String,Object> map = new HashMap<>(); map.put("A01", 110000);//导é第ä¸è·¯ç»§çµå¨ map.put("A02", 110000);//导é第äºè·¯ç»§çµå¨ map.put("res", String.valueOf(System.currentTimeMillis())); mqttOnce.publishCar(carId,ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"è§£å°"); //妿䏿¯è§£å°å°ç¶æï¼ååéæ½å°å½ä»¤ if(ardSyCarLocks.get(0).getRelayInfo()==0){ Map<String,Object> map = new HashMap<>(); map.put("A01", 110000);//导é第ä¸è·¯ç»§çµå¨ 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); log.info("车è¾"+carId+"è§£å°å½ä»¤åéæåï¼"); // mqttOnce.publishCar(carId,ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"è§£å°"); } } //0æ½å° if(fengType==0){ //éå¼å ³ç¶æ int lockCloseNum = 0; //æ¥è¯¢éä¿¡æ¯ List<ArdSyCarLock> ardSyCarLocks = lockService.carLock(ardSyCarRtu.getId()); for (int j = 0; j < ardSyCarLocks.size(); j++) { ArdSyCarLock ardSyCarLock = ardSyCarLocks.get(j); String currents = ardSyCarLock.getCurrents(); Double currentInfo = ardSyCarLock.getCurrentInfo(); //çµæµå¼ä¸º4.0æ¯å ³éç¶æ if(currentInfo.equals(4.00) || currentInfo.equals(4)){ lockCloseNum += 1; }else { String key = ""; if(currents.equals("C01")){ key = "D03"; }else if(currents.equals("C02")){ key = "D04"; } Map<String,Object> map = new HashMap(); map.put(key, 0.01); map.put("res", String.valueOf(System.currentTimeMillis())); mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"å¼éï¼"+currents); while(true){ ArdSyCarLock ardSyCarLock1 = lockService.getCurrentInfo(ardSyCarRtu.getId(),currents); Double currentInfo1 = ardSyCarLock1.getCurrentInfo(); if(currentInfo1.equals(4.00)){ lockCloseNum +=1; break; //妿䏿¯æ½å°ç¶æï¼ååéæ½å°å½ä»¤ if(ardSyCarLocks.get(0).getRelayInfo()==1){ for (int j = 0; j < ardSyCarLocks.size(); j++) { ArdSyCarLock ardSyCarLock = ardSyCarLocks.get(j); String currents = ardSyCarLock.getCurrents(); Double currentInfo = ardSyCarLock.getCurrentInfo(); //çµæµå¼ä¸º4.0æ¯å ³éç¶æ if(currentInfo.equals(4.00) || currentInfo.equals(4)){ lockCloseNum += 1; }else { String key = ""; if(currents.equals("C01")){ key = "D03"; }else if(currents.equals("C02")){ key = "D04"; } Map<String,Object> map = new HashMap(); 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); // mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"å¼éï¼"+currents); while(true){ ArdSyCarLock ardSyCarLock1 = lockService.getCurrentInfo(ardSyCarRtu.getId(),currents); Double currentInfo1 = ardSyCarLock1.getCurrentInfo(); if(currentInfo1.equals(4.00) || currentInfo1.equals(4)){ lockCloseNum +=1; break; } } } } } if(lockCloseNum == 2){ Map<String,Object> map = new HashMap<>(); map.put("A01", 100000);//æå¼ç¬¬ä¸è·¯ç»§çµå¨ map.put("A02", 100000);//æå¼ç¬¬äºè·¯ç»§çµå¨ map.put("res", String.valueOf(System.currentTimeMillis())); mqttOnce.publishCar(carId,ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"æ½å°"); if(lockCloseNum == 2){ Map<String,Object> map = new HashMap<>(); map.put("A01", 100000);//æå¼ç¬¬ä¸è·¯ç»§çµå¨ 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); log.info("车è¾"+carId+"æ½å°å½ä»¤åéæåï¼"); // mqttOnce.publishCar(carId,ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"æ½å°"); } } } } ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
@@ -49,7 +49,7 @@ AjaxResult seal(RtuTypeParam rtuTypeParam); AjaxResult onOff(LockTypeParam lockTypeParam); AjaxResult onOff(LockTypeParam lockTypeParam) throws MqttException; List<ArdSyCarLock> lockIng(String carId); ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
@@ -17,14 +17,14 @@ import com.ruoyi.sy.service.ArdSyCarLockService; import com.ruoyi.sy.vo.CarVo; import com.ruoyi.sy.vo.RtuVo; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.utils.mqtt.MqttOnce; import com.ruoyi.utils.qymqtt.MqttCustomerClient; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.DecimalFormat; import java.util.*; /** @@ -42,6 +42,8 @@ private ArdSyCarRtuMapper rtuMapper; @Autowired private ArdSyCarLockMapper lockMapper; @Autowired private SysConfigMapper configMapper; @Override @@ -75,8 +77,9 @@ ArdSyCar ardSyCar = ardSyCarMapper.selectOne(queryWrapper); ardSyCar.setReserved1(ardSyCarRtu.getId()); ardSyCarMapper.updateById(ardSyCar); MqttOnce mqttOnce = new MqttOnce(); mqttOnce.subscribeCar(ardSyCarRtu); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(addRtuParam.getCarId()+"mqtt"); mqttCustomerClient.subscribe(ardSyCarRtu.getTopicSubscribe()); return num; } @@ -90,6 +93,11 @@ @Override public int delCar(String id) { ArdSyCarRtu ardSyCarRtu = rtuMapper.selectById(id); String subscribe = ardSyCarRtu.getTopicSubscribe(); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(ardSyCarRtu.getCarId()+"del"); mqttCustomerClient.unSubscribe(subscribe); rtuMapper.deleteById(id); QueryWrapper<ArdSyCarLock> queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("rtu_id",id); @@ -236,15 +244,19 @@ QueryWrapper<ArdSyCarRtu> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("carId",rtuTypeParam.getCarId()); ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper); MqttOnce mqttOnce = new MqttOnce(); //1è§£å° if(rtuTypeParam.getType()==1){ Map<String,Object> map = new HashMap<>(); map.put("A01", 110000);//导é第ä¸è·¯ç»§çµå¨ map.put("A02", 110000);//导é第äºè·¯ç»§çµå¨ map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); try { return AjaxResult.success(mqttOnce.publishCar(rtuTypeParam.getCarId(),ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"è§£å°")); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(rtuTypeParam.getCarId()+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); 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); } @@ -272,15 +284,19 @@ Map<String,Object> map = new HashMap(); map.put(key, 0.01); map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); try { mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"å¼éï¼"+currents); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(rtuTypeParam.getCarId()+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); // 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(); if(currentInfo1.equals(4.00)){ if(currentInfo1.equals(4.00) || currentInfo1.equals(4)){ lockCloseNum +=1; break; } @@ -292,8 +308,13 @@ map.put("A01", 100000);//æå¼ç¬¬ä¸è·¯ç»§çµå¨ map.put("A02", 100000);//æå¼ç¬¬äºè·¯ç»§çµå¨ map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); try { return AjaxResult.success(mqttOnce.publishCar(rtuTypeParam.getCarId(),ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"æ½å°")); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(rtuTypeParam.getCarId()+"change"); mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); 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); } @@ -303,7 +324,7 @@ } @Override public AjaxResult onOff(LockTypeParam lockTypeParam) { public AjaxResult onOff(LockTypeParam lockTypeParam) throws MqttException { QueryWrapper<ArdSyCarRtu> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",lockTypeParam.getCarId()); ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper); @@ -332,13 +353,50 @@ map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); System.out.println(mapString); MqttOnce mqttOnce = new MqttOnce(); try { return AjaxResult.success(mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(), mapString,"å¼å ³éæä»¤"+lockTypeParam.getNum())); } catch (MqttException e) { log.debug("å¼å ³éæä»¤åé失败"+e); } return AjaxResult.success(); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(lockTypeParam.getCarId()+"change"); 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 @@ -346,7 +404,14 @@ QueryWrapper<ArdSyCarRtu> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper); return lockMapper.lockList(ardSyCarRtu.getId()); List<ArdSyCarLock> locks = lockMapper.lockList(ardSyCarRtu.getId()); for (int i = 0; i < locks.size(); i++) { ArdSyCarLock ardSyCarLock = locks.get(i); double info = ardSyCarLock.getCurrentInfo(); int d = (int) ((int)(info*150/138.3 - 4)/0.16); ardSyCarLock.setCurrentInfo((double) d); } return locks; } ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java
ÎļþÒÑɾ³ý ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java
ÎļþÒÑɾ³ý ard-work/src/main/java/com/ruoyi/utils/qymqtt/AutoMqtt.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package com.ruoyi.utils.qymqtt; import com.ruoyi.sy.domain.ArdSyCarRtu; import com.ruoyi.sy.service.ArdSyCarRtuService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.List; @Slf4j @Component public class AutoMqtt { @Autowired private ArdSyCarRtuService ardSyCarRtuService; @PostConstruct public void init() { // ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); // //è·åçµç£éå°å // String mqttUrl = carRtuService.url("ElectromagneticLockUrl"); List<ArdSyCarRtu> rtus = ardSyCarRtuService.allCarTopicList(); for (int i = 0; i < rtus.size(); i++) { ArdSyCarRtu rtu = rtus.get(i); String carId = rtu.getCarId(); String subscribe = rtu.getTopicSubscribe(); try { MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(carId+"mqtt"); mqttCustomerClient.subscribe(subscribe); }catch (Exception e) { e.printStackTrace(); } } } } ard-work/src/main/java/com/ruoyi/utils/qymqtt/MqttCustomerClient.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,141 @@ package com.ruoyi.utils.qymqtt; 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; /** * mqtt客æ·ç«¯ */ @Slf4j @Component public class MqttCustomerClient { private static MqttClient client; private static MqttConnectOptions options; private PushCallback pushCallback; public static MqttClient getClient(){ return client; } public static void setClient(MqttClient client){ MqttCustomerClient.client=client; } public static MqttConnectOptions getOptions() { return options; } public static void setOptions(MqttConnectOptions options) { MqttCustomerClient.options = options; } /** * 客æ·ç«¯è¿æ¥ * * @param clientID 客æ·ç«¯Id */ public void connect(String clientID){ MqttClient client; try { ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); //è·åçµç£éå°å String mqttUrl = carRtuService.url("ElectromagneticLockUrl"); client=new MqttClient(mqttUrl,clientID,new MemoryPersistence()); MqttConnectOptions options = new MqttConnectOptions(); options.setCleanSession(true); options.setUserName("admin"); options.setPassword("xzx12345".toCharArray()); options.setConnectionTimeout(100); options.setKeepAliveInterval(60); options.setAutomaticReconnect(true); MqttCustomerClient.setClient(client); MqttCustomerClient.setOptions(options); try { client.setCallback(new PushCallback()); client.connect(options); }catch (Exception e){ e.printStackTrace(); } }catch (Exception e){ e.printStackTrace(); } } /** * åå¸ * @param topic * @param pushMessage */ public void pushlish(String topic,String pushMessage) throws MqttException { pushlish(2,false,topic,pushMessage); } /** * åå¸ * * @param qos è¿æ¥æ¹å¼ * @param retained æ¯å¦ä¿ç * @param topic ä¸»é¢ * @param pushMessage æ¶æ¯ä½ */ public void pushlish(int qos,boolean retained,String topic,String pushMessage) throws MqttException { MqttMessage message=new MqttMessage(); message.setQos(qos); message.setRetained(retained); message.setPayload(pushMessage.getBytes()); try{ client.publish(topic,message); }catch (Exception e){ log.error(topic+"åå¸å¤±è´¥ï¼"); } client.disconnect(); } /** * è®¢é æä¸ªä¸»é¢ * @param topic */ public void subscribe(String topic){ log.info("å¼å§è®¢é 主é¢" + topic); subscribe(topic,2); } public void subscribe(String topic,int qos){ try { MqttCustomerClient.getClient().subscribe(topic,qos); }catch (MqttException e){ e.printStackTrace(); } } //åæ¶è®¢é public void unSubscribe(String topicFilter){ try { client.unsubscribe(topicFilter); } catch (MqttException e) { System.out.println("åæ¶è®¢é 主é¢"+topicFilter+"失败"); e.getMessage(); } } //æå¼è¿æ¥ @PreDestroy//è¯¥æ³¨è§£å¯¹è±¡éæ¯å触å public void disConnect(){ try { client.disconnect(); } catch (MqttException e) { System.out.println("æå¼è¿æ¥äº§çå¼å¸¸"); e.getMessage(); } } } ard-work/src/main/java/com/ruoyi/utils/qymqtt/PushCallback.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,108 @@ package com.ruoyi.utils.qymqtt; 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.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.*; import java.nio.charset.StandardCharsets; import java.util.List; /** * æ¶è´¹çå¬ */ @Slf4j public class PushCallback implements MqttCallback { private MqttClient client; //æ³¨å ¥çµåéBean ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class); ArdSyCarLockService carLockService = SpringUtils.getBean(ArdSyCarLockService.class); // private MqttClient client; // private MqttConnectOptions options; // private String topic; // private int qos; // public PushCallback(MqttClient client, MqttConnectOptions options, String topic, int qos) { // this.client = client; // this.options = options; // this.topic = topic; // this.qos = qos; // } @Override public void connectionLost(Throwable throwable) { if (client == null || !client.isConnected()) { System.out.println("è¿æ¥æå¼ï¼æ£å¨éè¿...."); } } @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); } } @SneakyThrows @Override public void deliveryComplete(IMqttDeliveryToken token) { System.out.println("deliveryComplete---------" + token.isComplete()); int messageId = token.getMessageId(); String[] topics = token.getTopics(); // 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); } }