From 726963ba772dde3e9bfaf52c7c398c0050ca1859 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 28 十二月 2021 18:54:50 +0800 Subject: [PATCH] 优化通道更新逻辑 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java | 45 +++++++++++++++++++++++++++++++++++++++------ 1 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java index 5fcc3ad..f8da94b 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java @@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; +import com.genersoft.iot.vmp.gb28181.session.CatalogDataCatch; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; @@ -14,6 +15,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler; import com.genersoft.iot.vmp.gb28181.utils.NumericUtil; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import org.dom4j.DocumentException; import org.dom4j.Element; import org.slf4j.Logger; @@ -27,7 +29,9 @@ import javax.sip.SipException; import javax.sip.message.Response; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.Iterator; import java.util.List; @@ -39,6 +43,8 @@ private Logger logger = LoggerFactory.getLogger(CatalogResponseMessageHandler.class); private final String cmdType = "Catalog"; + private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @Autowired private ResponseMessageHandler responseMessageHandler; @@ -47,6 +53,9 @@ @Autowired private DeferredResultHolder deferredResultHolder; + + @Autowired + private CatalogDataCatch catalogDataCatch; @Autowired private DeviceOffLineDetector offLineDetector; @@ -69,6 +78,12 @@ try { rootElement = getRootElement(evt, device.getCharset()); Element deviceListElement = rootElement.element("DeviceList"); + Element sumNumElement = rootElement.element("SumNum"); + if (sumNumElement == null || deviceListElement == null) { + responseAck(evt, Response.BAD_REQUEST, "xml error"); + return; + } + int sumNum = Integer.parseInt(sumNumElement.getText()); Iterator<Element> deviceListIterator = deviceListElement.elementIterator(); if (deviceListIterator != null) { List<DeviceChannel> channelList = new ArrayList<>(); @@ -86,6 +101,10 @@ String status = statusElement != null ? statusElement.getText().toString() : "ON"; DeviceChannel deviceChannel = new DeviceChannel(); deviceChannel.setName(channelName); + deviceChannel.setDeviceId(device.getDeviceId()); + String now = this.format.format(new Date(System.currentTimeMillis())); + deviceChannel.setCreateTime(now); + deviceChannel.setUpdateTime(now); deviceChannel.setChannelId(channelDeviceId); // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR鐨勫吋瀹规�у鐞� if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) { @@ -153,14 +172,28 @@ deviceChannel.setPTZType(Integer.parseInt(getText(itemDevice, "PTZType"))); } deviceChannel.setHasAudio(true); // 榛樿鍚湁闊抽锛屾挱鏀炬椂鍐嶆鏌ユ槸鍚︽湁闊抽鍙婃槸鍚AC - // TODO 淇敼涓烘壒閲忔彃鍏� channelList.add(deviceChannel); } - storager.updateChannels(device.getDeviceId(), channelList); - RequestMessage msg = new RequestMessage(); - msg.setKey(key); - msg.setData(device); - deferredResultHolder.invokeAllResult(msg); + + catalogDataCatch.put(key, sumNum, device, channelList); + if (catalogDataCatch.get(key).size() == sumNum) { + // 鏁版嵁宸茬粡瀹屾暣鎺ユ敹 + boolean resetChannelsResult = storager.resetChannels(device.getDeviceId(), catalogDataCatch.get(key)); + RequestMessage msg = new RequestMessage(); + msg.setKey(key); + WVPResult<Object> result = new WVPResult<>(); + result.setCode(0); + result.setData(device); + if (resetChannelsResult) { + result.setMsg("鏇存柊鎴愬姛锛屽叡" + sumNum + "鏉★紝宸叉洿鏂�" + catalogDataCatch.get(key).size() + "鏉�"); + }else { + result.setMsg("鎺ユ敹鎴愬姛锛屽啓鍏ュけ璐ワ紝鍏�" + sumNum + "鏉★紝宸叉帴鏀�" + catalogDataCatch.get(key).size() + "鏉�"); + } + msg.setData(result); + deferredResultHolder.invokeAllResult(msg); + catalogDataCatch.del(key); + } + // 鍥炲200 OK responseAck(evt, Response.OK); if (offLineDetector.isOnline(device.getDeviceId())) { -- Gitblit v1.8.0