Commit 410a48a6cd0261bbbd8f41125375b37e1773ae42

Authored by 徐泉
1 parent 9df247c3
Exists in master

考勤设备ID获取

cloud/dahua/src/main/java/com/example/dahua/MyTask.java
... ... @@ -74,11 +74,6 @@ public class MyTask implements ApplicationRunner {
74 74 //自注册
75 75 autoRegister();
76 76  
77   - /**
78   - * 考勤监听
79   - */
80   - kaoQinRecord();
81   -
82 77 // System.out.println(" sendRecordDao:"+sendRecordDao.getSenSuccess());
83 78 }
84 79  
... ... @@ -105,8 +100,6 @@ public class MyTask implements ApplicationRunner {
105 100 if (!StringUtils.isEmpty(deviceId)) {
106 101 attendanceService.updateConnectStateWithDevid(0, deviceId);
107 102 GateModule.stopRealLoadPic(lLongMap.get(deviceId));
108   - //人脸识别、人脸检测事件
109   - FaceRecognitionModule.stopRealLoadPicture(lLongMap.get(deviceId));
110 103 lLongMap.remove(deviceId);
111 104 // devMap.remove(deviceId);
112 105 removeDevice(deviceId);
... ... @@ -249,7 +242,7 @@ public class MyTask implements ApplicationRunner {
249 242 for (DeviceInfoBean dev :
250 243 deviceInfoBeans) {
251 244 if (lLongMap.get(dev.getDevcieId()).intValue() > 0) {
252   - NetSDKLib.LLong lLong = GateModule.realLoadPic(0, analyzerCallback, lLongMap.get(dev.getDevcieId()));
  245 + NetSDKLib.LLong lLong = GateModule.realLoadPic2(0, analyzerCallback, lLongMap.get(dev.getDevcieId()),dev.getDevcieId());
253 246 // System.out.println("监听成功:"+dev.getDevcieId());
254 247 // if (lLong.intValue() != -1) {
255 248 // //deviceInfoBeans.remove(dev);
... ... @@ -260,22 +253,6 @@ public class MyTask implements ApplicationRunner {
260 253 }
261 254 }
262 255  
263   - /**
264   - * 考勤监听
265   - */
266   - public synchronized void kaoQinRecord() {
267   - isHasNewDevice = false;
268   - if (null != deviceInfoBeans && deviceInfoBeans.size() > 0) {
269   - for (DeviceInfoBean dev :
270   - deviceInfoBeans) {
271   - if (lLongMap.get(dev.getDevcieId()).intValue() > 0) {
272   - //人脸识别、人脸检测事件监听
273   - NetSDKLib.LLong lLong = FaceRecognitionModule.realLoadPicture(0, analyzerCallback);
274   - }
275   - }
276   - }
277   - }
278   -
279 256  
280 257 //智能订阅
281 258 private AnalyzerDataCB analyzerCallback = new AnalyzerDataCB();
... ... @@ -300,12 +277,19 @@ public class MyTask implements ApplicationRunner {
300 277 path.mkdir();
301 278 }
302 279  
  280 + //设备ID获取
  281 + NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
  282 + ToolKits.GetPointerData(dwUser, deviceInfo);
  283 +
  284 + String szSn = new String(deviceInfo.sSerialNumber).trim();
  285 +
303 286 ///< 门禁事件
304 287 if (dwAlarmType == NetSDKLib.EVENT_IVS_ACCESS_CTL) {
305 288 NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO msg = new NetSDKLib.DEV_EVENT_ACCESS_CTL_INFO();
306 289 ToolKits.GetPointerData(pAlarmInfo, msg);
307 290 //卡号
308 291 String card = new String(msg.szCardNo).trim();
  292 +
309 293 System.out.println("sda:" + card + " 抓拍照片存储地址:");
310 294  
311 295 try {
... ... @@ -329,11 +313,11 @@ public class MyTask implements ApplicationRunner {
329 313 if (null != cardBean && cardBean.getType() == 0) {
330 314 //老师人脸信息,保存人脸记录表
331 315 TeacherBean teacherBean = userDao.getTeacherWithId(cardBean.getUser_id());
332   - sendRecordDao.addFaceRecoder("", teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card,"");
  316 + sendRecordDao.addFaceRecoder(szSn, teacherBean.getUser_id(), teacherBean.getName(), snapPicPath, 1, time, card,"");
333 317 } else if (null != cardBean && cardBean.getType() == 2) {
334 318 //学生人脸信息,保存人脸记录表
335 319 UserInfoBean userInfoBean = userDao.getStudentWithid(cardBean.getUser_id());
336   - sendRecordDao.addFaceRecoder("", userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath, 1, time, card,"");
  320 + sendRecordDao.addFaceRecoder(szSn, userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath, 1, time, card,"");
337 321 }
338 322  
339 323 // TODO 考勤记录
... ... @@ -344,7 +328,7 @@ public class MyTask implements ApplicationRunner {
344 328 //刷卡时间
345 329 String eventTime = msg.UTC.toStringTime();
346 330 //保存考勤记录
347   - kaoQinRecord(status,eventType,card,"",eventTime,snapPicPath);
  331 + kaoQinRecord(status,eventType,card,szSn,eventTime,snapPicPath);
348 332 }
349 333  
350 334 } catch (IOException e2) {
... ...
cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
... ... @@ -18,10 +18,12 @@ import com.example.dahua.lib.NetSDKLib.*;
18 18 import com.example.dahua.lib.ToolKits;
19 19 import com.sun.jna.Memory;
20 20 import com.sun.jna.ptr.IntByReference;
  21 +import lombok.extern.slf4j.Slf4j;
21 22  
22 23 import javax.imageio.ImageIO;
23 24  
24 25  
  26 +@Slf4j
25 27 public class GateModule {
26 28 // 查询句柄
27 29 private static LLong m_lFindHandle = new LLong(0);
... ... @@ -50,6 +52,33 @@ public class GateModule {
50 52 return m_hAttachHandle;
51 53 }
52 54  
  55 + public static LLong realLoadPic2(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB, LLong lLong,String devcieId) {
  56 +
  57 + final NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
  58 +
  59 + // 设备ID
  60 + System.arraycopy(devcieId.getBytes(), 0, deviceInfo.sSerialNumber, 0, devcieId.getBytes().length);
  61 +
  62 + /**
  63 + * 说明:
  64 + * 通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取
  65 + * 下列仅订阅了0通道的智能事件.
  66 + */
  67 + int bNeedPicture = 1; // 是否需要图片
  68 + deviceInfo.write();
  69 + LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(lLong, ChannelId, NetSDKLib.EVENT_IVS_ALL,
  70 + bNeedPicture, m_AnalyzerDataCB, deviceInfo.getPointer(), null);
  71 + deviceInfo.read();
  72 + if (m_hAttachHandle.longValue() != 0) {
  73 + System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId);
  74 + } else {
  75 + System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint());
  76 + return null;
  77 + }
  78 +
  79 + return m_hAttachHandle;
  80 + }
  81 +
53 82 /**
54 83 * 停止上传智能分析数据-图片
55 84 */
... ... @@ -169,6 +198,7 @@ public class GateModule {
169 198 // return true;
170 199 }
171 200  
  201 +
172 202 public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd,
173 203 int cardStatus, int cardType, int useTimes, int isFirstEnter,
174 204 int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) {
... ... @@ -254,24 +284,25 @@ public class GateModule {
254 284 accessCardInfo.read();
255 285  
256 286 if(!bRet) {
257   - //System.err.println("添加卡信息失败." + ToolKits.getErrorCodePrint());
258 287 String ret=ToolKits.getErrorCodePrint();
259   - System.err.println("添加卡信息失败." + ret);
260 288 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
261   - if(number.equals("21")||number.equals("146"))//146用户已存在,21对返回数据的校验出错,1162未知错误 number.equals("1162")||
262   - {
  289 + log.info("添加卡信息失败,错误信息:{} ,错误码:{} ",ret,number);
  290 + //146用户已存在,21对返回数据的校验出错,1162未知错误 number.equals("1162")||
  291 + if(number.equals("21")||number.equals("146")) {
  292 + //用户已存在/返回数据校验出错时,执行删除用户
263 293 deleteUser( userId, lLong);
  294 + //重新下发卡至设备
264 295 return insertCard( cardNo, userId, cardName, cardPwd,
265 296 cardStatus, cardType, useTimes, isFirstEnter,
266 297 isValid, startValidTime, endValidTime, lLong, userType);
267 298 }
  299 + //其他错误码,返回-1
268 300 return -1;
269 301 } else {
270   - System.out.println("添加卡信息成功,卡信息记录集编号 : " + insert.stuCtrlRecordSetResult.nRecNo);
  302 + log.info("添加卡信息成功,卡信息记录集编号 : "+ insert.stuCtrlRecordSetResult.nRecNo);
271 303 return insert.stuCtrlRecordSetResult.nRecNo;
272 304 }
273 305  
274   -
275 306 // return true;
276 307 }
277 308  
... ... @@ -378,7 +409,8 @@ public class GateModule {
378 409  
379 410 CFG_ACCESS_TIMESCHEDULE_INFO msg = new CFG_ACCESS_TIMESCHEDULE_INFO();
380 411 String strCmd = NetSDKLib.CFG_CMD_ACCESSTIMESCHEDULE;
381   - int nChannel = 120; // 通道号
  412 + // 通道号
  413 + int nChannel = 120;
382 414 // msg.stuTimeWeekDay[0].stuTimeSection[0].dwRecordMask
383 415 String name = "3";
384 416 System.arraycopy(name.getBytes(), 0, msg.szName, 0, name.getBytes().length);
... ... @@ -387,13 +419,11 @@ public class GateModule {
387 419 List<WeekDay> weekDays = permissionBean.getWeekDays();
388 420 Map<Integer, List<WeekTime>> map = new HashMap<>();
389 421  
390   - for (WeekDay weekDay :
391   - weekDays) {
  422 + for (WeekDay weekDay : weekDays) {
392 423 //整理时间
393 424 initWeedayAndTimes(weekDay, map);
394 425 //设置周计划信息
395   - for (Map.Entry<Integer, List<WeekTime>> entry :
396   - map.entrySet()) {
  426 + for (Map.Entry<Integer, List<WeekTime>> entry : map.entrySet()) {
397 427  
398 428 int weekDayIndex = entry.getKey();
399 429  
... ... @@ -632,7 +662,25 @@ public class GateModule {
632 662 return true;
633 663 }
634 664  
635   - public static int modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd,
  665 + /**
  666 + * 修改设备卡信息
  667 + * @param recordNo
  668 + * @param cardNo
  669 + * @param userId
  670 + * @param cardName
  671 + * @param cardPwd
  672 + * @param cardStatus
  673 + * @param cardType
  674 + * @param useTimes
  675 + * @param isFirstEnter
  676 + * @param isValid
  677 + * @param startValidTime
  678 + * @param endValidTime
  679 + * @param lLong
  680 + * @param userType
  681 + * @return
  682 + */
  683 + public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd,
636 684 int cardStatus, int cardType, int useTimes, int isFirstEnter,
637 685 int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) {
638 686 /**
... ... @@ -717,28 +765,24 @@ public class GateModule {
717 765 CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000);
718 766 update.read();
719 767 accessCardInfo.read();
720   -
  768 + // 返回值:1成功,否则返回
721 769 if (!bRet) {
722   - //System.err.println("修改卡信息失败." + ToolKits.getErrorCodePrint());
723 770 String ret=ToolKits.getErrorCodePrint();
724   - System.err.println("修改卡信息失败." + ret);
  771 + //结果码
725 772 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
726   - if(number.equals("21")||number.equals("147"))//147用户不存在,21对返回数据的校验出错
727   - {
728   -// newRecordNo= insertCard( cardNo, userId, cardName, cardPwd,
729   -// cardStatus, cardType, useTimes, isFirstEnter,
730   -// isValid, startValidTime, endValidTime, lLong, userType);
731   - }
732   - if(number.equals("1091")||number.equals("1147"))//未知错误
733   - {
734   - return Integer.parseInt(number);
735   - }
736   - return 0;
737   - } else {
738   - System.out.println("修改卡信息成功 ");
  773 + //147用户不存在,21对返回数据的校验出错
  774 +// if(number.equals("21")||number.equals("147")) {
  775 +//
  776 +// }
  777 +// if(number.equals("1091")||number.equals("1147"))//未知错误
  778 +// {
  779 +// return Integer.parseInt(number);
  780 +// }
  781 + log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number);
  782 + return false;
739 783 }
740   -
741   - return 1;
  784 + log.info("修改卡信息成功!");
  785 + return true;
742 786 }
743 787  
744 788 /**
... ... @@ -778,8 +822,7 @@ public class GateModule {
778 822 msg.pBuf = new IntByReference(recordNo).getPointer();
779 823  
780 824 msg.write();
781   - boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong,
782   - CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000);
  825 + boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(lLong, CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000);
783 826 msg.read();
784 827  
785 828 if (!bRet) {
... ... @@ -1035,12 +1078,10 @@ public class GateModule {
1035 1078 * 打印具体的信息
1036 1079 */
1037 1080 for (int i = 0; i < nMaxNum; i++) {
1038   - System.out.println("[" + i + "]删除用户结果:"
1039   - + failCodes[i].nFailCode);
  1081 + log.info("[" + i + "]删除用户结果:" + failCodes[i].nFailCode);
1040 1082 }
1041 1083 } else {
1042   - //System.err.println("删除用户失败, " + getErrorCode());
1043   - System.err.println("删除用户失败, " + ToolKits.getErrorCodePrint());
  1084 + log.error("添加卡信息失败"+ ToolKits.getErrorCodePrint());
1044 1085 }
1045 1086  
1046 1087 stIn.read();
... ... @@ -1128,23 +1169,21 @@ public class GateModule {
1128 1169 stIn.read();
1129 1170 stOut.read();
1130 1171 if (bRet) {
1131   - System.out.println("添加人脸成功!");
  1172 + log.info("添加人脸成功!");
1132 1173 } else {
1133   -// System.err.println("添加人脸失败!" + ToolKits.getErrorCodePrint());
1134 1174 String ret=ToolKits.getErrorCodePrint();
1135   - System.err.println("添加人脸失败!" + ret);
1136 1175 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
1137   - if(number.equals("1031"))//照片已存在
1138   - {
1139   - return modifyFaceInfo( userId, memory, lLong)==1?true:false;
  1176 + log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number);
  1177 + //number = 1031:照片已存在;number = 1029 :用户ID不存在
  1178 + if(number.equals("1031")){
  1179 + return modifyFaceInfo( userId, memory, lLong);
1140 1180 }
1141   - if(number.equals("1029"))//照片已存在
  1181 + if(number.equals("1029"))
1142 1182 {
1143 1183 return addFaceInfo( userId, memory, lLong);
1144 1184 }
1145 1185 return false;
1146 1186 }
1147   -
1148 1187 return true;
1149 1188 }
1150 1189  
... ... @@ -1186,7 +1225,7 @@ public class GateModule {
1186 1225 stIn.read();
1187 1226 stOut.read();
1188 1227 if (bRet) {
1189   - System.out.println("修改人脸成功!");
  1228 + log.info("修改人脸成功!");
1190 1229 } else {
1191 1230 // System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint());
1192 1231 String ret=ToolKits.getErrorCodePrint();
... ... @@ -1199,7 +1238,7 @@ public class GateModule {
1199 1238 }
1200 1239  
1201 1240  
1202   - public static int modifyFaceInfo(String userId, Memory memory, LLong lLong) {
  1241 + public static boolean modifyFaceInfo(String userId, Memory memory, LLong lLong) {
1203 1242 int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改
1204 1243  
1205 1244 /**
... ... @@ -1229,22 +1268,16 @@ public class GateModule {
1229 1268 boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(lLong, emType, stIn.getPointer(), stOut.getPointer(), 5000);
1230 1269 stIn.read();
1231 1270 stOut.read();
  1271 +
1232 1272 if (bRet) {
1233   - System.out.println("修改人脸成功!");
  1273 + log.info("修改人脸成功!");
1234 1274 } else {
1235   -// System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint());
1236 1275 String ret=ToolKits.getErrorCodePrint();
1237   - System.err.println("修改人脸失败!" + ret);
1238 1276 String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")"));
1239   - if(number.equals("1029"))//1029用户ID不存在
1240   - {
1241   - //return addFaceInfo(userId, memory, lLong);
1242   - return Integer.parseInt(number);
1243   - }
1244   - return 0;
  1277 + log.error("修改人脸失败,错误信息:{} ,错误码:{} ",ret,number);
  1278 + return false;
1245 1279 }
1246   -
1247   - return 1;
  1280 + return true;
1248 1281 }
1249 1282  
1250 1283 /**
... ...
cloud/dahua/src/main/java/com/example/dahua/service/UserService.java
... ... @@ -54,6 +54,12 @@ public interface UserService {
54 54 */
55 55 boolean sendPermission(PermissionBean permissionBean);
56 56  
  57 + /**
  58 + * 根据学籍号、学校id获取用户id
  59 + * @param code
  60 + * @param schoolId
  61 + * @return
  62 + */
57 63 String getUserId(String code,String schoolId);
58 64  
59 65  
... ...