Commit fc3450829fea257b9a356b6891d56e0c1c4958fb

Authored by 徐泉
1 parent 3964921d
Exists in master

下发接口修改

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();
... ...