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 872e9de3..e1755f31 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 @@ -4,6 +4,8 @@ import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; +import java.util.List; + @Mapper @Repository public interface CommonGBChannelMapper { @@ -294,4 +296,8 @@ public interface CommonGBChannelMapper { int update(CommonGBChannel commonGBChannel); int updateStatus(@Param("gbId") int gbId, @Param("status") int status); + + int updateStatusForList(List commonGBChannels, @Param("status") int status); + + List queryInListByStatus(List commonGBChannelList, @Param("status") int status); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java index 4007d19c..57bbc127 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelService.java @@ -24,6 +24,8 @@ public interface IGbChannelService { void closeSend(CommonGBChannel commonGBChannel); + void closeSend(List commonGBChannelList); + void batchAdd(List commonGBChannels); void updateStatus(List channelList); 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 3e2023e0..58e9e338 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 @@ -44,6 +44,8 @@ public class GbChannelServiceImpl implements IGbChannelService { }catch (Exception e) { log.warn("[通道移除通知] 发送失败,{}", channel.getGbDeviceId(), e); } + // 结束发送 + closeSend(channel); } return 1; } @@ -91,10 +93,34 @@ public class GbChannelServiceImpl implements IGbChannelService { log.warn("[多个通道离线] 通道数量为0,更新失败"); return 0; } - int result = 0; - for (CommonGBChannel channel : commonGBChannelList) { - result += offline(channel); + List onlineChannelList = commonGBChannelMapper.queryInListByStatus(commonGBChannelList, 1); + if (onlineChannelList.isEmpty()) { + log.warn("[多个通道离线] 更新失败, 参数内通道已经离线"); + return 0; } + int limitCount = 1000; + int result = 0; + if (onlineChannelList.size() > limitCount) { + for (int i = 0; i < onlineChannelList.size(); i += limitCount) { + int toIndex = i + limitCount; + if (i + limitCount > onlineChannelList.size()) { + toIndex = onlineChannelList.size(); + } + result += commonGBChannelMapper.updateStatusForList(onlineChannelList.subList(i, toIndex), 0); + } + }else { + result += commonGBChannelMapper.updateStatusForList(onlineChannelList, 0); + } + if (result > 0) { + try { + // 发送catalog + eventPublisher.catalogEventPublish(null, onlineChannelList, CatalogEvent.OFF); + }catch (Exception e) { + log.warn("[多个通道离线] 发送失败,数量:{}", onlineChannelList.size(), e); + } + } + // 结束国标级联的发送 + closeSend(onlineChannelList); return result; } @@ -123,10 +149,34 @@ public class GbChannelServiceImpl implements IGbChannelService { log.warn("[多个通道上线] 通道数量为0,更新失败"); return 0; } - int result = 0; - for (CommonGBChannel channel : commonGBChannelList) { - result += online(channel); + List offlineChannelList = commonGBChannelMapper.queryInListByStatus(commonGBChannelList, 0); + if (offlineChannelList.isEmpty()) { + log.warn("[多个通道上线] 更新失败, 参数内通道已经上线线"); + return 0; } + // 批量更新 + int limitCount = 1000; + int result = 0; + if (offlineChannelList.size() > limitCount) { + for (int i = 0; i < offlineChannelList.size(); i += limitCount) { + int toIndex = i + limitCount; + if (i + limitCount > offlineChannelList.size()) { + toIndex = offlineChannelList.size(); + } + result += commonGBChannelMapper.updateStatusForList(offlineChannelList.subList(i, toIndex), 1); + } + }else { + result += commonGBChannelMapper.updateStatusForList(offlineChannelList, 1); + } + if (result > 0) { + try { + // 发送catalog + eventPublisher.catalogEventPublish(null, offlineChannelList, CatalogEvent.ON); + }catch (Exception e) { + log.warn("[多个通道上线] 发送失败,数量:{}", offlineChannelList.size(), e); + } + } + return result; } @@ -135,6 +185,16 @@ public class GbChannelServiceImpl implements IGbChannelService { } + @Override + @Transactional + public void closeSend(List commonGBChannelList) { + if (!commonGBChannelList.isEmpty()) { + for (CommonGBChannel commonGBChannel : commonGBChannelList) { + closeSend(commonGBChannel); + } + } + } + @Override public void batchAdd(List commonGBChannels) {