ソースを参照

异常闯入-02

hanqingsong 3 年 前
コミット
1b3f99c9e8

+ 5 - 18
pom.xml

@@ -50,7 +50,7 @@
50 50
         <dependency>
51 51
             <groupId>org.projectlombok</groupId>
52 52
             <artifactId>lombok</artifactId>
53
-            <scope>provided</scope>
53
+            <!--<scope>provided</scope>-->
54 54
         </dependency>
55 55
         <!--mqtt相关依赖-->
56 56
         <dependency>
@@ -67,32 +67,19 @@
67 67
         </dependency>
68 68
         <!-- 引入本地依赖 start -->
69 69
         <dependency>
70
-            <groupId>com.sun</groupId>
71
-            <artifactId>jna</artifactId>
72
-            <version>0.0.1-SNAPSHOT</version>
73
-            <scope>system</scope>
74
-            <systemPath>${project.basedir}/src/main/resources/lib/jna.jar</systemPath>
75
-        </dependency>
76
-        <!-- https://mvnrepository.com/artifact/com.sun.jna/jna -->
77
-        <!--<dependency>
78 70
             <groupId>com.sun.jna</groupId>
79 71
             <artifactId>jna</artifactId>
80
-            <version>3.0.9</version>
81
-        </dependency>-->
82
-
72
+            <version>1.0-SNAPSHOT</version>
73
+        </dependency>
83 74
         <dependency>
84 75
             <groupId>com.sun.jna</groupId>
85 76
             <artifactId>examples</artifactId>
86
-            <version>0.0.1-SNAPSHOT</version>
87
-            <scope>system</scope>
88
-            <systemPath>${project.basedir}/src/main/resources/lib/examples.jar</systemPath>
77
+            <version>1.0-SNAPSHOT</version>
89 78
         </dependency>
90 79
         <dependency>
91 80
             <groupId>org.dom4j</groupId>
92 81
             <artifactId>dom4j</artifactId>
93
-            <version>0.0.1-SNAPSHOT</version>
94
-            <scope>system</scope>
95
-            <systemPath>${project.basedir}/src/main/resources/lib/dom4j.jar</systemPath>
82
+            <version>1.0-SNAPSHOT</version>
96 83
         </dependency>
97 84
         <!-- 引入外部依赖 end -->
98 85
     </dependencies>

+ 13 - 0
src/main/java/com/unissoft/face/CLibrary.java

@@ -0,0 +1,13 @@
1
+package com.unissoft.face;
2
+
3
+import com.sun.jna.Library;
4
+
5
+/**
6
+ * @author qingsong.han
7
+ * @description:
8
+ * @create 2022-10-13 17:34
9
+ */
10
+public interface CLibrary extends Library {
11
+
12
+
13
+}

+ 25 - 19
src/main/java/com/unissoft/face/FaceMain.java

@@ -5,25 +5,23 @@ import com.unissoft.common.osSelect;
5 5
 import com.unissoft.netSDKDemo.HCNetSDK;
6 6
 import lombok.extern.slf4j.Slf4j;
7 7
 import org.springframework.beans.factory.annotation.Value;
8
-import org.springframework.context.annotation.Bean;
9
-import org.springframework.context.annotation.Configuration;
8
+import org.springframework.boot.ApplicationArguments;
9
+import org.springframework.boot.ApplicationRunner;
10
+import org.springframework.core.annotation.Order;
11
+import org.springframework.stereotype.Component;
12
+
13
+import java.util.Scanner;
10 14
 
11 15
 @Slf4j
12
-@Configuration
13
-public class FaceMain {
16
+@Component
17
+@Order(100)
18
+public class FaceMain implements ApplicationRunner {
14 19
 
15 20
     static HCNetSDK hCNetSDK = null;
16 21
     static int lUserID = -1;//用户句柄
17 22
     static int lAlarmHandle = -1; //布防句柄
18 23
     static int lListenHandle = -1; //监听句柄
19 24
 
20
-    /*
21
-     * 获取配置
22
-     */
23
-    /*@Value("${userDir.windowsDllPath}")
24
-    private String windowsDllPath;
25
-    @Value("${userDir.linuxDllPath}")
26
-    private String linuxDllPath;*/
27 25
     // 设备连接信息
28 26
     @Value("${exceptionAlarm.deviceIP}")
29 27
     private String deviceIP;
@@ -32,10 +30,11 @@ public class FaceMain {
32 30
     @Value("${exceptionAlarm.password}")
33 31
     private String password;
34 32
 
35
-    //    public static void main(String[] args) throws InterruptedException, IOException, DocumentException {
36
-    @Bean
37
-    public void mainMethod() {
38
-        log.error("mainMethod init bean===========================================================");
33
+    /*
34
+     * 获取配置
35
+     */
36
+    private void mainMethod() {
37
+        log.info("mainMethod===========================================================init bean");
39 38
         try {
40 39
             if (hCNetSDK == null) {
41 40
                 if (!CreateSDKInstance()) {
@@ -95,9 +94,9 @@ public class FaceMain {
95 94
 
96 95
             lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
97 96
             if (lUserID == -1) {
98
-                log.error("登录失败错误码为: {}", hCNetSDK.NET_DVR_GetLastError());
97
+                log.error("登录失败,错误码为: {}", hCNetSDK.NET_DVR_GetLastError());
99 98
             } else {
100
-                log.info("{} 设备登录成功! 设备序列号: {}", m_sDeviceIP, new String(m_strDeviceInfo.struDeviceV30.sSerialNumber).trim());
99
+                log.info("{} 设备登录成功!设备序列号: {}", m_sDeviceIP, new String(m_strDeviceInfo.struDeviceV30.sSerialNumber).trim());
101 100
                 m_strDeviceInfo.read();
102 101
             }
103 102
 
@@ -105,7 +104,7 @@ public class FaceMain {
105 104
             Alarm.SetAlarm(lUserID);
106 105
 
107 106
             // TODO 暂停状态 需要测试改造
108
-            /*while (true) {
107
+            while (true) {
109 108
                 //这里加入控制台输入控制,是为了保持连接状态,当输入Y表示布防结束
110 109
                 log.info("请选择是否撤出布防(Y/N):");
111 110
                 Scanner input = new Scanner(System.in);
@@ -113,8 +112,9 @@ public class FaceMain {
113 112
                 if (str.equals("Y")) {
114 113
                     break;
115 114
                 }
116
-            }*/
115
+            }
117 116
             Thread.sleep(3000);
117
+//            Thread.sleep(6000);
118 118
 
119 119
             //退出之前判断布防监听状态,并做撤防和停止监听操作
120 120
             if (lAlarmHandle >= 0) {
@@ -170,4 +170,10 @@ public class FaceMain {
170 170
         }
171 171
         return true;
172 172
     }
173
+
174
+    @Override
175
+    public void run(ApplicationArguments args) throws Exception {
176
+        // after behind for application run,because implements ApplicationRunner
177
+        this.mainMethod();
178
+    }
173 179
 }

+ 0 - 6
src/main/java/com/unissoft/mqtt/MqttTestSendController.java

@@ -36,10 +36,4 @@ public class MqttTestSendController {
36 36
         return "200";
37 37
     }
38 38
 
39
-    @PostMapping("/pushIntrusion")
40
-    public String pushIntrusion(int sAlarmType, String alarmNow) {
41
-        log.info("异常闯入/入侵接口接收消息: {}:{}", sAlarmType, alarmNow);
42
-        return "200";
43
-    }
44
-
45 39
 }

+ 6 - 18
src/main/java/com/unissoft/netSDKDemo/FMSGCallBack_V31.java

@@ -1,13 +1,10 @@
1 1
 package com.unissoft.netSDKDemo;
2 2
 
3 3
 import com.sun.jna.Pointer;
4
+import com.unissoft.pushMsg.AlarmDSService;
5
+import com.unissoft.pushMsg.AlarmDSServiceImpl;
4 6
 import lombok.extern.slf4j.Slf4j;
5
-import org.springframework.beans.factory.annotation.Value;
6
-import org.springframework.util.LinkedMultiValueMap;
7
-import org.springframework.util.MultiValueMap;
8
-import org.springframework.web.client.RestTemplate;
9 7
 
10
-import javax.annotation.Resource;
11 8
 import java.io.FileOutputStream;
12 9
 import java.io.IOException;
13 10
 import java.nio.ByteBuffer;
@@ -19,10 +16,8 @@ import java.util.Date;
19 16
  */
20 17
 @Slf4j
21 18
 public class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 {
22
-    @Value("${pushAddress}")
23
-    private String pushAddress;
24
-    @Resource
25
-    private RestTemplate restTemplate;
19
+    // this class call jna native callback,so is not spring manage class
20
+    private AlarmDSService alarmDSService = new AlarmDSServiceImpl();
26 21
 
27 22
     //报警信息回调函数
28 23
     public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
@@ -161,15 +156,8 @@ public class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 {
161 156
                 break;
162 157
             default:
163 158
                 // TODO 单报警设备 目前不需要 sAlarmType alarmNow
164
-                MultiValueMap<String, Object> requestEntity = new LinkedMultiValueMap<>();
165
-                // 报警类型(异常闯入/入侵) int 4354
166
-                requestEntity.add("sAlarmType", lCommand);
167
-                // 报警时间
168
-                requestEntity.add("alarmNow", new Date());
169
-                log.info("报警类型 int: {}", requestEntity);
170
-                // MultiValueMap requestEntity
171
-                String object = restTemplate.postForObject(pushAddress, requestEntity, String.class);
172
-                log.info(object);
159
+                log.info("alarm type in the FMSGCallBack_V31 ->int: {}", lCommand);
160
+                alarmDSService.pushLCommand(lCommand);
173 161
                 break;
174 162
         }
175 163
     }

+ 2 - 1
src/main/java/com/unissoft/netSDKDemo/HCNetSDK.java

@@ -6,12 +6,13 @@ import com.sun.jna.examples.win32.W32API.HWND;
6 6
 import com.sun.jna.ptr.ByteByReference;
7 7
 import com.sun.jna.ptr.IntByReference;
8 8
 import com.sun.jna.ptr.ShortByReference;
9
+import com.sun.jna.win32.StdCallLibrary;
9 10
 
10 11
 import java.util.Arrays;
11 12
 import java.util.List;
12 13
 
13 14
 //SDK接口说明,HCNetSDK.dll
14
-public interface HCNetSDK extends Library {
15
+public interface HCNetSDK extends /*StdCallLibrary*/Library {
15 16
 
16 17
         /*** 宏定义 ***/
17 18
     //常量

+ 19 - 0
src/main/java/com/unissoft/pushMsg/AddressModel.java

@@ -0,0 +1,19 @@
1
+package com.unissoft.pushMsg;
2
+
3
+import lombok.Data;
4
+import org.springframework.beans.factory.annotation.Value;
5
+import org.springframework.stereotype.Component;
6
+
7
+/**
8
+ * @author qingsong.han
9
+ * @description:
10
+ * @create 2022-10-14 16:50
11
+ */
12
+@Data
13
+@Component
14
+public class AddressModel {
15
+
16
+    @Value("${address.pushToIntrusion}")
17
+    private String pushToIntrusion;
18
+
19
+}

+ 14 - 0
src/main/java/com/unissoft/pushMsg/AlarmDSService.java

@@ -0,0 +1,14 @@
1
+package com.unissoft.pushMsg;
2
+
3
+import com.sun.jna.Callback;
4
+
5
+/**
6
+ * @author qingsong.han
7
+ * @description:
8
+ * @create 2022-10-14 10:57
9
+ */
10
+public interface AlarmDSService extends Callback {
11
+
12
+    void pushLCommand(Integer lCommand);
13
+
14
+}

+ 41 - 0
src/main/java/com/unissoft/pushMsg/AlarmDSServiceImpl.java

@@ -0,0 +1,41 @@
1
+package com.unissoft.pushMsg;
2
+
3
+import com.unissoft.utils.GetBeanUtil;
4
+import lombok.extern.slf4j.Slf4j;
5
+import org.springframework.beans.factory.annotation.Value;
6
+import org.springframework.stereotype.Service;
7
+import org.springframework.util.LinkedMultiValueMap;
8
+import org.springframework.util.MultiValueMap;
9
+import org.springframework.web.client.RestTemplate;
10
+
11
+import java.net.URL;
12
+import java.util.Date;
13
+
14
+/**
15
+ * @author qingsong.han
16
+ * @description: 推送 异常闯入/入侵
17
+ * @create 2022-10-14 11:03
18
+ */
19
+@Slf4j
20
+@Service
21
+public class AlarmDSServiceImpl implements AlarmDSService {
22
+
23
+    @Override
24
+    public void pushLCommand(Integer lCommand) {
25
+        // MultiValueMap requestEntity
26
+        MultiValueMap<String, Object> requestEntity = new LinkedMultiValueMap<>();
27
+        // 报警类型(异常闯入/入侵) int 4354
28
+        requestEntity.add("sAlarmType", lCommand);
29
+        // 报警时间
30
+        requestEntity.add("alarmNow", new Date());
31
+        log.info("报警类型 int: {}", requestEntity);
32
+
33
+        // 获取spring RestTemple bean
34
+        RestTemplate restTemplate = (RestTemplate) GetBeanUtil.getBean("restTemplate");
35
+        // get push class AddressModel bean
36
+        AddressModel addressModel = (AddressModel) GetBeanUtil.getBean("addressModel");
37
+        // push of post for object
38
+        Object object = restTemplate.postForObject(addressModel.getPushToIntrusion(), requestEntity, Object.class);
39
+        log.info("AlarmDSServiceImpl push alarm result: {}", object);
40
+    }
41
+}

+ 32 - 0
src/main/java/com/unissoft/utils/GetBeanUtil.java

@@ -0,0 +1,32 @@
1
+package com.unissoft.utils;
2
+
3
+import org.springframework.beans.BeansException;
4
+import org.springframework.context.ApplicationContext;
5
+import org.springframework.context.ApplicationContextAware;
6
+import org.springframework.stereotype.Component;
7
+import reactor.util.annotation.Nullable;
8
+
9
+/**
10
+ * @author qingsong.han
11
+ * @description: 多线程获取bean
12
+ * @create 2022-10-14 15:12
13
+ */
14
+@Component
15
+public class GetBeanUtil implements ApplicationContextAware {
16
+    // get bean static constant
17
+    private static ApplicationContext applicationContext;
18
+
19
+    @Override
20
+    public void setApplicationContext(@Nullable ApplicationContext context) throws BeansException {
21
+        GetBeanUtil.applicationContext = context;
22
+    }
23
+
24
+    public static Object getBean(String name) {
25
+        return applicationContext.getBean(name);
26
+    }
27
+
28
+    public static ApplicationContext getApplicationContext() {
29
+        return applicationContext;
30
+    }
31
+
32
+}

+ 4 - 6
src/main/resources/bootstrap.yml

@@ -30,16 +30,14 @@ mqtt:
30 30
   # TODO 正式上线 不使用随机参数(clientId修改会导致无法收到启动前的消息)
31 31
   clientId: mqtt-input-smart-grp-nof-devices-${random.value}
32 32
 # 异常闯入异常,入侵分析
33
-#userDir:
34
-#  windowsDllPath: D:\workspace\smart-grp-nof\lib\HCNetSDK.dll
35
-#  linuxDllPath: /home/nof/lib/libhcnetsdk.so
36 33
 # 设备登录
37 34
 exceptionAlarm:
38
-  # 设备ip地址 DS-7716NX-I4
39
-  deviceIP: 192.168.0.106
35
+  # 设备ip地址 DS-2CD7T27DWD-IZS
36
+  deviceIP: 192.168.0.105
40 37
   # 设备用户名
41 38
   userName: admin
42 39
   # 设备密码
43 40
   password: q1234567
44 41
 # 只支持post
45
-pushAddress: http://localhost:8072/pushIntrusion
42
+address:
43
+  pushToIntrusion: http://localhost:8077/pushIntrusion

BIN
src/main/resources/lib/dom4j.jar


BIN
src/main/resources/lib/examples.jar


BIN
src/main/resources/lib/jna.jar