ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java
@@ -10,6 +10,7 @@ import com.ruoyi.sy.domain.ArdSyUser; import com.ruoyi.sy.mapper.ArdAccessFenceMapper; import com.ruoyi.sy.param.AddCarParam; import com.ruoyi.sy.param.AddRtuParam; import com.ruoyi.sy.service.*; import com.ruoyi.sy.service.impl.ArdSyCarRtuServiceImpl; import com.ruoyi.sy.vo.CarLockVo; @@ -48,35 +49,35 @@ @GetMapping("/car") @ApiOperation("查询所有未挂锁的车辆") public Results car(){ public AjaxResult car(){ List<CarVo> list = ardSyCarLockService.car(); analysis(list); return Results.succeed(list); return AjaxResult.success(list); } @GetMapping("/carAddOne") @ApiOperation("查询所有未挂锁的车辆加本车辆信息") public Results carAddOne(String carId){ public AjaxResult carAddOne(String carId){ List<CarVo> list = ardSyCarLockService.carAddOne(carId); analysis(list); return Results.succeed(list); return AjaxResult.success(list); } @PostMapping("/add") @ApiOperation("添加rtu") public Results add(String carId){ return Results.succeed("成功添加"+ardSyCarLockService.addRtu(carId)+"条数据"); public AjaxResult add(@RequestBody AddRtuParam addRtuParam){ return AjaxResult.success("成功添加"+ardSyCarLockService.addRtu(addRtuParam)+"条数据"); } @DeleteMapping("/del") @ApiOperation("删除rtu") public Results del(String id){ return Results.succeed("成功删除"+ardSyCarLockService.delCar(id)+"条数据"); public AjaxResult del(String id){ return AjaxResult.success("成功删除"+ardSyCarLockService.delCar(id)+"条数据"); } @GetMapping("/one") @ApiOperation("查询一条rtu及锁") public Results one(String carId){ public AjaxResult one(String carId){ CarLockVo carLockVo = new CarLockVo(); CarVo carVo = ardSyCarLockService.carOne(carId); String usersId = SecurityUtils.getUserId(); @@ -94,7 +95,7 @@ carLockVo.setCar(carVo); String rtu = carVo.getRtu(); carLockVo.setCarLockList(ardSyCarLockService.carLock(rtu)); return Results.succeed(carLockVo); return AjaxResult.success(carLockVo); } @GetMapping("/query") ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java
@@ -12,4 +12,6 @@ private String carId; private String topicSubscribe; //订阅 private String topicPublish; //发布 private Integer installType; //装油点 0施封 1解封 private Integer unloadType; //卸油点 0施封 1解封 } ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
@@ -1,6 +1,9 @@ package com.ruoyi.sy.gps31; import com.ruoyi.sy.domain.ArdSyCarLock; import java.util.HashMap; import java.util.List; import java.util.Map; public class PositionContainer { @@ -9,6 +12,17 @@ private static Map<String, Map<String,Map<String,Object>>> userPositionMap = new HashMap();//依用户存放实施车辆位置:userId,carId,车辆位置 public static Map<String, List<ArdSyCarLock>> getTopicSubscribe() { return topicSubscribe; } public static void setTopicSubscribe(Map<String, List<ArdSyCarLock>> topicSubscribe) { PositionContainer.topicSubscribe = topicSubscribe; } public static Map<String, List<ArdSyCarLock>> topicSubscribe; public static synchronized Map<String, Map<String, Map<String,Object>>> getDeptPositionMap() { return deptPositionMap; } ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -137,6 +137,27 @@ ardAccessFence1.setDrct(drct); ardAccessFence1.setIsAlarm(0); ardAccessFenceService.access(ardAccessFence1); //查询装油点既定Rtu状态 ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId); Integer installType = ardSyCarRtu.getInstallType(); //1解封 if(installType==1){ Map<String,Object> map = new HashMap<>(); map.put("A01", 110000);//导通第一路继电器 map.put("A02", 110000);//导通第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map))); } //0施封 if(installType==0){ //关锁 Map<String,Object> map = new HashMap<>(); map.put("A01", 100000);//断开第一路继电器 map.put("A02", 100000);//断开第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map))); } break; } } @@ -195,6 +216,27 @@ ardAccessFence.setIntoShipmentTime(time); ardAccessFence.setNowWallName(ardOilWall.getName()); ardAccessFence.setLastTime(time); //查询装油点既定Rtu状态 ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId); Integer installType = ardSyCarRtu.getInstallType(); //1解封 if(installType==1){ Map<String,Object> map = new HashMap<>(); map.put("A01", 110000);//导通第一路继电器 map.put("A02", 110000);//导通第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map))); } //0施封 if(installType==0){ //关锁 Map<String,Object> map = new HashMap<>(); map.put("A01", 100000);//断开第一路继电器 map.put("A02", 100000);//断开第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map))); } break; } } @@ -221,10 +263,15 @@ ardAccessFence.setLng(lng); ardAccessFence.setLat(lat); ardAccessFenceService.updAccess(ardAccessFence); //开出装油点围栏,发送上锁及施封命令 //开出装油点围栏,发送上锁及施封命令 ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId); //关锁 Map<String,Object> map = new HashMap<>(); map.put("A01", 100000);//断开第一路继电器 map.put("A02", 100000);//断开第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map))); } }else { @@ -255,6 +302,27 @@ ardAccessFenceService.updAccess(ardAccessFence); //已经进入卸油点,不在路上不需要停车报警 isRoad = false; //查询装油点既定Rtu状态 ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId); Integer unloadType = ardSyCarRtu.getUnloadType(); //1解封 if(unloadType==1){ Map<String,Object> map = new HashMap<>(); map.put("A01", 110000);//导通第一路继电器 map.put("A02", 110000);//导通第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map))); } //0施封 if(unloadType==0){ //关锁 Map<String,Object> map = new HashMap<>(); map.put("A01", 100000);//断开第一路继电器 map.put("A02", 100000);//断开第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map))); } break; } } @@ -296,10 +364,15 @@ pts.add(new Point2D.Double(Double.parseDouble(coord[j]), Double.parseDouble(coord[j + 1]))); } if (!GeoTools.IsPtInPoly(point, pts)) { //开出了卸油点围栏,发送上锁及施解封指令 //开出了卸油点围栏,发送上锁及施解封指令 ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId); //关锁 Map<String,Object> map = new HashMap<>(); map.put("A01", 100000);//断开第一路继电器 map.put("A02", 100000);//断开第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map))); //删除该条车辆数据 ardAccessFenceService.delAccess(carId); }else { ard-work/src/main/java/com/ruoyi/sy/param/AddRtuParam.java
New file @@ -0,0 +1,10 @@ package com.ruoyi.sy.param; import lombok.Data; @Data public class AddRtuParam { private String carId; private Integer installType; //装油点 0施封 1解封 private Integer unloadType; //卸油点 0施封 1解封 } ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
@@ -1,10 +1,8 @@ package com.ruoyi.sy.service; import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.domain.ArdSyCarLock; import com.ruoyi.sy.domain.ArdSyCarRtu; import com.ruoyi.sy.vo.CarLockVo; import com.ruoyi.sy.param.AddRtuParam; import com.ruoyi.sy.vo.CarVo; import com.ruoyi.sy.vo.RtuVo; @@ -18,7 +16,7 @@ List<CarVo> car(); List<CarVo> carAddOne(String carId); int addRtu(String carId); int addRtu(AddRtuParam addRtuParam); /** * 所有挂锁的车辆 @@ -39,6 +37,8 @@ List<CarVo> addCarBefore(String id); List<ArdSyCarLock> data(String msg); int updLock(ArdSyCarLock ardSyCarLock); } ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java
@@ -15,4 +15,6 @@ ArdSyCarRtu one(String carId); String openLock(ArdSyCarRtu ardSyCarRtu); ArdSyCarRtu subscribeByCarId(String subscribe); } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
@@ -1,17 +1,16 @@ package com.ruoyi.sy.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.sy.domain.ArdAccessFence; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.domain.ArdSyCarLock; import com.ruoyi.sy.domain.ArdSyCarRtu; import com.ruoyi.sy.mapper.ArdAccessFenceMapper; import com.ruoyi.sy.mapper.ArdSyCarLockMapper; import com.ruoyi.sy.mapper.ArdSyCarMapper; import com.ruoyi.sy.mapper.ArdSyCarRtuMapper; import com.ruoyi.sy.param.AddRtuParam; import com.ruoyi.sy.service.ArdSyCarLockService; import com.ruoyi.sy.vo.CarLockVo; import com.ruoyi.sy.vo.CarVo; import com.ruoyi.sy.vo.RtuVo; import com.ruoyi.system.mapper.SysDeptMapper; @@ -55,15 +54,17 @@ } @Override public int addRtu(String carId) { public int addRtu(AddRtuParam addRtuParam) { ArdSyCarRtu ardSyCarRtu = new ArdSyCarRtu(); ardSyCarRtu.setId(String.valueOf(UUID.randomUUID())); ardSyCarRtu.setCarId(carId); ardSyCarRtu.setTopicPublish("/p"+carId+"/"); ardSyCarRtu.setTopicSubscribe("/p"+carId+"/set/"); ardSyCarRtu.setCarId(addRtuParam.getCarId()); ardSyCarRtu.setTopicPublish("/p"+addRtuParam.getCarId()+"/"); ardSyCarRtu.setTopicSubscribe("/p"+addRtuParam.getCarId()+"/set/"); ardSyCarRtu.setInstallType(addRtuParam.getInstallType()); ardSyCarRtu.setUnloadType(addRtuParam.getUnloadType()); rtuMapper.insert(ardSyCarRtu); QueryWrapper<ArdSyCar> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); queryWrapper.eq("car_id",addRtuParam.getCarId()); ArdSyCar ardSyCar = ardSyCarMapper.selectOne(queryWrapper); ardSyCar.setReserved1(ardSyCarRtu.getId()); return ardSyCarMapper.updateById(ardSyCar); @@ -108,9 +109,15 @@ @Override public List<ArdSyCarLock> carLock(String rtu) { QueryWrapper<ArdSyCarLock> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("rtu_id",rtu); return lockMapper.selectList(queryWrapper); List<ArdSyCarLock> locks = new ArrayList<>(); try { QueryWrapper<ArdSyCarLock> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("rtu_id",rtu); locks = lockMapper.selectList(queryWrapper); }catch (Exception e){ } return locks; } @Override @@ -179,7 +186,29 @@ return carAnalysis(carList); } @Override public List<ArdSyCarLock> data(String msg) { JSONObject jsonObject = JSONObject.parseObject(msg); List<ArdSyCarLock> lockList = new ArrayList<>(); ArdSyCarLock ardSyCarLock1 = new ArdSyCarLock(); ardSyCarLock1.setRelay("A01"); ardSyCarLock1.setRelayInfo(String.valueOf(jsonObject.getInteger("A01"))); ardSyCarLock1.setCurrent("C01"); ardSyCarLock1.setCurrentInfo(String.valueOf(jsonObject.getFloat("C01"))); lockList.add(ardSyCarLock1); ArdSyCarLock ardSyCarLock2 = new ArdSyCarLock(); ardSyCarLock2.setRelay("A02"); ardSyCarLock2.setRelayInfo(String.valueOf(jsonObject.getInteger("A02"))); ardSyCarLock2.setCurrent("C02"); ardSyCarLock2.setCurrentInfo(String.valueOf(jsonObject.getFloat("C02"))); lockList.add(ardSyCarLock2); return lockList; } @Override public int updLock(ArdSyCarLock ardSyCarLock) { return lockMapper.updateById(ardSyCarLock); } //车辆列表封装 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java
@@ -53,4 +53,11 @@ return "已发送开锁指令"; } @Override public ArdSyCarRtu subscribeByCarId(String subscribe) { QueryWrapper<ArdSyCarRtu> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("topic_subscribe",subscribe); return ardSyCarRtuMapper.selectOne(queryWrapper); } } ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java
@@ -29,7 +29,7 @@ @Autowired private ISysConfigService sysConfigService; // @PostConstruct @PostConstruct public void init() { //获取电磁锁地址 String mqttUrl = sysConfigService.selectConfigByKey("ElectromagneticLockUrl"); ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java
@@ -1,15 +1,19 @@ package com.ruoyi.utils.mqtt; import com.ruoyi.alarm.global.service.impl.GlobalAlarmServiceImpl; import com.ruoyi.alarm.radar.service.ArdRadarService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.statistical.service.StatisticalService; import com.ruoyi.storage.minio.service.IStorageMinioEventService; 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.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Description: mqtt回调处理类 @@ -25,6 +29,9 @@ 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; @@ -70,6 +77,26 @@ 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)); //存入集合 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); }