648540858
2022-03-16 e752dbd1a7fdfbb2063c59470b41a8e5dd546c3d
修复推流关联平台的bug again
5个文件已修改
38 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/bean/SubscribeHolder.java
@@ -46,4 +46,9 @@
        }
        return platforms;
    }
    public void removeAllSubscribe(String platformId) {
        mobilePositionMap.remove(platformId);
        catalogMap.remove(platformId);
    }
}
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -128,7 +128,7 @@
            if (gbStreams.size() > 0) {
                for (GbStream gbStream : gbStreams) {
                    // 出现使用相同国标Id的视频流时,使用新流替换旧流,
                    if (queryKey != null) {
                    if (queryKey != null && gbStream.getApp().equals(mediaItem.getApp())) {
                        Matcher matcherForStream = pattern.matcher(gbStream.getStream());
                        String queryKeyForStream = null;
                        if (matcherForStream.find()) { //此处find()每次被调用后,会偏移到下一个匹配
@@ -144,12 +144,15 @@
                    }
                }
            }
            StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(transform.getApp(), transform.getStream());
            if (streamProxyItem != null) {
                transform.setGbStreamId(streamProxyItem.getGbStreamId());
                transform.setPlatformId(streamProxyItem.getPlatformId());
                transform.setCatalogId(streamProxyItem.getCatalogId());
            //            StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(transform.getApp(), transform.getStream());
            List<GbStream> gbStreamList = gbStreamMapper.selectByGBId(transform.getGbId());
            if (gbStreamList != null && gbStreamList.size() == 1) {
                transform.setGbStreamId(gbStreamList.get(0).getGbStreamId());
                transform.setPlatformId(gbStreamList.get(0).getPlatformId());
                transform.setCatalogId(gbStreamList.get(0).getCatalogId());
                transform.setGbId(gbStreamList.get(0).getGbId());
                gbStreamMapper.update(transform);
                streamPushMapper.del(gbStreamList.get(0).getApp(), gbStreamList.get(0).getStream());
            }else {
                transform.setCreateStamp(System.currentTimeMillis());
                gbStreamMapper.add(transform);
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
@@ -33,6 +33,19 @@
            "mediaServerId=#{mediaServerId}," +
            "status=${status} " +
            "WHERE app=#{app} AND stream=#{stream}")
    int updateByallAndStream(GbStream gbStream);
    @Update("UPDATE gb_stream " +
            "SET app=#{app}," +
            "stream=#{stream}," +
            "gbId=#{gbId}," +
            "name=#{name}," +
            "streamType=#{streamType}," +
            "longitude=#{longitude}, " +
            "latitude=#{latitude}," +
            "mediaServerId=#{mediaServerId}," +
            "status=${status} " +
            "WHERE gbStreamId=#{gbStreamId}")
    int update(GbStream gbStream);
    @Delete("DELETE FROM gb_stream WHERE app=#{app} AND stream=#{stream}")
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
@@ -772,7 +772,7 @@
        try {
            if (streamProxyMapper.update(streamProxyItem) > 0) {
                if (!StringUtils.isEmpty(streamProxyItem.getGbId())) {
                    if (gbStreamMapper.update(streamProxyItem) > 0) {
                    if (gbStreamMapper.updateByallAndStream(streamProxyItem) > 0) {
                        //事务回滚
                        dataSourceTransactionManager.rollback(transactionStatus);
                        return false;
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
@@ -305,6 +305,8 @@
        // 停止发送位置订阅定时任务
        String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() +  "_MobilePosition_" + parentPlatform.getServerGBId();
        dynamicTask.stop(key);
        // 删除缓存的订阅信息
        subscribeHolder.removeAllSubscribe(parentPlatform.getServerGBId());
        if (deleteResult) {
            return new ResponseEntity<>("success", HttpStatus.OK);
        } else {
@@ -341,7 +343,6 @@
     * @param platformId  上级平台ID
     * @param query       查询内容
     * @param online      是否在线
     * @param choosed     是否已选中
     * @param channelType 通道类型
     * @return
     */