上饶警务-警车数据读取服务(udp)
zhongrj
2025-01-16 3a1d32e5e512f68ab5a613ae19997bbbcbbe0f98
增加手台配置
8 files modified
3 files renamed
3 files deleted
4 files added
327 ■■■■ changed files
pom.xml 2 ●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/entity/TalkBackEquipment.java 4 ●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/entity/TalkBackEquipmentRecord.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/mapper/PoliceCarEquipmentMapper.java 42 ●●●●● 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 17 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/business/service/PoliceCarEquipmentService.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/PoliceCarEquipmentServiceImpl.java 60 ●●●●● 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/event/StartupEvent.java 1 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/handle/UdpServerHandler.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/server/UdpServer.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/util/Hex.java 1 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/netty/util/Utils.java 4 ●●●● patch | view | raw | blame | history
src/main/resources/application-dev.yml 4 ●●●● patch | view | raw | blame | history
src/main/resources/application-prod.yml 4 ●●●● patch | view | raw | blame | history
src/main/resources/application-test.yml 6 ●●●● patch | view | raw | blame | history
pom.xml
@@ -10,7 +10,7 @@
    <version>3.0.1.RELEASE</version>
    <properties>
        <bladex.project.id>srjw-car</bladex.project.id>
        <bladex.project.id>srjw-talk</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/TalkBackEquipment.java
File was renamed from src/main/java/org/springblade/modules/netty/business/entity/PoliceCarEquipment.java
@@ -1,6 +1,5 @@
package org.springblade.modules.netty.business.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -15,8 +14,7 @@
 * @since 2023-02-23
 */
@Data
@TableName("sys_police_car_equipment")
public class PoliceCarEquipment implements Serializable {
public class TalkBackEquipment implements Serializable {
    private static final long serialVersionUID = 1L;
src/main/java/org/springblade/modules/netty/business/entity/TalkBackEquipmentRecord.java
File was renamed from src/main/java/org/springblade/modules/netty/business/entity/PoliceCarEquipmentRecord.java
@@ -1,7 +1,6 @@
package org.springblade.modules.netty.business.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -16,8 +15,7 @@
 * @since 2023-02-23
 */
@Data
@TableName("sys_police_car_equipment_record")
public class PoliceCarEquipmentRecord implements Serializable {
public class TalkBackEquipmentRecord implements Serializable {
    private static final long serialVersionUID = 1L;
@@ -29,7 +27,7 @@
    /**
     * 设备id
     */
    private Long policeCarEquipmentId;
    private Long talkBackEquipmentId;
    /**
     * 设备状态 0:离线  1:在线
@@ -84,4 +82,10 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
//    /**
//     * 说明
//     */
//    @ApiModelProperty(value = "说明")
//    private String remark;
}
src/main/java/org/springblade/modules/netty/business/mapper/PoliceCarEquipmentMapper.java
File was deleted
src/main/java/org/springblade/modules/netty/business/mapper/TalkBackEquipmentMapper.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.TalkBackEquipment;
import org.springblade.modules.netty.business.entity.TalkBackEquipmentRecord;
/**
 * 对讲设备mapper映射层
 * @author zhongrj
 * @date 2023-03-02
 */
@Mapper
public interface TalkBackEquipmentMapper {
    /**
     * 新增对讲设备数据
     * @param talkBackEquipment
     */
    void saveTalkBackEquipment(TalkBackEquipment talkBackEquipment);
    /**
     * 新增对讲设备历史数据
     * @param talkBackEquipmentRecord
     */
    void saveTalkBackEquipmentRecord(TalkBackEquipmentRecord talkBackEquipmentRecord);
    /**
     * 查询设备信息
     * @param code
     * @return
     */
    @Select("select * from sys_talk_back_equipment where terminal_number = #{code}")
    TalkBackEquipment getTalkBackEquipment(String code);
    /**
     * 修改对讲设备信息
     * @param talkBackEquipment
     */
    void updateTalkBackEquipment(TalkBackEquipment talkBackEquipment);
}
src/main/java/org/springblade/modules/netty/business/mapper/TalkBackEquipmentMapper.xml
File was renamed from src/main/java/org/springblade/modules/netty/business/mapper/PoliceCarEquipmentMapper.xml
@@ -1,10 +1,10 @@
<?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.PoliceCarEquipmentMapper">
<mapper namespace="org.springblade.modules.netty.business.mapper.TalkBackEquipmentMapper">
    <!--新增对讲设备信息-->
    <insert id="saveTalkBackEquipment" useGeneratedKeys="true" keyProperty="id">
        insert into sys_police_car_equipment
        insert into sys_talk_back_equipment
        (
        name,code,status,terminal_number,longitude,latitude,
        speed,direction,elevation,precisions,receive_time,create_time,update_time
@@ -18,26 +18,21 @@
    <!--新增对接设备历史记录信息-->
    <insert id="saveTalkBackEquipmentRecord">
        insert into sys_police_car_equipment_record
        insert into sys_talk_back_equipment_record
        (
        police_car_equipment_id,status,terminal_number,
        talk_back_equipment_id,status,terminal_number,
        longitude,latitude,speed,direction,elevation,precisions,receive_time,create_time
        )
        values
        (
        #{policeCarEquipmentId},#{status},#{terminalNumber},
        #{talkBackEquipmentId},#{status},#{terminalNumber},
        #{longitude},#{latitude},#{speed},#{direction},#{elevation},#{precisions},#{receiveTime},#{createTime}
        )
    </insert>
    <!--查询设备信息-->
    <select id="getTalkBackEquipment" resultType="org.springblade.modules.netty.business.entity.PoliceCarEquipment">
        select * from sys_police_car_equipment where terminal_number = #{code}
    </select>
    <!--修改对讲设备信息-->
    <update id="updateTalkBackEquipment">
        update sys_police_car_equipment
        update sys_talk_back_equipment
        set
        code = #{code},
        name = #{name},
src/main/java/org/springblade/modules/netty/business/service/PoliceCarEquipmentService.java
File was deleted
src/main/java/org/springblade/modules/netty/business/service/TalkBackEquipmentService.java
New file
@@ -0,0 +1,19 @@
package org.springblade.modules.netty.business.service;
import org.springblade.modules.netty.business.entity.TalkBackEquipment;
/**
 * 对讲设备信息表 服务类
 *
 * @author zhongrj
 * @date 2023-03-02
 */
public interface TalkBackEquipmentService{
    /**
     * 保存对讲设备数据
     * @param talkBackEquipment
     */
    void save(TalkBackEquipment talkBackEquipment);
}
src/main/java/org/springblade/modules/netty/business/service/impl/PoliceCarEquipmentServiceImpl.java
File was deleted
src/main/java/org/springblade/modules/netty/business/service/impl/TalkBackEquipmentServiceImpl.java
New file
@@ -0,0 +1,64 @@
package org.springblade.modules.netty.business.service.impl;
import org.springblade.modules.netty.business.entity.TalkBackEquipment;
import org.springblade.modules.netty.business.entity.TalkBackEquipmentRecord;
import org.springblade.modules.netty.business.mapper.TalkBackEquipmentMapper;
import org.springblade.modules.netty.business.service.TalkBackEquipmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
/**
 * 对讲设备服务实现层
 * @author zhongrj
 * @date 2023-03-02
 */
@Service
public class TalkBackEquipmentServiceImpl implements TalkBackEquipmentService {
    @Autowired
    private TalkBackEquipmentMapper talkBackEquipmentMapper;
    /**
     * 保存对讲设备数据
     * @param talkBackEquipment
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void save(TalkBackEquipment talkBackEquipment) {
        //判断设备是否已存在,如果存在则更新,不存在则新增
        TalkBackEquipment backEquipment = talkBackEquipmentMapper.getTalkBackEquipment(talkBackEquipment.getTerminalNumber());
        if (null==backEquipment) {
            talkBackEquipment.setCreateTime(new Date());
            //新增对接设备数据
            talkBackEquipmentMapper.saveTalkBackEquipment(talkBackEquipment);
        }else {
            talkBackEquipment.setId(backEquipment.getId());
            //修改
            talkBackEquipmentMapper.updateTalkBackEquipment(talkBackEquipment);
        }
        //判断是否存在设备id
        if (null != talkBackEquipment.getId()) {
            TalkBackEquipmentRecord equipmentRecord = new TalkBackEquipmentRecord();
            equipmentRecord.setTalkBackEquipmentId(talkBackEquipment.getId());
            equipmentRecord.setStatus(talkBackEquipment.getStatus());
//            equipmentRecord.setUnitName(talkBackEquipment.getUnitName());
//            equipmentRecord.setUnitCode(talkBackEquipment.getUnitCode());
//            equipmentRecord.setPoliceName(talkBackEquipment.getPoliceName());
//            equipmentRecord.setPoliceCode(talkBackEquipment.getPoliceCode());
            equipmentRecord.setTerminalNumber(talkBackEquipment.getTerminalNumber());
            equipmentRecord.setLongitude(talkBackEquipment.getLongitude());
            equipmentRecord.setLatitude(talkBackEquipment.getLatitude());
            equipmentRecord.setSpeed(talkBackEquipment.getSpeed());
            equipmentRecord.setDirection(talkBackEquipment.getDirection());
            equipmentRecord.setElevation(talkBackEquipment.getElevation());
            equipmentRecord.setPrecisions(talkBackEquipment.getPrecisions());
            equipmentRecord.setReceiveTime(talkBackEquipment.getReceiveTime());
            equipmentRecord.setCreateTime(new Date());
            //新增记录信息
            talkBackEquipmentMapper.saveTalkBackEquipmentRecord(equipmentRecord);
        }
    }
}
src/main/java/org/springblade/modules/netty/event/StartupEvent.java
@@ -1,6 +1,5 @@
package org.springblade.modules.netty.event;
import org.springblade.modules.netty.config.SysConfig;
import org.springblade.modules.netty.server.UdpServer;
import org.springframework.context.ApplicationContext;
src/main/java/org/springblade/modules/netty/handle/UdpServerHandler.java
@@ -7,8 +7,8 @@
import io.netty.util.CharsetUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.modules.netty.business.entity.PoliceCarEquipment;
import org.springblade.modules.netty.business.service.PoliceCarEquipmentService;
import org.springblade.modules.netty.business.entity.TalkBackEquipment;
import org.springblade.modules.netty.business.service.TalkBackEquipmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@@ -32,12 +32,12 @@
    private static UdpServerHandler udpServerHandler;
    @Autowired
    private PoliceCarEquipmentService policeCarEquipmentService;
    private TalkBackEquipmentService talkBackEquipmentService;
    @PostConstruct
    public void init() {
        udpServerHandler = this;
        udpServerHandler.policeCarEquipmentService = this.policeCarEquipmentService;
        udpServerHandler.talkBackEquipmentService = this.talkBackEquipmentService;
    }
    @Override
@@ -50,7 +50,7 @@
        // 字节转16进制字符串
        String s = bytesToHexString(req);
        //获取字符串的长度
//        int length = s.length();
        int length = s.length();
//        System.out.println("数据长度>>>>>> = " + length);
        //数据解析
        dataHandler(s);
@@ -63,7 +63,7 @@
    private void dataHandler(String s) {
//        s = "AAAACCCC220000000033373933343732393100000000000000000000000052D50451F77D5D406C04E275FD723C400000015F0000000507E70306103B0A";
        //创建设备对象
        PoliceCarEquipment backEquipment = new PoliceCarEquipment();
        TalkBackEquipment backEquipment = new TalkBackEquipment();
        if (s.substring(4,8).equals("CCCC")) {
            backEquipment.setStatus(1);
        }
@@ -72,10 +72,7 @@
            backEquipment.setStatus(0);
        }
        //截取字符串
        String terminalNumber = hexStr2Str(s.substring(20, 60));
        // char[20] 后面跟了 \0000 空字符串
//        String trim = terminalNumber.trim();
        backEquipment.setTerminalNumber(terminalNumber);
        backEquipment.setTerminalNumber(hexStr2Str(s.substring(20, 60)));
        backEquipment.setLongitude(Double.toString(getDouble(s.substring(60, 76))));
@@ -117,7 +114,7 @@
        }
        backEquipment.setUpdateTime(new Date());
        // 新增
        udpServerHandler.policeCarEquipmentService.save(backEquipment);
        udpServerHandler.talkBackEquipmentService.save(backEquipment);
    }
    /**
@@ -137,6 +134,7 @@
        return sb.toString();
    }
    /**
     * 捕获异常
     * @param ctx
src/main/java/org/springblade/modules/netty/server/UdpServer.java
@@ -31,6 +31,9 @@
    //Channel channel;
    @Async("taskExecutor")
    public void run(int port) {
//        Thread thread = new Thread(new Runnable() {
//            @Override
//            public void run() {
        //启动服务
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        //优化使用的线程
@@ -70,6 +73,7 @@
            // 绑定端口,开始接收进来的连接
            ChannelFuture f = b.bind(port).sync();
            //获取channel通道
            //channel=f.channel();
            System.out.println("UDP Server 启动,端口:" + port);
            // 等待服务器 socket 关闭 。
            // 这不会发生,可以优雅地关闭服务器。
@@ -81,6 +85,9 @@
            group.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
//            }
//            });
//        thread.start();
    }
}
src/main/java/org/springblade/modules/netty/util/Hex.java
@@ -6,7 +6,6 @@
import static org.springblade.modules.netty.config.MyDecoder.hexToByte;
import static org.springblade.modules.netty.config.MyDecoder.hexTohort;
public class Hex {
    /**
     * 用于建立十六进制字符的输出的小写字符数组
src/main/java/org/springblade/modules/netty/util/Utils.java
New file
@@ -0,0 +1,4 @@
package org.springblade.modules.netty.util;
public class Utils {
}
src/main/resources/application-dev.yml
@@ -5,7 +5,7 @@
    host: 127.0.0.1
    port: 6379
    password:
    database: 6
    database: 9
    ssl: false
    ##redis 集群环境配置
    #cluster:
@@ -54,5 +54,5 @@
# 警车udp接收端口
syscfg:
  udpReceivePort: 9989
  udpReceivePort: 7687
src/main/resources/application-prod.yml
@@ -7,7 +7,7 @@
    host: 127.0.0.1
    port: 6379
    password:
    database: 0
    database: 9
    ssl: false
    ##redis 集群环境配置
    #cluster:
@@ -41,4 +41,4 @@
# 警车udp接收端口
syscfg:
  udpReceivePort: 9989
  udpReceivePort: 7687
src/main/resources/application-test.yml
@@ -14,9 +14,9 @@
    #  nodes: 127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003
    #  commandTimeout: 5000
  datasource:
    url: jdbc:mysql://127.0.0.1:3308/wvp?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
    url: jdbc:mysql://139.196.74.78:3306/videos?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
    username: root
    password: 123456
    password: jxpskj_2018
#第三方登陆
social:
@@ -41,4 +41,4 @@
# 警车udp接收端口
syscfg:
  udpReceivePort: 9989
  udpReceivePort: 7687