调整目录查询的结果展示逻辑

dev/多线程性能优化
648540858 2024-11-27 11:04:26 +08:00
parent f625fb6aed
commit e9a53b766e
5 changed files with 43 additions and 19 deletions

View File

@ -3,6 +3,8 @@ package com.genersoft.iot.vmp.gb28181.bean;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.time.Instant;
/** /**
* *
* @author lin * @author lin
@ -23,4 +25,7 @@ public class SyncStatus {
@Schema(description = "是否同步中") @Schema(description = "是否同步中")
private Boolean syncIng; private Boolean syncIng;
@Schema(description = "时间")
private Instant time;
} }

View File

@ -144,9 +144,21 @@ public class DeviceQuery {
Device device = deviceService.getDeviceByDeviceId(deviceId); Device device = deviceService.getDeviceByDeviceId(deviceId);
boolean status = deviceService.isSyncRunning(deviceId); boolean status = deviceService.isSyncRunning(deviceId);
// 已存在则返回进度 // 已存在则返回进度
if (status) { if (deviceService.isSyncRunning(deviceId)) {
SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId); SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId);
return WVPResult.success(channelSyncStatus); WVPResult wvpResult = new WVPResult();
if (channelSyncStatus.getErrorMsg() != null) {
wvpResult.setCode(ErrorCode.ERROR100.getCode());
wvpResult.setMsg(channelSyncStatus.getErrorMsg());
}else if (channelSyncStatus.getTotal() == null || channelSyncStatus.getTotal() == 0){
wvpResult.setCode(ErrorCode.SUCCESS.getCode());
wvpResult.setMsg("等待通道信息...");
}else {
wvpResult.setCode(ErrorCode.SUCCESS.getCode());
wvpResult.setMsg(ErrorCode.SUCCESS.getMsg());
wvpResult.setData(channelSyncStatus);
}
return wvpResult;
} }
deviceService.sync(device); deviceService.sync(device);
@ -413,18 +425,19 @@ public class DeviceQuery {
public WVPResult<SyncStatus> getSyncStatus(@PathVariable String deviceId) { public WVPResult<SyncStatus> getSyncStatus(@PathVariable String deviceId) {
SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId); SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId);
WVPResult<SyncStatus> wvpResult = new WVPResult<>(); WVPResult<SyncStatus> wvpResult = new WVPResult<>();
if (channelSyncStatus == null || channelSyncStatus.getTotal() == null) { if (channelSyncStatus == null) {
wvpResult.setCode(0); wvpResult.setCode(ErrorCode.ERROR100.getCode());
wvpResult.setMsg("同步尚未开始"); wvpResult.setMsg("同步不存在");
}else if (channelSyncStatus.getErrorMsg() != null) {
wvpResult.setCode(ErrorCode.ERROR100.getCode());
wvpResult.setMsg(channelSyncStatus.getErrorMsg());
}else if (channelSyncStatus.getTotal() == null || channelSyncStatus.getTotal() == 0){
wvpResult.setCode(ErrorCode.SUCCESS.getCode());
wvpResult.setMsg("等待通道信息...");
}else { }else {
if (channelSyncStatus.getErrorMsg() == null) { wvpResult.setCode(ErrorCode.SUCCESS.getCode());
wvpResult.setCode(ErrorCode.SUCCESS.getCode()); wvpResult.setMsg(ErrorCode.SUCCESS.getMsg());
wvpResult.setMsg(ErrorCode.SUCCESS.getMsg()); wvpResult.setData(channelSyncStatus);
wvpResult.setData(channelSyncStatus);
}else {
wvpResult.setCode(ErrorCode.ERROR100.getCode());
wvpResult.setMsg(channelSyncStatus.getErrorMsg());
}
} }
return wvpResult; return wvpResult;
} }

View File

@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.gb28181.service.impl; package com.genersoft.iot.vmp.gb28181.service.impl;
import com.alibaba.fastjson2.JSON;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.genersoft.iot.vmp.common.CommonCallback; import com.genersoft.iot.vmp.common.CommonCallback;
import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.common.VideoManagerConstants;
@ -322,7 +323,8 @@ public class DeviceServiceImpl implements IDeviceService {
@Override @Override
public void sync(Device device) { public void sync(Device device) {
if (catalogResponseMessageHandler.isSyncRunning(device.getDeviceId())) { if (catalogResponseMessageHandler.isSyncRunning(device.getDeviceId())) {
log.info("开启同步时发现同步已经存在"); SyncStatus syncStatus = catalogResponseMessageHandler.getChannelSyncProgress(device.getDeviceId());
log.info("[同步通道] 同步已存在, 设备: {}, 同步信息: {}", device.getDeviceId(), JSON.toJSON(syncStatus));
return; return;
} }
int sn = (int)((Math.random()*9+1)*100000); int sn = (int)((Math.random()*9+1)*100000);

View File

@ -170,11 +170,16 @@ public class CatalogDataManager implements CommandLineRunner {
syncStatus.setCurrent(catalogData.getRedisKeysForChannel().size()); syncStatus.setCurrent(catalogData.getRedisKeysForChannel().size());
syncStatus.setTotal(catalogData.getTotal()); syncStatus.setTotal(catalogData.getTotal());
syncStatus.setErrorMsg(catalogData.getErrorMsg()); syncStatus.setErrorMsg(catalogData.getErrorMsg());
syncStatus.setTime(catalogData.getTime());
if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.ready) || catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end)) { if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.ready) || catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end)) {
syncStatus.setSyncIng(false); syncStatus.setSyncIng(false);
}else { }else {
syncStatus.setSyncIng(true); syncStatus.setSyncIng(true);
} }
if (catalogData.getErrorMsg() != null) {
// 失败的同步信息,返回一次后直接移除
dataMap.remove(key);
}
return syncStatus; return syncStatus;
} }
} }
@ -237,7 +242,8 @@ public class CatalogDataManager implements CommandLineRunner {
catalogData.setErrorMsg(errorMsg); catalogData.setErrorMsg(errorMsg);
} }
} }
if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end) && catalogData.getTime().isBefore(instantBefore30S)) { // 超过三十秒如果标记为end则删除 if ((catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end) || catalogData.getStatus().equals(CatalogData.CatalogDataStatus.ready))
&& catalogData.getTime().isBefore(instantBefore30S)) { // 超过三十秒如果标记为end则删除
dataMap.remove(dataKey); dataMap.remove(dataKey);
Set<String> redisKeysForChannel = catalogData.getRedisKeysForChannel(); Set<String> redisKeysForChannel = catalogData.getRedisKeysForChannel();
if (redisKeysForChannel != null && !redisKeysForChannel.isEmpty()) { if (redisKeysForChannel != null && !redisKeysForChannel.isEmpty()) {

View File

@ -60,9 +60,6 @@ export default {
url:`/api/device/query/${this.deviceId}/sync_status/`, url:`/api/device/query/${this.deviceId}/sync_status/`,
}).then((res) => { }).then((res) => {
if (res.data.code === 0) { if (res.data.code === 0) {
if (!this.syncFlag) {
this.syncFlag = true;
}
if (res.data.data != null) { if (res.data.data != null) {
if (res.data.data.syncIng) { if (res.data.data.syncIng) {
@ -70,6 +67,7 @@ export default {
this.msg = `等待同步中`; this.msg = `等待同步中`;
this.timmer = setTimeout(this.getProgress, 300) this.timmer = setTimeout(this.getProgress, 300)
}else { }else {
this.syncFlag = true;
this.total = res.data.data.total; this.total = res.data.data.total;
this.current = res.data.data.current; this.current = res.data.data.current;
this.percentage = Math.floor(Number(res.data.data.current)/Number(res.data.data.total)* 10000)/100; this.percentage = Math.floor(Number(res.data.data.current)/Number(res.data.data.total)* 10000)/100;
@ -90,7 +88,7 @@ export default {
} }
} }
}else { }else {
this.msg = `同步尚未开始`; this.msg = res.data.msg;
this.timmer = setTimeout(this.getProgress, 300) this.timmer = setTimeout(this.getProgress, 300)
} }
}else { }else {