From 533102565aaa8093fc7bec7f246cba165b20cf5d Mon Sep 17 00:00:00 2001 From: 1099815072@qq.com <1099815072@qq.com> Date: Wed, 18 Nov 2020 16:57:28 +0800 Subject: [PATCH] 大华项目代码提交 --- cloud/dahua/src/main/java/com/example/dahua/MyTask.java | 3 ++- cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java | 40 ++++++++++++++++++++++------------------ cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceErrorType.java | 1 + cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------- 4 files changed, 100 insertions(+), 78 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 27e7ae3..176d4a7 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java @@ -443,12 +443,13 @@ public class MyTask implements ApplicationRunner { checkIn.setFlag(eventType == 2 ? 1 : 0); checkIn.setCheckTime(eventTime); searchMapper.checkIn(checkIn); + if (checkIn.getIsSuccess() == 1) { //考勤成功 String content = "考勤成功!,设备:" + deviceId + "卡号:" + cardNo + "方向:" + (eventType == 1 ? "进门" : "出门") + "______" + eventTime; //开始推送看板 - sendMQMess(content,deviceId,eventType); + sendMQMess(deviceId,cardNo,eventType); //记录学生考勤签到记录 FileUtils.getInstance().writeLogs(content, FileUtils.qiandaoSuccess); diff --git a/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java b/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java index 26adddf..51b1088 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java @@ -328,7 +328,7 @@ public class SendUserInfoTask { String studentType = userDao.getStudentType(attendanceBean.getSchool_id(),sendRecordBean.getCustomerid()); //通道号 - int channel = analysisPermission(Integer.parseInt(attendanceBean.getSchool_id()),studentType); + String channel = analysisPermission(Integer.parseInt(attendanceBean.getSchool_id()),studentType); /** * 注:用户下发逻辑 @@ -370,10 +370,12 @@ public class SendUserInfoTask { log.info("=================开始执行下发人脸及卡号任务================="); //卡号取反 String cardNum =""; - if(attendanceBean.getClint_id().startsWith("ytj")&&Integer.parseInt(attendanceBean.getSchool_id())!=126&&Integer.parseInt(attendanceBean.getSchool_id())!=393) - {cardNum = student_num;} - else - {cardNum = cardNo(student_num);} + if(attendanceBean.getClint_id().startsWith("ytj")&&Integer.parseInt(attendanceBean.getSchool_id())!=126 + &&Integer.parseInt(attendanceBean.getSchool_id())!=393) { + cardNum = student_num; + } else { + cardNum = cardNo(student_num); + } //bCardFlags = true, 存在下发记录,则存在下发记录集编号,执行修改卡、人脸信息 if (bCardFlags ==1) { //修改设备卡信息 @@ -510,7 +512,7 @@ public class SendUserInfoTask { * @param studentType * @return */ - private int analysisPermission(int schoolId, String studentType){ + private String analysisPermission(int schoolId, String studentType){ List permissionFaceBeans = permissFaceService.getPermissionList(schoolId); String channel =""; if(permissionFaceBeans.size()>0){ @@ -523,22 +525,24 @@ public class SendUserInfoTask { channel= permissionFaceBean.getChannel(); } } + if(StringUtils.isEmpty(channel)){ + log.warn("未获取到学校权限通道号!"); + return ""; + } + return channel; } - if(StringUtils.isEmpty(channel)){ - log.warn("未获取到学校权限通道号!"); - return 0; - } - return Integer.parseInt(channel); + return channel; } - public static void main(String[] args) { - String json ="{\"studentType\":\"1,2\",\"deviceIds\":[\"aaa\"],\"weekDays\":[{\"weekTimes\":[{\"startTime\":\"12:00\",\"endTime\":\"06:00\"}],\"sex\":\"1,2\",\"weekDay\":\"0,1,2\"}]}"; - PermissionBean permissionBean = objectMapper.fromJson(json,PermissionBean.class); - String studentType = permissionBean.getStudentType(); - if(studentType.indexOf("1")!=-1){ - System.out.println(true); - } +// String json ="{\"studentType\":\"1,2\",\"deviceIds\":[\"aaa\"],\"weekDays\":[{\"weekTimes\":[{\"startTime\":\"12:00\",\"endTime\":\"06:00\"}],\"sex\":\"1,2\",\"weekDay\":\"0,1,2\"}]}"; +// PermissionBean permissionBean = objectMapper.fromJson(json,PermissionBean.class); +// String studentType = permissionBean.getStudentType(); +// if(studentType.indexOf("1")!=-1){ +// System.out.println(true); +// } + String channel =""; + System.out.println(Integer.parseInt(channel)); } /** diff --git a/cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceErrorType.java b/cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceErrorType.java index 5a2ee04..ed19e17 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceErrorType.java +++ b/cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceErrorType.java @@ -9,6 +9,7 @@ import org.apache.commons.lang.StringUtils; */ public enum EnumSendFaceErrorType { + CHECK_DATA_ERR_21("21", "对返回数据的校验出错"), EXCEED_SIZE_1028("1028", "图片大小超限"), NOT_EXIST_USER_1029("1029", "用户ID不存在"), EXTRACT_ERROR_1030("1030", "照片特征值提取失败"), 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 86ee142..95f0b63 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 @@ -13,6 +13,7 @@ import com.sun.jna.Memory; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; @@ -202,91 +203,97 @@ public class GateModule { // return true; } + /** + * 门禁卡记录集信息 + */ + private static final NET_RECORDSET_ACCESS_CTL_CARD insertCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); + /** + * 记录集操作 + */ + private static final NET_CTRL_RECORDSET_INSERT_PARAM insert = new NET_CTRL_RECORDSET_INSERT_PARAM(); 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,int channel) { - /** - * 门禁卡记录集信息 - */ - NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); - + String userType,String channel) { // 卡号 - System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); + System.arraycopy(cardNo.getBytes(), 0, insertCardInfo.szCardNo, 0, cardNo.getBytes().length); // 用户ID - System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); + System.arraycopy(userId.getBytes(), 0, insertCardInfo.szUserID, 0, userId.getBytes().length); // 卡名(设备上显示的姓名) try { - System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); + System.arraycopy(cardName.getBytes("GBK"), 0, insertCardInfo.szCardName, 0, cardName.getBytes("GBK").length); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // 卡密码 - System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); + System.arraycopy(cardPwd.getBytes(), 0, insertCardInfo.szPsw, 0, cardPwd.getBytes().length); //-- 设置开门权限 - accessCardInfo.nDoorNum = 2; - accessCardInfo.sznDoors[0] = 0; - accessCardInfo.sznDoors[1] = 1; - accessCardInfo.nTimeSectionNum = 2; // 与门数对应 + insertCardInfo.nDoorNum = 2; + insertCardInfo.sznDoors[0] = 0; + insertCardInfo.sznDoors[1] = 1; + insertCardInfo.nTimeSectionNum = 2; // 与门数对应 if (userType.equals("1")){ - accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 - accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 + insertCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 + insertCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 }else { - accessCardInfo.sznTimeSectionNo[0] = channel; // 表示第一个门全天有效 - accessCardInfo.sznTimeSectionNo[1] = channel; // 表示第二个门全天有效 + //此学校不存在权限设置默认为全天有效 + if(StringUtils.isEmpty(channel)){ + accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 + accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 + }else{ + accessCardInfo.sznTimeSectionNo[0] = Integer.parseInt(channel); // 表示第一个门全天有效 + accessCardInfo.sznTimeSectionNo[1] = Integer.parseInt(channel); // 表示第二个门全天有效 + } } // 卡状态 - accessCardInfo.emStatus = cardStatus; + insertCardInfo.emStatus = cardStatus; // 卡类型 - accessCardInfo.emType = cardType; + insertCardInfo.emType = cardType; // 使用次数 - accessCardInfo.nUserTime = useTimes; + insertCardInfo.nUserTime = useTimes; // 是否首卡 - accessCardInfo.bFirstEnter = isFirstEnter; + insertCardInfo.bFirstEnter = isFirstEnter; // 是否有效 - accessCardInfo.bIsValid = isValid; + insertCardInfo.bIsValid = isValid; // 有效开始时间 String[] startTimes = startValidTime.split(" "); - accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); - accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); - accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); - accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); - accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); - accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); + insertCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); + insertCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); + insertCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); + insertCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); + insertCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); + insertCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); // 有效结束时间 String[] endTimes = endValidTime.split(" "); - accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); - accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); - accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); - accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); - accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); - accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); + insertCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); + insertCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); + insertCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); + insertCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); + insertCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); + insertCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); + - /** - * 记录集操作 - */ - NET_CTRL_RECORDSET_INSERT_PARAM insert = new NET_CTRL_RECORDSET_INSERT_PARAM(); insert.stuCtrlRecordSetInfo.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集类型 - insert.stuCtrlRecordSetInfo.pBuf = accessCardInfo.getPointer(); + insert.stuCtrlRecordSetInfo.pBuf = insertCardInfo.getPointer(); - accessCardInfo.write(); + insertCardInfo.write(); insert.write(); boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, CtrlType.CTRLTYPE_CTRL_RECORDSET_INSERT, insert.getPointer(), 5000); insert.read(); - accessCardInfo.read(); + insertCardInfo.read(); if(!bRet) { String ret=ToolKits.getErrorCodePrint(); @@ -307,8 +314,6 @@ public class GateModule { log.info("添加卡信息成功,卡信息记录集编号 : "+ insert.stuCtrlRecordSetResult.nRecNo); return insert.stuCtrlRecordSetResult.nRecNo; } - -// return true; } public static void main(String[] args) { @@ -709,7 +714,7 @@ public class GateModule { public static int 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,int channel) { + String userType,String channel) { /** * 门禁卡记录集信息 */ @@ -743,8 +748,14 @@ public class GateModule { accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 }else { - accessCardInfo.sznTimeSectionNo[0] = channel; // 表示第一个门全天有效 - accessCardInfo.sznTimeSectionNo[1] = channel; // 表示第二个门全天有效 + //此学校不存在权限设置默认为全天有效 + if(StringUtils.isEmpty(channel)){ + accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 + accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 + }else{ + accessCardInfo.sznTimeSectionNo[0] = Integer.parseInt(channel); // 表示第一个门全天有效 + accessCardInfo.sznTimeSectionNo[1] = Integer.parseInt(channel); // 表示第二个门全天有效 + } } // 卡状态 @@ -1160,6 +1171,9 @@ public class GateModule { return true; } + private static final NET_IN_ADD_FACE_INFO stIn = new NET_IN_ADD_FACE_INFO(); + private static final NET_OUT_ADD_FACE_INFO stOut = new NET_OUT_ADD_FACE_INFO(); + public static synchronized int addFaceInfo(String userId, Memory memory, LLong lLong) { int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加 @@ -1195,7 +1209,7 @@ public class GateModule { } else { String ret=ToolKits.getErrorCodePrint(); String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); - log.error("添加信息失败,错误信息:{} ,错误码:{} ",ret,number); + log.error("添加人脸失败,错误信息:{} ,错误码:{} ",ret,number); //照片已存在 if(number.equals(EnumSendFaceErrorType.EXIST_IMG_1031.code)){ return modifyFaceInfo(userId, memory, lLong); @@ -1259,6 +1273,8 @@ public class GateModule { return true; } + private static final NET_IN_UPDATE_FACE_INFO stInEdit = new NET_IN_UPDATE_FACE_INFO(); + private static final NET_OUT_UPDATE_FACE_INFO stOutEdit = new NET_OUT_UPDATE_FACE_INFO(); public static int modifyFaceInfo(String userId, Memory memory, LLong lLong) { int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 @@ -1266,30 +1282,30 @@ public class GateModule { /** * 入参 */ - NET_IN_UPDATE_FACE_INFO stIn = new NET_IN_UPDATE_FACE_INFO(); +// NET_IN_UPDATE_FACE_INFO stInEdit = new NET_IN_UPDATE_FACE_INFO(); // 用户ID - System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); + System.arraycopy(userId.getBytes(), 0, stInEdit.szUserID, 0, userId.getBytes().length); // 人脸照片个数 - stIn.stuFaceInfo.nFacePhoto = 1; + stInEdit.stuFaceInfo.nFacePhoto = 1; // 每张图片的大小 - stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); + stInEdit.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); // 人脸照片数据,大小不超过100K, 图片格式为jpg - stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; + stInEdit.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; /** * 出参 */ - NET_OUT_UPDATE_FACE_INFO stOut = new NET_OUT_UPDATE_FACE_INFO(); +// NET_OUT_UPDATE_FACE_INFO stOut = new NET_OUT_UPDATE_FACE_INFO(); - stIn.write(); - stOut.write(); - boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000); - stIn.read(); - stOut.read(); + stInEdit.write(); + stOutEdit.write(); + boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stInEdit.getPointer(), stOutEdit.getPointer(), 5000); + stInEdit.read(); + stOutEdit.read(); Map map = new HashMap(); if (bRet) { log.info("修改人脸成功!"); -- libgit2 0.21.0