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