From af0829b98126c3680ceefdc17621473fa3f97750 Mon Sep 17 00:00:00 2001
From: aijinhui <aijinhui>
Date: Wed, 22 Nov 2023 11:33:34 +0800
Subject: [PATCH] 清淤锁
---
/dev/null | 161 -------------
ard-work/src/main/java/com/ruoyi/utils/qymqtt/PushCallback.java | 108 +++++++++
ard-work/src/main/java/com/ruoyi/utils/qymqtt/MqttCustomerClient.java | 141 +++++++++++
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java | 101 ++++++-
ard-work/src/main/java/com/ruoyi/health/controller/HealthController.java | 1
ard-work/src/main/java/com/ruoyi/utils/qymqtt/AutoMqtt.java | 38 +++
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java | 2
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java | 136 ++++++----
ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java | 2
9 files changed, 456 insertions(+), 234 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/health/controller/HealthController.java b/ard-work/src/main/java/com/ruoyi/health/controller/HealthController.java
index 6637e42..8e4e345 100644
--- a/ard-work/src/main/java/com/ruoyi/health/controller/HealthController.java
+++ b/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");
diff --git a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java
index b9510e0..3ad7937 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java
+++ b/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));
}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
index 98f2840..cc3d87e 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
+++ b/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)),"施封");
+ }
}
}
}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java b/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
index 1042150..de77d89 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
+++ b/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);
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
index 7390c64..a761b97 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
+++ b/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;
}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java
deleted file mode 100644
index 9f1f0fd..0000000
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.ruoyi.utils.mqtt;
-
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.sy.domain.ArdSyCarRtu;
-import com.ruoyi.sy.mapper.ArdSyCarRtuMapper;
-import com.ruoyi.sy.service.ArdSyCarRtuService;
-import com.ruoyi.system.service.ISysConfigService;
-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.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * @author Administrator
- */
-@Slf4j
-@Component
-public class MqttOnce{
-
- @Autowired
- private ArdSyCarRtuService ardSyCarRtuService;
-
- @PostConstruct
- public void init() {
- 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 {
- MqttClient client = getMqttClient(carId);
- MqttConnectOptions options = getMqttConnectOptions();
- client.setCallback(new MqttOnceCallback(client,options,subscribe,2));
-// log.debug("--添加车辆电磁锁回调处理类");
- client.connect(options);
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
- public void subscribeCar(ArdSyCarRtu ardSyCarRtu){
- String carId = ardSyCarRtu.getCarId();
- String subscribe = ardSyCarRtu.getTopicSubscribe();
- try {
- MqttClient client = getMqttClient(carId);
- MqttConnectOptions options = getMqttConnectOptions();
- client.setCallback(new MqttOnceCallback(client,options,subscribe,2));
-// log.debug("--添加车辆电磁锁回调处理类");
- client.connect(options);
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public MqttClient getMqttClient(String carId) throws MqttException {
- ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class);
- //获取电磁锁地址
- String mqttUrl = carRtuService.url("ElectromagneticLockUrl");
- MqttClient client = new MqttClient(mqttUrl,carId+"mqTest");
- //log.debug("--创建"+carId+"号车辆电子锁mqtt客户端");
- return client;
- }
-
- public MqttConnectOptions getMqttConnectOptions(){
- MqttConnectOptions options = new MqttConnectOptions();
- //设置用户名密码
- options.setUserName("admin");
- options.setPassword("xzx12345".toCharArray());
- // 设置超时时间
- options.setConnectionTimeout(100);
- // 设置会话心跳时间
- options.setKeepAliveInterval(60);
- // 是否清除session
- options.setCleanSession(true);
-// log.debug("--生成"+carId+"号车辆电子锁mqtt配置对象");
- return options;
- }
-
- public String publishCar(String carId,String topic,String message,String type) throws MqttException {
- MqttClient client = getMqttClient(carId);
- MqttConnectOptions options = getMqttConnectOptions();
- client.connect(options);
- MqttMessage msg = new MqttMessage(message.getBytes());
- msg.setQos(2);
- try{
- client.publish(topic,msg);
- }catch (Exception e){
- log.debug("发布消息失败"+topic+"消息:"+msg);
- e.getMessage();
- }
- client.disconnect();
- return topic+"发布"+type+"指令成功!消息:"+msg;
- }
-
-}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java
deleted file mode 100644
index 98675bc..0000000
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package com.ruoyi.utils.mqtt;
-
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.sy.domain.ArdSyCarLock;
-import com.ruoyi.sy.domain.ArdSyCarRtu;
-import com.ruoyi.sy.gps31.PositionContainer;
-import com.ruoyi.sy.service.ArdSyCarLockService;
-import com.ruoyi.sy.service.ArdSyCarRtuService;
-import lombok.extern.slf4j.Slf4j;
-import org.eclipse.paho.client.mqttv3.*;
-
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @Description: mqtt回调处理类
- * @ClassName: MqttConsumerCallback
- * @Author: 刘苏义
- * @Date: 2023年05月29日9:55
- * @Version: 1.0
- **/
-@Slf4j(topic = "mqtt")
-public class MqttOnceCallback implements MqttCallbackExtended {
-
- private MqttClient client;
- private MqttConnectOptions options;
- private String topic;
- private int qos;
- //注入电子锁Bean
- ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class);
- ArdSyCarLockService carLockService = SpringUtils.getBean(ArdSyCarLockService.class);
-
- public MqttOnceCallback(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 cause) {
-// log.info("车辆电磁锁MQTT连接断开,发起重连......");
- while (!client.isConnected()) {
- try {
- Thread.sleep(10000);
- if (null != client && !client.isConnected()) {
- client.reconnect();
-// log.error("车辆电磁锁尝试重新连接");
- } else {
- client.connect(options);
-// log.error("车辆电磁锁尝试建立新连接");
- }
- } catch (Exception e) {
-// log.error("车辆电磁锁断开重连异常:" + e.getMessage());
- }
- }
- }
-
- /**
- * 接收到消息调用令牌中调用
- */
- @Override
- public void deliveryComplete(IMqttDeliveryToken token) {
- //log.info("deliveryComplete---------" + Arrays.toString(topic));
- }
-
- /**
- * 消息处理
- */
- @Override
- public void messageArrived(String topic, MqttMessage message) {
- 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+"数据");
- }
- }
- }
-// //存入集合
-// Map<String,List<ArdSyCarLock>> map = PositionContainer.getTopicSubscribe();
-// if(map==null){
-// Map<String,List<ArdSyCarLock>> newMap = new HashMap<>();
-// newMap.put("topic",ardSyCarLocks);
-// PositionContainer.setTopicSubscribe(newMap);
-// }else {
-// for(Map.Entry entry : map.entrySet()){
-// String mapTopic = (String) entry.getKey();
-// if(topic.equals(mapTopic)){
-// map.remove(entry.getKey());
-// }
-// Map<String,List<ArdSyCarLock>> newMap = new HashMap<>();
-// newMap.put("topic",ardSyCarLocks);
-// PositionContainer.setTopicSubscribe(newMap);
-// }
-// }
-// log.debug(String.valueOf(map));
- } catch (Exception e) {
- log.debug("车辆电磁锁处理mqtt消息异常:" + e);
- }
- }
-
- /**
- * mqtt连接后订阅主题
- */
- @Override
- public void connectComplete(boolean b, String s) {
- try {
- if (null != topic) {
- if (client.isConnected()) {
- client.subscribe(topic, qos);
-// log.info("车辆电磁锁mqtt连接成功" );
-// log.info("--车辆电磁锁订阅主题::" + topic);
- } else {
- log.info("车辆电磁锁mqtt连接失败");
- }
- }
- } catch (Exception e) {
- log.info("车辆电磁锁mqtt订阅主题异常:" + e);
- }
- }
-}
-
diff --git a/ard-work/src/main/java/com/ruoyi/utils/qymqtt/AutoMqtt.java b/ard-work/src/main/java/com/ruoyi/utils/qymqtt/AutoMqtt.java
new file mode 100644
index 0000000..455d8a1
--- /dev/null
+++ b/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();
+ }
+ }
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/qymqtt/MqttCustomerClient.java b/ard-work/src/main/java/com/ruoyi/utils/qymqtt/MqttCustomerClient.java
new file mode 100644
index 0000000..6a6940d
--- /dev/null
+++ b/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();
+ }
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/qymqtt/PushCallback.java b/ard-work/src/main/java/com/ruoyi/utils/qymqtt/PushCallback.java
new file mode 100644
index 0000000..465ca05
--- /dev/null
+++ b/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);
+ }
+}
+
--
Gitblit v1.9.3