From ec8ab540f8af6dca862d3ec9967e9042fa7dd8eb Mon Sep 17 00:00:00 2001
From: hotcoffie <35990065+hotcoffie@users.noreply.github.com>
Date: 星期六, 07 五月 2022 17:42:31 +0800
Subject: [PATCH] Merge branch '648540858:wvp-28181-2.0' into wvp-28181-2.0

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/PresetQueryResponseMessageHandler.java |  124 +++++++++++++++++
 src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java                                            |    5 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java                                                     |   18 ++
 src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java                                                                           |    1 
 src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarmMethod.java                                                             |   40 +++++
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java           |   38 +++--
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java                                      |   11 -
 pom.xml                                                                                                                             |    4 
 web_src/index.html                                                                                                                  |   21 --
 README.md                                                                                                                           |   44 ++++-
 src/main/java/com/genersoft/iot/vmp/domain/req/PresetQuerySipReq.java                                                               |   28 ++++
 web_src/src/components/devicePosition.vue                                                                                           |    2 
 web_src/static/js/mapConfig.js                                                                                                      |   19 ++
 src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java                                                                     |   46 ++++-
 14 files changed, 326 insertions(+), 75 deletions(-)

diff --git a/README.md b/README.md
index ee03012..f9ef44a 100644
--- a/README.md
+++ b/README.md
@@ -109,21 +109,45 @@
 - [X] 鏀寔浣跨敤mysql浣滀负鏁版嵁搴擄紝榛樿sqlite3,寮�绠卞嵆鐢ㄣ��
 - [X] WEB绔敮鎸佹挱鏀綡264涓嶩265锛岄煶棰戞敮鎸丟.711A/G.711U/AAC,瑕嗙洊鍥芥爣甯哥敤缂栫爜鏍煎紡銆�
 
-# docker蹇�熶綋楠�
-鐩墠浣滆�呯殑docker-compose鍥犱负鏃堕棿鏈夐檺缁存姢涓嶅強鏃讹紝杩欓噷鎻愪緵绗笁鏂规彁渚涚殑渚涘ぇ瀹朵娇鐢紝缁存姢涓嶆槗锛屽ぇ瀹惰寰楃粰杩欎綅灏忎紮浼寸偣涓猻tar銆�  
-https://github.com/SaltFish001/wvp_pro_compose
-[https://github.com/SaltFish001/wvp_pro_compose](https://github.com/SaltFish001/wvp_pro_compose)
-杩欐槸浣滆�呯淮鎶ょ殑涓�涓暅鍍忥紝鍙兘瀛樺湪涓嶅強鏃剁殑闂銆�
-```shell
-docker pull 648540858/wvp_pro
+[//]: # (# docker蹇�熶綋楠�)
 
-docker run  --env WVP_IP="浣犵殑IP" -it -p 18080:18080 -p 30000-30500:30000-30500/udp -p 30000-30500:30000-30500/tcp -p 80:80 -p 5060:5060 -p 5060:5060/udp 648540858/wvp_pro
-```
-docker浣跨敤璇︽儏鏌ョ湅锛歔https://hub.docker.com/r/648540858/wvp_pro](https://hub.docker.com/r/648540858/wvp_pro)
+[//]: # (鐩墠浣滆�呯殑docker-compose鍥犱负鏃堕棿鏈夐檺缁存姢涓嶅強鏃讹紝杩欓噷鎻愪緵绗笁鏂规彁渚涚殑渚涘ぇ瀹朵娇鐢紝缁存姢涓嶆槗锛屽ぇ瀹惰寰楃粰杩欎綅灏忎紮浼寸偣涓猻tar銆�  )
+
+[//]: # (https://github.com/SaltFish001/wvp_pro_compose)
+
+[//]: # ([https://github.com/SaltFish001/wvp_pro_compose]&#40;https://github.com/SaltFish001/wvp_pro_compose&#41;)
+
+[//]: # (杩欐槸浣滆�呯淮鎶ょ殑涓�涓暅鍍忥紝鍙兘瀛樺湪涓嶅強鏃剁殑闂銆�)
+
+[//]: # (```shell)
+
+[//]: # (docker pull 648540858/wvp_pro)
+
+[//]: # ()
+[//]: # (docker run  --env WVP_IP="浣犵殑IP" -it -p 18080:18080 -p 30000-30500:30000-30500/udp -p 30000-30500:30000-30500/tcp -p 80:80 -p 5060:5060 -p 5060:5060/udp 648540858/wvp_pro)
+
+[//]: # (```)
+
+[//]: # (docker浣跨敤璇︽儏鏌ョ湅锛歔https://hub.docker.com/r/648540858/wvp_pro]&#40;https://hub.docker.com/r/648540858/wvp_pro&#41;)
 
 # gitee鍚屾浠撳簱
 https://gitee.com/pan648540858/wvp-GB28181-pro.git  
 
+# 閬囧埌闂
+鍥芥爣鏈�楹荤儲鐨勫湴鏂瑰湪浜庤澶囩殑鍏煎鎬э紝鎵�浠ラ渶瑕佸ぇ閲忕殑璁惧鏉ユ祴璇曪紝鐩墠浣滆�呮墜閲岀殑璁惧鏈夐檺锛屽啀鍔犱笂浣滆�呮按骞虫湁闄愶紝鎵�浠ラ亣鍒伴棶棰樺湪鎵�闅惧厤锛�
+1. 鏌ョ湅wiki锛屼粩缁嗙殑闃呰鍙互甯綘閬垮厤鍑犱箮鎵�鏈夌殑闂
+2. 鎼滅储issues锛岃繖閲屾湁澶ч儴鍒嗙殑绛旀
+3. 鍔燪Q缇わ紝杩欓噷鏈夊ぇ閲忕儹蹇冪殑灏忎紮浼达紝浣嗘槸鍓嶆彁鏂板笇鏈涗綘宸茬粡浠旂粏闃呰浜唚iki鍜屾悳绱簡issues銆�
+4. 浣犲彲浠ヨ浣滆�呬负浣犺В绛旓紝浣嗘槸鎴戜笉鏄厤璐圭殑銆�
+5. 浣犲彲浠ユ妸閬囧埌闂鐨勮澶囧瘎缁欐垜锛屽彲浠ユ洿瀹规槗鐨勫鐜伴棶棰樸��
+
+
+# 鍚堜綔
+鐩墠寰堝鎵撶潃鍚堜綔鐨勫箤瀛愭潵绉佽亰鐨勶紝鍏跺疄澶у澶у彲涓嶅繀锛岀洰鍓嶄綔鑰呮病鏈夌簿鍔涳紝浣犳湁闂鍙互浠樿垂鎵炬垜瑙g瓟锛屼篃鍙互鎻怭R
+锛屽鏋滃浠g爜鏈夊缓璁彲浠ユ彁ISSUE锛涗篃鍙互鍔犵兢涓�璧疯亰鑱娿�傛垜浠杩庢墍鏈夋湁鍏磋叮浣嗛亣鍒伴」鐩腑鏉ョ殑浜恒��
+
+
+
 # 浣跨敤甯姪
 QQ缇�: 901799015, ZLM浣跨敤鏂囨。[https://github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)  
 QQ绉佷俊涓�鑸笉鍥�, 绮惧姏鏈夐檺.娆㈣繋澶у鍦ㄧ兢閲岃璁�.瑙夊緱椤圭洰瀵逛綘鏈夊府鍔╋紝娆㈣繋star鍜屾彁浜r銆�
diff --git a/pom.xml b/pom.xml
index 34a07e1..eade1f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -256,6 +256,7 @@
 			<plugin>
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
+				<version>2.3.5.RELEASE</version>
 				<configuration>
 					<includeSystemScope>true</includeSystemScope>
 				</configuration>
@@ -263,6 +264,7 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.8.1</version>
 				<configuration>
 					<source>1.8</source>
 					<target>1.8</target>
@@ -272,6 +274,7 @@
 			<plugin>
 				<groupId>pl.project13.maven</groupId>
 				<artifactId>git-commit-id-plugin</artifactId>
+				<version>3.0.1</version>
 				<configuration>
 					<offline>true</offline>
 				</configuration>
@@ -280,6 +283,7 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.22.2</version>
 				<configuration>
 					<skipTests>true</skipTests>
 				</configuration>
diff --git a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
index 9dacbad..8ff2efb 100644
--- a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
+++ b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
@@ -7,7 +7,6 @@
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import springfox.documentation.oas.annotations.EnableOpenApi;
 
diff --git a/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java b/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java
index e91d1ca..ed1c2b9 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/ApiSaveConstant.java
@@ -1,5 +1,9 @@
 package com.genersoft.iot.vmp.common;
 
+/**
+ * 涓篈PI閲嶅懡鍚�, 鏂逛究鍚戞暟鎹簱璁板綍鏁版嵁鐨勬椂鍊欏睍绀�
+ * @author lin
+ */
 public class ApiSaveConstant {
 
     public static String getVal(String key) {
@@ -35,8 +39,9 @@
                                     return "[璁惧鎺у埗] 寮哄埗鍏抽敭甯�";
                                 case "home_position":
                                     return "[璁惧鎺у埗] 鐪嬪畧浣嶆帶鍒�";
+                                default:
+                                    return "";
                             }
-                            break;
                             case "query":
                                 if (keyItemArray.length <= 5) {
                                     return null;
@@ -51,23 +56,30 @@
                                                 return "[璁惧鏌ヨ] 鍚屾璁惧閫氶亾";
                                             case "delete":
                                                 return "[璁惧鏌ヨ] 绉婚櫎璁惧";
+                                            default:
+                                                return "";
                                         }
-                                        break;
                                     case "channel":
                                         return "[璁惧鏌ヨ] 鏇存柊閫氶亾淇℃伅";
                                     case "transport":
                                         return "[璁惧鏌ヨ] 淇敼鏁版嵁娴佷紶杈撴ā寮�";
+                                    default:
+                                        return "";
                                 }
-                                break;
+                        default:
+                            return "";
                             }
+
+                    break;
                 case "gbStream":
                     switch (keyItemArray[3]) {
                         case "del":
                             return "绉婚櫎閫氶亾涓庡浗鏍囩殑鍏宠仈";
                         case "add":
                             return "娣诲姞閫氶亾涓庡浗鏍囩殑鍏宠仈";
+                        default:
+                            return "";
                     }
-                    break;
                 case "media":
                     break;
                 case "position":
@@ -85,8 +97,9 @@
                             return "鍚戜笂绾у钩鍙版坊鍔犲浗鏍囬�氶亾";
                         case "del_channel_for_gb":
                             return "浠庝笂绾у钩鍙扮Щ闄ゅ浗鏍囬�氶亾";
+                        default:
+                            return "";
                     }
-                    break;
                 case "platform_gb_stream":
                     break;
                 case "play":
@@ -101,32 +114,36 @@
                             return "缁撴潫杞爜";
                         case "broadcast":
                             return "璇煶骞挎挱";
+                        default:
+                            return "";
                     }
-                    break;
                 case "download":
                     switch (keyItemArray[3]) {
                         case "start":
                             return "寮�濮嬪巻鍙插獟浣撲笅杞�";
                         case "stop":
                             return "鍋滄鍘嗗彶濯掍綋涓嬭浇";
+                        default:
+                            return "";
                     }
-                    break;
                 case "playback":
                     switch (keyItemArray[3]) {
                         case "start":
                             return "寮�濮嬭棰戝洖鏀�";
                         case "stop":
                             return "鍋滄瑙嗛鍥炴斁";
+                        default:
+                            return "";
                     }
-                    break;
                 case "ptz":
                     switch (keyItemArray[3]) {
                         case "control":
                             return "浜戝彴鎺у埗";
                         case "front_end_command":
                             return "閫氱敤鍓嶇鎺у埗鍛戒护";
+                        default:
+                            return "";
                     }
-                    break;
                 case "gb_record":
                     break;
                 case "onvif":
@@ -146,16 +163,18 @@
                             return "鍚敤浠g悊";
                         case "stop":
                             return "鍋滅敤浠g悊";
+                        default:
+                            return "";
                     }
-                    break;
                 case "push":
                     switch (keyItemArray[3]) {
                         case "save_to_gb":
                             return "灏嗘帹娴佹坊鍔犲埌鍥芥爣";
                         case "remove_form_gb":
                             return "灏嗘帹娴佺Щ鍑哄埌鍥芥爣";
+                        default:
+                            return "";
                     }
-                    break;
                 case "user":
                     switch (keyItemArray[3]) {
                         case "login":
@@ -166,8 +185,11 @@
                             return "娣诲姞鐢ㄦ埛";
                         case "delete":
                             return "鍒犻櫎鐢ㄦ埛";
+                        default:
+                            return "";
                     }
-                    break;
+                default:
+                    return "";
             }
         }
         return null;
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
index 2356b57..95b2262 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
@@ -13,6 +13,7 @@
 
 /**
  * 澶勭悊鍖垮悕鐢ㄦ埛璁块棶閫昏緫
+ * @author lin
  */
 @Component
 public class AnonymousAuthenticationEntryPoint implements AuthenticationEntryPoint {
@@ -21,7 +22,6 @@
 
     @Override
     public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) {
-//        logger.debug("鐢ㄦ埛闇�瑕佺櫥褰曪紝璁块棶[{}]澶辫触锛孉uthenticationException=[{}]", request.getRequestURI(), e.getMessage());
         // 鍏佽璺ㄥ煙
         response.setHeader("Access-Control-Allow-Origin", "*");
         // 鍏佽鑷畾涔夎姹傚ごtoken(鍏佽head璺ㄥ煙)
@@ -30,7 +30,8 @@
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("code", "-1");
         jsonObject.put("msg", "璇风櫥褰曞悗閲嶆柊璇锋眰");
-        if (request.getRequestURI().contains("api/user/login")){
+        String logUri = "api/user/login";
+        if (request.getRequestURI().contains(logUri)){
             jsonObject.put("msg", e.getMessage());
         }
         response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
diff --git a/src/main/java/com/genersoft/iot/vmp/domain/req/PresetQuerySipReq.java b/src/main/java/com/genersoft/iot/vmp/domain/req/PresetQuerySipReq.java
new file mode 100644
index 0000000..e2f3ec6
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/domain/req/PresetQuerySipReq.java
@@ -0,0 +1,28 @@
+package com.genersoft.iot.vmp.domain.req;
+
+
+/**
+ * @author chenjialing
+ */
+public class PresetQuerySipReq {
+
+    private String presetId;
+
+    private String presetName;
+
+    public String getPresetId() {
+        return presetId;
+    }
+
+    public void setPresetId(String presetId) {
+        this.presetId = presetId;
+    }
+
+    public String getPresetName() {
+        return presetName;
+    }
+
+    public void setPresetName(String presetName) {
+        this.presetName = presetName;
+    }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarmMethod.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarmMethod.java
new file mode 100644
index 0000000..ff8761e
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarmMethod.java
@@ -0,0 +1,40 @@
+package com.genersoft.iot.vmp.gb28181.bean;
+
+/**
+ * 鎶ヨ鏂瑰紡
+ * @author lin
+ * 1涓虹數璇濇姤璀�, 2涓鸿澶囨姤璀�, 3涓虹煭淇℃姤璀�, 4涓� GPS鎶ヨ, 5涓鸿棰戞姤璀�, 6涓鸿澶囨晠闅滄姤璀�,
+ * 7鍏朵粬鎶ヨ;鍙互涓虹洿鎺ョ粍鍚堝12涓虹數璇濇姤璀︽垨 璁惧鎶ヨ-
+ */
+public enum DeviceAlarmMethod {
+    // 1涓虹數璇濇姤璀�
+    Telephone(1),
+
+    // 2涓鸿澶囨姤璀�
+    Device(2),
+
+    // 3涓虹煭淇℃姤璀�
+    SMS(3),
+
+    // 4涓� GPS鎶ヨ
+    GPS(4),
+
+    // 5涓鸿棰戞姤璀�
+    Video(5),
+
+    // 6涓鸿澶囨晠闅滄姤璀�
+    DeviceFailure(6),
+
+    // 7鍏朵粬鎶ヨ
+    Other(7);
+
+    private final int val;
+
+    DeviceAlarmMethod(int val) {
+        this.val=val;
+    }
+
+    public int getVal() {
+        return val;
+    }
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
index 7d67e82..1c2e611 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
@@ -68,9 +68,6 @@
 				toHeader, viaHeaders, maxForwards);
 
 		List<String> agentParam = new ArrayList<>();
-		agentParam.add("wvp-pro");
-		UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
-		request.addHeader(userAgentHeader);
 
 		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
 		request.setContent(content, contentTypeHeader);
@@ -115,10 +112,6 @@
 		ExpiresHeader expires = sipFactory.createHeaderFactory().createExpiresHeader(Integer.parseInt(platform.getExpires()));
 		request.addHeader(expires);
 
-		List<String> agentParam = new ArrayList<>();
-		agentParam.add("wvp-pro");
-		UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
-		request.addHeader(userAgentHeader);
 
 		return request;
 	}
@@ -226,10 +219,6 @@
 		messageFactory.setDefaultContentEncodingCharset(parentPlatform.getCharacterSet());
 		request = messageFactory.createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
 				toHeader, viaHeaders, maxForwards);
-		List<String> agentParam = new ArrayList<>();
-		agentParam.add("wvp-pro");
-		UserAgentHeader userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
-		request.addHeader(userAgentHeader);
 
 		ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
 		request.setContent(content, contentTypeHeader);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 7689a7b..ea8f202 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -27,6 +27,7 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.SpringBootVersion;
 import org.springframework.context.annotation.DependsOn;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
@@ -37,7 +38,9 @@
 import javax.sip.message.Request;
 import java.lang.reflect.Field;
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 
 /**    
  * @description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔�   
@@ -49,7 +52,7 @@
 public class SIPCommander implements ISIPCommander {
 
 	private final Logger logger = LoggerFactory.getLogger(SIPCommander.class);
-	
+
 	@Autowired
 	private SipConfig sipConfig;
 
@@ -1643,7 +1646,18 @@
 		} else if("UDP".equals(device.getTransport())) {
 			clientTransaction = udpSipProvider.getNewClientTransaction(request);
 		}
-
+		if (request.getHeader(UserAgentHeader.NAME) == null) {
+			List<String> agentParam = new ArrayList<>();
+			agentParam.add("wvp-pro");
+			// TODO 娣诲姞鐗堟湰淇℃伅浠ュ強鏃ユ湡
+			UserAgentHeader userAgentHeader = null;
+			try {
+				userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);
+			} catch (ParseException e) {
+				throw new RuntimeException(e);
+			}
+			request.addHeader(userAgentHeader);
+		}
 		CallIdHeader callIdHeader = (CallIdHeader)request.getHeader(CallIdHeader.NAME);
 		// 娣诲姞閿欒璁㈤槄
 		if (errorEvent != null) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
index fa20d51..b7e222d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
@@ -32,7 +32,7 @@
 @Component
 public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
 
-    private Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class);
+    private final Logger logger = LoggerFactory.getLogger(AlarmNotifyMessageHandler.class);
     private final String cmdType = "Alarm";
 
     @Autowired
@@ -85,24 +85,27 @@
         deviceAlarm.setAlarmPriority(getText(rootElement, "AlarmPriority"));
         deviceAlarm.setAlarmMethod(getText(rootElement, "AlarmMethod"));
         deviceAlarm.setAlarmTime(getText(rootElement, "AlarmTime"));
-        if (getText(rootElement, "AlarmDescription") == null) {
+        String alarmDescription = getText(rootElement, "AlarmDescription");
+        if (alarmDescription == null) {
             deviceAlarm.setAlarmDescription("");
         } else {
-            deviceAlarm.setAlarmDescription(getText(rootElement, "AlarmDescription"));
+            deviceAlarm.setAlarmDescription(alarmDescription);
         }
-        if (NumericUtil.isDouble(getText(rootElement, "Longitude"))) {
-            deviceAlarm.setLongitude(Double.parseDouble(getText(rootElement, "Longitude")));
+        String longitude = getText(rootElement, "Longitude");
+        if (longitude != null && NumericUtil.isDouble(longitude)) {
+            deviceAlarm.setLongitude(Double.parseDouble(longitude));
         } else {
             deviceAlarm.setLongitude(0.00);
         }
-        if (NumericUtil.isDouble(getText(rootElement, "Latitude"))) {
-            deviceAlarm.setLatitude(Double.parseDouble(getText(rootElement, "Latitude")));
+        String latitude = getText(rootElement, "Latitude");
+        if (latitude != null && NumericUtil.isDouble(latitude)) {
+            deviceAlarm.setLatitude(Double.parseDouble(latitude));
         } else {
             deviceAlarm.setLatitude(0.00);
         }
 
         if (!StringUtils.isEmpty(deviceAlarm.getAlarmMethod())) {
-            if ( deviceAlarm.getAlarmMethod().equals("4")) {
+            if ( deviceAlarm.getAlarmMethod().contains(DeviceAlarmMethod.GPS.getVal() + "")) {
                 MobilePosition mobilePosition = new MobilePosition();
                 mobilePosition.setDeviceId(deviceAlarm.getDeviceId());
                 mobilePosition.setTime(deviceAlarm.getAlarmTime());
@@ -122,7 +125,7 @@
             }
         }
         if (!StringUtils.isEmpty(deviceAlarm.getDeviceId())) {
-            if (deviceAlarm.getAlarmMethod().equals("5")) {
+            if (deviceAlarm.getAlarmMethod().contains(DeviceAlarmMethod.Video.getVal() + "")) {
                 deviceAlarm.setAlarmType(getText(rootElement.element("Info"), "AlarmType"));
             }
         }
@@ -173,25 +176,28 @@
         deviceAlarm.setAlarmPriority(getText(rootElement, "AlarmPriority"));
         deviceAlarm.setAlarmMethod(getText(rootElement, "AlarmMethod"));
         deviceAlarm.setAlarmTime(getText(rootElement, "AlarmTime"));
-        if (getText(rootElement, "AlarmDescription") == null) {
+        String alarmDescription = getText(rootElement, "AlarmDescription");
+        if (alarmDescription == null) {
             deviceAlarm.setAlarmDescription("");
         } else {
-            deviceAlarm.setAlarmDescription(getText(rootElement, "AlarmDescription"));
+            deviceAlarm.setAlarmDescription(alarmDescription);
         }
-        if (NumericUtil.isDouble(getText(rootElement, "Longitude"))) {
-            deviceAlarm.setLongitude(Double.parseDouble(getText(rootElement, "Longitude")));
+        String longitude = getText(rootElement, "Longitude");
+        if (longitude != null && NumericUtil.isDouble(longitude)) {
+            deviceAlarm.setLongitude(Double.parseDouble(longitude));
         } else {
             deviceAlarm.setLongitude(0.00);
         }
-        if (NumericUtil.isDouble(getText(rootElement, "Latitude"))) {
-            deviceAlarm.setLatitude(Double.parseDouble(getText(rootElement, "Latitude")));
+        String latitude = getText(rootElement, "Latitude");
+        if (latitude != null && NumericUtil.isDouble(latitude)) {
+            deviceAlarm.setLatitude(Double.parseDouble(latitude));
         } else {
             deviceAlarm.setLatitude(0.00);
         }
 
         if (!StringUtils.isEmpty(deviceAlarm.getAlarmMethod())) {
 
-            if (deviceAlarm.getAlarmMethod().equals("5")) {
+            if (deviceAlarm.getAlarmMethod().contains(DeviceAlarmMethod.Video.getVal() + "")) {
                 deviceAlarm.setAlarmType(getText(rootElement.element("Info"), "AlarmType"));
             }
         }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/PresetQueryResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/PresetQueryResponseMessageHandler.java
new file mode 100644
index 0000000..db7bb55
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/PresetQueryResponseMessageHandler.java
@@ -0,0 +1,124 @@
+package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd;
+
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.conf.UserSetting;
+import com.genersoft.iot.vmp.domain.req.PresetQuerySipReq;
+import com.genersoft.iot.vmp.gb28181.bean.*;
+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;
+import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
+import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
+import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
+import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
+import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import javax.sip.InvalidArgumentException;
+import javax.sip.RequestEvent;
+import javax.sip.SipException;
+import javax.sip.message.Response;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.UUID;
+
+import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
+
+@Component
+public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
+
+    private Logger logger = LoggerFactory.getLogger(PresetQueryResponseMessageHandler.class);
+    private final String cmdType = "PresetQuery";
+
+    private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    @Autowired
+    private ResponseMessageHandler responseMessageHandler;
+
+    @Autowired
+    private DeferredResultHolder deferredResultHolder;
+
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        responseMessageHandler.addHandler(cmdType, this);
+    }
+
+    @Override
+    public void handForDevice(RequestEvent evt, Device device, Element element) {
+        Element rootElement = null;
+        try {
+            rootElement = getRootElement(evt, device.getCharset());
+
+            Element presetListNumElement = rootElement.element("PresetList");
+            Element snElement = rootElement.element("SN");
+            //璇ュ瓧娈靛彲鑳戒负閫氶亾鎴栧垯璁惧鐨刬d
+            String deviceId = getText(rootElement, "DeviceID");
+            String key = DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + deviceId;
+            if (snElement == null ||  presetListNumElement == null) {
+                responseAck(evt, Response.BAD_REQUEST, "xml error");
+                return;
+            }
+            int sumNum = Integer.parseInt(presetListNumElement.attributeValue("Num"));
+            List<PresetQuerySipReq> presetQuerySipReqList = new ArrayList<>();
+            if (sumNum == 0) {
+                // 鏁版嵁鏃犻缃綅淇℃伅
+
+
+            }else {
+                for (Iterator<Element> presetIterator =  presetListNumElement.elementIterator();presetIterator.hasNext();){
+                    Element itemListElement = presetIterator.next();
+                    PresetQuerySipReq presetQuerySipReq = new PresetQuerySipReq();
+                    for (Iterator<Element> itemListIterator =  itemListElement.elementIterator();itemListIterator.hasNext();){
+                                // 閬嶅巻item
+                                Element itemOne = itemListIterator.next();
+                                String name = itemOne.getName();
+                                String textTrim = itemOne.getTextTrim();
+                                if("PresetID".equals(name)){
+                                    presetQuerySipReq.setPresetId(textTrim);
+                                }else {
+                                    presetQuerySipReq.setPresetName(textTrim);
+                                }
+                    }
+                    presetQuerySipReqList.add(presetQuerySipReq);
+
+
+                }
+
+            }
+            RequestMessage requestMessage = new RequestMessage();
+            requestMessage.setKey(key);
+            requestMessage.setData(presetQuerySipReqList);
+            deferredResultHolder.invokeAllResult(requestMessage);
+            responseAck(evt, Response.OK);
+        } catch (DocumentException e) {
+            e.printStackTrace();
+        } catch (InvalidArgumentException e) {
+            e.printStackTrace();
+        } catch (ParseException e) {
+            e.printStackTrace();
+        } catch (SipException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
+
+    }
+
+}
diff --git a/web_src/index.html b/web_src/index.html
index f69f16b..21ad271 100644
--- a/web_src/index.html
+++ b/web_src/index.html
@@ -12,26 +12,7 @@
     <script type="text/javascript" src="./static/js/jessibuca/jessibuca.js"></script>
     <script type="text/javascript" src="./static/js/EasyWasmPlayer.js"></script>
     <script type="text/javascript" src="./static/js/ZLMRTCClient.js"></script>
+    <script type="text/javascript" src="./static/js/mapConfig.js"></script>
     <div id="app"></div>
-    <!-- built files will be auto injected -->
-    <script>
-      // map缁勪欢鍏ㄥ眬鍙傛暟, 娉ㄩ噴姝ゅ唴瀹瑰彲浠ュ叧闂湴鍥惧姛鑳�
-      window.mapParam = {
-        // 鍧愭爣绯� GCJ-02 WGS-84,
-        coordinateSystem: "GCJ-02",
-        // 鍦板浘鐡︾墖鍦板潃
-        tilesUrl: "http://webrd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
-        // 鐡︾墖澶у皬
-        tileSize: 256,
-        // 榛樿灞傜骇
-        zoom:10,
-        // 榛樿鍦板浘涓績鐐�
-        center:[116.41020, 39.915119],
-        // 鍦板浘鏈�澶у眰绾�
-        maxZoom:18,
-        // 鍦板浘鏈�灏忓眰绾�
-        minZoom: 3
-      }
-    </script>
   </body>
 </html>
diff --git a/web_src/src/components/devicePosition.vue b/web_src/src/components/devicePosition.vue
index 16675c9..db19677 100644
--- a/web_src/src/components/devicePosition.vue
+++ b/web_src/src/components/devicePosition.vue
@@ -59,7 +59,7 @@
   },
   data() {
     return {
-      onOff: typeof window.mapParam !== "undefined",
+      onOff: typeof window.mapParam !== "undefined" && window.mapParam.enable,
       deviceService: new DeviceService(),
       layer: null,
       lineLayer: null,
diff --git a/web_src/static/js/mapConfig.js b/web_src/static/js/mapConfig.js
new file mode 100644
index 0000000..60427e8
--- /dev/null
+++ b/web_src/static/js/mapConfig.js
@@ -0,0 +1,19 @@
+// map缁勪欢鍏ㄥ眬鍙傛暟, 娉ㄩ噴姝ゅ唴瀹瑰彲浠ュ叧闂湴鍥惧姛鑳�
+window.mapParam = {
+  // 寮�鍚�/鍏抽棴鍦板浘鍔熻兘
+  enable: true,
+  // 鍧愭爣绯� GCJ-02 WGS-84,
+  coordinateSystem: "GCJ-02",
+  // 鍦板浘鐡︾墖鍦板潃
+  tilesUrl: "http://webrd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
+  // 鐡︾墖澶у皬
+  tileSize: 256,
+  // 榛樿灞傜骇
+  zoom:10,
+  // 榛樿鍦板浘涓績鐐�
+  center:[116.41020, 39.915119],
+  // 鍦板浘鏈�澶у眰绾�
+  maxZoom:18,
+  // 鍦板浘鏈�灏忓眰绾�
+  minZoom: 3
+}

--
Gitblit v1.8.0