提交 3f2df708 authored 作者: 孙于凯's avatar 孙于凯

Initial commit

上级
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
差异被折叠。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tykj</groupId>
<artifactId>hkws</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hkws</name>
<description>hkws</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>examples</groupId>
<artifactId>examples</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/resources/lib/examples.jar</systemPath>
</dependency>
<dependency>
<groupId>jna</groupId>
<artifactId>jna</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/resources/lib/jna.jar</systemPath>
</dependency>
<dependency>
<groupId>json</groupId>
<artifactId>json</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/resources/lib/json.jar</systemPath>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<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>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.tykj.hkws.HkwsApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package com.tykj.hkws;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HkwsApplication {
public static void main(String[] args) {
SpringApplication.run(HkwsApplication.class, args);
}
}
package com.tykj.hkws.controller;
import com.tykj.hkws.service.MemberFlowUploadService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
@Controller
@RequestMapping("/members")
public class MemberFlowController {
@Resource
private MemberFlowUploadService memberFlowUploadService;
@GetMapping("/test")
public void test(){
memberFlowUploadService.initMemberFlowUpload(10);
}
}
package com.tykj.hkws.service;
import com.sun.jna.Pointer;
import com.tykj.hkws.util.HCNetSDK;
import org.springframework.beans.factory.annotation.Autowired;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
//回调函数
public class MemberFlowUPloadCallBackImpl implements HCNetSDK.FMSGCallBack_V31 {
// @Autowired
// private StatisticsMemberInOutService statisticsMemberInOutService;
@Override
public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
System.out.println("进入回调了");
try {
String sAlarmType = new String();
//报警时间
Date today = new Date();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String[] sIP = new String[2];
sAlarmType = new String("lCommand=") + lCommand;
//lCommand是传的报警类型
HCNetSDK.NET_DVR_PDC_ALRAM_INFO strPDCResult = new HCNetSDK.NET_DVR_PDC_ALRAM_INFO();
strPDCResult.write();
Pointer pPDCInfo = strPDCResult.getPointer();
pPDCInfo.write(0, pAlarmInfo.getByteArray(0, strPDCResult.size()), 0, strPDCResult.size());
strPDCResult.read();
if (strPDCResult.byMode == 0) {
strPDCResult.uStatModeParam.setType(HCNetSDK.NET_DVR_STATFRAME.class);
sAlarmType = sAlarmType + ":客流量统计,进入人数:" + strPDCResult.dwEnterNum + ",离开人数:" + strPDCResult.dwLeaveNum +
", byMode:" + strPDCResult.byMode + ", dwRelativeTime:" + strPDCResult.uStatModeParam.struStatFrame.dwRelativeTime +
", dwAbsTime:" + strPDCResult.uStatModeParam.struStatFrame.dwAbsTime;
}
if (strPDCResult.byMode == 1) {
strPDCResult.uStatModeParam.setType(HCNetSDK.NET_DVR_STATTIME.class);
//在这里实现数据的保存等业务逻辑,下面注释的代码是SDK提供的参考示例
/* String strtmStart = "" + String.format("%04d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwYear) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwMonth) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwDay) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwHour) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwMinute) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmStart.dwSecond);
String strtmEnd = "" + String.format("%04d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwYear) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwMonth) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwDay) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwHour) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwMinute) +
String.format("%02d", strPDCResult.uStatModeParam.struStatTime.tmEnd.dwSecond);
sAlarmType = sAlarmType + ":客流量统计,进入人数:" + strPDCResult.dwEnterNum + ",离开人数:" + strPDCResult.dwLeaveNum +
", byMode:" + strPDCResult.byMode + ", tmStart:" + strtmStart + ",tmEnd :" + strtmEnd;*/
}
System.out.println("sAlarmType---》" +sAlarmType);
//报警类型
//报警设备IP地址
sIP = new String(strPDCResult.struDevInfo.struDevIP.sIpV4).split("\0", 2);
return true;
} catch (Exception ex) {
Logger.getLogger(MemberFlowUPloadCallBackImpl.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
}
package com.tykj.hkws.service;
import com.tykj.hkws.util.HCNetSDK;
import org.springframework.stereotype.Service;
import java.util.Timer;
import java.util.TimerTask;
@Service
//数据抓取
public class MemberFlowUploadService {
static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
static HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息
static HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
static String m_sDeviceIP = "192.168.1.X";//已登录设备的IP地址
static String m_sUsername = "XXX";//设备用户名
static String m_sPassword = "XXXXXX";//设备密码
static short m_sPort = 8000;//端口号
public void initMemberFlowUpload(int remainMinuteTime){
// 初始化
hCNetSDK.NET_DVR_Init();
//设置连接时间与重连时间
hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
hCNetSDK.NET_DVR_SetReconnect(10000, true);
// 注册设备-登录参数,包括设备地址、登录用户、密码等
m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
m_strLoginInfo.wPort = m_sPort;
m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是
m_strLoginInfo.write();
//设备信息, 输出参数
int lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo,m_strDeviceInfo);
System.out.println("lUserID.size-->" + lUserID);
if(lUserID< 0){
System.out.println("hCNetSDK.NET_DVR_Login_V30()"+"\n" +hCNetSDK.NET_DVR_GetErrorMsg(null));
hCNetSDK.NET_DVR_Cleanup();
return;
}
//设置报警回调函数
hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(new MemberFlowUPloadCallBackImpl(),null );
//启用布防-其他报警布防参数不需要设置,不支持
HCNetSDK.NET_DVR_SETUPALARM_PARAM lpSetupParam = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
lpSetupParam.dwSize = 0;
int lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID,lpSetupParam);
if (lAlarmHandle< 0)
{
System.out.println("NET_DVR_SetupAlarmChan_V41 error, %d\n"+hCNetSDK.NET_DVR_GetLastError());
hCNetSDK.NET_DVR_Logout(lUserID);
hCNetSDK.NET_DVR_Cleanup();
return;
}
//等待过程中,如果设备上传报警信息,在报警回调函数里面接收和处理报警信息
Timer timer = new Timer();// 实例化Timer类
timer.schedule(new TimerTask() {
public void run() {
//撤销布防上传通道
if (! hCNetSDK.NET_DVR_CloseAlarmChan_V30(lAlarmHandle))
{
System.out.println("! hCNetSDK.NET_DVR_CloseAlarmChan_V31(lAlarmHandle)\n"+ hCNetSDK.NET_DVR_GetLastError() +"\n" +hCNetSDK.NET_DVR_GetErrorMsg(null) );
hCNetSDK.NET_DVR_Logout(lUserID);
hCNetSDK. NET_DVR_Cleanup();
return;
}
//注销用户
hCNetSDK.NET_DVR_Logout(lUserID);
//释放SDK资源
hCNetSDK.NET_DVR_Cleanup();
this.cancel();
System.gc();//主动回收垃圾
}
}, remainMinuteTime * 60 * 1000 );// 这里毫秒
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论