From 40a806329ce08d5f50795cf965ef773aa48fdd3e Mon Sep 17 00:00:00 2001
From: 648540858 <456panlinlin>
Date: 星期五, 15 四月 2022 09:37:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/wvp-28181-2.0' into map

---
 src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java |   72 ++++++++++++++++++++++++++++-------
 1 files changed, 57 insertions(+), 15 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
index 8a3bc84..fbc2a32 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
@@ -3,6 +3,7 @@
 import com.genersoft.iot.vmp.gb28181.bean.CatalogData;
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
 import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
 import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
@@ -25,6 +26,17 @@
     @Autowired
     private IVideoManagerStorage storager;
 
+    public void addReady(String key) {
+        CatalogData catalogData = data.get(key);
+        if (catalogData == null || catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end)) {
+            catalogData = new CatalogData();
+            catalogData.setChannelList(new ArrayList<>());
+            catalogData.setStatus(CatalogData.CatalogDataStatus.ready);
+            catalogData.setLastTime(new Date(System.currentTimeMillis()));
+            data.put(key, catalogData);
+        }
+    }
+
     public void put(String key, int total, Device device, List<DeviceChannel> deviceChannelList) {
         CatalogData catalogData = data.get(key);
         if (catalogData == null) {
@@ -32,16 +44,38 @@
             catalogData.setTotal(total);
             catalogData.setDevice(device);
             catalogData.setChannelList(new ArrayList<>());
+            catalogData.setStatus(CatalogData.CatalogDataStatus.runIng);
+            catalogData.setLastTime(new Date(System.currentTimeMillis()));
             data.put(key, catalogData);
+        }else {
+            catalogData.setTotal(total);
+            catalogData.setDevice(device);
+            catalogData.setStatus(CatalogData.CatalogDataStatus.runIng);
+            catalogData.getChannelList().addAll(deviceChannelList);
+            catalogData.setLastTime(new Date(System.currentTimeMillis()));
         }
-        catalogData.getChannelList().addAll(deviceChannelList);
-        catalogData.setLastTime(new Date(System.currentTimeMillis()));
     }
 
     public List<DeviceChannel> get(String key) {
         CatalogData catalogData = data.get(key);
         if (catalogData == null) return null;
         return catalogData.getChannelList();
+    }
+
+    public int getTotal(String key) {
+        CatalogData catalogData = data.get(key);
+        if (catalogData == null) return 0;
+        return catalogData.getTotal();
+    }
+
+    public SyncStatus getSyncStatus(String key) {
+        CatalogData catalogData = data.get(key);
+        if (catalogData == null) return null;
+        SyncStatus syncStatus = new SyncStatus();
+        syncStatus.setCurrent(catalogData.getChannelList().size());
+        syncStatus.setTotal(catalogData.getTotal());
+        syncStatus.setErrorMsg(catalogData.getErrorMsg());
+        return syncStatus;
     }
 
     public void del(String key) {
@@ -51,24 +85,32 @@
     @Scheduled(fixedRate = 5 * 1000)   //姣�5绉掓墽琛屼竴娆�, 鍙戠幇鏁版嵁5绉掓湭鏇存柊鍒欑Щ闄ゆ暟鎹苟璁や负鏁版嵁鎺ユ敹瓒呮椂
     private void timerTask(){
         Set<String> keys = data.keySet();
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(new Date());
-        calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - 5);
+        Calendar calendarBefore5S = Calendar.getInstance();
+        calendarBefore5S.setTime(new Date());
+        calendarBefore5S.set(Calendar.SECOND, calendarBefore5S.get(Calendar.SECOND) - 5);
+
+        Calendar calendarBefore30S = Calendar.getInstance();
+        calendarBefore30S.setTime(new Date());
+        calendarBefore30S.set(Calendar.SECOND, calendarBefore30S.get(Calendar.SECOND) - 30);
         for (String key : keys) {
             CatalogData catalogData = data.get(key);
-            if (catalogData.getLastTime().before(calendar.getTime())) {
-
+            if (catalogData.getLastTime().before(calendarBefore5S.getTime())) { // 瓒呰繃浜旂鏀朵笉鍒版秷鎭换鍔¤秴鏃讹紝 鍙洿鏂拌繖涓�閮ㄥ垎鏁版嵁
                 storager.resetChannels(catalogData.getDevice().getDeviceId(), catalogData.getChannelList());
-                RequestMessage msg = new RequestMessage();
-                msg.setKey(key);
-                WVPResult<Object> result = new WVPResult<>();
-                result.setCode(0);
-                result.setMsg("鏇存柊鎴愬姛锛屽叡" + catalogData.getTotal() + "鏉★紝宸叉洿鏂�" + catalogData.getChannelList().size() + "鏉�");
-                result.setData(catalogData.getDevice());
-                msg.setData(result);
-                deferredResultHolder.invokeAllResult(msg);
+                String errorMsg = "鏇存柊鎴愬姛锛屽叡" + catalogData.getTotal() + "鏉★紝宸叉洿鏂�" + catalogData.getChannelList().size() + "鏉�";
+                catalogData.setStatus(CatalogData.CatalogDataStatus.end);
+                catalogData.setErrorMsg(errorMsg);
+            }
+            if (catalogData.getLastTime().before(calendarBefore30S.getTime())) { // 瓒呰繃涓夊崄绉掞紝濡傛灉鏍囪涓篹nd鍒欏垹闄�
                 data.remove(key);
             }
         }
     }
+
+
+    public void setChannelSyncEnd(String key, String errorMsg) {
+        CatalogData catalogData = data.get(key);
+        if (catalogData == null)return;
+        catalogData.setStatus(CatalogData.CatalogDataStatus.end);
+        catalogData.setErrorMsg(errorMsg);
+    }
 }

--
Gitblit v1.8.0