From 410a48a6cd0261bbbd8f41125375b37e1773ae42 Mon Sep 17 00:00:00 2001 From: 1099815072@qq.com <1099815072@qq.com> Date: Wed, 11 Nov 2020 09:39:55 +0800 Subject: [PATCH] 考勤设备ID获取 --- cloud/dahua/src/main/java/com/example/dahua/MyTask.java | 38 +++++++++++--------------------------- cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/service/UserService.java | 6 ++++++ 3 files changed, 107 insertions(+), 84 deletions(-) diff --git a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java index 4c6b827..84c3a93 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java @@ -74,11 +74,6 @@ public class MyTask implements ApplicationRunner { //自注册 autoRegister(); - /** - * 考勤监听 - */ - kaoQinRecord(); - // System.out.println(" sendRecordDao:"+sendRecordDao.getSenSuccess()); } @@ -105,8 +100,6 @@ public class MyTask implements ApplicationRunner { if (!StringUtils.isEmpty(deviceId)) { attendanceService.updateConnectStateWithDevid(0, deviceId); GateModule.stopRealLoadPic(lLongMap.get(deviceId)); - //人脸识别、人脸检测事件 - FaceRecognitionModule.stopRealLoadPicture(lLongMap.get(deviceId)); lLongMap.remove(deviceId); // devMap.remove(deviceId); removeDevice(deviceId); @@ -249,7 +242,7 @@ public class MyTask implements ApplicationRunner { for (DeviceInfoBean dev : deviceInfoBeans) { if (lLongMap.get(dev.getDevcieId()).intValue() > 0) { - NetSDKLib.LLong lLong = GateModule.realLoadPic(0, analyzerCallback, lLongMap.get(dev.getDevcieId())); + NetSDKLib.LLong lLong = GateModule.realLoadPic2(0, analyzerCallback, lLongMap.get(dev.getDevcieId()),dev.getDevcieId()); // System.out.println("监听成功:"+dev.getDevcieId()); // if (lLong.intValue() != -1) { // //deviceInfoBeans.remove(dev); @@ -260,22 +253,6 @@ public class MyTask implements ApplicationRunner { } } - /** - * 考勤监听 - */ - public synchronized void kaoQinRecord() { - isHasNewDevice = false; - if (null != deviceInfoBeans && deviceInfoBeans.size() > 0) { - for (DeviceInfoBean dev : - deviceInfoBeans) { - if (lLongMap.get(dev.getDevcieId()).intValue() > 0) { - //人脸识别、人脸检测事件监听 - NetSDKLib.LLong lLong = FaceRecognitionModule.realLoadPicture(0, analyzerCallback); - } - } - } - } - //智能订阅 private AnalyzerDataCB analyzerCallback = new AnalyzerDataCB(); @@ -300,12 +277,19 @@ public class MyTask implements ApplicationRunner { path.mkdir(); } + //设备ID获取 + NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); + ToolKits.GetPointerData(dwUser, deviceInfo); + + String szSn = new String(deviceInfo.sSerialNumber).trim(); + ///< 门禁事件 if (dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) { NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO msg = new NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); //卡号 String card = new String(msg.szCardNo).trim(); + System.out.println("sda:" + card + " 抓拍照片存储地址:"); try { @@ -329,11 +313,11 @@ public class MyTask implements ApplicationRunner { if (null != cardBean && cardBean.getType() == 0) { //老师人脸信息,保存人脸记录表 TeacherBean teacherBean = userDao.getTeacherWithId(cardBean.getUser_id()); - sendRecordDao.addFaceRecoder("", teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card,""); + sendRecordDao.addFaceRecoder(szSn, teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card,""); } else if (null != cardBean && cardBean.getType() == 2) { //学生人脸信息,保存人脸记录表 UserInfoBean userInfoBean = userDao.getStudentWithid(cardBean.getUser_id()); - sendRecordDao.addFaceRecoder("", userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath, 1, time, card,""); + sendRecordDao.addFaceRecoder(szSn, userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath, 1, time, card,""); } // TODO 考勤记录 @@ -344,7 +328,7 @@ public class MyTask implements ApplicationRunner { //刷卡时间 String eventTime = msg.UTC.toStringTime(); //保存考勤记录 - kaoQinRecord(status,eventType,card,"",eventTime,snapPicPath); + kaoQinRecord(status,eventType,card,szSn,eventTime,snapPicPath); } } catch (IOException e2) { diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java index 97eb165..a5aaf61 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java @@ -18,10 +18,12 @@ import com.example.dahua.lib.NetSDKLib.*; import com.example.dahua.lib.ToolKits; import com.sun.jna.Memory; import com.sun.jna.ptr.IntByReference; +import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; +@Slf4j public class GateModule { // 查询句柄 private static LLong m_lFindHandle = new LLong(0); @@ -50,6 +52,33 @@ public class GateModule { return m_hAttachHandle; } + public static LLong realLoadPic2(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB, LLong lLong,String devcieId) { + + final NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); + + // 设备ID + System.arraycopy(devcieId.getBytes(), 0, deviceInfo.sSerialNumber, 0, devcieId.getBytes().length); + + /** + * 说明: + * 通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取 + * 下列仅订阅了0通道的智能事件. + */ + int bNeedPicture = 1; // 是否需要图片 + deviceInfo.write(); + LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(lLong, ChannelId, NetSDKLib.EVENT_IVS_ALL, + bNeedPicture, m_AnalyzerDataCB, deviceInfo.getPointer(), null); + deviceInfo.read(); + if (m_hAttachHandle.longValue() != 0) { + System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId); + } else { + System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint()); + return null; + } + + return m_hAttachHandle; + } + /** * 停止上传智能分析数据-图片 */ @@ -169,6 +198,7 @@ public class GateModule { // return true; } + public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, int cardStatus, int cardType, int useTimes, int isFirstEnter, int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) { @@ -254,24 +284,25 @@ public class GateModule { accessCardInfo.read(); if(!bRet) { - //System.err.println("添加卡信息失败." + ToolKits.getErrorCodePrint()); String ret=ToolKits.getErrorCodePrint(); - System.err.println("添加卡信息失败." + ret); String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); - if(number.equals("21")||number.equals("146"))//146用户已存在,21对返回数据的校验出错,1162未知错误 number.equals("1162")|| - { + log.info("添加卡信息失败,错误信息:{} ,错误码:{} ",ret,number); + //146用户已存在,21对返回数据的校验出错,1162未知错误 number.equals("1162")|| + if(number.equals("21")||number.equals("146")) { + //用户已存在/返回数据校验出错时,执行删除用户 deleteUser( userId, lLong); + //重新下发卡至设备 return insertCard( cardNo, userId, cardName, cardPwd, cardStatus, cardType, useTimes, isFirstEnter, isValid, startValidTime, endValidTime, lLong, userType); } + //其他错误码,返回-1 return -1; } else { - System.out.println("添加卡信息成功,卡信息记录集编号 : " + insert.stuCtrlRecordSetResult.nRecNo); + log.info("添加卡信息成功,卡信息记录集编号 : "+ insert.stuCtrlRecordSetResult.nRecNo); return insert.stuCtrlRecordSetResult.nRecNo; } - // return true; } @@ -378,7 +409,8 @@ public class GateModule { CFG_ACCESS_TIMESCHEDULE_INFO msg = new CFG_ACCESS_TIMESCHEDULE_INFO(); String strCmd = NetSDKLib.CFG_CMD_ACCESSTIMESCHEDULE; - int nChannel = 120; // 通道号 + // 通道号 + int nChannel = 120; // msg.stuTimeWeekDay[0].stuTimeSection[0].dwRecordMask String name = "3"; System.arraycopy(name.getBytes(), 0, msg.szName, 0, name.getBytes().length); @@ -387,13 +419,11 @@ public class GateModule { List weekDays = permissionBean.getWeekDays(); Map> map = new HashMap<>(); - for (WeekDay weekDay : - weekDays) { + for (WeekDay weekDay : weekDays) { //整理时间 initWeedayAndTimes(weekDay, map); //设置周计划信息 - for (Map.Entry> entry : - map.entrySet()) { + for (Map.Entry> entry : map.entrySet()) { int weekDayIndex = entry.getKey(); @@ -632,7 +662,25 @@ public class GateModule { return true; } - public static int modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, + /** + * 修改设备卡信息 + * @param recordNo + * @param cardNo + * @param userId + * @param cardName + * @param cardPwd + * @param cardStatus + * @param cardType + * @param useTimes + * @param isFirstEnter + * @param isValid + * @param startValidTime + * @param endValidTime + * @param lLong + * @param userType + * @return + */ + public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, int cardStatus, int cardType, int useTimes, int isFirstEnter, int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) { /** @@ -717,28 +765,24 @@ public class GateModule { CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000); update.read(); accessCardInfo.read(); - + // 返回值:1成功,否则返回 if (!bRet) { - //System.err.println("修改卡信息失败." + ToolKits.getErrorCodePrint()); String ret=ToolKits.getErrorCodePrint(); - System.err.println("修改卡信息失败." + ret); + //结果码 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); - if(number.equals("21")||number.equals("147"))//147用户不存在,21对返回数据的校验出错 - { -// newRecordNo= insertCard( cardNo, userId, cardName, cardPwd, -// cardStatus, cardType, useTimes, isFirstEnter, -// isValid, startValidTime, endValidTime, lLong, userType); - } - if(number.equals("1091")||number.equals("1147"))//未知错误 - { - return Integer.parseInt(number); - } - return 0; - } else { - System.out.println("修改卡信息成功 "); + //147用户不存在,21对返回数据的校验出错 +// if(number.equals("21")||number.equals("147")) { +// +// } +// if(number.equals("1091")||number.equals("1147"))//未知错误 +// { +// return Integer.parseInt(number); +// } + log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number); + return false; } - - return 1; + log.info("修改卡信息成功!"); + return true; } /** @@ -778,8 +822,7 @@ public class GateModule { msg.pBuf = new IntByReference(recordNo).getPointer(); msg.write(); - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, - CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000); + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000); msg.read(); if (!bRet) { @@ -1035,12 +1078,10 @@ public class GateModule { * 打印具体的信息 */ for (int i = 0; i < nMaxNum; i++) { - System.out.println("[" + i + "]删除用户结果:" - + failCodes[i].nFailCode); + log.info("[" + i + "]删除用户结果:" + failCodes[i].nFailCode); } } else { - //System.err.println("删除用户失败, " + getErrorCode()); - System.err.println("删除用户失败, " + ToolKits.getErrorCodePrint()); + log.error("添加卡信息失败"+ ToolKits.getErrorCodePrint()); } stIn.read(); @@ -1128,23 +1169,21 @@ public class GateModule { stIn.read(); stOut.read(); if (bRet) { - System.out.println("添加人脸成功!"); + log.info("添加人脸成功!"); } else { -// System.err.println("添加人脸失败!" + ToolKits.getErrorCodePrint()); String ret=ToolKits.getErrorCodePrint(); - System.err.println("添加人脸失败!" + ret); String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); - if(number.equals("1031"))//照片已存在 - { - return modifyFaceInfo( userId, memory, lLong)==1?true:false; + log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number); + //number = 1031:照片已存在;number = 1029 :用户ID不存在 + if(number.equals("1031")){ + return modifyFaceInfo( userId, memory, lLong); } - if(number.equals("1029"))//照片已存在 + if(number.equals("1029")) { return addFaceInfo( userId, memory, lLong); } return false; } - return true; } @@ -1186,7 +1225,7 @@ public class GateModule { stIn.read(); stOut.read(); if (bRet) { - System.out.println("修改人脸成功!"); + log.info("修改人脸成功!"); } else { // System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint()); String ret=ToolKits.getErrorCodePrint(); @@ -1199,7 +1238,7 @@ public class GateModule { } - public static int modifyFaceInfo(String userId, Memory memory, LLong lLong) { + public static boolean modifyFaceInfo(String userId, Memory memory, LLong lLong) { int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 /** @@ -1229,22 +1268,16 @@ public class GateModule { boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000); stIn.read(); stOut.read(); + if (bRet) { - System.out.println("修改人脸成功!"); + log.info("修改人脸成功!"); } else { -// System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint()); String ret=ToolKits.getErrorCodePrint(); - System.err.println("修改人脸失败!" + ret); String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); - if(number.equals("1029"))//1029用户ID不存在 - { - //return addFaceInfo(userId, memory, lLong); - return Integer.parseInt(number); - } - return 0; + log.error("修改人脸失败,错误信息:{} ,错误码:{} ",ret,number); + return false; } - - return 1; + return true; } /** diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/UserService.java b/cloud/dahua/src/main/java/com/example/dahua/service/UserService.java index 0692b38..882464c 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/UserService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/UserService.java @@ -54,6 +54,12 @@ public interface UserService { */ boolean sendPermission(PermissionBean permissionBean); + /** + * 根据学籍号、学校id获取用户id + * @param code + * @param schoolId + * @return + */ String getUserId(String code,String schoolId); -- libgit2 0.21.0