Commit 55225d82 authored by 赵啸非's avatar 赵啸非

添加海康人员查询接口

parent a655e1e9
...@@ -19,4 +19,6 @@ public class PersonReq extends BaseReq implements Serializable { ...@@ -19,4 +19,6 @@ public class PersonReq extends BaseReq implements Serializable {
*/ */
private Integer pageSize; private Integer pageSize;
} }
package com.mortals.xhx.module.hik.staff.model.rsp.staff;
public class UserInfoSerch {
}
package com.mortals.xhx.module.hik.staff.model.rsp.staff.search;
import lombok.Data;
@Data
public class PersonInfoExtendsItem{
private String value;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.staff.model.rsp.staff.search;
import lombok.Data;
@Data
public class RightPlanItem{
private String planTemplateNo;
private int doorNo;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.staff.model.rsp.staff.search;
import java.util.List;
import lombok.Data;
@Data
public class UserInfoItem{
private String doorRight;
private int roomNumber;
private String gender;
private int numOfCard;
private String employeeNo;
private List<RightPlanItem> rightPlan;
private boolean closeDelayEnabled;
private String password;
private Valid valid;
private String belongGroup;
private int maxOpenDoorTime;
private int openDoorTime;
private String name;
private int floorNumber;
private List<PersonInfoExtendsItem> personInfoExtends;
private boolean localUIRight;
private String userType;
private int numOfFace;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.staff.model.rsp.staff.search;
import java.util.List;
import lombok.Data;
@Data
public class UserInfoSearch{
private String responseStatusStrg;
private String searchID;
private List<UserInfoItem> userInfo;
private int numOfMatches;
private int totalMatches;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.staff.model.rsp.staff.search;
import lombok.Data;
@Data
public class UserSearchInfo{
private UserInfoSearch userInfoSearch;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.staff.model.rsp.staff.search;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.util.Date;
@Data
public class Valid{
private Boolean enable;
@JSONField(format = "yyyy-MM-dd'T'HH:mm:ss")
private Date beginTime;
@JSONField(format = "yyyy-MM-dd'T'HH:mm:ss")
private Date endTime;
}
\ No newline at end of file
...@@ -5,6 +5,7 @@ import com.mortals.framework.common.Rest; ...@@ -5,6 +5,7 @@ import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.door.model.DoorEntity; import com.mortals.xhx.module.door.model.DoorEntity;
import com.mortals.xhx.module.hik.staff.model.req.person.PersonReq; import com.mortals.xhx.module.hik.staff.model.req.person.PersonReq;
import com.mortals.xhx.module.hik.staff.model.rsp.person.PersonDataInfo; import com.mortals.xhx.module.hik.staff.model.rsp.person.PersonDataInfo;
import com.mortals.xhx.module.hik.staff.model.rsp.staff.search.UserSearchInfo;
/** /**
* 海康人员接口对接类 * 海康人员接口对接类
...@@ -20,7 +21,7 @@ public interface IHikStaffService { ...@@ -20,7 +21,7 @@ public interface IHikStaffService {
* @param personReq * @param personReq
* @return * @return
*/ */
Rest<PersonDataInfo> getPersonList(PersonReq personReq, DoorEntity doorEntity); Rest<UserSearchInfo> getPersonList(PersonReq personReq, DoorEntity doorEntity);
......
package com.mortals.xhx.module.hik.staff.service.impl; package com.mortals.xhx.module.hik.staff.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.hikvision.artemis.sdk.ArtemisHttpUtil; import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig; import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.xhx.hikdoor.Acs.AcsMain; import com.mortals.xhx.hikdoor.Acs.AcsMain;
import com.mortals.xhx.hikdoor.NetSDKDemo.HCNetSDK; import com.mortals.xhx.hikdoor.NetSDKDemo.HCNetSDK;
import com.mortals.xhx.module.door.model.DoorEntity; import com.mortals.xhx.module.door.model.DoorEntity;
...@@ -12,12 +14,14 @@ import com.mortals.xhx.module.hik.AbstractHikService; ...@@ -12,12 +14,14 @@ import com.mortals.xhx.module.hik.AbstractHikService;
import com.mortals.xhx.module.hik.HikApiRest; import com.mortals.xhx.module.hik.HikApiRest;
import com.mortals.xhx.module.hik.staff.model.req.person.PersonReq; import com.mortals.xhx.module.hik.staff.model.req.person.PersonReq;
import com.mortals.xhx.module.hik.staff.model.rsp.person.PersonDataInfo; import com.mortals.xhx.module.hik.staff.model.rsp.person.PersonDataInfo;
import com.mortals.xhx.module.hik.staff.model.rsp.staff.search.UserSearchInfo;
import com.mortals.xhx.module.hik.staff.service.IHikStaffService; import com.mortals.xhx.module.hik.staff.service.IHikStaffService;
import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject; import org.json.JSONObject;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -33,67 +37,50 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff ...@@ -33,67 +37,50 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff
//查询所有人员 //查询所有人员
@Override @Override
public Rest<PersonDataInfo> getPersonList(PersonReq personReq, DoorEntity doorEntity) { public Rest<UserSearchInfo> getPersonList(PersonReq personReq, DoorEntity doorEntity) {
//todo 新的链接设备 //todo 新的链接设备
HCNetSDK hCNetSDK = createSDKInstance(); HCNetSDK hCNetSDK = createSDKInstance();
initLoadSdk(hCNetSDK); initLoadSdk(hCNetSDK);
int userID = login(hCNetSDK, doorEntity); int userID = login(hCNetSDK, doorEntity);
HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组 HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json"; String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中 System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
ptrByteArray.write(); ptrByteArray.write();
String resp = "";
try {
int lHandler = hCNetSDK.NET_DVR_StartRemoteConfig(userID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null); int lHandler = hCNetSDK.NET_DVR_StartRemoteConfig(userID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
if(lHandler < 0){ if (lHandler < 0) {
log.info("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为"+hCNetSDK.NET_DVR_GetLastError()); log.info("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为==>{}", hCNetSDK.NET_DVR_GetLastError());
} throw new AppException(String.format("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为==>%s", hCNetSDK.NET_DVR_GetLastError()));
else{ } else {
//组装查询的JSON报文,这边查询的是所有的人员 //组装查询的JSON报文,这边查询的是所有的人员
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
JSONObject jsonSearchCond = new JSONObject(); JSONObject jsonSearchCond = new JSONObject();
//如果需要查询指定的工号人员信息,把下面注释的内容去除掉即可 jsonSearchCond.put("searchID", DateUtil.format(new Date(), "yyyyMMdd"));
/* JSONArray EmployeeNoList = new JSONArray();
JSONObject employeeNo1 = new JSONObject();
employeeNo1.put("employeeNo", "12346");
JSONObject employeeNo2 = new JSONObject();
employeeNo2.put("employeeNo", "1000");
EmployeeNoList.put(employeeNo1);
EmployeeNoList.put(employeeNo2);
jsonSearchCond.put("EmployeeNoList", EmployeeNoList);*/
jsonSearchCond.put("searchID", "20211126");
jsonSearchCond.put("searchResultPosition", 0); jsonSearchCond.put("searchResultPosition", 0);
jsonSearchCond.put("maxResults", 150); jsonSearchCond.put("maxResults", 150);
jsonObject.put("UserInfoSearchCond", jsonSearchCond); jsonObject.put("UserInfoSearchCond", jsonSearchCond);
String strInbuff = jsonObject.toString(); String strInbuff = jsonObject.toString();
log.info("查询的json报文:" + strInbuff); log.info("UserInfo/Search 请求json报文==>{}", strInbuff);
//把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。 //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(strInbuff.length()); HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(strInbuff.length());
System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length()); System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
ptrInbuff.write(); ptrInbuff.write();
//定义接收结果的结构体 //定义接收结果的结构体
HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(1024*1024); HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(1024 * 1024);
IntByReference pInt = new IntByReference(0); IntByReference pInt = new IntByReference(0);
while(true){ while (true) {
int dwState = hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 1024*1024, pInt); int dwState = hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 1024 * 1024, pInt);
System.out.println(dwState); log.info("dwState<=={}", dwState);
if(dwState == -1){ if (dwState == -1) {
System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); log.info("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:{}", hCNetSDK.NET_DVR_GetLastError());
break; throw new AppException(String.format("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:%s", hCNetSDK.NET_DVR_GetLastError()));
} // break;
else if(dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
{ log.info("配置等待");
System.out.println("配置等待");
try { try {
Thread.sleep(10); Thread.sleep(10);
} catch (InterruptedException e) { } catch (InterruptedException e) {
...@@ -101,56 +88,34 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff ...@@ -101,56 +88,34 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff
e.printStackTrace(); e.printStackTrace();
} }
continue; continue;
} } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
else if(dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) log.info("查询人员失败");
{ throw new AppException(String.format("查询人员失败,错误码:%s", HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED));
System.out.println("查询人员失败"); // break;
break; } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
} log.info("查询人员异常");
else if(dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) throw new AppException(String.format("查询人员异常,错误码:%s", HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION));
{ // break;
System.out.println("查询人员异常"); } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
break;
}
else if(dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS)
{
ptrOutuff.read(); ptrOutuff.read();
System.out.println("查询人员成功, json:" + new String(ptrOutuff.byValue).trim()); resp = new String(ptrOutuff.byValue).trim();
log.info("查询人员成功, json==>{}", resp);
break; break;
} } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
else if(dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) { log.info("获取人员完成");
System.out.println("获取人员完成");
break; break;
} }
} }
if (!hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
if(!hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)){ log.info("NET_DVR_StopRemoteConfig接口调用失败,错误码==>{}", hCNetSDK.NET_DVR_GetLastError());
System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); throw new AppException(String.format("NET_DVR_StopRemoteConfig接口调用失败,错误码==>{}", hCNetSDK.NET_DVR_GetLastError()));
} } else {
else{ log.info("NET_DVR_StopRemoteConfig接口成功");
System.out.println("NET_DVR_StopRemoteConfig接口成功");
lHandler = -1;
} }
} }
UserSearchInfo userSearchInfo = JSON.parseObject(resp, new TypeReference<UserSearchInfo>() {
ArtemisConfig config = getArtemisConfig();
String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/person/personList";
Map<String, String> path = new HashMap<>(2);
path.put(protocol, getCamsApi);
try {
String respJson = ArtemisHttpUtil.doPostStringArtemis(config, path, JSON.toJSONString(personReq), null, null, "application/json");
log.info("person resp=>{}", respJson);
HikApiRest<PersonDataInfo> rest = JSON.parseObject(respJson, new TypeReference<HikApiRest<PersonDataInfo>>() {
}); });
if ("0".equals(rest.getCode())) { return Rest.ok(userSearchInfo);
return Rest.ok(rest.getData());
} else {
log.info("person error resp=>{}", respJson);
return Rest.fail(rest.getMsg());
}
} catch (Exception e) { } catch (Exception e) {
log.error("获取人员异常", e); log.error("获取人员异常", e);
return Rest.fail(e.getMessage()); return Rest.fail(e.getMessage());
...@@ -160,10 +125,7 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff ...@@ -160,10 +125,7 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff
@Override @Override
public Rest<PersonDataInfo> getAllPersonList(DoorEntity doorEntity) { public Rest<PersonDataInfo> getAllPersonList(DoorEntity doorEntity) {
return Rest.ok();
return null;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment