diff --git a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java index 2d011fe..7cfb24d 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java @@ -1,6 +1,7 @@ package com.example.dahua; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.example.dahua.bean.*; import com.example.dahua.dao.UserDao; import com.example.dahua.enums.EnumDeviceType; @@ -409,84 +410,82 @@ public class MyTask implements ApplicationRunner { String userId = new String(msg.szUserID).trim(); //开门错误码 int messageCode = msg.nErrorCode; + //刷卡结果,1表示成功, 0表示失败 + int status = msg.bStatus; //处理心跳 saveAttendanceService(szSn,"",0,1); String newCard = ""; + log.info("设备ID: 【{}】,上报卡号: 【{}】,状态: 【{}】,code: 【{}】",szSn,card,status,messageCode); + if(StringUtils.isEmpty(card)) return -1; + //关联设备信息 + AttendanceBean attendance = myTaskUtil.userDao.getDeviceByDeviceId(szSn); + if(Objects.isNull(attendance)) return -1; + if(StringUtils.isEmpty(attendance.getSchool_id())) return -1; try { - if (!StringUtils.isEmpty(card)) { - //根据卡号获取卡身份信息 - CardBean cardBean = myTaskUtil.userDao.getCards(card); - if(cardBean ==null){ - newCard = cardNo(card); - cardBean = myTaskUtil.userDao.getCards(newCard); - } - if(cardBean ==null){ - log.info("卡号有误!!设备ID: 【{}】,上报卡号: 【{}】",szSn,card); - return -1; - } - // 缓存抓拍人脸 - String fileName = StringUtils.isEmpty(userId) ? card + ".png" : userId + ".png"; - String snapPicPath = path + "\\" + fileName; - byte[] buffer = pBuffer.getByteArray(0, dwBufSize); - ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer); - gateBufferedImage = ImageIO.read(byteArrInputGlobal); - if (gateBufferedImage != null) { - ImageIO.write(gateBufferedImage, "png", new File(snapPicPath)); - } - snapPicPath = snapPicPath.replaceFirst("\\.", "http://120.26.116.253:8080"); - snapPicPath = snapPicPath.replace("FaceRecoder", "image"); - //关联设备信息 - AttendanceBean attendanceBean = myTaskUtil.userDao.getDeviceByDeviceId(szSn); - if(attendanceBean !=null){ - if(!StringUtils.isEmpty(attendanceBean.getSchool_id())){ - int schoolId = Integer.parseInt(attendanceBean.getSchool_id()); - String clintName = attendanceBean.getName(); - //门禁进出类型:1进0出 - int eventType = 0; - if(StringUtils.isEmpty(attendanceBean.getOutOrIn())){ - eventType = EnumSzBusinessType.EnumDeviceInAndOut.OUT.code; - }else{ - eventType = Integer.parseInt(attendanceBean.getOutOrIn()); - } - //刷卡时间 - String eventTime = DateUtils.date2String(new Date(), DateUtils.format2); - //老师 - TeacherBean teacherBean = null; - if (cardBean.getType() == 0) { - //老师人脸信息,保存人脸记录表 - teacherBean = myTaskUtil.userDao.getTeacherWithId(cardBean.getUser_id()); - myTaskUtil.sendRecordDao.addFaceRecoder(szSn, teacherBean.getUser_id(), teacherBean.getName(), snapPicPath,eventType, - eventTime, card,messageCode ==20?EnumSendFaceType.TIME_INTERVAL_ERROR.message:"",schoolId); - } - UserInfoBean userInfoBean = null; - if (cardBean.getType() == 2) { - //学生人脸信息,保存人脸记录表 - userInfoBean = myTaskUtil.userDao.getStudentWithid(cardBean.getUser_id()); - myTaskUtil.sendRecordDao.addFaceRecoder(szSn, userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath,eventType, - eventTime, card,messageCode ==20?EnumSendFaceType.TIME_INTERVAL_ERROR.message:"",schoolId); - } - //刷卡结果,1表示成功, 0表示失败 - int status = msg.bStatus; - String result = status == 1 ? "开门成功" : "开门失败"; - String openMsg = eventType ==1 ? "进" : "出" ; - if(szSn.startsWith("ytj")) { - log.info("出入信息:学校【{}】,开门方向:【{}】",schoolId,status); - // 艺校考勤OA - if(schoolId == 12 && status ==1){ - int intOrOut = eventType ==1 ? 1 : 2; - if(userInfoBean !=null){ - log.info("【{}】出入信息:方向【{}】,开门结果【{}】",userInfoBean.getName(),openMsg,result); - sendRecordToSXYX(userInfoBean.getName(),userInfoBean.getUser_id(),intOrOut,eventTime,""); - } - if(teacherBean != null){ - sendRecordToSXYX(teacherBean.getName(),teacherBean.getUser_id(),intOrOut,eventTime,getScene(clintName)); - } - }else{ - //保存考勤记录 - kaoQinRecord(status, eventType, card, szSn, eventTime,lAnalyzerHandle); - } - } + //根据卡号获取卡身份信息 + CardBean cardBean = myTaskUtil.userDao.getCards(card); + if(cardBean ==null){ + newCard = cardNo(card); + cardBean = myTaskUtil.userDao.getCards(newCard); + } + if(cardBean ==null){ + log.info("卡号有误!!设备ID: 【{}】,上报卡号: 【{}】",szSn,card); + return -1; + } + // 缓存抓拍人脸 + String fileName = StringUtils.isEmpty(userId) ? card + ".png" : userId + ".png"; + String snapPicPath = path + "\\" + fileName; + byte[] buffer = pBuffer.getByteArray(0, dwBufSize); + ByteArrayInputStream byteArrInputGlobal = new ByteArrayInputStream(buffer); + gateBufferedImage = ImageIO.read(byteArrInputGlobal); + if (gateBufferedImage != null) { + ImageIO.write(gateBufferedImage, "png", new File(snapPicPath)); + } + snapPicPath = snapPicPath.replaceFirst("\\.", "http://120.26.116.253:8080"); + snapPicPath = snapPicPath.replace("FaceRecoder", "image"); + + int schoolId = Integer.parseInt(attendance.getSchool_id()); + String clintName = attendance.getName(); + //门禁进出类型:1进0出 + int eventType = 0; + if(StringUtils.isEmpty(attendance.getOutOrIn())){ + eventType = EnumSzBusinessType.EnumDeviceInAndOut.OUT.code; + }else{ + eventType = Integer.parseInt(attendance.getOutOrIn()); + } + //刷卡时间 + String eventTime = DateUtils.date2String(new Date(), DateUtils.format2); + //老师 + TeacherBean teacherBean = null; + if (cardBean.getType() == 0) { + //老师人脸信息,保存人脸记录表 + teacherBean = myTaskUtil.userDao.getTeacherWithId(cardBean.getUser_id()); + myTaskUtil.sendRecordDao.addFaceRecoder(szSn, teacherBean.getUser_id(), teacherBean.getName(), snapPicPath,eventType, + eventTime, card,messageCode ==20?EnumSendFaceType.TIME_INTERVAL_ERROR.message:"",schoolId); + } + UserInfoBean userInfoBean = null; + if (cardBean.getType() == 2) { + //学生人脸信息,保存人脸记录表 + userInfoBean = myTaskUtil.userDao.getStudentWithid(cardBean.getUser_id()); + myTaskUtil.sendRecordDao.addFaceRecoder(szSn, userInfoBean.getUser_id(), userInfoBean.getName(), snapPicPath,eventType, + eventTime, card,messageCode ==20?EnumSendFaceType.TIME_INTERVAL_ERROR.message:"",schoolId); + } + String result = status == 1 ? "开门成功" : "开门失败"; + String openMsg = eventType ==1 ? "进" : "出" ; + if(szSn.contains("ytj")) { + // 艺校考勤OA + if(schoolId == 12 && status ==1){ + int intOrOut = eventType ==1 ? 1 : 2; + if(userInfoBean !=null){ + log.info("【{}】出入信息:方向【{}】,开门结果【{}】",userInfoBean.getName(),openMsg,result); + sendRecordToSXYX(userInfoBean.getName(),userInfoBean.getUser_id(),intOrOut,eventTime,""); } + if(teacherBean != null){ + sendRecordToSXYX(teacherBean.getName(),teacherBean.getUser_id(),intOrOut,eventTime,getScene(clintName)); + } + }else{ + //保存考勤记录 + kaoQinRecord(status, eventType, card, szSn, eventTime,lAnalyzerHandle); } } } catch (IOException e2) { @@ -629,6 +628,10 @@ public class MyTask implements ApplicationRunner { } + public static void main(String[] args) { + System.out.println(cardNo("45318FBE")); + } + private static MqttManager mqttManager; /** * 大华设备考勤记录 @@ -648,15 +651,12 @@ public class MyTask implements ApplicationRunner { checkIn.setFlag(eventType == EnumSzBusinessType.EnumDeviceInAndOut.INT.code ? 0:1); checkIn.setCheckTime(eventTime); myTaskUtil.searchMapper.checkIn(checkIn); - if (checkIn.getIsSuccess() == 1) { log.info("考勤成功: checkIn: {}, 方向:{}",JsonUtils.nonDefaultMapper().toJson(checkIn),eventType == 1 ? "进门" : "出门"); //考勤成功 String content = "考勤成功!,设备:" + deviceId + "卡号:" + cardNo + "方向:" + (eventType == 1 ? "进门" : "出门") + "______" + eventTime; - // //开始推送看板 // sendMQMess(deviceId,cardNo,eventType); - //记录学生考勤签到记录 FileUtils.getInstance().writeLogs(content, FileUtils.qiandaoSuccess); } else { diff --git a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java index 5b7e470..4ed139f 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java +++ b/cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java @@ -14,7 +14,7 @@ public interface UserDao { @Select("select clint_id from SZ_Attendance where school_id = #{schoolId} and clint_type = 29") List selectDeviceBySchoolId(@Param("schoolId") Integer schoolId); - @Select("select clint_id from SZ_Attendance where clint_id = #{clintId}") + @Select("select * from SZ_Attendance where clint_id = #{clintId}") AttendanceBean getDeviceByDeviceId(@Param("clintId") String clintId); @Select("select clint_type from SZ_Attendance where clint_id = #{deviceId}") diff --git a/cloud/dahua/src/main/resources/logback-spring.xml b/cloud/dahua/src/main/resources/logback-spring.xml index c6d3d52..674e3e1 100644 --- a/cloud/dahua/src/main/resources/logback-spring.xml +++ b/cloud/dahua/src/main/resources/logback-spring.xml @@ -9,9 +9,9 @@ - + - + diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java index 5423437..bff0848 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java @@ -29,6 +29,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -481,11 +482,13 @@ public class BaseService { * @return */ public List getSendRecordList(SendFaceBean faceBean) { - List students = sendRecordDao.getSendRecordList(faceBean.getSchoolId(),faceBean.getDeviceList(),faceBean.getStatus()); - //去重重复数据 - List studentList = students.stream().collect(Collectors.collectingAndThen( - Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SendRecordBean::getNum))),ArrayList::new)); - return studentList; + List students = sendRecordDao + .getSendRecordList(faceBean.getSchoolId(),faceBean.getDeviceList(),faceBean.getStatus()); + students = students.parallelStream() + .collect(Collectors.toMap(t-> Arrays.asList(t.getSchoolId(), t.getNum(),t.getDeviceID()), + Function.identity(),(oldValue, newValue) -> oldValue)) + .values().stream().collect(Collectors.toList()); + return students; } @@ -566,7 +569,7 @@ public class BaseService { return deviceDao.selectDeviceBySchoolId(schoolId); } - public String checkUserFace(StudentBean studentBean,Integer userType,Integer schoolId){ + public String checkUserFace(StudentBean studentBean,Integer userType,Integer schoolId){ String cardNum = userType.intValue()==1 ? studentBean.getTeacher_num():studentBean.getStudent_num(); String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)) return null; @@ -627,11 +630,11 @@ public class BaseService { } public boolean checkSendRecord(List sendRecords,String sno,Integer schoolId,String cardNum){ - SendRecordBean record = sendRecords.stream().filter(s->Objects.equals(s.getDeviceID(),sno) && + List records = sendRecords.stream().filter(s->Objects.equals(s.getDeviceID(),sno) && Objects.equals(s.getStatus(),1) && Objects.equals(s.getSchoolId(),schoolId) && - Objects.equals(s.getNum(),cardNum)).findFirst().orElse(null); - if(Objects.nonNull(record)) return true; - return false; + Objects.equals(s.getNum(),cardNum)).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(records)) return false; + return true; } public void deleteCardFace(Integer schoolId,String deviceId,String cardNo) { diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java index 4c238af..1669991 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java @@ -326,42 +326,41 @@ public class UserOperateServiceImpl implements UserOperateService { public void sendFaceForNoSend(SendFaceBean faceBean,List studentList,List deviceIds){ log.info("统计学校共有:"+studentList.size()+"张卡,"+deviceIds.size()+"台设备." ); List sendRecords = baseService.getSendRecordList(faceBean); - List list = sendRecords.parallelStream() - .collect(Collectors.toMap(t-> Arrays.asList(t.getSchoolId(),t.getNum(),t.getDeviceID()), - Function.identity(),(oldValue, newValue) -> oldValue)) - .values().stream().collect(Collectors.toList()); - studentList.stream().forEach(s->{ - String userName = s.getName(); - String studentCode = s.getStudentCode(); - String studentNum = s.getStudent_num(); - String filePath = baseService.checkUserFace(s, faceBean.getUserType(), faceBean.getSchoolId()); - if(StringUtils.isBlank(filePath)) return; - File file = new File(filePath); - if(!file.exists()) return; - String targetPath = FileUtils.picPathComp + file.getName(); - try { - CompressPic.CompressPic(file.getAbsolutePath(), targetPath); - } catch (Exception e) { - log.error("压缩图片失败:",e); - return; - } - for(String sno : deviceIds){ + for(String sno : deviceIds){ + studentList.stream().forEach(s->{ try{ - if(baseService.checkSendRecord(list,sno, faceBean.getSchoolId(), studentNum)) continue; + String userName = s.getName(); + String studentCode = s.getStudentCode(); + String studentNum = s.getStudent_num(); + String filePath = baseService.checkUserFace(s, faceBean.getUserType(), faceBean.getSchoolId()); + if(StringUtils.isBlank(filePath)) return; + File file = new File(filePath); + if(!file.exists()) return; + String targetPath = FileUtils.picPathComp + file.getName(); + try { + CompressPic.CompressPic(file.getAbsolutePath(), targetPath); + } catch (Exception e) { + log.error("压缩图片失败:",e); + return; + } + if(baseService.checkSendRecord(sendRecords,sno, faceBean.getSchoolId(), studentNum)) { + return; + } Integer clintType = userDao.getClintTypeByDeviceId(sno); - if(clintType.intValue()== 18 || clintType.intValue()== 28) + if(clintType.intValue()== 22 || clintType.intValue()== 29){ HttpUtil.uploadDHImgForOne(filePath, faceBean.getSchoolId(), studentCode,sno); - - if(clintType.intValue()== 22 || clintType.intValue()== 29) + } + if(clintType.intValue()== 18 || clintType.intValue()== 28){ baseService.sendImg(file.getAbsolutePath(), targetPath, sno, studentNum, userName, String.valueOf(faceBean.getUserType()), faceBean.getSchoolId()); + } }catch (Exception e){ - log.error("人脸下发失败"); + log.error("人脸下发失败,{}",e); e.printStackTrace(); - continue; + return; } - } - }); + }); + } } @Override @@ -466,7 +465,7 @@ public class UserOperateServiceImpl implements UserOperateService { //下发设备集合 List deviceList = baseService.getDeviceList(faceBean.getDeviceIds(),faceBean.getSchoolId()); //根据类型获取下发用户信息 - List studentBeans = Objects.equals(faceBean.getUserType(),EnumSzBusinessType.EnumUserType.TEACHER.code) ? + List studentBeans = !Objects.equals(faceBean.getUserType(),EnumSzBusinessType.EnumUserType.TEACHER.code) ? baseService.getStudentByClassId(faceBean) : baseService.getTeacherList(faceBean.getSchoolId()); //异步执行下发 this.sendFaceForNoSend(faceBean,studentBeans,deviceList); diff --git a/cloud/haikangface/src/main/resources/logback-spring.xml b/cloud/haikangface/src/main/resources/logback-spring.xml index 8380ee8..328a853 100644 --- a/cloud/haikangface/src/main/resources/logback-spring.xml +++ b/cloud/haikangface/src/main/resources/logback-spring.xml @@ -8,7 +8,8 @@ - + + diff --git a/cloud/pom.xml b/cloud/pom.xml index f360b52..70fd8b6 100644 --- a/cloud/pom.xml +++ b/cloud/pom.xml @@ -25,13 +25,13 @@ - server1 - server2 + + common dahua haikangface - quartz + @@ -43,7 +43,7 @@ - fIle-center + -- libgit2 0.21.0