Commit dc3c37f2 authored by 赵啸非's avatar 赵啸非

同步人员方法添加

parent ef048dd1
......@@ -61,7 +61,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
public void excuteTask(ITask task) throws AppException {
try {
log.info("同步部门");
syncDepts();
//syncDepts();
log.info("同步用户");
staffService.syncPersons(null);
......
package com.mortals.xhx.module.hik.door.model.req.door;
import com.alibaba.fastjson.annotation.JSONField;
import com.mortals.xhx.module.hik.BaseReq;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
public class HikDoorEventReq extends BaseReq implements Serializable {
/**
* 当前页
*/
private Integer pageNo;
/**
* 每页大小
*/
private Integer pageSize;
private String doorName;
private String sort;
/**
* 事件类型,参考[附录D2.1 门禁事件]
* @[软件产品-综合安防管理平台-附录-附录D 事件列表-附录D2 一卡通事件-附录D2.1 门禁事件]
*/
private List<Integer> eventTypes;
private List<String> readerDevIndexCodes;
private String personName;
private String doorRegionIndexCode;
@JSONField(format = "yyyy-MM-dd'T'HH:mm:ssXXX")
private Date receiveStartTime;
@JSONField(format = "yyyy-MM-dd'T'HH:mm:ssXXX")
private Date receiveEndTime;
private Date startTime;
private Date endTime;
private List<String> doorIndexCodes;
private String order;
}
package com.mortals.xhx.module.hik.door.model.rsp.door.info;
import lombok.Data;
@Data
public class EventInfo{
private int byTimeType;
private int byRes1;
private Pointer pointer;
private boolean autoWrite;
private String sNetUser;
private boolean autoRead;
private StruTime struTime;
private int dwMajor;
private int dwMinor;
private int dwSize;
private int dwVisibleLightDataLen;
private int dwThermalDataLen;
private String byRes;
private StruAcsEventInfo struAcsEventInfo;
private StruRemoteHostAddr struRemoteHostAddr;
private int wInductiveEventType;
private int dwQRCodeInfoLen;
private int dwPicDataLen;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.door.model.rsp.door.info;
import lombok.Data;
@Data
public class PoiObjectNter{
private boolean valid;
private int size;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.door.model.rsp.door.info;
import lombok.Data;
@Data
public class Pointer{
private boolean valid;
private int size;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.door.model.rsp.door.info;
import lombok.Data;
@Data
public class StruAcsEventInfo{
private int bySwipeCardType;
private int byRes1;
private int byChannelControllerID;
private int byDeviceNo;
private int dwRs485No;
private int dwCardReaderNo;
private int dwEmployeeNo;
private int byEventAttribute;
private StruRegionCoordinates struRegionCoordinates;
private String byCardNo;
private int dwMultiCardGroupNo;
private int byChannelControllerIRAdaptorID;
private int byChannelControllerLampID;
private String byMACAddr;
private String byRes;
private int byReportChannel;
private int dwDoorNo;
private int byCurrentVerifyMode;
private int dwRecordChannelNum;
private int dwSerialNo;
private int dwCaseSensorNo;
private int byInternetAccess;
private Pointer pointer;
private boolean autoWrite;
private int byChannelControllerIREmitterID;
private int dwAlarmInNo;
private boolean autoRead;
private int byCardReaderKind;
private String byEmployeeNo;
private int byMask;
private int byStatusValue;
private int dwSize;
private int wAccessChannel;
private int wLocalControllerID;
private int fCurrTemperature;
private int byAllowListNo;
private int byThermometryUnit;
private int dwAlarmOutNo;
private int byUserType;
private int byCardType;
private int byIsAbnomalTemperature;
private int byDistractControlNo;
private int dwVerifyNo;
private int byAttendanceStatus;
private int byType;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.door.model.rsp.door.info;
import lombok.Data;
@Data
public class StruRegionCoordinates{
private PoiObjectNter poiObjectNter;
private int fX;
private boolean autoWrite;
private int fY;
private boolean autoRead;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.door.model.rsp.door.info;
import lombok.Data;
@Data
public class StruRemoteHostAddr{
private Pointer pointer;
private boolean autoWrite;
private String byRes;
private boolean autoRead;
private String sIpV4;
}
\ No newline at end of file
package com.mortals.xhx.module.hik.door.model.rsp.door.info;
import lombok.Data;
@Data
public class StruTime{
private int dwDay;
private Pointer pointer;
private boolean autoWrite;
private int dwHour;
private boolean autoRead;
private int dwYear;
private int dwMinute;
private int dwMonth;
private int dwSecond;
}
\ No newline at end of file
......@@ -2,8 +2,15 @@ package com.mortals.xhx.module.hik.door.service;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.door.model.DoorEntity;
import com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq;
import com.mortals.xhx.module.hik.door.model.req.door.HikDoorEventReq;
import com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo;
import com.mortals.xhx.module.hik.door.model.rsp.door.info.EventInfo;
import com.mortals.xhx.module.hik.staff.model.req.staff.StaffReq;
import com.mortals.xhx.module.hik.staff.model.rsp.staff.search.UserSearchInfo;
import java.util.List;
/**
* 海康门禁接口对接类
......@@ -20,4 +27,15 @@ public interface IHikDoorService {
* @date: 2023/4/13 10:24
*/
Rest<DoorEventDataInfo> getDoorEvents(DoorEventReq doorEventReq);
/**
* 查询海康门禁事件
* @param hikDoorEventReq
* @param doorEntity
* @return
*/
Rest<List<EventInfo>> searchDoorEventsList(HikDoorEventReq hikDoorEventReq, DoorEntity doorEntity);
}
package com.mortals.xhx.module.hik.door.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.xhx.hikdoor.Acs.AcsMain;
import com.mortals.xhx.hikdoor.NetSDKDemo.HCNetSDK;
import com.mortals.xhx.module.door.model.DoorEntity;
import com.mortals.xhx.module.hik.AbstractHikService;
import com.mortals.xhx.module.hik.HikApiRest;
import com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq;
import com.mortals.xhx.module.hik.door.model.req.door.HikDoorEventReq;
import com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo;
import com.mortals.xhx.module.hik.door.model.rsp.door.info.EventInfo;
import com.mortals.xhx.module.hik.door.service.IHikDoorService;
import com.mortals.xhx.module.hik.staff.model.rsp.staff.search.UserSearchInfo;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.javassist.bytecode.stackmap.BasicBlock;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.*;
/**
* 海康人员接口类
......@@ -36,7 +49,7 @@ public class HikDoorServiceImpl extends AbstractHikService implements IHikDoorSe
try {
log.info("door events req=>{}", JSON.toJSONString(doorEventReq));
String respJson = ArtemisHttpUtil.doPostStringArtemis(config, path, JSON.toJSONString(doorEventReq), null, null, "application/json");
//log.info("door events error resp=>{}", respJson);
//log.info("door events error resp=>{}", respJson);
HikApiRest<DoorEventDataInfo> rest = JSON.parseObject(respJson, new TypeReference<HikApiRest<DoorEventDataInfo>>() {
});
log.info("door events resp=>{}", rest.getCode());
......@@ -50,4 +63,111 @@ public class HikDoorServiceImpl extends AbstractHikService implements IHikDoorSe
return Rest.fail(e.getMessage());
}
}
@Override
public Rest<List<EventInfo>> searchDoorEventsList(HikDoorEventReq hikDoorEventReq, DoorEntity doorEntity) {
HCNetSDK hCNetSDK = createSDKInstance();
initLoadSdk(hCNetSDK);
int userID = login(hCNetSDK, doorEntity);
List<EventInfo> eventInfoList = new ArrayList<>();
int i = 0; //事件条数
HCNetSDK.NET_DVR_ACS_EVENT_COND struAcsEventCond = new HCNetSDK.NET_DVR_ACS_EVENT_COND();
struAcsEventCond.read();
struAcsEventCond.dwSize = struAcsEventCond.size();
//查询全部主次类型的报警
struAcsEventCond.dwMajor = 0; // 主次事件类型设为0,代表查询所有事件
struAcsEventCond.dwMinor = 0; //
Date startTime = hikDoorEventReq.getStartTime();
Date endTime = hikDoorEventReq.getEndTime();
//开始时间
struAcsEventCond.struStartTime.dwYear = DateUtil.year(startTime);
struAcsEventCond.struStartTime.dwMonth = DateUtil.month(startTime) + 1;
struAcsEventCond.struStartTime.dwDay = DateUtil.dayOfMonth(startTime);
struAcsEventCond.struStartTime.dwHour = DateUtil.hour(startTime, true);
struAcsEventCond.struStartTime.dwMinute = DateUtil.minute(startTime);
struAcsEventCond.struStartTime.dwSecond = DateUtil.second(startTime);
//结束时间
struAcsEventCond.struEndTime.dwYear = DateUtil.year(endTime);
struAcsEventCond.struEndTime.dwMonth = DateUtil.month(endTime) + 1;
struAcsEventCond.struEndTime.dwDay = DateUtil.dayOfMonth(endTime);
struAcsEventCond.struEndTime.dwHour = DateUtil.hour(endTime, true);
struAcsEventCond.struEndTime.dwMinute = DateUtil.minute(endTime);
struAcsEventCond.struEndTime.dwSecond = DateUtil.second(endTime);
struAcsEventCond.wInductiveEventType = 1;
struAcsEventCond.byPicEnable = 0; //是否带图片,0-不带图片,1-带图片
struAcsEventCond.write();
Pointer ptrStruEventCond = struAcsEventCond.getPointer();
try {
int m_lSearchEventHandle = hCNetSDK.NET_DVR_StartRemoteConfig(userID, HCNetSDK.NET_DVR_GET_ACS_EVENT, ptrStruEventCond, struAcsEventCond.size(), null, null);
if (m_lSearchEventHandle <= -1) {
log.info("NET_DVR_StartRemoteConfig调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
throw new AppException("NET_DVR_StartRemoteConfig调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
}
HCNetSDK.NET_DVR_ACS_EVENT_CFG struAcsEventCfg = new HCNetSDK.NET_DVR_ACS_EVENT_CFG();
struAcsEventCfg.read();
struAcsEventCfg.dwSize = struAcsEventCfg.size();
struAcsEventCfg.write();
Pointer ptrStruEventCfg = struAcsEventCfg.getPointer();
while (true) {
int dwEventSearch = hCNetSDK.NET_DVR_GetNextRemoteConfig(m_lSearchEventHandle, ptrStruEventCfg, struAcsEventCfg.size());
if (dwEventSearch <= -1) {
log.info("NET_DVR_GetNextRemoteConfig接口调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
throw new AppException("NET_DVR_GetNextRemoteConfig接口调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
}
if (dwEventSearch == HCNetSDK.NET_SDK_GET_NEXT_STATUS_NEED_WAIT) {
log.info("配置等待....");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
} else if (dwEventSearch == HCNetSDK.NET_SDK_NEXT_STATUS__FINISH) {
log.info("获取事件完成");
break;
} else if (dwEventSearch == HCNetSDK.NET_SDK_GET_NEXT_STATUS_FAILED) {
log.info("获取事件出现异常");
break;
} else if (dwEventSearch == HCNetSDK.NET_SDK_GET_NEXT_STATUS_SUCCESS) {
struAcsEventCfg.read();
EventInfo eventInfo = JSON.parseObject(JSON.toJSONString(struAcsEventCfg), EventInfo.class);
//获取的事件信息通过struAcsEventCfg结构体进行解析,
log.info(i + "获取事件成功, 报警主类型:" + Integer.toHexString(struAcsEventCfg.dwMajor) + "报警次类型:" + Integer.toHexString(struAcsEventCfg.dwMinor) + " 卡号:" + new String(struAcsEventCfg.struAcsEventInfo.byCardNo).trim());
/**
* 工号有两个字段,dwEmployeeNo表示工号,当值为0时,表示无效,解析byEmployeeNo参数
*/
log.info("工号1:" + struAcsEventCfg.struAcsEventInfo.dwEmployeeNo);
log.info("工号2:" + new String(struAcsEventCfg.struAcsEventInfo.byEmployeeNo));
log.info("考勤状态值:" + struAcsEventCfg.struAcsEventInfo.byStatusValue);
log.info("时间:" + struAcsEventCfg.struTime);
eventInfoList.add(eventInfo);
i++;
}
}
i = 0;
if (!hCNetSDK.NET_DVR_StopRemoteConfig(m_lSearchEventHandle)) {
log.info("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
} else {
log.info("NET_DVR_StopRemoteConfig接口成功");
}
} catch (Exception e) {
log.error("获取事件异常", e);
}
return Rest.ok(eventInfoList);
}
}
......@@ -4,7 +4,6 @@ package com.mortals.xhx.module.hik.staff.service;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.door.model.DoorEntity;
import com.mortals.xhx.module.hik.staff.model.req.staff.StaffReq;
import com.mortals.xhx.module.hik.staff.model.rsp.person.PersonDataInfo;
import com.mortals.xhx.module.hik.staff.model.rsp.staff.search.UserSearchInfo;
/**
......@@ -25,11 +24,5 @@ public interface IHikStaffService {
/**
* 获取所有人员接口
*
* @return
*/
Rest<PersonDataInfo> getAllPersonList(DoorEntity doorEntity);
}
......@@ -9,7 +9,6 @@ import com.mortals.xhx.hikdoor.NetSDKDemo.HCNetSDK;
import com.mortals.xhx.module.door.model.DoorEntity;
import com.mortals.xhx.module.hik.AbstractHikService;
import com.mortals.xhx.module.hik.staff.model.req.staff.StaffReq;
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.sun.jna.ptr.IntByReference;
......@@ -116,10 +115,4 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff
}
}
@Override
public Rest<PersonDataInfo> getAllPersonList(DoorEntity doorEntity) {
return Rest.ok();
}
}
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