增加hik梯控操作
This commit is contained in:
BIN
lib/hik/linux64/HCNetSDKCom/libAudioIntercom.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libAudioIntercom.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libHCAlarm.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libHCAlarm.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libHCCoreDevCfg.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libHCCoreDevCfg.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libHCDisplay.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libHCDisplay.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libHCGeneralCfgMgr.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libHCGeneralCfgMgr.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libHCIndustry.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libHCIndustry.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libHCPlayBack.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libHCPlayBack.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libHCPreview.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libHCPreview.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libHCVoiceTalk.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libHCVoiceTalk.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libStreamTransClient.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libStreamTransClient.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libSystemTransform.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libSystemTransform.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libanalyzedata.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libanalyzedata.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/HCNetSDKCom/libiconv2.so
Normal file
BIN
lib/hik/linux64/HCNetSDKCom/libiconv2.so
Normal file
Binary file not shown.
12
lib/hik/linux64/HCNetSDK_Log_Switch.xml
Normal file
12
lib/hik/linux64/HCNetSDK_Log_Switch.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="GB2312"?>
|
||||
<SdkLocal>
|
||||
<SdkLog>
|
||||
<logLevel>3</logLevel><!--req, 1-ERROR, 2-DEBUG, 3-INFO-->
|
||||
<logDirectory>./SDKLOG/</logDirectory><!--the end of the string must be '/'-->
|
||||
<autoDelete>true</autoDelete><!--true: There are less than 10 files in the directory, it will be auto deleted by sdk when the files are more than 10; false: No upper limit to the number of log files-->
|
||||
</SdkLog>
|
||||
<HeartbeatCfg>
|
||||
<Interval>120</Interval> <!-- <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>0<EFBFBD><30>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD><C4AC>ֵ120s<30><73>ȡֵ<C8A1><D6B5>ΧΪ[30, 120] С<><D0A1>30s<30><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ30s<30><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>120s<30><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ120s-->
|
||||
<Count>1</Count> <!-- <20><><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʹ<EFBFBD><CAB9>Ĭ<EFBFBD><C4AC>ֵ1<D6B5><31>-->
|
||||
</HeartbeatCfg>
|
||||
</SdkLocal>
|
BIN
lib/hik/linux64/libAudioRender.so
Normal file
BIN
lib/hik/linux64/libAudioRender.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libHCCore.so
Normal file
BIN
lib/hik/linux64/libHCCore.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libNPQos.so
Normal file
BIN
lib/hik/linux64/libNPQos.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libPlayCtrl.so
Normal file
BIN
lib/hik/linux64/libPlayCtrl.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libSuperRender.so
Normal file
BIN
lib/hik/linux64/libSuperRender.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libcrypto.so.1.1
Normal file
BIN
lib/hik/linux64/libcrypto.so.1.1
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libhcnetsdk.so
Normal file
BIN
lib/hik/linux64/libhcnetsdk.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libhpr.so
Normal file
BIN
lib/hik/linux64/libhpr.so
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libopenal.so.1
Normal file
BIN
lib/hik/linux64/libopenal.so.1
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libssl.so.1.1
Normal file
BIN
lib/hik/linux64/libssl.so.1.1
Normal file
Binary file not shown.
BIN
lib/hik/linux64/libz.so
Normal file
BIN
lib/hik/linux64/libz.so
Normal file
Binary file not shown.
BIN
lib/hik/win64/AudioRender.dll
Normal file
BIN
lib/hik/win64/AudioRender.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/ClientDemo.exe
Normal file
BIN
lib/hik/win64/ClientDemo.exe
Normal file
Binary file not shown.
1
lib/hik/win64/ClientDemoDll/ReadMe.txt
Normal file
1
lib/hik/win64/ClientDemoDll/ReadMe.txt
Normal file
@@ -0,0 +1 @@
|
||||
The dll in this directory<72><79>iconv.dll,libxml2.dll,zlib1.dll,calib.dll<6C><6C>only used in ClientDemo.
|
BIN
lib/hik/win64/ClientDemoDll/calib.dll
Normal file
BIN
lib/hik/win64/ClientDemoDll/calib.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/ClientDemoDll/iconv.dll
Normal file
BIN
lib/hik/win64/ClientDemoDll/iconv.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/ClientDemoDll/libcrypto-1_1-x64.dll
Normal file
BIN
lib/hik/win64/ClientDemoDll/libcrypto-1_1-x64.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/ClientDemoDll/libssl-1_1-x64.dll
Normal file
BIN
lib/hik/win64/ClientDemoDll/libssl-1_1-x64.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/ClientDemoDll/libxml2.dll
Normal file
BIN
lib/hik/win64/ClientDemoDll/libxml2.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/ClientDemoDll/zlib1.dll
Normal file
BIN
lib/hik/win64/ClientDemoDll/zlib1.dll
Normal file
Binary file not shown.
0
lib/hik/win64/DemoLocalCfg.json
Normal file
0
lib/hik/win64/DemoLocalCfg.json
Normal file
25
lib/hik/win64/DeviceCfg.json
Normal file
25
lib/hik/win64/DeviceCfg.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"Devices": [{
|
||||
"ID": 0,
|
||||
"SerialNumber": "DS-K221020240130V010006CHGB5685986",
|
||||
"ChannelNumber": 0,
|
||||
"StartChannel": 1,
|
||||
"AlarmInNum": 0,
|
||||
"AlarmOutNum": 2,
|
||||
"IPChanNum": 0,
|
||||
"MirrorChanNum": 0,
|
||||
"StartMirrorChanNo": 0,
|
||||
"LocalNodeName": "192.168.110.196",
|
||||
"DeviceType": 864,
|
||||
"DiskNum": 0,
|
||||
"LoginUserName": "admin",
|
||||
"LoginUserPwd": "qweasd123",
|
||||
"DeviceIP": "192.168.110.196",
|
||||
"DeviceMultiIP": "0.0.0.0",
|
||||
"DevicePort": 8000,
|
||||
"DeviceName": "",
|
||||
"LoginMode": 0,
|
||||
"Https": 0,
|
||||
"Channels": []
|
||||
}]
|
||||
}
|
BIN
lib/hik/win64/GdiPlus.dll
Normal file
BIN
lib/hik/win64/GdiPlus.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/GdiPlus.lib
Normal file
BIN
lib/hik/win64/GdiPlus.lib
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCCore.dll
Normal file
BIN
lib/hik/win64/HCCore.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCCore.lib
Normal file
BIN
lib/hik/win64/HCCore.lib
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDK.dll
Normal file
BIN
lib/hik/win64/HCNetSDK.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDK.lib
Normal file
BIN
lib/hik/win64/HCNetSDK.lib
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/AnalyzeData.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/AnalyzeData.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/AudioIntercom.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/AudioIntercom.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/AudioRender.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/AudioRender.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCAlarm.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCAlarm.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCAlarm.lib
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCAlarm.lib
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCCoreDevCfg.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCCoreDevCfg.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCDisplay.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCDisplay.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCGeneralCfgMgr.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCGeneralCfgMgr.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCGeneralCfgMgr.lib
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCGeneralCfgMgr.lib
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCIndustry.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCIndustry.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCPlayBack.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCPlayBack.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCPreview.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCPreview.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCPreview.lib
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCPreview.lib
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/HCVoiceTalk.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/HCVoiceTalk.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/OpenAL32.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/OpenAL32.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/StreamTransClient.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/StreamTransClient.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/SystemTransform.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/SystemTransform.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HCNetSDKCom/libiconv2.dll
Normal file
BIN
lib/hik/win64/HCNetSDKCom/libiconv2.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HXVA.dll
Normal file
BIN
lib/hik/win64/HXVA.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/HmMerge.dll
Normal file
BIN
lib/hik/win64/HmMerge.dll
Normal file
Binary file not shown.
0
lib/hik/win64/LocalSensorAdd.dat
Normal file
0
lib/hik/win64/LocalSensorAdd.dat
Normal file
BIN
lib/hik/win64/LocalXml.zip
Normal file
BIN
lib/hik/win64/LocalXml.zip
Normal file
Binary file not shown.
BIN
lib/hik/win64/MP_Render.dll
Normal file
BIN
lib/hik/win64/MP_Render.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/NPQos.dll
Normal file
BIN
lib/hik/win64/NPQos.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/OpenAL32.dll
Normal file
BIN
lib/hik/win64/OpenAL32.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/PlayCtrl.dll
Normal file
BIN
lib/hik/win64/PlayCtrl.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/PlayCtrl.lib
Normal file
BIN
lib/hik/win64/PlayCtrl.lib
Normal file
Binary file not shown.
BIN
lib/hik/win64/SuperRender.dll
Normal file
BIN
lib/hik/win64/SuperRender.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/YUVProcess.dll
Normal file
BIN
lib/hik/win64/YUVProcess.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/hlog.dll
Normal file
BIN
lib/hik/win64/hlog.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/hpr.dll
Normal file
BIN
lib/hik/win64/hpr.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/libcrypto-1_1-x64.dll
Normal file
BIN
lib/hik/win64/libcrypto-1_1-x64.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/libmmd.dll
Normal file
BIN
lib/hik/win64/libmmd.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/libssl-1_1-x64.dll
Normal file
BIN
lib/hik/win64/libssl-1_1-x64.dll
Normal file
Binary file not shown.
BIN
lib/hik/win64/zlib1.dll
Normal file
BIN
lib/hik/win64/zlib1.dll
Normal file
Binary file not shown.
29
pom.xml
29
pom.xml
@@ -58,7 +58,8 @@
|
||||
<warm-flow.version>1.7.3</warm-flow.version>
|
||||
<!-- mq配置 -->
|
||||
<rocketmq.version>2.3.0</rocketmq.version>
|
||||
|
||||
<!-- hik sdk 配置 -->
|
||||
<hik-sdk.version>1.0</hik-sdk.version>
|
||||
<!-- 插件版本 -->
|
||||
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
|
||||
<maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version>
|
||||
@@ -73,8 +74,8 @@
|
||||
<properties>
|
||||
<!-- 环境标识,需要与配置文件的名称相对应 -->
|
||||
<profiles.active>dev</profiles.active>
|
||||
<!-- <nacos.server>127.0.0.1:8848</nacos.server>-->
|
||||
<!-- <logstash.address>127.0.0.1:4560</logstash.address>-->
|
||||
<!-- <nacos.server>127.0.0.1:8848</nacos.server>-->
|
||||
<!-- <logstash.address>127.0.0.1:4560</logstash.address>-->
|
||||
<nacos.server>47.109.37.87:8848</nacos.server>
|
||||
<logstash.address>47.109.37.87:4560</logstash.address>
|
||||
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
|
||||
@@ -92,8 +93,8 @@
|
||||
<properties>
|
||||
<!-- 环境标识,需要与配置文件的名称相对应 -->
|
||||
<profiles.active>dev</profiles.active>
|
||||
<!-- <nacos.server>127.0.0.1:8848</nacos.server>-->
|
||||
<!-- <logstash.address>127.0.0.1:4560</logstash.address>-->
|
||||
<!-- <nacos.server>127.0.0.1:8848</nacos.server>-->
|
||||
<!-- <logstash.address>127.0.0.1:4560</logstash.address>-->
|
||||
<nacos.server>47.109.37.87:8848</nacos.server>
|
||||
<logstash.address>47.109.37.87:4560</logstash.address>
|
||||
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
|
||||
@@ -108,15 +109,15 @@
|
||||
<id>prod</id>
|
||||
<properties>
|
||||
<profiles.active>prod</profiles.active>
|
||||
<!-- <nacos.server>127.0.0.1:8848</nacos.server>-->
|
||||
<!-- <logstash.address>127.0.0.1:4560</logstash.address>-->
|
||||
<!-- <nacos.server>127.0.0.1:8848</nacos.server>-->
|
||||
<!-- <logstash.address>127.0.0.1:4560</logstash.address>-->
|
||||
<nacos.server>47.109.37.87:8848</nacos.server>
|
||||
<logstash.address>47.109.37.87:4560</logstash.address>
|
||||
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
|
||||
<nacos.config.group>DEFAULT_GROUP</nacos.config.group>
|
||||
<nacos.username>nacos</nacos.username>
|
||||
<nacos.password>nacos</nacos.password>
|
||||
<!-- <logstash.address>127.0.0.1:4560</logstash.address>-->
|
||||
<!-- <logstash.address>127.0.0.1:4560</logstash.address>-->
|
||||
|
||||
|
||||
</properties>
|
||||
@@ -376,6 +377,18 @@
|
||||
<version>${mapstruct-plus.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.hik</groupId>
|
||||
<artifactId>examples</artifactId>
|
||||
<version>${hik-sdk.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.hik</groupId>
|
||||
<artifactId>jna</artifactId>
|
||||
<version>${hik-sdk.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--消息队列-->
|
||||
<dependency>
|
||||
<groupId>org.apache.rocketmq</groupId>
|
||||
|
@@ -111,6 +111,16 @@
|
||||
<artifactId>property-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.hik</groupId>
|
||||
<artifactId>examples</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.hik</groupId>
|
||||
<artifactId>jna</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package org.dromara.sis;
|
||||
|
||||
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
|
||||
import org.dromara.sis.sdk.hik.service.SdkBaseServer;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
|
||||
@@ -14,6 +15,8 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt
|
||||
@SpringBootApplication
|
||||
public class SisApplication {
|
||||
public static void main(String[] args) {
|
||||
// 加载hik sdk
|
||||
SdkBaseServer.initSdk();
|
||||
SpringApplication application = new SpringApplication(SisApplication.class);
|
||||
application.setApplicationStartup(new BufferingApplicationStartup(2048));
|
||||
application.run(args);
|
||||
|
10712
ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HCNetSDK.java
Normal file
10712
ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/HCNetSDK.java
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,20 @@
|
||||
package org.dromara.sis.sdk.hik;
|
||||
|
||||
public interface HikApi {
|
||||
|
||||
|
||||
Boolean login(String ip, short port, String user, String psw);
|
||||
|
||||
|
||||
void getAcsStatus(String deviceIp);
|
||||
|
||||
|
||||
Boolean controlGateway(String deviceIp, Integer floorNum, Integer cmd);
|
||||
|
||||
/**
|
||||
* 设备登出
|
||||
*
|
||||
* @param deviceIp 设备ip
|
||||
*/
|
||||
Boolean loginOut(String deviceIp);
|
||||
}
|
@@ -0,0 +1,103 @@
|
||||
package org.dromara.sis.sdk.hik;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.sdk.hik.service.DoorService;
|
||||
import org.dromara.sis.sdk.hik.service.LoginService;
|
||||
import org.dromara.sis.sdk.hik.service.SdkBaseServer;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@Slf4j
|
||||
public class HikApiService {
|
||||
|
||||
private HikApiService() {
|
||||
}
|
||||
|
||||
private static volatile HikApiService instance;
|
||||
|
||||
public static HikApiService getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (HikApiService.class) {
|
||||
if (instance == null) {
|
||||
instance = new HikApiService();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* 缓存设备登录句柄的map
|
||||
*/
|
||||
private static final ConcurrentHashMap<String, Integer> CACHE = new ConcurrentHashMap<>(16);
|
||||
|
||||
/**
|
||||
* 执行hiksdk登录
|
||||
*
|
||||
* @param ip 设备ip
|
||||
* @param port 设备端口
|
||||
* @param user 设备账号
|
||||
* @param psw 设备密码
|
||||
* @return 返回会否登录成功
|
||||
*/
|
||||
public Boolean login(String ip, short port, String user, String psw) {
|
||||
int i = LoginService.loginDevice(ip, port, user, psw);
|
||||
boolean result = (i != SdkBaseServer.LOGIN_FAIL_CODE);
|
||||
if (result) {
|
||||
CACHE.put(ip, i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取梯控主机工作状态
|
||||
*
|
||||
* @param deviceIp 设备ip
|
||||
*/
|
||||
public void getAcsStatus(String deviceIp) {
|
||||
// 获取登录句柄
|
||||
Integer lHandel = CACHE.get(deviceIp);
|
||||
if (lHandel == null) {
|
||||
log.error("设备[{}]不在线, 无法登出。", deviceIp);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程梯控
|
||||
*
|
||||
* @param deviceIp 设备ip
|
||||
* @param floorNum 电梯层数编号 从1开始,-1代表所有
|
||||
* @param cmd 控制指令
|
||||
* 0- 关闭(对于梯控,表示受控),
|
||||
* 1- 打开(对于梯控,表示开门),
|
||||
* 2- 常开(对于梯控,表示自由、通道状态),
|
||||
* 3- 常关(对于梯控,表示禁用),
|
||||
* 4- 恢复(梯控,普通状态),
|
||||
* 5- 访客呼梯(梯控),
|
||||
* 6- 住户呼梯(梯控)
|
||||
*/
|
||||
public Boolean controlGateway(String deviceIp, Integer floorNum, Integer cmd) {
|
||||
// 获取登录句柄
|
||||
Integer lHandel = CACHE.get(deviceIp);
|
||||
if (lHandel == null) {
|
||||
log.error("设备[{}]不在线, 无法进行梯控操作。", deviceIp);
|
||||
return false;
|
||||
}
|
||||
return DoorService.controlGateway(lHandel, floorNum, cmd);
|
||||
}
|
||||
|
||||
public Boolean loginOut(String deviceIp) {
|
||||
Integer lHandel = CACHE.get(deviceIp);
|
||||
if (lHandel == null) {
|
||||
log.error("设备[{}]不在线, 无法登出。", deviceIp);
|
||||
return true;
|
||||
}
|
||||
boolean logout = LoginService.logout(lHandel);
|
||||
if (logout) {
|
||||
CACHE.remove(deviceIp);
|
||||
}
|
||||
return logout;
|
||||
}
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
package org.dromara.sis.sdk.hik.calback;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.sun.jna.Pointer;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.sdk.hik.HCNetSDK;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 设备状态信息的回调
|
||||
* 设备巡查回调
|
||||
*
|
||||
* @author xukai
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class HikDevWorkStateCallBack implements HCNetSDK.DEV_WORK_STATE_CB {
|
||||
|
||||
@Override
|
||||
public boolean invoke(Pointer pUserdata, int iUserID, HCNetSDK.NET_DVR_WORKSTATE_V40 lpWorkState) {
|
||||
if (lpWorkState == null) {
|
||||
log.info("lpWorkState为null");
|
||||
return false;
|
||||
}
|
||||
lpWorkState.read();
|
||||
log.info(JSON.toJSONString(lpWorkState));
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -0,0 +1,57 @@
|
||||
package org.dromara.sis.sdk.hik.common;
|
||||
|
||||
/**
|
||||
* @Author: jiangxin14
|
||||
* @Date: 2024-08-09 14:13
|
||||
*/
|
||||
|
||||
public enum ErrorCode {
|
||||
NET_ERR_TIME_OVERLAP(1900, "时间段重叠"),
|
||||
NET_ERR_HOLIDAY_PLAN_OVERLAP(1901, "假日计划重叠"),
|
||||
NET_ERR_CARDNO_NOT_SORT(1902, "卡号未排序"),
|
||||
NET_ERR_CARDNO_NOT_EXIST(1903, "卡号不存在"),
|
||||
NET_ERR_ILLEGAL_CARDNO(1904, "卡号错误"),
|
||||
NET_ERR_ZONE_ALARM(1905, "防区处于布防状态(参数修改不允许)"),
|
||||
NET_ERR_NOT_SUPPORT_ONE_MORE_CARD ( 1920,"不支持一人多卡"),
|
||||
NET_ERR_DELETE_NO_EXISTENCE_FACE(1921,"删除的人脸不存在"),
|
||||
NET_ERR_OFFLINE_CAPTURING(1929, "离线采集中,无法响应"),
|
||||
NET_DVR_ERR_OUTDOOR_COMMUNICATION(1950, "与门口机通信异常"),
|
||||
NET_DVR_ERR_ROOMNO_UNDEFINED(1951, "未设置房间号"),
|
||||
NET_DVR_ERR_NO_CALLING(1952, "无呼叫"),
|
||||
NET_DVR_ERR_RINGING(1953, "响铃"),
|
||||
NET_DVR_ERR_IS_CALLING_NOW(1954, "正在通话"),
|
||||
NET_DVR_ERR_LOCK_PASSWORD_WRONG(1955, "智能锁密码错误"),
|
||||
NET_DVR_ERR_CONTROL_LOCK_FAILURE(1956, "开关锁失败"),
|
||||
NET_DVR_ERR_CONTROL_LOCK_OVERTIME(1957, "开关锁超时"),
|
||||
NET_DVR_ERR_LOCK_DEVICE_BUSY(1958, "智能锁设备繁忙"),
|
||||
NET_DVR_ERR_UNOPEN_REMOTE_LOCK_FUNCTION(1959, "远程开锁功能未打开");
|
||||
|
||||
|
||||
private final int code;
|
||||
private final String description;
|
||||
|
||||
ErrorCode(int code, String description) {
|
||||
this.code = code;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
// 根据错误码获取描述的方法
|
||||
public static String getDescription(int code) {
|
||||
for (ErrorCode errorCode : ErrorCode.values()) {
|
||||
if (errorCode.getCode() == code) {
|
||||
return errorCode.getDescription();
|
||||
}
|
||||
}
|
||||
return "未知错误码";
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,12 @@
|
||||
package org.dromara.sis.sdk.hik.common;
|
||||
|
||||
public class osSelect {
|
||||
|
||||
public static boolean isLinux() {
|
||||
return System.getProperty("os.name").toLowerCase().contains("linux");
|
||||
}
|
||||
|
||||
public static boolean isWindows() {
|
||||
return System.getProperty("os.name").toLowerCase().contains("windows");
|
||||
}
|
||||
}
|
@@ -0,0 +1,83 @@
|
||||
package org.dromara.sis.sdk.hik.service;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.sdk.hik.HCNetSDK;
|
||||
|
||||
/**
|
||||
* 门禁设备管理:
|
||||
* 1、获取(设置)门禁主机参数
|
||||
* 2、获取门禁主机工作状态
|
||||
*/
|
||||
@Slf4j
|
||||
public class AcsService extends SdkBaseServer {
|
||||
|
||||
/**
|
||||
* 获取(设置)门禁主机参数
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
*/
|
||||
public static boolean acsCfg(int lUserID) {
|
||||
/**获取门禁主机参数*/
|
||||
HCNetSDK.NET_DVR_ACS_CFG struAcsCfg = new HCNetSDK.NET_DVR_ACS_CFG();
|
||||
struAcsCfg.dwSize = struAcsCfg.size();
|
||||
struAcsCfg.write();
|
||||
IntByReference intByReference = new IntByReference(0);
|
||||
boolean b_GetAcsCfg = getHcNetSDK().NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ACS_CFG, 0xFFFFFFFF, struAcsCfg.getPointer(),
|
||||
struAcsCfg.size(), intByReference);
|
||||
if (!b_GetAcsCfg) {
|
||||
log.info("获取门禁主机参数失败,错误码={}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
return false;
|
||||
} else {
|
||||
struAcsCfg.read();
|
||||
log.info("获取门禁主机参数成功,result={}", JSONObject.toJSONString(struAcsCfg));
|
||||
}
|
||||
/**设置门禁主机参数*/
|
||||
struAcsCfg.byShowCardNo = 1; //开启显示卡号
|
||||
struAcsCfg.byVoicePrompt = 0; //关闭语音提示
|
||||
struAcsCfg.byUploadCapPic = 1; //开启联动抓图后,设备上抓拍的图片才会通过报警布防上传,否则没有不上传
|
||||
struAcsCfg.byShowCapPic = 1;
|
||||
struAcsCfg.write();
|
||||
boolean b_SetAcsCfg = getHcNetSDK().NET_DVR_SetDVRConfig(lUserID, HCNetSDK.NET_DVR_SET_ACS_CFG, 0xFFFFFFFF, struAcsCfg.getPointer(), struAcsCfg.size());
|
||||
if (!b_SetAcsCfg) {
|
||||
log.info("设置门禁主机参数,错误码为:{}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
}
|
||||
return b_SetAcsCfg;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取梯控主机工作状态
|
||||
* 梯控楼层状态
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
*/
|
||||
public static HCNetSDK.NET_DVR_ACS_WORK_STATUS_V50 getAcsStatus(int lUserID) {
|
||||
HCNetSDK.NET_DVR_ACS_WORK_STATUS_V50 netDvrAcsWorkStatusV50 = new HCNetSDK.NET_DVR_ACS_WORK_STATUS_V50();
|
||||
netDvrAcsWorkStatusV50.dwSize = netDvrAcsWorkStatusV50.size();
|
||||
netDvrAcsWorkStatusV50.write();
|
||||
IntByReference intByReference = new IntByReference(0);
|
||||
boolean b_GetAcsStatus = getHcNetSDK().NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ACS_WORK_STATUS_V50, 0xFFFFFFFF,
|
||||
netDvrAcsWorkStatusV50.getPointer(), netDvrAcsWorkStatusV50.size(), intByReference);
|
||||
if (!b_GetAcsStatus) {
|
||||
log.info("获取梯控主机工作状态,错误码为:{}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
return null;
|
||||
} else {
|
||||
log.info("获取梯控主机工作状态成功!!!");
|
||||
netDvrAcsWorkStatusV50.read();
|
||||
// for (int i = 0; i < 128; i++) {
|
||||
// int floor = i + 1;
|
||||
// log.info("楼层" + floor + " 继电器开合状态:" + netDvrAcsWorkStatusV50.byDoorLockStatus[i] + "\n"); //门锁状态:0- 正常关,1- 正常开,2- 短路报警,3- 断路报警,4- 异常报警
|
||||
// log.info("楼层" + floor + " 梯控状态:" + netDvrAcsWorkStatusV50.byDoorStatus[i] + "\n"); //门状态(或者梯控的楼层状态):1- 休眠,2- 常开状态(对于梯控,表示自由状态),3- 常闭状态(对于梯控,表示禁用状态),4- 普通状态(对于梯控,表示受控状态)
|
||||
// }
|
||||
// log.info("3.门磁状态:" + netDvrAcsWorkStatusV50.byMagneticStatus[0] + "\n"); //门磁状态,0-正常关,1-正常开,2-短路报警,3-断路报警,4-异常报警
|
||||
// log.info("4.事件报警输入状态:" + netDvrAcsWorkStatusV50.byCaseStatus[0] + "\n"); //事件报警输入状态:0- 无输入,1- 有输入
|
||||
log.info(JSONObject.toJSONString(netDvrAcsWorkStatusV50));
|
||||
return netDvrAcsWorkStatusV50;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,642 @@
|
||||
package org.dromara.sis.sdk.hik.service;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.sdk.hik.HCNetSDK;
|
||||
import org.dromara.sis.sdk.hik.common.ErrorCode;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
|
||||
/**
|
||||
* @create 2021-03-12-13:53
|
||||
* 以卡为中心,先下发卡参数(可以一起下发工号),再根据卡号下发人脸、指纹等参数
|
||||
* 卡管理模块,实现功能:卡下发、卡获取(单张、所有)、卡删除(单张、所有)、卡计划模块设置
|
||||
*/
|
||||
@Slf4j
|
||||
public class CardService extends SdkBaseServer {
|
||||
|
||||
public static short iPlanTemplateNumber;
|
||||
//设备字符集
|
||||
|
||||
/**
|
||||
* 卡下发
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
* @param CardNo 卡号
|
||||
* @param iPlanTemplateNumber 关联门计划模板,计划模板的配置可以参考卡计划模板配置模块,(下发卡前要设置好计划模板)
|
||||
* @throws UnsupportedEncodingException
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
public static void setOneCard(int lUserID, String CardNo, short iPlanTemplateNumber) throws UnsupportedEncodingException, InterruptedException {
|
||||
HCNetSDK.NET_DVR_CARD_COND struCardCond = new HCNetSDK.NET_DVR_CARD_COND();
|
||||
struCardCond.read();
|
||||
struCardCond.dwSize = struCardCond.size();
|
||||
struCardCond.dwCardNum = 1; //下发一张
|
||||
struCardCond.write();
|
||||
Pointer ptrStruCond = struCardCond.getPointer();
|
||||
int m_lSetCardCfgHandle = getHcNetSDK().NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_SET_CARD, ptrStruCond, struCardCond.size(), null, null);
|
||||
if (m_lSetCardCfgHandle == -1) {
|
||||
System.out.println("建立下发卡长连接失败,错误码为" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
System.out.println("建立下发卡长连接成功!");
|
||||
}
|
||||
HCNetSDK.NET_DVR_CARD_RECORD struCardRecord = new HCNetSDK.NET_DVR_CARD_RECORD();
|
||||
struCardRecord.read();
|
||||
struCardRecord.dwSize = struCardRecord.size();
|
||||
for (int i = 0; i < HCNetSDK.ACS_CARD_NO_LEN; i++) {
|
||||
struCardRecord.byCardNo[i] = 0;
|
||||
}
|
||||
for (int i = 0; i < CardNo.length(); i++) {
|
||||
struCardRecord.byCardNo[i] = CardNo.getBytes()[i];
|
||||
}
|
||||
struCardRecord.byCardType = 1; //普通卡
|
||||
struCardRecord.byLeaderCard = 0; //是否为首卡,0-否,1-是
|
||||
struCardRecord.byUserType = 0; //用户类型:0– 普通用户,1- 管理员用户
|
||||
//门权限(梯控的楼层权限、锁权限),数组下标对应门编号-1,值为1表示有权限,0表示无权限
|
||||
struCardRecord.byDoorRight[0] = 1; //1层有权限
|
||||
struCardRecord.byDoorRight[1] = 1; //2层有权限
|
||||
struCardRecord.wCardRightPlan[0] = iPlanTemplateNumber; //关联门计划模板,计划模板的配置可以参考卡计划模板配置模块,(下发卡前要设置好计划模板)
|
||||
struCardRecord.struValid.byEnable = 1; //卡有效期使能,下面是卡有效期从2000-1-1 11:11:11到2030-1-1 11:11:11
|
||||
struCardRecord.struValid.byBeginTimeFlag = 1;
|
||||
struCardRecord.struValid.byEnableTimeFlag = 1;
|
||||
struCardRecord.struValid.struBeginTime.wYear = 2023;
|
||||
struCardRecord.struValid.struBeginTime.byMonth = 1;
|
||||
struCardRecord.struValid.struBeginTime.byDay = 1;
|
||||
struCardRecord.struValid.struBeginTime.byHour = 0;
|
||||
struCardRecord.struValid.struBeginTime.byMinute = 0;
|
||||
struCardRecord.struValid.struBeginTime.bySecond = 0;
|
||||
struCardRecord.struValid.struEndTime.wYear = 2030;
|
||||
struCardRecord.struValid.struEndTime.byMonth = 12;
|
||||
struCardRecord.struValid.struEndTime.byDay = 30;
|
||||
struCardRecord.struValid.struEndTime.byHour = 23;
|
||||
struCardRecord.struValid.struEndTime.byMinute = 59;
|
||||
struCardRecord.struValid.struEndTime.bySecond = 59;
|
||||
|
||||
struCardRecord.write();
|
||||
HCNetSDK.NET_DVR_CARD_STATUS struCardStatus = new HCNetSDK.NET_DVR_CARD_STATUS();
|
||||
struCardStatus.read();
|
||||
struCardStatus.dwSize = struCardStatus.size();
|
||||
struCardStatus.write();
|
||||
IntByReference pInt = new IntByReference(0);
|
||||
while (true) {
|
||||
int dwState = getHcNetSDK().NET_DVR_SendWithRecvRemoteConfig(m_lSetCardCfgHandle, struCardRecord.getPointer(), struCardRecord.size(), struCardStatus.getPointer(), struCardStatus.size(), pInt);
|
||||
struCardStatus.read();
|
||||
if (dwState == -1) {
|
||||
System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
|
||||
System.out.println("配置等待");
|
||||
Thread.sleep(10);
|
||||
continue;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
|
||||
System.out.println("下发卡失败, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 错误信息:" + ErrorCode.getDescription(struCardStatus.dwErrorCode));
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
|
||||
System.out.println("下发卡异常, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 错误信息:" + ErrorCode.getDescription(struCardStatus.dwErrorCode));
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
|
||||
if (struCardStatus.dwErrorCode != 0) {
|
||||
System.out.println("下发卡成功,但是错误码信息: " + ErrorCode.getDescription(struCardStatus.dwErrorCode) + ", 卡号:" + new String(struCardStatus.byCardNo).trim());
|
||||
} else {
|
||||
System.out.println("下发卡成功, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 状态:" + struCardStatus.byStatus);
|
||||
}
|
||||
continue;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
|
||||
System.out.println("下发卡完成");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!getHcNetSDK().NET_DVR_StopRemoteConfig(m_lSetCardCfgHandle)) {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
} else {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口成功\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量卡号下发
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
* @param CardNo 卡号
|
||||
* @param iEmployeeNo 工号
|
||||
* @param iNum 下发张数
|
||||
* @throws UnsupportedEncodingException
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
public static void setMultiCard(int lUserID, String[] CardNo, int[] iEmployeeNo, int iNum) throws UnsupportedEncodingException, InterruptedException {
|
||||
HCNetSDK.NET_DVR_CARD_COND struCardCond = new HCNetSDK.NET_DVR_CARD_COND();
|
||||
struCardCond.read();
|
||||
struCardCond.dwSize = struCardCond.size();
|
||||
struCardCond.dwCardNum = iNum; //下发张数
|
||||
struCardCond.write();
|
||||
Pointer ptrStruCond = struCardCond.getPointer();
|
||||
int m_lSetMultiCardCfgHandle = getHcNetSDK().NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_SET_CARD, ptrStruCond, struCardCond.size(), null, null);
|
||||
if (m_lSetMultiCardCfgHandle == -1) {
|
||||
System.out.println("建立下发卡长连接失败,错误码为" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
System.out.println("建立下发卡长连接成功!");
|
||||
}
|
||||
HCNetSDK.NET_DVR_CARD_RECORD[] struCardRecord = (HCNetSDK.NET_DVR_CARD_RECORD[]) new HCNetSDK.NET_DVR_CARD_RECORD().toArray(iNum);
|
||||
HCNetSDK.NET_DVR_CARD_STATUS struCardStatus = new HCNetSDK.NET_DVR_CARD_STATUS();
|
||||
struCardStatus.read();
|
||||
struCardStatus.dwSize = struCardStatus.size();
|
||||
struCardStatus.write();
|
||||
IntByReference pInt = new IntByReference(0);
|
||||
for (int i = 0; i < iNum; i++) {
|
||||
struCardRecord[i].read();
|
||||
struCardRecord[i].dwSize = struCardRecord[i].size();
|
||||
for (int j = 0; j < HCNetSDK.ACS_CARD_NO_LEN; j++) {
|
||||
struCardRecord[i].byCardNo[j] = 0;
|
||||
}
|
||||
System.arraycopy(CardNo[i].getBytes(), 0, struCardRecord[i].byCardNo, 0, CardNo[i].getBytes().length);
|
||||
struCardRecord[i].byCardType = 1; //普通卡
|
||||
struCardRecord[i].byLeaderCard = 0; //是否为首卡,0-否,1-是
|
||||
struCardRecord[i].byUserType = 0;
|
||||
struCardRecord[i].byDoorRight[0] = 1; //门1有权限
|
||||
struCardRecord[i].wCardRightPlan[0] = iPlanTemplateNumber;//关联门计划模板,使用了前面配置的计划模板
|
||||
struCardRecord[i].struValid.byEnable = 1; //卡有效期使能,下面是卡有效期从2000-1-1 11:11:11到2030-1-1 11:11:11
|
||||
struCardRecord[i].struValid.struBeginTime.wYear = 2000;
|
||||
struCardRecord[i].struValid.struBeginTime.byMonth = 1;
|
||||
struCardRecord[i].struValid.struBeginTime.byDay = 1;
|
||||
struCardRecord[i].struValid.struBeginTime.byHour = 11;
|
||||
struCardRecord[i].struValid.struBeginTime.byMinute = 11;
|
||||
struCardRecord[i].struValid.struBeginTime.bySecond = 11;
|
||||
struCardRecord[i].struValid.struEndTime.wYear = 2030;
|
||||
struCardRecord[i].struValid.struEndTime.byMonth = 1;
|
||||
struCardRecord[i].struValid.struEndTime.byDay = 1;
|
||||
struCardRecord[i].struValid.struEndTime.byHour = 11;
|
||||
struCardRecord[i].struValid.struEndTime.byMinute = 11;
|
||||
struCardRecord[i].struValid.struEndTime.bySecond = 11;
|
||||
struCardRecord[i].dwEmployeeNo = iEmployeeNo[i]; //工号
|
||||
if ((iCharEncodeType == 0) || (iCharEncodeType == 1) || (iCharEncodeType == 2)) {
|
||||
byte[] strCardName = "张三".getBytes("GBK"); //姓名
|
||||
for (int j = 0; j < HCNetSDK.NAME_LEN; j++) {
|
||||
struCardRecord[i].byName[j] = 0;
|
||||
}
|
||||
System.arraycopy(strCardName, 0, struCardRecord[i].byName, 0, strCardName.length);
|
||||
}
|
||||
if (iCharEncodeType == 6) {
|
||||
byte[] strCardName = "张三".getBytes("UTF-8"); //姓名
|
||||
for (int j = 0; j < HCNetSDK.NAME_LEN; j++) {
|
||||
struCardRecord[i].byName[j] = 0;
|
||||
}
|
||||
System.arraycopy(strCardName, 0, struCardRecord[i].byName, 0, strCardName.length);
|
||||
}
|
||||
struCardRecord[i].write();
|
||||
int dwState = getHcNetSDK().NET_DVR_SendWithRecvRemoteConfig(m_lSetMultiCardCfgHandle, struCardRecord[i].getPointer(), struCardRecord[i].size(), struCardStatus.getPointer(), struCardStatus.size(), pInt);
|
||||
struCardStatus.read();
|
||||
if (dwState == -1) {
|
||||
System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
|
||||
System.out.println("下发卡失败, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 错误码信息:" + ErrorCode.getDescription(struCardStatus.dwErrorCode));
|
||||
//可以继续下发下一个
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
|
||||
System.out.println("下发卡异常, 卡号: " + new String(struCardStatus.byCardNo).trim() + ",错误码信息:" + ErrorCode.getDescription(struCardStatus.dwErrorCode));
|
||||
//异常是长连接异常,不能继续下发后面的数据,需要重新建立长连接
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
|
||||
if (struCardStatus.dwErrorCode != 0) {
|
||||
System.out.println("下发卡失败,错误码信息:" + ErrorCode.getDescription(struCardStatus.dwErrorCode) + ", 卡号:" + new String(struCardStatus.byCardNo).trim());
|
||||
} else {
|
||||
System.out.println("下发卡成功, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 状态:" + struCardStatus.byStatus);
|
||||
}
|
||||
//可以继续下发下一个
|
||||
} else {
|
||||
System.out.println("其他状态:" + dwState);
|
||||
}
|
||||
}
|
||||
if (!getHcNetSDK().NET_DVR_StopRemoteConfig(m_lSetMultiCardCfgHandle)) {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
} else {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口成功\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取(查询)一张卡
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
* @param CardNo 卡号
|
||||
*/
|
||||
public static void getOneCard(int lUserID, String CardNo) {
|
||||
HCNetSDK.NET_DVR_CARD_COND struCardCond = new HCNetSDK.NET_DVR_CARD_COND();
|
||||
struCardCond.read();
|
||||
struCardCond.dwSize = struCardCond.size();
|
||||
struCardCond.dwCardNum = 1; //查询一个卡参数
|
||||
struCardCond.write();
|
||||
Pointer ptrStruCond = struCardCond.getPointer();
|
||||
int m_lGetCardCfgHandle = getHcNetSDK().NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_GET_CARD, ptrStruCond, struCardCond.size(), null, null);
|
||||
if (m_lGetCardCfgHandle == -1) {
|
||||
System.out.println("建立查询卡参数长连接失败,错误码为:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
System.out.println("建立查询卡参数长连接成功!");
|
||||
}
|
||||
//查找指定卡号的参数,需要下发查找的卡号条件
|
||||
HCNetSDK.NET_DVR_CARD_SEND_DATA struCardNo = new HCNetSDK.NET_DVR_CARD_SEND_DATA();
|
||||
struCardNo.read();
|
||||
struCardNo.dwSize = struCardNo.size();
|
||||
for (int i = 0; i < HCNetSDK.ACS_CARD_NO_LEN; i++) {
|
||||
struCardNo.byCardNo[i] = 0;
|
||||
}
|
||||
for (int i = 0; i < CardNo.length(); i++) {
|
||||
struCardNo.byCardNo[i] = CardNo.getBytes()[i];
|
||||
}
|
||||
struCardNo.write();
|
||||
HCNetSDK.NET_DVR_CARD_RECORD struCardRecord = new HCNetSDK.NET_DVR_CARD_RECORD();
|
||||
struCardRecord.read();
|
||||
IntByReference pInt = new IntByReference(0);
|
||||
while (true) {
|
||||
int dwState = getHcNetSDK().NET_DVR_SendWithRecvRemoteConfig(m_lGetCardCfgHandle, struCardNo.getPointer(), struCardNo.size(),
|
||||
struCardRecord.getPointer(), struCardRecord.size(), pInt);
|
||||
struCardRecord.read();
|
||||
if (dwState == -1) {
|
||||
System.out.println("NET_DVR_SendWithRecvRemoteConfig查询卡参数调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
|
||||
System.out.println("配置等待");
|
||||
try {
|
||||
Thread.sleep(10);
|
||||
} catch (InterruptedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
continue;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
|
||||
System.out.println("获取卡参数失败, 卡号: " + CardNo);
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
|
||||
System.out.println("获取卡参数异常, 卡号: " + CardNo);
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
|
||||
try {
|
||||
String strName = "";
|
||||
if ((iCharEncodeType == 0) || (iCharEncodeType == 1) || (iCharEncodeType == 2)) {
|
||||
strName = new String(struCardRecord.byName, "GBK").trim();
|
||||
}
|
||||
if (iCharEncodeType == 6) {
|
||||
strName = new String(struCardRecord.byName, "UTF-8").trim();
|
||||
}
|
||||
//获取的卡信息打印
|
||||
System.out.println("获取卡参数成功, 卡号: " + new String(struCardRecord.byCardNo).trim()
|
||||
+ ", 卡类型:" + struCardRecord.byCardType
|
||||
+ ", 姓名:" + strName + ",卡计划模板:" + Short.parseShort(String.valueOf(struCardRecord.wCardRightPlan[0])));
|
||||
System.out.println("是否限制起始时间的标志byBeginTimeFlag :" + struCardRecord.struValid.byEnableTimeFlag);
|
||||
System.out.println("是否限制终止时间的标志byEnableTimeFlag :" + struCardRecord.struValid.byBeginTimeFlag);
|
||||
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
|
||||
System.out.println("获取卡参数完成");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!getHcNetSDK().NET_DVR_StopRemoteConfig(m_lGetCardCfgHandle)) {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
} else {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口成功\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有卡
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
*/
|
||||
public static void getAllCard(int lUserID) {
|
||||
HCNetSDK.NET_DVR_CARD_COND struCardCond = new HCNetSDK.NET_DVR_CARD_COND();
|
||||
struCardCond.read();
|
||||
struCardCond.dwSize = struCardCond.size();
|
||||
struCardCond.dwCardNum = 0xffffffff; //查询所有卡
|
||||
struCardCond.write();
|
||||
Pointer ptrStruCond = struCardCond.getPointer();
|
||||
int m_lGetAllCardCfgHandle = getHcNetSDK().NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_GET_CARD, ptrStruCond, struCardCond.size(), null, null);
|
||||
if (m_lGetAllCardCfgHandle == -1) {
|
||||
System.out.println("建立查询卡长连接失败,错误码为" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
System.out.println("建立查询卡长连接成功!");
|
||||
}
|
||||
HCNetSDK.NET_DVR_CARD_RECORD struCardRecord = new HCNetSDK.NET_DVR_CARD_RECORD();
|
||||
struCardRecord.read();
|
||||
struCardRecord.dwSize = struCardRecord.size();
|
||||
struCardRecord.write();
|
||||
IntByReference pInt = new IntByReference(0);
|
||||
while (true) {
|
||||
int dwState = getHcNetSDK().NET_DVR_GetNextRemoteConfig(m_lGetAllCardCfgHandle, struCardRecord.getPointer(), struCardRecord.size());
|
||||
struCardRecord.read();
|
||||
if (dwState == -1) {
|
||||
System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
|
||||
System.out.println("配置等待");
|
||||
try {
|
||||
Thread.sleep(10);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
continue;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
|
||||
System.out.println("获取卡参数失败");
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
|
||||
System.out.println("获取卡参数异常");
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
|
||||
try {
|
||||
String strName = "";
|
||||
if ((iCharEncodeType == 0) || (iCharEncodeType == 1) || (iCharEncodeType == 2)) {
|
||||
strName = new String(struCardRecord.byName, "GBK").trim();
|
||||
}
|
||||
if (iCharEncodeType == 6) {
|
||||
strName = new String(struCardRecord.byName, "UTF-8").trim();
|
||||
}
|
||||
//获取的卡信息打印
|
||||
System.out.println("获取卡参数成功, 卡号: " + new String(struCardRecord.byCardNo).trim()
|
||||
+ ", 卡类型:" + struCardRecord.byCardType
|
||||
+ ", 姓名:" + strName);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
|
||||
System.out.println("获取卡参数完成");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!getHcNetSDK().NET_DVR_StopRemoteConfig(m_lGetAllCardCfgHandle)) {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
} else {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口成功\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除单张卡(删除单张卡号之前要先删除这张卡关联的人脸和指纹信息)
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
* @param CardNo 卡号
|
||||
* @throws UnsupportedEncodingException
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
public static void delOneCard(int lUserID, String CardNo) throws UnsupportedEncodingException, InterruptedException {
|
||||
HCNetSDK.NET_DVR_CARD_COND struCardCond = new HCNetSDK.NET_DVR_CARD_COND();
|
||||
struCardCond.read();
|
||||
struCardCond.dwSize = struCardCond.size();
|
||||
struCardCond.dwCardNum = 1; //删除一张卡号
|
||||
struCardCond.write();
|
||||
Pointer ptrStruCond = struCardCond.getPointer();
|
||||
int m_lDelCardCfgHandle = getHcNetSDK().NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_DEL_CARD, ptrStruCond, struCardCond.size(), null, null);
|
||||
if (m_lDelCardCfgHandle == -1) {
|
||||
System.out.println("建立删除卡长连接失败,错误码为" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
System.out.println("建立删除卡长连接成功!");
|
||||
}
|
||||
HCNetSDK.NET_DVR_CARD_SEND_DATA struCardData = new HCNetSDK.NET_DVR_CARD_SEND_DATA();
|
||||
struCardData.read();
|
||||
struCardData.dwSize = struCardData.size();
|
||||
for (int i = 0; i < HCNetSDK.ACS_CARD_NO_LEN; i++) {
|
||||
struCardData.byCardNo[i] = 0;
|
||||
}
|
||||
for (int i = 0; i < CardNo.length(); i++) {
|
||||
struCardData.byCardNo[i] = CardNo.getBytes()[i];
|
||||
}
|
||||
struCardData.write();
|
||||
HCNetSDK.NET_DVR_CARD_STATUS struCardStatus = new HCNetSDK.NET_DVR_CARD_STATUS();
|
||||
struCardStatus.read();
|
||||
struCardStatus.dwSize = struCardStatus.size();
|
||||
struCardStatus.write();
|
||||
IntByReference pInt = new IntByReference(0);
|
||||
while (true) {
|
||||
int dwState = getHcNetSDK().NET_DVR_SendWithRecvRemoteConfig(m_lDelCardCfgHandle, struCardData.getPointer(), struCardData.size(), struCardStatus.getPointer(), struCardStatus.size(), pInt);
|
||||
struCardStatus.read();
|
||||
if (dwState == -1) {
|
||||
System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
|
||||
System.out.println("配置等待");
|
||||
Thread.sleep(10);
|
||||
continue;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
|
||||
System.out.println("删除卡失败, 卡号: " + new String(struCardStatus.byCardNo).trim() + ",错误码信息:" + ErrorCode.getDescription(struCardStatus.dwErrorCode));
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
|
||||
System.out.println("删除卡异常, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 错误码信息:" + ErrorCode.getDescription(struCardStatus.dwErrorCode));
|
||||
break;
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
|
||||
if (struCardStatus.dwErrorCode != 0) {
|
||||
System.out.println("删除卡成功,但是错误码信息:" + ErrorCode.getDescription(struCardStatus.dwErrorCode) + ", 卡号:" + new String(struCardStatus.byCardNo).trim());
|
||||
} else {
|
||||
System.out.println("删除卡成功, 卡号: " + new String(struCardStatus.byCardNo).trim() + ", 状态:" + struCardStatus.byStatus);
|
||||
}
|
||||
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
|
||||
System.out.println("删除卡完成");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!getHcNetSDK().NET_DVR_StopRemoteConfig(m_lDelCardCfgHandle)) {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
} else {
|
||||
System.out.println("NET_DVR_StopRemoteConfig接口成功\n");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设备中要清除所有已经下发的卡号
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
*/
|
||||
public static void cleanCardInfo(int lUserID) {
|
||||
//清空所有卡号
|
||||
HCNetSDK.NET_DVR_ACS_PARAM_TYPE struAcsPapamType = new HCNetSDK.NET_DVR_ACS_PARAM_TYPE();
|
||||
struAcsPapamType.read();
|
||||
struAcsPapamType.dwSize = struAcsPapamType.size();
|
||||
struAcsPapamType.dwParamType = HCNetSDK.ACS_PARAM_CARD; //清空卡参数
|
||||
struAcsPapamType.wLocalControllerID = 0; // 就地控制器序号[1,255],0代表门禁主机
|
||||
struAcsPapamType.write();
|
||||
boolean b_AcsCard = getHcNetSDK().NET_DVR_RemoteControl(lUserID, HCNetSDK.NET_DVR_CLEAR_ACS_PARAM, struAcsPapamType.getPointer(), struAcsPapamType.size());
|
||||
if (!b_AcsCard) {
|
||||
System.out.println("清空卡号错误,错误码为" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
System.out.println("清空卡号成功");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 卡计划模板配置
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
* @param iPlanTemplateNumber 计划模板编号,从1开始,最大值从门禁能力集获取
|
||||
*/
|
||||
public static void setCardTemplate(int lUserID, int iPlanTemplateNumber) {
|
||||
//设置卡权限计划模板参数
|
||||
HCNetSDK.NET_DVR_PLAN_TEMPLATE_COND struPlanCond = new HCNetSDK.NET_DVR_PLAN_TEMPLATE_COND();
|
||||
struPlanCond.dwSize = struPlanCond.size();
|
||||
struPlanCond.dwPlanTemplateNumber = iPlanTemplateNumber;//计划模板编号,从1开始,最大值从门禁能力集获取
|
||||
struPlanCond.wLocalControllerID = 0;//就地控制器序号[1,64],0表示门禁主机
|
||||
struPlanCond.write();
|
||||
HCNetSDK.NET_DVR_PLAN_TEMPLATE struPlanTemCfg = new HCNetSDK.NET_DVR_PLAN_TEMPLATE();
|
||||
struPlanTemCfg.dwSize = struPlanTemCfg.size();
|
||||
struPlanTemCfg.byEnable = 1; //是否使能:0- 否,1- 是
|
||||
struPlanTemCfg.dwWeekPlanNo = 2;//周计划编号,0表示无效
|
||||
struPlanTemCfg.dwHolidayGroupNo[0] = 0;//假日组编号,按值表示,采用紧凑型排列,中间遇到0则后续无效
|
||||
byte[] byTemplateName;
|
||||
try {
|
||||
byTemplateName = "CardTemplatePlan_2".getBytes("GBK");
|
||||
//计划模板名称
|
||||
for (int i = 0; i < HCNetSDK.NAME_LEN; i++) {
|
||||
struPlanTemCfg.byTemplateName[i] = 0;
|
||||
}
|
||||
System.arraycopy(byTemplateName, 0, struPlanTemCfg.byTemplateName, 0, byTemplateName.length);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
struPlanTemCfg.write();
|
||||
IntByReference pInt = new IntByReference(0);
|
||||
Pointer lpStatusList = pInt.getPointer();
|
||||
boolean b = getHcNetSDK().NET_DVR_SetDeviceConfig(
|
||||
lUserID,
|
||||
HCNetSDK.NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50,
|
||||
1,
|
||||
struPlanCond.getPointer(),
|
||||
struPlanCond.size(),
|
||||
lpStatusList,
|
||||
struPlanTemCfg.getPointer(),
|
||||
struPlanTemCfg.size()
|
||||
);
|
||||
if (!b) {
|
||||
System.out.println("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50失败,错误号:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
}
|
||||
System.out.println("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50成功!");
|
||||
//获取卡权限周计划参数
|
||||
HCNetSDK.NET_DVR_WEEK_PLAN_COND struWeekPlanCond = new HCNetSDK.NET_DVR_WEEK_PLAN_COND();
|
||||
struWeekPlanCond.dwSize = struWeekPlanCond.size();
|
||||
struWeekPlanCond.dwWeekPlanNumber = 2;
|
||||
struWeekPlanCond.wLocalControllerID = 0;
|
||||
HCNetSDK.NET_DVR_WEEK_PLAN_CFG struWeekPlanCfg = new HCNetSDK.NET_DVR_WEEK_PLAN_CFG();
|
||||
struWeekPlanCond.write();
|
||||
struWeekPlanCfg.write();
|
||||
Pointer lpCond = struWeekPlanCond.getPointer();
|
||||
Pointer lpInbuferCfg = struWeekPlanCfg.getPointer();
|
||||
boolean b2 = getHcNetSDK().NET_DVR_GetDeviceConfig(lUserID, HCNetSDK.NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size());
|
||||
if (!b2) {
|
||||
System.out.println("NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
}
|
||||
struWeekPlanCfg.read();
|
||||
struWeekPlanCfg.byEnable = 1; //是否使能:0- 否,1- 是
|
||||
/**避免时间段交叉,先初始化, 七天八小时*/
|
||||
for (int i = 0; i < 7; i++) {
|
||||
for (int j = 0; j < 8; j++) {
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].byEnable = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byHour = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byMinute = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.bySecond = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byHour = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byMinute = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.bySecond = 0;
|
||||
}
|
||||
}
|
||||
/**一周7天,全天24小时*/
|
||||
for (int i = 0; i < 7; i++) {
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].byEnable = 1;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 14;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 16;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 0;
|
||||
}
|
||||
/**一周7天,每天设置2个时间段*/
|
||||
/*for(int i=0;i<7;i++)
|
||||
{
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].byEnable = 1;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 11;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 59;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 59;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].byEnable = 1;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byHour = 13;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byMinute = 30;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.bySecond = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byHour = 19;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byMinute = 59;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.bySecond = 59;
|
||||
}*/
|
||||
struWeekPlanCfg.write();
|
||||
//设置卡权限周计划参数
|
||||
boolean b1 = getHcNetSDK().NET_DVR_SetDeviceConfig(lUserID, HCNetSDK.NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size());
|
||||
if (!b1) {
|
||||
System.out.println("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:" + getHcNetSDK().NET_DVR_GetLastError());
|
||||
} else {
|
||||
System.out.println("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50成功!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取/设置事件卡号联动配置参数
|
||||
*
|
||||
* @param userID 登录设备句柄ID
|
||||
*/
|
||||
public static void SetEventCardLingageCfg(int userID) {
|
||||
HCNetSDK.NET_DVR_EVENT_CARD_LINKAGE_COND struEventCardLinkCond = new HCNetSDK.NET_DVR_EVENT_CARD_LINKAGE_COND();
|
||||
struEventCardLinkCond.dwSize = struEventCardLinkCond.size();
|
||||
struEventCardLinkCond.dwEventID = 1;
|
||||
struEventCardLinkCond.wLocalControllerID = 0;
|
||||
struEventCardLinkCond.write();
|
||||
HCNetSDK.NET_DVR_EVENT_LINKAGE_CARD_CFG_V51 netDvrEventCardLinkageCfgV51 = new HCNetSDK.NET_DVR_EVENT_LINKAGE_CARD_CFG_V51();
|
||||
netDvrEventCardLinkageCfgV51.read();
|
||||
netDvrEventCardLinkageCfgV51.dwSize = netDvrEventCardLinkageCfgV51.size();
|
||||
netDvrEventCardLinkageCfgV51.write();
|
||||
Pointer lpCond1 = struEventCardLinkCond.getPointer();
|
||||
Pointer lpInbuferCfg1 = netDvrEventCardLinkageCfgV51.getPointer();
|
||||
IntByReference intByReference = new IntByReference(0);
|
||||
Pointer lpStatusList1 = intByReference.getPointer();
|
||||
boolean b_GetCfg = getHcNetSDK().NET_DVR_GetDeviceConfig(userID, HCNetSDK.NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V51, 1,
|
||||
lpCond1, struEventCardLinkCond.size(), lpStatusList1, lpInbuferCfg1, netDvrEventCardLinkageCfgV51.size());
|
||||
if (b_GetCfg) {
|
||||
System.out.println("获取事件/卡号联动配置参数成功");
|
||||
netDvrEventCardLinkageCfgV51.uLinkageInfo.setType(HCNetSDK.NET_DVR_EVENT_LINKAGE_INFO.class);
|
||||
netDvrEventCardLinkageCfgV51.read();
|
||||
System.out.printf("是否联动抓拍: %d\n", netDvrEventCardLinkageCfgV51.byCapturePic);
|
||||
System.out.printf("事件源 ID: %d\n", netDvrEventCardLinkageCfgV51.dwEventSourceID);
|
||||
System.out.printf("事件联动参数-事件主类型: %s\n", netDvrEventCardLinkageCfgV51.uLinkageInfo.struEventLinkage.wMainEventType);
|
||||
System.out.printf("事件联动参数-事件次类型: %s\n", netDvrEventCardLinkageCfgV51.uLinkageInfo.struEventLinkage.wSubEventType);
|
||||
} else {
|
||||
System.out.println("获取事件/卡号联动配置参数失败,错误码为 " + getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
}
|
||||
|
||||
netDvrEventCardLinkageCfgV51.dwEventSourceID = 1;
|
||||
netDvrEventCardLinkageCfgV51.byProMode = 0;
|
||||
netDvrEventCardLinkageCfgV51.byCapturePic = 1;//联动抓图
|
||||
netDvrEventCardLinkageCfgV51.byRecordVideo = 0;
|
||||
netDvrEventCardLinkageCfgV51.byMainDevStopBuzzer = 0;
|
||||
netDvrEventCardLinkageCfgV51.wAudioDisplayID = 0;
|
||||
netDvrEventCardLinkageCfgV51.byAudioDisplayMode = 0;
|
||||
netDvrEventCardLinkageCfgV51.uLinkageInfo.struEventLinkage.wMainEventType = 3;//事件主类型,0-设备事件,1-报警输入事件,2-门事件,3-读卡器事件
|
||||
netDvrEventCardLinkageCfgV51.uLinkageInfo.struEventLinkage.wSubEventType = 25;//EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_PASS;
|
||||
struEventCardLinkCond.dwEventID = 1;
|
||||
struEventCardLinkCond.wLocalControllerID = 0;
|
||||
struEventCardLinkCond.write();
|
||||
netDvrEventCardLinkageCfgV51.write();
|
||||
boolean b = getHcNetSDK().NET_DVR_SetDeviceConfig(userID, HCNetSDK.NET_DVR_SET_EVENT_CARD_LINKAGE_CFG_V51, 1, lpCond1, struEventCardLinkCond.size(),
|
||||
lpStatusList1, lpInbuferCfg1, netDvrEventCardLinkageCfgV51.size());
|
||||
if (!b) {
|
||||
int iErr = getHcNetSDK().NET_DVR_GetLastError();
|
||||
System.out.println("设置事件/卡号联动配置参数失败,错误码为" + iErr);
|
||||
} else {
|
||||
System.out.println("设置事件/卡号联动配置参数成功");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,191 @@
|
||||
package org.dromara.sis.sdk.hik.service;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.sdk.hik.HCNetSDK;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
/**
|
||||
* 梯控参数配置、梯控计划模板配置,远程梯控
|
||||
*
|
||||
* @create 2021-03-11-14:12
|
||||
*/
|
||||
@Slf4j
|
||||
public class DoorService extends SdkBaseServer {
|
||||
|
||||
/**
|
||||
* 获取梯控楼层参数
|
||||
*
|
||||
* @param lUserID
|
||||
* @param floor 楼层编号
|
||||
*/
|
||||
public static void GetAndSetFloorCfg(int lUserID, int floor) {
|
||||
/**获取梯控楼层参数*/
|
||||
HCNetSDK.NET_DVR_DOOR_CFG struFloorCfg = new HCNetSDK.NET_DVR_DOOR_CFG();
|
||||
struFloorCfg.dwSize = struFloorCfg.size();
|
||||
struFloorCfg.write();
|
||||
IntByReference intByReference = new IntByReference(0);
|
||||
boolean b_Get = getHcNetSDK().NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_DOOR_CFG, 1, struFloorCfg.getPointer(),
|
||||
struFloorCfg.size(), intByReference);
|
||||
if (!b_Get) {
|
||||
log.info("获取梯控楼层参数,错误码为:{}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
log.info("获取梯控楼层参数成功");
|
||||
struFloorCfg.read();
|
||||
/**
|
||||
* 楼层继电器动作时间:普通卡刷卡后,继电器闭合时间。即刷卡授权后可使用电梯按钮的时间。默认5秒。
|
||||
* 梯控访客延迟时间:访客呼梯后,访客可使用电梯按钮的时间。默认5分钟。
|
||||
*/
|
||||
log.info("楼层名称:{}", new String(struFloorCfg.byDoorName).trim());
|
||||
log.info("楼层继电器动作时间: {}", struFloorCfg.byOpenDuration);
|
||||
log.info("关门延迟时间: {}", struFloorCfg.byDisabledOpenDuration);
|
||||
log.info("梯控访客延迟时间: {}", struFloorCfg.byLadderControlDelayTime);
|
||||
}
|
||||
|
||||
/**设置梯控楼层参数*/
|
||||
struFloorCfg.byDoorName = "floor111".getBytes();
|
||||
struFloorCfg.write();
|
||||
boolean b_Set = getHcNetSDK().NET_DVR_SetDVRConfig(lUserID, HCNetSDK.NET_DVR_SET_DOOR_CFG, 1, struFloorCfg.getPointer(), struFloorCfg.size());
|
||||
if (!b_Set) {
|
||||
log.info("设置梯控楼层参数成功,错误码为:{}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
} else {
|
||||
log.info("设置梯控楼层参数成功!!!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 梯控计划模板配置
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
* @param iDoorTemplateNo 计划模板编号,为0表示取消关联,恢复默认状态(普通状态)
|
||||
*/
|
||||
public static void doorTemplate(int lUserID, int iDoorTemplateNo, int floorID) {
|
||||
//设置梯控计划参数:对不同楼层下发不同的权限计划模板
|
||||
HCNetSDK.NET_DVR_DOOR_STATUS_PLAN struDoorStatus = new HCNetSDK.NET_DVR_DOOR_STATUS_PLAN();
|
||||
struDoorStatus.read();
|
||||
struDoorStatus.dwSize = struDoorStatus.size();
|
||||
struDoorStatus.dwTemplateNo = iDoorTemplateNo; //计划模板编号,为0表示取消关联、恢复默认状态(普通状态)。非0回复关联(门序号,与相同序号的门状态计划模板关联)
|
||||
struDoorStatus.write();
|
||||
boolean b_SetDoorStatus = getHcNetSDK().NET_DVR_SetDVRConfig(lUserID, HCNetSDK.NET_DVR_SET_DOOR_STATUS_PLAN, floorID, struDoorStatus.getPointer(), struDoorStatus.size());
|
||||
if (!b_SetDoorStatus) {
|
||||
log.info("设置梯控计划参数,错误码为: {}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
log.info("设置梯控计划参数成功");
|
||||
}
|
||||
//设置梯控计划模板参数
|
||||
HCNetSDK.NET_DVR_PLAN_TEMPLATE struDoorTemp = new HCNetSDK.NET_DVR_PLAN_TEMPLATE();
|
||||
struDoorTemp.read();
|
||||
struDoorTemp.dwSize = struDoorTemp.size();
|
||||
struDoorTemp.byEnable = 1; //使能
|
||||
struDoorTemp.dwWeekPlanNo = 1; //周计划模板编号;
|
||||
byte[] byTemplateName;
|
||||
try {
|
||||
byTemplateName = "DoorTemplatePlan_1".getBytes("GBK");
|
||||
//计划模板名称
|
||||
for (int i = 0; i < HCNetSDK.NAME_LEN; i++) {
|
||||
struDoorTemp.byTemplateName[i] = 0;
|
||||
}
|
||||
System.arraycopy(byTemplateName, 0, struDoorTemp.byTemplateName, 0, byTemplateName.length);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
struDoorTemp.write();
|
||||
boolean b_SetDoorTemp = getHcNetSDK().NET_DVR_SetDVRConfig(lUserID, HCNetSDK.NET_DVR_SET_DOOR_STATUS_PLAN_TEMPLATE, iDoorTemplateNo, struDoorTemp.getPointer(), struDoorTemp.size());
|
||||
if (!b_SetDoorTemp) {
|
||||
log.info("设置梯控计划模板失败,错误码为: {}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
log.info("设置梯控计划模板成功");
|
||||
}
|
||||
//获取(设置)门状态周计划参数
|
||||
HCNetSDK.NET_DVR_WEEK_PLAN_CFG struDoorWeekPlan = new HCNetSDK.NET_DVR_WEEK_PLAN_CFG();
|
||||
struDoorWeekPlan.read();
|
||||
Pointer pstruDoorWeekPlan = struDoorWeekPlan.getPointer();
|
||||
IntByReference Ipint = new IntByReference(0);
|
||||
boolean b_GetPlan = getHcNetSDK().NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_WEEK_PLAN_CFG, 1, pstruDoorWeekPlan, struDoorWeekPlan.size(), Ipint);
|
||||
if (!b_GetPlan) {
|
||||
log.info("获取梯控周计划参数失败,错误码为: {}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
log.info("获取梯控周计划参数成功");
|
||||
}
|
||||
struDoorWeekPlan.read();
|
||||
struDoorWeekPlan.byEnable = 1; //是否使能:0- 否,1- 是
|
||||
/**避免时间段交叉,先初始化*/
|
||||
for (int i = 0; i < 7; i++) {
|
||||
for (int j = 0; j < 8; j++) {
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[j].byEnable = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byHour = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byMinute = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.bySecond = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byHour = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byMinute = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.bySecond = 0;
|
||||
}
|
||||
}
|
||||
/**一周7天,全天24小时*/
|
||||
for (int i = 0; i < 7; i++) {
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[0].byEnable = 1;
|
||||
//对接梯控主机需要下发此参数
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[0].byDoorStatus = 2; //2- 常开状态(梯控的自由状态),3- 常闭状态(梯控的禁用状态)
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 23;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 0;
|
||||
struDoorWeekPlan.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 0;
|
||||
}
|
||||
/**一周7天,每天设置2个时间段*/
|
||||
/*for(int i=0;i<7;i++) {
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].byEnable = 1;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 11;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 59;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 59;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].byEnable = 1;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byHour = 13;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byMinute = 30;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.bySecond = 0;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byHour = 19;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byMinute = 59;
|
||||
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.bySecond = 59;
|
||||
}*/
|
||||
struDoorWeekPlan.write();
|
||||
boolean b_SetPlan = getHcNetSDK().NET_DVR_SetDVRConfig(lUserID, HCNetSDK.NET_DVR_SET_WEEK_PLAN_CFG, 2, pstruDoorWeekPlan, struDoorWeekPlan.size());
|
||||
if (!b_SetPlan) {
|
||||
log.info("设置门状态周计划参数失败,错误码为: {}", getHcNetSDK().NET_DVR_GetLastError());
|
||||
return;
|
||||
} else {
|
||||
log.info("设置门状态周计划参数成功");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程梯控
|
||||
*
|
||||
* @param lUserID 用户登录句柄
|
||||
* @param lGatewayIndex 楼层编号,从1开始,-1表示对所有门(或者梯控的所有楼层)进行操作
|
||||
* @param dwStaic 命令值:0- 关闭(对于梯控,表示受控),1- 打开(对于梯控,表示开门),2- 常开(对于梯控,表示自由、通道状态),3- 常关(对于梯控,表示禁用),4- 恢复(梯控,普通状态),5- 访客呼梯(梯控),6- 住户呼梯(梯控)
|
||||
* 禁用**:电梯不可到达所选楼层。
|
||||
* **受控**:需刷卡后才可以按下所选楼层的按钮,电梯才到达指定楼层。
|
||||
* **自由**:所选楼层按钮一直有效。
|
||||
* **开门**:只能在指定时间内按下所选楼层的按钮。
|
||||
* **访客呼梯**:电梯到达一楼,访客进入电梯后仅可按下所选楼层的按钮。
|
||||
* **住户呼梯**:电梯自动到达所选楼层。
|
||||
*/
|
||||
|
||||
public static boolean controlGateway(int lUserID, int lGatewayIndex, int dwStaic) {
|
||||
boolean b = getHcNetSDK().NET_DVR_ControlGateway(lUserID, lGatewayIndex, dwStaic);
|
||||
if (!b) {
|
||||
int i = getHcNetSDK().NET_DVR_GetLastError();
|
||||
log.error("梯控控制失败, errCode={}", i);
|
||||
}
|
||||
return b;
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
package org.dromara.sis.sdk.hik.service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.sdk.hik.HCNetSDK;
|
||||
|
||||
/**
|
||||
* 海康sdk接口服务
|
||||
*
|
||||
* @author LXJ
|
||||
* @since 25-07-08
|
||||
*/
|
||||
@Slf4j
|
||||
public class LoginService extends SdkBaseServer {
|
||||
|
||||
|
||||
/**
|
||||
* 登录设备,支持 V40 和 V30 版本,功能一致。
|
||||
*
|
||||
* @param ip 设备IP地址
|
||||
* @param port SDK端口,默认为设备的8000端口
|
||||
* @param user 设备用户名
|
||||
* @param psw 设备密码
|
||||
* @return 登录成功返回用户ID,失败返回-1
|
||||
*/
|
||||
public static int loginDevice(String ip, short port, String user, String psw) {
|
||||
// 创建设备登录信息和设备信息对象
|
||||
HCNetSDK.NET_DVR_USER_LOGIN_INFO loginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
|
||||
HCNetSDK.NET_DVR_DEVICEINFO_V40 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
|
||||
// 设置设备IP地址
|
||||
byte[] deviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
|
||||
byte[] ipBytes = ip.getBytes();
|
||||
System.arraycopy(ipBytes, 0, deviceAddress, 0, Math.min(ipBytes.length, deviceAddress.length));
|
||||
loginInfo.sDeviceAddress = deviceAddress;
|
||||
// 设置用户名和密码
|
||||
byte[] userName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
|
||||
byte[] password = psw.getBytes();
|
||||
System.arraycopy(user.getBytes(), 0, userName, 0, Math.min(user.length(), userName.length));
|
||||
System.arraycopy(password, 0, loginInfo.sPassword, 0, Math.min(password.length, loginInfo.sPassword.length));
|
||||
loginInfo.sUserName = userName;
|
||||
// 设置端口和登录模式
|
||||
loginInfo.wPort = port;
|
||||
loginInfo.bUseAsynLogin = false; // 同步登录
|
||||
loginInfo.byLoginMode = 0; // 使用SDK私有协议
|
||||
// 执行登录操作
|
||||
int userID = hcNetSDK.NET_DVR_Login_V40(loginInfo, deviceInfo);
|
||||
if (userID == -1) {
|
||||
log.error("登录失败,错误码为: {}", hcNetSDK.NET_DVR_GetLastError());
|
||||
} else {
|
||||
log.info("设备[{}]登录成功.", ip);
|
||||
deviceInfo.read();
|
||||
//获取设备字符编码格式
|
||||
iCharEncodeType = deviceInfo.byCharEncodeType;
|
||||
}
|
||||
return userID; // 返回登录结果
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,104 @@
|
||||
package org.dromara.sis.sdk.hik.service;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.sdk.hik.HCNetSDK;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import static org.dromara.sis.sdk.hik.common.osSelect.isWindows;
|
||||
|
||||
@Slf4j
|
||||
public class SdkBaseServer {
|
||||
|
||||
|
||||
public static HCNetSDK hcNetSDK;
|
||||
public static int iCharEncodeType = 0;
|
||||
/**
|
||||
* 海康登录失败code
|
||||
*/
|
||||
public static final int LOGIN_FAIL_CODE = -1;
|
||||
|
||||
|
||||
public static HCNetSDK getHcNetSDK() {
|
||||
if (hcNetSDK == null) {
|
||||
throw new RuntimeException("HIK sdk 初始化失败!");
|
||||
}
|
||||
return hcNetSDK;
|
||||
}
|
||||
|
||||
public static void initSdk() {
|
||||
if (isWindows()) {
|
||||
String dllFilePath = System.getProperty("user.dir") + "\\lib\\hik\\win64\\HCNetSDK.dll";
|
||||
log.info("win系统加载库路径: {}", dllFilePath);
|
||||
hcNetSDK = (HCNetSDK) Native.loadLibrary(dllFilePath, HCNetSDK.class);
|
||||
log.info("window-sdk加载完成。");
|
||||
} else {
|
||||
String dllFilePath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so";
|
||||
log.info("linux系统加载库路径: {}", dllFilePath);
|
||||
hcNetSDK = (HCNetSDK) Native.loadLibrary(dllFilePath, HCNetSDK.class);
|
||||
HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256);
|
||||
HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256);
|
||||
//这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限
|
||||
String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1";
|
||||
String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1";
|
||||
System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length());
|
||||
ptrByteArray1.write();
|
||||
hcNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer());
|
||||
System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length());
|
||||
ptrByteArray2.write();
|
||||
hcNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer());
|
||||
String strPathCom = System.getProperty("user.dir") + "/lib/";
|
||||
HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
|
||||
System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
|
||||
struComPath.write();
|
||||
hcNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
|
||||
log.info("window-sdk加载完成。");
|
||||
}
|
||||
//SDK初始化,和进程保持同步,仅需要调用一次
|
||||
hcNetSDK.NET_DVR_Init();
|
||||
//开启SDK日志打印
|
||||
hcNetSDK.NET_DVR_SetLogToFile(3, "./sdklog", false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启定时巡检设备
|
||||
*
|
||||
* @param time 巡检时间
|
||||
* @param workStateCallBack 巡检回调
|
||||
*/
|
||||
public static boolean regularInspection(int time, HCNetSDK.DEV_WORK_STATE_CB workStateCallBack) {
|
||||
Assert.notNull(workStateCallBack, "开启定时巡检设备失败, msg: HCNetSDK.FMSGCallBack 不能为null");
|
||||
HCNetSDK.NET_DVR_CHECK_DEV_STATE struCheckStatus = new HCNetSDK.NET_DVR_CHECK_DEV_STATE();
|
||||
struCheckStatus.read();
|
||||
//定时检测设备工作状态,单位:ms,0表示使用默认值(30000),最小值为1000 30分钟更新一次
|
||||
struCheckStatus.dwTimeout = time;
|
||||
struCheckStatus.fnStateCB = workStateCallBack;
|
||||
struCheckStatus.write();
|
||||
boolean state = hcNetSDK.NET_DVR_StartGetDevState(struCheckStatus);
|
||||
if (!state) {
|
||||
log.info("定时巡检设备开启失败:{}", hcNetSDK.NET_DVR_GetLastError());
|
||||
} else {
|
||||
log.info("定时巡检设备开启成功");
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 登出操作
|
||||
*/
|
||||
public static boolean logout(int lUserID) {
|
||||
if (lUserID >= 0) {
|
||||
return hcNetSDK.NET_DVR_Logout(lUserID);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void clearSdk() {
|
||||
if (hcNetSDK != null) {
|
||||
hcNetSDK.NET_DVR_Cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user