From 7f8a15f01797898c076f84fbe18460eaa0545baa Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Fri, 9 Aug 2024 11:08:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=94=B6=E5=88=B0=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E6=97=B6=E7=9A=84=E5=88=86=E7=BB=84=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/vmp/gb28181/bean/DeviceChannel.java | 70 +++++++++---------- .../genersoft/iot/vmp/gb28181/bean/Group.java | 3 + .../gb28181/dao/CommonGBChannelMapper.java | 42 +++++------ .../vmp/gb28181/dao/DeviceChannelMapper.java | 26 +++---- .../gb28181/dao/provider/ChannelProvider.java | 22 +++--- .../impl/DeviceChannelServiceImpl.java | 2 +- .../service/impl/GroupServiceImpl.java | 13 +++- .../vmp/gb28181/session/CatalogDataCatch.java | 23 +++++- .../cmd/CatalogResponseMessageHandler.java | 17 +++-- .../utils/MessageElementForCatalog.java | 17 +++++ .../iot/vmp/gb28181/utils/XmlUtil.java | 54 +++++++------- .../storager/impl/RedisCatchStorageImpl.java | 1 - 12 files changed, 173 insertions(+), 117 deletions(-) create mode 100644 src/main/java/com/genersoft/iot/vmp/gb28181/utils/MessageElementForCatalog.java diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java index e122fa3d..177401c9 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java @@ -1,6 +1,6 @@ package com.genersoft.iot.vmp.gb28181.bean; -import com.genersoft.iot.vmp.gb28181.utils.MessageElement; +import com.genersoft.iot.vmp.gb28181.utils.MessageElementForCatalog; import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -23,149 +23,149 @@ public class DeviceChannel extends CommonGBChannel { @Schema(description = "设备的数据库自增ID") private Integer deviceDbId; - @MessageElement("DeviceID") + @MessageElementForCatalog("DeviceID") @Schema(description = "编码") private String deviceId; - @MessageElement("Name") + @MessageElementForCatalog("Name") @Schema(description = "名称") private String name; - @MessageElement("Manufacturer") + @MessageElementForCatalog("Manufacturer") @Schema(description = "设备厂商") private String manufacturer; - @MessageElement("Model") + @MessageElementForCatalog("Model") @Schema(description = "设备型号") private String model; // 2016 - @MessageElement("Owner") + @MessageElementForCatalog("Owner") @Schema(description = "设备归属") private String owner; - @MessageElement("CivilCode") + @MessageElementForCatalog("CivilCode") @Schema(description = "行政区域") private String civilCode; - @MessageElement("Block") + @MessageElementForCatalog("Block") @Schema(description = "警区") private String block; - @MessageElement("Address") + @MessageElementForCatalog("Address") @Schema(description = "安装地址") private String address; - @MessageElement("Parental") + @MessageElementForCatalog("Parental") @Schema(description = "是否有子设备(必选)1有,0没有") private Integer parental; - @MessageElement("ParentID") + @MessageElementForCatalog("ParentID") @Schema(description = "父节点ID") private String parentId; // 2016 - @MessageElement("SafetyWay") + @MessageElementForCatalog("SafetyWay") @Schema(description = "信令安全模式") private Integer safetyWay; - @MessageElement("RegisterWay") + @MessageElementForCatalog("RegisterWay") @Schema(description = "注册方式") private Integer registerWay; // 2016 - @MessageElement("CertNum") + @MessageElementForCatalog("CertNum") @Schema(description = "证书序列号") private String certNum; // 2016 - @MessageElement("Certifiable") + @MessageElementForCatalog("Certifiable") @Schema(description = "证书有效标识, 缺省为0;证书有效标识:0:无效 1:有效") private Integer certifiable; // 2016 - @MessageElement("ErrCode") + @MessageElementForCatalog("ErrCode") @Schema(description = "无效原因码(有证书且证书无效的设备必选)") private Integer errCode; // 2016 - @MessageElement("EndTime") + @MessageElementForCatalog("EndTime") @Schema(description = "证书终止有效期(有证书且证书无效的设备必选)") private String endTime; - @MessageElement("Secrecy") + @MessageElementForCatalog("Secrecy") @Schema(description = "保密属性(必选)缺省为0;0-不涉密,1-涉密") private Integer secrecy; - @MessageElement("IPAddress") + @MessageElementForCatalog("IPAddress") @Schema(description = "设备/系统IPv4/IPv6地址") private String ipAddress; - @MessageElement("Port") + @MessageElementForCatalog("Port") @Schema(description = "设备/系统端口") private Integer port; - @MessageElement("Password") + @MessageElementForCatalog("Password") @Schema(description = "设备口令") private String password; - @MessageElement("Status") + @MessageElementForCatalog("Status") @Schema(description = "设备状态") private String status; - @MessageElement("Longitude") + @MessageElementForCatalog("Longitude") @Schema(description = "经度 WGS-84坐标系") private Double longitude; - @MessageElement("Latitude") + @MessageElementForCatalog("Latitude") @Schema(description = ",纬度 WGS-84坐标系") private Double latitude; - @MessageElement("Info.PTZType") + @MessageElementForCatalog("Info.PTZType") @Schema(description = "摄像机结构类型,标识摄像机类型: 1-球机; 2-半球; 3-固定枪机; 4-遥控枪机;5-遥控半球;6-多目设备的全景/拼接通道;7-多目设备的分割通道") private Integer ptzType; - @MessageElement("Info.PositionType") + @MessageElementForCatalog("Info.PositionType") @Schema(description = "摄像机位置类型扩展。1-省际检查站、2-党政机关、3-车站码头、4-中心广场、5-体育场馆、" + "6-商业中心、7-宗教场所、8-校园周边、9-治安复杂区域、10-交通干线") private Integer positionType; - @MessageElement("Info.RoomType") + @MessageElementForCatalog("Info.RoomType") @Schema(description = "摄像机安装位置室外、室内属性。1-室外、2-室内。") private Integer roomType; - @MessageElement("Info.UseType") + @MessageElementForCatalog("Info.UseType") @Schema(description = "用途属性, 1-治安、2-交通、3-重点。") private Integer useType; - @MessageElement("Info.SupplyLightType") + @MessageElementForCatalog("Info.SupplyLightType") @Schema(description = "摄像机补光属性。1-无补光;2-红外补光;3-白光补光;4-激光补光;9-其他") private Integer supplyLightType; - @MessageElement("Info.DirectionType") + @MessageElementForCatalog("Info.DirectionType") @Schema(description = "摄像机监视方位(光轴方向)属性。1-东(西向东)、2-西(东向西)、3-南(北向南)、4-北(南向北)、" + "5-东南(西北到东南)、6-东北(西南到东北)、7-西南(东北到西南)、8-西北(东南到西北)") private Integer directionType; - @MessageElement("Info.Resolution") + @MessageElementForCatalog("Info.Resolution") @Schema(description = "摄像机支持的分辨率,可多值") private String resolution; - @MessageElement("Info.BusinessGroupID") + @MessageElementForCatalog({"BusinessGroupID","Info.BusinessGroupID"}) @Schema(description = "虚拟组织所属的业务分组ID") private String businessGroupId; - @MessageElement("Info.DownloadSpeed") + @MessageElementForCatalog("Info.DownloadSpeed") @Schema(description = "下载倍速(可选),可多值") private String downloadSpeed; - @MessageElement("Info.SVCSpaceSupportMode") + @MessageElementForCatalog("Info.SVCSpaceSupportMode") @Schema(description = "空域编码能力,取值0-不支持;1-1级增强(1个增强层);2-2级增强(2个增强层);3-3级增强(3个增强层)") private Integer svcSpaceSupportMod; - @MessageElement("Info.SVCTimeSupportMode") + @MessageElementForCatalog("Info.SVCTimeSupportMode") @Schema(description = "时域编码能力,取值0-不支持;1-1级增强;2-2级增强;3-3级增强(可选)") private Integer svcTimeSupportMode; diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Group.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Group.java index e636f003..a0982982 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Group.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Group.java @@ -75,6 +75,9 @@ public class Group implements Comparable{ group.setBusinessGroup(channel.getBusinessGroupId()); group.setParentDeviceId(channel.getParentId()); } + if (group.getBusinessGroup() == null) { + return null; + } return group; } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java index 53fd71b3..92a85fe1 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/CommonGBChannelMapper.java @@ -238,7 +238,7 @@ public interface CommonGBChannelMapper { " coalesce(wdc.gb_manufacturer, wdc.manufacturer) as gb_manufacturer,\n" + " coalesce(wdc.gb_model, wdc.model) as gb_model,\n" + " coalesce(wdc.gb_owner, wdc.owner) as gb_owner,\n" + - " wdc.gb_civil_code,\n" + + " coalesce(wdc.gb_civil_code, wdc.civil_code) as gb_civil_code,\n" + " coalesce(wdc.gb_block, wdc.block) as gb_block,\n" + " coalesce(wdc.gb_address, wdc.address) as gb_address,\n" + " coalesce(wpgc.parental, wdc.gb_parental, wdc.parental) as gb_parental,\n" + @@ -317,7 +317,7 @@ public interface CommonGBChannelMapper { " 1 as type, " + " true as is_leaf " + " from wvp_device_channel " + - " where gb_civil_code = #{parent} " + + " where coalesce(gb_civil_code, civil_code) = #{parent} " + " AND (coalesce(gb_device_id, device_id) LIKE concat('%',#{query},'%') " + " OR coalesce(gb_name, name) LIKE concat('%',#{query},'%')) " + " ") @@ -325,7 +325,7 @@ public interface CommonGBChannelMapper { @Update(value = {" "}) @@ -345,7 +345,7 @@ public interface CommonGBChannelMapper { @Update(value = {" "}) @@ -362,7 +362,7 @@ public interface CommonGBChannelMapper { @Update(value = {" "}) @@ -390,6 +390,22 @@ public interface CommonGBChannelMapper { " "}) int updateParentIdByChannelList(@Param("parentId") String parentId, List channelList); + @Select("") + List queryForGroupTreeByParentId(@Param("query") String query, @Param("parent") String parent); + @Update(value = {" "}) int updateGroup(@Param("parentId") String parentId, @Param("businessGroup") String businessGroup, List channelList); - - @Select("") - List queryForGroupTreeByParentId(@Param("query") String query, @Param("parent") String parent); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java index 9d064873..eec11d25 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java @@ -16,12 +16,12 @@ import java.util.List; @Repository public interface DeviceChannelMapper { - @Insert("INSERT INTO wvp_device_channel (device_id, device_db_id, name, manufacturer, model, owner, civil_code, gb_civil_code, block, " + + @Insert("INSERT INTO wvp_device_channel (device_id, device_db_id, name, manufacturer, model, owner, civil_code, block, " + "address, parental, parent_id, safety_way, register_way, cert_num, certifiable, err_code, end_time, secrecy, " + "ip_address, port, password, status, longitude, latitude, ptz_type, position_type, room_type, use_type, " + "supply_light_type, direction_type, resolution, business_group_id, download_speed, svc_space_support_mod, " + "svc_time_support_mode, create_time, update_time, sub_count,stream_id, has_audio, gps_time, stream_identification) " + - "VALUES (#{deviceId}, #{deviceDbId}, #{name}, #{manufacturer}, #{model}, #{owner}, #{civilCode}, #{civilCode}, #{block}," + + "VALUES (#{deviceId}, #{deviceDbId}, #{name}, #{manufacturer}, #{model}, #{owner}, #{civilCode}, #{block}," + "#{address}, #{parental}, #{parentId}, #{safetyWay}, #{registerWay}, #{certNum}, #{certifiable}, #{errCode}, #{endTime}, #{secrecy}, " + "#{ipAddress}, #{port}, #{password}, #{status}, #{longitude}, #{latitude}, #{ptzType}, #{positionType}, #{roomType}, #{useType}, " + "#{supplyLightType}, #{directionType}, #{resolution}, #{businessGroupId}, #{downloadSpeed}, #{svcSpaceSupportMod}," + @@ -132,7 +132,7 @@ public interface DeviceChannelMapper { " coalesce(dc.gb_manufacturer, dc.manufacturer) as manufacturer,\n" + " coalesce(dc.gb_model, dc.model) as model,\n" + " coalesce(dc.gb_owner, dc.owner) as owner,\n" + - " gb_civil_code as civil_code,\n" + + " coalesce(dc.gb_civil_code, dc.civil_code) as civil_code,\n" + " coalesce(dc.gb_block, dc.block) as block,\n" + " coalesce(dc.gb_address, dc.address) as address,\n" + " coalesce(dc.gb_parental, dc.parental) as parental,\n" + @@ -169,7 +169,7 @@ public interface DeviceChannelMapper { "coalesce(dc.gb_device_id, dc.device_id) LIKE concat('%',#{query},'%') " + "OR coalesce(dc.gb_name, dc.name) LIKE concat('%',#{query},'%') " + ") " + - " AND (dc.parent_id=#{parentChannelId} OR dc.gb_civil_code = #{parentChannelId}) " + + " AND (dc.parent_id=#{parentChannelId} OR coalesce(dc.gb_civil_code, dc.civil_code) = #{parentChannelId}) " + " AND dc.status= true" + " AND dc.status= false" + " AND dc.sub_count > 0 " + @@ -197,7 +197,7 @@ public interface DeviceChannelMapper { " coalesce(gb_manufacturer, manufacturer) as manufacturer,\n" + " coalesce(gb_model, model) as model,\n" + " coalesce(gb_owner, owner) as owner,\n" + - " gb_civil_code as civil_code,\n" + + " coalesce(gb_civil_code, civil_code) as civil_code,\n" + " coalesce(gb_block, block) as block,\n" + " coalesce(gb_address, address) as address,\n" + " coalesce(gb_parental, parental) as parental,\n" + @@ -269,7 +269,7 @@ public interface DeviceChannelMapper { " coalesce(dc.gb_manufacturer, dc.manufacturer) as manufacturer,\n" + " coalesce(dc.gb_model, dc.model) as model,\n" + " coalesce(dc.gb_owner, dc.owner) as owner,\n" + - " dc.gb_civil_code as civil_code,\n" + + " coalesce(dc.gb_civil_code, dc.civil_code) as civil_code,\n" + " coalesce(dc.gb_block, dc.block) as block,\n" + " coalesce(dc.gb_address, dc.address) as address,\n" + " coalesce(dc.gb_parental, dc.parental) as parental,\n" + @@ -359,7 +359,7 @@ public interface DeviceChannelMapper { " coalesce(gb_manufacturer, manufacturer) as manufacturer,\n" + " coalesce(gb_model, model) as model,\n" + " coalesce(gb_owner, owner) as owner,\n" + - " gb_civil_code as civil_code,\n" + + " coalesce(gb_civil_code, civil_code) as civil_code,\n" + " coalesce(gb_block, block) as block,\n" + " coalesce(gb_address, address) as address,\n" + " coalesce(gb_parental, parental) as parental,\n" + @@ -396,14 +396,14 @@ public interface DeviceChannelMapper { @Insert("