上饶警务-警车数据读取服务(udp)
zhongrj
2025-01-18 8a788a51e44d59c6e9b4f88d603b3b87745dcfd7
增加执法记录仪数据读取
2 files modified
1 files renamed
6 files added
6 files deleted
882 ■■■■ changed files
pom.xml 2 ●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/entity/DeviceChannelPoliceCamera.java 186 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/entity/DeviceMobilePositionPoliceCamera.java 74 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/entity/TalkBackEquipment.java 102 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/entity/TalkBackEquipmentRecord.java 91 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/mapper/DeviceChannelPoliceCameraMapper.java 41 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/mapper/DeviceChannelPoliceCameraMapper.xml 47 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/mapper/TalkBackEquipmentMapper.java 41 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/mapper/TalkBackEquipmentMapper.xml 68 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/service/DeviceChannelPoliceCameraService.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/service/TalkBackEquipmentService.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/service/impl/DeviceChannelPoliceCameraServiceImpl.java 61 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/service/impl/TalkBackEquipmentServiceImpl.java 64 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/handle/UdpServerHandler.java 67 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/DeviceChannelPoliceCameraMapper.xml patch | view | raw | blame | history
pom.xml
@@ -10,7 +10,7 @@
    <version>3.0.1.RELEASE</version>
    <properties>
        <bladex.project.id>srjw-talk</bladex.project.id>
        <bladex.project.id>srjw-law</bladex.project.id>
        <bladex.project.version>3.0.1.RELEASE</bladex.project.version>
        <java.version>1.8</java.version>
src/main/java/org/springblade/modules/netty/business/entity/DeviceChannelPoliceCamera.java
New file
@@ -0,0 +1,186 @@
package org.springblade.modules.netty.business.entity;
import lombok.Data;
import java.io.Serializable;
/**
 * 执法记录仪 实体类
 * @author zhongrj
 * @date 2023-03-04
 */
@Data
public class DeviceChannelPoliceCamera implements Serializable {
    /**
     * 数据库自赠ID
     */
    private Integer id;
    /**
     * 通道id
     */
    private String channelId;
    /**
     * 设备id
     */
    private String deviceId;
    /**
     * 通道名
     */
    private String name;
    /**
     * 生产厂商
     */
    private String manufacture;
    /**
     * 型号
     */
    private String model;
    /**
     * 设备归属
     */
    private String owner;
    /**
     * 行政区域
     */
    private String civilCode;
    /**
     * 警区
     */
    private String block;
    /**
     * 安装地址
     */
    private String address;
    /**
     * 是否有子设备 1有, 0没有
     */
    private int parental;
    /**
     * 父级id
     */
    private String parentId;
    /**
     * 信令安全模式  缺省为0; 0:不采用; 2: S/MIME签名方式; 3: S/ MIME加密签名同时采用方式; 4:数字摘要方式
     */
    private int safetyWay;
    /**
     * 注册方式 缺省为1;1:符合IETFRFC3261标准的认证注册模 式; 2:基于口令的双向认证注册模式; 3:基于数字证书的双向认证注册模式
     */
    private int registerWay;
    /**
     * 证书序列号
     */
    private String certNum;
    /**
     * 证书有效标识 缺省为0;证书有效标识:0:无效1: 有效
     */
    private int certifiable;
    /**
     * 证书无效原因码
     */
    private int errCode;
    /**
     * 证书终止有效期
     */
    private String endTime;
    /**
     * 保密属性 缺省为0; 0:不涉密, 1:涉密
     */
    private String secrecy;
    /**
     * IP地址
     */
    private String ipAddress;
    /**
     * 端口号
     */
    private int port;
    /**
     * 密码
     */
    private String password;
    /**
     * 云台类型
     */
    private int PTZType;
    /**
     * 云台类型描述字符串
     */
    private String PTZTypeText;
    /**
     * 创建时间
     */
    private String createTime;
    /**
     * 更新时间
     */
    private String updateTime;
    /**
     * 在线/离线
     * 1在线,0离线
     * 默认在线
     * 信令:
     * <Status>ON</Status>
     * <Status>OFF</Status>
     * 遇到过NVR下的IPC下发信令可以推流, 但是 Status 响应 OFF
     */
    private int status;
    /**
     * 经度
     */
    private double longitude;
    /**
     * 纬度
     */
    private double latitude;
    /**
     * 子设备数
     */
    private int subCount;
    /**
     * 流唯一编号,存在表示正在直播
     */
    private String streamId;
    /**
     *  是否含有音频
     */
    private boolean hasAudio;
    /**
     * 传入时间
     */
    private String gpsTime;
}
src/main/java/org/springblade/modules/netty/business/entity/DeviceMobilePositionPoliceCamera.java
New file
@@ -0,0 +1,74 @@
package org.springblade.modules.netty.business.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * 执法记录仪历史记录表
 * @author: zhongrj
 * @date: 2023-03-04
 */
@Data
public class DeviceMobilePositionPoliceCamera implements Serializable {
    /**
     * id 自增
     */
    private Integer id;
    /**
     * 设备Id
     */
    private String deviceId;
    /**
     * 通道Id
     */
    private String channelId;
    /**
     * 设备名称
     */
    private String deviceName;
    /**
     * 通知时间
     */
    private String time;
    /**
     * 经度
     */
    private double longitude;
    /**
     * 纬度
     */
    private double latitude;
    /**
     * 海拔高度
     */
    private double altitude;
    /**
     * 速度
     */
    private double speed;
    /**
     * 方向
     */
    private double direction;
    /**
     * 位置信息上报来源(Mobile Position、GPS Alarm)
     */
    private String reportSource;
    /**
     * 更新时间
     */
    private String createTime;
}
src/main/java/org/springblade/modules/netty/business/entity/TalkBackEquipment.java
File was deleted
src/main/java/org/springblade/modules/netty/business/entity/TalkBackEquipmentRecord.java
File was deleted
src/main/java/org/springblade/modules/netty/business/mapper/DeviceChannelPoliceCameraMapper.java
New file
@@ -0,0 +1,41 @@
package org.springblade.modules.netty.business.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springblade.modules.netty.business.entity.DeviceChannelPoliceCamera;
import org.springblade.modules.netty.business.entity.DeviceMobilePositionPoliceCamera;
/**
 * 执法记录仪mapper映射层
 * @author zhongrj
 * @date 2023-03-02
 */
@Mapper
public interface DeviceChannelPoliceCameraMapper {
    /**
     * 新增执法记录仪数据
     * @param talkBackEquipment
     */
    void saveDeviceChannelPoliceCamera(DeviceChannelPoliceCamera talkBackEquipment);
    /**
     * 新增执法记录仪历史数据
     * @param talkBackEquipmentRecord
     */
    void saveDeviceMobilePositionPoliceCamera(DeviceMobilePositionPoliceCamera talkBackEquipmentRecord);
    /**
     * 查询设备信息
     * @param code
     * @return
     */
    @Select("select * from device_channel_police_camera where channelId = #{code}")
    DeviceChannelPoliceCamera getTalkBackEquipment(String code);
    /**
     * 修改执法记录仪信息
     * @param talkBackEquipment
     */
    void updateDeviceChannelPoliceCamera(DeviceChannelPoliceCamera talkBackEquipment);
}
src/main/java/org/springblade/modules/netty/business/mapper/DeviceChannelPoliceCameraMapper.xml
New file
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.modules.netty.business.mapper.DeviceChannelPoliceCameraMapper">
    <!--新增对讲设备信息-->
    <insert id="saveDeviceChannelPoliceCamera" useGeneratedKeys="true" keyProperty="id">
        insert into device_channel_police_camera
        (
        deviceId,name,channelId,status,longitude,latitude,
        parental,hasAudio,createTime,updateTime
        )
        values
        (
        #{deviceId},#{name},#{channelId},#{status},#{longitude},#{latitude},
        #{parental},#{hasAudio},#{createTime},#{updateTime}
        )
    </insert>
    <!--新增对接设备历史记录信息-->
    <insert id="saveDeviceMobilePositionPoliceCamera">
        insert into device_mobile_position_police_camera
        (
        deviceId,channelId,time,longitude,latitude,speed,direction,altitude,createTime,reportSource
        )
        values
        (
        #{deviceId},#{channelId},#{time},#{longitude},#{latitude},#{speed},#{direction},#{altitude},#{createTime},#{reportSource}
        )
    </insert>
    <!--修改对讲设备信息-->
    <update id="updateDeviceChannelPoliceCamera">
        update device_channel_police_camera
        set
        name = #{name},
        status = #{status},
        <if test="null!=longitude and longitude!=''">
            longitude = #{longitude},
        </if>
        <if test="null!=latitude and latitude!=''">
            latitude = #{latitude},
        </if>
        updateTime = #{updateTime}
        where id = #{id}
    </update>
</mapper>
src/main/java/org/springblade/modules/netty/business/mapper/TalkBackEquipmentMapper.java
File was deleted
src/main/java/org/springblade/modules/netty/business/mapper/TalkBackEquipmentMapper.xml
File was deleted
src/main/java/org/springblade/modules/netty/business/service/DeviceChannelPoliceCameraService.java
New file
@@ -0,0 +1,19 @@
package org.springblade.modules.netty.business.service;
import org.springblade.modules.netty.business.entity.DeviceMobilePositionPoliceCamera;
/**
 * 执法记录仪信息表 服务类
 *
 * @author zhongrj
 * @date 2023-03-02
 */
public interface DeviceChannelPoliceCameraService {
    /**
     * 保存执法记录仪设备数据
     * @param deviceMobilePositionPoliceCamera
     */
    void save(DeviceMobilePositionPoliceCamera deviceMobilePositionPoliceCamera);
}
src/main/java/org/springblade/modules/netty/business/service/TalkBackEquipmentService.java
File was deleted
src/main/java/org/springblade/modules/netty/business/service/impl/DeviceChannelPoliceCameraServiceImpl.java
New file
@@ -0,0 +1,61 @@
package org.springblade.modules.netty.business.service.impl;
import org.springblade.modules.netty.business.entity.DeviceChannelPoliceCamera;
import org.springblade.modules.netty.business.entity.DeviceMobilePositionPoliceCamera;
import org.springblade.modules.netty.business.mapper.DeviceChannelPoliceCameraMapper;
import org.springblade.modules.netty.business.service.DeviceChannelPoliceCameraService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 执法记录仪服务实现层
 * @author zhongrj
 * @date 2023-03-02
 */
@Service
public class DeviceChannelPoliceCameraServiceImpl implements DeviceChannelPoliceCameraService {
    @Autowired
    private DeviceChannelPoliceCameraMapper deviceChannelPoliceCameraMapper;
    /**
     * 保存执法记录仪数据
     * @param deviceMobilePositionPoliceCamera
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void save(DeviceMobilePositionPoliceCamera deviceMobilePositionPoliceCamera) {
        // 设置信息
        DeviceChannelPoliceCamera deviceChannelPoliceCameraInfo = new DeviceChannelPoliceCamera();
        // 设置默认在线
        deviceChannelPoliceCameraInfo.setStatus(1);
        deviceChannelPoliceCameraInfo.setDeviceId(deviceMobilePositionPoliceCamera.getDeviceId());
        deviceChannelPoliceCameraInfo.setChannelId(deviceMobilePositionPoliceCamera.getChannelId());
        deviceChannelPoliceCameraInfo.setLongitude(deviceMobilePositionPoliceCamera.getLongitude());
        deviceChannelPoliceCameraInfo.setLatitude(deviceMobilePositionPoliceCamera.getLatitude());
        deviceChannelPoliceCameraInfo.setParental(0);
        deviceChannelPoliceCameraInfo.setHasAudio(false);
        deviceChannelPoliceCameraInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        //判断设备是否已存在,如果存在则更新,不存在则新增
        DeviceChannelPoliceCamera deviceChannelPoliceCamera = deviceChannelPoliceCameraMapper.getTalkBackEquipment(deviceMobilePositionPoliceCamera.getChannelId());
        if (null == deviceChannelPoliceCamera) {
            deviceChannelPoliceCameraInfo.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            //新增记录信息
            deviceChannelPoliceCameraMapper.saveDeviceChannelPoliceCamera(deviceChannelPoliceCameraInfo);
        }else {
            deviceChannelPoliceCameraInfo.setId(deviceChannelPoliceCamera.getId());
            //修改
            deviceChannelPoliceCameraMapper.updateDeviceChannelPoliceCamera(deviceChannelPoliceCameraInfo);
        }
        //判断是否存在设备id
        if (null != deviceChannelPoliceCameraInfo.getId()) {
            deviceMobilePositionPoliceCamera.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            deviceChannelPoliceCameraMapper.saveDeviceMobilePositionPoliceCamera(deviceMobilePositionPoliceCamera);
        }
    }
}
src/main/java/org/springblade/modules/netty/business/service/impl/TalkBackEquipmentServiceImpl.java
File was deleted
src/main/java/org/springblade/modules/netty/handle/UdpServerHandler.java
@@ -7,14 +7,11 @@
import io.netty.util.CharsetUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.modules.netty.business.entity.TalkBackEquipment;
import org.springblade.modules.netty.business.service.TalkBackEquipmentService;
import org.springblade.modules.netty.business.entity.DeviceMobilePositionPoliceCamera;
import org.springblade.modules.netty.business.service.DeviceChannelPoliceCameraService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import static org.springblade.modules.netty.config.MyDecoder.hexToByte;
import static org.springblade.modules.netty.config.MyDecoder.hexTohort;
import static org.springblade.modules.netty.util.Hex.getDouble;
@@ -32,12 +29,12 @@
    private static UdpServerHandler udpServerHandler;
    @Autowired
    private TalkBackEquipmentService talkBackEquipmentService;
    private DeviceChannelPoliceCameraService deviceChannelPoliceCameraService;
    @PostConstruct
    public void init() {
        udpServerHandler = this;
        udpServerHandler.talkBackEquipmentService = this.talkBackEquipmentService;
        udpServerHandler.deviceChannelPoliceCameraService = this.deviceChannelPoliceCameraService;
    }
    @Override
@@ -61,30 +58,30 @@
     * @param s 16位字符串
     */
    private void dataHandler(String s) {
//        s = "AAAACCCC220000000033373933343732393100000000000000000000000052D50451F77D5D406C04E275FD723C400000015F0000000507E70306103B0A";
        System.out.println("s = " + s);
        s = "AAAACCCC220000000033373933343732393100000000000000000000000052D50451F77D5D406C04E275FD723C400000015F0000000507E70306103B0A";
        System.out.println("s = " + s);
        //创建设备对象
        TalkBackEquipment backEquipment = new TalkBackEquipment();
        if (s.substring(4,8).equals("CCCC")) {
            backEquipment.setStatus(1);
        }
        //断开连接
        if (s.substring(4,8).equals("FFFF")) {
            backEquipment.setStatus(0);
        }
        //截取字符串
        backEquipment.setTerminalNumber(hexStr2Str(s.substring(20, 60)));
        backEquipment.setLongitude(Double.toString(getDouble(s.substring(60, 76))));
        backEquipment.setLatitude(Double.toString(getDouble(s.substring(76, 92))));
        backEquipment.setSpeed(Short.toString(hexTohort(s.substring(92, 96))));
        backEquipment.setDirection(Short.toString(hexTohort(s.substring(96, 100))));
        backEquipment.setElevation(Short.toString(hexTohort(s.substring(100, 104))));
        backEquipment.setPrecisions(Short.toString(hexTohort(s.substring(104, 108))));
        DeviceMobilePositionPoliceCamera backEquipment = new DeviceMobilePositionPoliceCamera();
//        if (s.substring(4,8).equals("CCCC")) {
//            backEquipment.setStatus(1);
//        }
//        //断开连接
//        if (s.substring(4,8).equals("FFFF")) {
//            backEquipment.setStatus(0);
//        }
        //截取字符串,并去除后面多余的空格(如果有)
        backEquipment.setChannelId(hexStr2Str(s.substring(20, 60)).trim());
        //设置经纬度
        backEquipment.setLongitude(getDouble(s.substring(60, 76)));
        backEquipment.setLatitude(getDouble(s.substring(76, 92)));
        // 设置速度、方向等
        backEquipment.setSpeed(hexTohort(s.substring(92, 96)));
        backEquipment.setDirection(hexTohort(s.substring(96, 100)));
        backEquipment.setAltitude(hexTohort(s.substring(100, 104)));
        backEquipment.setReportSource(Short.toString(hexTohort(s.substring(104, 108))));
        //时间拼接
        String year = Short.toString(hexTohort(s.substring(108, 112)));
        String month = Short.toString(hexToByte(s.substring(112, 114)));
        if (Integer.parseInt(month)<10){
            month = "0" + month;
@@ -106,15 +103,11 @@
            second = "0" + second;
        }
        String time = year + "-" + month + "-" + day +" " + hour + ":" + minute + ":" + second;
        //时间拼接
        try {
            backEquipment.setReceiveTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        backEquipment.setUpdateTime(new Date());
        backEquipment.setTime(time);
        // 该处设置成和通道一样
        backEquipment.setDeviceId(backEquipment.getChannelId());
        // 新增
        udpServerHandler.talkBackEquipmentService.save(backEquipment);
        udpServerHandler.deviceChannelPoliceCameraService.save(backEquipment);
    }
    /**
src/main/java/org/springblade/modules/system/mapper/DeviceChannelPoliceCameraMapper.xml