From 0f58218badea86a5209ae7f1ccd60b7cb4b26eee Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期四, 25 二月 2021 18:10:02 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into wvp-28181-2.0

---
 src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceConfig.java |  120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 120 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceConfig.java b/src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceConfig.java
new file mode 100644
index 0000000..d046c0d
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceConfig.java
@@ -0,0 +1,120 @@
+/**
+ * 璁惧璁剧疆鍛戒护API鎺ュ彛
+ * 
+ * @author lawrencehj
+ * @date 2021骞�2鏈�2鏃�
+ */
+
+package com.genersoft.iot.vmp.vmanager.device;
+
+import javax.sip.message.Response;
+
+import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
+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.cmd.impl.SIPCommander;
+import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.async.DeferredResult;
+
+@CrossOrigin
+@RestController
+@RequestMapping("/api")
+public class DeviceConfig {
+
+    private final static Logger logger = LoggerFactory.getLogger(DeviceQuery.class);
+
+    @Autowired
+    private IVideoManagerStorager storager;
+
+    @Autowired
+    private SIPCommander cmder;
+
+    @Autowired
+    private DeferredResultHolder resultHolder;
+
+	/**
+	 * 鐪嬪畧浣嶆帶鍒跺懡浠PI鎺ュ彛
+	 * 
+	 * @param deviceId
+	 * @param enabled       鐪嬪畧浣嶄娇鑳�1:寮�鍚�,0:鍏抽棴
+	 * @param resetTime     鑷姩褰掍綅鏃堕棿闂撮殧锛堝彲閫夛級
+     * @param presetIndex   璋冪敤棰勭疆浣嶇紪鍙凤紙鍙�夛級
+     * @param channelId     閫氶亾缂栫爜锛堝彲閫夛級
+	 */
+	@GetMapping("/config/{deviceId}/basicParam")
+	public DeferredResult<ResponseEntity<String>> homePositionApi(@PathVariable String deviceId,
+                                                                @RequestParam(required = false) String channelId,
+                                                                @RequestParam(required = false) String name,
+																@RequestParam(required = false) String expiration,
+																@RequestParam(required = false) String heartBeatInterval,
+                                                                @RequestParam(required = false) String heartBeatCount) {
+        if (logger.isDebugEnabled()) {
+			logger.debug("鎶ヨ澶嶄綅API璋冪敤");
+		}
+		Device device = storager.queryVideoDevice(deviceId);
+		cmder.deviceBasicConfigCmd(device, channelId, name, expiration, heartBeatInterval, heartBeatCount, event -> {
+			Response response = event.getResponse();
+			RequestMessage msg = new RequestMessage();
+			msg.setId(DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + (XmlUtil.isEmpty(channelId) ? deviceId : channelId));
+			msg.setData(String.format("璁惧閰嶇疆鎿嶄綔澶辫触锛岄敊璇爜锛� %s, %s", response.getStatusCode(), response.getReasonPhrase()));
+			resultHolder.invokeResult(msg);
+		});
+        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(3 * 1000L);
+		result.onTimeout(() -> {
+			logger.warn(String.format("璁惧閰嶇疆鎿嶄綔瓒呮椂, 璁惧鏈繑鍥炲簲绛旀寚浠�"));
+			// 閲婃斁rtpserver
+			RequestMessage msg = new RequestMessage();
+			msg.setId(DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + (XmlUtil.isEmpty(channelId) ? deviceId : channelId));
+			JSONObject json = new JSONObject();
+			json.put("DeviceID", deviceId);
+			json.put("Status", "Timeout");
+			json.put("Description", "璁惧閰嶇疆鎿嶄綔瓒呮椂, 璁惧鏈繑鍥炲簲绛旀寚浠�");
+			msg.setData(json); //("鐪嬪畧浣嶆帶鍒舵搷浣滆秴鏃�, 璁惧鏈繑鍥炲簲绛旀寚浠�");
+			resultHolder.invokeResult(msg);
+		});
+		resultHolder.put(DeferredResultHolder.CALLBACK_CMD_DEVICECONFIG + (XmlUtil.isEmpty(channelId) ? deviceId : channelId), result);
+		return result;
+	}
+
+	/**
+	 * 璁惧閰嶇疆鏌ヨ璇锋眰API鎺ュ彛
+	 * 
+	 * @param deviceId
+	 */
+	@GetMapping("/config/{deviceId}/query/{configType}")
+    public DeferredResult<ResponseEntity<String>> configDownloadApi(@PathVariable String deviceId, 
+                                                                @PathVariable String configType,
+                                                                @RequestParam(required = false) String channelId) {
+		if (logger.isDebugEnabled()) {
+			logger.debug("璁惧鐘舵�佹煡璇PI璋冪敤");
+		}
+		Device device = storager.queryVideoDevice(deviceId);
+		cmder.deviceConfigQuery(device, channelId, configType, event -> {
+			Response response = event.getResponse();
+			RequestMessage msg = new RequestMessage();
+			msg.setId(DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + (XmlUtil.isEmpty(channelId) ? deviceId : channelId));
+			msg.setData(String.format("鑾峰彇璁惧閰嶇疆澶辫触锛岄敊璇爜锛� %s, %s", response.getStatusCode(), response.getReasonPhrase()));
+			resultHolder.invokeResult(msg);
+		});
+        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String >> (3 * 1000L);
+		result.onTimeout(()->{
+			logger.warn(String.format("鑾峰彇璁惧閰嶇疆瓒呮椂"));
+			// 閲婃斁rtpserver
+			RequestMessage msg = new RequestMessage();
+			msg.setId(DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + (XmlUtil.isEmpty(channelId) ? deviceId : channelId));
+			msg.setData("Timeout. Device did not response to this command.");
+			resultHolder.invokeResult(msg);
+		});
+		resultHolder.put(DeferredResultHolder.CALLBACK_CMD_CONFIGDOWNLOAD + (XmlUtil.isEmpty(channelId) ? deviceId : channelId), result);
+		return result;
+	}
+
+}

--
Gitblit v1.8.0