UserManage.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package Acs;
  2. import Commom.ConfigFileUtil;
  3. import NetSDKDemo.HCNetSDK;
  4. import com.sun.jna.Pointer;
  5. import com.sun.jna.ptr.IntByReference;
  6. import org.json.JSONException;
  7. import org.json.JSONObject;
  8. import java.io.UnsupportedEncodingException;
  9. import java.nio.charset.StandardCharsets;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. import java.util.UUID;
  13. import cn.iocoder.yudao.module.md.service.*;
  14. import static Commom.ConfigFileUtil.replace;
  15. /**
  16. * 功能:人脸下发、查询、删除、人员计划模板配置
  17. */
  18. public class UserManage {
  19. /**
  20. * 添加人员
  21. *
  22. * @param lUserID 登录句柄
  23. * @param name 下发人员的信息
  24. * @return
  25. * @throws UnsupportedEncodingException
  26. * @throws InterruptedException
  27. * @throws JSONException
  28. */
  29. public static String addUserInfo(int lUserID, String employeeNo,String name) throws UnsupportedEncodingException, InterruptedException, JSONException {
  30. HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
  31. String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Record?format=json"; //此URL也是下发人员
  32. System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
  33. ptrByteArray.write();
  34. int lHandler = AcsService.hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
  35. if (lHandler < 0) {
  36. System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  37. return strInBuffer;
  38. } else {
  39. System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 成功!");
  40. Map<String, Object> parameter = new HashMap<>();
  41. parameter.put("employeeNo", employeeNo); // 员工ID
  42. parameter.put("name", name); // 员工名称
  43. parameter.put("enable", true); // 是否启用
  44. parameter.put("doorNo", 1); // 门编号
  45. //输入参数,XML或者JSON数据,下发人员信息json报文,其他参数设置参考conf/acs/AddUserInfoParam.json中报文参数
  46. String input = ConfigFileUtil.getReqBodyFromTemplate("AddUserInfoParam.json", parameter);
  47. System.out.println("下发人员参数:" + input);
  48. byte[] byInbuffer = input.getBytes("utf-8");
  49. int iInBufLen = byInbuffer.length;
  50. HCNetSDK.BYTE_ARRAY ptrInBuffer = new HCNetSDK.BYTE_ARRAY(iInBufLen);
  51. ptrInBuffer.read();
  52. System.arraycopy(byInbuffer, 0, ptrInBuffer.byValue, 0, iInBufLen);
  53. ptrInBuffer.write();
  54. HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(1024);
  55. IntByReference pInt = new IntByReference(0);
  56. while (true) {
  57. int dwState = AcsService.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInBuffer.getPointer(), iInBufLen, ptrOutuff.getPointer(), 1024, pInt);
  58. if (dwState == -1) {
  59. System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  60. break;
  61. }
  62. //读取返回的json并解析
  63. ptrOutuff.read();
  64. String strResult = new String(ptrOutuff.byValue).trim();
  65. System.out.println("dwState:" + dwState + ",strResult:" + strResult);
  66. JSONObject jsonResult = new JSONObject(strResult);
  67. int statusCode = jsonResult.getInt("statusCode");
  68. String statusString = jsonResult.getString("statusString");
  69. if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
  70. System.out.println("配置等待");
  71. Thread.sleep(10);
  72. continue;
  73. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
  74. System.out.println("下发人员失败, json retun:" + jsonResult.toString());
  75. break;
  76. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
  77. System.out.println("下发人员异常, json retun:" + jsonResult.toString());
  78. break;
  79. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {//返回NET_SDK_CONFIG_STATUS_SUCCESS代表流程走通了,但并不代表下发成功,比如有些设备可能因为人员已存在等原因下发失败,所以需要解析Json报文
  80. if (statusCode != 1) {
  81. System.out.println("下发人员成功,但是有异常情况:" + jsonResult.toString());
  82. } else {
  83. System.out.println("下发人员成功: json retun:" + jsonResult.toString());
  84. }
  85. break;
  86. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
  87. //下发人员时:dwState其实不会走到这里,因为设备不知道我们会下发多少个人,所以长连接需要我们主动关闭
  88. System.out.println("下发人员完成");
  89. break;
  90. }
  91. }
  92. if (!AcsService.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
  93. System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  94. } else {
  95. System.out.println("NET_DVR_StopRemoteConfig接口成功");
  96. }
  97. }
  98. return strInBuffer;
  99. }
  100. /**
  101. * 查询人员信息
  102. *
  103. * @param userID
  104. * @return
  105. * @throws JSONException
  106. */
  107. public static String searchUserInfo(int userID) throws JSONException {
  108. HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
  109. String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
  110. System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
  111. ptrByteArray.write();
  112. int lHandler = AcsService.hCNetSDK.NET_DVR_StartRemoteConfig(userID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
  113. HCNetSDK.BYTE_ARRAY ptrOutuff;
  114. if (lHandler < 0) {
  115. System.out.println("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  116. return strInBuffer;
  117. } else {
  118. //输入参数,XML或者JSON数据,查询多条人员信息json报文
  119. Map<String, Object> parameter = new HashMap<>();
  120. parameter.put("searchID", UUID.randomUUID()); // 查询id
  121. parameter.put("maxResults", 30); // 最大查询数量
  122. String strInbuff = ConfigFileUtil.getReqBodyFromTemplate("SearchUserInfoParam.json", parameter);
  123. // System.out.println("查询的json报文:" + strInbuff);
  124. //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
  125. HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(strInbuff.length());
  126. System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
  127. ptrInbuff.write();
  128. //定义接收结果的结构体
  129. ptrOutuff = new HCNetSDK.BYTE_ARRAY(10 * 1024);
  130. IntByReference pInt = new IntByReference(0);
  131. while (true) {
  132. /*
  133. dwOutBuffSize是输出缓冲区大小,需要自定义指定大小,如果接口报错错误码43.说明接收设备数据的缓冲区或存放图片缓冲区不足,应扩大缓冲区大小
  134. */
  135. int dwState = AcsService.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 20 * 1024, pInt);
  136. // System.out.println(dwState);
  137. if (dwState == -1) {
  138. System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  139. break;
  140. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
  141. System.out.println("配置等待");
  142. try {
  143. Thread.sleep(10);
  144. } catch (InterruptedException e) {
  145. // TODO Auto-generated catch block
  146. e.printStackTrace();
  147. }
  148. continue;
  149. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
  150. System.out.println("查询人员失败");
  151. break;
  152. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
  153. System.out.println("查询人员异常");
  154. break;
  155. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
  156. ptrOutuff.read();
  157. System.out.println("查询人员成功, json:" + new String(ptrOutuff.byValue).trim());
  158. break;
  159. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
  160. System.out.println("获取人员完成");
  161. break;
  162. }
  163. }
  164. if (!AcsService.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
  165. System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  166. } else {
  167. System.out.println("NET_DVR_StopRemoteConfig接口成功");
  168. lHandler = -1;
  169. }
  170. }
  171. return new String(ptrOutuff.byValue).trim();
  172. }
  173. //lsq
  174. public static String getUserInfo(int lUserID , String employeeNo ) throws JSONException {
  175. HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
  176. String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
  177. System.arraycopy( strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
  178. ptrByteArray.write();
  179. int lHandler = AcsService.hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
  180. HCNetSDK.BYTE_ARRAY ptrOutuff;
  181. if (lHandler < 0) {
  182. System.out.println("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  183. return null;
  184. } else {
  185. Map<String, Object> parameter = new HashMap<>();
  186. parameter.put("searchID", UUID.randomUUID()); // 查询id
  187. parameter.put("maxResults",10);
  188. parameter.put("UserInfo.employeeNo",employeeNo);//查询学号对应的人
  189. System.out.println("查询条件"+parameter);
  190. String template = "{\n" +
  191. " \"UserInfoSearchCond\": {\n" +
  192. " \"searchID\": \"${searchID}\",\n" +
  193. " \"searchResultPosition\": 0,\n" +
  194. " \"maxResults\": ${maxResults},\n" +
  195. " \"EmployeeNoList\": [{\n" +
  196. " \"employeeNo\": \"${UserInfo.employeeNo}\"\n" +
  197. " }]\n" +
  198. " }\n" +
  199. "}";
  200. // 生成请求体
  201. String requestJson = replace(template, parameter);
  202. System.out.println("生成的请求体:"+requestJson);
  203. HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(requestJson.length());
  204. System.arraycopy(requestJson.getBytes(), 0, ptrInbuff.byValue, 0, requestJson.length());
  205. ptrInbuff.write();
  206. ptrOutuff = new HCNetSDK.BYTE_ARRAY(10 * 1024);
  207. IntByReference pInt = new IntByReference(0);
  208. while (true) {
  209. int dwState = AcsService.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(),requestJson.length(), ptrOutuff.getPointer(), 20 * 1024, pInt);
  210. if (dwState == -1) {
  211. System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  212. break;
  213. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
  214. System.out.println("配置等待");
  215. try {
  216. Thread.sleep(10);
  217. } catch (InterruptedException e) {
  218. e.printStackTrace();
  219. }
  220. continue;
  221. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
  222. System.out.println("查询人员失败");
  223. break;
  224. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
  225. System.out.println("查询人员异常");
  226. break;
  227. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
  228. ptrOutuff.read();
  229. System.out.println("查询人员成功, json:" + new String(ptrOutuff.byValue).trim());
  230. break;
  231. } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
  232. System.out.println("获取人员完成");
  233. break;
  234. }
  235. }
  236. if (!AcsService.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
  237. System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
  238. } else {
  239. System.out.println("NET_DVR_StopRemoteConfig接口成功");
  240. }
  241. }
  242. return new String(ptrOutuff.byValue).trim();
  243. }
  244. /**
  245. * 删除人员信息
  246. *
  247. * @param userID
  248. * @return
  249. * @throws JSONException
  250. */
  251. public static String deleteUserInfo(int userID,String EmployeeNo) throws JSONException {
  252. //删除单个人员
  253. //输入参数,XML或者JSON数据,删除人员信息json报文
  254. Map<String, Object> parameter = new HashMap<>();
  255. parameter.put("mode", "byEmployeeNo"); // 删除方式, byEmployeeNo: 按员工ID号
  256. parameter.put("employeeNo", EmployeeNo); // 员工ID号
  257. String deleteUserjson = ConfigFileUtil.getReqBodyFromTemplate("DeleteUserInfoParam.json", parameter);
  258. String deleteUserUrl = "PUT /ISAPI/AccessControl/UserInfoDetail/Delete?format=json";
  259. String result = TransIsapi.put_isapi(userID, deleteUserUrl, deleteUserjson);
  260. System.out.println(result);
  261. //获取删除进度
  262. while (true) {
  263. String getDeleteProcessUrl = "GET /ISAPI/AccessControl/UserInfoDetail/DeleteProcess?format=json";
  264. String deleteResult = TransIsapi.get_isapi(userID, getDeleteProcessUrl);
  265. JSONObject jsonObject = new JSONObject(deleteResult);
  266. JSONObject jsonObject1 = jsonObject.getJSONObject("UserInfoDetailDeleteProcess");
  267. String process = jsonObject1.getString("status");
  268. System.out.println("process ="+process);
  269. if (process.equals("processing")) {
  270. System.out.println("正在删除");
  271. continue;
  272. } else if (process.equals("success")) {
  273. System.out.println("删除成功");
  274. break;
  275. }else if(process.equals("failed")){
  276. System.out.println("删除失败");
  277. break;
  278. }
  279. }
  280. return deleteUserjson;
  281. }
  282. }