|
|
@@ -26,28 +26,35 @@ public class CatalogDataCatch {
|
|
|
@Autowired
|
|
|
private IVideoManagerStorage storager;
|
|
|
|
|
|
- public void addReady(String key) {
|
|
|
- CatalogData catalogData = data.get(key);
|
|
|
+ public void addReady(Device device, int sn ) {
|
|
|
+ CatalogData catalogData = data.get(device.getDeviceId());
|
|
|
if (catalogData == null || catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end)) {
|
|
|
catalogData = new CatalogData();
|
|
|
catalogData.setChannelList(new ArrayList<>());
|
|
|
+ catalogData.setDevice(device);
|
|
|
+ catalogData.setSn(sn);
|
|
|
catalogData.setStatus(CatalogData.CatalogDataStatus.ready);
|
|
|
catalogData.setLastTime(new Date(System.currentTimeMillis()));
|
|
|
- data.put(key, catalogData);
|
|
|
+ data.put(device.getDeviceId(), catalogData);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void put(String key, int total, Device device, List<DeviceChannel> deviceChannelList) {
|
|
|
- CatalogData catalogData = data.get(key);
|
|
|
+ public void put(String deviceId, int sn, int total, Device device, List<DeviceChannel> deviceChannelList) {
|
|
|
+ CatalogData catalogData = data.get(deviceId);
|
|
|
if (catalogData == null) {
|
|
|
catalogData = new CatalogData();
|
|
|
+ catalogData.setSn(sn);
|
|
|
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);
|
|
|
+ data.put(deviceId, catalogData);
|
|
|
}else {
|
|
|
+ // 同一个设备的通道同步请求只考虑一个,其他的直接忽略
|
|
|
+ if (catalogData.getSn() != sn) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
catalogData.setTotal(total);
|
|
|
catalogData.setDevice(device);
|
|
|
catalogData.setStatus(CatalogData.CatalogDataStatus.runIng);
|
|
|
@@ -56,20 +63,20 @@ public class CatalogDataCatch {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public List<DeviceChannel> get(String key) {
|
|
|
- CatalogData catalogData = data.get(key);
|
|
|
+ public List<DeviceChannel> get(String deviceId) {
|
|
|
+ CatalogData catalogData = data.get(deviceId);
|
|
|
if (catalogData == null) return null;
|
|
|
return catalogData.getChannelList();
|
|
|
}
|
|
|
|
|
|
- public int getTotal(String key) {
|
|
|
- CatalogData catalogData = data.get(key);
|
|
|
+ public int getTotal(String deviceId) {
|
|
|
+ CatalogData catalogData = data.get(deviceId);
|
|
|
if (catalogData == null) return 0;
|
|
|
return catalogData.getTotal();
|
|
|
}
|
|
|
|
|
|
- public SyncStatus getSyncStatus(String key) {
|
|
|
- CatalogData catalogData = data.get(key);
|
|
|
+ public SyncStatus getSyncStatus(String deviceId) {
|
|
|
+ CatalogData catalogData = data.get(deviceId);
|
|
|
if (catalogData == null) return null;
|
|
|
SyncStatus syncStatus = new SyncStatus();
|
|
|
syncStatus.setCurrent(catalogData.getChannelList().size());
|
|
|
@@ -78,10 +85,6 @@ public class CatalogDataCatch {
|
|
|
return syncStatus;
|
|
|
}
|
|
|
|
|
|
- public void del(String key) {
|
|
|
- data.remove(key);
|
|
|
- }
|
|
|
-
|
|
|
@Scheduled(fixedRate = 5 * 1000) //每5秒执行一次, 发现数据5秒未更新则移除数据并认为数据接收超时
|
|
|
private void timerTask(){
|
|
|
Set<String> keys = data.keySet();
|
|
|
@@ -92,23 +95,30 @@ public class CatalogDataCatch {
|
|
|
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(calendarBefore5S.getTime())) { // 超过五秒收不到消息任务超时, 只更新这一部分数据
|
|
|
- storager.resetChannels(catalogData.getDevice().getDeviceId(), catalogData.getChannelList());
|
|
|
- String errorMsg = "更新成功,共" + catalogData.getTotal() + "条,已更新" + catalogData.getChannelList().size() + "条";
|
|
|
+ for (String deviceId : keys) {
|
|
|
+ CatalogData catalogData = data.get(deviceId);
|
|
|
+ if ( catalogData.getLastTime().before(calendarBefore5S.getTime())) { // 超过五秒收不到消息任务超时, 只更新这一部分数据
|
|
|
+ if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.runIng)) {
|
|
|
+ storager.resetChannels(catalogData.getDevice().getDeviceId(), catalogData.getChannelList());
|
|
|
+ if (catalogData.getTotal() != catalogData.getChannelList().size()) {
|
|
|
+ String errorMsg = "更新成功,共" + catalogData.getTotal() + "条,已更新" + catalogData.getChannelList().size() + "条";
|
|
|
+ catalogData.setErrorMsg(errorMsg);
|
|
|
+ }
|
|
|
+ }else if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.ready)) {
|
|
|
+ String errorMsg = "同步失败,等待回复超时";
|
|
|
+ catalogData.setErrorMsg(errorMsg);
|
|
|
+ }
|
|
|
catalogData.setStatus(CatalogData.CatalogDataStatus.end);
|
|
|
- catalogData.setErrorMsg(errorMsg);
|
|
|
}
|
|
|
- if (catalogData.getLastTime().before(calendarBefore30S.getTime())) { // 超过三十秒,如果标记为end则删除
|
|
|
- data.remove(key);
|
|
|
+ if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end) && catalogData.getLastTime().before(calendarBefore30S.getTime())) { // 超过三十秒,如果标记为end则删除
|
|
|
+ data.remove(deviceId);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
- public void setChannelSyncEnd(String key, String errorMsg) {
|
|
|
- CatalogData catalogData = data.get(key);
|
|
|
+ public void setChannelSyncEnd(String deviceId, String errorMsg) {
|
|
|
+ CatalogData catalogData = data.get(deviceId);
|
|
|
if (catalogData == null)return;
|
|
|
catalogData.setStatus(CatalogData.CatalogDataStatus.end);
|
|
|
catalogData.setErrorMsg(errorMsg);
|