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