From 3955e6ed53d450f8faf488d4b74ba0c0c83c5aaa Mon Sep 17 00:00:00 2001 From: 648540858 <456panlinlin> Date: 星期二, 12 四月 2022 21:06:21 +0800 Subject: [PATCH] 异步通道刷新,优化ui效果 --- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 75 +++++++++++++++++++------------------ 1 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java index 6413396..1b6d31e 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.conf.DynamicTask; 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.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; @@ -18,6 +19,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; +import org.kxml2.wap.wv.WV; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -149,49 +151,30 @@ @ApiImplicitParam(name="deviceId", value = "璁惧id", required = true, dataTypeClass = String.class), }) @PostMapping("/devices/{deviceId}/sync") - public DeferredResult<ResponseEntity<Device>> devicesSync(@PathVariable String deviceId){ + public WVPResult<SyncStatus> devicesSync(@PathVariable String deviceId){ if (logger.isDebugEnabled()) { logger.debug("璁惧閫氶亾淇℃伅鍚屾API璋冪敤锛宒eviceId锛�" + deviceId); } Device device = storager.queryVideoDevice(deviceId); - String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId; - String uuid = UUID.randomUUID().toString(); - // 榛樿瓒呮椂鏃堕棿涓�30鍒嗛挓 - DeferredResult<ResponseEntity<Device>> result = new DeferredResult<ResponseEntity<Device>>(30*60*1000L); - result.onTimeout(()->{ - logger.warn("璁惧[{}]閫氶亾淇℃伅鍚屾瓒呮椂", deviceId); - // 閲婃斁rtpserver - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setId(uuid); - WVPResult<Object> wvpResult = new WVPResult<>(); - wvpResult.setCode(-1); - wvpResult.setData(device); - wvpResult.setMsg("鏇存柊瓒呮椂"); - msg.setData(wvpResult); - resultHolder.invokeAllResult(msg); - - }); - // 绛夊緟鍏朵粬鐩稿悓璇锋眰杩斿洖鏃朵竴璧疯繑鍥� - if (resultHolder.exist(key, null)) { - resultHolder.put(key, uuid, result); - return result; - }else { - cmder.catalogQuery(device, event -> { - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setId(uuid); - WVPResult<Object> wvpResult = new WVPResult<>(); - wvpResult.setCode(-1); - wvpResult.setData(device); - wvpResult.setMsg(String.format("鍚屾閫氶亾澶辫触锛岄敊璇爜锛� %s, %s", event.statusCode, event.msg)); - msg.setData(wvpResult); - resultHolder.invokeAllResult(msg); - }); - resultHolder.put(key, uuid, result); - return result; + SyncStatus syncStatus = deviceService.getChannelSyncStatus(deviceId); + // 宸插瓨鍦ㄥ垯杩斿洖杩涘害 + if (syncStatus != null && syncStatus.getErrorMsg() == null) { + WVPResult<SyncStatus> wvpResult = new WVPResult<>(); + wvpResult.setCode(0); + wvpResult.setData(syncStatus); + return wvpResult; } + SyncStatus syncStatusReady = new SyncStatus(); + deviceService.setChannelSyncReady(deviceId); + cmder.catalogQuery(device, event -> { + String errorMsg = String.format("鍚屾閫氶亾澶辫触锛岄敊璇爜锛� %s, %s", event.statusCode, event.msg); + deviceService.setChannelSyncEnd(deviceId, errorMsg); + }); + WVPResult<SyncStatus> wvpResult = new WVPResult<>(); + wvpResult.setCode(0); + wvpResult.setMsg("寮�濮嬪悓姝�"); + return wvpResult; } /** @@ -468,4 +451,22 @@ public WVPResult<List<DeviceChannelTree>> tree(@PathVariable String deviceId) { return WVPResult.Data(storager.tree(deviceId)); } + + @GetMapping("/{deviceId}/sync_status") + @ApiOperation(value = "鑾峰彇閫氶亾鍚屾杩涘害", notes = "鑾峰彇閫氶亾鍚屾杩涘害") + public WVPResult<SyncStatus> getSyncStatus(@PathVariable String deviceId) { + SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId); + WVPResult<SyncStatus> wvpResult = new WVPResult<>(); + if (channelSyncStatus == null) { + wvpResult.setCode(-1); + wvpResult.setMsg("鍚屾灏氭湭寮�濮�"); + }else { + wvpResult.setCode(0); + wvpResult.setData(channelSyncStatus); + if (channelSyncStatus.getErrorMsg() != null) { + wvpResult.setMsg(channelSyncStatus.getErrorMsg()); + } + } + return wvpResult; + } } -- Gitblit v1.8.0