From a556d8520b50ea5db579e0506f8906de8fb26304 Mon Sep 17 00:00:00 2001
From: Lawrence <1934378145@qq.com>
Date: 星期一, 09 十一月 2020 18:40:13 +0800
Subject: [PATCH] 修正针对部分设备无录像时不返回RecordInfo段而长时间等待的bug
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 121 ++++++++++++++++++++-------------------
1 files changed, 62 insertions(+), 59 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index e0b3211..ee142d7 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -310,73 +310,76 @@
recordInfo.setSumNum(Integer.parseInt(XmlUtil.getText(rootElement, "SumNum")));
String sn = XmlUtil.getText(rootElement, "SN");
Element recordListElement = rootElement.element("RecordList");
- if (recordListElement == null) {
+ if (recordListElement == null || recordInfo.getSumNum() == 0) {
logger.info("鏃犲綍鍍忔暟鎹�");
// responseAck(evt);
- return;
- }
-
- Iterator<Element> recordListIterator = recordListElement.elementIterator();
- List<RecordItem> recordList = new ArrayList<RecordItem>();
- if (recordListIterator != null) {
- RecordItem record = new RecordItem();
- logger.info("澶勭悊褰曞儚鍒楄〃鏁版嵁...");
- // 閬嶅巻DeviceList
- while (recordListIterator.hasNext()) {
- Element itemRecord = recordListIterator.next();
- Element recordElement = itemRecord.element("DeviceID");
- if (recordElement == null) {
- logger.info("璁板綍涓虹┖锛屼笅涓�涓�...");
- continue;
+ // return;
+ } else {
+ Iterator<Element> recordListIterator = recordListElement.elementIterator();
+ List<RecordItem> recordList = new ArrayList<RecordItem>();
+ if (recordListIterator != null) {
+ RecordItem record = new RecordItem();
+ logger.info("澶勭悊褰曞儚鍒楄〃鏁版嵁...");
+ // 閬嶅巻DeviceList
+ while (recordListIterator.hasNext()) {
+ Element itemRecord = recordListIterator.next();
+ Element recordElement = itemRecord.element("DeviceID");
+ if (recordElement == null) {
+ logger.info("璁板綍涓虹┖锛屼笅涓�涓�...");
+ continue;
+ }
+ record = new RecordItem();
+ record.setDeviceId(XmlUtil.getText(itemRecord, "DeviceID"));
+ record.setName(XmlUtil.getText(itemRecord, "Name"));
+ record.setFilePath(XmlUtil.getText(itemRecord, "FilePath"));
+ record.setAddress(XmlUtil.getText(itemRecord, "Address"));
+ record.setStartTime(
+ DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(XmlUtil.getText(itemRecord, "StartTime")));
+ record.setEndTime(
+ DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(XmlUtil.getText(itemRecord, "EndTime")));
+ record.setSecrecy(itemRecord.element("Secrecy") == null ? 0
+ : Integer.parseInt(XmlUtil.getText(itemRecord, "Secrecy")));
+ record.setType(XmlUtil.getText(itemRecord, "Type"));
+ record.setRecorderId(XmlUtil.getText(itemRecord, "RecorderID"));
+ recordList.add(record);
}
- record = new RecordItem();
- record.setDeviceId(XmlUtil.getText(itemRecord, "DeviceID"));
- record.setName(XmlUtil.getText(itemRecord, "Name"));
- record.setFilePath(XmlUtil.getText(itemRecord, "FilePath"));
- record.setAddress(XmlUtil.getText(itemRecord, "Address"));
- record.setStartTime(
- DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(XmlUtil.getText(itemRecord, "StartTime")));
- record.setEndTime(DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(XmlUtil.getText(itemRecord, "EndTime")));
- record.setSecrecy(itemRecord.element("Secrecy") == null ? 0
- : Integer.parseInt(XmlUtil.getText(itemRecord, "Secrecy")));
- record.setType(XmlUtil.getText(itemRecord, "Type"));
- record.setRecorderId(XmlUtil.getText(itemRecord, "RecorderID"));
- recordList.add(record);
+ // recordList.sort(Comparator.naturalOrder());
+ recordInfo.setRecordList(recordList);
}
- // recordList.sort(Comparator.naturalOrder());
- recordInfo.setRecordList(recordList);
- }
- // 瀛樺湪褰曞儚涓斿鏋滃綋鍓嶅綍鍍忔槑缁嗕釜鏁板皬浜庢�绘潯鏁帮紝璇存槑鎷嗗寘杩斿洖锛岄渶瑕佺粍瑁咃紝鏆備笉杩斿洖
- if (recordInfo.getSumNum() > 0 && recordList.size() > 0 && recordList.size() < recordInfo.getSumNum()) {
- // 涓洪槻姝㈣繛缁姹傝璁惧鐨勫綍鍍忔暟鎹紝杩斿洖鏁版嵁閿欎贡锛岀壒澧炲姞sn杩涜鍖哄垎
- String cacheKey = CACHE_RECORDINFO_KEY + deviceId + sn;
- // TODO 鏆傛椂鐩存帴鎿嶄綔redis瀛樺偍锛屽悗缁皝瑁呬笓鐢ㄧ紦瀛樻帴鍙o紝鏀逛负鏈湴鍐呭瓨缂撳瓨
- if (redis.hasKey(cacheKey)) {
- List<RecordItem> previousList = (List<RecordItem>) redis.get(cacheKey);
- if (previousList != null && previousList.size() > 0) {
- recordList.addAll(previousList);
- }
- // 鏈垎鏀〃绀哄綍鍍忓垪琛ㄨ鎷嗗寘锛屼笖鍔犱笂涔嬪墠鐨勬暟鎹繕鏄笉澶�,淇濆瓨缂撳瓨杩斿洖锛岀瓑寰呬笅涓寘鍐嶅鐞�
- if (recordList.size() < recordInfo.getSumNum()) {
+ // 瀛樺湪褰曞儚涓斿鏋滃綋鍓嶅綍鍍忔槑缁嗕釜鏁板皬浜庢�绘潯鏁帮紝璇存槑鎷嗗寘杩斿洖锛岄渶瑕佺粍瑁咃紝鏆備笉杩斿洖
+ if (recordInfo.getSumNum() > 0 && recordList.size() > 0 && recordList.size() < recordInfo.getSumNum()) {
+ // 涓洪槻姝㈣繛缁姹傝璁惧鐨勫綍鍍忔暟鎹紝杩斿洖鏁版嵁閿欎贡锛岀壒澧炲姞sn杩涜鍖哄垎
+ String cacheKey = CACHE_RECORDINFO_KEY + deviceId + sn;
+ // TODO 鏆傛椂鐩存帴鎿嶄綔redis瀛樺偍锛屽悗缁皝瑁呬笓鐢ㄧ紦瀛樻帴鍙o紝鏀逛负鏈湴鍐呭瓨缂撳瓨
+ if (redis.hasKey(cacheKey)) {
+ List<RecordItem> previousList = (List<RecordItem>) redis.get(cacheKey);
+ if (previousList != null && previousList.size() > 0) {
+ recordList.addAll(previousList);
+ }
+ // 鏈垎鏀〃绀哄綍鍍忓垪琛ㄨ鎷嗗寘锛屼笖鍔犱笂涔嬪墠鐨勬暟鎹繕鏄笉澶�,淇濆瓨缂撳瓨杩斿洖锛岀瓑寰呬笅涓寘鍐嶅鐞�
+ if (recordList.size() < recordInfo.getSumNum()) {
+ logger.info("宸茶幏鍙�" + recordList.size() + "椤瑰綍鍍忔暟鎹紝鍏�" + recordInfo.getSumNum() + "椤�");
+ redis.set(cacheKey, recordList, 90);
+ return;
+ } else {
+ // 鏈垎鏀〃绀哄綍鍍忚鎷嗗寘锛屼絾鍔犱笂涔嬪墠鐨勬暟鎹瓒冲锛岃繑鍥炲搷搴�
+ // 鍥犺澶囧績璺虫湁鐩戝惉redis杩囨湡鏈哄埗锛屼负鎻愰珮鎬ц兘锛屾澶勬墜鍔ㄥ垹闄�
+ logger.info("褰曞儚鏁版嵁宸插叏閮ㄨ幏鍙�");
+ redis.del(cacheKey);
+ }
+ } else {
+ // 鏈垎鏀湁涓ょ鍙兘锛�1銆佸綍鍍忓垪琛ㄨ鎷嗗寘锛屼笖鏄涓�涓寘,鐩存帴淇濆瓨缂撳瓨杩斿洖锛岀瓑寰呬笅涓寘鍐嶅鐞�
+ // 2銆佷箣鍓嶆湁鍖咃紝浣嗚秴鏃舵竻绌轰簡锛岄偅涔堣繖娆n鎵规鐨勫搷搴旀暟鎹凡缁忎笉瀹屾暣锛岀瓑寰呰繃鏈熸椂闂村悗redis鑷姩娓呯┖鏁版嵁
logger.info("宸茶幏鍙�" + recordList.size() + "椤瑰綍鍍忔暟鎹紝鍏�" + recordInfo.getSumNum() + "椤�");
+ logger.info("绛夊緟鍚庣画鐨勫寘...");
+
redis.set(cacheKey, recordList, 90);
return;
- } else {
- // 鏈垎鏀〃绀哄綍鍍忚鎷嗗寘锛屼絾鍔犱笂涔嬪墠鐨勬暟鎹瓒冲锛岃繑鍥炲搷搴�
- // 鍥犺澶囧績璺虫湁鐩戝惉redis杩囨湡鏈哄埗锛屼负鎻愰珮鎬ц兘锛屾澶勬墜鍔ㄥ垹闄�
- logger.info("褰曞儚鏁版嵁宸插叏閮ㄨ幏鍙�");
- redis.del(cacheKey);
}
- } else {
- // 鏈垎鏀湁涓ょ鍙兘锛�1銆佸綍鍍忓垪琛ㄨ鎷嗗寘锛屼笖鏄涓�涓寘,鐩存帴淇濆瓨缂撳瓨杩斿洖锛岀瓑寰呬笅涓寘鍐嶅鐞�
- // 2銆佷箣鍓嶆湁鍖咃紝浣嗚秴鏃舵竻绌轰簡锛岄偅涔堣繖娆n鎵规鐨勫搷搴旀暟鎹凡缁忎笉瀹屾暣锛岀瓑寰呰繃鏈熸椂闂村悗redis鑷姩娓呯┖鏁版嵁
- logger.info("绛夊緟鍚庣画鐨勫寘...");
-
- redis.set(cacheKey, recordList, 90);
- return;
}
-
+ // 鑷劧椤哄簭鎺掑簭, 鍏冪礌杩涜鍗囧簭鎺掑垪
+ recordInfo.getRecordList().sort(Comparator.naturalOrder());
}
// 璧板埌杩欓噷锛屾湁浠ヤ笅鍙兘锛�1銆佹病鏈夊綍鍍忎俊鎭�,绗竴娆℃敹鍒皉ecordinfo鐨勬秷鎭嵆杩斿洖鍝嶅簲鏁版嵁锛屾棤redis鎿嶄綔
// 2銆佹湁褰曞儚鏁版嵁锛屼笖绗竴娆″嵆鏀跺埌瀹屾暣鏁版嵁锛岃繑鍥炲搷搴旀暟鎹紝鏃爎edis鎿嶄綔
@@ -386,8 +389,8 @@
RequestMessage msg = new RequestMessage();
msg.setDeviceId(deviceId);
msg.setType(DeferredResultHolder.CALLBACK_CMD_RECORDINFO);
- // 鑷劧椤哄簭鎺掑簭, 鍏冪礌杩涜鍗囧簭鎺掑垪
- recordInfo.getRecordList().sort(Comparator.naturalOrder());
+ // // 鑷劧椤哄簭鎺掑簭, 鍏冪礌杩涜鍗囧簭鎺掑垪
+ // recordInfo.getRecordList().sort(Comparator.naturalOrder());
msg.setData(recordInfo);
deferredResultHolder.invokeResult(msg);
logger.info("澶勭悊瀹屾垚锛岃繑鍥炵粨鏋�");
--
Gitblit v1.8.0