123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- package Acs;
- import Commom.ConfigFileUtil;
- import NetSDKDemo.HCNetSDK;
- import com.sun.jna.Pointer;
- import com.sun.jna.ptr.IntByReference;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.io.UnsupportedEncodingException;
- import java.nio.charset.StandardCharsets;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.UUID;
- import cn.iocoder.yudao.module.md.service.*;
- import static Commom.ConfigFileUtil.replace;
- /**
- * 功能:人脸下发、查询、删除、人员计划模板配置
- */
- public class UserManage {
- /**
- * 添加人员
- *
- * @param lUserID 登录句柄
- * @param name 下发人员的信息
- * @return
- * @throws UnsupportedEncodingException
- * @throws InterruptedException
- * @throws JSONException
- */
- public static String addUserInfo(int lUserID, String employeeNo,String name) throws UnsupportedEncodingException, InterruptedException, JSONException {
- HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
- String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Record?format=json"; //此URL也是下发人员
- System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
- ptrByteArray.write();
- int lHandler = AcsService.hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
- if (lHandler < 0) {
- System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- return strInBuffer;
- } else {
- System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 成功!");
- Map<String, Object> parameter = new HashMap<>();
- parameter.put("employeeNo", employeeNo); // 员工ID
- parameter.put("name", name); // 员工名称
- parameter.put("enable", true); // 是否启用
- parameter.put("doorNo", 1); // 门编号
- //输入参数,XML或者JSON数据,下发人员信息json报文,其他参数设置参考conf/acs/AddUserInfoParam.json中报文参数
- String input = ConfigFileUtil.getReqBodyFromTemplate("AddUserInfoParam.json", parameter);
- System.out.println("下发人员参数:" + input);
- byte[] byInbuffer = input.getBytes("utf-8");
- int iInBufLen = byInbuffer.length;
- HCNetSDK.BYTE_ARRAY ptrInBuffer = new HCNetSDK.BYTE_ARRAY(iInBufLen);
- ptrInBuffer.read();
- System.arraycopy(byInbuffer, 0, ptrInBuffer.byValue, 0, iInBufLen);
- ptrInBuffer.write();
- HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(1024);
- IntByReference pInt = new IntByReference(0);
- while (true) {
- int dwState = AcsService.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInBuffer.getPointer(), iInBufLen, ptrOutuff.getPointer(), 1024, pInt);
- if (dwState == -1) {
- System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- break;
- }
- //读取返回的json并解析
- ptrOutuff.read();
- String strResult = new String(ptrOutuff.byValue).trim();
- System.out.println("dwState:" + dwState + ",strResult:" + strResult);
- JSONObject jsonResult = new JSONObject(strResult);
- int statusCode = jsonResult.getInt("statusCode");
- String statusString = jsonResult.getString("statusString");
- 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("下发人员失败, json retun:" + jsonResult.toString());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
- System.out.println("下发人员异常, json retun:" + jsonResult.toString());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {//返回NET_SDK_CONFIG_STATUS_SUCCESS代表流程走通了,但并不代表下发成功,比如有些设备可能因为人员已存在等原因下发失败,所以需要解析Json报文
- if (statusCode != 1) {
- System.out.println("下发人员成功,但是有异常情况:" + jsonResult.toString());
- } else {
- System.out.println("下发人员成功: json retun:" + jsonResult.toString());
- }
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
- //下发人员时:dwState其实不会走到这里,因为设备不知道我们会下发多少个人,所以长连接需要我们主动关闭
- System.out.println("下发人员完成");
- break;
- }
- }
- if (!AcsService.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
- System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("NET_DVR_StopRemoteConfig接口成功");
- }
- }
- return strInBuffer;
- }
- /**
- * 查询人员信息
- *
- * @param userID
- * @return
- * @throws JSONException
- */
- public static String searchUserInfo(int userID) throws JSONException {
- HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
- String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
- System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
- ptrByteArray.write();
- int lHandler = AcsService.hCNetSDK.NET_DVR_StartRemoteConfig(userID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
- HCNetSDK.BYTE_ARRAY ptrOutuff;
- if (lHandler < 0) {
- System.out.println("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- return strInBuffer;
- } else {
- //输入参数,XML或者JSON数据,查询多条人员信息json报文
- Map<String, Object> parameter = new HashMap<>();
- parameter.put("searchID", UUID.randomUUID()); // 查询id
- parameter.put("maxResults", 30); // 最大查询数量
- String strInbuff = ConfigFileUtil.getReqBodyFromTemplate("SearchUserInfoParam.json", parameter);
- // System.out.println("查询的json报文:" + strInbuff);
- //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
- HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(strInbuff.length());
- System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
- ptrInbuff.write();
- //定义接收结果的结构体
- ptrOutuff = new HCNetSDK.BYTE_ARRAY(10 * 1024);
- IntByReference pInt = new IntByReference(0);
- while (true) {
- /*
- dwOutBuffSize是输出缓冲区大小,需要自定义指定大小,如果接口报错错误码43.说明接收设备数据的缓冲区或存放图片缓冲区不足,应扩大缓冲区大小
- */
- int dwState = AcsService.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 20 * 1024, pInt);
- // System.out.println(dwState);
- if (dwState == -1) {
- System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.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("查询人员失败");
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
- System.out.println("查询人员异常");
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
- ptrOutuff.read();
- System.out.println("查询人员成功, json:" + new String(ptrOutuff.byValue).trim());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
- System.out.println("获取人员完成");
- break;
- }
- }
- if (!AcsService.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
- System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("NET_DVR_StopRemoteConfig接口成功");
- lHandler = -1;
- }
- }
- return new String(ptrOutuff.byValue).trim();
- }
- //lsq
- public static String getUserInfo(int lUserID , String employeeNo ) throws JSONException {
- HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
- String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
- System.arraycopy( strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
- ptrByteArray.write();
- int lHandler = AcsService.hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
- HCNetSDK.BYTE_ARRAY ptrOutuff;
- if (lHandler < 0) {
- System.out.println("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- return null;
- } else {
- Map<String, Object> parameter = new HashMap<>();
- parameter.put("searchID", UUID.randomUUID()); // 查询id
- parameter.put("maxResults",10);
- parameter.put("UserInfo.employeeNo",employeeNo);//查询学号对应的人
- System.out.println("查询条件"+parameter);
- String template = "{\n" +
- " \"UserInfoSearchCond\": {\n" +
- " \"searchID\": \"${searchID}\",\n" +
- " \"searchResultPosition\": 0,\n" +
- " \"maxResults\": ${maxResults},\n" +
- " \"EmployeeNoList\": [{\n" +
- " \"employeeNo\": \"${UserInfo.employeeNo}\"\n" +
- " }]\n" +
- " }\n" +
- "}";
- // 生成请求体
- String requestJson = replace(template, parameter);
- System.out.println("生成的请求体:"+requestJson);
- HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(requestJson.length());
- System.arraycopy(requestJson.getBytes(), 0, ptrInbuff.byValue, 0, requestJson.length());
- ptrInbuff.write();
- ptrOutuff = new HCNetSDK.BYTE_ARRAY(10 * 1024);
- IntByReference pInt = new IntByReference(0);
- while (true) {
- int dwState = AcsService.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(),requestJson.length(), ptrOutuff.getPointer(), 20 * 1024, pInt);
- if (dwState == -1) {
- System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.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) {
- ptrOutuff.read();
- System.out.println("查询人员成功, json:" + new String(ptrOutuff.byValue).trim());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
- System.out.println("获取人员完成");
- break;
- }
- }
- if (!AcsService.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
- System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("NET_DVR_StopRemoteConfig接口成功");
- }
- }
- return new String(ptrOutuff.byValue).trim();
- }
- /**
- * 删除人员信息
- *
- * @param userID
- * @return
- * @throws JSONException
- */
- public static String deleteUserInfo(int userID,String EmployeeNo) throws JSONException {
- //删除单个人员
- //输入参数,XML或者JSON数据,删除人员信息json报文
- Map<String, Object> parameter = new HashMap<>();
- parameter.put("mode", "byEmployeeNo"); // 删除方式, byEmployeeNo: 按员工ID号
- parameter.put("employeeNo", EmployeeNo); // 员工ID号
- String deleteUserjson = ConfigFileUtil.getReqBodyFromTemplate("DeleteUserInfoParam.json", parameter);
- String deleteUserUrl = "PUT /ISAPI/AccessControl/UserInfoDetail/Delete?format=json";
- String result = TransIsapi.put_isapi(userID, deleteUserUrl, deleteUserjson);
- System.out.println(result);
- //获取删除进度
- while (true) {
- String getDeleteProcessUrl = "GET /ISAPI/AccessControl/UserInfoDetail/DeleteProcess?format=json";
- String deleteResult = TransIsapi.get_isapi(userID, getDeleteProcessUrl);
- JSONObject jsonObject = new JSONObject(deleteResult);
- JSONObject jsonObject1 = jsonObject.getJSONObject("UserInfoDetailDeleteProcess");
- String process = jsonObject1.getString("status");
- System.out.println("process ="+process);
- if (process.equals("processing")) {
- System.out.println("正在删除");
- continue;
- } else if (process.equals("success")) {
- System.out.println("删除成功");
- break;
- }else if(process.equals("failed")){
- System.out.println("删除失败");
- break;
- }
- }
- return deleteUserjson;
- }
- }
|