From 52aa4e6e8501960d9ea9c78f0df5d712fdedd94e Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Fri, 5 Jul 2024 17:22:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0GbChannelServiceImpl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/genersoft/iot/vmp/gb28181/dao/222 | 84 +++++ .../gb28181/dao/CommonGBChannelMapper.java | 291 +++++++++++++++++- .../service/impl/GbChannelServiceImpl.java | 97 +++++- src/main/resources/application.yml | 2 +- 数据库/2.7.2-重构/初始化-mysql-2.7.2.sql | 2 +- 5 files changed, 464 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/genersoft/iot/vmp/gb28181/dao/222 diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/222 b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/222 new file mode 100644 index 00000000..6108d7f6 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/222 @@ -0,0 +1,84 @@ +", stream_push_id = #{streamPushId}" + +", stream_push_id is null" + +", stream_proxy_id = #{streamProxyId}" + +", stream_proxy_id is null" + +", create_time = #{createTime}" + +", create_time is null" + +", sub_count = #{subCount}" + +", sub_count is null" + +", stream_id = #{streamId}" + +", stream_id is null" + +", has_audio = #{hAudio}" + +", has_audio is null" + +", gps_time = #{gpsTime}" + +", gps_time is null" + +", stream_identification = #{streamIdentification}" + +", stream_identification is null" + +", gb_device_id = #{gbDeviceId}" + +", gb_device_id is null" + +", gb_name = #{gbName}" + +", gb_name is null" + +", gb_manufacturer = #{gbManufacturer}" + +", gb_manufacturer is null" + +", gb_model = #{gbModel}" + +", gb_model is null" + +", gb_owner = #{gbOwner}" + +", gb_owner is null" + +", gbCivilCode = #{gbCivilCode}" + +", gb_civil_code is null" + +", gb_block = #{gbBlock}" + +", gb_block is null" + +", gb_address = #{gbAddress}" + +", gb_address is null" + +", gb_parental = #{gbParental}" + +", gb_parental is null" + +", gb_parent_id = #{gbParentId}" + +", gb_parent_id is null" + +", gb_safety_way = #{gbSafetyWay}" + +", gb_safety_way is null" + +", gb_register_way = #{gbRegisterWay}" + +", gb_register_way is null" + +", gb_cert_num = #{gbCertNum}" + +", gb_cert_num is null" + +", gb_certifiable = #{gbCertifiable}" + +", gb_certifiable is null" + +", gb_err_code = #{gbErrCode}" + +", gb_err_code is null" + +", gb_end_time = #{gbEndTime}" + +", gb_end_time is null" + +", gb_secrecy = #{gbSecrecy}" + +", gb_secrecy is null" + +", gb_ip_address = #{gbIpAddress}" + +", gb_ip_address is null" + +", gb_ip_address = #{gbPort}" + +", gb_port is null" + +", gb_password = #{gbPassword}" + +", gb_password is null" + +", gb_status = #{gbStatus}" + +", gb_status is null" + +", gb_longitude = #{gbLongitude}" + +", gb_longitude is null" + +", gb_latitude = #{gbLatitude}" + +", gb_latitude is null" + +", gb_ptz_type = #{gbPtzType}" + +", gb_ptz_type is null" + +", gb_position_type = #{gbPositionType}" + +", gb_position_type is null" + +", gb_room_type = #{gbRoomType}" + +", gb_room_type is null" + +", gb_use_type = #{gbUseType}" + +", gb_use_type is null" + +", gb_supply_light_type = #{gbSupplyLightType}" + +", gb_supply_light_type is null" + +", gb_direction_type = #{gbDirectionType}" + +", gb_direction_type is null" + +", gb_resolution = #{gbResolution}" + +", gb_resolution is null" + +", gb_business_group_id = #{gbBusinessGroupId}" + +", gb_business_group_id is null" + +", gb_download_speed = #{gbDownloadSpeed}" + +", gb_download_speed is null" + +", gb_svc_space_support_mod = #{gbSvcSpaceSupportMod}" + +", gb_svc_space_support_mod is null" + +", gb_svc_time_support_mode = #{gbSvcTimeSupportMode}" + +", gb_svc_time_support_mode is null" + \ No newline at end of file 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 6cb43fc1..872e9de3 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 @@ -1,14 +1,297 @@ package com.genersoft.iot.vmp.gb28181.dao; import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; @Mapper @Repository public interface CommonGBChannelMapper { - @Select() - CommonGBChannel queryByDeviceId(String gbDeviceId); + @Select("select\n" + + " id as gb_id,\n" + + " device_db_id,\n" + + " stream_push_id,\n" + + " stream_proxy_id,\n" + + " create_time,\n" + + " update_time,\n" + + " sub_count,\n" + + " stream_id,\n" + + " has_audio,\n" + + " gps_time,\n" + + " stream_identification,\n" + + " coalesce(gb_device_id, device_id) as gb_device_id,\n" + + " coalesce(gb_name, name) as gb_name,\n" + + " coalesce(gb_manufacturer, manufacturer) as gb_manufacturer,\n" + + " coalesce(gb_model, model) as gb_model,\n" + + " coalesce(gb_owner, owner) as gb_owner,\n" + + " coalesce(gb_civil_code, civil_code) as gb_civil_code,\n" + + " coalesce(gb_block, block) as gb_block,\n" + + " coalesce(gb_address, address) as gb_address,\n" + + " coalesce(gb_parental, parental) as gb_parental,\n" + + " coalesce(gb_parent_id, parent_id) as gb_parent_id,\n" + + " coalesce(gb_safety_way, safety_way) as gb_safety_way,\n" + + " coalesce(gb_register_way, register_way) as gb_register_way,\n" + + " coalesce(gb_cert_num, cert_num) as gb_cert_num,\n" + + " coalesce(gb_certifiable, certifiable) as gb_certifiable,\n" + + " coalesce(gb_err_code, err_code) as gb_err_code,\n" + + " coalesce(gb_end_time, end_time) as gb_end_time,\n" + + " coalesce(gb_secrecy, secrecy) as gb_secrecy,\n" + + " coalesce(gb_ip_address, ip_address) as gb_ip_address,\n" + + " coalesce(gb_port, port) as gb_port,\n" + + " coalesce(gb_password, password) as gb_password,\n" + + " coalesce(gb_status, status) as gb_status,\n" + + " coalesce(gb_longitude, longitude) as gb_longitude,\n" + + " coalesce(gb_latitude, latitude) as gb_latitude,\n" + + " coalesce(gb_ptz_type, ptz_type) as gb_ptz_type,\n" + + " coalesce(gb_position_type, position_type) as gb_position_type,\n" + + " coalesce(gb_room_type, room_type) as gb_room_type,\n" + + " coalesce(gb_use_type, use_type) as gb_use_type,\n" + + " coalesce(gb_supply_light_type, supply_light_type) as gb_supply_light_type,\n" + + " coalesce(gb_direction_type, direction_type) as gb_direction_type,\n" + + " coalesce(gb_resolution, resolution) as gb_resolution,\n" + + " coalesce(gb_business_group_id, business_group_id) as gb_business_group_id,\n" + + " coalesce(gb_download_speed, download_speed) as gb_download_speed,\n" + + " coalesce(gb_svc_space_support_mod, svc_space_support_mod) as gb_svc_space_support_mod,\n" + + " coalesce(gb_svc_time_support_mode svc_time_support_mode) as gb_svc_time_support_mode\n" + + "from wvp_device_channel\n" + + "where gb_device_id = #{gbDeviceId} or device_id = #{gbDeviceId}") + CommonGBChannel queryByDeviceId(@Param("gbDeviceId") String gbDeviceId); + + @Insert(" ") + int insert(CommonGBChannel commonGBChannel); + + @Select(" select\n" + + " id as gb_id,\n" + + " device_db_id,\n" + + " stream_push_id,\n" + + " stream_proxy_id,\n" + + " create_time,\n" + + " update_time,\n" + + " sub_count,\n" + + " stream_id,\n" + + " has_audio,\n" + + " gps_time,\n" + + " stream_identification,\n" + + " coalesce(gb_device_id, device_id) as gb_device_id,\n" + + " coalesce(gb_name, name) as gb_name,\n" + + " coalesce(gb_manufacturer, manufacturer) as gb_manufacturer,\n" + + " coalesce(gb_model, model) as gb_model,\n" + + " coalesce(gb_owner, owner) as gb_owner,\n" + + " coalesce(gb_civil_code, civil_code) as gb_civil_code,\n" + + " coalesce(gb_block, block) as gb_block,\n" + + " coalesce(gb_address, address) as gb_address,\n" + + " coalesce(gb_parental, parental) as gb_parental,\n" + + " coalesce(gb_parent_id, parent_id) as gb_parent_id,\n" + + " coalesce(gb_safety_way, safety_way) as gb_safety_way,\n" + + " coalesce(gb_register_way, register_way) as gb_register_way,\n" + + " coalesce(gb_cert_num, cert_num) as gb_cert_num,\n" + + " coalesce(gb_certifiable, certifiable) as gb_certifiable,\n" + + " coalesce(gb_err_code, err_code) as gb_err_code,\n" + + " coalesce(gb_end_time, end_time) as gb_end_time,\n" + + " coalesce(gb_secrecy, secrecy) as gb_secrecy,\n" + + " coalesce(gb_ip_address, ip_address) as gb_ip_address,\n" + + " coalesce(gb_port, port) as gb_port,\n" + + " coalesce(gb_password, password) as gb_password,\n" + + " coalesce(gb_status, status) as gb_status,\n" + + " coalesce(gb_longitude, longitude) as gb_longitude,\n" + + " coalesce(gb_latitude, latitude) as gb_latitude,\n" + + " coalesce(gb_ptz_type, ptz_type) as gb_ptz_type,\n" + + " coalesce(gb_position_type, position_type) as gb_position_type,\n" + + " coalesce(gb_room_type, room_type) as gb_room_type,\n" + + " coalesce(gb_use_type, use_type) as gb_use_type,\n" + + " coalesce(gb_supply_light_type, supply_light_type) as gb_supply_light_type,\n" + + " coalesce(gb_direction_type, direction_type) as gb_direction_type,\n" + + " coalesce(gb_resolution, resolution) as gb_resolution,\n" + + " coalesce(gb_business_group_id, business_group_id) as gb_business_group_id,\n" + + " coalesce(gb_download_speed, download_speed) as gb_download_speed,\n" + + " coalesce(gb_svc_space_support_mod, svc_space_support_mod) as gb_svc_space_support_mod,\n" + + " coalesce(gb_svc_time_support_mode svc_time_support_mode) as gb_svc_time_support_mode\n" + + " from wvp_device_channel" + + " where id = #{gbId}") + CommonGBChannel queryById(@Param("gbId") int gbId); + + @Delete("delete from wvp_device_channel where id = #{gbId} ") + void delete(int gbId); + + @Update(value = {" "}) + int update(CommonGBChannel commonGBChannel); + + int updateStatus(@Param("gbId") int gbId, @Param("status") int status); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java index 792acc3a..3e2023e0 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelServiceImpl.java @@ -2,10 +2,13 @@ package com.genersoft.iot.vmp.gb28181.service.impl; import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import com.genersoft.iot.vmp.gb28181.dao.CommonGBChannelMapper; +import com.genersoft.iot.vmp.gb28181.event.EventPublisher; +import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.gb28181.service.IGbChannelService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.List; @@ -14,6 +17,9 @@ import java.util.List; @Service public class GbChannelServiceImpl implements IGbChannelService { + @Autowired + private EventPublisher eventPublisher; + @Autowired private CommonGBChannelMapper commonGBChannelMapper; @@ -24,37 +30,104 @@ public class GbChannelServiceImpl implements IGbChannelService { @Override public int add(CommonGBChannel commonGBChannel) { - return 0; + return commonGBChannelMapper.insert(commonGBChannel); } @Override public int delete(int gbId) { - return 0; + CommonGBChannel channel = commonGBChannelMapper.queryById(gbId); + if (channel != null) { + commonGBChannelMapper.delete(gbId); + try { + // 发送通知 + eventPublisher.catalogEventPublish(null, channel, CatalogEvent.DEL); + }catch (Exception e) { + log.warn("[通道移除通知] 发送失败,{}", channel.getGbDeviceId(), e); + } + } + return 1; } @Override public int update(CommonGBChannel commonGBChannel) { - return 0; + if (commonGBChannel.getGbId() <= 0) { + log.warn("[更新通道] 未找到数据库ID,更新失败, {}", commonGBChannel.getGbDeviceDbId()); + return 0; + } + int result = commonGBChannelMapper.update(commonGBChannel); + if (result > 0) { + try { + // 发送通知 + eventPublisher.catalogEventPublish(null, commonGBChannel, CatalogEvent.UPDATE); + }catch (Exception e) { + log.warn("[更新通道通知] 发送失败,{}", commonGBChannel.getGbDeviceId(), e); + } + } + return result; } @Override public int offline(CommonGBChannel commonGBChannel) { - return 0; + if (commonGBChannel.getGbId() <= 0) { + log.warn("[通道离线] 未找到数据库ID,更新失败, {}", commonGBChannel.getGbDeviceDbId()); + return 0; + } + int result = commonGBChannelMapper.updateStatus(commonGBChannel.getGbId(), 0); + if (result > 0) { + try { + // 发送通知 + eventPublisher.catalogEventPublish(null, commonGBChannel, CatalogEvent.OFF); + }catch (Exception e) { + log.warn("[通道离线通知] 发送失败,{}", commonGBChannel.getGbDeviceId(), e); + } + } + return result; } @Override + @Transactional public int offline(List commonGBChannelList) { - return 0; + if (commonGBChannelList.isEmpty()) { + log.warn("[多个通道离线] 通道数量为0,更新失败"); + return 0; + } + int result = 0; + for (CommonGBChannel channel : commonGBChannelList) { + result += offline(channel); + } + return result; } @Override public int online(CommonGBChannel commonGBChannel) { + if (commonGBChannel.getGbId() <= 0) { + log.warn("[通道上线] 未找到数据库ID,更新失败, {}", commonGBChannel.getGbDeviceDbId()); + return 0; + } + int result = commonGBChannelMapper.updateStatus(commonGBChannel.getGbId(), 1); + if (result > 0) { + try { + // 发送通知 + eventPublisher.catalogEventPublish(null, commonGBChannel, CatalogEvent.ON); + }catch (Exception e) { + log.warn("[通道上线通知] 发送失败,{}", commonGBChannel.getGbDeviceId(), e); + } + } return 0; } @Override + @Transactional public int online(List commonGBChannelList) { - return 0; + if (commonGBChannelList.isEmpty()) { + log.warn("[多个通道上线] 通道数量为0,更新失败"); + return 0; + } + int result = 0; + for (CommonGBChannel channel : commonGBChannelList) { + result += online(channel); + } + return result; } @Override @@ -68,8 +141,20 @@ public class GbChannelServiceImpl implements IGbChannelService { } @Override + @Transactional public void updateStatus(List channelList) { + if (channelList.isEmpty()) { + log.warn("[更新多个通道状态] 通道数量为0,更新失败"); + return; + } + for (CommonGBChannel channel : channelList) { + if (channel.getGbStatus() == 1) { + online(channel); + }else { + offline(channel); + } + } } @Override diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 023c055c..b91ff2aa 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,4 +2,4 @@ spring: application: name: wvp profiles: - active: local272 \ No newline at end of file + active: 272重构 \ No newline at end of file diff --git a/数据库/2.7.2-重构/初始化-mysql-2.7.2.sql b/数据库/2.7.2-重构/初始化-mysql-2.7.2.sql index 06a29593..91b6791b 100644 --- a/数据库/2.7.2-重构/初始化-mysql-2.7.2.sql +++ b/数据库/2.7.2-重构/初始化-mysql-2.7.2.sql @@ -273,7 +273,7 @@ create table wvp_platform_gb_channel ( name character varying(255), civil_code character varying(50), business_group_id character varying(50), - constraint uk_platform_gb_channel_platform_id_catalog_id_device_channel_id unique (platform_id, catalog_id, device_channel_id) + constraint uk_platform_gb_channel_platform_id_catalog_id_device_channel_id unique (platform_id, device_channel_id) ); create table wvp_stream_proxy (