From e29d94c83f62960bb1d6dacac4c978debc85c5ef Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 22 七月 2022 16:02:14 +0800
Subject: [PATCH] 增加推流添加功能,修复级联目录推送

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java |    4 -
 src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java                         |   32 ++++++++++
 src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java                      |    5 +
 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java               |   20 ++++--
 web_src/src/components/channelList.vue                                                              |    3 
 src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java                                    |    1 
 web_src/src/components/dialog/catalogEdit.vue                                                       |    2 
 src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java                   |   30 ++++++++++
 src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java                         |    2 
 web_src/src/components/PushVideoList.vue                                                            |    7 ++
 web_src/src/components/dialog/pushStreamEdit.vue                                                    |   61 ++++++++++++++------
 src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java                                 |    4 +
 12 files changed, 139 insertions(+), 32 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
index 19908e4..0183748 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -419,7 +419,7 @@
                         }
                     }
                 } else if (gbStream != null) {
-                    if (streamPushItem.isStatus()) {
+                    if (streamPushItem != null && streamPushItem.isStatus()) {
                         // 鍦ㄧ嚎鐘舵��
                         pushStream(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
                                 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
@@ -428,9 +428,7 @@
                         notifyStreamOnline(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
                                 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
                     }
-
                 }
-
             }
 
         } catch (SipException | InvalidArgumentException | ParseException e) {
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
index 5dd45ef..b95ec48 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
@@ -96,4 +96,8 @@
      */
     void online(List<StreamPushItemFromRedis> onlineStreams);
 
+    /**
+     * 澧炲姞鎺ㄦ祦
+     */
+    boolean add(StreamPushItem stream);
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
index 62cf20f..8fa0409 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -22,7 +22,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionStatus;
 import org.springframework.util.StringUtils;
 
 import java.util.*;
@@ -68,6 +71,12 @@
 
     @Autowired
     private IMediaServerService mediaServerService;
+
+    @Autowired
+    DataSourceTransactionManager dataSourceTransactionManager;
+
+    @Autowired
+    TransactionDefinition transactionDefinition;
 
     @Override
     public List<StreamPushItem> handleJSON(String jsonData, MediaServerItem mediaServerItem) {
@@ -463,4 +472,27 @@
         // 鍙戦�侀�氱煡
         eventPublisher.catalogEventPublishForStream(null, onlinePushers, CatalogEvent.ON);
     }
+
+    @Override
+    public boolean add(StreamPushItem stream) {
+        stream.setUpdateTime(DateUtil.getNow());
+        stream.setCreateTime(DateUtil.getNow());
+        stream.setServerId(userSetting.getServerId());
+
+        // 鏀惧湪浜嬪姟鍐呮墽琛�
+        boolean result = false;
+        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
+        try {
+            int addStreamResult = streamPushMapper.add(stream);
+            if (!StringUtils.isEmpty(stream.getGbId())) {
+                gbStreamMapper.add(stream);
+            }
+            dataSourceTransactionManager.commit(transactionStatus);
+            result = true;
+        }catch (Exception e) {
+            logger.error("鎵归噺绉婚櫎娴佷笌骞冲彴鐨勫叧绯绘椂閿欒", e);
+            dataSourceTransactionManager.rollback(transactionStatus);
+        }
+        return result;
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
index 4ed0f32..ae16379 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformCatalogMapper.java
@@ -50,7 +50,7 @@
     @Select("SELECT pc.* FROM  platform_catalog pc WHERE  pc.id = #{id}")
     PlatformCatalog selectParentCatalog(String id);
 
-    @Select("SELECT pc.id as channelId, pc.name, pc.civilCode, pc.businessGroupId,'0' as parental, pc.parentId  " +
+    @Select("SELECT pc.id as channelId, pc.name, pc.civilCode, pc.businessGroupId,'1' as parental, pc.parentId  " +
             " FROM platform_catalog pc WHERE pc.platformId=#{platformId}")
     List<DeviceChannel> queryCatalogInPlatform(String platformId);
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
index c18c5d2..8465d80 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
@@ -741,6 +741,7 @@
 			if (platformCatalog.getPlatformId().equals(platformCatalog.getParentId())) {
 				// 绗竴灞傝妭鐐�
 				platformCatalog.setBusinessGroupId(platformCatalog.getId());
+				platformCatalog.setParentId(platform.getDeviceGBId());
 			}else {
 				// 鑾峰彇椤跺眰鐨�
 				PlatformCatalog topCatalog = getTopCatalog(platformCatalog.getParentId(), platformCatalog.getPlatformId());
@@ -749,6 +750,10 @@
 		}
 		if (platform.getTreeType().equals(TreeType.CIVIL_CODE)) {
 			platformCatalog.setCivilCode(platformCatalog.getId());
+			if (platformCatalog.getPlatformId().equals(platformCatalog.getParentId())) {
+				// 绗竴灞傝妭鐐�
+				platformCatalog.setParentId(platform.getDeviceGBId());
+			}
 		}
 
 		int result = catalogMapper.add(platformCatalog);
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
index 91ed22c..db937d6 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
@@ -12,6 +12,7 @@
         this.data = data;
     }
 
+
     private int code;
     private String msg;
     private T data;
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
index 8d2278e..7a22693 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java
@@ -8,6 +8,7 @@
 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
 import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
 import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder;
+import com.genersoft.iot.vmp.gb28181.bean.TreeType;
 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
 import com.genersoft.iot.vmp.service.IPlatformChannelService;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
@@ -463,13 +464,20 @@
         if (logger.isDebugEnabled()) {
             logger.debug("鏌ヨ鐩綍,platformId: {}, parentId: {}", platformId, parentId);
         }
+        ParentPlatform platform = storager.queryParentPlatByServerGBId(platformId);
+        if (platform == null) {
+            return new ResponseEntity<>(new WVPResult<>(400, "骞冲彴鏈壘鍒�", null), HttpStatus.OK);
+        }
+        if (platformId.equals(parentId)) {
+            parentId = platform.getDeviceGBId();
+        }
         List<PlatformCatalog> platformCatalogList = storager.getChildrenCatalogByPlatform(platformId, parentId);
-        // 鏌ヨ涓嬪睘鐨勫浗鏍囬�氶亾
-//        List<PlatformCatalog> catalogsForChannel = storager.queryChannelInParentPlatformAndCatalog(platformId, parentId);
-        // 鏌ヨ涓嬪睘鐨勭洿鎾祦閫氶亾
-//        List<PlatformCatalog> catalogsForStream = storager.queryStreamInParentPlatformAndCatalog(platformId, parentId);
-//        platformCatalogList.addAll(catalogsForChannel);
-//        platformCatalogList.addAll(catalogsForStream);
+//        if (platform.getTreeType().equals(TreeType.BUSINESS_GROUP)) {
+//            platformCatalogList = storager.getChildrenCatalogByPlatform(platformId, parentId);
+//        }else {
+//
+//        }
+
         WVPResult<List<PlatformCatalog>> result = new WVPResult<>();
         result.setCode(0);
         result.setMsg("success");
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
index 300f952..1f0884f 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
@@ -284,5 +284,35 @@
         return result;
     }
 
+    /**
+     * 鑾峰彇鎺ㄦ祦鎾斁鍦板潃
+     * @param stream 鎺ㄦ祦淇℃伅
+     * @return
+     */
+    @ApiOperation("鑾峰彇鎺ㄦ祦鎾斁鍦板潃")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "stream", value = "鎺ㄦ祦淇℃伅", dataTypeClass = StreamPushItem.class),
+    })
+    @PostMapping(value = "/add")
+    @ResponseBody
+    public WVPResult<StreamInfo> add(@RequestBody StreamPushItem stream){
+        if (StringUtils.isEmpty(stream.getGbId())) {
 
+            return new WVPResult<>(400, "鍥芥爣ID涓嶅彲涓虹┖", null);
+        }
+        if (StringUtils.isEmpty(stream.getApp()) && StringUtils.isEmpty(stream.getStream())) {
+            return new WVPResult<>(400, "app鎴杝tream涓嶅彲涓虹┖", null);
+        }
+        stream.setStatus(false);
+        stream.setPushIng(false);
+        stream.setAliveSecond(0L);
+        stream.setTotalReaderCount("0");
+        boolean result = streamPushService.add(stream);
+
+        if (result) {
+            return new WVPResult<>(0, "success", null);
+        }else {
+            return new WVPResult<>(-1, "fail", null);
+        }
+    }
 }
diff --git a/web_src/src/components/PushVideoList.vue b/web_src/src/components/PushVideoList.vue
index 58ce8a2..6a415f7 100644
--- a/web_src/src/components/PushVideoList.vue
+++ b/web_src/src/components/PushVideoList.vue
@@ -34,6 +34,8 @@
         <el-button icon="el-icon-delete" size="mini" style="margin-right: 1rem;"
                    :disabled="multipleSelection.length === 0" type="danger" @click="batchDel">鎵归噺绉婚櫎
         </el-button>
+        <el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="addStream">娣诲姞閫氶亾
+        </el-button>
         <el-button icon="el-icon-refresh-right" circle size="mini" @click="refresh()"></el-button>
       </div>
     </div>
@@ -108,7 +110,7 @@
 <script>
 import streamProxyEdit from './dialog/StreamProxyEdit.vue'
 import devicePlayer from './dialog/devicePlayer.vue'
-import addStreamTOGB from './dialog/addStreamTOGB.vue'
+import addStreamTOGB from './dialog/pushStreamEdit.vue'
 import uiHeader from '../layout/UiHeader.vue'
 import importChannel from './dialog/importChannel.vue'
 import MediaServer from './service/MediaServer'
@@ -252,6 +254,9 @@
 
       })
     },
+    addStream: function (){
+      this.$refs.addStreamTOGB.openDialog(null, this.initData);
+    },
     batchDel: function () {
       this.$confirm(`纭畾鍒犻櫎閫変腑鐨�${this.multipleSelection.length}涓�氶亾?`, '鎻愮ず', {
         confirmButtonText: '纭畾',
diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue
index 2a09c5c..bea4b39 100644
--- a/web_src/src/components/channelList.vue
+++ b/web_src/src/components/channelList.vue
@@ -124,7 +124,6 @@
 import devicePlayer from './dialog/devicePlayer.vue'
 import uiHeader from '../layout/UiHeader.vue'
 import moment from "moment";
-import DviceService from "./service/DeviceService";
 import DeviceService from "./service/DeviceService";
 import DeviceTree from "./common/DeviceTree";
 
@@ -318,7 +317,7 @@
     changeSubchannel(itemData) {
       this.beforeUrl = this.$router.currentRoute.path;
 
-      var url = `/${this.$router.currentRoute.name}/${this.$router.currentRoute.params.deviceId}/${itemData.channelId}/${this.$router.currentRoute.params.count}/1`
+      var url = `/${this.$router.currentRoute.name}/${this.$router.currentRoute.params.deviceId}/${itemData.channelId}`
       this.$router.push(url).then(() => {
         this.searchSrt = "";
         this.channelType = "";
diff --git a/web_src/src/components/dialog/catalogEdit.vue b/web_src/src/components/dialog/catalogEdit.vue
index 22ff181..7107382 100644
--- a/web_src/src/components/dialog/catalogEdit.vue
+++ b/web_src/src/components/dialog/catalogEdit.vue
@@ -94,7 +94,7 @@
       },
       rules: {
         name: [{ required: true, message: "璇疯緭鍏ュ悕绉�", trigger: "blur" }],
-        id: [{ trigger: "blur",validator: checkId  }]
+        id: [{ required: true, trigger: "blur",validator: checkId  }]
       },
     };
   },
diff --git a/web_src/src/components/dialog/addStreamTOGB.vue b/web_src/src/components/dialog/pushStreamEdit.vue
similarity index 77%
rename from web_src/src/components/dialog/addStreamTOGB.vue
rename to web_src/src/components/dialog/pushStreamEdit.vue
index 9baf1bc..590cb00 100644
--- a/web_src/src/components/dialog/addStreamTOGB.vue
+++ b/web_src/src/components/dialog/pushStreamEdit.vue
@@ -15,10 +15,10 @@
                 <el-input v-model="proxyParam.name" clearable></el-input>
               </el-form-item>
               <el-form-item label="娴佸簲鐢ㄥ悕" prop="app">
-                <el-input v-model="proxyParam.app" clearable :disabled="true"></el-input>
+                <el-input v-model="proxyParam.app" clearable :disabled="edit"></el-input>
               </el-form-item>
               <el-form-item label="娴両D" prop="stream">
-                <el-input v-model="proxyParam.stream" clearable :disabled="true"></el-input>
+                <el-input v-model="proxyParam.stream" clearable :disabled="edit"></el-input>
               </el-form-item>
               <el-form-item label="鍥芥爣缂栫爜" prop="gbId">
                 <el-input v-model="proxyParam.gbId" placeholder="璁剧疆鍥芥爣缂栫爜鍙帹閫佸埌鍥芥爣" clearable></el-input>
@@ -28,7 +28,6 @@
                   <el-button type="primary" @click="onSubmit">淇濆瓨</el-button>
                   <el-button @click="close">鍙栨秷</el-button>
                 </div>
-                
               </el-form-item>
             </el-form>
       </div>
@@ -38,7 +37,7 @@
 
 <script>
 export default {
-  name: "streamProxyEdit",
+  name: "pushStreamEdit",
   props: {},
   computed: {},
   created() {},
@@ -63,13 +62,13 @@
       listChangeCallback: null,
       showDialog: false,
       isLoging: false,
+      edit: false,
       proxyParam: {
           name: null,
           app: null,
           stream: null,
           gbId: null,
       },
-      
       rules: {
         name: [{ required: true, message: "璇疯緭鍏ュ悕绉�", trigger: "blur" }],
         app: [{ required: true, message: "璇疯緭鍏ュ簲鐢ㄥ悕", trigger: "blur" }],
@@ -84,30 +83,53 @@
       this.listChangeCallback = callback;
       if (proxyParam != null) {
         this.proxyParam = proxyParam;
-      } 
+        this.edit = true
+      }
     },
     onSubmit: function () {
       console.log("onSubmit");
-      var that = this;
-      that.$axios({
-        method:"post",
-        url:`/api/push/save_to_gb`, 
-        data: that.proxyParam
-      }).then(function (res) {
+      if (this.edit) {
+        this.$axios({
+          method:"post",
+          url:`/api/push/save_to_gb`,
+          data: this.proxyParam
+        }).then( (res) => {
           if (res.data == "success") {
-            that.$message({
+            this.$message({
               showClose: true,
               message: "淇濆瓨鎴愬姛",
               type: "success",
             });
-            that.showDialog = false;
-            if (that.listChangeCallback != null) {
-              that.listChangeCallback();
+            this.showDialog = false;
+            if (this.listChangeCallback != null) {
+              this.listChangeCallback();
             }
           }
-      }).catch(function (error) {
+        }).catch((error)=> {
           console.log(error);
-      });
+        });
+      }else {
+        this.$axios({
+          method:"post",
+          url:`/api/push/add`,
+          data: this.proxyParam
+        }).then( (res) => {
+          if (res.data.code === 0) {
+            this.$message({
+              showClose: true,
+              message: "淇濆瓨鎴愬姛",
+              type: "success",
+            });
+            this.showDialog = false;
+            if (this.listChangeCallback != null) {
+              this.listChangeCallback();
+            }
+          }
+        }).catch((error)=> {
+          console.log(error);
+        });
+      }
+
     },
     close: function () {
       console.log("鍏抽棴鍔犲叆GB");
@@ -131,6 +153,9 @@
       if (this.platform.enable && this.platform.expires == "0") {
         this.platform.expires = "300";
       }
+    },
+    handleNodeClick: function (node){
+
     }
   },
 };

--
Gitblit v1.8.0