add readme

camera_merge
王一鸣 5 years ago
parent e745789c9c
commit 4bbe0ef026

@ -0,0 +1,621 @@

【总述】
1. Java库路径 src\main\java\com\netsdk\lib
NetSDKLib.java Java库
ToolKits.java 封装小工具文件
Utils.java 判断运行平台,指定加载库的路径文件
SDK所有回调都是子线程不要在回调里刷新UI以及做一些耗时操作。建议回调函数对象写成全局静态防止被系统回收。
2. 动态库路径:
libs\win64 win64的动态库
run_win32.bat win32运行脚本运行的jar包对应jdk 1.6此脚本指定了jdk
run_win64.bat win64运行脚本运行的jar包对应jdk 1.8此脚本指定了jdk
3. 中英文配置文件res\
4. demo路径
考勤机src\main\java\com\netsdk\demo\frame\Attendance
主动注册src\main\java\com\netsdk\demo\frame\AutoRegister
人脸识别src\main\java\com\netsdk\demo\frame\FaceRecognition
人脸开门(人脸闸机)src\main\java\com\netsdk\demo\frame\Gate
报警监听src\main\java\com\netsdk\demo\frame\AlarmListen.java
抓图src\main\java\com\netsdk\demo\frame\CapturePicture.java
设备控制src\main\java\com\netsdk\demo\frame\DeviceControl.java
设备搜索和初始化src\main\java\com\netsdk\demo\frame\DeviceSearchAndInit.java
下载录像src\main\java\com\netsdk\demo\frame\DownLoadRecord.java
云台src\main\java\com\netsdk\demo\frame\PTZControl.java
实时预览src\main\java\com\netsdk\demo\frame\RealPlay.java
对讲src\main\java\com\netsdk\demo\frame\Talk.java
智能交通src\main\java\com\netsdk\demo\frame\TrafficEvent.java
热成像src\main\java\com\netsdk\demo\frame\ThermalCamera.java
VTO:src\main\java\com\netsdk\demo\VTO
点阵屏配置:src\main\java\com\netsdk\demo\frame\FaceRecognition\matrixScreen.java
以上是功能的界面实现接口实现路径src\main\java\com\netsdk\demo\module\
5. 运行jar包target\
6. 开发工具Ecplise
7. 错误码对应文件src\main\java\com\netsdk\common\ErrorCode.java
8. package.bat pom.xml 打包脚本
9. jna.jar 的版本5.4.0
///////////////////////////////////////////////////////////////////
【设备搜索和初始化】
1. 功能概要:
设备搜索和设备初始化功能。
2. Demo中涉及到的NetSDK接口如下
1设备组播和广播搜索
开始搜索接口CLIENT_StartSearchDevices
停止搜索接口CLIENT_StopSearchDevices
2设备IP单播搜索
开始搜索接口CLIENT_SearchDevicesByIPs
停止搜索接口CLIENT_StopSearchDevices
3. 注意事项:
CLIENT_SearchDevicesByIPs 接口每次最多搜索256个
4. 相关接口:
CLIENT_Init 初始化NetSDK
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
fSearchDevicesCB 设备搜索回调
///////////////////////////////////////////////////////////////////
【主动注册】
1. 功能概要:
主动注册主要用于批量登录设备。
此Demo里集合了 实时预览,对讲、抓图功能。
2. Demo中涉及到的NetSDK接口如下
1主动注册功能
开启服务接口CLIENT_ListenServer
停止服务接口CLIENT_StopListenServer
2主动注册登录/登出功能
登录接口CLIENT_LoginWithHighLevelSecurity
登出接口CLIENT_Logout
3实时预览功能
开始预览接口CLIENT_RealPlayEx
停止预览接口CLIENT_StopRealPlayEx
4抓图功能
设置抓图回调接口CLIENT_SetSnapRevCallBack
远程抓图接口CLIENT_SnapPictureEx
5对讲功能
设置模式接口CLIENT_SetDeviceMode
开始对讲接口CLIENT_StartTalkEx
停止对讲接口CLIENT_StopTalkEx
PC端录音接口CLIENT_RecordStart
结束PC端录音接口CLIENT_RecordStop
将收到的本地PC端检测到的声卡数据发送给设备端接口CLIENT_TalkSendData
将收到的设备端发送过来的语音数据传给SDK解码播放接口CLIENT_AudioDecEx
6配置设备主动注册信息
[1]IP登录/登出设备功能
登录接口CLIENT_LoginWithHighLevelSecurity
登出接口CLIENT_Logout
[2]注册信息配置功能
获取设备的主动注册信息CLIENT_GetNewDevConfig CLIENT_ParseData 对应命令NetSDKLib.CFG_CMD_DVRIP
设置设备的主动注册信息CLIENT_PacketData CLIENT_SetNewDevConfig 对应命令NetSDKLib.CFG_CMD_DVRIP
3. 注意事项:
1在通过开启服务收到设备上报的设备信息后需要登录设备。
此处的主动注册登录设备跟通用的IP登录设备的区别是入参需要填设备ID、登录方式tcpSpecCap不同
2配置设备的主动注册信息可以通过本Demo设置也可以通过Web设置。
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_SetAutoReconnect 设置重连回调fHaveReConnect当设备断线后会向设备发送心跳包自动连接设备当重连成功后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
fServiceCallBack 启动服务的回调,用于接收设备注册上来的设备信息
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【人脸识别】
1. 功能概要:
人脸设备功能主要用于IVSS、IPC-FR、IPC-FD(只支持人脸检测事件)
包含功能1人脸库的增、删、改查
2人员的增、删、改、查
3按人脸库布控、撤控
4人脸识别和人脸检测事件
5实时预览
2. Demo中涉及到的NetSDK接口如下
1人脸库功能
查询人脸库接口CLIENT_FindGroupInfo
添加人脸库接口CLIENT_OperateFaceRecognitionGroup 对应枚举 EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_ADD
修改人脸库接口CLIENT_OperateFaceRecognitionGroup 对应枚举 EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_MODIFY
删除人脸库接口CLIENT_OperateFaceRecognitionGroup 对应枚举 EM_OPERATE_FACERECONGNITION_GROUP_TYPE.NET_FACERECONGNITION_GROUP_DELETE
2人员功能
查询人员信息接口CLIENT_StartFindFaceRecognition CLIENT_DoFindFaceRecognition CLIENT_StopFindFaceRecognition
添加人员信息接口CLIENT_OperateFaceRecognitionDB 对应枚举 EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_ADD
修改人员信息接口CLIENT_OperateFaceRecognitionDB 对应枚举 EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_MODIFY
删除人员信息接口CLIENT_OperateFaceRecognitionDB 对应枚举 EM_OPERATE_FACERECONGNITIONDB_TYPE.NET_FACERECONGNITIONDB_DELETE
查询到的人员图片是一个地址可以用下载接口下载CLIENT_DownloadRemoteFile
3布控和撤控功能
按人脸库布控接口CLIENT_FaceRecognitionPutDisposition
按人脸库撤控接口CLIENT_FaceRecognitionDelDisposition
4人脸识别和人脸检测事件功能
智能订阅接口CLIENT_RealLoadPictureEx
停止订阅接口CLIENT_StopLoadPic
人脸识别事件NetSDKLib.EVENT_IVS_FACERECOGNITION
人脸检测事件NetSDKLib.EVENT_IVS_FACEDETECT
5实时预览功能
显示规则框接口CLIENT_RenderPrivateData
开始预览接口CLIENT_RealPlayEx
停止预览接口CLIENT_StopRealPlayEx
3. 注意事项:
1人脸图片只支持JPG格式
IPC支持的图片最大为128KB
IVSS支持的图片最大为256KB
2IPC-FD不支持人脸识别事件只支持人脸检测事件
3IPC最大支持的人脸库个数为5
IVSS最大支持的人脸库个数为20
4人员信息的查询
[1]先调用CLIENT_StartFindFaceRecognition获取查询句柄
[2]在[1]的基础上,根据偏移量循环查询, 每次查询的最大个数为20
[3]调用CLIENT_StopFindFaceRecognition关闭查询
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_SetAutoReconnect 设置重连回调fHaveReConnect当设备断线后会向设备发送心跳包自动连接设备当重连成功后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
fAnalyzerDataCallBack 订阅回调,接收人脸识别和人脸检测事件
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【人脸开门】主要适配设备为ASI设备
1. 功能概要:
主要功能有:门禁事件
卡的增、删、改、查、清空
人脸的增、删、改、清空(人脸查询到的是MD5不是图片地址和图片信息所以人脸查询的实现没意义不提供)
2. Demo中涉及到的NetSDK接口如下
1门禁事件
开始订阅接口CLIENT_RealLoadPictureEx
取消订阅接口CLIENT_StopLoadPic
门禁事件NetSDKLib.EVENT_IVS_ACCESS_CTL
2卡和人脸操作
添加卡信息CLIENT_ControlDevice 接口里的对应命令CtrlType.CTRLTYPE_CTRL_RECORDSET_INSERT 入参里的记录集类型EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD
修改卡信息CLIENT_ControlDevice 接口里的对应命令CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE 入参里的记录集类型EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD
删除卡信息CLIENT_ControlDevice 接口里的对应命令CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE 入参里的记录集类型EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD
清空卡信息CLIENT_ControlDevice 接口里的对应命令CtrlType.CTRLTYPE_CTRL_RECORDSET_CLEAR 入参里的记录集类型EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD
查询卡信息:[1]调用CLIENT_FindRecord获取查询句柄 [2]调用CLIENT_FindNextRecord循环查询 [3]查询结束调用CLIENT_FindRecordClose关闭查询
添加人脸CLIENT_FaceInfoOpreate 接口里的对应命令EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD
修改人脸CLIENT_FaceInfoOpreate 接口里的对应命令EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE
删除人脸CLIENT_FaceInfoOpreate 接口里的对应命令EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_REMOVE
清空人脸CLIENT_FaceInfoOpreate 接口里的对应命令EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_CLEAR
3. 注意事项:
查询卡信息是根据每次查询的个数循环查询(不像人脸识别里,是根据偏移量)
4. 相关接口:
CLIENT_Init 初始化NetSDK
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
fAnalyzerDataCallBack 订阅回调,接收门禁事件
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【双通道预览】
1. 功能概要:
主要功能有:双通道实时预览
2. Demo中涉及到的NetSDK接口如下
1实时预览功能
开始预览接口CLIENT_RealPlayEx
停止预览接口CLIENT_StopRealPlayEx
3. 注意事项:
4. 相关接口:
CLIENT_Init 初始化NetSDK
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【云台控制】
1. 功能概要:
主要功能有:实时预览、远程抓图、八个方向控制、变倍、变焦、光圈
2. Demo中涉及到的NetSDK接口如下
1实时预览功能
开始预览接口CLIENT_RealPlayEx
停止预览接口CLIENT_StopRealPlayEx
2远程抓图
设置抓图回调接口CLIENT_SetSnapRevCallBack
下发抓图命令接口CLIENT_SnapPictureEx
3八个方向控制、变倍、变焦、光圈
CLIENT_DHPTZControlEx 接口一样对应的命令不一样具体参考DemoDemo里写的很详细
3. 注意事项:
4. 相关接口:
CLIENT_Init 初始化NetSDK
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
fSnapRev 抓图回调,用于接收图片信息
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【下载录像】
1. 功能概要:
主要功能有:按时间下载录像、按文件下载录像、设置下载录像的码流类型、查询录像
2. Demo中涉及到的NetSDK接口如下
1设置下载录像的码流类型
接口CLIENT_SetDeviceMode 对应命令EM_USEDEV_MODE.NET_RECORD_STREAM_TYPE
2按时间下载
开始下载接口CLIENT_DownloadByTimeEx
停止下载接口CLIENT_StopDownload
3按文件下载
查询录像接口CLIENT_QueryRecordFile
开始下载接口CLIENT_DownloadByTimeEx
停止下载接口CLIENT_StopDownload
3. 注意事项:
1下载录像格式为dav
2按文件下载是先查询录像文件再调用按时间下载接口下载录像
4. 相关接口:
CLIENT_Init 初始化NetSDK
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
fTimeDownLoadPosCallBack 下载回调,用于接收下载录像的进度
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【智能交通】
1. 功能概要:
主要功能有:实时预览、手动抓拍、出入口开闸、智能订阅交通事件
2. Demo中涉及到的NetSDK接口如下
1实时预览功能
开始预览接口CLIENT_RealPlayEx
停止预览接口CLIENT_StopRealPlayEx
2手动抓拍
CLIENT_ControlDeviceEx 对应命令CtrlType.CTRLTYPE_MANUAL_SNAP
3出入口开闸
CLIENT_ControlDeviceEx 对应命令CtrlType.CTRLTYPE_CTRL_OPEN_STROBE
4订阅交通事件
开始订阅接口CLIENT_RealLoadPictureEx
停止订阅接口CLIENT_StopLoadPic
3. 注意事项:
调用手动抓拍接口,会触发手动抓拍事件
4. 相关接口:
CLIENT_Init 初始化NetSDK
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
fAnalyzerDataCallBack 订阅回调,用于接收智能交通的各种事件
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【语音对讲功能】
1. 功能概要:
主要功能有:直连对讲、转发模式对讲
2. Demo中涉及到的NetSDK接口如下
1 设置设备对讲模式CLIENT_SetDeviceMode
对讲前需要设置若干对讲方式:
设置语音对讲编码格式对应命令NetSDKLib.EM_USEDEV_MODE.NET_TALK_ENCODE_TYPE
设置语音对讲喊话参数对应命令NetSDKLib.EM_USEDEV_MODE.NET_TALK_SPEAK_PARAM
设置对讲是否为转发模式对应命令NetSDKLib.EM_USEDEV_MODE.NET_TALK_TRANSFER_MODE
转发模式时设置转发通道对应命令NetSDKLib.EM_USEDEV_MODE.NET_TALK_TALK_CHANNEL
2 向设备发送用户的音频数据CLIENT_TalkSendData
3 对设备发来的音频数据解码CLIENT_AudioDecEx
4 向设备发起语音对讲请求CLIENT_StartTalkEx
对讲回调实现pfAudioDataCallBack接口
回调中byAudioFlag为0调CLIENT_TalkSendData为1调CLIENT_AudioDecEx处理音频数据
5 开始PC端录音CLIENT_RecordStart
6 结束PC端录音CLIENT_RecordStop
7 停止语音对讲CLIENT_StopTalkEx
3. 注意事项:
SDK所有回调都是子线程JNA是弱引用建议回调函数对象写成全局静态防止被系统回收
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【设备控制功能】
1. 功能概要:
主要功能有:设置重启、获取设备当前时间、设置设备时间
2. Demo中涉及到的NetSDK接口如下
1 设备控制CLIENT_ControlDevice
控制类型参数emType为CtrlType.CTRLTYPE_CTRL_REBOOT时下发重启设备命令
2 设置设备当前时间CLIENT_SetupDeviceTime
3 查询设备当前时间CLIENT_QueryDeviceTime
3. 注意事项:
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【抓图功能】
1. 功能概要:
主要功能有:实时预览、抓图(包含本地抓图、远程抓图和定时抓图)
2. Demo中涉及到的NetSDK接口如下
1 实时预览功能
开始预览接口CLIENT_RealPlayEx
停止预览接口CLIENT_StopRealPlayEx
2 抓图功能
本地抓图CLIENT_CapturePictureEx
设置抓图回调CLIENT_SetSnapRevCallBack
回调实现fSnapRev接口
远程抓图、定时抓图、停止定时抓图CLIENT_SnapPictureEx
抓图模式:-1:表示停止抓图, 0表示请求一帧远程抓图, 1表示定时发送请求
3. 注意事项:
本地抓图需要先实时预览
SDK所有回调都是子线程JNA是弱引用建议回调函数对象写成全局静态防止被系统回收
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_SetAutoReconnect 设置重连回调fHaveReConnect当设备断线后会向设备发送心跳包自动连接设备当重连成功后回调里会收到信息
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【报警监听功能】
1. 功能概要:
主要功能有:外部报警、移动侦测、视频遮挡、视频丢失、硬盘满、硬盘坏的报警上报
2. Demo中涉及到的NetSDK接口如下
1 设置报警回调CLIENT_SetDVRMessCallBack
回调实现fMessCallBack接口
2 向设备订阅报警CLIENT_StartListenEx
3 停止订阅报警CLIENT_StopListen
3. 注意事项:
SDK所有回调都是子线程JNA是弱引用建议回调函数对象写成全局静态防止被系统回收
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_SetAutoReconnect 设置重连回调fHaveReConnect当设备断线后会向设备发送心跳包自动连接设备当重连成功后回调里会收到信息
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【考勤机功能】
1. 功能概要:
主要功能有:门禁事件信息展示
人员记录集的新增/删除/更新/获取/查询
通过用户ID对指纹记录集的新增/删除/获取
通过指纹ID指纹记录集获取/删除
指纹采集功能
2. Demo中涉及到的NetSDK接口如下
1 实时上传智能分析数据CLIENT_RealLoadPictureEx
回调实现fAnalyzerDataCallBack接口
2 停止上传智能分析数据CLIENT_StopLoadPic
3 考勤新增加用户CLIENT_Attendance_AddUser
4 考勤获取单个用户信息CLIENT_Attendance_GetUser
5 考勤修改用户信息CLIENT_Attendance_ModifyUser
6 考勤删除用户CLIENT_Attendance_DelUser
7 检索考勤用户信息CLIENT_Attendance_FindUser
8 通过用户ID插入指纹数据CLIENT_Attendance_InsertFingerByUserID
9 通过用户ID查找该用户下的所有指纹数据CLIENT_Attendance_GetFingerByUserID
10删除单个用户下所有指纹数据CLIENT_Attendance_RemoveFingerByUserID
11通过指纹ID获取指纹数据CLIENT_Attendance_GetFingerRecord
12通过指纹ID删除指纹数据CLIENT_Attendance_RemoveFingerRecord
13设备控制CLIENT_ControlDeviceEx
控制类型参数emType为CtrlType.CTRLTYPE_CTRL_CAPTURE_FINGER_PRINT时下发指纹采集命令
3. 注意事项:
SDK所有回调都是子线程JNA是弱引用建议回调函数对象写成全局静态防止被系统回收
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【热成像功能】
1. 功能概要:
主要功能有:测温点参数查询、测温项参数查询、热成像温度查询、温度分布数据获取和保存
2. Demo中涉及到的NetSDK接口如下
1) 查询测温点的参数值: CLIENT_QueryDevInfo
对应枚举NetSDKLib.EM_QUERY_DEV_INFO.RADIOMETRY_POINT_TEMPER
2) 查询测温项的参数值: CLIENT_QueryDevInfo
对应枚举NetSDKLib.EM_QUERY_DEV_INFO.RADIOMETRY_TEMPER
3) 查询热成像温度枚举值为NetSDKLib.EM_FIND.RADIOMETRY:
开始查询CLIENT_StartFind
继续查询CLIENT_DoFind
结束查询CLIENT_StopFind
4) 温度分布数据获取
订阅CLIENT_RadiometryAttach
通知开始获取热图数据CLIENT_RadiometryFetch
热图数据解压与转换CLIENT_RadiometryDataParse
取消订阅CLIENT_RadiometryDetach
3. 注意事项:
SDK所有回调都是子线程JNA是弱引用建议回调函数对象写成全局静态防止被系统回收
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_SetAutoReconnect 设置重连回调fHaveReConnect当设备断线后会向设备发送心跳包自动连接设备当重连成功后回调里会收到信息
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【点阵屏下发功能】
1. 功能概要:点阵屏信息下发
2. Demo中涉及到的NetSDK接口如下
1下发点阵屏信息接口CLIENT_ControlDevice
对应枚举CTRLTYPE_CTRL_SET_PARK_INFO
3. 注意事项:
SDK所有回调都是子线程JNA是弱引用建议回调函数对象写成全局静态防止被系统回收
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_SetAutoReconnect 设置重连回调fHaveReConnect当设备断线后会向设备发送心跳包自动连接设备当重连成功后回调里会收到信息
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【VTO功能】
1. 功能概要:
主要功能有:卡操作,开门关门,语音通话,拉流,指纹采集,事件上报
2. Demo中涉及到的NetSDK接口如下
1查询
CLIENT_FindRecordClose //结束查询
CLIENT_FindRecord//开始查询记录
CLIENT_FindNextRecord//查询记录
CLIENT_QueryDevState//获取指纹信息
2)卡操作
CLIENT_ControlDevice//卡信息操作
CLIENT_FaceInfoOpreate//人脸操作
3)开门关门
CLIENT_ControlDeviceEx//开关门
4)语音通话
CLIENT_SetDeviceMode// 设置语音对讲编码格式
CLIENT_SetDeviceMode// 设置语音对讲喊话参数,设置语音对讲是否为转发模式
CLIENT_StartTalkEx//开始语音通话
CLIENT_StopTalkEx//停止通话
5)拉流
CLIENT_RealPlayEx//实时预览
CLIENT_StopRealPlayEx//停止预览
6)采集指纹
CLIENT_SetDVRMessCallBack//设置回调函数
CLIENT_StartListenEx//订阅报警信息,通过指纹事件获取指纹数据
7)事件上报
CLIENT_StartListenEx//订阅普通报警事件
CLIENT_RealloadPicEx//订阅智能报警事件
3. 注意事项:
SDK所有回调都是子线程JNA是弱引用建议回调函数对象写成全局静态防止被系统回收
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_SetAutoReconnect 设置重连回调fHaveReConnect当设备断线后会向设备发送心跳包自动连接设备当重连成功后回调里会收到信息
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出
///////////////////////////////////////////////////////////////////
【客流量统计功能】
1. 功能概要:
主要功能有:客流量统计
2. Demo中涉及到的NetSDK接口如下
1客流量统计订阅CLIENT_AttachVideoStatSummary
2取消客流量统计订阅CLIENT_DetachVideoStatSummary
3设备控制接口CLIENT_ControlDevice
对应的枚举值CtrlType.CTRLTYPE_CTRL_CLEAR_SECTION_STAT
4) 客流量统计接口回调: fVideoStatSumCallBack
3. 注意事项:
SDK所有回调都是子线程JNA是弱引用建议回调函数对象写成全局静态防止被系统回收
4. 相关接口:
CLIENT_Init 初始化NetSDK并且设置断线回调fDisConnect当设备断线后回调里会收到信息
CLIENT_SetNetworkParam 设置登录网络环境
CLIENT_SetAutoReconnect 设置重连回调fHaveReConnect当设备断线后会向设备发送心跳包自动连接设备当重连成功后回调里会收到信息
CLIENT_Cleanup 释放NetSDK缓存
CLIENT_LogOpen 打开日志
CLIENT_LogClose 关闭日志
CLIENT_LoginWithHighLevelSecurity 登录
CLIENT_Logout 登出

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

@ -0,0 +1,23 @@
#舵机
##通讯协议:
![image](plc通讯协议1.jpg)
![image](plc通讯协议2.jpg)
### tcp通讯用的netty
#### 1.HeartNettyClient*类是维持与plc的心跳
#### 2.解码MyProtocolDecode 这里收到plc的包解析处理见通讯协议的两张图片
#### 3.调用sdk拍照录像转动球机等操作在com.zhehekeji.web.lib里面
##SDK:
### 1.调用sdk的代码在 com.zhehekeji.web.lib下面
### 2.sdk在根目录libs下面
### 3.sdk回调在CallBack类里重连回调断线回调球机转动回调下载mp4下载结束回调
### 4.详见SDK_ReadMe_请先读我.TXT
### InitService: 项目启动自动登录球机自动连接PLC
### 球机的连接句柄维护在CameraConnMap类里,key:球机IDvalue:登录句柄

@ -27,12 +27,5 @@ public class RealTimeController {
return Result.success(realTimeService.realTimes());
}
// @GetMapping("/lychee")
// @ApiOperation(value = "获取荔枝的ip")
// //@SessionHandler
// public Result<String> lychee() {
// return Result.success(realTimeService.lychee());
// }
}

@ -1,8 +1,11 @@
package com.zhehekeji.web.controller;
import com.alibaba.excel.EasyExcel;
import com.zhehekeji.common.util.ValidatorUtil;
import com.zhehekeji.core.pojo.Result;
import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.entity.Stock;
import com.zhehekeji.web.pojo.stock.StockCheck;
import com.zhehekeji.web.pojo.stock.StockExportExcel;
import com.zhehekeji.web.service.StockService;
import io.swagger.annotations.Api;
@ -27,6 +30,8 @@ public class StockController {
@Resource
private StockService stockService;
@Resource
private ValidatorUtil validatorUtil;
@PostMapping("/import")
@ApiOperation(value = "库存导入")
@ -43,7 +48,7 @@ public class StockController {
@ApiOperation(value = "导出全部巷道excel")
@RequestMapping(value = "/export", method = RequestMethod.GET)
public void batchDeliver(@RequestParam Integer streetId, HttpServletResponse response) throws IOException {
public void export(@RequestParam Integer streetId, HttpServletResponse response) throws IOException {
OutputStream os = response.getOutputStream();
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
@ -53,4 +58,21 @@ public class StockController {
EasyExcel.write(os, StockExportExcel.class).sheet().doWrite(excels);
}
@ApiOperation(value = "复核页面")
@RequestMapping(value = "/info", method = RequestMethod.POST)
public Result<Stock> stockInfo(@RequestBody StockCheck stockCheck){
validatorUtil.validate(stockCheck);
stockCheck.setStatus(null);
return Result.success(stockService.stockInfo(stockCheck));
}
@ApiOperation(value = "复核页面")
@RequestMapping(value = "/check", method = RequestMethod.POST)
public Result check(@RequestBody StockCheck stockCheck){
validatorUtil.validate(stockCheck);
Assert.notNull(stockCheck.getStatus(),"核对状态必填");
stockService.check(stockCheck);
return Result.success();
}
}

@ -0,0 +1,44 @@
package com.zhehekeji.web.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class StockLog {
@TableId(type = IdType.AUTO)
private Long id;
private Integer userId;
private String username;
private String shelveId;
@TableField("`row`")
private Integer row;
@TableField("`column`")
private Integer column;
@ApiModelProperty("之前的状态")
private Integer oldStatus;
@ApiModelProperty("更改之后的状态")
private Integer newStatus;
private String orderNum;
@ApiModelProperty("操作前的图片")
private String preoperationPic;
@ApiModelProperty("操作后的图片")
private String overoperationPic;
private LocalDateTime createTime;
}

@ -32,4 +32,8 @@ public class Warn {
@ApiModelProperty("视频图片地址")
@TableField("`video_path_2`")
private String videoPath2;
private String location;
private String signal;
}

@ -0,0 +1,7 @@
package com.zhehekeji.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhehekeji.web.entity.StockLog;
public interface StockLogMapper extends BaseMapper<StockLog> {
}

@ -0,0 +1,26 @@
package com.zhehekeji.web.pojo.stock;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class StockCheck {
@NotEmpty(message = "货架号不能为空")
@ApiModelProperty("货架号")
private String shelveId;
@NotNull(message = "行不能为空")
@ApiModelProperty("行号")
private Integer row;
@NotNull(message = "列不能为空")
@ApiModelProperty("列")
private Integer column;
@ApiModelProperty("1盘点异常 2核对正确")
private Integer status;
}

@ -50,48 +50,7 @@ public class OrderService {
if (streetMap.get(orderVO.getStreetId()) != null) {
orderVO.setStreetName(streetMap.get(orderVO.getStreetId()).getName());
}
//from to 模型
if (orderVO.getInOut1() != null && orderVO.getInOut2() != null) {
//左右货架 货位号
//库内转库内 看 to
Integer column = 0;
Integer row = 0;
//左货架 右货架
Integer leftRight = 0;
if (orderVO.getInOut1() == 1 && orderVO.getInOut2() == 1) {
leftRight = orderVO.getLeftRight2();
column = orderVO.getColumn2();
row = orderVO.getRow2();
} else if (orderVO.getInOut1() == 1) {
leftRight = orderVO.getLeftRight1();
//看from
orderVO.setStreetType(orderVO.getLeftRight1());
column = orderVO.getColumn1();
row = orderVO.getRow1();
} else if (orderVO.getInOut2() == 1) {
leftRight = orderVO.getLeftRight2();
//看to
orderVO.setStreetType(orderVO.getLeftRight2());
column = orderVO.getColumn2();
row = orderVO.getRow2();
}
if (leftRight > 0) {
//PLC 1是左 2是由
Street street = streetMap.get(orderVO.getStreetId());
if(street != null){
if(leftRight == 1){
orderVO.setStreetType(street.getLeftType());
}else {
orderVO.setStreetType(street.getRightType());
}
}
String leftRightS = leftRight == 1 ? "左" : "右";
//里外 现在无法判断 这个项目全是 里
String location = "%s-里-%s列%s行";
orderVO.setGoodsLocation(String.format(location, leftRightS, column, row));
}
}
//计算订单的时间
if (orderVO.getEndTime() != null && orderVO.getStartTime() != null) {
Duration duration = Duration.between(orderVO.getStartTime(), orderVO.getEndTime());
@ -105,8 +64,7 @@ public class OrderService {
String[] pics = orderVO.getPicPaths().split(",");
orderVO.setPics(pics);
}
orderVO.setGoodsLocation(location(orderVO,streetMap.get(orderVO.getStreetId())));
});
return new PageInfo<>(orders);
}
@ -161,5 +119,50 @@ public class OrderService {
}
}
public String location(OrderVO orderVO,Street street){
//from to 模型
if (orderVO.getInOut1() != null && orderVO.getInOut2() != null) {
//左右货架 货位号
//库内转库内 看 to
Integer column = 0;
Integer row = 0;
//左货架 右货架
Integer leftRight = 0;
if (orderVO.getInOut1() == 1 && orderVO.getInOut2() == 1) {
leftRight = orderVO.getLeftRight2();
column = orderVO.getColumn2();
row = orderVO.getRow2();
} else if (orderVO.getInOut1() == 1) {
leftRight = orderVO.getLeftRight1();
//看from
orderVO.setStreetType(orderVO.getLeftRight1());
column = orderVO.getColumn1();
row = orderVO.getRow1();
} else if (orderVO.getInOut2() == 1) {
leftRight = orderVO.getLeftRight2();
//看to
orderVO.setStreetType(orderVO.getLeftRight2());
column = orderVO.getColumn2();
row = orderVO.getRow2();
}
if (leftRight > 0) {
//PLC 1是左 2是由
if(street != null){
if(leftRight == 1){
orderVO.setStreetType(street.getLeftType());
}else {
orderVO.setStreetType(street.getRightType());
}
}
String leftRightS = leftRight == 1 ? "左" : "右";
//里外 现在无法判断 这个项目全是 里
String location = "%s-里-%s列%s行";
return String.format(location, leftRightS, column, row);
}
}
return null;
}
}

@ -10,22 +10,19 @@ import org.springframework.beans.BeanUtils;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class StockImport extends AnalysisEventListener<StockExcel> {
private static Integer LENGTH = 5000;
private StockMapper stockMapper;
public StockImport (StockMapper stockMapper){
this.stockMapper = stockMapper;
}
private List<Stock> stocks = new ArrayList<>(LENGTH);
// private Set<String> shelveIds = new HashSet<>();
@Override
public void invoke(StockExcel stockExcel, AnalysisContext analysisContext) {
@ -33,26 +30,16 @@ public class StockImport extends AnalysisEventListener<StockExcel> {
BeanUtils.copyProperties(stockExcel,stock);
stock.setExportTime(LocalDateTime.now());
stock.setStatus(0);
// shelveIds.add(stockExcel.getShelveId());
int i = stockMapper.update(stock,new UpdateWrapper<Stock>().eq("shelve_id",stock.getShelveId()).eq("`column`",stock.getColumn()).eq("`row`",stock.getRow()));
if(i == 0){
stockMapper.insert(stock);
}
//stocks.add(stock);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// stockMapper.insertOrUpdate(stock);
// if (stocks.size() >= LENGTH) {
// //保存 清零
// save(stocks);
// stocks.clear();
// }
}
private void save(List<Stock> stocks) {
//todo 批量保存
stockMapper.batchInsert(stocks);
}
}

@ -2,13 +2,20 @@ package com.zhehekeji.web.service;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zhehekeji.core.util.Assert;
import com.zhehekeji.web.entity.Stock;
import com.zhehekeji.web.entity.StockLog;
import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.mapper.StockLogMapper;
import com.zhehekeji.web.mapper.StockMapper;
import com.zhehekeji.web.pojo.stock.StockCheck;
import com.zhehekeji.web.pojo.stock.StockExcel;
import com.zhehekeji.web.pojo.stock.StockExportExcel;
import com.zhehekeji.web.pojo.stock.StockStatus;
import com.zhehekeji.web.pojo.street.StreetType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
@ -26,8 +33,11 @@ public class StockService {
private StockMapper stockMapper;
@Resource
private StreetService streetService;
@Resource
private StockLogMapper logMapper;
public void importExcel(MultipartFile file){
log.info("import excel stock");
Thread thread = new Thread(
new Runnable() {
@Override
@ -43,6 +53,11 @@ public class StockService {
thread.start();
}
/**
*
* @param streetId
* @return
*/
public Map<String,List<Stock>> stocksByStreetId(Integer streetId){
List<Stock> stocks = list(streetId);
Map<String,List<Stock>> shelveMap = stocks.stream().collect(Collectors.groupingBy(Stock::getShelveId));
@ -51,33 +66,16 @@ public class StockService {
public List<Stock> list(Integer streetId){
Street street = streetService.streetById(streetId);
if(street == null){
return new ArrayList<>();
}
Map<String,Integer[]> map = new HashMap<>();
if(StreetType.SINGLE.getType().equals(street.getLeftType())){
map.put(street.getLeftShelveId(),new Integer[]{street.getLeftColumn(),street.getLeftRow()});
}
if(StreetType.SINGLE.getType().equals(street.getRightType())){
map.put(street.getRightShelveId(),new Integer[]{street.getRightColumn(),street.getRightRow()});
}
if(StreetType.DOUBLE.getType().equals(street.getLeftType())){
map.put(street.getLeftInsideShelveId(),new Integer[]{street.getLeftColumn(),street.getLeftRow()});
map.put(street.getLeftOutsideShelveId(),new Integer[]{street.getLeftColumn(),street.getLeftRow()});
}
if(StreetType.DOUBLE.getType().equals(street.getRightType())){
map.put(street.getRightInsideShelveId(),new Integer[]{street.getRightColumn(),street.getRightRow()});
map.put(street.getRightOutsideShelveId(),new Integer[]{street.getRightColumn(),street.getRightRow()});
}
if(CollectionUtils.isEmpty(map)){
return new ArrayList<>();
}
Set<String> shelves = map.keySet();
List<String> shelves = streetService.check(street);
List<Stock> stocks = stockMapper.selectList(new QueryWrapper<Stock>().in("shelve_id",shelves).orderByAsc("shelve_id","`row`","`column`"));
return stocks;
}
/**
*
* @param streetId
* @return
*/
public List<StockExportExcel> exportExcels(Integer streetId){
List<Stock> stocks = list(streetId);
Street street = streetService.streetById(streetId);
@ -97,4 +95,38 @@ public class StockService {
return stockExportExcels;
}
/**
*
* @param stockCheck
* @return
*/
public Stock stockInfo(StockCheck stockCheck){
Stock stock = stockMapper.getByShelveIdAndRowColumn(stockCheck.getShelveId(),stockCheck.getRow(),stockCheck.getColumn());
return stock;
}
/**
*
*
* @param stockCheck
*/
public void check(StockCheck stockCheck){
log.debug("check stock shelveID:{},row:{},column:{},status:{}",stockCheck.getShelveId(),stockCheck.getRow(),stockCheck.getColumn(),stockCheck.getStatus());
Stock stock = stockInfo(stockCheck);
Assert.notNull(stock,"库存不存在");
Integer oldStatus = stock.getStatus();
stock.setStatus(stockCheck.getStatus());
stockMapper.updateById(stock);
checkLog(stock,oldStatus);
}
private void checkLog(Stock stock,Integer oldStatus){
StockLog stockLog = new StockLog();
BeanUtils.copyProperties(stock,stockLog);
stockLog.setOldStatus(oldStatus);
stockLog.setNewStatus(stock.getStatus());
// todo username
logMapper.insert(stockLog);
}
}

Loading…
Cancel
Save