aijinhui
2023-11-13 f22a5485cbe6563447ace9cf7939405f7e06c6a6
车辆RTU
已添加1个文件
已修改10个文件
231 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarRtu.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/param/AddRtuParam.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarRtuService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarRtuServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
                                }
                            }
@@ -222,9 +264,14 @@
                                    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;
                                        }
                                    }
@@ -297,9 +365,14 @@
                                    }
                                    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
¶Ô±ÈÐÂÎļþ
@@ -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) {
        List<ArdSyCarLock> locks = new ArrayList<>();
        try {
        QueryWrapper<ArdSyCarLock> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("rtu_id",rtu);
        return lockMapper.selectList(queryWrapper);
            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);
        }