Commit fc3450829fea257b9a356b6891d56e0c1c4958fb
1 parent
3964921d
Exists in
master
下发接口修改
Showing
12 changed files
with
591 additions
and
226 deletions
Show diff stats
cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask.java
| 1 | 1 | package com.example.dahua.async; |
| 2 | 2 | |
| 3 | 3 | //import com.example.dahua.Gate.Gate; |
| 4 | + | |
| 5 | +import com.alibaba.fastjson.JSON; | |
| 4 | 6 | import com.example.dahua.MyTask; |
| 5 | -import com.example.dahua.bean.*; | |
| 7 | +import com.example.dahua.bean.AttendanceBean; | |
| 8 | +import com.example.dahua.bean.SendRecordBean; | |
| 9 | +import com.example.dahua.bean.TeacherBean; | |
| 10 | +import com.example.dahua.bean.UserInfoBean; | |
| 6 | 11 | import com.example.dahua.common.Res; |
| 7 | 12 | import com.example.dahua.dao.UserDao; |
| 13 | +import com.example.dahua.enums.*; | |
| 8 | 14 | import com.example.dahua.lib.CompressPic; |
| 9 | 15 | import com.example.dahua.lib.FilePath; |
| 10 | 16 | import com.example.dahua.lib.NetSDKLib; |
| ... | ... | @@ -14,15 +20,11 @@ import com.example.dahua.utils.FileUtils; |
| 14 | 20 | import com.example.dahua.utils.HttpUtils; |
| 15 | 21 | import com.example.dahua.xiananDao.SendRecordDao; |
| 16 | 22 | import com.sun.jna.Memory; |
| 23 | +import lombok.extern.slf4j.Slf4j; | |
| 17 | 24 | import org.springframework.beans.factory.annotation.Autowired; |
| 18 | -import org.springframework.http.HttpEntity; | |
| 19 | -import org.springframework.http.HttpHeaders; | |
| 20 | -import org.springframework.http.MediaType; | |
| 21 | 25 | import org.springframework.http.ResponseEntity; |
| 22 | 26 | import org.springframework.scheduling.annotation.Async; |
| 23 | 27 | import org.springframework.stereotype.Component; |
| 24 | -import org.springframework.util.LinkedMultiValueMap; | |
| 25 | -import org.springframework.util.MultiValueMap; | |
| 26 | 28 | import org.springframework.util.StringUtils; |
| 27 | 29 | import org.springframework.web.client.RestTemplate; |
| 28 | 30 | |
| ... | ... | @@ -34,6 +36,7 @@ import java.util.*; |
| 34 | 36 | * 下发卡号的异步操作 |
| 35 | 37 | */ |
| 36 | 38 | @Component |
| 39 | +@Slf4j | |
| 37 | 40 | public class SendUserInfoTask { |
| 38 | 41 | |
| 39 | 42 | @Autowired |
| ... | ... | @@ -42,21 +45,32 @@ public class SendUserInfoTask { |
| 42 | 45 | @Autowired |
| 43 | 46 | SendRecordDao sendRecordDao; |
| 44 | 47 | |
| 48 | + /** | |
| 49 | + * 下发单个用户人脸任务 | |
| 50 | + * @param file | |
| 51 | + * @param attendanceBeans | |
| 52 | + * @param userInfoBean | |
| 53 | + * @param schoolId | |
| 54 | + * @param failType | |
| 55 | + * @param userType | |
| 56 | + * @throws Exception | |
| 57 | + */ | |
| 45 | 58 | // @Async("taskExecutor") |
| 46 | 59 | public void doTaskOne(String file, List<AttendanceBean> attendanceBeans, UserInfoBean userInfoBean, String schoolId, int failType, int userType) throws Exception { |
| 47 | 60 | File studentFile = new File(file); |
| 61 | + //学籍号 | |
| 48 | 62 | String studentCode = studentFile.getName().split("\\.")[0]; |
| 49 | 63 | //判断是否是副卡 |
| 50 | 64 | String[] studentCodes = studentCode.split("_"); |
| 51 | 65 | |
| 52 | - | |
| 53 | - if (studentCodes.length > 1) {//副卡 | |
| 54 | - | |
| 66 | + //副卡 | |
| 67 | + if (studentCodes.length > 1) { | |
| 55 | 68 | String cardType = studentCodes[1]; |
| 69 | + //获取卡号 | |
| 56 | 70 | String cardNum = userDao.getCardNum(userInfoBean.getStudent_id(), cardType); |
| 57 | 71 | userInfoBean.setStudent_num(cardNum); |
| 58 | - | |
| 59 | 72 | } |
| 73 | + //设置下发记录 | |
| 60 | 74 | SendRecordBean sendRecordBean = new SendRecordBean(); |
| 61 | 75 | sendRecordBean.setSchoolId(Integer.parseInt(schoolId)); |
| 62 | 76 | sendRecordBean.setSchoolName(userDao.getSchoolName(schoolId)); |
| ... | ... | @@ -65,9 +79,11 @@ public class SendUserInfoTask { |
| 65 | 79 | sendRecordBean.setNum(userInfoBean.getStudent_num()); |
| 66 | 80 | sendRecordBean.setName(userInfoBean.getName()); |
| 67 | 81 | sendRecordBean.setImgPath(file); |
| 82 | + //用户id(即学生ID) | |
| 68 | 83 | sendRecordBean.setCustomerid(userInfoBean.getStudent_id()); |
| 69 | 84 | sendRecordBean.setFailType(failType); |
| 70 | - sendUserInfoToDev(file, attendanceBeans, userInfoBean, userType + "", sendRecordBean); | |
| 85 | + //下发至设备 | |
| 86 | + sendUserInfoToDev(file, attendanceBeans, userInfoBean, String.valueOf(userType), sendRecordBean); | |
| 71 | 87 | } |
| 72 | 88 | |
| 73 | 89 | // @Async("taskExecutor") |
| ... | ... | @@ -215,26 +231,30 @@ public class SendUserInfoTask { |
| 215 | 231 | |
| 216 | 232 | private synchronized boolean sendUserInfoToDev(String file, List<AttendanceBean> attendanceBeans, UserInfoBean userInfoBean, String userType, SendRecordBean sendRecordBean) { |
| 217 | 233 | try { |
| 234 | + //用户信息 | |
| 218 | 235 | if (userInfoBean == null) { |
| 219 | - System.out.println("学生用户不存在"); | |
| 236 | + log.warn("学生用户信息不存在"); | |
| 220 | 237 | return false; |
| 221 | 238 | } |
| 222 | - if (attendanceBeans.size() == 0) {//"该学校下没有人脸设备" | |
| 223 | - System.out.println("该学校下没有人脸设备:"); | |
| 224 | - sendRecordBean.setFailType(2); | |
| 225 | - sendRecordBean.setFailContent("图片目录不存在"); | |
| 226 | - String schoolName = sendRecordDao.getSchoolDevice(sendRecordBean.getSchoolId(), 2);//判断是否已经记录改学校没有设备 | |
| 227 | - if (StringUtils.isEmpty(schoolName)) {//不存在记录则添加,保证没有设备的学校记录只有一条 | |
| 228 | - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 2);//更新下发失败状态 | |
| 229 | - addFailDace(sendRecordBean); | |
| 230 | - } | |
| 231 | - return false; | |
| 232 | - } | |
| 233 | - | |
| 239 | + //卡号 | |
| 234 | 240 | String cardNum = userInfoBean.getStudent_num(); |
| 235 | - System.out.println("cardNum:" + cardNum); | |
| 236 | 241 | if (StringUtils.isEmpty(cardNum) || cardNum.equals("null")) { |
| 237 | - System.out.println("卡号为空"); | |
| 242 | + log.warn("下发卡号为空"); | |
| 243 | + return false; | |
| 244 | + } | |
| 245 | + //该学校下没有人脸设备 | |
| 246 | + if (attendanceBeans.size() == 0) { | |
| 247 | + sendRecordBean.setFailType(EnumSendFaceType.NOT_EXIST_DEVICE.code); | |
| 248 | + sendRecordBean.setFailContent(EnumSendFaceType.NOT_EXIST_DEVICE.message); | |
| 249 | + //获取学校下发失败记录,判断是否已经记录该学校没有设备 | |
| 250 | + String schoolName = sendRecordDao.getSchoolDevice(sendRecordBean.getSchoolId(), EnumSendFaceType.NOT_EXIST_DEVICE.code); | |
| 251 | + //不存在记录则添加,保证没有设备的学校记录只有一条 | |
| 252 | + if (StringUtils.isEmpty(schoolName)) { | |
| 253 | + //更新下发失败状态 | |
| 254 | + sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.NOT_EXIST_DEVICE.code); | |
| 255 | + addFailDace(sendRecordBean); | |
| 256 | + } | |
| 257 | + log.warn("该学校下没有人脸设备"); | |
| 238 | 258 | return false; |
| 239 | 259 | } |
| 240 | 260 | |
| ... | ... | @@ -274,174 +294,235 @@ public class SendUserInfoTask { |
| 274 | 294 | } catch (Exception e) { |
| 275 | 295 | e.printStackTrace(); |
| 276 | 296 | } |
| 277 | - | |
| 278 | - for (AttendanceBean attendanceBean : | |
| 279 | - attendanceBeans) { | |
| 297 | + //下发至所有设备 | |
| 298 | + for (AttendanceBean attendanceBean : attendanceBeans) { | |
| 280 | 299 | pushCardAndFace(attendanceBean, userInfoBean.getUser_id(), userInfoBean.getStudent_num(), userInfoBean.getName(), memory, sendRecordBean,userType); |
| 281 | 300 | } |
| 282 | 301 | } |
| 283 | 302 | |
| 303 | + /** | |
| 304 | + * 下发人脸/卡信息 | |
| 305 | + * @param attendanceBean | |
| 306 | + * @param user_id | |
| 307 | + * @param student_num | |
| 308 | + * @param name | |
| 309 | + * @param memory | |
| 310 | + * @param sendRecordBean | |
| 311 | + * @param userType | |
| 312 | + */ | |
| 284 | 313 | private synchronized void pushCardAndFace(AttendanceBean attendanceBean, String user_id, String student_num, String name, Memory memory, SendRecordBean sendRecordBean,String userType) { |
| 285 | 314 | try{ |
| 286 | - sendRecordBean.setDeviceID(attendanceBean.getClint_id()); | |
| 287 | - sendRecordBean.setSchoolId(Integer.parseInt(attendanceBean.getSchool_id())); | |
| 288 | - sendRecordBean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); | |
| 289 | - sendRecordBean.setSchoolName(userDao.getSchoolName(attendanceBean.getSchool_id())); | |
| 290 | - String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); | |
| 291 | - Calendar calendar = Calendar.getInstance(); | |
| 292 | - calendar.add(Calendar.YEAR, 4); | |
| 293 | - String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); | |
| 294 | - int bCardFlags = -1;//记录集编号,存在于设备的 | |
| 295 | - bCardFlags = userDao.getRecordNo(user_id, attendanceBean.getClint_id()) == null ? -1 : Integer.parseInt(userDao.getRecordNo(user_id, attendanceBean.getClint_id())); | |
| 296 | - | |
| 297 | - NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(attendanceBean.getClint_id()); | |
| 298 | -// System.out.println("loginHandleLong:" + loginHandleLong + MyTask.lLongMap.toString() + " 设备ID:" + attendanceBean.getClint_id()); | |
| 299 | -// System.out.println("loginHandleLong:" +loginHandleLong); | |
| 300 | - if (loginHandleLong == null) { | |
| 301 | - System.out.println("设备不在线:" + attendanceBean.getClint_id()); | |
| 302 | - FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices); | |
| 303 | - String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id()); | |
| 304 | - sendRecordBean.setFailType(2); | |
| 305 | - sendRecordBean.setFailContent("设备不在线"); | |
| 306 | - if (!StringUtils.isEmpty(deviceId)) { | |
| 307 | - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 2);//更新下发失败状态 | |
| 308 | - addFailDace(sendRecordBean); | |
| 309 | - } | |
| 315 | + sendRecordBean.setDeviceID(attendanceBean.getClint_id()); | |
| 316 | + sendRecordBean.setSchoolId(Integer.parseInt(attendanceBean.getSchool_id())); | |
| 317 | + sendRecordBean.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); | |
| 318 | + sendRecordBean.setSchoolName(userDao.getSchoolName(attendanceBean.getSchool_id())); | |
| 310 | 319 | |
| 311 | - } else { | |
| 312 | - boolean bFaceFalgs = false; | |
| 320 | + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); | |
| 321 | + Calendar calendar = Calendar.getInstance(); | |
| 322 | + calendar.add(Calendar.YEAR, 4); | |
| 323 | + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); | |
| 313 | 324 | |
| 314 | - String cardNum = cardNo(student_num); | |
| 315 | -// GateModule.getFace(user_id, loginHandleLong); | |
| 316 | -// GateModule.getUser(user_id, loginHandleLong); | |
| 317 | -// GateModule.getCard(cardNum, loginHandleLong); | |
| 318 | - if (bCardFlags != -1) {//修改卡信息 | |
| 319 | - int newRecordNo=0; | |
| 320 | - int bFaceFalgsInt=0; | |
| 321 | - | |
| 322 | - newRecordNo=GateModule.modifyCard(bCardFlags, cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), | |
| 323 | - 0, 0, 1, startTime, endTime, loginHandleLong, userType); | |
| 324 | - if(newRecordNo==1){ | |
| 325 | - userDao.updateRecordNo(user_id, bCardFlags, attendanceBean.getClint_id());} | |
| 326 | - | |
| 327 | - bFaceFalgsInt = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong); | |
| 328 | - if(bFaceFalgsInt==1) {//1照片修改成功 | |
| 329 | - bFaceFalgs=true; | |
| 325 | + /** | |
| 326 | + * 注:用户下发逻辑 | |
| 327 | + * 下发时,先从下发记录表:SZ_Student_RecoderNo 获取当前用户下发记录集编号,存在于设备的,新增卡号时返回, | |
| 328 | + * 若存在记录集编号,则表示用户已下发过,执行修改用户信息,反之,则新增下发用户人脸、卡信息 | |
| 329 | + */ | |
| 330 | + | |
| 331 | + //人脸下发成功标识:false:失败 true:成功 | |
| 332 | + boolean bFaceFalgs = false; | |
| 333 | + //卡下发成功标识:false:失败 true:成功 | |
| 334 | + boolean bCardFlags = false; | |
| 335 | + //卡操作错误号 | |
| 336 | + String cardErrNum =""; | |
| 337 | + //人脸操作错误号 | |
| 338 | + String faceErrNum =""; | |
| 339 | + //新的记录集编号 | |
| 340 | + int newRecordNo = 0; | |
| 341 | + //获取记录集编号 | |
| 342 | + String recordNo = userDao.getRecordNo(user_id, attendanceBean.getClint_id()); | |
| 343 | + if(!StringUtils.isEmpty(recordNo)){ | |
| 344 | + bCardFlags = true; | |
| 345 | + } | |
| 346 | + //登录设备 | |
| 347 | + NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(attendanceBean.getClint_id()); | |
| 348 | + log.info("设备ID: {},设备登录句柄: {}",loginHandleLong,attendanceBean.getClint_id() ); | |
| 349 | + | |
| 350 | + //若设备不在线时,且人脸下发失败表中存在记录,则执行修改下发失败状态为:设备不在线 | |
| 351 | + if (loginHandleLong == null) { | |
| 352 | + log.info("设备不在线, 设备ID: {} ",attendanceBean.getClint_id() ); | |
| 353 | + FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices); | |
| 354 | + //设备不在线 | |
| 355 | + sendRecordBean.setFailType(EnumSendFaceType.NOT_ONLINE_DEVICE.code); | |
| 356 | + sendRecordBean.setFailContent(EnumSendFaceType.NOT_ONLINE_DEVICE.message); | |
| 357 | + //判断该学校设备ID对应失败记录是否存在:Face_SendFail | |
| 358 | + String deviceId = sendRecordDao.getFailIsExit(attendanceBean.getClint_id(), attendanceBean.getSchool_id()); | |
| 359 | + if (!StringUtils.isEmpty(deviceId)) { | |
| 360 | + //更新下发失败状态 | |
| 361 | + sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.NOT_ONLINE_DEVICE.code); | |
| 362 | + //添加下发失败记录 | |
| 363 | + addFailDace(sendRecordBean); | |
| 364 | + } | |
| 365 | + } else { | |
| 366 | + log.info("=================开始执行下发人脸及卡号任务================="); | |
| 367 | + //卡号取反 | |
| 368 | + String cardNum = cardNo(student_num); | |
| 369 | + //bCardFlags = true, 存在下发记录,则存在下发记录集编号,执行修改卡、人脸信息 | |
| 370 | + if (bCardFlags) { | |
| 371 | + //修改设备卡信息 | |
| 372 | + boolean isEditCard = GateModule.modifyCard(Integer.parseInt(recordNo),cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1), | |
| 373 | + Res.string().getCardTypeInt(1), 0, 0, 1, startTime, endTime, loginHandleLong, userType,cardErrNum); | |
| 374 | + | |
| 375 | + if (isEditCard) { | |
| 376 | + //修改卡成功, 更新下发记录集编号表 | |
| 377 | + userDao.updateRecordNo(user_id, Integer.parseInt(recordNo), attendanceBean.getClint_id()); | |
| 378 | + //修改卡成功, 更新设备用户人脸信息 | |
| 379 | + boolean isEditFace = GateModule.modifyFaceInfo(user_id, memory, loginHandleLong,faceErrNum); | |
| 380 | + //修改卡信息成功,但是人脸修改不成功的话,就需要新增人脸 | |
| 381 | + if (!isEditFace) { | |
| 382 | + bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong,faceErrNum); | |
| 383 | + } | |
| 384 | + }else{ | |
| 385 | + //设备修改卡信息失败,则删除下发记录集编号表记录:SZ_Student_RecoderNo,重新下发. | |
| 386 | + userDao.deleteRecordNo(user_id, Integer.parseInt(recordNo)); | |
| 387 | + //重新下发卡号至设备 | |
| 388 | + newRecordNo = GateModule.insertCard(cardNum, user_id, name, "123456", Res.string().getCardStatusInt(1), | |
| 389 | + Res.string().getCardTypeInt(1), 0, 1, 1, startTime, endTime, loginHandleLong,userType,cardErrNum); | |
| 390 | + | |
| 391 | + //下发卡至设备,返回值不为-1为下发成功,保存下发记录集编号表 | |
| 392 | + if (newRecordNo != -1) { | |
| 393 | + userDao.saveRecordNo(user_id, newRecordNo, name, attendanceBean.getClint_id());//存储记录集编号 | |
| 394 | + } | |
| 395 | + //添加人脸 | |
| 396 | + bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong,faceErrNum); | |
| 330 | 397 | } |
| 331 | - else{bFaceFalgs=false;} | |
| 332 | - //卡号添加成功,但是人脸不成功的话,就需要新增人脸 | |
| 333 | - if (!bFaceFalgs) | |
| 334 | - bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong); | |
| 335 | - else{ | |
| 336 | - userDao.deleteRecordNo(user_id, bCardFlags); | |
| 337 | - bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456" | |
| 398 | + | |
| 399 | + } else { | |
| 400 | + //新增卡信息, 新增人脸信息至设备 | |
| 401 | + newRecordNo = GateModule.insertCard(cardNum, user_id, name, "123456" | |
| 338 | 402 | , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1 |
| 339 | - , 1, startTime, endTime, loginHandleLong,userType); | |
| 340 | - if (bCardFlags != -1) { | |
| 341 | - int index = userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());//存储记录集编号 | |
| 403 | + , 1, startTime, endTime, loginHandleLong,userType,cardErrNum); | |
| 404 | + | |
| 405 | + //下发卡至设备,返回值不为-1为下发成功,保存下发记录集编号表 | |
| 406 | + if (newRecordNo != -1) { | |
| 407 | + userDao.saveRecordNo(user_id, newRecordNo, name, attendanceBean.getClint_id()); | |
| 342 | 408 | } |
| 343 | 409 | //添加人脸 |
| 344 | - bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong); | |
| 345 | - } | |
| 410 | + bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong,faceErrNum); | |
| 346 | 411 | |
| 347 | - } else {//新增卡信息 | |
| 348 | - | |
| 349 | - bCardFlags = GateModule.insertCard(cardNum, user_id, name, "123456" | |
| 350 | - , Res.string().getCardStatusInt(1), Res.string().getCardTypeInt(1), 0, 1 | |
| 351 | - , 1, startTime, endTime, loginHandleLong,userType); | |
| 352 | - | |
| 353 | - if (bCardFlags != -1) { | |
| 354 | - int index = userDao.saveRecordNo(user_id, bCardFlags, name, attendanceBean.getClint_id());//存储记录集编号 | |
| 355 | 412 | } |
| 356 | - | |
| 357 | - //添加人脸 | |
| 358 | - bFaceFalgs = GateModule.addFaceInfo(user_id, memory, loginHandleLong); | |
| 359 | - | |
| 360 | - } | |
| 361 | - | |
| 362 | - if (bCardFlags != -1 && bFaceFalgs) { | |
| 363 | - FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); | |
| 364 | - System.out.println("人脸下发成功" + "sendRecordBean:" + sendRecordBean); | |
| 365 | - | |
| 366 | - //先判断是否已经存在了 | |
| 367 | - List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(sendRecordBean.getDeviceID(), String.valueOf(sendRecordBean.getSchoolId()), sendRecordBean.getCustomerid()); | |
| 368 | - if (sendRecordBeanList.size() > 0) { | |
| 369 | - | |
| 370 | - //删除重复数据 | |
| 371 | - for (int i = 0; i < sendRecordBeanList.size(); i++) { | |
| 372 | - sendRecordDao.deleteFaceSuccess(sendRecordBeanList.get(i).getDeviceID(), sendRecordBeanList.get(i).getNum()); | |
| 413 | + /** | |
| 414 | + * 人脸和卡都下发成功 | |
| 415 | + */ | |
| 416 | + if (bCardFlags && bFaceFalgs) { | |
| 417 | + FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); | |
| 418 | + log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean)); | |
| 419 | + | |
| 420 | + //人脸下发成功记录, 先判断是否已经存在了 | |
| 421 | + List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(sendRecordBean.getDeviceID(), String.valueOf(sendRecordBean.getSchoolId()), sendRecordBean.getCustomerid()); | |
| 422 | + if (sendRecordBeanList.size() > 0) { | |
| 423 | + //删除重复数据 | |
| 424 | + for (int i = 0; i < sendRecordBeanList.size(); i++) { | |
| 425 | + sendRecordDao.deleteFaceSuccess(sendRecordBeanList.get(i).getDeviceID(), sendRecordBeanList.get(i).getNum()); | |
| 426 | + } | |
| 373 | 427 | } |
| 428 | + //重新添加人脸下发记录 | |
| 429 | + sendRecordDao.addFaceSuccess(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(), | |
| 430 | + sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getUserType(), 22); | |
| 374 | 431 | |
| 375 | -// //更新数据 | |
| 376 | -// sendRecordDao.updateFaceSuccess(sendRecordBean.getTime(), sendRecordBean.getDeviceID(), sendRecordBean.getNum()); | |
| 377 | - } else { | |
| 432 | + //重新下发时,删除之前失败记录 | |
| 433 | + if (sendRecordBean.getFailType() != 0){ | |
| 434 | + sendRecordDao.deleteFaceFail(sendRecordBean.getNum(), sendRecordBean.getDeviceID()); | |
| 435 | + } | |
| 436 | + } | |
| 437 | + /** | |
| 438 | + * 人脸和卡都下发失败 | |
| 439 | + */ | |
| 440 | + if (!bCardFlags && !bFaceFalgs) { | |
| 441 | + FileUtils.getInstance().writeLogs("下发人脸和卡号失败:" + cardNum + " user_id: " + user_id + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt); | |
| 442 | + log.info("下发人脸和卡号失败, sendRecordBean: "+ JSON.toJSONString(sendRecordBean)); | |
| 443 | + //失败信息 | |
| 444 | + String failContent = analysisErrorMsg(cardErrNum,faceErrNum); | |
| 445 | + sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code); | |
| 446 | + sendRecordBean.setFailContent(failContent); | |
| 447 | + sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_AND_CARD_FAIL.code); | |
| 448 | + addFailDace(sendRecordBean); | |
| 449 | + } | |
| 450 | + /** | |
| 451 | + * 下发卡号成功,下发人脸失败, | |
| 452 | + */ | |
| 453 | + if (bCardFlags && !bFaceFalgs) { | |
| 454 | + FileUtils.getInstance().writeLogs("下发卡号成功,下发人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt); | |
| 455 | + log.info("下发卡号成功,下发人脸失败, sendRecordBean: " + JSON.toJSONString(sendRecordBean)); | |
| 456 | + //失败信息 | |
| 457 | + String failContent = analysisErrorMsg(cardErrNum,faceErrNum); | |
| 458 | + sendRecordBean.setFailType(EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code); | |
| 459 | + sendRecordBean.setFailContent(failContent); | |
| 460 | + sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code); | |
| 461 | + addFailDace(sendRecordBean); | |
| 462 | + } | |
| 463 | + /** | |
| 464 | + * 下发卡号失败,下发人脸成功, | |
| 465 | + * 注:此一般不存在 | |
| 466 | + */ | |
| 467 | + if (!bCardFlags && bFaceFalgs) { | |
| 468 | + FileUtils.getInstance().writeLogs("卡信息已存在,下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); | |
| 469 | + log.info("-----------卡信息已存在,添加人脸成功----------"); | |
| 378 | 470 | } |
| 379 | - int index = sendRecordDao.addFaceSuccess(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(), | |
| 380 | - sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getUserType(), 22); | |
| 381 | -// File imgFile = new File(sendRecordBean.getImgPath()); | |
| 382 | -// imgFile.deleteOnExit(); | |
| 383 | - //删除成功 | |
| 384 | - if (sendRecordBean.getFailType() != 0) | |
| 385 | - sendRecordDao.deleteFaceFail(sendRecordBean.getNum(), sendRecordBean.getDeviceID()); | |
| 386 | - | |
| 387 | - } | |
| 388 | - | |
| 389 | - // 添加卡信息和人脸失败 | |
| 390 | - if (bCardFlags == -1 && !bFaceFalgs) { | |
| 391 | - FileUtils.getInstance().writeLogs("下发人脸和卡号失败:" + cardNum + " user_id: " + user_id + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt); | |
| 392 | -// System.out.println("添加卡信息和人脸失败"); | |
| 393 | - System.out.println("下发人脸和卡号失败" + "sendRecordBean:" + sendRecordBean.getDeviceID() + " ," + sendRecordBean.getNum() + "," + loginHandleLong + ",bCardFlags:" + bCardFlags + "\r\n"); | |
| 394 | - sendRecordBean.setFailContent("下发人脸和卡号失败"); | |
| 395 | - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 7);//更新下发失败状态 | |
| 396 | - sendRecordBean.setFailType(8); | |
| 397 | - addFailDace(sendRecordBean); | |
| 398 | - } | |
| 399 | - | |
| 400 | - // 添加卡信息成功,添加人脸失败 | |
| 401 | - if (bCardFlags != -1 && !bFaceFalgs) { | |
| 402 | - FileUtils.getInstance().writeLogs("下发卡号成功,人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt); | |
| 403 | -// System.out.println("添加卡信息成功,添加人脸失败"); | |
| 404 | - System.out.println("customerId:" + sendRecordBean.getCustomerid() + " deviceId:" + sendRecordBean.getDeviceID() + " failType:" + sendRecordBean.getFailType() + "\r\n"); | |
| 405 | - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), 5);//更新下发失败状态 | |
| 406 | - sendRecordBean.setFailContent("下发卡号成功,人脸失败:照片特征值提取失败"); | |
| 407 | - sendRecordBean.setFailType(5); | |
| 408 | - addFailDace(sendRecordBean); | |
| 409 | - } | |
| 410 | - | |
| 411 | - // 卡信息已存在,添加人脸成功 | |
| 412 | - if (bCardFlags == -1 && bFaceFalgs) { | |
| 413 | - FileUtils.getInstance().writeLogs("下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); | |
| 414 | - System.out.println("卡信息已存在,添加人脸成功-----------\n"); | |
| 415 | 471 | } |
| 416 | - } | |
| 417 | 472 | } catch (Exception e) { |
| 418 | 473 | e.printStackTrace(); |
| 419 | 474 | } |
| 420 | 475 | } |
| 421 | 476 | |
| 422 | - //人脸发送失败信息添加 | |
| 477 | + /** | |
| 478 | + * 解析下发异常信息 | |
| 479 | + * @param cardErrNum | |
| 480 | + * @param faceErrNum | |
| 481 | + * @return | |
| 482 | + */ | |
| 483 | + private String analysisErrorMsg(String cardErrNum,String faceErrNum){ | |
| 484 | + StringBuffer sb = new StringBuffer(); | |
| 485 | + //卡异常信息 | |
| 486 | + if(!StringUtils.isEmpty(cardErrNum)){ | |
| 487 | + String message = EnumSendCardErrorType.getByCode(cardErrNum).getMessage(); | |
| 488 | + sb.append("卡:").append(message).append("+"); | |
| 489 | + } | |
| 490 | + //人脸异常信息 | |
| 491 | + if(!StringUtils.isEmpty(faceErrNum)){ | |
| 492 | + String message = EnumSendFaceErrorType.getByCode(faceErrNum).getMessage(); | |
| 493 | + sb.append("人脸:").append(message); | |
| 494 | + } | |
| 495 | + return sb.toString(); | |
| 496 | + } | |
| 497 | + | |
| 498 | + | |
| 499 | + /** | |
| 500 | + * 添加人脸下发失败记录 | |
| 501 | + * @param sendRecordBean | |
| 502 | + */ | |
| 423 | 503 | private void addFailDace(SendRecordBean sendRecordBean) { |
| 424 | -// System.out.println("sendRecordBean:" + sendRecordBean != null ? sendRecordBean.toString() : "不存在"); | |
| 504 | + //获取指定设备指定用户的人脸失败记录 | |
| 425 | 505 | List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceFailIsExit(sendRecordBean.getDeviceID(), sendRecordBean.getCustomerid()); |
| 426 | - | |
| 506 | + if(sendRecordBeanList.size() ==0){ | |
| 507 | + return; | |
| 508 | + } | |
| 509 | + //删除失败记录 | |
| 427 | 510 | for (int i = 0; i < sendRecordBeanList.size(); i++) { |
| 428 | 511 | sendRecordDao.deleteFaceFail(sendRecordBeanList.get(i).getNum(), sendRecordBeanList.get(i).getDeviceID()); |
| 429 | 512 | } |
| 430 | - | |
| 431 | -// String name = sendRecordDao.getFailNameIsExit(sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getFailType()); | |
| 432 | - | |
| 433 | -// if (StringUtils.isEmpty(name)) { | |
| 434 | - | |
| 513 | + //TODO 不明含义 | |
| 435 | 514 | if (sendRecordBean.getFailType() == 5) sendRecordBean.setFailType(8); |
| 515 | + // | |
| 516 | + String rootPath = sendRecordBean.getUserType() == EnumSzBusinessType.EnumUserType.TEACHER.code ? "Teacher" : "Student" ; | |
| 517 | + //人脸路径 | |
| 518 | + String imagePath = sendRecordBean.getImgPath().replace("C:/imgCom", String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", sendRecordBean.getSchoolId(), rootPath)); | |
| 436 | 519 | |
| 437 | - String imagePath = sendRecordBean.getImgPath().replace("C:/imgCom", | |
| 438 | - String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", sendRecordBean.getSchoolId(), sendRecordBean.getUserType() == 1 ? "Teacher" : "Student")); | |
| 439 | - | |
| 520 | + //添加失败记录 | |
| 440 | 521 | sendRecordDao.addFaceFail(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(), |
| 441 | - sendRecordBean.getSchoolName(), imagePath, sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), 22); | |
| 442 | -// } | |
| 522 | + sendRecordBean.getSchoolName(), imagePath, sendRecordBean.getSchoolId(), sendRecordBean.getFailContent(), sendRecordBean.getFailType(), sendRecordBean.getUserType(), EnumDeviceType.DH_FACE.deviceType); | |
| 443 | 523 | } |
| 444 | 524 | |
| 525 | + | |
| 445 | 526 | public String cardNo(String cardDex) { |
| 446 | 527 | |
| 447 | 528 | String cardR = ""; | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/bean/SendRecordBean.java
| ... | ... | @@ -7,27 +7,27 @@ import java.io.Serializable; |
| 7 | 7 | */ |
| 8 | 8 | public class SendRecordBean implements Serializable { |
| 9 | 9 | |
| 10 | - | |
| 11 | - private String customerid;//用户编号 | |
| 12 | - | |
| 10 | + //用户编号:学生student_id;老师teacher_id | |
| 11 | + private String customerid; | |
| 12 | + //卡号 | |
| 13 | 13 | private String Num; |
| 14 | - | |
| 14 | + //用户姓名 | |
| 15 | 15 | private String Name; |
| 16 | - | |
| 16 | + //学校ID | |
| 17 | 17 | private int schoolId; |
| 18 | - | |
| 19 | - private String schoolName;//下发结果 | |
| 20 | - | |
| 18 | + //学校名 | |
| 19 | + private String schoolName; | |
| 20 | + //设备iD | |
| 21 | 21 | private String deviceID; |
| 22 | - | |
| 23 | - private String imgPath;//下发的图片路径 | |
| 24 | - | |
| 22 | + //下发的图片路径 | |
| 23 | + private String imgPath; | |
| 24 | + //用户类型 | |
| 25 | 25 | private int userType; |
| 26 | - | |
| 26 | + //下发时间 | |
| 27 | 27 | private String time; |
| 28 | - | |
| 28 | + //下发失败原因 | |
| 29 | 29 | private String failContent; |
| 30 | - | |
| 30 | + //下发失败类型:详情见枚举:EnumSendFaceType | |
| 31 | 31 | private int failType; |
| 32 | 32 | |
| 33 | 33 | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/control/FileControl.java
| ... | ... | @@ -42,6 +42,16 @@ public class FileControl { |
| 42 | 42 | @Autowired |
| 43 | 43 | UserDao userDao; |
| 44 | 44 | |
| 45 | + /** | |
| 46 | + * 单个人脸下发至设备 | |
| 47 | + * @param file | |
| 48 | + * @param schoolId | |
| 49 | + * @param studentCode | |
| 50 | + * @param clint_type | |
| 51 | + * @param userType | |
| 52 | + * @param deviceId | |
| 53 | + * @return | |
| 54 | + */ | |
| 45 | 55 | @RequestMapping(method = RequestMethod.POST, value = "uploadImg") |
| 46 | 56 | public String uploadImg(@RequestParam("file") MultipartFile file, @RequestParam("schoolId") String schoolId, |
| 47 | 57 | @RequestParam("studentCode") String studentCode, @RequestParam("clint_type") String clint_type, |
| ... | ... | @@ -67,6 +77,11 @@ public class FileControl { |
| 67 | 77 | return "0"; |
| 68 | 78 | } |
| 69 | 79 | |
| 80 | + /** | |
| 81 | + * 权限下发至设备 | |
| 82 | + * @param permissionBean | |
| 83 | + * @return | |
| 84 | + */ | |
| 70 | 85 | @RequestMapping(value = "sendPermission", method = RequestMethod.POST) |
| 71 | 86 | @ApiOperation(value = "设置权限") |
| 72 | 87 | public boolean sendPermission(@RequestBody PermissionBean permissionBean) { | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/control/UserControl.java
| ... | ... | @@ -48,7 +48,14 @@ public class UserControl { |
| 48 | 48 | @Autowired |
| 49 | 49 | UserDao userDao; |
| 50 | 50 | |
| 51 | - | |
| 51 | + /** | |
| 52 | + * 单个人脸下发至设备 | |
| 53 | + * @param file | |
| 54 | + * @param schoolId | |
| 55 | + * @param studentCode | |
| 56 | + * @param clint_type | |
| 57 | + * @return | |
| 58 | + */ | |
| 52 | 59 | @RequestMapping(value = "uploadImgAndUserInfo", method = RequestMethod.GET) |
| 53 | 60 | @ApiOperation(value = "上传用户信息") |
| 54 | 61 | public boolean uploadImgAndUserInfo(@RequestParam("file") String file, @RequestParam("schoolId") String schoolId, @RequestParam("studentCode") String studentCode, @RequestParam("clint_type") String clint_type) { |
| ... | ... | @@ -56,6 +63,11 @@ public class UserControl { |
| 56 | 63 | return HttpUtils.uploadImgs(new File(file), schoolId, studentCode, clint_type, file.contains("Teacher") ? 1 : 2,""); |
| 57 | 64 | } |
| 58 | 65 | |
| 66 | + /** | |
| 67 | + * 权限下发至设备 | |
| 68 | + * @param permissionBean | |
| 69 | + * @return | |
| 70 | + */ | |
| 59 | 71 | @RequestMapping(value = "sendPermission", method = RequestMethod.POST) |
| 60 | 72 | @ApiOperation(value = "设置权限") |
| 61 | 73 | public boolean sendPermission(@RequestBody PermissionBean permissionBean) { |
| ... | ... | @@ -69,6 +81,12 @@ public class UserControl { |
| 69 | 81 | return true; |
| 70 | 82 | } |
| 71 | 83 | |
| 84 | + /** | |
| 85 | + * 批量下发人脸 | |
| 86 | + * @param deviceIds | |
| 87 | + * @param schoolId | |
| 88 | + * @param userType | |
| 89 | + */ | |
| 72 | 90 | @RequestMapping(value = "sendFaces", method = RequestMethod.GET) |
| 73 | 91 | @ApiOperation(value = "下发学校下所有人脸给指定设备", notes = "下发所有人脸给指定设备") |
| 74 | 92 | public void sendFaces(@RequestParam("deviceIds") String deviceIds, @RequestParam("schoolId") String schoolId, @RequestParam("userType") String userType) { | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/enums/EnumDeviceType.java
0 → 100644
| ... | ... | @@ -0,0 +1,36 @@ |
| 1 | +package com.example.dahua.enums; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 设备类型枚举 | |
| 5 | + * | |
| 6 | + * @author xuquan | |
| 7 | + * @date 2020/11/11 16:06 | |
| 8 | + */ | |
| 9 | + | |
| 10 | +public enum EnumDeviceType { | |
| 11 | + | |
| 12 | + SCHOOL_CARD(1, "校牌"), | |
| 13 | + CLASS_CARD(2, "班牌"), | |
| 14 | + CLOUD_WINDOW(4, "云视窗"), | |
| 15 | + ZJ_CONTROL(6, "闸机控制器"), | |
| 16 | + LOAN_PERIOD(7, "话机"), | |
| 17 | + HK_FACE(18, "海康人脸设备"), | |
| 18 | + FACE(19, "人脸设备"), | |
| 19 | + DH_FACE(22, "大华人脸设备"), | |
| 20 | + HK_ZW(23, "海康指纹机"), | |
| 21 | + ZK_ZW(24, "中控指纹机"), | |
| 22 | + BG_FACE_WG(25, "博观人脸带温感"), | |
| 23 | + BG_FACE_CG(26, "博观人脸常规"), | |
| 24 | + LQ_QS(27, "乐清寝室看板"), | |
| 25 | + HK_FACE_YTJ(28, "海康人脸权限一体机"), | |
| 26 | + DH_FACE_YTJ(29, "大华人脸权限一体机"); | |
| 27 | + | |
| 28 | + public final int deviceType; | |
| 29 | + public final String deviceName; | |
| 30 | + | |
| 31 | + EnumDeviceType(int deviceType, String deviceName) { | |
| 32 | + this.deviceType = deviceType; | |
| 33 | + this.deviceName = deviceName; | |
| 34 | + } | |
| 35 | + | |
| 36 | +} | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendCardErrorType.java
0 → 100644
| ... | ... | @@ -0,0 +1,51 @@ |
| 1 | +package com.example.dahua.enums; | |
| 2 | + | |
| 3 | +import org.apache.commons.lang.StringUtils; | |
| 4 | + | |
| 5 | +/** | |
| 6 | + *下发卡常见异常码、异常描述枚举 | |
| 7 | + * @author xuquan | |
| 8 | + * @date 2020/11/11 15:19 | |
| 9 | + */ | |
| 10 | + | |
| 11 | +public enum EnumSendCardErrorType { | |
| 12 | + | |
| 13 | + CHECK_DATA_ERR_21("21", "对返回数据的校验出错"), | |
| 14 | + EXIST_USER_146("146", "用户已存在"), | |
| 15 | + NOT_ONLINE_USER_147("147", "用户不存在"), | |
| 16 | + UNKNOWN_1091("1091" , "未知错误"), | |
| 17 | + UNKNOWN_1147("1147" , "未知错误"), | |
| 18 | + UNKNOWN_1162("1162", "未知错误"); | |
| 19 | + | |
| 20 | + public final String code; | |
| 21 | + public final String message; | |
| 22 | + | |
| 23 | + public String getCode() { | |
| 24 | + return code; | |
| 25 | + } | |
| 26 | + | |
| 27 | + public String getMessage() { | |
| 28 | + return message; | |
| 29 | + } | |
| 30 | + | |
| 31 | + EnumSendCardErrorType(String code, String message) { | |
| 32 | + this.code = code; | |
| 33 | + this.message = message; | |
| 34 | + } | |
| 35 | + | |
| 36 | + /** | |
| 37 | + * 根据key获得具体的值 | |
| 38 | + */ | |
| 39 | + public static EnumSendCardErrorType getByCode(String code){ | |
| 40 | + if(StringUtils.isBlank(code)){ | |
| 41 | + return null; | |
| 42 | + } | |
| 43 | + for(EnumSendCardErrorType enums: EnumSendCardErrorType.values()){ | |
| 44 | + if(enums.getCode().equals(code)){ | |
| 45 | + return enums; | |
| 46 | + } | |
| 47 | + } | |
| 48 | + return null; | |
| 49 | + } | |
| 50 | + | |
| 51 | +} | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceErrorType.java
0 → 100644
| ... | ... | @@ -0,0 +1,49 @@ |
| 1 | +package com.example.dahua.enums; | |
| 2 | + | |
| 3 | +import org.apache.commons.lang.StringUtils; | |
| 4 | + | |
| 5 | +/** | |
| 6 | + * 下发人脸常见异常码、异常描述枚举 | |
| 7 | + * @author xuquan | |
| 8 | + * @date 2020/11/11 15:23 | |
| 9 | + */ | |
| 10 | +public enum EnumSendFaceErrorType { | |
| 11 | + | |
| 12 | + EXCEED_SIZE_1028("1028", "图片大小超限"), | |
| 13 | + NOT_EXIST_USER_1029("1029", "用户ID不存在"), | |
| 14 | + EXTRACT_ERROR_1030("1030", "照片特征值提取失败"), | |
| 15 | + EXIST_IMG_1031("1031", "照片已存在"), | |
| 16 | + UPPER_LIMIT_1032("1032", "照片数量超过上限"); | |
| 17 | + | |
| 18 | + public final String code; | |
| 19 | + public final String message; | |
| 20 | + | |
| 21 | + public String getCode() { | |
| 22 | + return code; | |
| 23 | + } | |
| 24 | + | |
| 25 | + public String getMessage() { | |
| 26 | + return message; | |
| 27 | + } | |
| 28 | + | |
| 29 | + EnumSendFaceErrorType(String code, String message) { | |
| 30 | + this.code = code; | |
| 31 | + this.message = message; | |
| 32 | + } | |
| 33 | + | |
| 34 | + /** | |
| 35 | + * 根据key获得具体的值 | |
| 36 | + */ | |
| 37 | + public static EnumSendFaceErrorType getByCode(String code){ | |
| 38 | + if(StringUtils.isBlank(code)){ | |
| 39 | + return null; | |
| 40 | + } | |
| 41 | + for(EnumSendFaceErrorType enums: EnumSendFaceErrorType.values()){ | |
| 42 | + if(enums.getCode().equals(code)){ | |
| 43 | + return enums; | |
| 44 | + } | |
| 45 | + } | |
| 46 | + return null; | |
| 47 | + } | |
| 48 | + | |
| 49 | +} | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceType.java
0 → 100644
| ... | ... | @@ -0,0 +1,25 @@ |
| 1 | +package com.example.dahua.enums; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 下发人脸枚举配置中心 | |
| 5 | + * | |
| 6 | + * @Author: xuquan | |
| 7 | + * @Date: 2020/11/1 14:59 | |
| 8 | + */ | |
| 9 | +public enum EnumSendFaceType { | |
| 10 | + | |
| 11 | + NOT_EXIST_DEVICE(1, "设备不存在"), | |
| 12 | + NOT_ONLINE_DEVICE(2, "设备不在线"), | |
| 13 | + FACE_AND_CARD_FAIL(3, "人脸信息、卡信息下发失败"), | |
| 14 | + FACE_FAIL_CARD_SUCCESS(4, "人脸信息下发失败,卡信息下发成功"), | |
| 15 | + FACE_SUCCESS_CARD_FAIl(5, "人脸信息下发成功,卡信息下发失败"); | |
| 16 | + | |
| 17 | + public final int code; | |
| 18 | + public final String message; | |
| 19 | + | |
| 20 | + EnumSendFaceType(int code, String message) { | |
| 21 | + this.code = code; | |
| 22 | + this.message = message; | |
| 23 | + } | |
| 24 | + | |
| 25 | +} | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSzBusinessType.java
0 → 100644
| ... | ... | @@ -0,0 +1,49 @@ |
| 1 | +package com.example.dahua.enums; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 顺治科技智能校卫业务枚举配置中心 | |
| 5 | + * | |
| 6 | + * @author xuquan | |
| 7 | + * @date 2020/11/11 14:43 | |
| 8 | + */ | |
| 9 | + | |
| 10 | +public interface EnumSzBusinessType { | |
| 11 | + | |
| 12 | + /** | |
| 13 | + * 用户类型 | |
| 14 | + */ | |
| 15 | + public enum EnumUserType { | |
| 16 | + | |
| 17 | + TEACHER(1, "teacher","老师"), | |
| 18 | + STUDENT(2, "student","学生"); | |
| 19 | +// PARENT(3, "parent","家长"); | |
| 20 | + | |
| 21 | + public final int code; | |
| 22 | + public final String enName; | |
| 23 | + public final String cnName; | |
| 24 | + | |
| 25 | + EnumUserType(int code, String enName,String cnName) { | |
| 26 | + this.code = code; | |
| 27 | + this.enName = enName; | |
| 28 | + this.cnName = cnName; | |
| 29 | + } | |
| 30 | + } | |
| 31 | + | |
| 32 | +// public enum EnumCardType { | |
| 33 | +// | |
| 34 | +// STUDENT(1, "student","学生"), | |
| 35 | +// TEACHER(2, "teacher","老师"); | |
| 36 | +//// PARENT(3, "parent","家长"); | |
| 37 | +// | |
| 38 | +// public final int code; | |
| 39 | +// public final String enName; | |
| 40 | +// public final String cnName; | |
| 41 | +// | |
| 42 | +// EnumUserType(int code, String enName,String cnName) { | |
| 43 | +// this.code = code; | |
| 44 | +// this.enName = enName; | |
| 45 | +// this.cnName = cnName; | |
| 46 | +// } | |
| 47 | +// } | |
| 48 | + | |
| 49 | +} | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
| 1 | 1 | package com.example.dahua.module; |
| 2 | 2 | |
| 3 | -import java.awt.image.BufferedImage; | |
| 4 | -import java.io.ByteArrayInputStream; | |
| 5 | -import java.io.File; | |
| 6 | -import java.io.IOException; | |
| 7 | -import java.io.UnsupportedEncodingException; | |
| 8 | -import java.util.ArrayList; | |
| 9 | -import java.util.HashMap; | |
| 10 | -import java.util.List; | |
| 11 | -import java.util.Map; | |
| 12 | - | |
| 13 | 3 | import com.example.dahua.bean.PermissionBean; |
| 14 | 4 | import com.example.dahua.bean.WeekDay; |
| 15 | 5 | import com.example.dahua.bean.WeekTime; |
| 6 | +import com.example.dahua.enums.EnumSendCardErrorType; | |
| 7 | +import com.example.dahua.enums.EnumSendFaceErrorType; | |
| 16 | 8 | import com.example.dahua.lib.NetSDKLib; |
| 17 | 9 | import com.example.dahua.lib.NetSDKLib.*; |
| 18 | 10 | import com.example.dahua.lib.ToolKits; |
| ... | ... | @@ -21,6 +13,15 @@ import com.sun.jna.ptr.IntByReference; |
| 21 | 13 | import lombok.extern.slf4j.Slf4j; |
| 22 | 14 | |
| 23 | 15 | import javax.imageio.ImageIO; |
| 16 | +import java.awt.image.BufferedImage; | |
| 17 | +import java.io.ByteArrayInputStream; | |
| 18 | +import java.io.File; | |
| 19 | +import java.io.IOException; | |
| 20 | +import java.io.UnsupportedEncodingException; | |
| 21 | +import java.util.ArrayList; | |
| 22 | +import java.util.HashMap; | |
| 23 | +import java.util.List; | |
| 24 | +import java.util.Map; | |
| 24 | 25 | |
| 25 | 26 | |
| 26 | 27 | @Slf4j |
| ... | ... | @@ -201,7 +202,8 @@ public class GateModule { |
| 201 | 202 | |
| 202 | 203 | public static synchronized int insertCard(String cardNo, String userId, String cardName, String cardPwd, |
| 203 | 204 | int cardStatus, int cardType, int useTimes, int isFirstEnter, |
| 204 | - int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) { | |
| 205 | + int isValid, String startValidTime, String endValidTime, LLong lLong, | |
| 206 | + String userType,String cardErrNum) { | |
| 205 | 207 | /** |
| 206 | 208 | * 门禁卡记录集信息 |
| 207 | 209 | */ |
| ... | ... | @@ -287,16 +289,18 @@ public class GateModule { |
| 287 | 289 | String ret=ToolKits.getErrorCodePrint(); |
| 288 | 290 | String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); |
| 289 | 291 | log.info("添加卡信息失败,错误信息:{} ,错误码:{} ",ret,number); |
| 290 | - //146用户已存在,21对返回数据的校验出错,1162未知错误 number.equals("1162")|| | |
| 291 | - if(number.equals("21")||number.equals("146")) { | |
| 292 | + cardErrNum = number; | |
| 293 | + //146用户已存在,21对返回数据的校验出错,1162未知错误 | |
| 294 | + if(number.equals(EnumSendCardErrorType.CHECK_DATA_ERR_21.code)|| number.equals(EnumSendCardErrorType.EXIST_USER_146.code)|| | |
| 295 | + number.equals(EnumSendCardErrorType.UNKNOWN_1162.code)) { | |
| 292 | 296 | //用户已存在/返回数据校验出错时,执行删除用户 |
| 293 | 297 | deleteUser( userId, lLong); |
| 294 | 298 | //重新下发卡至设备 |
| 295 | - return insertCard( cardNo, userId, cardName, cardPwd, | |
| 296 | - cardStatus, cardType, useTimes, isFirstEnter, | |
| 297 | - isValid, startValidTime, endValidTime, lLong, userType); | |
| 299 | + cardErrNum = ""; | |
| 300 | + return insertCard(cardNo, userId, cardName, cardPwd, cardStatus, cardType, useTimes, isFirstEnter, | |
| 301 | + isValid, startValidTime, endValidTime, lLong, userType,cardErrNum); | |
| 298 | 302 | } |
| 299 | - //其他错误码,返回-1 | |
| 303 | + //新增卡失败,错误码,返回-1 | |
| 300 | 304 | return -1; |
| 301 | 305 | } else { |
| 302 | 306 | log.info("添加卡信息成功,卡信息记录集编号 : "+ insert.stuCtrlRecordSetResult.nRecNo); |
| ... | ... | @@ -682,7 +686,8 @@ public class GateModule { |
| 682 | 686 | */ |
| 683 | 687 | public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, |
| 684 | 688 | int cardStatus, int cardType, int useTimes, int isFirstEnter, |
| 685 | - int isValid, String startValidTime, String endValidTime, LLong lLong,String userType) { | |
| 689 | + int isValid, String startValidTime, String endValidTime, LLong lLong, | |
| 690 | + String userType,String cardErrNum) { | |
| 686 | 691 | /** |
| 687 | 692 | * 门禁卡记录集信息 |
| 688 | 693 | */ |
| ... | ... | @@ -770,21 +775,20 @@ public class GateModule { |
| 770 | 775 | String ret=ToolKits.getErrorCodePrint(); |
| 771 | 776 | //结果码 |
| 772 | 777 | String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); |
| 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 | -// } | |
| 778 | + cardErrNum = number; | |
| 781 | 779 | log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number); |
| 780 | + | |
| 782 | 781 | return false; |
| 783 | 782 | } |
| 784 | 783 | log.info("修改卡信息成功!"); |
| 785 | 784 | return true; |
| 786 | 785 | } |
| 787 | 786 | |
| 787 | + public static void main(String[] args) { | |
| 788 | + String s = "(0x80000000|147)"; | |
| 789 | + System.out.println(s.substring(s.indexOf("|") + 1, s.indexOf(")"))); | |
| 790 | + } | |
| 791 | + | |
| 788 | 792 | /** |
| 789 | 793 | * 删除卡信息(单个删除) |
| 790 | 794 | * |
| ... | ... | @@ -1081,7 +1085,7 @@ public class GateModule { |
| 1081 | 1085 | log.info("[" + i + "]删除用户结果:" + failCodes[i].nFailCode); |
| 1082 | 1086 | } |
| 1083 | 1087 | } else { |
| 1084 | - log.error("添加卡信息失败"+ ToolKits.getErrorCodePrint()); | |
| 1088 | + log.error("删除用户失败"+ ToolKits.getErrorCodePrint()); | |
| 1085 | 1089 | } |
| 1086 | 1090 | |
| 1087 | 1091 | stIn.read(); |
| ... | ... | @@ -1138,7 +1142,7 @@ public class GateModule { |
| 1138 | 1142 | return true; |
| 1139 | 1143 | } |
| 1140 | 1144 | |
| 1141 | - public static synchronized boolean addFaceInfo(String userId, Memory memory, LLong lLong) { | |
| 1145 | + public static synchronized boolean addFaceInfo(String userId, Memory memory, LLong lLong,String faceErrNum) { | |
| 1142 | 1146 | int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // 添加 |
| 1143 | 1147 | |
| 1144 | 1148 | /** |
| ... | ... | @@ -1173,14 +1177,17 @@ public class GateModule { |
| 1173 | 1177 | } else { |
| 1174 | 1178 | String ret=ToolKits.getErrorCodePrint(); |
| 1175 | 1179 | String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); |
| 1176 | - log.error("修改卡信息失败,错误信息:{} ,错误码:{} ",ret,number); | |
| 1177 | - //number = 1031:照片已存在;number = 1029 :用户ID不存在 | |
| 1178 | - if(number.equals("1031")){ | |
| 1179 | - return modifyFaceInfo( userId, memory, lLong); | |
| 1180 | + faceErrNum = number; | |
| 1181 | + log.error("添加信息失败,错误信息:{} ,错误码:{} ",ret,number); | |
| 1182 | + //照片已存在 | |
| 1183 | + if(number.equals(EnumSendFaceErrorType.EXIST_IMG_1031.code)){ | |
| 1184 | + faceErrNum = ""; | |
| 1185 | + return modifyFaceInfo(userId, memory, lLong,faceErrNum); | |
| 1180 | 1186 | } |
| 1181 | - if(number.equals("1029")) | |
| 1182 | - { | |
| 1183 | - return addFaceInfo( userId, memory, lLong); | |
| 1187 | + //用户Id不存在 | |
| 1188 | + if(number.equals(EnumSendFaceErrorType.NOT_EXIST_USER_1029.code)) { | |
| 1189 | + faceErrNum = ""; | |
| 1190 | + return addFaceInfo( userId, memory, lLong,faceErrNum); | |
| 1184 | 1191 | } |
| 1185 | 1192 | return false; |
| 1186 | 1193 | } |
| ... | ... | @@ -1238,7 +1245,7 @@ public class GateModule { |
| 1238 | 1245 | } |
| 1239 | 1246 | |
| 1240 | 1247 | |
| 1241 | - public static boolean modifyFaceInfo(String userId, Memory memory, LLong lLong) { | |
| 1248 | + public static boolean modifyFaceInfo(String userId, Memory memory, LLong lLong,String faceErrNum) { | |
| 1242 | 1249 | int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 |
| 1243 | 1250 | |
| 1244 | 1251 | /** |
| ... | ... | @@ -1274,6 +1281,7 @@ public class GateModule { |
| 1274 | 1281 | } else { |
| 1275 | 1282 | String ret=ToolKits.getErrorCodePrint(); |
| 1276 | 1283 | String number = ret.substring(ret.indexOf("|") + 1, ret.indexOf(")")); |
| 1284 | + faceErrNum = number; | |
| 1277 | 1285 | log.error("修改人脸失败,错误信息:{} ,错误码:{} ",ret,number); |
| 1278 | 1286 | return false; |
| 1279 | 1287 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java
| ... | ... | @@ -4,9 +4,11 @@ import com.example.dahua.MyTask; |
| 4 | 4 | import com.example.dahua.async.SendUserInfoTask; |
| 5 | 5 | import com.example.dahua.bean.*; |
| 6 | 6 | import com.example.dahua.dao.UserDao; |
| 7 | +import com.example.dahua.enums.EnumDeviceType; | |
| 7 | 8 | import com.example.dahua.lib.NetSDKLib; |
| 8 | 9 | import com.example.dahua.module.GateModule; |
| 9 | 10 | import com.example.dahua.service.UserService; |
| 11 | +import lombok.extern.slf4j.Slf4j; | |
| 10 | 12 | import org.apache.commons.lang.StringUtils; |
| 11 | 13 | import org.springframework.beans.factory.annotation.Autowired; |
| 12 | 14 | import org.springframework.stereotype.Repository; |
| ... | ... | @@ -16,6 +18,7 @@ import java.util.List; |
| 16 | 18 | |
| 17 | 19 | @Repository |
| 18 | 20 | @Service |
| 21 | +@Slf4j | |
| 19 | 22 | public class UserServiceImp implements UserService { |
| 20 | 23 | |
| 21 | 24 | @Autowired |
| ... | ... | @@ -26,13 +29,16 @@ public class UserServiceImp implements UserService { |
| 26 | 29 | |
| 27 | 30 | @Override |
| 28 | 31 | public List<AttendanceBean> getAttendanceBeans(String schoolId, String clint_type, String devid) { |
| 29 | - | |
| 30 | - if (!StringUtils.isEmpty(devid)) return userDao.getAttendanceBeanWithId(schoolId, clint_type, devid); | |
| 32 | + //如果设备ID未传,则返回该学校下所有设备,反之,查询对应设备 | |
| 33 | + if (!StringUtils.isEmpty(devid)) { | |
| 34 | + return userDao.getAttendanceBeanWithId(schoolId, clint_type, devid); | |
| 35 | + } | |
| 31 | 36 | |
| 32 | 37 | List<AttendanceBean> attendanceBeanList = userDao.getAttendanceBeans(schoolId, clint_type); |
| 33 | - | |
| 34 | - if (attendanceBeanList.size()==0)attendanceBeanList = userDao.getAttendanceBeans(schoolId,"29"); | |
| 35 | - | |
| 38 | + if (attendanceBeanList.size()==0){ | |
| 39 | + //若未查询到结果,则查询大华人脸一体机 29 | |
| 40 | + attendanceBeanList = userDao.getAttendanceBeans(schoolId,String.valueOf(EnumDeviceType.DH_FACE_YTJ.deviceType)); | |
| 41 | + } | |
| 36 | 42 | return attendanceBeanList; |
| 37 | 43 | } |
| 38 | 44 | |
| ... | ... | @@ -52,10 +58,12 @@ public class UserServiceImp implements UserService { |
| 52 | 58 | */ |
| 53 | 59 | @Override |
| 54 | 60 | public boolean uploadImgAndUserInfo(String file, String schoolId, String studentCode, String clint_type, int userType, String devid) { |
| 55 | - List<AttendanceBean> attendanceBeans = getAttendanceBeans(schoolId, clint_type, devid);//获取学校下的大华设备 | |
| 56 | - | |
| 57 | - System.out.println("设备数量:" + attendanceBeans.size()); | |
| 58 | - | |
| 61 | + //获取学校下的大华设备 | |
| 62 | + List<AttendanceBean> attendanceBeans = getAttendanceBeans(schoolId, clint_type, devid); | |
| 63 | + if(attendanceBeans.size()<1){ | |
| 64 | + log.info("下发用户人脸信息失败,学校ID: {},该学校下无设备!设备类型:{}",schoolId,clint_type); | |
| 65 | + } | |
| 66 | + log.info("设备数量:" + attendanceBeans.size()); | |
| 59 | 67 | UserInfoBean userInfoBean = null; |
| 60 | 68 | try { |
| 61 | 69 | if (userType == 2) { |
| ... | ... | @@ -87,7 +95,7 @@ public class UserServiceImp implements UserService { |
| 87 | 95 | userInfoBean.setStudent_id(teacher.getTeacher_id()); |
| 88 | 96 | } |
| 89 | 97 | } |
| 90 | - | |
| 98 | + //下发任务 | |
| 91 | 99 | myTask.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType); |
| 92 | 100 | } catch (Exception e) { |
| 93 | 101 | e.printStackTrace(); |
| ... | ... | @@ -107,14 +115,20 @@ public class UserServiceImp implements UserService { |
| 107 | 115 | myTask.doTaskSendUserInfos(schoolId, clint_type, type, -1); |
| 108 | 116 | } |
| 109 | 117 | |
| 118 | + /** | |
| 119 | + * 下发权限至设备 | |
| 120 | + * @param permissionBean | |
| 121 | + * @return | |
| 122 | + */ | |
| 110 | 123 | @Override |
| 111 | 124 | public boolean sendPermission(PermissionBean permissionBean) { |
| 112 | - | |
| 125 | + //下发权限对应设备集合 | |
| 113 | 126 | List<String> deviceIds = permissionBean.getDeviceIds(); |
| 114 | 127 | if (null != deviceIds) |
| 115 | - for (String deviceId : | |
| 116 | - deviceIds) { | |
| 128 | + for (String deviceId : deviceIds) { | |
| 129 | + // 句柄 | |
| 117 | 130 | NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(deviceId); |
| 131 | + //下发权限 | |
| 118 | 132 | GateModule.setAccessTimeSchedule(loginHandleLong, permissionBean); |
| 119 | 133 | GateModule.getAccessTimeSchedule1(loginHandleLong); |
| 120 | 134 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java
| ... | ... | @@ -22,6 +22,17 @@ import java.util.Map; |
| 22 | 22 | |
| 23 | 23 | public class HttpUtils { |
| 24 | 24 | |
| 25 | + /** | |
| 26 | + * 单个人脸下发至设备 | |
| 27 | + * 文件先由文件服务上传至100服务上,在21服务进行下发动作 | |
| 28 | + * @param file | |
| 29 | + * @param schoolId | |
| 30 | + * @param studentCode | |
| 31 | + * @param clint_type | |
| 32 | + * @param userType | |
| 33 | + * @param deviceId | |
| 34 | + * @return | |
| 35 | + */ | |
| 25 | 36 | public static boolean uploadImgs(File file, String schoolId, String studentCode, String clint_type, int userType,String deviceId) { |
| 26 | 37 | |
| 27 | 38 | if (!file.exists()) { |
| ... | ... | @@ -88,7 +99,11 @@ public class HttpUtils { |
| 88 | 99 | return result.getBody(); |
| 89 | 100 | } |
| 90 | 101 | |
| 91 | - | |
| 102 | + /** | |
| 103 | + * 权限下发至设备 | |
| 104 | + * @param permissionBean | |
| 105 | + * @return | |
| 106 | + */ | |
| 92 | 107 | public static boolean sendPermission(PermissionBean permissionBean) { |
| 93 | 108 | String url = "http://121.40.109.21:8991/file/sendPermission"; |
| 94 | 109 | RestTemplate restTemplate = new RestTemplate(); |
| ... | ... | @@ -107,6 +122,10 @@ public class HttpUtils { |
| 107 | 122 | return responseEntity.getBody().equals("1"); |
| 108 | 123 | } |
| 109 | 124 | |
| 125 | + /** | |
| 126 | + * 权限下发至海康设备 | |
| 127 | + * @param permissionFaceBean | |
| 128 | + */ | |
| 110 | 129 | public static void sendPermission2HK(PermissionFaceBean permissionFaceBean) { |
| 111 | 130 | String url = "http://114.55.30.100:8089/facereco/sendPermiss"; |
| 112 | 131 | PermissionBean permissionBean = permissionFaceBean.getPermissionBean(); | ... | ... |