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,124 +37,85 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff ...@@ -33,124 +37,85 @@ 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 = "";
int lHandler = hCNetSDK.NET_DVR_StartRemoteConfig(userID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null); try {
if(lHandler < 0){ int lHandler = hCNetSDK.NET_DVR_StartRemoteConfig(userID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
log.info("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为"+hCNetSDK.NET_DVR_GetLastError()); if (lHandler < 0) {
} log.info("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为==>{}", hCNetSDK.NET_DVR_GetLastError());
else{ throw new AppException(String.format("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为==>%s", hCNetSDK.NET_DVR_GetLastError()));
//组装查询的JSON报文,这边查询的是所有的人员 } else {
JSONObject jsonObject = new JSONObject(); //组装查询的JSON报文,这边查询的是所有的人员
JSONObject jsonSearchCond = new JSONObject(); JSONObject jsonObject = new JSONObject();
JSONObject jsonSearchCond = new JSONObject();
//如果需要查询指定的工号人员信息,把下面注释的内容去除掉即可
/* JSONArray EmployeeNoList = new JSONArray(); jsonSearchCond.put("searchID", DateUtil.format(new Date(), "yyyyMMdd"));
JSONObject employeeNo1 = new JSONObject(); jsonSearchCond.put("searchResultPosition", 0);
employeeNo1.put("employeeNo", "12346"); jsonSearchCond.put("maxResults", 150);
JSONObject employeeNo2 = new JSONObject(); jsonObject.put("UserInfoSearchCond", jsonSearchCond);
employeeNo2.put("employeeNo", "1000");
EmployeeNoList.put(employeeNo1); String strInbuff = jsonObject.toString();
EmployeeNoList.put(employeeNo2); log.info("UserInfo/Search 请求json报文==>{}", strInbuff);
jsonSearchCond.put("EmployeeNoList", EmployeeNoList);*/ //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(strInbuff.length());
jsonSearchCond.put("searchID", "20211126"); System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
jsonSearchCond.put("searchResultPosition", 0); ptrInbuff.write();
jsonSearchCond.put("maxResults", 150); //定义接收结果的结构体
jsonObject.put("UserInfoSearchCond", jsonSearchCond); HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(1024 * 1024);
IntByReference pInt = new IntByReference(0);
String strInbuff = jsonObject.toString(); while (true) {
log.info("查询的json报文:" + strInbuff); int dwState = hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 1024 * 1024, pInt);
log.info("dwState<=={}", dwState);
//把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。 if (dwState == -1) {
HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(strInbuff.length()); log.info("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:{}", hCNetSDK.NET_DVR_GetLastError());
System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length()); throw new AppException(String.format("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:%s", hCNetSDK.NET_DVR_GetLastError()));
ptrInbuff.write(); // break;
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
//定义接收结果的结构体 log.info("配置等待");
HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(1024*1024); try {
IntByReference pInt = new IntByReference(0); Thread.sleep(10);
while(true){ } catch (InterruptedException e) {
int dwState = hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 1024*1024, pInt); // TODO Auto-generated catch block
System.out.println(dwState); e.printStackTrace();
if(dwState == -1){ }
System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); continue;
break; } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
} log.info("查询人员失败");
else if(dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) throw new AppException(String.format("查询人员失败,错误码:%s", HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED));
{ // break;
System.out.println("配置等待"); } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
try { log.info("查询人员异常");
Thread.sleep(10); throw new AppException(String.format("查询人员异常,错误码:%s", HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION));
} catch (InterruptedException e) { // break;
// TODO Auto-generated catch block } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
e.printStackTrace(); ptrOutuff.read();
resp = new String(ptrOutuff.byValue).trim();
log.info("查询人员成功, json==>{}", resp);
break;
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
log.info("获取人员完成");
break;
} }
continue;
}
else if(dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED)
{
System.out.println("查询人员失败");
break;
} }
else if(dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) if (!hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
{ log.info("NET_DVR_StopRemoteConfig接口调用失败,错误码==>{}", hCNetSDK.NET_DVR_GetLastError());
System.out.println("查询人员异常"); throw new AppException(String.format("NET_DVR_StopRemoteConfig接口调用失败,错误码==>{}", hCNetSDK.NET_DVR_GetLastError()));
break; } else {
log.info("NET_DVR_StopRemoteConfig接口成功");
} }
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(!hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)){
System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
} }
else{ UserSearchInfo userSearchInfo = JSON.parseObject(resp, new TypeReference<UserSearchInfo>() {
System.out.println("NET_DVR_StopRemoteConfig接口成功");
lHandler = -1;
}
}
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