异步通道刷新,优化ui效果
This commit is contained in:
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
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.Api;
|
||||
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 @@ public class DeviceQuery {
|
||||
@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调用,deviceId:" + 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 class DeviceQuery {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user