From 4bd4f50b4165953018a9f9174056d29d087fdaee Mon Sep 17 00:00:00 2001
From: szy833 <31844882+szy833@users.noreply.github.com>
Date: 星期日, 16 一月 2022 23:32:51 +0800
Subject: [PATCH] Merge branch '648540858:wvp-28181-2.0' into wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java | 2
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java | 34 ++++++
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java | 2
src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java | 38 +++++++
web_src/src/components/PushVideoList.vue | 18 +++
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java | 50 ++++++++++
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java | 4
pom.xml | 9 +
web_src/src/components/dialog/importChannel.vue | 84 ++++++++++++++++
src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamPushExcelDto.java | 50 ++++++++++
src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java | 3
11 files changed, 286 insertions(+), 8 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2a67fb5..991abc6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -161,7 +161,7 @@
<version>2.1.3</version>
</dependency>
- <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
+ <!-- json瑙f瀽搴揻astjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
@@ -203,6 +203,13 @@
<version>1.12</version>
</dependency>
+ <!--excel瑙f瀽搴�-->
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>easyexcel</artifactId>
+ <version>3.0.4</version>
+ </dependency>
+
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
index 12a50e1..5f0d14d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
@@ -85,7 +85,7 @@
device.setOnline(1);
Device deviceInstore = storager.queryVideoDevice(device.getDeviceId());
- if (deviceInstore.getOnline() == 0) {
+ if (deviceInstore != null && deviceInstore.getOnline() == 0) {
List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(device.getDeviceId());
eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
}
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 06c8b73..8a09de7 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
@@ -5,6 +5,7 @@
import com.genersoft.iot.vmp.media.zlm.dto.MediaItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
+import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import com.github.pagehelper.PageInfo;
import java.util.List;
@@ -65,4 +66,6 @@
void clean();
boolean saveToRandomGB();
+
+ void batchAdd(List<StreamPushItem> streamPushExcelDtoList);
}
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 c8bf191..ebfa124 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,6 +22,7 @@
import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper;
import com.genersoft.iot.vmp.storager.dao.StreamPushMapper;
+import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
@@ -321,4 +322,37 @@
}
return true;
}
+
+ @Override
+ public void batchAdd(List<StreamPushItem> streamPushItems) {
+ streamPushMapper.addAll(streamPushItems);
+ gbStreamMapper.batchAdd(streamPushItems);
+ // 鏌ユ壘寮�鍚簡鍏ㄩ儴鐩存挱娴佸叡浜殑涓婄骇骞冲彴
+ List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
+ if (parentPlatforms.size() > 0) {
+ for (StreamPushItem stream : streamPushItems) {
+ for (ParentPlatform parentPlatform : parentPlatforms) {
+ stream.setCatalogId(parentPlatform.getCatalogId());
+ stream.setPlatformId(parentPlatform.getServerGBId());
+ String streamId = stream.getStream();
+ StreamProxyItem streamProxyItem = platformGbStreamMapper.selectOne(stream.getApp(), streamId, parentPlatform.getServerGBId());
+ if (streamProxyItem == null) {
+ platformGbStreamMapper.add(stream);
+ eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.ADD);
+ }else {
+ if (!streamProxyItem.getGbId().equals(stream.getGbId())) {
+ // 姝ゆ祦浣跨敤鍙︿竴涓浗鏍嘔d宸茬粡涓庤骞冲彴鍏宠仈锛岀Щ闄ゆ璁板綍
+ platformGbStreamMapper.delByAppAndStreamAndPlatform(stream.getApp(), streamId, parentPlatform.getServerGBId());
+ platformGbStreamMapper.add(stream);
+ eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.ADD);
+ stream.setGbId(streamProxyItem.getGbId());
+ eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), stream, CatalogEvent.DEL);
+ }
+ }
+ }
+ }
+
+
+ }
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
new file mode 100644
index 0000000..de7307c
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
@@ -0,0 +1,50 @@
+package com.genersoft.iot.vmp.service.impl;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
+import com.genersoft.iot.vmp.service.IStreamPushService;
+import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPushExcelDto> {
+
+ private IStreamPushService pushService;
+ private String defaultMediaServerId;
+ private List<StreamPushItem> streamPushItems = new ArrayList<>();
+
+ public StreamPushUploadFileHandler(IStreamPushService pushService, String defaultMediaServerId) {
+ this.pushService = pushService;
+ this.defaultMediaServerId = defaultMediaServerId;
+ }
+
+ @Override
+ public void invoke(StreamPushExcelDto streamPushExcelDto, AnalysisContext analysisContext) {
+ StreamPushItem streamPushItem = new StreamPushItem();
+ streamPushItem.setApp(streamPushExcelDto.getApp());
+ streamPushItem.setStream(streamPushExcelDto.getStream());
+ streamPushItem.setGbId(streamPushExcelDto.getGbId());
+ streamPushItem.setStatus(false);
+ streamPushItem.setStreamType("push");
+ streamPushItem.setCreateStamp(System.currentTimeMillis());
+ streamPushItem.setMediaServerId(defaultMediaServerId);
+ streamPushItem.setName(streamPushExcelDto.getName());
+ streamPushItem.setOriginType(2);
+ streamPushItem.setOriginTypeStr("rtsp_push");
+ streamPushItem.setTotalReaderCount("0");
+ streamPushItems.add(streamPushItem);
+ if (streamPushItems.size() > 300) {
+ pushService.batchAdd(streamPushItems);
+ // 瀛樺偍瀹屾垚娓呯悊 list
+ streamPushItems.clear();
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+ // 杩欓噷涔熻淇濆瓨鏁版嵁锛岀‘淇濇渶鍚庨仐鐣欑殑鏁版嵁涔熷瓨鍌ㄥ埌鏁版嵁搴�
+ pushService.batchAdd(streamPushItems);
+ }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
index 82df331..15bb0f5 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
@@ -4,6 +4,7 @@
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
+import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
@@ -82,7 +83,7 @@
void batchDel(List<StreamProxyItem> streamProxyItemList);
@Insert("<script> " +
- "insert into gb_stream " +
+ "REPLACE into gb_stream " +
"(app, stream, gbId, name, " +
"longitude, latitude, streamType, mediaServerId, status)" +
"values " +
@@ -93,7 +94,6 @@
"</foreach> " +
"</script>")
void batchAdd(List<StreamPushItem> subList);
-
@Update({"<script>" +
"<foreach collection='gpsMsgInfos' item='item' separator=';'>" +
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
index c5b22f8..6a1093c 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
@@ -52,7 +52,7 @@
@Insert("<script>" +
"INSERT INTO stream_push (app, stream, totalReaderCount, originType, originTypeStr, " +
"createStamp, aliveSecond, mediaServerId) " +
- "VALUES <foreach collection='streamPushItems' item='item' index='index' >" +
+ "VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" +
"( '${item.app}', '${item.stream}', '${item.totalReaderCount}', '${item.originType}', " +
"'${item.originTypeStr}','${item.createStamp}', '${item.aliveSecond}', '${item.mediaServerId}' )" +
" </foreach>" +
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamPushExcelDto.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamPushExcelDto.java
new file mode 100644
index 0000000..c0c7611
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/StreamPushExcelDto.java
@@ -0,0 +1,50 @@
+package com.genersoft.iot.vmp.vmanager.bean;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+
+public class StreamPushExcelDto {
+
+ @ExcelProperty("鍚嶇О")
+ private String name;
+
+ @ExcelProperty("搴旂敤鍚�")
+ private String app;
+
+ @ExcelProperty("娴両D")
+ private String stream;
+
+ @ExcelProperty("鍥芥爣ID")
+ private String gbId;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getApp() {
+ return app;
+ }
+
+ public void setApp(String app) {
+ this.app = app;
+ }
+
+ public String getStream() {
+ return stream;
+ }
+
+ public void setStream(String stream) {
+ this.stream = stream;
+ }
+
+ public String getGbId() {
+ return gbId;
+ }
+
+ public void setGbId(String gbId) {
+ this.gbId = gbId;
+ }
+}
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 6dfc257..0c80d11 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
@@ -1,19 +1,29 @@
package com.genersoft.iot.vmp.vmanager.streamPush;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
+import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.IStreamPushService;
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
+import com.genersoft.iot.vmp.service.impl.StreamPushUploadFileHandler;
+import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
+import org.apache.poi.sl.usermodel.Sheet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
@Api(tags = "鎺ㄦ祦淇℃伅绠$悊")
@Controller
@@ -25,6 +35,9 @@
@Autowired
private IStreamPushService streamPushService;
+
+ @Autowired
+ private IMediaServerService mediaServerService;
@ApiOperation("鎺ㄦ祦鍒楄〃鏌ヨ")
@ApiImplicitParams({
@@ -88,5 +101,28 @@
return "fail";
}
}
+ @PostMapping(value = "upload")
+ @ResponseBody
+ public String uploadChannelFile(@RequestParam(value = "file") MultipartFile file){
+ if (file.isEmpty()) {
+ return "fail";
+ }
+ //鑾峰彇鏂囦欢娴�
+ InputStream inputStream = null;
+ try {
+ String name = file.getName();
+ inputStream = file.getInputStream();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ //浼犲叆鍙傛暟
+ ExcelReader excelReader = EasyExcel.read(inputStream, StreamPushExcelDto.class,
+ new StreamPushUploadFileHandler(streamPushService, mediaServerService.getDefaultMediaServer().getId())).build();
+ ReadSheet readSheet = EasyExcel.readSheet(0).build();
+ excelReader.read(readSheet);
+ excelReader.finish();
+ return "success";
+ }
+
}
diff --git a/web_src/src/components/PushVideoList.vue b/web_src/src/components/PushVideoList.vue
index 6131d60..b519fb4 100644
--- a/web_src/src/components/PushVideoList.vue
+++ b/web_src/src/components/PushVideoList.vue
@@ -8,6 +8,13 @@
<div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
<span style="font-size: 1rem; font-weight: bold;">鎺ㄦ祦鍒楄〃</span>
</div>
+ <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
+ <el-button icon="el-icon-upload2" size="mini" style="margin-right: 1rem;" type="primary" @click="importChannel">閫氶亾瀵煎叆</el-button>
+ <el-button icon="el-icon-download" size="mini" style="margin-right: 1rem;" type="primary" >
+ <a style="color: #FFFFFF; text-align: center; text-decoration: none" href="/static/file/鎺ㄦ祦閫氶亾瀵煎叆.zip" download='鎺ㄦ祦閫氶亾瀵煎叆.zip' >涓嬭浇妯℃澘</a>
+ </el-button>
+
+ </div>
<devicePlayer ref="devicePlayer"></devicePlayer>
<addStreamTOGB ref="addStreamTOGB"></addStreamTOGB>
<el-table :data="pushList" border style="width: 100%" :height="winHeight">
@@ -54,6 +61,7 @@
:total="total">
</el-pagination>
<streamProxyEdit ref="streamProxyEdit" ></streamProxyEdit>
+ <importChannel ref="importChannel" ></importChannel>
</el-main>
</el-container>
</div>
@@ -64,13 +72,15 @@
import devicePlayer from './dialog/devicePlayer.vue'
import addStreamTOGB from './dialog/addStreamTOGB.vue'
import uiHeader from './UiHeader.vue'
+ import importChannel from './dialog/importChannel.vue'
export default {
name: 'pushVideoList',
components: {
devicePlayer,
addStreamTOGB,
streamProxyEdit,
- uiHeader
+ uiHeader,
+ importChannel,
},
data() {
return {
@@ -196,8 +206,12 @@
s = t.getSeconds();
// 鍙牴鎹渶瑕佸湪杩欓噷瀹氫箟鏃堕棿鏍煎紡
return y+'-'+(m<10?'0'+m:m)+'-'+(d<10?'0'+d:d)+' '+(h<10?'0'+h:h)+':'+(i<10?'0'+i:i)+':'+(s<10?'0'+s:s);
- }
+ },
+ importChannel: function () {
+ this.$refs.importChannel.openDialog(()=>{
+ })
+ },
}
};
</script>
diff --git a/web_src/src/components/dialog/importChannel.vue b/web_src/src/components/dialog/importChannel.vue
new file mode 100644
index 0000000..6d83819
--- /dev/null
+++ b/web_src/src/components/dialog/importChannel.vue
@@ -0,0 +1,84 @@
+<template>
+ <div id="importChannel" v-loading="isLoging">
+ <el-dialog
+ title="瀵煎叆閫氶亾鏁版嵁"
+ width="30rem"
+ top="2rem"
+ :append-to-body="true"
+ :close-on-click-modal="false"
+ :visible.sync="showDialog"
+ :destroy-on-close="true"
+ @close="close()"
+ >
+ <div>
+ <el-upload
+ class="upload-box"
+ drag
+ action="debug/api/push/upload"
+ name="file"
+ >
+ <i class="el-icon-upload"></i>
+ <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+ <div class="el-upload__tip" slot="tip">鍙兘涓婁紶 csv / xls / xlsx 鏂囦欢</div>
+ </el-upload>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+
+export default {
+ name: "importChannel",
+ computed: {},
+ created() {},
+ data() {
+ return {
+ submitCallback: null,
+ showDialog: false,
+ isLoging: false,
+ isEdit: false,
+ };
+ },
+ methods: {
+ openDialog: function (callback) {
+ this.showDialog = true;
+ this.submitCallback = callback;
+ },
+ onSubmit: function () {
+ console.log("onSubmit");
+ console.log(this.form);
+ this.$axios({
+ method:"post",
+ url:`/api/platform/catalog/${!this.isEdit? "add":"edit"}`,
+ data: this.form
+ })
+ .then((res)=> {
+ if (res.data.code === 0) {
+ console.log("娣诲姞/淇敼鎴愬姛")
+ if (this.submitCallback)this.submitCallback()
+ }else {
+ this.$message({
+ showClose: true,
+ message: res.data.msg,
+ type: "error",
+ });
+ }
+ this.close();
+ })
+ .catch((error)=> {
+ console.log(error);
+ });
+ },
+ close: function () {
+ this.showDialog = false;
+ this.$refs.form.resetFields();
+ },
+ },
+};
+</script>
+<style>
+.upload-box{
+ text-align: center;
+}
+</style>
--
Gitblit v1.8.0