From 5d400804683866d57136331d257b6e282f280cb7 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 15 五月 2023 15:29:39 +0800
Subject: [PATCH] 优化部分sql实现

---
 src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java                                                    |    9 +
 src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java                                                         |    4 
 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java                                                 |   10 +
 src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java                                                         |   20 ++
 src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java                                                       |    2 
 src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java                                                            |   24 ++--
 src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaseInfo.java                                                        |   10 +
 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java                                                             |    8 
 src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java                                                 |   44 +++++-
 src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java                                                            |    6 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java                                         |    2 
 src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java                                              |   41 ++++--
 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java                                                   |    2 
 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java                                                        |    8 
 src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java                                                                 |   10 
 src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java                                                           |    4 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java |    2 
 src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java                                                      |   10 
 src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java                                                                |    4 
 src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java                                                        |   11 +
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java                                     |   10 
 src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java                                                           |    4 
 src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java                                                      |    4 
 src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java                                                   |   10 +
 src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java                                                            |    4 
 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java                                                      |   43 +++---
 26 files changed, 191 insertions(+), 115 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
index 0e1b618..f7ef12d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
@@ -172,7 +172,7 @@
 	 * 閬囧埌杩嘚VR涓嬬殑IPC涓嬪彂淇′护鍙互鎺ㄦ祦锛� 浣嗘槸 Status 鍝嶅簲 OFF
 	 */
 	@Schema(description = "鍦ㄧ嚎/绂荤嚎锛� 1鍦ㄧ嚎,0绂荤嚎")
-	private int status;
+	private boolean status;
 
 	/**
 	 * 缁忓害
@@ -455,11 +455,11 @@
 		this.PTZTypeText = PTZTypeText;
 	}
 
-	public int getStatus() {
+	public boolean isStatus() {
 		return status;
 	}
 
-	public void setStatus(int status) {
+	public void setStatus(boolean status) {
 		this.status = status;
 	}
 
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
index acfb880..0332aab 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
@@ -66,7 +66,7 @@
      * @param fromTag
      * @return
      */
-    void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,int status) throws SipException, InvalidArgumentException, ParseException;
+    void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,boolean status) throws SipException, InvalidArgumentException, ParseException;
 
     /**
      * 鍚戜笂绾у洖澶嶇Щ鍔ㄤ綅缃闃呮秷鎭�
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index 582fbaf..b1e2196 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -221,7 +221,7 @@
                 if (!channel.getChannelId().equals(parentPlatform.getDeviceGBId())) {
                     catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
                     if (channel.getParental() == 0) {
-                        catalogXml.append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n");
+                        catalogXml.append("<Status>" + (channel.isStatus() ? "ON" : "OFF") + "</Status>\r\n");
                     }
                 }
                 if (channel.getParental() == 0) {
@@ -250,7 +250,7 @@
                         catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n");
                         catalogXml.append("<Password>" + channel.getPort() + "</Password>\r\n");
                         catalogXml.append("<PTZType>" + channel.getPTZType() + "</PTZType>\r\n");
-                        catalogXml.append("<Status>" + (channel.getStatus() == 1?"ON":"OFF") + "</Status>\r\n");
+                        catalogXml.append("<Status>" + (channel.isStatus() ? "ON":"OFF") + "</Status>\r\n");
                         catalogXml.append("<Longitude>" +
                                 (channel.getLongitudeWgs84() != 0? channel.getLongitudeWgs84():channel.getLongitude())
                                 + "</Longitude>\r\n");
@@ -377,11 +377,11 @@
      * @return
      */
     @Override
-    public void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,int status) throws SipException, InvalidArgumentException, ParseException {
+    public void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,boolean status) throws SipException, InvalidArgumentException, ParseException {
         if (parentPlatform == null) {
             return ;
         }
-        String statusStr = (status==1)?"ONLINE":"OFFLINE";
+        String statusStr = (status)?"ONLINE":"OFFLINE";
         String characterSet = parentPlatform.getCharacterSet();
         StringBuffer deviceStatusXml = new StringBuffer(600);
         deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n")
@@ -542,7 +542,7 @@
                     catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n")
                             .append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n")
                             .append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n")
-                            .append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n");
+                            .append("<Status>" + (channel.isStatus() ? "ON" : "OFF") + "</Status>\r\n");
 
                     if (channel.getChannelType() != 2) {  // 涓氬姟鍒嗙粍/铏氭嫙缁勭粐/琛屾斂鍖哄垝 涓嶈缃互涓嬪睘鎬�
                         catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n")
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java
index e9d44d5..f9edfb3 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java
@@ -77,7 +77,7 @@
             return;
         }
         try {
-            cmderFroPlatform.deviceStatusResponse(parentPlatform,channelId, sn, fromHeader.getTag(),deviceChannel.getStatus());
+            cmderFroPlatform.deviceStatusResponse(parentPlatform,channelId, sn, fromHeader.getTag(),deviceChannel.isStatus());
         } catch (SipException | InvalidArgumentException | ParseException e) {
             logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 DeviceStatus鏌ヨ鍥炲: {}", e.getMessage());
         }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
index d51ab9f..750cd8b 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
@@ -255,7 +255,7 @@
         }
         if (channelType.equals(ChannelType.CivilCode)) {
             // 琛屾斂鍖哄垝鍏朵粬瀛楁娌″繀瑕佽瘑鍒簡锛岄粯璁ゅ湪绾垮嵆鍙�
-            deviceChannel.setStatus(1);
+            deviceChannel.setStatus(true);
             deviceChannel.setParental(1);
             deviceChannel.setCreateTime(DateUtil.getNow());
             deviceChannel.setUpdateTime(DateUtil.getNow());
@@ -309,7 +309,7 @@
         deviceChannel.setBusinessGroupId(businessGroupID);
         if (channelType.equals(ChannelType.BusinessGroup) || channelType.equals(ChannelType.VirtualOrganization)) {
             // 涓氬姟鍒嗙粍鍜岃櫄鎷熺粍缁� 鍏朵粬瀛楁娌″繀瑕佽瘑鍒簡锛岄粯璁ゅ湪绾垮嵆鍙�
-            deviceChannel.setStatus(1);
+            deviceChannel.setStatus(true);
             deviceChannel.setParental(1);
             deviceChannel.setCreateTime(DateUtil.getNow());
             deviceChannel.setUpdateTime(DateUtil.getNow());
@@ -322,13 +322,13 @@
             String status = statusElement.getTextTrim().trim();
             // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR鐨勫吋瀹规�у鐞�
             if (status.equals("ON") || status.equals("On") || status.equals("ONLINE") || status.equals("OK")) {
-                deviceChannel.setStatus(1);
+                deviceChannel.setStatus(true);
             }
             if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
-                deviceChannel.setStatus(0);
+                deviceChannel.setStatus(false);
             }
         }else {
-            deviceChannel.setStatus(1);
+            deviceChannel.setStatus(true);
         }
         // 璇嗗埆鑷甫鐨勭洰褰曟爣璇�
         String parental = XmlUtil.getText(itemDevice, "Parental");
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java
index 66dbe07..cd402a1 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java
@@ -2,7 +2,7 @@
 
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
 
 import java.util.List;
@@ -38,7 +38,7 @@
      * 鑾峰彇缁熻淇℃伅
      * @return
      */
-    ResourceBaceInfo getOverview();
+    ResourceBaseInfo getOverview();
 
     /**
      * 鏌ヨ鎵�鏈夋湭鍒嗛厤鐨勯�氶亾
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
index d977c47..e20c3bf 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
@@ -5,7 +5,7 @@
 import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
 import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
 import com.genersoft.iot.vmp.vmanager.bean.BaseTree;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 
 import java.util.List;
 
@@ -162,7 +162,7 @@
      * 鑾峰彇缁熻淇℃伅
      * @return
      */
-    ResourceBaceInfo getOverview();
+    ResourceBaseInfo getOverview();
 
     /**
      * 鑾峰彇鎵�鏈夎澶�
diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
index de9613e..0e1c97b 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
@@ -4,7 +4,7 @@
 import com.genersoft.iot.vmp.common.StreamInfo;
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import com.github.pagehelper.PageInfo;
 
 public interface IStreamProxyService {
@@ -108,6 +108,6 @@
      * 鑾峰彇缁熻淇℃伅
      * @return
      */
-    ResourceBaceInfo getOverview();
+    ResourceBaseInfo getOverview();
 
 }
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 cf6f0ed..8d92002 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
@@ -5,7 +5,7 @@
 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
 import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import com.github.pagehelper.PageInfo;
 
 import java.util.List;
@@ -113,5 +113,5 @@
      * 鑾峰彇缁熻淇℃伅
      * @return
      */
-    ResourceBaceInfo getOverview();
+    ResourceBaseInfo getOverview();
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
index 73adf2e..45405f7 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
@@ -11,7 +11,7 @@
 import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
 import com.genersoft.iot.vmp.storager.dao.DeviceMapper;
 import com.genersoft.iot.vmp.utils.DateUtil;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -175,8 +175,12 @@
     }
 
     @Override
-    public ResourceBaceInfo getOverview() {
-        return channelMapper.getOverview();
+    public ResourceBaseInfo getOverview() {
+
+        int online = channelMapper.getOnlineCount();
+        int total = channelMapper.getAllChannelCount();
+
+        return new ResourceBaseInfo(total, online);
     }
 
 
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index 1f46cc6..8dbed11 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -20,7 +20,7 @@
 import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper;
 import com.genersoft.iot.vmp.utils.DateUtil;
 import com.genersoft.iot.vmp.vmanager.bean.BaseTree;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -652,8 +652,10 @@
     }
 
     @Override
-    public ResourceBaceInfo getOverview() {
-        return deviceMapper.getOverview();
+    public ResourceBaseInfo getOverview() {
+        List<Device> onlineDevices = deviceMapper.getOnlineDevices();
+        List<Device> all = deviceMapper.getAll();
+        return new ResourceBaseInfo(all.size(), onlineDevices.size());
     }
 
     @Override
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
index 37e3b9e..0cde5fe 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
@@ -110,7 +110,7 @@
         deviceChannel.setLatitude(gbStream.getLatitude());
         deviceChannel.setDeviceId(platform.getDeviceGBId());
         deviceChannel.setManufacture("wvp-pro");
-        deviceChannel.setStatus(gbStream.isStatus()?1:0);
+        deviceChannel.setStatus(gbStream.isStatus());
 
         deviceChannel.setRegisterWay(1);
         deviceChannel.setCivilCode(platform.getAdministrativeDivision());
@@ -218,7 +218,7 @@
         }else {
             status = gbStreamMapper.selectStatusForPush(gbStream.getApp(), gbStream.getStream());
         }
-        deviceChannel.setStatus((status != null && status )?1:0);
+        deviceChannel.setStatus(status != null && status);
 
         deviceChannel.setRegisterWay(1);
         deviceChannel.setCivilCode(platform.getAdministrativeDivision());
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
index c0d0765..230ce27 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -685,7 +685,7 @@
             // 缂撳瓨涓嶅瓨鍦紝浠庢暟鎹簱鏌ヨ锛屽鏋滄暟鎹簱涓嶅瓨鍦ㄥ垯鏄敊璇殑
             mediaServerItem = getOneFromDatabase(mediaServerId);
             if (mediaServerItem == null) {
-                logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅]澶辫触锛屾湭鎵惧埌娴佸獟浣撲俊鎭�");
+                logger.warn("[鏇存柊ZLM 淇濇椿淇℃伅] 娴佸獟浣搟}灏氭湭鍔犲叆浣跨敤,璇锋鏌ヨ妭鐐逛腑鏄惁鍚湁姝ゆ祦濯掍綋 ", mediaServerId);
                 return;
             }
             // zlm杩炴帴閲嶈瘯
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
index bb99651..3037e3f 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
@@ -23,7 +23,7 @@
 import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper;
 import com.genersoft.iot.vmp.utils.DateUtil;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import com.github.pagehelper.PageInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -438,7 +438,11 @@
     }
 
     @Override
-    public ResourceBaceInfo getOverview() {
-        return streamProxyMapper.getOverview();
+    public ResourceBaseInfo getOverview() {
+
+        int total = streamProxyMapper.getAllCount();
+        int online = streamProxyMapper.getOnline();
+
+        return new ResourceBaseInfo(total, online);
     }
 }
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 6540e3e..0a03c66 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
@@ -20,7 +20,7 @@
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.storager.dao.*;
 import com.genersoft.iot.vmp.utils.DateUtil;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import org.slf4j.Logger;
@@ -531,7 +531,10 @@
     }
 
     @Override
-    public ResourceBaceInfo getOverview() {
-        return streamPushMapper.getOverview(userSetting.isUsePushingAsStatus());
+    public ResourceBaseInfo getOverview() {
+        int total = streamPushMapper.getAllCount();
+        int online = streamPushMapper.getAllOnline(userSetting.isUsePushingAsStatus());
+
+        return new ResourceBaseInfo(total, online);
     }
 }
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
index 1b21995..a127159 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
@@ -9,7 +9,6 @@
 import com.google.common.collect.BiMap;
 import com.google.common.collect.HashBiMap;
 import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
 
 import java.util.*;
 
@@ -33,38 +32,43 @@
     /**
      * 鐢ㄤ簬瀛樺偍涓嶅姞杩囨护鐨勬墍鏈夋暟鎹�
      */
-    private List<StreamPushItem> streamPushItems = new ArrayList<>();
+    private final List<StreamPushItem> streamPushItems = new ArrayList<>();
 
     /**
      * 鐢ㄤ簬瀛樺偍鏇村叿APP+Stream杩囨护鍚庣殑鏁版嵁锛屽彲浠ョ洿鎺ュ瓨鍏tream_push琛ㄤ笌gb_stream琛�
      */
-    private Map<String,StreamPushItem> streamPushItemForSave = new HashMap<>();
+    private final Map<String,StreamPushItem> streamPushItemForSave = new HashMap<>();
 
     /**
      * 鐢ㄤ簬瀛樺偍鎸夌収APP+Stream涓篕EY锛� 骞冲彴ID+鐩綍Id 涓簐alue鐨勬暟鎹紝鐢ㄤ簬瀛樺偍鍒癵b_stream琛ㄥ悗鑾峰彇app+Stream瀵瑰簲鐨勫钩鍙颁笌鐩綍淇℃伅锛岀劧鍚庡瓨鍏ュ叧鑱旇〃
      */
-    private Map<String, List<String[]>> streamPushItemsForPlatform = new HashMap<>();
+    private final Map<String, List<String[]>> streamPushItemsForPlatform = new HashMap<>();
 
     /**
      * 鐢ㄤ簬鍒ゆ柇鏂囦欢鏄惁瀛樺湪閲嶅鐨刟pp+Stream+骞冲彴ID
      */
-    private Set<String> streamPushStreamSet = new HashSet<>();
+    private final Set<String> streamPushStreamSet = new HashSet<>();
 
     /**
      * 鐢ㄤ簬瀛樺偍APP+Stream->鍥芥爣ID 鐨勬暟鎹粨鏋�, 鏁版嵁涓�涓�瀵瑰簲锛屽叏灞�鍒ゆ柇APP+Stream->鍥芥爣ID鏄惁瀛樺湪涓嶅搴�
      */
-    private BiMap<String,String> gBMap = HashBiMap.create();
+    private final BiMap<String,String> gBMap = HashBiMap.create();
+
+    /**
+     * 鐢ㄤ簬瀛樺偍APP+Stream-> 鍦ㄦ暟鎹簱涓殑鏁版嵁
+     */
+    private final BiMap<String,String> pushMapInDb = HashBiMap.create();
 
     /**
      * 璁板綍閿欒鐨凙PP+Stream
      */
-    private List<String> errorStreamList = new ArrayList<>();
+    private final List<String> errorStreamList = new ArrayList<>();
 
 
     /**
      * 璁板綍閿欒鐨勫浗鏍嘔D
      */
-    private List<String> errorGBList = new ArrayList<>();
+    private final List<String> errorInfoList = new ArrayList<>();
 
     /**
      * 璇诲彇鏁伴噺璁℃暟鍣�
@@ -75,6 +79,13 @@
         this.pushService = pushService;
         this.defaultMediaServerId = defaultMediaServerId;
         this.errorDataHandler = errorDataHandler;
+        // 鑾峰彇鏁版嵁搴撳凡鏈夌殑鏁版嵁锛屽凡缁忓瓨鍦ㄧ殑鍒欏拷鐣�
+        List<String> allAppAndStreams = pushService.getAllAppAndStream();
+        if (allAppAndStreams.size() > 0) {
+            for (String allAppAndStream : allAppAndStreams) {
+                pushMapInDb.put(allAppAndStream, allAppAndStream);
+            }
+        }
     }
 
     public interface ErrorDataHandler{
@@ -88,26 +99,30 @@
                 || ObjectUtils.isEmpty(streamPushExcelDto.getGbId())) {
             return;
         }
+        Integer rowIndex = analysisContext.readRowHolder().getRowIndex();
 
         if (gBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()) == null) {
             try {
                 gBMap.put(streamPushExcelDto.getApp() + streamPushExcelDto.getStream(), streamPushExcelDto.getGbId());
             }catch (IllegalArgumentException e) {
-                errorGBList.add(streamPushExcelDto.getGbId() + "(涓嶅悓鐨刟pp+stream浣跨敤浜嗙浉鍚岀殑鍥芥爣ID)");
+                errorInfoList.add("琛岋細" + rowIndex + ", " + streamPushExcelDto.getGbId() + " 鍥芥爣ID閲嶅浣跨敤");
                 return;
             }
         }else {
             if (!gBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()).equals(streamPushExcelDto.getGbId())) {
-                errorGBList.add(streamPushExcelDto.getGbId() + "(鍚屼竴缁刟pp+stream浣跨敤浜嗕笉鍚岀殑鍥芥爣ID)");
+                errorInfoList.add("琛岋細" + rowIndex + ", " + streamPushExcelDto.getGbId() + " 鍚屾牱鐨勫簲鐢ㄥ悕鍜屾祦ID浣跨敤浜嗕笉鍚岀殑鍥芥爣ID");
                 return;
             }
         }
 
         if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) {
-            errorStreamList.add(streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+ "/" +
-                    streamPushExcelDto.getPlatformId() + "(鍚屼竴缁刟pp+stream娣诲姞鍦ㄤ簡鍚屼竴涓钩鍙颁笅)");
+            errorStreamList.add("琛岋細" + rowIndex + ", " +  streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+  " 骞冲彴淇℃伅閲嶅");
             return;
         }else {
+            if (pushMapInDb.get(streamPushExcelDto.getApp()+streamPushExcelDto.getStream()) != null) {
+                errorStreamList.add("琛岋細" + rowIndex + ", " +  streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+  " 鏁版嵁宸插瓨鍦�");
+                return;
+            }
             streamPushStreamSet.add(streamPushExcelDto.getApp()+streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId());
         }
 
@@ -165,7 +180,7 @@
         gBMap.clear();
         streamPushStreamSet.clear();
         streamPushItemsForPlatform.clear();
-        errorDataHandler.handle(errorStreamList, errorGBList);
+        errorDataHandler.handle(errorStreamList, errorInfoList);
     }
 
     private void saveData(){
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
index 7940011..5628be9 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
@@ -3,7 +3,6 @@
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
 import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
 import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend;
 import org.apache.ibatis.annotations.*;
@@ -74,8 +73,8 @@
             "dc.device_id = #{deviceId} " +
 " <if test='query != null'> AND (dc.channel_id LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%'))</if> " +
             " <if test='parentChannelId != null'> AND (dc.parent_id=#{parentChannelId} OR dc.civil_code = #{parentChannelId}) </if> " +
-            " <if test='online == true' > AND dc.status=1</if>" +
-            " <if test='online == false' > AND dc.status=0</if>" +
+            " <if test='online == true' > AND dc.status= true</if>" +
+            " <if test='online == false' > AND dc.status= false</if>" +
             " <if test='hasSubChannel == true' >  AND dc.sub_count > 0 </if>" +
             " <if test='hasSubChannel == false' >  AND dc.sub_count = 0 </if>" +
             "<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" +
@@ -97,8 +96,8 @@
             " <if test='device_id != null'> AND dc.device_id = #{deviceId} </if> " +
             " <if test='query != null'> AND (dc.channel_id LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
             " <if test='parentChannelId != null'> AND dc.parent_id=#{parentChannelId} </if> " +
-            " <if test='online == true' > AND dc.status=1</if>" +
-            " <if test='online == false' > AND dc.status=0</if>" +
+            " <if test='online == true' > AND dc.status=true</if>" +
+            " <if test='online == false' > AND dc.status=false</if>" +
             " <if test='hasSubChannel == true' >  AND dc.sub_count > 0 </if>" +
             " <if test='hasSubChannel == false' >  AND dc.sub_count = 0 </if>" +
             "<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" +
@@ -121,8 +120,8 @@
             " <if test='deviceId != null'> AND dc.device_id = #{deviceId} </if> " +
             " <if test='query != null'> AND (dc.channel_id LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
             " <if test='parentChannelId != null'> AND dc.parent_id=#{parentChannelId} </if> " +
-            " <if test='online == true' > AND dc.status=1</if>" +
-            " <if test='online == false' > AND dc.status=0</if>" +
+            " <if test='online == true' > AND dc.status=true</if>" +
+            " <if test='online == false' > AND dc.status=false</if>" +
             " <if test='hasSubChannel == true' >  AND dc.sub_count > 0 </if>" +
             " <if test='hasSubChannel == false' >  AND dc.sub_count = 0 </if>" +
             "<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" +
@@ -165,8 +164,8 @@
             " LEFT JOIN wvp_platform_gb_channel pgc on pgc.device_channel_id = dc.id " +
             " WHERE 1=1 " +
             " <if test='query != null'> AND (dc.channel_id LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%'))</if> " +
-            " <if test='online == true' > AND dc.status=1</if> " +
-            " <if test='online == false' > AND dc.status=0</if> " +
+            " <if test='online == true' > AND dc.status=true</if> " +
+            " <if test='online == false' > AND dc.status=false</if> " +
             " <if test='hasSubChannel!= null and has_sub_channel == true' >  AND dc.sub_count > 0</if> " +
             " <if test='hasSubChannel!= null and has_sub_channel == false' >  AND dc.sub_count = 0</if> " +
             " <if test='catalogId == null ' >  AND dc.id not in (select device_channel_id from wvp_platform_gb_channel where platform_id=#{platformId} ) </if> " +
@@ -191,10 +190,10 @@
     @Select("SELECT * FROM wvp_device_channel WHERE channel_id=#{channelId}")
     List<DeviceChannel> queryChannelByChannelId( String channelId);
 
-    @Update(value = {"UPDATE wvp_device_channel SET status=0 WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
+    @Update(value = {"UPDATE wvp_device_channel SET status=false WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
     void offline(String deviceId,  String channelId);
 
-    @Update(value = {"UPDATE wvp_device_channel SET status=0 WHERE device_id=#{deviceId}"})
+    @Update(value = {"UPDATE wvp_device_channel SET status=fasle WHERE device_id=#{deviceId}"})
     void offlineByDeviceId(String deviceId);
 
     @Insert("<script> " +
@@ -271,7 +270,7 @@
             "</script>")
     int batchAddOrUpdate(List<DeviceChannel> addChannels);
 
-    @Update(value = {"UPDATE wvp_device_channel SET status=1 WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
+    @Update(value = {"UPDATE wvp_device_channel SET status=true WHERE device_id=#{deviceId} AND channel_id=#{channelId}"})
     void online(String deviceId,  String channelId);
 
     @Update({"<script>" +
@@ -283,7 +282,7 @@
             "<if test='item.manufacture != null'>, manufacture=#{item.manufacture}</if>" +
             "<if test='item.model != null'>, model=#{item.model}</if>" +
             "<if test='item.owner != null'>, owner=#{item.owner}</if>" +
-            "<if test='item.civil_code != null'>, civil_code=#{item.civilCode}</if>" +
+            "<if test='item.civilCode != null'>, civil_code=#{item.civilCode}</if>" +
             "<if test='item.block != null'>, block=#{item.block}</if>" +
             "<if test='item.subCount != null'>, sub_count=#{item.subCount}</if>" +
             "<if test='item.address != null'>, address=#{item.address}</if>" +
@@ -317,7 +316,7 @@
     int batchUpdate(List<DeviceChannel> updateChannels);
 
 
-    @Select("SELECT * FROM wvp_device_channel WHERE device_id=#{deviceId} AND status=1")
+    @Select("SELECT * FROM wvp_device_channel WHERE device_id=#{deviceId} AND status=true")
     List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId);
 
     @Delete(value = {" <script>" +
@@ -406,9 +405,6 @@
     List<DeviceChannel> queryAllChannels(String deviceId);
 
 
-    @Select("select count(1) as total, sum(status) as online from wvp_device_channel")
-    ResourceBaceInfo getOverview();
-
     @Select("select channelId" +
             ", device_id" +
             ", latitude" +
@@ -420,7 +416,7 @@
             "from wvp_device_channel where device_id = #{deviceId} " +
             "and latitude != 0 " +
             "and  longitude != 0 " +
-            "and(latitude_gcj02=0orlatitude_wgs84=0orlongitude_wgs84= 0 or longitude_gcj02 = 0)")
+            "and(latitude_gcj02=0 or latitude_wgs84=0 or longitude_wgs84= 0 or longitude_gcj02 = 0)")
     List<DeviceChannel> getChannelsWithoutTransform(String deviceId);
 
     @Select("select de.* from wvp_device de left join wvp_device_channel dc on de.device_id = dc.deviceId where dc.channel_id=#{channelId}")
@@ -436,15 +432,22 @@
 
     @Update({"<script>" +
             "<foreach collection='channels' item='item' separator=';'>" +
-            "UPDATE wvp_device_channel SET status=1 WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" +
+            "UPDATE wvp_device_channel SET status=true WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" +
             "</foreach>" +
             "</script>"})
     int batchOnline(List<DeviceChannel> channels);
 
     @Update({"<script>" +
             "<foreach collection='channels' item='item' separator=';'>" +
-            "UPDATE wvp_device_channel SET status=0 WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" +
+            "UPDATE wvp_device_channel SET status= false WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" +
             "</foreach>" +
             "</script>"})
     int batchOffline(List<DeviceChannel> channels);
+
+
+    @Select("select count(1) from wvp_device_channel where status = true")
+    int getOnlineCount();
+
+    @Select("select count(1) from wvp_device_channel")
+    int getAllChannelCount();
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
index ebf2933..7546545 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
@@ -1,7 +1,6 @@
 package com.genersoft.iot.vmp.storager.dao;
 
 import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 
@@ -162,8 +161,10 @@
             "tree_type,"+
             "online,"+
             "media_server_id,"+
-            "(SELECT count(0) FROM wvp_device_channel WHERE device_id=de.device_id) as channel_count  FROM wvp_device de" +
+            "(SELECT count(0) FROM wvp_device_channel WHERE device_id=de.device_id) as channel_count " +
+            "FROM wvp_device de" +
             "<if test=\"online != null\"> where online=${online}</if>"+
+            " order by create_time desc "+
             " </script>"
     )
     List<Device> getDevices(Boolean online);
@@ -287,9 +288,6 @@
             "#{mediaServerId}" +
             ")")
     void addCustomDevice(Device device);
-
-    @Select("select count(1) as total, sum(online) as online FROM wvp_device")
-    ResourceBaceInfo getOverview();
 
     @Select("select * FROM wvp_device")
     List<Device> getAll();
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 5f8702c..e313ace 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
@@ -117,7 +117,7 @@
     void batchDelForGbStream(List<GbStream> gbStreams);
 
     @Insert("<script> " +
-            "INSERT IGNORE into wvp_gb_stream " +
+            "INSERT into wvp_gb_stream " +
             "(app, stream, gb_id, name, " +
             "longitude, latitude, stream_type,media_server_id,create_time)" +
             "values " +
@@ -127,7 +127,7 @@
             "#{item.mediaServerId}, #{item.createTime}) "+
             "</foreach> " +
             "</script>")
-    @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gbStreamId")
+    @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gb_stream_id")
     void batchAdd(List<StreamPushItem> subList);
 
     @Update({"<script>" +
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java
index ec6d870..3a1a69e 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java
@@ -1,7 +1,7 @@
 package com.genersoft.iot.vmp.storager.dao;
 
 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 
@@ -78,5 +78,12 @@
     List<StreamProxyItem> selectAutoRemoveItemByMediaServerId(String mediaServerId);
 
     @Select("select count(1) as total, sum(status) as online from wvp_stream_proxy")
-    ResourceBaceInfo getOverview();
+    ResourceBaseInfo getOverview();
+
+    @Select("select count(1) from wvp_stream_proxy")
+
+    int getAllCount();
+
+    @Select("select count(1) from wvp_stream_proxy where status = true")
+    int getOnline();
 }
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 fefdab3..63fea06 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
@@ -3,7 +3,6 @@
 import com.genersoft.iot.vmp.gb28181.bean.GbStream;
 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
 import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 
@@ -89,7 +88,7 @@
     StreamPushItem selectOne(String app, String stream);
 
     @Insert("<script>"  +
-            "Insert IGNORE INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " +
+            "Insert INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " +
             "create_time, alive_second, media_server_id, status, push_ing) " +
             "VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" +
             "( #{item.app}, #{item.stream}, #{item.totalReaderCount}, #{item.originType}, " +
@@ -171,9 +170,20 @@
     @Select("SELECT CONCAT(app,stream) from wvp_gb_stream")
     List<String> getAllAppAndStream();
 
+    @Select("select count(1) from wvp_stream_push ")
+    int getAllCount();
+
     @Select(value = {" <script>" +
-            " <if test='pushIngAsOnline == true'> select count(1) as total, sum(push_ing) as online from wvp_stream_push </if>" +
-            " <if test='pushIngAsOnline == false'> select count(1) as total, sum(status) as online from wvp_stream_push </if>" +
+            " <if test='pushIngAsOnline == true'> select count(1) from wvp_stream_push where push_ing = true </if>" +
+            " <if test='pushIngAsOnline == false'> select count(1)from wvp_stream_push where status = true  </if>" +
             " </script>"})
-    ResourceBaceInfo getOverview(boolean pushIngAsOnline);
+    int getAllOnline(Boolean usePushingAsStatus);
+
+    @Select("<script> " +
+            "select app, stream from wvp_stream_push where (app, stream) in " +
+            "<foreach collection='streamPushItems' item='item' separator=','>" +
+            "(#{item.app}, #{item.stream}) " +
+            "</foreach>" +
+            "</script>")
+    List<StreamPushItem> getListIn(List<StreamPushItem> streamPushItems);
 }
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 cee613d..f73339d 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
@@ -123,6 +123,9 @@
 		TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
 		// 鏁版嵁鍘婚噸
 		List<DeviceChannel> channels = new ArrayList<>();
+
+		List<DeviceChannel> updateChannels = new ArrayList<>();
+		List<DeviceChannel> addChannels = new ArrayList<>();
 		StringBuilder stringBuilder = new StringBuilder();
 		Map<String, Integer> subContMap = new HashMap<>();
 		if (deviceChannelList.size() > 0) {
@@ -131,18 +134,22 @@
 			for (DeviceChannel deviceChannel : deviceChannelList) {
 				if (!gbIdSet.contains(deviceChannel.getChannelId())) {
 					gbIdSet.add(deviceChannel.getChannelId());
+					deviceChannel.setUpdateTime(DateUtil.getNow());
 					if (allChannelMap.containsKey(deviceChannel.getChannelId())) {
 						deviceChannel.setStreamId(allChannelMap.get(deviceChannel.getChannelId()).getStreamId());
 						deviceChannel.setHasAudio(allChannelMap.get(deviceChannel.getChannelId()).isHasAudio());
-						if (allChannelMap.get(deviceChannel.getChannelId()).getStatus() !=deviceChannel.getStatus()){
+						if (allChannelMap.get(deviceChannel.getChannelId()).isStatus() !=deviceChannel.isStatus()){
 							List<String> strings = platformChannelMapper.queryParentPlatformByChannelId(deviceChannel.getChannelId());
 							if (!CollectionUtils.isEmpty(strings)){
 								strings.forEach(platformId->{
-									eventPublisher.catalogEventPublish(platformId, deviceChannel, deviceChannel.getStatus()==1?CatalogEvent.ON:CatalogEvent.OFF);
+									eventPublisher.catalogEventPublish(platformId, deviceChannel, deviceChannel.isStatus()?CatalogEvent.ON:CatalogEvent.OFF);
 								});
 							}
-
 						}
+						updateChannels.add(deviceChannel);
+					}else {
+						deviceChannel.setCreateTime(DateUtil.getNow());
+						addChannels.add(deviceChannel);
 					}
 					channels.add(deviceChannel);
 					if (!ObjectUtils.isEmpty(deviceChannel.getParentId())) {
@@ -175,21 +182,36 @@
 		}
 		try {
 			int cleanChannelsResult = deviceChannelMapper.cleanChannelsNotInList(deviceId, channels);
+
 			int limitCount = 300;
 			boolean result = cleanChannelsResult < 0;
-			if (!result && channels.size() > 0) {
-				if (channels.size() > limitCount) {
-					for (int i = 0; i < channels.size(); i += limitCount) {
+			if (!result && addChannels.size() > 0) {
+				if (addChannels.size() > limitCount) {
+					for (int i = 0; i < addChannels.size(); i += limitCount) {
 						int toIndex = i + limitCount;
-						if (i + limitCount > channels.size()) {
-							toIndex = channels.size();
+						if (i + limitCount > addChannels.size()) {
+							toIndex = addChannels.size();
 						}
-						result = result || deviceChannelMapper.batchAddOrUpdate(channels.subList(i, toIndex)) < 0;
+						result = result || deviceChannelMapper.batchAdd(addChannels.subList(i, toIndex)) < 0;
 					}
 				}else {
-					result = result || deviceChannelMapper.batchAddOrUpdate(channels) < 0;
+					result = result || deviceChannelMapper.batchAdd(addChannels) < 0;
 				}
 			}
+			if (!result && updateChannels.size() > 0) {
+				if (updateChannels.size() > limitCount) {
+					for (int i = 0; i < updateChannels.size(); i += limitCount) {
+						int toIndex = i + limitCount;
+						if (i + limitCount > updateChannels.size()) {
+							toIndex = updateChannels.size();
+						}
+						result = result || deviceChannelMapper.batchUpdate(updateChannels.subList(i, toIndex)) < 0;
+					}
+				}else {
+					result = result || deviceChannelMapper.batchUpdate(updateChannels) < 0;
+				}
+			}
+
 			if (result) {
 				//浜嬪姟鍥炴粴
 				dataSourceTransactionManager.rollback(transactionStatus);
@@ -919,7 +941,7 @@
 		deviceChannel.setLatitude(0.0);
 		deviceChannel.setDeviceId(platform.getDeviceGBId());
 		deviceChannel.setManufacture("wvp-pro");
-		deviceChannel.setStatus(1);
+		deviceChannel.setStatus(true);
 		deviceChannel.setParental(1);
 
 		deviceChannel.setRegisterWay(1);
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaseInfo.java
similarity index 65%
rename from src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java
rename to src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaseInfo.java
index b50d97a..dab9b0a 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaseInfo.java
@@ -1,9 +1,17 @@
 package com.genersoft.iot.vmp.vmanager.bean;
 
-public class ResourceBaceInfo {
+public class ResourceBaseInfo {
     private int total;
     private int online;
 
+    public ResourceBaseInfo() {
+    }
+
+    public ResourceBaseInfo(int total, int online) {
+        this.total = total;
+        this.online = online;
+    }
+
     public int getTotal() {
         return total;
     }
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java
index b8d7009..3b0ee0d 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java
@@ -2,40 +2,40 @@
 
 public class ResourceInfo {
 
-    private ResourceBaceInfo device;
-    private ResourceBaceInfo channel;
-    private ResourceBaceInfo push;
-    private ResourceBaceInfo proxy;
+    private ResourceBaseInfo device;
+    private ResourceBaseInfo channel;
+    private ResourceBaseInfo push;
+    private ResourceBaseInfo proxy;
 
-    public ResourceBaceInfo getDevice() {
+    public ResourceBaseInfo getDevice() {
         return device;
     }
 
-    public void setDevice(ResourceBaceInfo device) {
+    public void setDevice(ResourceBaseInfo device) {
         this.device = device;
     }
 
-    public ResourceBaceInfo getChannel() {
+    public ResourceBaseInfo getChannel() {
         return channel;
     }
 
-    public void setChannel(ResourceBaceInfo channel) {
+    public void setChannel(ResourceBaseInfo channel) {
         this.channel = channel;
     }
 
-    public ResourceBaceInfo getPush() {
+    public ResourceBaseInfo getPush() {
         return push;
     }
 
-    public void setPush(ResourceBaceInfo push) {
+    public void setPush(ResourceBaseInfo push) {
         this.push = push;
     }
 
-    public ResourceBaceInfo getProxy() {
+    public ResourceBaseInfo getProxy() {
         return proxy;
     }
 
-    public void setProxy(ResourceBaceInfo proxy) {
+    public void setProxy(ResourceBaseInfo proxy) {
         this.proxy = proxy;
     }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
index 88126ac..bef7ffb 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
@@ -15,7 +15,7 @@
 import com.genersoft.iot.vmp.service.bean.MediaServerLoad;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
-import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
 import com.genersoft.iot.vmp.vmanager.bean.ResourceInfo;
 import com.genersoft.iot.vmp.vmanager.bean.SystemConfigInfo;
 import io.swagger.v3.oas.annotations.Operation;
@@ -251,13 +251,13 @@
     @Operation(summary = "鑾峰彇璐熻浇淇℃伅")
     public ResourceInfo getResourceInfo() {
         ResourceInfo result = new ResourceInfo();
-        ResourceBaceInfo deviceInfo = deviceService.getOverview();
+        ResourceBaseInfo deviceInfo = deviceService.getOverview();
         result.setDevice(deviceInfo);
-        ResourceBaceInfo channelInfo = channelService.getOverview();
+        ResourceBaseInfo channelInfo = channelService.getOverview();
         result.setChannel(channelInfo);
-        ResourceBaceInfo pushInfo = pushService.getOverview();
+        ResourceBaseInfo pushInfo = pushService.getOverview();
         result.setPush(pushInfo);
-        ResourceBaceInfo proxyInfo = proxyService.getOverview();
+        ResourceBaseInfo proxyInfo = proxyService.getOverview();
         result.setProxy(proxyInfo);
 
         return result;
diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
index 90dd686..6688503 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java
@@ -113,7 +113,7 @@
             result.put("error","channel[ " + code + " ]鏈壘鍒�");
             resultDeferredResult.setResult(result);
             return resultDeferredResult;
-        }else if (deviceChannel.getStatus() == 0) {
+        }else if (!deviceChannel.isStatus()) {
             JSONObject result = new JSONObject();
             result.put("error","channel[ " + code + " ]offline");
             resultDeferredResult.setResult(result);

--
Gitblit v1.8.0