From 2cbbb1644bd6bb3b5c9aec6b383c37a08e80924c Mon Sep 17 00:00:00 2001 From: XuQuan <1099815072@qq.com> Date: Wed, 20 Jan 2021 16:09:30 +0800 Subject: [PATCH] 智能校卫:海康、大华人脸机代码提交 --- cloud/dahua/src/main/java/com/example/dahua/MyTask.java | 11 ++++++----- cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask2.java | 266 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/bean/DeviceAuthRecord.java | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/dahua/src/main/java/com/example/dahua/bean/SendFaceDto.java | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/dahua/src/main/java/com/example/dahua/bean/SendRecordBean.java | 28 ++++++++++++++++++++++++++++ cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java | 11 ++++++++++- cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java | 18 +++++++++++++++++- cloud/dahua/src/main/java/com/example/dahua/filter/AllowOriginFilter.java | 3 --- cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java | 40 ---------------------------------------- cloud/dahua/src/main/java/com/example/dahua/module/GateModule2.java | 5 +++-- cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java | 2 +- cloud/dahua/src/main/java/com/example/dahua/service/DeleteBatchTest.java | 3 +++ cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java | 31 ++++++++++++++++++------------- cloud/dahua/src/main/java/com/example/dahua/service/imp/AttendanceImp.java | 6 +++--- cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/dahua/src/main/java/com/example/dahua/service/imp/DeleteBatchTestImpl.java | 39 ++++++++++++++++++++++++++++++++++++--- cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java | 596 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java | 15 +++++++-------- cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java | 7 +++++++ cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java | 21 +++++++++++++++++++++ cloud/dahua/src/main/resources/logback-spring.xml | 4 ++-- cloud/dahua/src/main/resources/mapper/usermapper.xml | 35 +++++++++++++++++++++++++++++------ cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java | 5 +++++ cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java | 96 +++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/HaikangfaceApplication.java | 2 ++ cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask100.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask253.java | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java | 91 ++++++++++++++++++++++++++++--------------------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/AuthRecordDto.java | 6 +++--- cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/PermissionDHBean.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/SendFaceDto.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java | 19 ++++++++----------- cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java | 2 +- cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java | 100 ++++++++++++++++++++++++++++++++++------------------------------------------------------------------ cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java | 4 ++-- cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java | 14 ++++++++------ cloud/haikangface/src/main/java/com/sincere/haikangface/enums/EnumSzBusinessType.java | 14 ++++++++++++++ cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java | 375 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java | 644 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java | 3 --- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java | 19 ------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java | 256 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------- cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java | 5 ++++- cloud/haikangface/src/main/resources/application.yaml | 2 ++ cloud/haikangface/src/main/resources/logback-spring.xml | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ cloud/haikangface/src/main/resources/mapper/usermapper.xml | 37 +++++++++++++++++++++++++++++++++++++ 48 files changed, 2404 insertions(+), 1411 deletions(-) create mode 100644 cloud/dahua/src/main/java/com/example/dahua/bean/DeviceAuthRecord.java create mode 100644 cloud/dahua/src/main/java/com/example/dahua/bean/SendFaceDto.java create mode 100644 cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java create mode 100644 cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask100.java create mode 100644 cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask253.java create mode 100644 cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/PermissionDHBean.java create mode 100644 cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/SendFaceDto.java create mode 100644 cloud/haikangface/src/main/resources/logback-spring.xml 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 12cae4c..3c0b69e 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/MyTask.java +++ b/cloud/dahua/src/main/java/com/example/dahua/MyTask.java @@ -72,6 +72,8 @@ public class MyTask implements ApplicationRunner { //设备断线 public static boolean isFirstAutoRegister = false; + public static String inTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + @Override public void run(ApplicationArguments args) throws Exception { @@ -141,7 +143,7 @@ public class MyTask implements ApplicationRunner { String deviceId = getDeviceId(pchDVRIP, nDVRPort); log.info("DisConnect Device: {}, IP: {}, Port: {}",deviceId,pchDVRIP,nDVRPort); if (!StringUtils.isEmpty(deviceId)) { - myTaskUtil.attendanceService.updateConnectStateWithDevid(0, deviceId); + myTaskUtil.attendanceService.updateConnectStateWithDevid(0,inTime,deviceId); GateModule.stopRealLoadPic(attachLongMap.get(deviceId)); //移除在线 removeDevice(deviceId); @@ -167,7 +169,7 @@ public class MyTask implements ApplicationRunner { String deviceId = getDeviceId(pchDVRIP, nDVRPort); log.info("ReConnect Device: {},IP: {},Port: {}", deviceId,pchDVRIP, nDVRPort); if (!StringUtils.isEmpty(deviceId)) { - myTaskUtil.attendanceService.updateConnectStateWithDevid(1, deviceId); + myTaskUtil.attendanceService.updateConnectStateWithDevid(1,inTime,deviceId); DeviceInfoBean deviceInfoBean = new DeviceInfoBean(); deviceInfoBean.setDevcieId(deviceId); deviceInfoBean.setDeviceIp(pchDVRIP); @@ -223,6 +225,8 @@ public class MyTask implements ApplicationRunner { case NetSDKLib.EM_LISTEN_TYPE.NET_DVR_SERIAL_RETURN: { // 设备注册携带序列号 log.info("Register Device Info Device address: {},port: {},DeviceID: {}", pIp, wPort, deviceId); log.info("EM_LISTEN_TYPE:设备注册携带序列号"); + //保存设备 + saveAttendanceService(deviceId,pIp,wPort); CDevInfo dev = new CDevInfo(); System.arraycopy(pIp.getBytes(),0,dev.address,0,pIp.getBytes().length); dev.port=wPort; @@ -352,8 +356,6 @@ public class MyTask implements ApplicationRunner { //下发句柄 lLongSendMap.put(deviceId, m_hLoginHandle); addDeviceInfo(deviceId,address,port,m_hLoginHandle); - //保存设备 - saveAttendanceService(deviceId,address,port); } @@ -568,7 +570,6 @@ public class MyTask implements ApplicationRunner { * @param port */ private static void saveAttendanceService(String deviceId, String ip, int port){ - String inTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); String clintType = String.valueOf(EnumDeviceType.DH_FACE.deviceType); if(deviceId.startsWith("ytj")){ clintType = String.valueOf(EnumDeviceType.DH_FACE_YTJ.deviceType); diff --git a/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask2.java b/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask2.java index 774255c..351a2e5 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask2.java +++ b/cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask2.java @@ -3,32 +3,31 @@ package com.example.dahua.async; import com.alibaba.fastjson.JSON; import com.example.dahua.MyTask; import com.example.dahua.bean.*; -import com.example.dahua.common.Res; +import com.example.dahua.control.FileControl; import com.example.dahua.dao.UserDao; -import com.example.dahua.enums.*; +import com.example.dahua.enums.EnumDeviceType; +import com.example.dahua.enums.EnumSendFaceType; +import com.example.dahua.enums.EnumSzBusinessType; import com.example.dahua.lib.CompressPic; import com.example.dahua.lib.FilePath; import com.example.dahua.lib.NetSDKLib; -import com.example.dahua.lib.ToolKits; -import com.example.dahua.module.GateModule; import com.example.dahua.module.GateModule2; import com.example.dahua.service.PermissFaceService; +import com.example.dahua.service.imp.BaseService; import com.example.dahua.utils.FileUtils; import com.example.dahua.utils.HttpUtils; import com.example.dahua.utils.JsonUtils; import com.example.dahua.xiananDao.SendRecordDao; -import com.sun.jna.Memory; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; -import org.springframework.web.client.RestTemplate; -import java.io.*; +import java.io.File; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Calendar; +import java.util.Date; +import java.util.List; /** * 下发卡号的异步操作 @@ -46,6 +45,8 @@ public class SendUserInfoTask2 { SendRecordDao sendRecordDao; @Autowired PermissFaceService permissFaceService; + @Autowired + BaseService baseService; /** * 下发单个用户人脸任务 @@ -129,7 +130,7 @@ public class SendUserInfoTask2 { */ pushCardAndFace(file, userInfoBean, attendanceBeans, sendRecordBean.getUserType()+"",sendRecordBean.getFailType()); } catch (Exception e) { - e.printStackTrace(); + log.error("下发失败"); return false; } return false; @@ -192,6 +193,7 @@ public class SendUserInfoTask2 { SendRecordBean sendRecordBean = new SendRecordBean(); sendRecordBean.setImgPath(picSrc); sendRecordBean.setCustomerid(studentId); + sendRecordBean.setUserId(userId); sendRecordBean.setName(userName); sendRecordBean.setUserType(Integer.parseInt(userType)); sendRecordBean.setNum(studentNum); @@ -205,12 +207,14 @@ public class SendUserInfoTask2 { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.YEAR, 4); String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); - //根据学生ID\学校ID获取学生类型 - String studentType = userDao.getStudentType(schoolId,studentId); - //通道号 - String channel = analysisPermission(Integer.parseInt(schoolId),studentType); - log.info("通道号: "+channel); - + String channel=""; + if(userType2 ==2){ + //根据学生ID\学校ID获取学生类型 + String studentType = userDao.getStudentType(schoolId,studentId); + //通道号 +// String channel = analysisPermission(Integer.parseInt(schoolId),studentType); + channel = analysisAuthChannel(Integer.parseInt(schoolId),Integer.parseInt(studentType),deviceId); + } /** * 下发升级二代接口,动态库libs下win64,更新为官方最新版sdk add by xuquan 2020-11-23 * 注:用户下发逻辑: @@ -241,10 +245,9 @@ public class SendUserInfoTask2 { //判断该学校设备ID对应失败记录是否存在:Face_SendFail deviceId = sendRecordDao.getFailIsExit(deviceId, attendanceBean.getSchool_id()); if (!StringUtils.isEmpty(deviceId)) { - //更新下发失败状态 - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.NOT_ONLINE_DEVICE.code); - //添加下发失败记录 - addFailDace(sendRecordBean); + sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code); + sendRecordBean.setFailContent(EnumSendFaceType.NOT_ONLINE_DEVICE.message); + baseService.sendFailRecord(sendRecordBean); } } else { log.info("=================开始执行下发人脸及卡号任务================="); @@ -253,10 +256,13 @@ public class SendUserInfoTask2 { if(attendanceBean.getClint_id().startsWith("ytj")&&Integer.parseInt(attendanceBean.getSchool_id())!=126 &&Integer.parseInt(attendanceBean.getSchool_id())!=393) { cardNum = studentNum; - deviceType= EnumDeviceType.DH_FACE_YTJ.deviceType; } else { cardNum = cardNo(studentNum); } + if(attendanceBean.getClint_id().startsWith("ytj")){ + deviceType= EnumDeviceType.DH_FACE_YTJ.deviceType; + sendRecordBean.setDeviceType(deviceType); + } try{ /** * recordNo 不为空存在下发记录集编号,直接修改执行人脸信息(二代升级接口,此处不需要修改用户信息) @@ -294,9 +300,9 @@ public class SendUserInfoTask2 { userDao.saveRecordNo(userId,1, userName, attendanceBean.getClint_id()); } } - } catch (Exception e) { - log.error("下发异常:异常错误信息msg: {}",e.getMessage()); - return; + } catch (RuntimeException e) { + log.error("下发异常:异常错误信息msg: {}",e); + continue; } /** * 人脸和卡都下发成功 @@ -304,21 +310,8 @@ public class SendUserInfoTask2 { if (bUserFlags ==0 && bCardFlags ==0 && bFaceFalgs==0) { FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean)); - - //人脸下发成功记录, 先判断是否已经存在了 - List sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(sendRecordBean.getDeviceID(), String.valueOf(sendRecordBean.getSchoolId()), sendRecordBean.getNum()); - if (sendRecordBeanList.size() > 0) { - //删除重复数据 - for (int i = 0; i < sendRecordBeanList.size(); i++) { - sendRecordDao.deleteFaceSuccess(sendRecordBeanList.get(i).getDeviceID(), sendRecordBeanList.get(i).getNum()); - } - } - //重新添加人脸下发记录 - sendRecordDao.addFaceSuccess(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(), - sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getUserType(), deviceType); - - //删除之前失败记录 - sendRecordDao.deleteFaceFail(sendRecordBean.getNum(), sendRecordBean.getDeviceID()); + //保存成功记录 + baseService.sendSuccessRecord(sendRecordBean); } /** * 人脸和卡都下发失败 @@ -330,8 +323,7 @@ public class SendUserInfoTask2 { String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code); sendRecordBean.setFailContent(failContent); - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_AND_CARD_FAIL.code); - addFailDace(sendRecordBean); + baseService.sendFailRecord(sendRecordBean); } /** * 下发卡号成功,下发人脸失败, @@ -343,8 +335,7 @@ public class SendUserInfoTask2 { String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); sendRecordBean.setFailType(EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code); sendRecordBean.setFailContent(failContent); - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code); - addFailDace(sendRecordBean); + baseService.sendFailRecord(sendRecordBean); } /** * 下发卡号失败,下发人脸成功, @@ -355,8 +346,7 @@ public class SendUserInfoTask2 { String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); sendRecordBean.setFailType(EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code); sendRecordBean.setFailContent(failContent); - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code); - addFailDace(sendRecordBean); + baseService.sendFailRecord(sendRecordBean); } } } @@ -398,6 +388,40 @@ public class SendUserInfoTask2 { } /** + * 获取学生时段类型2.0 + * @param schoolId + * @param studentType + * @param deviceId + * @return + */ + private String analysisAuthChannel(Integer schoolId,Integer studentType,String deviceId){ + if(StringUtils.isEmpty(studentType) || StringUtils.isEmpty(schoolId)){ + return ""; + } + List authRecords = userDao.getAuthRecord(schoolId,studentType); + log.info("权限信息:"+ JsonUtils.nonDefaultMapper().toJson(authRecords)); + String channel =""; + if(authRecords.size()>0){ + for(DeviceAuthRecord authRecord : authRecords){ + String deviceIds = authRecord.getSno(); + //学生考勤类型 1:通校生,2:住校生,3:全部 + Integer sType = authRecord.getStudentType(); + log.info("学生类型:{},设备ID:{}",sType,deviceId); + if(deviceIds.indexOf(deviceId)!=-1 && (studentType.intValue() == sType.intValue() || sType.intValue() == 3)){ + channel= authRecord.getShiduan(); + log.info("通道号:"+channel); + } + } + if(StringUtils.isEmpty(channel)){ + log.warn("未获取到学校权限通道号!"); + return ""; + } + return channel; + } + return channel; + } + + /** * 解析下发异常信息 * @param userErrNum * @param faceErrNum @@ -479,9 +503,157 @@ public class SendUserInfoTask2 { length -= 2; cardR += cardDex.substring(length, length + 2); } - return cardR; + } + + /** + * 清空人脸 + * @param deviceId + */ + public boolean clearAllFace(Integer schoolId, String deviceId) { + if(StringUtils.isEmpty(schoolId)){ + log.error("清空人脸时,学校ID不能为空"); + return false; + } + List attendanceBeanList = userDao.queryClintList(schoolId,deviceId); + if(attendanceBeanList.size()>0){ + for(AttendanceBean bean : attendanceBeanList){ + deviceId = bean.getClint_id(); + GateModule2.clearUser(MyTask.lLongSendMap.get(deviceId)); + } + return true; + } + return false; } + /** + * 删除失败人脸 + * @param schoolId + * @return + */ + public boolean deleteFailFace(Integer schoolId) { + if(StringUtils.isEmpty(schoolId)){ + log.error("删除人脸时,学校ID不能为空"); + return false; + } + List recordBeanList = sendRecordDao.getFailRecord(schoolId); + if(recordBeanList.size()>0){ + for(SendRecordBean recordBean : recordBeanList){ + String deviceId = recordBean.getDeviceID(); + //下操作记录集 + String recordNo = userDao.getRecordNo(recordBean.getUserId(), deviceId); + if(StringUtils.isEmpty(recordNo)){ + log.info("删除人脸时,该用户卡号未添加过人脸"); + } + if(GateModule2.deleteUser(recordBean.getUserId(),MyTask.lLongSendMap.get(deviceId)) ==0){ + userDao.deleteRecordNoTest(recordBean.getUserId(),deviceId); + } + } + return true; + } + return false; + } + + /** + * 下发失败人脸 + * @param schoolId + * @return + */ + public boolean sendFailFace(Integer schoolId) { + if(StringUtils.isEmpty(schoolId)){ + log.error("下发人脸时,学校ID不能为空"); + return false; + } + List recordBeanList = sendRecordDao.getFailRecord(schoolId); + if(recordBeanList.size()>0){ + for(SendRecordBean recordBean : recordBeanList){ + int userType = recordBean.getUserType(); + String deviceId = recordBean.getDeviceID(); + String clintType = userDao.getClintType(deviceId); + StudentBean studentBean= null; + String typeName =""; + if(userType ==1){ + typeName= "Teacher"; + studentBean = userDao.getTeacherWithCard(recordBean.getNum()); + }else{ + typeName= "Student"; + studentBean= userDao.getStudentWithCard(recordBean.getNum()); + } + if(studentBean==null){ + continue; + } + //100服务器文件目录绝对路径 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; + String photo= userType==1?studentBean.getFace():studentBean.getPhoto(); + //学籍号 + String studentCode=userType==1?studentBean.getNum():studentBean.getStudentcode(); + if (StringUtils.isEmpty(photo) || StringUtils.isEmpty(studentCode)){ + continue; + } + String filePath=""; + if(photo.indexOf("f0i5l7e5")!=-1){ + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\"); + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr; + } else{ + //以学籍号为名的文件名 + String fileName = photo.split(typeName +"/")[1]; + //100服务器上人脸照绝对路径 + filePath = path+ "\\" + fileName; + } + try{ + HttpUtils.uploadImgs(new File(filePath), String.valueOf(schoolId),studentCode, clintType, userType,deviceId); + }catch (Exception e){ + e.printStackTrace(); + continue; + } + } + return true; + } + return false; + } + + /** + * 根据卡号下发失败人脸 + * @param schoolId + * @param cardNum + * @param deviceId + * @return + */ + public boolean deleteFaceByCard(Integer schoolId,String cardNum,String deviceId) { + if(StringUtils.isEmpty(schoolId) && StringUtils.isEmpty(cardNum) && StringUtils.isEmpty(deviceId)){ + log.error("删除人脸时,学校ID、卡号、设备ID不能为空."); + return false; + } + if(MyTask.lLongSendMap.get(deviceId) ==null){ + log.error("设备不在线"); + return false; + } + StudentBean studentBean = userDao.getStudentWithCard(cardNum); + if(studentBean == null){ + log.error("此卡号:{},未查询到相应学生信息。",cardNum); + return false; + } + String userId = userDao.getUerIdWithNumTest(cardNum,schoolId); + if(StringUtils.isEmpty(userId)){ + log.error("删除人脸时,用户卡号不存在。"); + return false; + } + List attendanceBeanList = userDao.queryClintList(schoolId,deviceId); + if(attendanceBeanList.size()>0){ + for(AttendanceBean bean : attendanceBeanList){ + deviceId = bean.getClint_id(); + //下操作记录集 + String recordNo = userDao.getRecordNo(userId, deviceId); + if(StringUtils.isEmpty(recordNo)){ + log.info("删除人脸时,该用户卡号未添加过人脸"); + } + if(GateModule2.deleteUser(userId,MyTask.lLongSendMap.get(deviceId)) ==0){ + userDao.deleteRecordNoTest(userId,deviceId); + } + } + return true; + } + return false; + } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/DeviceAuthRecord.java b/cloud/dahua/src/main/java/com/example/dahua/bean/DeviceAuthRecord.java new file mode 100644 index 0000000..f9f4cf9 --- /dev/null +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/DeviceAuthRecord.java @@ -0,0 +1,140 @@ +package com.example.dahua.bean; + +import java.util.Date; + +/** + * 下发权限时段实体类 + * @author xuquan + * @date 2020/12/17 12:40 + */ +public class DeviceAuthRecord { + + private int id; + //时段 + private String shiduan ; + //学生组 就是powerGroupId 学生类型就是 studentType + private int studentType ; + //性别 + private String sex ; + //学校ID + private int schoolId ; + //开始时间 + private Date startTime ; + //结束时间 + private Date endTime ; + //设备ID + private String sno ; + //周计划json + private String weekDays; + //状态 + private int state; + //下发状态 + private int grantState; + //权限类型 + private int authType; + //计划类型 + private int aType; + + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + + public String getShiduan() { + return shiduan; + } + + public void setShiduan(String shiduan) { + this.shiduan = shiduan; + } + + public int getAuthType() { + return authType; + } + + public void setAuthType(int authType) { + this.authType = authType; + } + + public String getSno() { + return sno; + } + + public void setSno(String sno) { + this.sno = sno; + } + + public int getStudentType() { + return studentType; + } + + public void setStudentType(int studentType) { + this.studentType = studentType; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public int getSchoolId() { + return schoolId; + } + + public void setSchoolId(int schoolId) { + this.schoolId = schoolId; + } + + public Date getStartTime() { + return startTime; + } + + public void setStartTime(Date startTime) { + this.startTime = startTime; + } + + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + } + + public String getWeekDays() { + return weekDays; + } + + public void setWeekDays(String weekDays) { + this.weekDays = weekDays; + } + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public int getGrantState() { + return grantState; + } + + public void setGrantState(int grantState) { + this.grantState = grantState; + } + + public int getaType() { + return aType; + } + + public void setaType(int aType) { + this.aType = aType; + } +} diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/SendFaceDto.java b/cloud/dahua/src/main/java/com/example/dahua/bean/SendFaceDto.java new file mode 100644 index 0000000..5186d4e --- /dev/null +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/SendFaceDto.java @@ -0,0 +1,64 @@ +package com.example.dahua.bean; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 照片下发人脸实体类 + * @author xuquan + * @date 2020/12/16 09:10 + */ +@ApiModel +public class SendFaceDto { + + @ApiModelProperty("0主卡1教师卡2副卡") + private Integer type ; + @ApiModelProperty("学校ID") + private Integer schoolId ; + @ApiModelProperty("设备号,逗号隔开") + private String sNos; + @ApiModelProperty("学生类型,1通校2住校;群组时,为群组号") + private Integer studentType; + @ApiModelProperty("性别:1男2女,多个逗号隔开") + private String sex; + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getSchoolId() { + return schoolId; + } + + public void setSchoolId(Integer schoolId) { + this.schoolId = schoolId; + } + + public String getsNos() { + return sNos; + } + + public void setsNos(String sNos) { + this.sNos = sNos; + } + + public Integer getStudentType() { + return studentType; + } + + public void setStudentType(Integer studentType) { + this.studentType = studentType; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } +} diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/SendRecordBean.java b/cloud/dahua/src/main/java/com/example/dahua/bean/SendRecordBean.java index 7634253..0ff2a5b 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/bean/SendRecordBean.java +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/SendRecordBean.java @@ -7,6 +7,7 @@ import java.io.Serializable; */ public class SendRecordBean implements Serializable { + private Integer id; //用户编号:学生student_id;老师teacher_id private String customerid; //卡号 @@ -29,7 +30,26 @@ public class SendRecordBean implements Serializable { private String failContent; //下发失败类型:详情见枚举:EnumSendFaceType private int failType; + //设备类型 + private int deviceType; + private String userId; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } public String getCustomerid() { return customerid; @@ -119,6 +139,14 @@ public class SendRecordBean implements Serializable { this.failType = failType; } + public int getDeviceType() { + return deviceType; + } + + public void setDeviceType(int deviceType) { + this.deviceType = deviceType; + } + @Override public String toString() { return "SendRecordBean{" + diff --git a/cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java b/cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java index 4db2885..f243bf1 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java +++ b/cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java @@ -47,6 +47,8 @@ public class StudentBean implements Serializable { private String Face; + private String photo; + // private String StudentCode; private String student_num; @@ -227,7 +229,14 @@ public class StudentBean implements Serializable { Face = face; } -// public String getStudentCode() { + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + // public String getStudentCode() { // return StudentCode; // } // diff --git a/cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java b/cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java index fe0033f..5d41759 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java +++ b/cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java @@ -1,125 +1,72 @@ -//package com.example.dahua.control; -// -//import com.example.dahua.MyTask; -//import com.example.dahua.async.SendUserInfoTask; -//import com.example.dahua.bean.PermissionBean; -//import com.example.dahua.bean.SendRecordBean; -//import com.example.dahua.bean.StudentBean; -//import com.example.dahua.dao.UserDao; -//import com.example.dahua.enums.EnumSzBusinessType; -//import com.example.dahua.lib.CompressPic; -//import com.example.dahua.service.UserOperateService; -//import com.example.dahua.service.UserService; -//import com.example.dahua.utils.BaiduUtils; -//import com.example.dahua.utils.FileUtils; -//import com.example.dahua.utils.HttpUtils; -//import com.example.dahua.xiananDao.SendRecordDao; -//import io.swagger.annotations.Api; -//import io.swagger.annotations.ApiImplicitParam; -//import io.swagger.annotations.ApiImplicitParams; -//import io.swagger.annotations.ApiOperation; -//import lombok.extern.slf4j.Slf4j; -//import org.json.JSONException; -//import org.json.JSONObject; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.http.MediaType; -//import org.springframework.util.StringUtils; -//import org.springframework.web.bind.annotation.*; -//import org.springframework.web.client.RestTemplate; -//import org.springframework.web.multipart.MultipartFile; -// -//import java.io.File; -//import java.io.FileNotFoundException; -//import java.io.FileOutputStream; -//import java.io.IOException; -//import java.util.List; -// -///** -// * 用户信息、人脸、卡信息、权限下发控制类 -// * @author xuquan -// * @date 2020/12/01 15:16 -// */ -//@Slf4j -//@RestController("/operate/") -//@Api(tags = "下发用户信息、人脸、卡、权限信息") -//@RequestMapping(value = "/operate/*", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) -//public class UserOperateController { -// -// @Autowired -// UserOperateService operateService; -// -// @Autowired -// SendUserInfoTask sendUserInfoTask; -// -// -// /** -// * 单个用户下发至设备 -// * @param schoolId -// * @param userId -// * @param clintType -// * @return -// */ -// @RequestMapping(value = "sendUser", method = RequestMethod.GET) -// @ApiOperation(value = "上传用户信息") -// public String sendUser(@RequestParam("file") MultipartFile file, @RequestParam("schoolId") String schoolId, @RequestParam("userId") String userId, -// @RequestParam("clintType") String clintType, @RequestParam("userType") int userType,@RequestParam("flag") int flag, -// @RequestParam(required = false) String deviceId) { -// //文件名 -// String fileName = file.getOriginalFilename(); -// //21服务器临时文件存储路径 -// File outFile = new File("C://imgCom"); -// if (!outFile.exists()) outFile.mkdirs(); -// try { -// File dest = new File(outFile, fileName); -// -// FileOutputStream fileOutputStream = new FileOutputStream(dest); -// fileOutputStream.write(file.getBytes()); -// fileOutputStream.close(); -// String filePath = dest.getAbsolutePath(); -// deviceId = StringUtils.isEmpty(deviceId)?"":deviceId; -// operateService.sendUserInfo(filePath, userType,schoolId,userId,deviceId, clintType,flag); -// return "1"; -// } catch (FileNotFoundException e) { -// e.printStackTrace(); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// return "0"; -// } -// -// -// /** -// * 大华枪机人脸库添加 -// * @param schoolId -// * @param userId -// * @param clintType -// * @return -// */ -// @RequestMapping(value = "addFaceData", method = RequestMethod.GET) -// @ApiOperation(value = "上传用户信息") -// public String sendUser(@RequestParam("file") MultipartFile file, @RequestParam("schoolId") String schoolId, @RequestParam("userId") String userId, -// @RequestParam("clintType") String clintType, @RequestParam("userType") int userType, @RequestParam(required = false) String deviceId) { -// //文件名 -// String fileName = file.getOriginalFilename(); -// //21服务器临时文件存储路径 -// File outFile = new File("C://imgCom"); -// if (!outFile.exists()) outFile.mkdirs(); -// try { -// File dest = new File(outFile, fileName); -// -// FileOutputStream fileOutputStream = new FileOutputStream(dest); -// fileOutputStream.write(file.getBytes()); -// fileOutputStream.close(); -// String filePath = dest.getAbsolutePath(); -// deviceId = StringUtils.isEmpty(deviceId)?"":deviceId; -// operateService.addFaceGroup(filePath, userType,schoolId,userId,deviceId, clintType); -// return "1"; -// } catch (FileNotFoundException e) { -// e.printStackTrace(); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// return "0"; -// } -// -//} +package com.example.dahua.control; + +import com.example.dahua.async.SendUserInfoTask2; +import com.example.dahua.bean.SendFaceDto; +import com.example.dahua.dao.UserDao; +import com.example.dahua.service.UserOperateService; +import com.example.dahua.utils.HttpUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +/** + * 用户信息、人脸、卡信息、权限下发控制类 + * @author xuquan + * @date 2020/12/01 15:16 + */ +@Slf4j +@RestController("/operate/") +@Api(tags = "大华设备操作接口") +@RequestMapping(value = "/operate/*", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) +public class UserOperateController { + + @Autowired + SendUserInfoTask2 sendUserInfoTask; + + @Autowired + UserDao userDao; + + @Autowired + UserOperateService userOperateService; + + @RequestMapping(value = "clearAllFace", method = RequestMethod.POST) + @ApiOperation(value = "21服务器清空指定学校,指定设备下所有人脸2.0") + public boolean clearAllFace(@RequestParam("schoolId") Integer schoolId, @RequestParam("deviceId") String deviceId) { + return sendUserInfoTask.clearAllFace(schoolId,deviceId); + } + + @RequestMapping(value = "sendUserFaces", method = RequestMethod.POST) + @ApiOperation(value = "100服务器下发学校下所有人脸给指定设备2.0") + public void sendUserFaces(@RequestBody SendFaceDto sendFaceDto) { + userOperateService.sendUserFaces(sendFaceDto); + } + + @RequestMapping(value = "deleteFailFace100", method = RequestMethod.POST) + @ApiOperation(value = "100服务器删除失败人脸2.0") + public boolean deleteFailFace100(@RequestParam("schoolId") Integer schoolId) { + HttpUtils.deleteFace(schoolId); + return true; + } + + @RequestMapping(value = "sendFailFace", method = RequestMethod.POST) + @ApiOperation(value = "100服务器下发失败人脸2.0") + public boolean sendFailFace(@RequestParam("schoolId") Integer schoolId) { + return sendUserInfoTask.sendFailFace(schoolId); + } + + @RequestMapping(value = "deleteFailFace", method = RequestMethod.GET) + @ApiOperation(value = "21服务器删除失败人脸2.0") + public boolean deleteFailFace(Integer schoolId) { + return sendUserInfoTask.deleteFailFace(schoolId); + } + + @RequestMapping(value = "deleteFaceByCard", method = RequestMethod.GET) + @ApiOperation(value = "21服务器根据卡号删除人脸") + public boolean deleteFaceByCard(Integer schoolId,String cardNum,String deviceId) { + return sendUserInfoTask.deleteFaceByCard(schoolId,cardNum,deviceId); + } + +} 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 ae795e3..1ec61ee 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 @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Map; @Repository @Mapper @@ -240,7 +241,7 @@ public interface UserDao { List getRecordNoTest(@Param("student_name") String name,@Param("user_id") String user_id,@Param("deviceId") String deviceId); @Select("select Top(1) user_id from SZ_V_School_Student where student_num = #{student_num} and school_id = #{school_id}") - String getUerIdWithNumTest(@Param("student_num") String student_num,@Param("school_id") String schoolId); + String getUerIdWithNumTest(@Param("student_num") String student_num,@Param("school_id") Integer schoolId); @Select("select * from SZ_V_School_Student where school_id = #{school_id}") List getUserIdTest(@Param("school_id") String schoolId); @@ -250,4 +251,19 @@ public interface UserDao { /*************************************** 仅供测试,下发失败使用接口 end ************************************/ + + @Select("select Top(1)* from SZ_V_School_Teacher where teacher_num = #{teacher_num}") + StudentBean getTeacherWithCard(@Param("teacher_num") String teacher_num); + + @Select("select Top(1)* from SZ_V_School_Student where student_num = #{card}") + StudentBean getStudentWithCard(@Param("card") String card); + + List getStudentList(@Param("schoolId") Integer schoolId,@Param("studentType")Integer studentType,@Param("sex") List sex); + + List getTeacherList(@Param("schoolId") Integer schoolId); + + List getAuthRecord(@Param("schoolId") Integer schoolId,@Param("studentType")Integer studentType); + + List queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId); + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/filter/AllowOriginFilter.java b/cloud/dahua/src/main/java/com/example/dahua/filter/AllowOriginFilter.java index b8bf091..53682f3 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/filter/AllowOriginFilter.java +++ b/cloud/dahua/src/main/java/com/example/dahua/filter/AllowOriginFilter.java @@ -9,9 +9,6 @@ import java.io.IOException; /** * 用于解决跨域问题 - * @author chen - * @version 1.0 - * @date 2019/10/11 0011 10:17 */ @Component @WebFilter(urlPatterns = "/*", filterName = "authFilter") diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java index d650205..606fe6b 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java @@ -409,7 +409,6 @@ public class GateModule { */ public static void setAccessTimeSchedule(LLong lLong, PermissionBean permissionBean) { try { - CFG_ACCESS_TIMESCHEDULE_INFO msg = new CFG_ACCESS_TIMESCHEDULE_INFO(); String strCmd = NetSDKLib.CFG_CMD_ACCESSTIMESCHEDULE; // 通道号 @@ -450,52 +449,13 @@ public class GateModule { } } - - - /* for (WeekDay weekDay : - weekDays) { - List weekTimes = weekDay.getWeekTimes(); - for (int i = 0; i < weekTimes.size(); i++) { - WeekTime weekTime = weekTimes.get(i); - String startTime = weekTime.getStartTime(); - String endTime = weekTime.getEndTime(); - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nBeginHour = Integer.parseInt(startTime.split(":")[0]); - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nBeginMin = Integer.parseInt(startTime.split(":")[1]); - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nBeginSec = 0; - - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nEndHour = Integer.parseInt(endTime.split(":")[0]); - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nEndMin = Integer.parseInt(endTime.split(":")[1]); - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nEndSec = 0; - - } - }*/ - -// 获取 -// if (ToolKits.GetDevConfig(lLong, nChannel, strCmd, msg)) { -// System.out.println("Enable:" + msg.bEnable); -// try { -// System.out.println("自定义名称:" + new String(msg.szName, "UTF-8").trim()); -// } catch (UnsupportedEncodingException e) { -// e.printStackTrace(); -// } -// for (int i = 0; i < 7; i++) { -// for (int j = 0; j < 4; j++) { -// System.out.println("dwRecordMask:" + msg.stuTimeWeekDay[i].stuTimeSection[j].dwRecordMask); -// System.out.println(msg.stuTimeWeekDay[i].stuTimeSection[j].startTime() + "-" + msg.stuTimeWeekDay[i].stuTimeSection[j].endTime() + "\n"); -// } -// } -// msg.write(); boolean set = ToolKits.SetDevConfig(lLong, nChannel, strCmd, msg); -// msg.read(); // 设置 if (set) { System.out.println("Set AccessTimeSchedule Succeed!"); } else { System.err.println("Set AccessTimeSchedule Failed!" + ToolKits.getErrorCodePrint()); } -// } else { -// System.err.println("Get AccessTimeSchedule Failed!" + ToolKits.getErrorCodePrint()); -// } } catch (Exception e) { e.printStackTrace(); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule2.java b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule2.java index c011d50..3284c16 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/module/GateModule2.java +++ b/cloud/dahua/src/main/java/com/example/dahua/module/GateModule2.java @@ -267,11 +267,10 @@ public class GateModule2 { /** * 清空所有用户 */ - public static void clearUser(LLong lLong) { + public static boolean clearUser(LLong lLong) { // 用户操作类型 // 清空用户 int emtype = NET_EM_ACCESS_CTL_USER_SERVICE.NET_EM_ACCESS_CTL_USER_SERVICE_CLEAR; - /** * 入参 */ @@ -289,8 +288,10 @@ public class GateModule2 { boolean result = netsdk.CLIENT_OperateAccessUserService(lLong, emtype, stIn.getPointer(), stOut.getPointer(), TIME_OUT); if (result) { log.info("清空用户成功!"); + return true; } else { log.error("清空用户失败!"); + return false; } } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java b/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java index 6db5399..26c6e45 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java @@ -19,6 +19,6 @@ public interface AttendanceService { */ int updateConnectState(int isConnection, String ip, String port); - int updateConnectStateWithDevid(int isConnection, String clint_id); + int updateConnectStateWithDevid(int isConnection, String inTime, String clint_id); } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/DeleteBatchTest.java b/cloud/dahua/src/main/java/com/example/dahua/service/DeleteBatchTest.java index 067d512..708742f 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/DeleteBatchTest.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/DeleteBatchTest.java @@ -12,4 +12,7 @@ public interface DeleteBatchTest { void test(String schoolId); void test2(String schoolId); void test3(String schoolId); + + void test4(Integer schoolId,Integer studentType,String sex); + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java b/cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java index ec1ac66..70ac1ec 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java @@ -1,13 +1,18 @@ -//package com.example.dahua.service; -// -///** -// * 下发用户信息、人脸、卡、权限接口 -// * @author xuquan -// * @date 2020/12/1 11:08 -// */ -//public interface UserOperateService { -// -// void sendUserInfo(String file,int userType,String schoolId,String userId,String deviceId,String deviceType,int flag); -// -// void addFaceGroup(String file,int userType,String schoolId,String userId,String deviceId,String deviceType); -//} +package com.example.dahua.service; + +import com.example.dahua.bean.SendFaceDto; + +/** + * 下发用户信息、人脸、卡、权限接口 + * @author xuquan + * @date 2020/12/1 11:08 + */ +public interface UserOperateService { + + /** + * 照片下发 + * @param sendFaceDto + */ + void sendUserFaces(SendFaceDto sendFaceDto); + +} diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/imp/AttendanceImp.java b/cloud/dahua/src/main/java/com/example/dahua/service/imp/AttendanceImp.java index 9837583..58347f8 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/imp/AttendanceImp.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/imp/AttendanceImp.java @@ -24,7 +24,7 @@ public class AttendanceImp implements AttendanceService { String insertSql = String.format("insert into SZ_Attendance(clint_id, clint_type, ip, port, intime, school_id, state,isConnection) values ('%s','%s','%s','%s','%s','%s','%s','%s')", clint_id, clint_type, ip, port, intime, school_id, state, 1); return jdbcTemplate.update(insertSql); } else {//设备 已经存在,更新在线状态 - updateConnectStateWithDevid(1, clint_id); + updateConnectStateWithDevid(1,intime, clint_id); } } catch (Exception e) { e.printStackTrace(); @@ -54,10 +54,10 @@ public class AttendanceImp implements AttendanceService { } @Override - public int updateConnectStateWithDevid(int isConnection, String clint_id) { + public int updateConnectStateWithDevid(int isConnection,String inTime, String clint_id) { int index = 0; try { - String updateSql = String.format(" update SZ_Attendance set isConnection = %d where clint_id = '%s' ", isConnection, clint_id); + String updateSql = String.format(" update SZ_Attendance set isConnection = %d,inTime='%s' where clint_id = '%s' ", isConnection,inTime,clint_id); index = jdbcTemplate.update(updateSql); // System.out.println("updateIndex:"+index+" isConnection:"+isConnection+"updateSql:"+updateSql); } catch (Exception e) { diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java b/cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java new file mode 100644 index 0000000..e2c3d02 --- /dev/null +++ b/cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java @@ -0,0 +1,133 @@ +package com.example.dahua.service.imp; + + +import com.example.dahua.bean.SendRecordBean; +import com.example.dahua.bean.StudentBean; +import com.example.dahua.dao.UserDao; +import com.example.dahua.xiananDao.SendRecordDao; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 业务基础类 + * @author xuquan + * @date 2020/12/23 10:16 + */ +@Slf4j +@Service +public class BaseService { + + @Autowired + private SendRecordDao sendRecordDao; + + @Autowired + private UserDao userDao; + + /** + * 获取学校下学生数据 + * @param schoolId + * @param studentType + * @param sex + * @return + */ + public List getStudentList(Integer schoolId, Integer studentType, String sex) { + List list = new ArrayList<>(); + if(!StringUtils.isEmpty(sex)){ + String[] msg = sex.split(","); + for(String s : msg){ + list.add(Integer.valueOf(s)); + } + } + List students = userDao.getStudentList(schoolId,studentType, list); + //去重重复数据 + List studentList = students.stream().collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new)); + return studentList; + } + + /** + * 获取学校下老师数据 + * @param schoolId + * @return + */ + public List getTeacherList(Integer schoolId) { + List teachers = userDao.getTeacherList(schoolId); + //去重重复数据 + List teacherist = teachers.stream().collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getTeacher_num))), ArrayList::new)); + return teacherist; + } + + /** + * 保存成功下发记录 + */ + public synchronized void sendSuccessRecord(SendRecordBean recordBean) { + try{ + String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + Integer schoolId = recordBean.getSchoolId(); + String deviceId = recordBean.getDeviceID(); + String resultCard = recordBean.getNum(); + String userId= recordBean.getUserId(); + String schoolName = recordBean.getSchoolName(); + String userName = recordBean.getName(); + String faceUrl = recordBean.getImgPath(); + Integer userType = recordBean.getUserType(); + Integer deviceType = recordBean.getDeviceType(); + List sendRecordBeans = sendRecordDao.getRecordIsExit(schoolId,deviceId,resultCard,userId); + SendRecordBean sendRecordBean =null; + if(sendRecordBeans.size()>0){ + sendRecordBean = sendRecordBeans.get(0); + } + if (null == sendRecordBean) { + sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName, + faceUrl, schoolId,null,null, userType,deviceType,1); + } else { + sendRecordDao.updateFaceSuccessRecord(deviceId, resultCard, time, faceUrl, userName, userId); + } + }catch (Exception e){ + log.error("保存成功记录失败。"); + return; + } + } + + + /** + * 保存下发失败记录 + */ + public synchronized void sendFailRecord(SendRecordBean recordBean) { + try{ + String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + Integer schoolId = recordBean.getSchoolId(); + String deviceId = recordBean.getDeviceID(); + String resultCard = recordBean.getNum(); + String userId= recordBean.getUserId(); + String schoolName = recordBean.getSchoolName(); + String userName = recordBean.getName(); + String faceUrl = recordBean.getImgPath(); + Integer userType = recordBean.getUserType(); + Integer failType = recordBean.getFailType(); + String failContent = recordBean.getFailContent(); + Integer deviceType = recordBean.getDeviceType(); + List sendRecordBeans = sendRecordDao.getRecordIsExit(schoolId,deviceId,resultCard,userId); + SendRecordBean sendRecordBean =null; + if(sendRecordBeans.size()>0){ + sendRecordBean = sendRecordBeans.get(0); + } + if (null == sendRecordBean) { + sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName, + faceUrl, schoolId,failContent,failType, userType,deviceType,2); + }else { + sendRecordDao.updateFaceFailRecord(deviceId,faceUrl,resultCard,time,failContent,userId); + } + }catch (Exception e){ + log.error("保存失败记录失败。"); + return; + } + } +} diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/imp/DeleteBatchTestImpl.java b/cloud/dahua/src/main/java/com/example/dahua/service/imp/DeleteBatchTestImpl.java index 5e94754..568edec 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/imp/DeleteBatchTestImpl.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/imp/DeleteBatchTestImpl.java @@ -1,6 +1,7 @@ package com.example.dahua.service.imp; import com.example.dahua.bean.SendRecordBean; +import com.example.dahua.bean.StudentBean; import com.example.dahua.bean.UserInfoBean; import com.example.dahua.dao.UserDao; import com.example.dahua.service.DeleteBatchTest; @@ -8,8 +9,10 @@ import com.example.dahua.xiananDao.SendRecordDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * TODO @@ -25,6 +28,9 @@ public class DeleteBatchTestImpl implements DeleteBatchTest { private UserDao userDao; @Autowired private SendRecordDao sendRecordDao; + @Autowired + private BaseService baseService; + @Override public void test(String schoolId) { @@ -39,7 +45,7 @@ public class DeleteBatchTestImpl implements DeleteBatchTest { if(sendRecords.size()>0){ sendRecordDao.deleteFaceFailTest(s.getDeviceID(),s.getNum(),String.valueOf(s.getSchoolId())); //获取用户iD - String userId = userDao.getUerIdWithNumTest(s.getNum(),String.valueOf(s.getSchoolId())); + String userId = userDao.getUerIdWithNumTest(s.getNum(),s.getSchoolId()); //获取记录集编号 List recordNos = userDao.getRecordNoTest(s.getName(),userId,s.getDeviceID()); if(recordNos.size()>0){ @@ -62,7 +68,7 @@ public class DeleteBatchTestImpl implements DeleteBatchTest { int i = 0; for(SendRecordBean s : sendRecordBeanList){ //获取用户iD - String userId = userDao.getUerIdWithNumTest(s.getNum(),String.valueOf(s.getSchoolId())); + String userId = userDao.getUerIdWithNumTest(s.getNum(),s.getSchoolId()); //获取记录集编号 List recordNos = userDao.getRecordNoTest(s.getName(),userId,s.getDeviceID()); if(recordNos.size()>0){ @@ -92,4 +98,31 @@ public class DeleteBatchTestImpl implements DeleteBatchTest { } } + @Override + public void test4(Integer schoolId,Integer studentType,String sex) { + String str = "949252605603,949252365603,949251825603,949252545603,949252345603,949252245603,949252185603,949252085603,949252285603,949252725603,949252305603,949252065603,949251885603,949252525603,949251945603,949252625603,949251985603,949252505603"; + String[] deviceArr = str.split(","); + List deviceList= new ArrayList<>(Arrays.asList(deviceArr)); + List lists = baseService.getStudentList(schoolId, studentType, sex); + if(lists.size() >0){ + System.out.println("总数 :"+lists.size()); +// int i = 0; +// for(StudentBean studentBean : lists){ +// String cardNum = studentBean.getStudent_num(); +// String userId = studentBean.getUser_id(); +// for (String sno : deviceList){ +// List sendRecordBeans = sendRecordDao.getRecordIsExit(schoolId,sno,cardNum,userId); +// SendRecordBean sendRecordBean =null; +// if(sendRecordBeans.size()>0){ +// System.out.println("进行删除:"+i); +// sendRecordBean = sendRecordBeans.get(0); +// sendRecordDao.deleteRecord(sendRecordBean.getId()); +// } +// } +// i++; +// } + System.out.println("完成"); + } + } + } diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java b/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java index b92542f..cd8186a 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java @@ -1,481 +1,115 @@ -//package com.example.dahua.service.imp; -// -//import com.example.dahua.MyTask; -//import com.example.dahua.bean.*; -//import com.example.dahua.dao.UserDao; -//import com.example.dahua.enums.EnumDeviceType; -//import com.example.dahua.enums.EnumSendFaceType; -//import com.example.dahua.enums.EnumSzBusinessType; -//import com.example.dahua.lib.CompressPic; -//import com.example.dahua.lib.FilePath; -//import com.example.dahua.lib.NetSDKLib; -//import com.example.dahua.module.GateModule2; -//import com.example.dahua.service.PermissFaceService; -//import com.example.dahua.service.UserOperateService; -//import com.example.dahua.service.UserService; -//import com.example.dahua.utils.DateFormatUtil; -//import com.example.dahua.utils.FileUtils; -//import com.example.dahua.utils.JsonUtils; -//import com.example.dahua.xiananDao.SendRecordDao; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Service; -//import org.springframework.util.StringUtils; -// -//import java.util.Date; -//import java.util.List; -// -///** -// * 下发用户信息、人脸、卡、权限接口实现类 -// * @author xuquan -// * @date 2020/12/1 11:12 -// */ -//@Slf4j -//@Service -//public class UserOperateServiceImpl implements UserOperateService { -// -// @Autowired -// private UserDao userDao; -// @Autowired -// private SendRecordDao sendRecordDao; -// @Autowired -// private UserService userService; -// @Autowired -// PermissFaceService permissFaceService; -// -// private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper(); -// -// @Override -// public void sendUserInfo(String filePath,int userType,String schoolId,String userId,String deviceId,String deviceType,int flag) { -// String schoolName= userDao.getSchoolName(schoolId); -// if(StringUtils.isEmpty(schoolName)){ -// log.info("下发用户失败,学校ID: {},未查询到对应学校.",schoolId); -// return; -// } -// //获取学生信息 -// UserInfoBean userInfoBean = null; -// if (userType == EnumSzBusinessType.EnumUserType.STUDENT.code) { -// userInfoBean = userDao.getUserInfoByUserId(schoolId,userId); -// if(null == userInfoBean){ -// log.info("下发学生信息失败,学校ID: {},用户ID: {},未查询到对应学生.",schoolId,userId); -// return; -// } -// } -// //获取老师信息 -// if (userType == EnumSzBusinessType.EnumUserType.TEACHER.code){ -// TeacherBean teacher = userDao.getTeacherByUserId(schoolId,userId); -// if (null == teacher) { -// log.info("下发教师信息失败,学校ID: {},用户ID: {},未查询到对应教师.",schoolId,userId); -// return; -// } -// userInfoBean.setStudent_num(teacher.getTeacher_num()); -// userInfoBean.setName(teacher.getName()); -// userInfoBean.setUser_id(teacher.getUser_id()); -// userInfoBean.setStudentcode(teacher.getNum()); -// userInfoBean.setStudent_id(teacher.getTeacher_id()); -// userInfoBean.setSchool_id(teacher.getSchool_id()); -// } -// //如果未传指定设备ID,则获取学校下所有设备进行下发 -// List attendanceBeans = userService.getAttendanceBeans(schoolId, String.valueOf(deviceType), deviceId); -// if(attendanceBeans.size()<1){ -// log.info("下发用户信息失败,学校ID: {},设备类型:{},未查询到对应设备.",schoolId,deviceType); -// return; -// } -// //下发用户 -// sendUser(filePath,attendanceBeans,userInfoBean,userType,Integer.parseInt(deviceType),flag); -// } -// -// -// /** -// * 下发用户 -// * @param filePath -// * @param attendanceBeans -// * @param userInfoBean -// * @param userType -// * @param deviceType -// * @param flag -// */ -// private void sendUser(String filePath,List attendanceBeans,UserInfoBean userInfoBean,int userType,int deviceType,int flag){ -// String facePath = compressPic(filePath,userInfoBean.getStudentcode()); -// if(StringUtils.isEmpty(facePath)){ -// log.warn("压缩后图片路径为空!"); -// return; -// } -// //下发至所有设备 -// for (AttendanceBean attendanceBean : attendanceBeans) { -// //下发用户有效期 -// String startTime = DateFormatUtil.dateFormatString(new Date(), "yyyy-MM-dd HH:mm:ss"); -// Date endDate = DateFormatUtil.getDateByYearLength(4, new Date()); -// String endTime = DateFormatUtil.dateFormatString(endDate, "yyyy-MM-dd HH:mm:ss"); -// //学校 -// String schoolId = attendanceBean.getSchool_id(); -// String schoolName = userDao.getSchoolName(schoolId); -// //用户ID -// String userId = userInfoBean.getUser_id(); -// //学生ID,老师ID -// String studentId = userInfoBean.getStudent_id(); -// //设备ID -// String deviceId = attendanceBean.getClint_id(); -// //学生姓名 -// String userName = userInfoBean.getName(); -// //卡号 -// String studentNum = userInfoBean.getStudent_num(); -// if(flag == EnumSzBusinessType.EnumSendType.TWO.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){ -// if(StringUtils.isEmpty(studentNum)){ -// log.error("下发失败, 用户卡号不存在。"); -// return; -// } -// } -// //通道号 -// String channel =""; -// if (userType == EnumSzBusinessType.EnumUserType.STUDENT.code){ -// //根据学生ID\学校ID获取学生类型 -// String studentType = userDao.getStudentType(schoolId, studentId); -// channel = analysisPermission(Integer.parseInt(schoolId), studentType); -// } -// -// //登录设备 -// NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(attendanceBean.getClint_id()); -// //若设备不在线时,且人脸下发失败表中存在记录,则执行修改下发失败状态为:设备不在线 -// if (loginHandleLong == null) { -// log.info(", 设备ID: {},设备不在线", attendanceBean.getClint_id()); -// FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices); -// //设备不在线 -// int failType = EnumSendFaceType.NOT_ONLINE_DEVICE.code; -// String failContent = EnumSendFaceType.NOT_ONLINE_DEVICE.message; -// saveSendFailRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,failType,failContent,deviceId,deviceType); -// } else { -// log.info("=================开始执行下发人脸及卡号任务================="); -// /** -// * 下发升级二代接口,动态库libs下win64,更新为官方最新版sdk -// * 注:用户下发方案: -// * flag=1:用户+人脸 flag=2:用户+卡号;flag=3:用户+人脸+卡号 -// * 新增: 用户信息和卡信息,一同下发, 人脸单独下发;返回信息 0 为成功,其他为相应错误码 参考:NET_EM_FAILCODE -// * 修改: 同上 -// * 复用一代接口字段recordNo,新增时为默认添加,修改时,查询表字段不为空,则表示此用户以存在设备中。则进行修改 -// */ -// //人脸操作错误号:0为成功,其他为相应错误号 -// int bFaceFalgs = -1; -// //用户操作错误号:0为成功,其他为相应错误号 -// int bUserFlags = -1; -// //卡操作错误号 :0为成功,其他为相应错误号 -// int bCardFlags = -1; -// //获取记录集编号 -// String recordNo = userDao.getRecordNo(userId, deviceId); -// String cardNum =""; -// if (attendanceBean.getClint_id().startsWith("ytj") && Integer.parseInt(attendanceBean.getSchool_id()) != 126 -// && Integer.parseInt(attendanceBean.getSchool_id()) != 393) { -// cardNum = studentNum; -// deviceType = EnumDeviceType.DH_FACE_YTJ.deviceType; -// } else { -// //卡号取反 -// cardNum = cardNo(studentNum); -// } -// try { -// /** -// * recordNo 不为空存在下发记录集编号,直接修改执行人脸信息(二代升级接口,此处不需要修改用户信息) -// */ -// if (!StringUtils.isEmpty(recordNo)) { -// //修改用户信息 -// bUserFlags = GateModule2.addUser(userId,userName,userType,"123456",channel,startTime,endTime,loginHandleLong); -// if(flag == EnumSzBusinessType.EnumSendType.TWO.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){ -// //修改卡 -// bCardFlags = GateModule2.modifyCard(userId,cardNum,loginHandleLong); -// } -// if(flag == EnumSzBusinessType.EnumSendType.ONE.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){ -// //修改人脸 -// bFaceFalgs = GateModule2.modifyFace(userId,facePath,loginHandleLong); -// } -// if(bFaceFalgs != 0 ){ -// //未知错误、对返回数据校验出错,执行删除用户,重新下发 -// if(bFaceFalgs == EnumSzBusinessType.EnumOperateErrorType.ONE.code || bFaceFalgs == EnumSzBusinessType.EnumOperateErrorType.ERR_21.code){ -// if(GateModule2.deleteUser(userId,loginHandleLong) == 0){ -// bUserFlags = GateModule2.addUser(userId,userName,userType,"123456",channel,startTime,endTime,loginHandleLong); -// if(flag == EnumSzBusinessType.EnumSendType.TWO.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){ -// //新增卡 -// bCardFlags = GateModule2.addCard(userId,cardNum,loginHandleLong); -// } -// if(flag == EnumSzBusinessType.EnumSendType.ONE.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){ -// //新增人脸 -// bFaceFalgs = GateModule2.addFace(userId,facePath,loginHandleLong); -// } -// -// } -// } -// } -// } else { -// if(flag == EnumSzBusinessType.EnumSendType.TWO.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){ -// //新增卡 -// bCardFlags = GateModule2.addCard(userId,cardNum,loginHandleLong); -// } -// if(flag == EnumSzBusinessType.EnumSendType.ONE.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){ -// //新增人脸 -// bFaceFalgs = GateModule2.addFace(userId,facePath,loginHandleLong); -// } -// //三种方式都下发成功,则新增记录集信息,默认为1 -// if ((bFaceFalgs ==0 && bUserFlags ==0)||(bCardFlags ==0 && bUserFlags ==0)||(bFaceFalgs ==0 && bUserFlags ==0 && bCardFlags ==0)) { -// userDao.saveRecordNo(userId,1, userName, deviceId); -// } -// } -// } catch (Exception e) { -// log.error("下发异常:异常错误信息msg: {}", e.getMessage()); -// continue; -// } -// /** -// * 人脸和卡都下发成功 -// */ -// if (bUserFlags ==0 && bFaceFalgs ==0) { -// FileUtils.getInstance().writeLogs("下发用户和人脸成功: userName: " + userName + ",设备ID: " + deviceId, FileUtils.sendUserSucTxt); -// log.info("下发用户和人脸成功: userName: " + userName + ",设备ID: " + deviceId); -// saveSendSuccessRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,deviceId,deviceType); -// } -// if (bUserFlags ==0 && bCardFlags ==0) { -// FileUtils.getInstance().writeLogs("下发用户和卡号成功: userName: " + userName +",卡号: "+ cardNum + ",设备ID: " + deviceId, FileUtils.sendUserSucTxt); -// log.info("下发用户和卡号成功: userName: " + userName +",卡号: "+ cardNum + ",设备ID: " + deviceId); -// saveSendSuccessRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,deviceId,deviceType); -// } -// if (bFaceFalgs ==0 && bUserFlags ==0 && bCardFlags ==0) { -// FileUtils.getInstance().writeLogs("下发用户和人脸、卡号成功: userName: " + userName +",卡号: "+ cardNum + ",设备ID: " + deviceId, FileUtils.sendUserSucTxt); -// log.info("下发用户和人脸、卡号成功: userName: " + userName +",卡号: "+ cardNum + ",设备ID: " + deviceId); -// saveSendSuccessRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,deviceId,deviceType); -// } -// /** -// * 人脸和人脸都下发失败 -// */ -// if (bUserFlags < 0 && bFaceFalgs < 0 ) { -// FileUtils.getInstance().writeLogs("下发用户和人脸和失败: userName: " + userName + ",设备ID: " + deviceId, FileUtils.sendUserErrTxt); -// log.info("下发用户和人脸和失败: userName: " + userName + ",设备ID: " + deviceId); -// //失败信息 -// int failType = EnumSendFaceType.FACE_AND_CARD_FAIL.code; -// String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); -// saveSendFailRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,failType,failContent,deviceId,deviceType); -// } -// /** -// * 人脸和卡都下发失败 -// */ -// if (bUserFlags < 0 && bCardFlags< 0) { -// FileUtils.getInstance().writeLogs("下发用户和卡号失败: userName: " + userName + ",设备ID: " + deviceId, FileUtils.sendUserErrTxt); -// log.info("下发用户和卡号失败: userName: " + userName + ",设备ID: " + deviceId); -// //失败信息 -// int failType = EnumSendFaceType.FACE_AND_CARD_FAIL.code; -// String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); -// saveSendFailRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,failType,failContent,deviceId,deviceType); -// } -// /** -// * 下发卡号成功,下发人脸失败, -// */ -// if (bUserFlags < 0 && bCardFlags < 0 && bFaceFalgs < 0) { -// FileUtils.getInstance().writeLogs("下发用户、人脸、卡号失败: userName: " + userName + ",设备ID: " + deviceId, FileUtils.sendUserErrTxt); -// log.info("下发用户、人脸、卡号失败: userName: " + userName + ",设备ID: " + deviceId); -// //失败信息 -// int failType = EnumSendFaceType.FACE_AND_CARD_FAIL.code; -// String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); -// saveSendFailRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,failType,failContent,deviceId,deviceType); -// } -// /** -//// * 下发卡号失败,下发人脸成功, -//// */ -//// if (bUserFlags ==0 && bCardFlags == 0 && bFaceFalgs !=0) { -//// FileUtils.getInstance().writeLogs("卡信息已存在,下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); -//// //失败信息 -//// String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); -//// sendRecordBean.setFailType(EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code); -//// sendRecordBean.setFailContent(failContent); -//// sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code); -//// addFailDace(sendRecordBean); -//// } -// } -// } -// } -// -// /** -// * 解析下发异常信息 -// * @param userErrNum -// * @param faceErrNum -// * @return -// */ -// private String analysisErrorMsg(int userErrNum,int faceErrNum,int cardErrNum){ -// StringBuffer sb = new StringBuffer(); -// //用户信息 -// if(!StringUtils.isEmpty(userErrNum)){ -// EnumSzBusinessType.EnumOperateErrorType operateErrorType = EnumSzBusinessType.EnumOperateErrorType.getByCode(userErrNum); -// String message = ""; -// if(operateErrorType !=null){ -// message= operateErrorType.getMessage(); -// sb.append("下发用户信息:").append(message).append(";"); -// } -// log.info("下发用户失败,错误码:{},错误描述:{}",userErrNum,message); -// } -// //卡异常信息 -// if(!StringUtils.isEmpty(cardErrNum)){ -// EnumSzBusinessType.EnumOperateErrorType operateErrorType = EnumSzBusinessType.EnumOperateErrorType.getByCode(cardErrNum); -// String message = ""; -// if(operateErrorType !=null){ -// message= operateErrorType.getMessage(); -// sb.append("下发用户卡信息:").append(message).append(";"); -// } -// log.info("下发用户卡失败,错误码:{},错误描述:{}",cardErrNum,message); -// } -// //人脸异常信息 -// if(!StringUtils.isEmpty(faceErrNum)){ -// EnumSzBusinessType.EnumOperateErrorType operateErrorType = EnumSzBusinessType.EnumOperateErrorType.getByCode(faceErrNum); -// String message = ""; -// if(operateErrorType !=null){ -// message= operateErrorType.getMessage(); -// sb.append("下发用户人脸:").append(message); -// } -// log.info("下发用户人脸失败,错误码:{},错误描述:{}",faceErrNum,message); -// } -// return sb.toString(); -// } -// -// /** -// * 保存下发记录 -// */ -// private void saveSendFailRecord(int schoolId,String schoolName,int userType,String userName,String filePath,String customerId, -// String cardNum,int failType,String failContent,String deviceId,int deviceType){ -// //设置下发记录 -// String time = DateFormatUtil.dateFormatString(new Date(),"yyyy-MM-dd HH:mm:ss"); -// //获取指定设备指定用户的人脸失败记录 -// List sendRecordBeanList = sendRecordDao.getFaceFailIsExit(deviceId, customerId); -// if(sendRecordBeanList.size() >0){ -// //删除失败记录 -// for (SendRecordBean recordBean : sendRecordBeanList) { -// sendRecordDao.deleteFaceFail(recordBean.getNum(), recordBean.getDeviceID()); -// } -// } -// String rootPath = userType == EnumSzBusinessType.EnumUserType.TEACHER.code ? "Teacher" : "Student" ; -// //人脸路径 -// String imagePath = filePath.replace("C:/imgCom", String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", schoolId, rootPath)); -// //添加失败记录 -// sendRecordDao.addFaceFail(customerId, deviceId, cardNum, userName,time,schoolName,imagePath,schoolId,failContent,failType,userType,deviceType); -// } -// -// /** -// * 保存成功记录 -// */ -// private void saveSendSuccessRecord(int schoolId,String schoolName,int userType,String userName,String filePath,String customerId, -// String cardNum,String deviceId,int deviceType){ -// //人脸下发成功记录, 先判断是否已经存在了 -// List sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(deviceId, String.valueOf(schoolId),cardNum); -// if (sendRecordBeanList.size() > 0) { -// //删除重复数据 -// for (SendRecordBean recordBean : sendRecordBeanList) { -// sendRecordDao.deleteFaceSuccess(recordBean.getDeviceID(),recordBean.getNum()); -// } -// } -// String time = DateFormatUtil.dateFormatString(new Date(),"yyyy-MM-dd HH:mm:ss"); -// //重新添加人脸下发记录 -// sendRecordDao.addFaceSuccess(customerId, deviceId, cardNum, userName, time, schoolName, filePath, schoolId, userType, deviceType); -// -// //删除之前失败记录 -// sendRecordDao.deleteFaceFail(cardNum,deviceId); -// } -// -// /** -// * 解析权限模板、获取下发通道号 -// * @param schoolId -// * @param studentType -// * @return -// */ -// private String analysisPermission(int schoolId, String studentType){ -// List permissionFaceBeans = permissFaceService.getPermissionList(schoolId); -// String channel =""; -// if(permissionFaceBeans.size()>0){ -// for(PermissionFaceBean permissionFaceBean : permissionFaceBeans){ -// String json = permissionFaceBean.getPermissionJson(); -// PermissionBean permissionBean = objectMapper.fromJson(json,PermissionBean.class); -// //学生考勤类型 1:通校生,2:住校生,3:全部 -// String studentTypeStr = permissionBean.getStudentType(); -// if(studentTypeStr.indexOf(studentType)!=-1){ -// channel= permissionFaceBean.getChannel(); -// } -// } -// if(StringUtils.isEmpty(channel)){ -// log.warn("未获取到学校权限通道号!"); -// return ""; -// } -// return channel; -// } -// return channel; -// } -// -// /** -// * 压缩图片 -// * @param picSrc -// * @param userId -// * @return -// */ -// private String compressPic(String picSrc,String userId){ -// //压缩后图片地址 -// String targPath =""; -// try{ -// targPath = FilePath.picPathComp + userId + ".jpg"; -// //压缩后的图片 -// CompressPic.CompressPic(picSrc, targPath, userId); -// return targPath; -// } catch (Exception e) { -// log.error("图片压缩失败,错误信息;{}",e); -// } -// return ""; -// } -// -// public String cardNo(String cardDex) { -// -// String cardR = ""; -// int length = cardDex.length(); -// if (length != 8) { -// System.out.println("卡号格式不正确:" + cardDex); -// return cardDex; -// } -// while (length > 0) { -// length -= 2; -// cardR += cardDex.substring(length, length + 2); -// } -// -// return cardR; -// -// } -// -// @Override -// public void addFaceGroup(String file, int userType, String schoolId, String userId, String deviceId, String deviceType) { -// String schoolName= userDao.getSchoolName(schoolId); -// if(StringUtils.isEmpty(schoolName)){ -// log.info("下发用户失败,学校ID: {},未查询到对应学校.",schoolId); -// return; -// } -// //获取学生信息 -// UserInfoBean userInfoBean = null; -// if (userType == EnumSzBusinessType.EnumUserType.STUDENT.code) { -// userInfoBean = userDao.getUserInfoByUserId(schoolId,userId); -// if(null == userInfoBean){ -// log.info("下发学生信息失败,学校ID: {},用户ID: {},未查询到对应学生.",schoolId,userId); -// return; -// } -// } -// //获取老师信息 -// if (userType == EnumSzBusinessType.EnumUserType.TEACHER.code){ -// TeacherBean teacher = userDao.getTeacherByUserId(schoolId,userId); -// if (null == teacher) { -// log.info("下发教师信息失败,学校ID: {},用户ID: {},未查询到对应教师.",schoolId,userId); -// return; -// } -// userInfoBean.setStudent_num(teacher.getTeacher_num()); -// userInfoBean.setName(teacher.getName()); -// userInfoBean.setUser_id(teacher.getUser_id()); -// userInfoBean.setStudentcode(teacher.getNum()); -// userInfoBean.setStudent_id(teacher.getTeacher_id()); -// userInfoBean.setSchool_id(teacher.getSchool_id()); -// } -// //如果未传指定设备ID,则获取学校下所有设备进行下发 -// List attendanceBeans = userService.getAttendanceBeans(schoolId, String.valueOf(deviceType), deviceId); -// if(attendanceBeans.size()<1){ -// log.info("下发用户信息失败,学校ID: {},设备类型:{},未查询到对应设备.",schoolId,deviceType); -// return; -// } -// //下发用户 -//// addUserFaceGroup(filePath,attendanceBeans,userInfoBean,userType,Integer.parseInt(deviceType),flag); -// } -// -// -//} +package com.example.dahua.service.imp; + +import com.example.dahua.bean.SendFaceDto; +import com.example.dahua.bean.StudentBean; +import com.example.dahua.dao.UserDao; +import com.example.dahua.lib.CompressPic; +import com.example.dahua.lib.FilePath; +import com.example.dahua.service.UserOperateService; +import com.example.dahua.utils.HttpUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 下发用户信息、人脸、卡、权限接口实现类 + * @author xuquan + * @date 2020/12/1 11:12 + */ +@Slf4j +@Service +public class UserOperateServiceImpl implements UserOperateService { + + @Autowired + private UserDao userDao; + @Autowired + private BaseService baseService; + + @Override + public void sendUserFaces(SendFaceDto sendFaceDto) { + Integer schoolId = sendFaceDto.getSchoolId(); + Integer studentType = sendFaceDto.getStudentType(); + Integer type = sendFaceDto.getType(); + String sex = sendFaceDto.getSex(); + //下发设备集合 + String[] deviceArr = sendFaceDto.getsNos().split(","); + List deviceList= new ArrayList<>(Arrays.asList(deviceArr)); + if(deviceList.size()<1){ + log.error("未选择下发设备"); + return; + } + Integer userType=null; + //根据类型获取下发用户信息、文件名目录 + String typeName=""; + List studentBeanList = null; + if(type.intValue() == 0 || type.intValue()==1){ + userType = 2; + typeName= "Student"; + studentBeanList = baseService.getStudentList(schoolId,studentType,sex); + }else{ + userType = 1; + typeName= "Teacher"; + studentBeanList = baseService.getTeacherList(schoolId); + } + for(StudentBean studentBean : studentBeanList){ + try{ + //100服务器文件目录绝对路径 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; + String photo= userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); + //学籍号 + String studentCode=userType.intValue()==1?studentBean.getNum():studentBean.getStudentcode(); + if (StringUtils.isEmpty(photo) || StringUtils.isEmpty(studentCode)){ + continue; + } + String filePath=""; + if(photo.indexOf("f0i5l7e5")!=-1){ + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\"); + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr; + } else{ + //以学籍号为名的文件名 + String fileName = photo.split(typeName +"/")[1]; + //100服务器上人脸照绝对路径 + filePath = path+ "\\" + fileName; + } + log.info("学籍号:{},人脸路径:{}, ",studentCode,filePath); + //100服务人脸照图片路径 + File file = new File(filePath); + if(file.exists()){ + String targetPath = FilePath.picPathComp+ file.getName(); + try { + CompressPic.CompressPic(file.getAbsolutePath(), targetPath,""); + } catch (Exception e) { + log.error("压缩图片失败"); + e.printStackTrace(); + continue; + } + for(String sno : deviceList){ + String clint_type = userDao.getClintType(sno); + HttpUtils.uploadImgs(new File(targetPath), String.valueOf(schoolId), studentCode, clint_type, userType, sno); + } + } + }catch (Exception e){ + log.error("人脸下发失败"); + e.printStackTrace(); + continue; + } + } + } + + public static void main(String[] args) { + String photo = "http://campus.myjxt.com//f0i5l7e5/0/alluser/20210114/430f64e104ea4a7bb7f78f0e42b3fad8.jpg"; + System.out.println(photo.indexOf("f0i5l7e5")!=-1); + String path = photo.split("f0i5l7e5/")[1]; + path= path.replace("/","\\"); + System.out.println("E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\"+path); +// System.out.println(photo.split("f0i5l7e5/")[1]); +// System.out.println(photo.split("f0i5l7e5/")[0]); + } + +} diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java b/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java index bcf974e..126c3a6 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java +++ b/cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java @@ -78,17 +78,15 @@ public class UserServiceImp implements UserService { String[] studentInfo = studentCodes.split("_"); if (studentInfo.length > 1) {//附属卡 - String studentCodeF = studentInfo[0]; String CardType = studentInfo[1]; userInfoBean = getUserInfo(schoolId, studentCodeF); - String cardNum = userDao.getCardNum(userInfoBean.getStudent_id(), CardType); - userInfoBean.setStudent_num(cardNum); - + if(userInfoBean !=null){ + String cardNum = userDao.getCardNum(userInfoBean.getStudent_id(), CardType); + userInfoBean.setStudent_num(cardNum); + } } else { - userInfoBean = getUserInfo(schoolId, studentCode);//获取用户信息 - } } else if (userType == 1) { TeacherBean teacher = userDao.getTeacher(schoolId, studentCode); @@ -104,10 +102,11 @@ public class UserServiceImp implements UserService { //下发任务 // myTask.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType); sendUserInfoTask2.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType); + return true; } catch (Exception e) { - e.printStackTrace(); + log.info("方法:uploadImgAndUserInfo,执行时,发生异常",e); } - return true; + return false; } /** diff --git a/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java b/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java index e8e91a3..3a59636 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java +++ b/cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java @@ -148,6 +148,13 @@ public class HttpUtils { return result.getBody(); } + public static void deleteFace(Integer schoolId) { + String url = "http://121.40.109.21:8991/operate/deleteFailFace?schoolId=" + schoolId; + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity result = restTemplate.getForEntity(url, Boolean.class); + System.out.println("发生请求21服务删除人脸,请求地址: +" + url+ "返回信息: "+ result.getBody()); + } + /** * 权限下发至设备 * @param permissionBean diff --git a/cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java b/cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java index d7a63b0..c31ca5e 100644 --- a/cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java +++ b/cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java @@ -99,5 +99,26 @@ public interface SendRecordDao { @Select("select * from Face_SendSuccess where schoolId = #{schoolId} and userType = #{userType} and deviceId in ('G04F98PAJ164D7','6G04F8PAJ5CAA','6G04F98PAJ1E0DB','6G04F98PAJEE38C')") List getFaceSuccessIsExitTest(@Param("schoolId") String schoolId,@Param("userType") int userType); + @Update("delete from Face_SendRecord where id = #{id}") + void deleteRecord(@Param("id") Integer id); + + // ======================== 表 Face_SendRecord ======================== + @Select("select * from Face_SendRecord where schoolId = #{schoolId} and deviceID = #{deviceID} and Num = #{Num} and userId = #{userId}") + List getRecordIsExit(@Param("schoolId") Integer schoolId,@Param("deviceID") String deviceId, @Param("Num") String card,@Param("userId") String userId); + + @Insert("insert into Face_SendRecord values(#{deviceID},#{userId},#{num},#{name},#{time},#{schoolName},#{imgPath},#{schoolId},#{failContent},#{failType},#{userType},#{deviceType},#{status})") + void saveFaceRecord(@Param("userId") String userId, @Param("deviceID") String deviceID, @Param("num") String num, @Param("name") String name, + @Param("time") String time, @Param("schoolName") String schoolName, @Param("imgPath") String imgPath, @Param("schoolId") Integer schoolId, @Param("failContent") String failContent, + @Param("failType") Integer failType, @Param("userType") Integer userType, @Param("deviceType") Integer deviceType,Integer status); + + @Update("update Face_SendRecord set time = #{time},failContent = #{content},imgPath= #{faceUrl},status = 2 where deviceID = #{deviceID} and Num =#{Num} and userId = #{userId}") + void updateFaceFailRecord(@Param("deviceID") String deviceId, @Param("faceUrl") String faceUrl,@Param("Num") String card, @Param("time") String time, @Param("content") String content,@Param("userId") String userId); + + @Update("update Face_SendRecord set time = #{time},imgPath= #{faceUrl},Name = #{Name},status = 1, failType=null, failContent = null where deviceID = #{deviceID} and Num = #{Num}") + void updateFaceSuccessRecord(@Param("deviceID") String deviceId, @Param("Num") String card, @Param("time") String time, @Param("faceUrl") String faceUrl, @Param("Name") String name, @Param("userId") String userId); + + @Select("select * from Face_SendRecord where schoolId = #{schoolId} and status =2") + List getFailRecord(@Param("schoolId") Integer schoolId); + } diff --git a/cloud/dahua/src/main/resources/logback-spring.xml b/cloud/dahua/src/main/resources/logback-spring.xml index 5ea775f..58f34e3 100644 --- a/cloud/dahua/src/main/resources/logback-spring.xml +++ b/cloud/dahua/src/main/resources/logback-spring.xml @@ -8,8 +8,8 @@ - - + + diff --git a/cloud/dahua/src/main/resources/mapper/usermapper.xml b/cloud/dahua/src/main/resources/mapper/usermapper.xml index 3e3fc2b..06cd53c 100644 --- a/cloud/dahua/src/main/resources/mapper/usermapper.xml +++ b/cloud/dahua/src/main/resources/mapper/usermapper.xml @@ -9,15 +9,38 @@ - + select * from SZ_V_School_Student where school_id = #{schoolId} + + and student_type = #{studentType} + + + and sex in + + #{item} + + + and (student_num is not null or student_num != '') and (photo is not null or photo !='') + + + + \ No newline at end of file diff --git a/cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java b/cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java index c39123f..d42b8f9 100644 --- a/cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java +++ b/cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java @@ -145,4 +145,9 @@ public class SearchMapperTest extends Tester { String schoolId = "1485"; deleteBatchTest.test3(schoolId); } + + @Test + public void test9() { + deleteBatchTest.test4(27,2,"1"); + } } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java index 75f4a57..2fe69dd 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java @@ -1,19 +1,18 @@ package com.sincere.haikangface; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.sincere.haikangface.bean.*; +import com.sincere.haikangface.bean.AttendanceBean; +import com.sincere.haikangface.bean.StudentBean; import com.sincere.haikangface.bean.xiaoan.Face_Recoder; import com.sincere.haikangface.dao.DeviceDao; import com.sincere.haikangface.dao.UserDao; -import com.sincere.haikangface.enums.EnumSzBusinessType; import com.sincere.haikangface.haikanglibs.HCEHomeAlarm; import com.sincere.haikangface.haikanglibs.HCEHomeCMS; import com.sincere.haikangface.haikanglibs.HCEHomeSS; -import com.sincere.haikangface.mqtt.MqtUtils; import com.sincere.haikangface.service.impl.BaseService; -import com.sincere.haikangface.utils.*; +import com.sincere.haikangface.utils.AlarmUtils; +import com.sincere.haikangface.utils.FileUtils; import com.sincere.haikangface.xiananDao.SendRecordDao; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; @@ -23,15 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; -import org.springframework.core.io.FileSystemResource; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; @@ -40,7 +31,10 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.regex.Pattern; @Component @@ -67,17 +61,19 @@ public class CMSServer implements ApplicationRunner { // 存储设备登录句柄 static Map map = new HashMap<>(); + public static String inTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + //114.55.30.100 //120.26.116.253 // private String ip_cloud = "114.55.30.100"; - private String ip_cloud = "172.16.2.166"; + private String ip_cloud = "114.55.30.100"; private String ip; { try { ip = InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { - e.printStackTrace(); + log.error("获取主机IP异常,错误信息:{}",e); } } @@ -247,7 +243,7 @@ public class CMSServer implements ApplicationRunner { try { deviceId = new String(strDevRegInfo.byDeviceID, "utf-8").trim(); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + log.error("注册设备,设置设备ID异常,错误信息:{}",e); } pInBuffer.dwSize = pInBuffer.size(); AttendanceBean attendanceBean = new AttendanceBean(); @@ -262,7 +258,7 @@ public class CMSServer implements ApplicationRunner { attendanceBean.setSchool_id("-1"); attendanceBean.setState(1); if (deviceDao.selectDevice(deviceId) != null) { - deviceDao.updateDeviceStatu(1, deviceId); + deviceDao.updateDeviceStatu(1,inTime,deviceId); } else { deviceDao.addDevide(attendanceBean.getClint_id(), attendanceBean.getClint_type(), attendanceBean.getIntime(), attendanceBean.getSchool_id(), attendanceBean.getState() + "", attendanceBean.getIsConnection() + ""); @@ -305,7 +301,6 @@ public class CMSServer implements ApplicationRunner { String szDevUri = new String(pTomcatMsg.szDevUri).trim(); int dwPicNum = pTomcatMsg.dwPicNum; String pPicURLs = pTomcatMsg.pPicURLs; -// System.out.println("szDevUri = " + szDevUri + " dwPicNum= " + dwPicNum + " pPicURLs=" + pPicURLs); } else if (2 == enumType) { // int type = pInBuffer.dwAlarmServerType; // int picServerType = pInBuffer.dwPicServerType; @@ -339,7 +334,7 @@ public class CMSServer implements ApplicationRunner { try { strFilePathFile.createNewFile(); } catch (IOException e) { - e.printStackTrace(); + log.error("处理人脸机抓拍文件异常,错误信息:{}",e); } } if (dwFileLen > 0 && pFileBuf != null) { @@ -366,9 +361,9 @@ public class CMSServer implements ApplicationRunner { baseService.sendUserInfoToKB(strFilePathFile, deviceId); } } catch (FileNotFoundException e) { - e.printStackTrace(); + log.error("处理人脸机抓拍文件异常,错误信息:{}",e); } catch (IOException e) { - e.printStackTrace(); + log.error("处理人脸机抓拍文件异常,错误信息:{}",e); } } @@ -397,30 +392,36 @@ public class CMSServer implements ApplicationRunner { strXMLData.read(); String strXML = new String(strXMLData.byValue); if (null == alarmUtils) { + log.info("初始化报警工具类"); alarmUtils = new AlarmUtils(deviceDao, userDao); alarmUtils.setCallBack(new AlarmUtils.AlarmCallBack() { @Override public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) { switch (minorType) { case "0x4b"://人脸认证通过 + log.info("人脸验证通过,事件次类型:"+minorType); saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); break; case "0x426"://人证设备在线 break; case "0x427"://人证设备离线 + log.info("设备掉线了,设备ID: "+deviceID); map.remove(deviceID); - deviceDao.updateDeviceStatu(0, deviceID); + deviceDao.updateDeviceStatu(0,inTime,deviceID); break; case "0x69"://人证比对通过 + log.info("人证比对通过,事件次类型:"+minorType); saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); break; case "0x6": + log.info("通过,事件次类型:"+minorType); saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); break; } } }); } else { + log.info("处理报警进来了"); //处理报警事件 alarmUtils.deleAlarm(strXML); } @@ -447,6 +448,7 @@ public class CMSServer implements ApplicationRunner { try { if (!StringUtils.isEmpty(cardNo) && isNumeric(cardNo)) { Face_Recoder face_recoder = new Face_Recoder(); + //十进制卡转十六进制卡 String card = splicingZero(Long.toHexString(Long.parseLong(cardNo)), 8).toUpperCase(); //卡号逆转 cardNo = baseService.getCard(card); @@ -486,7 +488,6 @@ public class CMSServer implements ApplicationRunner { public void isTeacher(String cardNo, String deviceID) { List devLists = userDao.getDeviceRoomRelation(deviceID); -// log.error("cardNo:{},devLists{}", cardNo, devLists); if (null != devLists && devLists.size() > 0) { StudentBean teacher = userDao.getTeacherWithCard(cardNo); @@ -509,7 +510,8 @@ public class CMSServer implements ApplicationRunner { * @param deviceId * @return */ - public boolean createImgPath(String srcFile, String picUrl, String card, String startTime, String endTime, int validTimeEnabled, String name, String deviceId, String userType, String employeeNo,Integer schoolId) { + public boolean createImgPath(String srcFile, String picUrl, String card, String startTime, String endTime, int validTimeEnabled, String name, String deviceId, String userType, String employeeNo,Integer schoolId,String cardNum) { + log.info("下发卡号:"+card); if (map.containsKey(deviceId)) { HCEHomeSS.NET_EHOME_SS_CLIENT_PARAM pClientParam = new HCEHomeSS.NET_EHOME_SS_CLIENT_PARAM(); pClientParam.enumType = HCEHomeSS.NET_EHOME_SS_CLIENT_TYPE_KMS; @@ -548,11 +550,11 @@ public class CMSServer implements ApplicationRunner { /** * 下发用户信息 */ - return sendInfo(srcFile, url, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo, schoolId); + return sendInfo(srcFile, url, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo, schoolId,cardNum); } - if(schoolId !=null && (schoolId.intValue() == 4 || - schoolId.intValue() == 27|| schoolId.intValue() == 2 || schoolId.intValue() == 16)){ - baseService.sendFailRecord(card, srcFile, deviceId,"设备不在线", userType); + if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 864 || + schoolId.intValue() == 2 || schoolId.intValue() == 16)){ + baseService.sendFailRecord(cardNum, srcFile, deviceId,"设备不在线", userType); }else{ baseService.sendFail(card, srcFile, deviceId,"设备不在线", userType); } @@ -564,7 +566,7 @@ public class CMSServer implements ApplicationRunner { * * @Param picUrl 原图 */ - public boolean sendInfo(String srcFile, String url, String card, String startTime, String endTime, int validTimeEnabled, String name, String deviceId, String userType, String employeeNo,Integer schoolId) { + public boolean sendInfo(String srcFile, String url, String card, String startTime, String endTime, int validTimeEnabled, String name, String deviceId, String userType, String employeeNo,Integer schoolId,String cardNum) { // deleteCard(deviceId, card); // editCard(startTime, endTime, 0, name, card, deviceId, employeeNo); editCard(startTime, endTime, validTimeEnabled, name, card, deviceId, employeeNo); @@ -579,7 +581,7 @@ public class CMSServer implements ApplicationRunner { ""; //开始下发人脸 - return editFace(srcFile, url, card, strRequest, strConfigXML, "下发人脸", deviceId, EnumSzBusinessType.EnumHkOperateType.ADD.code, userType,schoolId); + return editFace(srcFile, url, card, strRequest, strConfigXML, "下发人脸", deviceId, validTimeEnabled, userType,schoolId,cardNum); } /** @@ -653,7 +655,7 @@ public class CMSServer implements ApplicationRunner { System.arraycopy(nameAfterBy, 0, resultBy, nameBeforBy.length + nameBy.length, nameAfterBy.length); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + log.error("编码异常:异常信息:{}",e); } struConfigXMLCard.byString = resultBy; @@ -701,7 +703,7 @@ public class CMSServer implements ApplicationRunner { * * @param clint_id */ - public void SetCardWeekPlan(String clint_id, String card, String userType, String strConfigXMLCard, String content,Integer schoolId) { + public void SetCardWeekPlan(String clint_id, String card, String userType, String strConfigXMLCard, String content,Integer schoolId,String cardNum) { try { HCEHomeCMS.NET_EHOME_XML_CFG struXMLCard = new HCEHomeCMS.NET_EHOME_XML_CFG(); @@ -745,7 +747,7 @@ public class CMSServer implements ApplicationRunner { log.error(content + "失败:" + iErr); if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){ - baseService.sendFailRecord(card,"",clint_id,content + "失败:" + iErr, userType); + baseService.sendFailRecord(cardNum,"",clint_id,content + "失败:" + iErr, userType); }else{ baseService.sendFail(card,"",clint_id,content + "失败:" + iErr, userType); } @@ -753,7 +755,7 @@ public class CMSServer implements ApplicationRunner { log.info(content + "成功"); } } catch (Exception e) { - e.printStackTrace(); + log.error("设置卡权限周计划异常:异常信息:{}",e); } } @@ -769,7 +771,7 @@ public class CMSServer implements ApplicationRunner { String strConfigXML = "" + "" + card + "1" + "1"; - return editFace("", "", card, strRequest, strConfigXML, "删除人脸", deviceId, 2, "",schoolId); + return editFace("", "", card, strRequest, strConfigXML, "删除人脸", deviceId, 2, "",schoolId,""); } /** @@ -784,10 +786,10 @@ public class CMSServer implements ApplicationRunner { String strConfigXML = "" + "" + card + "1" + "1"; - return editFace("", "", card, strRequest, strConfigXML, "获取人脸信息", deviceId, 3, "",schoolId); + return editFace("", "", card, strRequest, strConfigXML, "获取人脸信息", deviceId, 3, "",schoolId,""); } - private boolean editFace(String srcFile, String faceUrl, String card, String strRequest, String strConfigXML, String content, String deviceId, int type, String userType,Integer schoolId) { + private boolean editFace(String srcFile, String faceUrl, String card, String strRequest, String strConfigXML, String content, String deviceId, int type, String userType,Integer schoolId,String cardNum) { // deleteCard(deviceId, card); // lLoginID = map.get(deviceId); @@ -818,24 +820,24 @@ public class CMSServer implements ApplicationRunner { if (type == 1) {//下发人脸 if (!hCEhomeCMS.NET_ECMS_PostPTXMLConfig(map.get(deviceId), struISAPXML)) { int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); - System.err.println(content + "失败,错误号:" + iErr + "---" + strConfigXML + "\n"); - if(schoolId !=null && (schoolId.intValue() == 4 || - schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){ - baseService.sendFailRecord(card,"",deviceId,content + "失败:" + iErr, userType); + log.error(content + "失败,错误号:" + iErr + "---" + strConfigXML + "\n"); + if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 864 || + schoolId.intValue() == 2 || schoolId.intValue() == 16)){ + baseService.sendFailRecord(cardNum,"",deviceId,content + "失败,错误号:" + iErr, userType); }else{ - baseService.sendFail(card,"",deviceId,content + "失败:" + iErr, userType); + baseService.sendFail(card,"",deviceId,content + "失败,错误号:" + iErr, userType); } // sendRecoderUtils.sendFailRecord(sendRecordDao, card, srcFile, deviceId, userDao, content + "失败,错误号:" + iErr, userType); } else { stringXMLOut.read(); String strOutXML = new String(stringXMLOut.byString).trim(); - if(schoolId !=null && (schoolId.intValue() == 4 || - schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){ - baseService.sendSuccessRecord(card,faceUrl, deviceId,userType); + if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 864 || + schoolId.intValue() == 2 || schoolId.intValue() == 16)){ + baseService.sendSuccessRecord(cardNum,faceUrl, deviceId,userType); }else{ baseService.sendSuccess(card,faceUrl, deviceId,userType); } - log.info(content + "成功:" + card); + log.info(content + "成功: 下发卡号:" + card); } } else if (type == 2) {//删除人脸 if (!hCEhomeCMS.NET_ECMS_PutPTXMLConfig(map.get(deviceId), struISAPXML)) { diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/HaikangfaceApplication.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/HaikangfaceApplication.java index 7ae05fd..50e1564 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/HaikangfaceApplication.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/HaikangfaceApplication.java @@ -11,11 +11,13 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerA import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class}) @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients(basePackages = "com.sincere.haikangface.fegin") +//@EnableAsync public class HaikangfaceApplication { public static void main(String[] args) { diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask100.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask100.java new file mode 100644 index 0000000..99d12dd --- /dev/null +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask100.java @@ -0,0 +1,110 @@ +package com.sincere.haikangface.async; + +import com.sincere.haikangface.bean.StudentBean; +import com.sincere.haikangface.enums.EnumSzBusinessType; +import com.sincere.haikangface.service.impl.BaseService; +import com.sincere.haikangface.utils.CompressPic; +import com.sincere.haikangface.utils.FileUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +/** + * 多线程执行卡下发 + * @author xuquan + * @date 2021/01/12 15:56 + */ +@Slf4j +public class SendFaceBatchTask100 implements Runnable { + + private String schoolId; + private String userType; + private List students; + private String sno; + private FileUtils fileUtils; + private SendUserAsync sendUserAsync; + private BaseService baseService; + CountDownLatch begin; + CountDownLatch end; + + public SendFaceBatchTask100(String schoolId, String userType,String sno,List students,BaseService baseService, + FileUtils fileUtils,SendUserAsync sendUserAsync, CountDownLatch begin, CountDownLatch end){ + this.userType=userType; + this.schoolId=schoolId; + this.students=students; + this.sno=sno; + this.fileUtils=fileUtils; + this.sendUserAsync=sendUserAsync; + this.baseService=baseService; + this.begin=begin; + this.end=end; + } + + @Override + public void run() { + try { + begin.await(); + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, 10); + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); + //下发标识:详情见枚举 EnumHkOperateType + int validTimeEnabled = EnumSzBusinessType.EnumHkOperateType.ADD.code; + for(StudentBean studentBean : students){ + try{ + String photo= studentBean.getPhoto(); + if (StringUtils.isBlank(photo)){ + continue; + } + String userName= studentBean.getName(); + String cardNum =""; + String typeName=""; + if(userType.equals("1")){ + cardNum = studentBean.getTeacher_num(); + typeName= "Teacher"; + }else { + cardNum = studentBean.getStudent_num(); + typeName= "Student"; + } + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; + log.info("人脸路径:"+photo); + //以学籍号为名的文件名 + String fileName = photo.split(typeName +"/")[1]; + //100服务器上人脸照绝对路径 + String filePath = path+ "\\" + fileName; + File file = new File(filePath);//图片 + if(file.exists()){ + String targetPath = fileUtils.picPathComp + file.getName(); + log.info("文件名:"+fileName); + try { + CompressPic.CompressPic(file.getAbsolutePath(), targetPath); + } catch (Exception e) { + log.error("压缩图片失败"); + e.printStackTrace(); + continue; + } + String cardNumLong = Long.parseLong(baseService.getCard(cardNum), 16) + ""; + //下发100海康设备 + sendUserAsync.sendStuToHaiKang(file.getAbsolutePath(),targetPath,cardNumLong, startTime, endTime, validTimeEnabled, userName, sno, userType,Integer.parseInt(schoolId),cardNum); + } + }catch (Exception e){ + log.error("人脸下发失败"); + e.printStackTrace(); + continue; + } + } + }catch (Exception e){ + log.error("下发人脸异常,信息:"); + e.printStackTrace(); + }finally { + end.countDown(); + } + } + +} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask253.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask253.java new file mode 100644 index 0000000..c15aee3 --- /dev/null +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask253.java @@ -0,0 +1,89 @@ +package com.sincere.haikangface.async; + +import com.sincere.haikangface.bean.StudentBean; +import com.sincere.haikangface.enums.EnumSzBusinessType; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +/** + * 多线程执行卡下发 + * @author xuquan + * @date 2021/01/12 15:56 + */ +@Slf4j +public class SendFaceBatchTask253 implements Runnable { + + private String schoolId; + private String userType; + private List students; + private String sno; + private SendUserAsync sendUserAsync; + CountDownLatch begin; + CountDownLatch end; + + public SendFaceBatchTask253(String schoolId, String userType,String sno,List students, + SendUserAsync sendUserAsync, CountDownLatch begin, CountDownLatch end){ + this.userType=userType; + this.schoolId=schoolId; + this.students=students; + this.sno=sno; + this.sendUserAsync=sendUserAsync; + this.begin=begin; + this.end=end; + } + + @Override + public void run() { + try { + begin.await(); + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, 10); + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); + //下发标识:详情见枚举 EnumHkOperateType + int validTimeEnabled = EnumSzBusinessType.EnumHkOperateType.ADD.code; + for(StudentBean studentBean : students){ + try{ + String photo= studentBean.getPhoto(); + if (StringUtils.isBlank(photo)){ + continue; + } + String userName= studentBean.getName(); + String cardNum =""; + String typeName=""; + if(userType.equals("1")){ + cardNum = studentBean.getTeacher_num(); + typeName= "Teacher"; + }else { + cardNum = studentBean.getStudent_num(); + typeName= "Student"; + } + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; + //以学籍号为名的文件名 + String fileName = photo.split(typeName+"/")[1]; + //100服务器上人脸照绝对路径 + String filePath = path+ "\\" + fileName; + Thread.sleep(1000); + //下发253服务器 + sendUserAsync.uploadImgs(filePath, cardNum, userName, sno, startTime, endTime, validTimeEnabled, userType); + }catch (Exception e){ + log.error("人脸下发失败"); + e.printStackTrace(); + continue; + } + } + }catch (Exception e){ + log.error("下发人脸异常,信息:"); + e.printStackTrace(); + }finally { + end.countDown(); + } + } + +} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java index 8aa8d58..58c9208 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java @@ -12,17 +12,21 @@ import com.sincere.haikangface.dao.DeviceDao; import com.sincere.haikangface.dao.UserDao; import com.sincere.haikangface.enums.EnumSzBusinessType; import com.sincere.haikangface.service.impl.BaseService; -import com.sincere.haikangface.utils.*; +import com.sincere.haikangface.utils.FileUtils; +import com.sincere.haikangface.utils.HKXmlUtils; +import com.sincere.haikangface.utils.HttpUtil; +import com.sincere.haikangface.utils.SendRecoderUtils; import com.sincere.haikangface.xiananDao.SendRecordDao; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; -import org.springframework.web.client.RestTemplate; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Component @Slf4j @@ -59,14 +63,14 @@ public class SendUserAsync { * @param deviceId * @param userType */ - public void sendStuToHaiKang(String srcFile, String picUrl, String card, String startTime, String endTime, int validTimeEnabled, String name, String deviceId, String userType,Integer schoolId) { + public void sendStuToHaiKang(String srcFile, String picUrl, String card, String startTime, String endTime, int validTimeEnabled, String name, String deviceId, String userType,Integer schoolId,String cardNum) { //1、检测图片是否合格 boolean check = true; if (check) {//合格 //根据设备是5603 还是新设备 String employeeNo = ""; //picUrl:压缩后的图片路径,图片上传,用户信息、用户卡下发。 - cmsServer.createImgPath(srcFile, picUrl, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo,schoolId); + cmsServer.createImgPath(srcFile, picUrl, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo,schoolId,cardNum); //根据设备 if (deviceId.contains("ymzx") || deviceId.contains("5607") || deviceId.contains("5671") || deviceId.contains("5604")) { long lon = Long.parseLong(card); @@ -94,18 +98,18 @@ public class SendUserAsync { } } //设置卡权限计划模板 - cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板",schoolId); + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板",schoolId,cardNum); //设置卡权限周计划 - cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划" ,schoolId); + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划" ,schoolId,cardNum); for (int i = 0; i < 7; i++) { - cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlanTime(HKXmlUtils.getInstance().SetCardWeekPlanTimes("00:00:00", "23:00:00"), "" + i), "设置卡权限周计划时间",schoolId); + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlanTime(HKXmlUtils.getInstance().SetCardWeekPlanTimes("00:00:00", "23:00:00"), "" + i), "设置卡权限周计划时间",schoolId,cardNum); } - cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardRightCfg(card), "设置卡权限",schoolId); + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardRightCfg(card), "设置卡权限",schoolId,cardNum); } } else {//不合格 - if(schoolId !=null && (schoolId.intValue() == 4 || - schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){ - baseService.sendFailRecord(card, srcFile, deviceId, "人脸照片不合格", userType); + if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 864 || + schoolId.intValue() == 2 || schoolId.intValue() == 16)){ + baseService.sendFailRecord(cardNum, srcFile, deviceId, "人脸照片不合格", userType); }else{ baseService.sendFail(card, srcFile, deviceId, "人脸照片不合格", userType); } @@ -154,8 +158,7 @@ public class SendUserAsync { log.info("map{}", JSON.toJSONString(map)); return true; }catch (Exception e){ - e.printStackTrace(); - log.error("下发权限失败"); + log.error("下发卡权限失败,异常信息:{}",e); } return false; } @@ -190,8 +193,7 @@ public class SendUserAsync { cardNumList.addAll(cardList); } if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.STUDENT.code) { -// cardNumList = getCards(sex, userType, schoolId); - cardNumList = getStudentCard(Integer.parseInt(schoolId),studentType,sex); + cardNumList = baseService.getStudentCard(Integer.parseInt(schoolId),studentType,sex); } //整理周和时间段 initWeedayAndTimes(weekDay, map); @@ -203,8 +205,7 @@ public class SendUserAsync { userDao.updateAuthRecord(id,1); return true; }catch (Exception e){ - e.printStackTrace(); - log.error("下发权限失败"); + log.error("下发卡权限失败,异常信息:{}",e); } return false; } @@ -229,7 +230,7 @@ public class SendUserAsync { } } catch (Exception e) { - e.printStackTrace(); + log.error("获取用户卡异常,异常信息:{}",e); } return cards; } @@ -268,8 +269,8 @@ public class SendUserAsync { } cardNum = Long.parseLong(newCardNum, 16) + ""; - cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板",schoolId); - cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划",schoolId); + cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板",schoolId,cardNum); + cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划",schoolId,cardNum); for (Map.Entry> weeKdayMap : map.entrySet()) { @@ -285,20 +286,19 @@ public class SendUserAsync { String weekPlanTime = HKXmlUtils.getInstance().SetCardWeekPlanTime(stringBuffer.toString(), "" + week); String serCardRightCfg = HKXmlUtils.getInstance().SetCardRightCfg(cardNum); FileUtils.getInstance().writeLogs(weekPlanTime, "设置卡权限周计划时间.txt"); - cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, weekPlanTime, "设置卡权限周计划时间",schoolId); - cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, serCardRightCfg, "设置卡权限",schoolId); + cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, weekPlanTime, "设置卡权限周计划时间",schoolId,cardNum); + cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, serCardRightCfg, "设置卡权限",schoolId,cardNum); } } } - } else {//设备不在线 + } else {//设备不在线,请求253服务器执行下发 if (i == 0) HttpUtil.sendPermission2HK(permissionBean); log.error("deviceId:{}", deviceId + "不在线"); } } return true; }catch (Exception e){ - log.error("下发失败,错误信息{}",e); - e.printStackTrace(); + log.error("下发卡权限失败,异常信息{}",e); } return false; } @@ -320,14 +320,7 @@ public class SendUserAsync { return cardList; } - public List getStudentCard(int schoolId, int studentType, String sex) { - String[] msg = sex.split(","); - List list = new ArrayList<>(); - for(String s : msg){ - list.add(Integer.valueOf(s)); - } - return userDao.getStudentCard(schoolId,studentType, list); - } + private void initWeedayAndTimes(WeekDay weekDay, Map> map) { @@ -393,32 +386,4 @@ public class SendUserAsync { public boolean IsDeviceOnline(String deviceId) { return HttpUtil.IsDeviceOnline(deviceId); } - - @Async - public void uploadHkImg( String schoolId,int userType,String deviceIds) { - String api = "http://114.55.30.100:8089/facereco/sendFaces"; - try { - String url = String.format(api +"?schoolId=%s&userType=%s&deviceIds=%s",schoolId,userType,deviceIds); - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); - log.info("请求成功:responseEntity:" + responseEntity.getBody()); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - @Async - public void uploadDHImg( String schoolId,int userType,String deviceIds) { - String api = "http://114.55.30.100:8991/user/sendFaces"; - try { - String url = String.format(api +"?schoolId=%s&userType=%s&deviceIds=%s",schoolId,userType,deviceIds); - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); - log.info("请求成功:responseEntity:" + responseEntity.getBody()); - } catch (Exception e) { - e.printStackTrace(); - } - } - } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/AuthRecordDto.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/AuthRecordDto.java index 768f2f5..dbbaffc 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/AuthRecordDto.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/AuthRecordDto.java @@ -15,13 +15,13 @@ public class AuthRecordDto { @ApiModelProperty("权限表ID") private Integer id ; - @ApiModelProperty("1 学生类型 2 学生组") + @ApiModelProperty("1学生类型 2 学生组") private Integer type ; @ApiModelProperty("学校ID") private Integer schoolId ; - @ApiModelProperty("设备号,逗号隔开") + @ApiModelProperty("设备号集合") private List snList; - @ApiModelProperty("学生类型,1通校2住校") + @ApiModelProperty("学生类型,1通校2住校;群组时,为群组号") private Integer studentType ; @ApiModelProperty("权限周计划列表") private List weekDays ; diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/PermissionDHBean.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/PermissionDHBean.java new file mode 100644 index 0000000..033cf27 --- /dev/null +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/PermissionDHBean.java @@ -0,0 +1,63 @@ +package com.sincere.haikangface.bean.face; + +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.util.List; + +public class PermissionDHBean implements Serializable { + + @ApiModelProperty(value = "设备id",required = true) + private List deviceIds; + + private List weekDays; + + @ApiModelProperty("用逗号隔开,1:通校生,2:住校生,3:全部") + private String studentType; + + @ApiModelProperty("权限通道号") + private String channel; + + @ApiModelProperty("权限自定义名成") + private String customName; + + public String getStudentType() { + return studentType; + } + + public void setStudentType(String studentType) { + this.studentType = studentType; + } + + public List getDeviceIds() { + return deviceIds; + } + + public void setDeviceIds(List deviceIds) { + this.deviceIds = deviceIds; + } + + public List getWeekDays() { + return weekDays; + } + + public void setWeekDays(List weekDays) { + this.weekDays = weekDays; + } + + public String getChannel() { + return channel; + } + + public void setChannel(String channel) { + this.channel = channel; + } + + public String getCustomName() { + return customName; + } + + public void setCustomName(String customName) { + this.customName = customName; + } +} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/SendFaceDto.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/SendFaceDto.java new file mode 100644 index 0000000..04ec5bb --- /dev/null +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/SendFaceDto.java @@ -0,0 +1,66 @@ +package com.sincere.haikangface.bean.face; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; + +/** + * 照片下发人脸实体类 + * @author xuquan + * @date 2020/12/16 09:10 + */ +@ApiModel +public class SendFaceDto { + + @ApiModelProperty("0主卡1教师卡2副卡") + private Integer type ; + @ApiModelProperty("学校ID") + private Integer schoolId ; + @ApiModelProperty("设备号,逗号隔开") + private String sNos; + @ApiModelProperty("学生类型,1通校2住校;群组时,为群组号") + private Integer studentType; + @ApiModelProperty("性别:1男2女,多个逗号隔开") + private String sex; + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Integer getSchoolId() { + return schoolId; + } + + public void setSchoolId(Integer schoolId) { + this.schoolId = schoolId; + } + + public String getsNos() { + return sNos; + } + + public void setsNos(String sNos) { + this.sNos = sNos; + } + + public Integer getStudentType() { + return studentType; + } + + public void setStudentType(Integer studentType) { + this.studentType = studentType; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } +} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java index 234589a..f062874 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java @@ -3,21 +3,16 @@ package com.sincere.haikangface.control; import com.alibaba.fastjson.JSON; import com.sincere.haikangface.CMSServer; import com.sincere.haikangface.async.SendUserAsync; -import com.sincere.haikangface.bean.Images2Ddevices; import com.sincere.haikangface.bean.StudentBean; -import com.sincere.haikangface.bean.UploadBean; import com.sincere.haikangface.bean.face.PermissionBean; import com.sincere.haikangface.dao.UserDao; import com.sincere.haikangface.service.impl.BaseService; import com.sincere.haikangface.utils.CompressPic; import com.sincere.haikangface.utils.FileUtils; -import com.sincere.haikangface.utils.SendRecoderUtils; import com.sincere.haikangface.xiananDao.SendRecordDao; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -25,8 +20,6 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; -import java.text.SimpleDateFormat; -import java.util.*; @RestController @Api("文件管理器") @@ -65,7 +58,11 @@ public class FileControl { @RequestParam("endTime") String endTime, @RequestParam("validTimeEnabled") int validTimeEnabled, @RequestParam("userType") String userType) { try { if (!cmsServer.getIsDeviceOnline(deviceId)) { - FileUtils.getInstance().writeLogs("设备不在线:" + deviceId, FileUtils.devices); + log.warn("设备ID: {},设备不在线",deviceId); + return "0"; + } + if(StringUtils.isEmpty(card)){ + log.warn("卡号为空"); return "0"; } String fileName = file.getOriginalFilename();//文件名 @@ -76,11 +73,10 @@ public class FileControl { fileOutputStream.write(file.getBytes()); fileOutputStream.close(); String filePath = dest.getAbsolutePath(); - FileUtils.getInstance().writeLogs("filePath:" + filePath + " card:" + card + " name:" + name + " deviceId:" + deviceId, FileUtils.sendUserInfo); long time = System.currentTimeMillis(); StudentBean studentBean = userDao.getStudentWithCard(card); Integer schoolId = studentBean ==null ?null:studentBean.getSchool_id(); - String cardNum = Long.parseLong(baseService.getCard(card), 16) + ""; + String cardNum = Long.parseLong(baseService.getCard(card),16) + ""; if (new File(filePath.trim()).exists()) { String targetPath = FileUtils.picPathComp + new File(filePath).getName(); try { @@ -89,7 +85,8 @@ public class FileControl { e.printStackTrace(); } try { - sendUserAsync.sendStuToHaiKang(filePath, targetPath,cardNum,startTime, endTime, validTimeEnabled, name, deviceId, userType,schoolId); + log.info("下发人脸,人脸路径:{},用户名:{},下发设备:{}",filePath,name,deviceId); + sendUserAsync.sendStuToHaiKang(filePath, targetPath,cardNum,startTime, endTime, validTimeEnabled, name, deviceId, userType,schoolId,card); System.out.println("time:" + (System.currentTimeMillis() - time) / 1000); return "1"; } catch (Exception e) { diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java index 5675ec7..c486462 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java @@ -137,7 +137,7 @@ public class UserControl { if (null != studentBean) { if (cmsServer.getIsDeviceOnline(devId)) { String cardNum = Long.parseLong(baseService.getCard(card), 16) + ""; - sendUserAsync.sendStuToHaiKang(filePath.getAbsolutePath(),targetPath,cardNum, startTime, endTime, 1, name, devId, images2Ddevices.getUserType(), 0); + sendUserAsync.sendStuToHaiKang(filePath.getAbsolutePath(),targetPath,cardNum, startTime, endTime,1, name, devId, images2Ddevices.getUserType(), 0,card); } else { sendUserAsync.uploadImgs(targetPath, card, name, devId, startTime, endTime, 1, images2Ddevices.getUserType()); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java index 4d514ca..4c29bf7 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java @@ -1,31 +1,19 @@ package com.sincere.haikangface.control; -import com.alibaba.fastjson.JSON; -import com.fasterxml.jackson.databind.JavaType; -import com.sincere.haikangface.async.SendUserAsync; import com.sincere.haikangface.bean.Result; import com.sincere.haikangface.bean.ResultGenerator; import com.sincere.haikangface.bean.face.AuthRecordDto; import com.sincere.haikangface.bean.face.DeviceAuthRecord; -import com.sincere.haikangface.bean.face.PermissionBean; -import com.sincere.haikangface.bean.face.WeekDay; +import com.sincere.haikangface.bean.face.SendFaceDto; import com.sincere.haikangface.dao.UserDao; -import com.sincere.haikangface.enums.EnumSzBusinessType; import com.sincere.haikangface.service.UserOperateService; -import com.sincere.haikangface.utils.FileUtils; import com.sincere.haikangface.utils.JsonUtils; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - /** * 用户信息、人脸、卡信息、权限下发控制类 * @author xuquan @@ -39,14 +27,11 @@ public class UserOperateController { @Autowired UserDao userDao; @Autowired - SendUserAsync sendUserAsync; - @Autowired UserOperateService userOperateService; @RequestMapping(value = "createHKAuth", method = RequestMethod.POST) @ApiOperation("人脸机创建权限2.0") - public Result sendPermiss(@RequestBody AuthRecordDto authRecordDto) { - log.info("permissionBean:{}", JSON.toJSONString(authRecordDto)); + public Result createHKAuth(@RequestBody AuthRecordDto authRecordDto) { if(userOperateService.createHKAuth(authRecordDto)){ return ResultGenerator.genSuccessResult(); }else{ @@ -57,34 +42,8 @@ public class UserOperateController { private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper(); @RequestMapping(value = "sendHKAuth", method = RequestMethod.POST) @ApiOperation("下发权限给设备2.0") - public Result sendHKPermiss(@RequestParam("authId") Integer authId) { - DeviceAuthRecord record = userDao.getAuthRecord(authId); - if(record ==null){ - log.info("未查询到对应权限ID: {}, 权限计划。",authId); - return ResultGenerator.genFailResult("未查询到对应权限"); - } - Integer studentType = record.getStudentType(); - //周计划 - String weekDaysJson = record.getWeekDays(); - JavaType javaType = objectMapper.contructCollectionType(ArrayList.class, WeekDay.class); - ArrayList weekDayList = objectMapper.fromJson(weekDaysJson,javaType); - //设备ID - String[] deviceArr = record.getSno().split(","); - List devices= new ArrayList<>(Arrays.asList(deviceArr)); - PermissionBean permissionBean = new PermissionBean(); - permissionBean.setWeekDays(weekDayList); - permissionBean.setDeviceIds(devices); - permissionBean.setSchoolId(String.valueOf(record.getSchoolId())); - permissionBean.setUserType(String.valueOf(EnumSzBusinessType.EnumUserType.STUDENT.code)); - FileUtils.getInstance().writeLogs("传入权限模板:" + JSON.toJSONString(permissionBean), "设置权限内容.txt"); - if (!StringUtils.isEmpty(permissionBean.getDeviceIds())) { - if(sendUserAsync.sendHKAuth(permissionBean,record.getId(),studentType)){ - return ResultGenerator.genSuccessResult(); - }else{ - return ResultGenerator.genFailResult("下发权限失败"); - } - } - return ResultGenerator.genSuccessResult(); + public Result sendHKAuth(@RequestParam("authId") Integer authId) { + return userOperateService.sendHKAuth(authId); } @ApiOperation("删除单卡权限2.0") @@ -112,25 +71,34 @@ public class UserOperateController { return userOperateService.sendFace(schoolId,type,deviceIds); } - // /** -// * 下发卡权限至指定设备(含批量) -// * @param permissionBean -// * @return -// */ -// @RequestMapping(value = "sendUserPermission", method = RequestMethod.POST) -// @ApiOperation("下发权限给设备") -// public boolean sendUserPermission(@RequestBody PermissionBean permissionBean) { -// log.error("permissionBean:{}", JSON.toJSONString(permissionBean)); -// FileUtils.getInstance().writeLogs("传入权限模板:" + JSON.toJSONString(permissionBean), "设置权限内容.txt"); -// -// return userOperateService.sendUserPermission(permissionBean); -// } -// -// -// @RequestMapping(value = "sendUserFace", method = RequestMethod.POST) -// @ApiOperation("下发人脸给设备") -// public boolean sendUserFace(@RequestParam("filePath") String filePath, @RequestParam("userId") String userId,@RequestParam("userType") Integer userType, -// @RequestParam("schoolId") String schoolId, @RequestParam("deviceId") String deviceId) { -// return userOperateService.sendUserFace(filePath,schoolId, userId,userType,deviceId); -// } + @ApiOperation(value = "照片下发2.1") + @RequestMapping(value = "sendFaceByThread", method = RequestMethod.POST) + public Result sendFaceByThread(@RequestBody SendFaceDto sendFaceDto) { + return userOperateService.sendUserFaceByThread(sendFaceDto); + } + + @ApiOperation(value = "删除下发失败人脸2.0") + @RequestMapping(value = "deleteFailFace", method = RequestMethod.POST) + public Result deleteFailFace(@RequestParam("schoolId") Integer schoolId) { + return userOperateService.deleteFailFace(schoolId); + } + + @RequestMapping(value = "sendFailFace", method = RequestMethod.POST) + @ApiOperation(value = "重新下发失败人脸2.0") + public Result sendFailFace(@RequestParam("schoolId") Integer schoolId) { + return userOperateService.sendFailFace(schoolId); + } + + @ApiOperation(value = "删除指定人脸2.0") + @RequestMapping(value = "deleteFace", method = RequestMethod.POST) + public Result deleteFace(@RequestParam("schoolId") Integer schoolId, @RequestParam("cards") String cards,@RequestParam("deviceIds") String deviceIds) { + return userOperateService.deleteFace(schoolId,cards,deviceIds); + } + + @ApiOperation(value = "测试下发人脸2.0") + @RequestMapping(value = "deleteFaceTest", method = RequestMethod.POST) + public Result deleteFaceTest(@RequestParam("schoolId") Integer schoolId,@RequestParam("deviceIds") String deviceIds) { + return userOperateService.deleteFaceTest(schoolId,deviceIds); + } + } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java index c746af4..95b7cd1 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java @@ -27,8 +27,8 @@ public interface DeviceDao { // @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}") // List getAttensWithIsKaoqin(@Param("IsKaoqin")int IsKaoqin); - @Update("update SZ_Attendance set isConnection = #{isConnection} where clint_id = #{clint_id}") - int updateDeviceStatu(@Param("isConnection") int isConnection, @Param("clint_id") String clint_id); + @Update("update SZ_Attendance set isConnection = #{isConnection},intime = #{inTime} where clint_id = #{clint_id}") + int updateDeviceStatu(@Param("isConnection") int isConnection, @Param("inTime") String inTime, @Param("clint_id") String clint_id); /** diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java index d9eb82b..77edd3a 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java @@ -29,18 +29,12 @@ public interface UserDao { */ @Select("select * from HS_StudentUpdateCard where ID > #{id} and StudentType = #{StudentType} order by AddTime desc") List getAllStudents(@Param("id") long id, @Param("StudentType") int StudentType); -// @Select("select * from HS_StudentUpdateCard where ID > #{id} order by AddTime desc") -// List getAllStudents(@Param("id")long id); - @Update("update SZ_V_School_Student set name = #{name} where student_id = #{student_id}") void updateTest(@Param("student_id") String student_id, @Param("name") String name); @Select("select Top(1) student_num from SZ_V_School_Student where student_id = #{student_id} and role_state = 1") String getStudent_Num(@Param("student_id") String student_id); -// @Select("select * from TK_QuestionBar") -// List getQuestion(); - @Insert("insert into TK_Question (Question,Qtype,Answer,CorrectAnswer,Analysis,State,Intime,ExamineFlag,ExamineUserId, " + "CreateUserId,SubjectId,SuggestionTime,DifficulteId,KnowledgeId,TestId,ChapterId,\n" + "GradeId,SourceId,OrderId,SId,StemId,AutomaticCorrection,SchoolId) values(#{Question},#{Qtype},#{Answer},#{CorrectAnswer},#{Analysis}" + @@ -262,6 +256,8 @@ public interface UserDao { /**************************************** add by xuquan **************************************/ DeviceAuthRecord getAuthRecord(Integer authId); + Integer getAuthRecordBySchoolId(@Param("schoolId") Integer schoolId, @Param("studentType") Integer studentType,@Param("status") Integer status); + void insertAuthRecord(DeviceAuthRecord record); void deleteAuthRecord(@Param("id") Integer authId); @@ -274,4 +270,10 @@ public interface UserDao { @Select("select clint_type from SZ_Attendance where clint_id = #{deviceId}") Integer getClintTypeByDeviceId(@Param("deviceId") String deviceId); + + List getStudentList(@Param("schoolId") Integer schoolId,@Param("studentType")Integer studentType,@Param("sex") List sex); + + List getTeacherList(@Param("schoolId") Integer schoolId); + + List getDeviceIds(@Param("schoolId") Integer schoolId,@Param("deviceId") String deviceId); } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/enums/EnumSzBusinessType.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/enums/EnumSzBusinessType.java index 55b5e35..6b5cae0 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/enums/EnumSzBusinessType.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/enums/EnumSzBusinessType.java @@ -41,10 +41,24 @@ public interface EnumSzBusinessType { public final int code; public final String name; + public int getCode() { + return code; + } + public String getName() { + return name; + } EnumStudentType(int code, String name) { this.code = code; this.name = name; } + public static EnumSzBusinessType.EnumStudentType getByCode(int code){ + for(EnumSzBusinessType.EnumStudentType enums: EnumSzBusinessType.EnumStudentType.values()){ + if(enums.getCode()==code){ + return enums; + } + } + return null; + } } /** diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java index 99362c5..452fcba 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java @@ -4,24 +4,17 @@ import com.sincere.haikangface.bean.Result; import com.sincere.haikangface.bean.face.AuthRecordDto; import com.sincere.haikangface.bean.face.DeviceAuthRecord; import com.sincere.haikangface.bean.face.PermissionBean; +import com.sincere.haikangface.bean.face.SendFaceDto; import org.apache.ibatis.annotations.Param; /** + * 用户操作业务接口 * @author xuquan * @date 2020/12/10 17:25 */ public interface UserOperateService { -// /** -// * 下发卡权限至指定设备(含批量)a/ -// * @param permissionBean -// * @return -// */ -// boolean sendUserPermission(PermissionBean permissionBean); -// -// boolean sendUserFace(String filePath, String schoolId,String userId,int userType, String deviceId); - /** * 创建权限 * @param recordDto @@ -30,6 +23,13 @@ public interface UserOperateService { boolean createHKAuth(AuthRecordDto recordDto); /** + * 下发权限 + * @param authId + * @return + */ + Result sendHKAuth(Integer authId); + + /** * 权限ID删除权限下发记录 * @param authId * @return @@ -43,8 +43,54 @@ public interface UserOperateService { */ DeviceAuthRecord getAuthRecord(Integer authId); + /** + * 重新下发人脸 + * @param userId + * @param deviceId + * @param userType + * @return + */ Result againSendFace(String userId,String deviceId,Integer userType); + /** + * 批量照片下发 + * @param schoolId + * @param type + * @param deviceIds + * @return + */ Result sendFace(String schoolId,Integer type,String deviceIds); + /** + * 多线程照片下发 + * @param sendFaceDto + * @return + */ + Result sendUserFaceByThread(SendFaceDto sendFaceDto); + + /** + * 删除失败表人脸 + * @param schoolId + * @return + */ + Result deleteFailFace(Integer schoolId); + + /** + * 下发失败表人脸 + * @param schoolId + * @return + */ + Result sendFailFace(Integer schoolId); + + /** + * 删除指定人脸 + * @param schoolId + * @param cards + * @param deviceIds + * @return + */ + Result deleteFace(Integer schoolId,String cards,String deviceIds); + + Result deleteFaceTest(Integer schoolId,String deviceIds); + } 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 759463f..253bd17 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 @@ -3,7 +3,10 @@ package com.sincere.haikangface.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.sincere.haikangface.CMSServer; +import com.sincere.haikangface.async.SendFaceBatchTask100; +import com.sincere.haikangface.async.SendFaceBatchTask253; import com.sincere.haikangface.async.SendUserAsync; import com.sincere.haikangface.bean.BaiduFaceRecorder; import com.sincere.haikangface.bean.SendRecordBean; @@ -12,17 +15,23 @@ import com.sincere.haikangface.bean.TeacherBean; import com.sincere.haikangface.dao.UserDao; import com.sincere.haikangface.enums.EnumSzBusinessType; import com.sincere.haikangface.mqtt.MqtUtils; -import com.sincere.haikangface.utils.*; +import com.sincere.haikangface.utils.CompressPic; +import com.sincere.haikangface.utils.DateUtils; +import com.sincere.haikangface.utils.FileUtils; +import com.sincere.haikangface.utils.HttpUtil; import com.sincere.haikangface.xiananDao.SendRecordDao; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.io.File; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.*; +import java.util.stream.Collectors; /** * 业务基础类 @@ -90,13 +99,13 @@ public class BaseService { if (cmsServer.getIsDeviceOnline(deviceId)) { String cardNo = Long.parseLong(getCard(card),16)+""; //下发海康设备 - sendUserAsync.sendStuToHaiKang(filePath,targetPath, cardNo, startTime, endTime, validTimeEnabled, name, deviceId, userType,schoolId); + sendUserAsync.sendStuToHaiKang(filePath,targetPath, cardNo, startTime, endTime, validTimeEnabled, name, deviceId, userType,schoolId,card); }else { sendUserAsync.uploadImgs(targetPath, card, name, deviceId, startTime, endTime, validTimeEnabled, userType); } return true; } catch (Exception e) { - log.error("下发人脸照失败,错误信息:"+ e.getMessage()); + log.error("下发人脸照失败,错误信息:"+e); return false; } } @@ -149,91 +158,93 @@ public class BaseService { /** * 保存成功下发记录 */ - public synchronized void sendSuccessRecord(String card, String faceUrl, String deviceId,String userType) { - long lon = Long.parseLong(card); - String resultCard = getCard(String.format("%08x", lon)).toUpperCase(); - StudentBean studentBean = null; - switch (userType) { - case "1"://老师 - studentBean = userDao.getTeacherWithCard(resultCard); - break; - case "2"://学生 - studentBean = userDao.getStudentWithCard(resultCard); - break; - case "3"://家长 - break; - } - if (null != studentBean) { - //用户ID - String userId = studentBean.getUser_id(); - //用户名称 - String userName = studentBean.getName(); - //所属学校 - int schoolId = studentBean.getSchool_id(); - String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); - String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + ""); - List sendRecordBeans = sendRecordDao.getRecordIsExit(deviceId,resultCard,userId); - SendRecordBean sendRecordBean =null; - if(sendRecordBeans.size()>0){ - sendRecordBean = sendRecordBeans.get(0); + public synchronized void sendSuccessRecord(String resultCard, String faceUrl, String deviceId,String userType) { + try{ + StudentBean studentBean = null; + switch (userType) { + case "1"://老师 + studentBean = userDao.getTeacherWithCard(resultCard); + break; + case "2"://学生 + studentBean = userDao.getStudentWithCard(resultCard); + break; + case "3"://家长 + break; } - if (null == sendRecordBean) { - sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName, - faceUrl, schoolId,null,null, Integer.parseInt(userType),18,1); + if (null != studentBean) { + //用户ID + String userId = studentBean.getUser_id(); + //用户名称 + String userName = studentBean.getName(); + //所属学校 + int schoolId = studentBean.getSchool_id(); + String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + ""); + List sendRecordBeans = sendRecordDao.getRecordIsExit(deviceId,resultCard,userId); + SendRecordBean sendRecordBean =null; + if(sendRecordBeans.size()>0){ + sendRecordBean = sendRecordBeans.get(0); + } + if (null == sendRecordBean) { + sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName, + faceUrl, schoolId,null,null, Integer.parseInt(userType),18,1); + } else { + sendRecordDao.updateFaceSuccessRecord(deviceId,resultCard,time,faceUrl,userName,userId); + } + FileUtils.getInstance().writeLogs(studentBean.toString() + "\r\n" + resultCard, "下发成功记录"); } else { - sendRecordDao.updateFaceSuccessRecord(deviceId,resultCard,time,faceUrl,userName,userId); + log.error("用户不存在: 对应卡号{} ," + resultCard); } - FileUtils.getInstance().writeLogs(studentBean.toString() + "\r\n" + resultCard, "下发成功记录"); - } else { - log.error("用户不存在: 对应卡号{} ," + resultCard); + }catch (Exception e){ + log.error("保存记录异常,异常信息:{}",e); } } - /** * 保存下发失败记录 - * @param card * @param faceUrl * @param deviceId * @param content * @param userType */ - public synchronized void sendFailRecord(String card, String faceUrl, String deviceId,String content,String userType) { - long lon = Long.parseLong(card); - String resultCard = getCard(String.format("%08x", lon)).toUpperCase(); - StudentBean studentBean = null; - switch (userType) { - case "1"://老师 - studentBean = userDao.getTeacherWithCard(resultCard); - break; - case "2"://学生 - studentBean = userDao.getStudentWithCard(resultCard); - break; - case "3"://家长 - break; - } - if (null != studentBean) { - //用户ID - String userId = studentBean.getUser_id(); - //用户名称 - String userName = studentBean.getName(); - //所属学校 - int schoolId = studentBean.getSchool_id(); - String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); - String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + ""); - List sendRecordBeans = sendRecordDao.getRecordIsExit(deviceId,resultCard,userId); - SendRecordBean sendRecordBean =null; - if(sendRecordBeans.size()>0){ - sendRecordBean = sendRecordBeans.get(0); + public synchronized void sendFailRecord(String resultCard, String faceUrl, String deviceId,String content,String userType) { + try{ + StudentBean studentBean = null; + switch (userType) { + case "1"://老师 + studentBean = userDao.getTeacherWithCard(resultCard); + break; + case "2"://学生 + studentBean = userDao.getStudentWithCard(resultCard); + break; + case "3"://家长 + break; } - if (null == sendRecordBean) { - sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName, - faceUrl, schoolId, content,9, Integer.parseInt(userType),18,2); - }else { - sendRecordDao.updateFaceFailRecord(deviceId,faceUrl,resultCard,time,content,userId); + if (null != studentBean) { + //用户ID + String userId = studentBean.getUser_id(); + //用户名称 + String userName = studentBean.getName(); + //所属学校 + int schoolId = studentBean.getSchool_id(); + String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + ""); + List sendRecordBeans = sendRecordDao.getRecordIsExit(deviceId,resultCard,userId); + SendRecordBean sendRecordBean =null; + if(sendRecordBeans.size()>0){ + sendRecordBean = sendRecordBeans.get(0); + } + if (null == sendRecordBean) { + sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName, + faceUrl, schoolId, content,9, Integer.parseInt(userType),18,2); + }else { + sendRecordDao.updateFaceFailRecord(deviceId,faceUrl,resultCard,time,content,userId); + } + } else { + log.error("用户不存在: 对应卡号: {}" + resultCard); } - } else { - log.error("用户不存在: 对应卡号{} ," + resultCard); + }catch (Exception e){ + log.error("保存记录失败,异常信息:{}",e); } } @@ -339,7 +350,7 @@ public class BaseService { * @param card * @return */ - public String getCard(String card) { + public static String getCard(String card) { if (card.length() == 8) { int length = card.length(); String result = card.substring(length - 2, length) + card.substring(length - 4, length - 2) + card.substring(length - 6, length - 4) @@ -512,4 +523,220 @@ public class BaseService { //插入百度人脸记录表 userDao.insertBaiduFaceRecorder(baiduFaceRecorder); } + + @Async + public void sendUserFaceByAsyncThread(Integer schoolId,Integer userType,Integer studentType,String sex,List deviceList){ + List deviceId_100 = new ArrayList<>(); + List deviceId_253 = new ArrayList<>(); + //过滤设备 + for (String sno : deviceList) { + //若100服务器有此设备再进行多线程执行下发人脸任务,否则请求253服务执行单个下发人脸 + if (cmsServer.getIsDeviceOnline(sno)) { + deviceId_100.add(sno); + }else{ + deviceId_253.add(sno); + } + } + //根据类型获取下发用户信息 + List studentBeanList = null; + if (userType == EnumSzBusinessType.EnumUserType.TEACHER.code) { + studentBeanList = getTeacherList(schoolId); + } + if (userType == EnumSzBusinessType.EnumUserType.STUDENT.code) { + studentBeanList = getStudentList(schoolId,studentType,sex); + } + log.info("统计共有下发用户数量:"+studentBeanList.size()); + if(deviceId_100.size()>0){ + //100服务器 + sendFaceToDevice100(deviceId_100,studentBeanList,String.valueOf(schoolId),userType); + } + if(deviceId_253.size()>0){ + //253服务器 + sendFaceToDevice253(deviceId_253,studentBeanList,String.valueOf(schoolId),userType); + } + } + + + protected void sendFaceToDevice100(List deviceIds,List studentBeanList,String schoolId,Integer userType){ + log.info("------------------------开始执行100服务,人脸照下发---------------------"); +// //启用多线程执行 +// CountDownLatch begin = new CountDownLatch(1); +// CountDownLatch end = new CountDownLatch(deviceIds.size()); +// ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-sendFace-runner-%d").build(); +// ExecutorService exe = new ThreadPoolExecutor(4,8,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue(),namedThreadFactory); +// for(String sno : deviceIds){ +// log.info("设备ID:"+ sno); +// exe.execute(new SendFaceBatchTask100(schoolId,userType,sno,studentBeanList,FileUtils.getInstance(),sendUserAsync,begin,end)); +// } +// begin.countDown(); +// try { +// end.await(); +// }catch (Exception e){ +// log.error("下发人脸照失败"+e); +// e.printStackTrace(); +// } +// exe.shutdown(); +// System.out.println("统计100服务器总共有"+deviceIds.size()+"个设备,处理完毕"); + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, 10); + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); + //下发标识:详情见枚举 EnumHkOperateType + int validTimeEnabled = EnumSzBusinessType.EnumHkOperateType.ADD.code; + for(StudentBean studentBean : studentBeanList){ + try{ + String userName= studentBean.getName(); + String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); + String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num(); + String typeName=userType.intValue()==1?"Teacher":"Student"; + if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ + continue; + } +// String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; + String path = "D:\\haikangface\\School" + schoolId + "\\" + typeName; + String filePath=""; + if(photo.indexOf("f0i5l7e5")!=-1){ + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\"); + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr; + } else{ + //以学籍号为名的文件名 + String fileName = photo.split(typeName +"/")[1]; + //100服务器上人脸照绝对路径 + filePath = path+ "\\" + fileName; + } + log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); + File file = new File(filePath);//图片 + if(file.exists()){ + String targetPath = FileUtils.picPathComp + file.getName(); + try { + CompressPic.CompressPic(file.getAbsolutePath(), targetPath); + } catch (Exception e) { + log.error("压缩图片失败"); + e.printStackTrace(); + continue; + } + for(String sno : deviceIds){ + if(cmsServer.getIsDeviceOnline(sno)){ + if(!StringUtils.isBlank(cardNum)){ + String cardNumLong = Long.parseLong(getCard(cardNum),16) + ""; + //下发100海康设备 + sendUserAsync.sendStuToHaiKang(file.getAbsolutePath(),targetPath,cardNumLong, startTime, endTime, validTimeEnabled, userName, sno, String.valueOf(userType),Integer.parseInt(schoolId),cardNum); + } + }else{ + log.error("100服务器,设备不在线"); + } + + } + } + }catch (Exception e){ + log.error("人脸下发失败"); + e.printStackTrace(); + continue; + } + } + } + + protected void sendFaceToDevice253(List deviceIds,List studentBeanList,String schoolId,Integer userType){ + log.info("------------------------开始执行253服务,人脸照下发---------------------"); +// //启用多线程执行 +// CountDownLatch begin = new CountDownLatch(1); +// CountDownLatch end = new CountDownLatch(deviceIds.size()); +// ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-sendFace-runner-%d").build(); +// ExecutorService exe = new ThreadPoolExecutor(8,8,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue(),namedThreadFactory); +// for(String sno : deviceIds){ +// log.info("设备ID:"+ sno); +// exe.execute(new SendFaceBatchTask253(schoolId,userType,sno,studentBeanList,sendUserAsync,begin,end)); +// } +// begin.countDown(); +// try { +// end.await(); +// }catch (Exception e){ +// log.error("下发人脸照失败"+e); +// e.printStackTrace(); +// } +// exe.shutdown(); +// System.out.println("统计253服务器总共有"+deviceIds.size()+"个设备,处理完毕"); + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, 10); + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); + //下发标识:详情见枚举 EnumHkOperateType + int validTimeEnabled = EnumSzBusinessType.EnumHkOperateType.ADD.code; + for(StudentBean studentBean : studentBeanList){ + try{ + String userName= studentBean.getName(); + String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto(); + String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num(); + String typeName=userType.intValue()==1?"Teacher":"Student"; + if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ + continue; + } + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; + String filePath=""; + if(photo.indexOf("f0i5l7e5")!=-1){ + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\"); + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr; + } else{ + //以学籍号为名的文件名 + String fileName = photo.split(typeName +"/")[1]; + //100服务器上人脸照绝对路径 + filePath = path+ "\\" + fileName; + } + log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); + for(String sno : deviceIds) { + //下发253服务器 + sendUserAsync.uploadImgs(filePath, cardNum, userName, sno, startTime, endTime, validTimeEnabled, String.valueOf(userType)); + } + }catch (Exception e){ + log.error("人脸下发失败"); + e.printStackTrace(); + continue; + } + } + } + + + public List getStudentCard(int schoolId, int studentType, String sex) { + String[] msg = sex.split(","); + List list = new ArrayList<>(); + for(String s : msg){ + list.add(Integer.valueOf(s)); + } + return userDao.getStudentCard(schoolId,studentType, list); + } + + /** + * 获取学校下学生数据 + * @param schoolId + * @param studentType + * @param sex + * @return + */ + public List getStudentList(Integer schoolId, Integer studentType, String sex) { + List list = new ArrayList<>(); + if(StringUtils.isNotBlank(sex)){ + String[] msg = sex.split(","); + for(String s : msg){ + list.add(Integer.valueOf(s)); + } + } + List students = userDao.getStudentList(schoolId,studentType,list); + //去重重复数据 + List studentList = students.stream().collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new)); + return studentList; + } + + /** + * 获取学校下老师数据 + * @param schoolId + * @return + */ + public List getTeacherList(Integer schoolId) { + List teachers = userDao.getTeacherList(schoolId); + //去重重复数据 + List teacherist = teachers.stream().collect(Collectors.collectingAndThen( + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getTeacher_num))), ArrayList::new)); + return teacherist; + } } 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 516cd9a..94e0c42 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 @@ -1,24 +1,35 @@ package com.sincere.haikangface.service.impl; + +import com.alibaba.fastjson.JSON; +import com.fasterxml.jackson.databind.JavaType; import com.sincere.haikangface.CMSServer; import com.sincere.haikangface.async.SendUserAsync; -import com.sincere.haikangface.bean.*; +import com.sincere.haikangface.bean.Result; +import com.sincere.haikangface.bean.ResultGenerator; +import com.sincere.haikangface.bean.SendRecordBean; +import com.sincere.haikangface.bean.StudentBean; import com.sincere.haikangface.bean.face.*; +import com.sincere.haikangface.control.UserControl; import com.sincere.haikangface.dao.DeviceDao; import com.sincere.haikangface.dao.UserDao; +import com.sincere.haikangface.enums.EnumSzBusinessType; import com.sincere.haikangface.service.UserOperateService; import com.sincere.haikangface.utils.*; import com.sincere.haikangface.xiananDao.SendRecordDao; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; + import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.*; /** - * TODO - * - * @author Administrator + * 海康设备用户操作业务实现 + * @author xuquan * @date 2020/12/10 21:26 */ @Slf4j @@ -37,6 +48,8 @@ public class UserOperateServiceImpl implements UserOperateService { BaseService baseService; @Autowired SendUserAsync sendUserAsync; + @Autowired + UserControl userControl; private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper(); @@ -45,18 +58,20 @@ public class UserOperateServiceImpl implements UserOperateService { try { String sexStr = recordDto.getWeekDays().get(0).getSex(); //1学生类型,当为组时为群组iD - int studentType = recordDto.getStudentType(); + Integer studentType = recordDto.getStudentType(); //学校ID - int schoolId = recordDto.getSchoolId(); + Integer schoolId = recordDto.getSchoolId(); //设备ID List deviceIds = recordDto.getSnList(); //1 学生类型 2 学生组 - int type = recordDto.getType(); + Integer type = recordDto.getType(); //权限类型 - int authType = recordDto.getAuthType(); + Integer authType = recordDto.getAuthType(); //权限周计划 List weekDay = recordDto.getWeekDays(); String weekDayJson = objectMapper.toJson(weekDay); + //设备类型 + Integer deviceType = userDao.getClintTypeByDeviceId(deviceIds.get(0)); String deviceStr = ""; for (String sn : deviceIds) { deviceStr += sn + ","; @@ -65,16 +80,15 @@ public class UserOperateServiceImpl implements UserOperateService { Date end = DateUtils.string2Date("2030-01-01", DateUtils.format1); deviceStr = deviceStr.substring(0, deviceStr.length() - 1); //保存权限计划 - saveDeviceAuth(schoolId, deviceStr, studentType, start, end, weekDayJson, sexStr, type, authType); + saveDeviceAuth(schoolId, deviceStr, studentType, start, end, weekDayJson, sexStr, type, authType,deviceType); return true; } catch (Exception e) { - e.printStackTrace(); - log.error("创建权限失败"); + log.error("创建权限失败,异常信息:{}",e); } return false; } - private void saveDeviceAuth(int schoolId, String sn, int studentType, Date start, Date end, String json, String sexStr, int type, int authType) { + private void saveDeviceAuth(Integer schoolId, String sn, Integer studentType, Date start, Date end, String json, String sexStr, Integer type, Integer authType,Integer deviceType) { //设置权限信息 DeviceAuthRecord record = new DeviceAuthRecord(); //学校ID @@ -89,8 +103,14 @@ public class UserOperateServiceImpl implements UserOperateService { record.setStudentType(studentType); //性别 record.setSex(sexStr); - //时段 - record.setShiduan(null); + if(deviceType.intValue()== 22 || deviceType.intValue()== 29){ + Integer shiduan = userDao.getAuthRecordBySchoolId(schoolId,studentType,null); + //如果是大华一体机 + record.setShiduan(shiduan!=null?shiduan+1+"":1+""); + }else{ + //时段 + record.setShiduan(null); + } //计划状态1正常2停用 record.setState(1); //计划下发状态1下发成功2下发失败3待下发 @@ -103,6 +123,59 @@ public class UserOperateServiceImpl implements UserOperateService { record.setaType(type); //插入权限记录表AC_DeviceAuthRecord userDao.insertAuthRecord(record); + log.info("创建权限周计划成功", JSON.toJSONString(record)); + } + + @Override + public Result sendHKAuth(Integer authId) { + DeviceAuthRecord record = userDao.getAuthRecord(authId); + if(record ==null){ + log.info("未查询到对应权限ID: {}, 权限计划。",authId); + return ResultGenerator.genFailResult("未查询到对应权限"); + } + //设备ID + String[] deviceArr = record.getSno().split(","); + List devices= new ArrayList<>(Arrays.asList(deviceArr)); + if(devices.size()<1){ + return ResultGenerator.genFailResult("未选择下发设备"); + } + //学生类型 + Integer studentType = record.getStudentType(); + //周计划 + String weekDaysJson = record.getWeekDays(); + JavaType javaType = objectMapper.contructCollectionType(ArrayList.class, WeekDay.class); + ArrayList weekDayList = objectMapper.fromJson(weekDaysJson,javaType); + //设备类型 + Integer clintType = userDao.getClintTypeByDeviceId(devices.get(0)); + if(clintType.intValue()== 22 || clintType.intValue()== 29){ + PermissionDHBean dhBean = new PermissionDHBean(); + dhBean.setWeekDays(weekDayList); + dhBean.setDeviceIds(devices); + dhBean.setChannel(record.getShiduan()); + dhBean.setCustomName(EnumSzBusinessType.EnumStudentType.getByCode(studentType).code+""); + dhBean.setStudentType(String.valueOf(studentType)); + //发送大华设备 + HttpUtil.sendDHPermission(dhBean); + log.info("map{}", JSON.toJSONString(dhBean)); + //更新计划位下发成功 + userDao.updateAuthRecord(record.getId(),1); + return ResultGenerator.genSuccessResult(); + } + if(clintType.intValue()== 18 || clintType.intValue()== 28){ + PermissionBean permissionBean = new PermissionBean(); + permissionBean.setWeekDays(weekDayList); + permissionBean.setDeviceIds(devices); + permissionBean.setSchoolId(String.valueOf(record.getSchoolId())); + permissionBean.setUserType(String.valueOf(EnumSzBusinessType.EnumUserType.STUDENT.code)); + if (!org.springframework.util.StringUtils.isEmpty(permissionBean.getDeviceIds())) { + if(sendUserAsync.sendHKAuth(permissionBean,record.getId(),studentType)){ + return ResultGenerator.genSuccessResult(); + }else{ + return ResultGenerator.genFailResult("下发权限失败"); + } + } + } + return ResultGenerator.genSuccessResult(); } @Override @@ -149,8 +222,8 @@ public class UserOperateServiceImpl implements UserOperateService { File file = new File(filePath.trim()); if (!file.exists()) { log.error("文件不存在:" + filePath); - String card = Long.parseLong(baseService.getCard(cardNum), 16)+""; - baseService.sendFailRecord(card, filePath, deviceId, "文件不存在", String.valueOf(userType)); +// String card = Long.parseLong(baseService.getCard(cardNum), 16)+""; + baseService.sendFailRecord(cardNum, filePath, deviceId, "文件不存在", String.valueOf(userType)); return ResultGenerator.genFailResult("文件不存在"); } //设备类型 @@ -170,7 +243,7 @@ public class UserOperateServiceImpl implements UserOperateService { } catch (Exception e) { log.error("图片压缩失败"); } - boolean isOk = baseService.sendImg(photo, targetPath, deviceId, cardNum, userName, String.valueOf(userType), schoolId); + boolean isOk = baseService.sendImg(file.getAbsolutePath(), targetPath, deviceId, cardNum, userName, String.valueOf(userType), schoolId); if (isOk) { return ResultGenerator.genSuccessResult(); } else { @@ -217,10 +290,10 @@ public class UserOperateServiceImpl implements UserOperateService { //设备类型 Integer clintType = userDao.getClintTypeByDeviceId(idLists.get(0)); if(clintType.intValue()== 22 || clintType.intValue()== 29){ - sendUserAsync.uploadDHImg(schoolId,userType,deviceIds); + HttpUtil.uploadDHImg(schoolId,userType,deviceIds); } if(clintType.intValue()== 18 || clintType.intValue()== 28){ - sendUserAsync.uploadHkImg(schoolId,userType,deviceIds); + HttpUtil.uploadHkImg(schoolId,userType,deviceIds); } int fileSize = filesStudent.length; int clintNum = deviceArr.length; @@ -238,260 +311,283 @@ public class UserOperateServiceImpl implements UserOperateService { return ResultGenerator.genFailResult("下发失败"); } } -} -// p }ublic boolean sendPermiss2(PermissionBean permissionBean, int i) { -// return sendImg(filePath, targetPath, deviceId, card, name, userType); String userType = permissionBean.getUserType(); -// String schoolId = permissionBean.getSchoolId(); -// //设备ID,多设备户英文逗号,隔开 -// List deviceIds = permissionBean.getDeviceIds(); -// //用户iD,批量用户英文逗号,隔开 -// String userIds = permissionBean.getUserIds(); -// String[] userIdsStr = userIds.split(","); -// -// List cardNumList = new ArrayList<>(); -// if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.TEACHER.code) { -// List cardList = getUserCard(userIds,EnumSzBusinessType.EnumUserType.TEACHER.code); -// cardNumList.addAll(cardList); -// } -// if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.STUDENT.code) { -// for (String userId : userIdsStr) { -// String cardNum = userDao.getStudentCardWithUserId(schoolId,userId); -// cardNumList.add(cardNum); -// } -// } -// //权限周计划 -// List weekDays = permissionBean.getWeekDays(); -// //存储周计划时段 -// Map> map = new HashMap<>(); -// for (WeekDay weekDay : weekDays) { -// //整理周和时间段 -// initWeedayAndTimes(weekDay, map); -// senPsermiss(permissionBean, map, deviceIds, cardNumList, i); -// } -// log.error("map{}", JSON.toJSONString(map)); -// return true; -// } + @Override + public Result sendUserFaceByThread(SendFaceDto sendFaceDto) { + //下发设备集合 + String[] deviceArr = sendFaceDto.getsNos().split(","); + List deviceList= new ArrayList<>(Arrays.asList(deviceArr)); + if(deviceList.size()<1){ + return ResultGenerator.genFailResult("未选择下发设备"); + } + Integer schoolId = sendFaceDto.getSchoolId(); + Integer studentType = sendFaceDto.getStudentType(); + String sex = sendFaceDto.getSex(); + Integer userType = null; + if(sendFaceDto.getType().intValue()==0 || sendFaceDto.getType().intValue()==1){ + userType = 2; + }else{ + userType = 1; + } + //设备类型 + Integer clintType = userDao.getClintTypeByDeviceId(deviceList.get(0)); + if(clintType.intValue()== 22 || clintType.intValue()== 29){ + //发送大华设备 + HttpUtil.uploadDHImg(String.valueOf(schoolId),userType,sendFaceDto.getsNos()); + } + if(clintType.intValue()== 18 || clintType.intValue()== 28){ + //发送海康设备 + baseService.sendUserFaceByAsyncThread(schoolId,userType,studentType,sex,deviceList); + } + return ResultGenerator.genSuccessResult(); + } + + @Override + public Result deleteFailFace(Integer schoolId) { + if(schoolId ==null){ + return ResultGenerator.genFailResult("删除失败人脸,学校ID不能为空"); + } + List recordBeanList = sendRecordDao.getFailRecord(schoolId); + if(recordBeanList.size()>0){ + for(SendRecordBean recordBean : recordBeanList){ + try{ + //人脸卡号 + String cardNum = recordBean.getNum(); + //设备ID、设备类型 + String deviceId = recordBean.getDeviceID(); + Integer clintType = userDao.getClintTypeByDeviceId(deviceId); + //删除海康人脸 + if(clintType.intValue()== 18 || clintType.intValue()== 28){ + if (cmsServer.getIsDeviceOnline(deviceId)) { + String cardNo = Long.parseLong(baseService.getCard(cardNum),16) + ""; + cmsServer.deleteCard(deviceId, cardNo,schoolId); + }else{ + //不在线,去253服务器上删除 + HttpUtil.deleteCard(deviceId, cardNum); + } + } + //删除大华人脸 + if(clintType.intValue()== 22 || clintType.intValue()== 29){ + HttpUtil.deleteDHFace(schoolId,cardNum,deviceId); + } + }catch (Exception e){ + log.error("删除失败人脸失败,异常信息:{}",e); + continue; + } + } + } + return ResultGenerator.genSuccessResult(); + } + + @Override + public Result sendFailFace(Integer schoolId) { + if(schoolId ==null){ + return ResultGenerator.genFailResult("删除失败人脸,学校ID不能为空"); + } + List recordBeanList = sendRecordDao.getFailRecord(schoolId); + if(recordBeanList.size()>0){ + for(SendRecordBean recordBean : recordBeanList){ + try{ + //用户类型1老师2学生 + int userType = recordBean.getUserType(); + //人脸卡号 + String cardNum = recordBean.getNum(); + //设备ID、设备类型 + String deviceId = recordBean.getDeviceID(); + Integer clintType = userDao.getClintTypeByDeviceId(deviceId); + //2.重新下发 + StudentBean studentBean= null; + String typeName =""; + if(userType ==1){ + typeName= "Teacher"; + studentBean = userDao.getTeacherWithCard(cardNum); + }else{ + typeName= "Student"; + studentBean= userDao.getStudentWithCard(cardNum); + } + if(studentBean==null){ + continue; + } + String studentCode = studentBean.getStudentCode(); + String filePath=""; + //下发海康人脸 + if(clintType.intValue()== 18 || clintType.intValue()== 28){ + //1.先删除人脸 + if (cmsServer.getIsDeviceOnline(deviceId)) { + String cardNo = Long.parseLong(baseService.getCard(cardNum),16) + ""; + cmsServer.deleteCard(deviceId, cardNo,schoolId); + }else{ + //不在线,去253服务器上删除 + HttpUtil.deleteCard(deviceId, cardNum); + } + //100服务器文件目录绝对路径 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; + String photo= userType==1?studentBean.getFace():studentBean.getPhoto(); + if (StringUtils.isBlank(photo)){ + continue; + } + if(photo.indexOf("f0i5l7e5")!=-1){ + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\"); + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr; + } else{ + //以学籍号为名的文件名 + String fileName = photo.split(typeName +"/")[1]; + //100服务器上人脸照绝对路径 + filePath = path+ "\\" + fileName; + } + log.info("卡号:{},人脸路径:{}, ",cardNum, filePath); + File file = new File(filePath);//图片 + String targetPath = FileUtils.picPathComp + file.getName(); + try { + CompressPic.CompressPic(file.getAbsolutePath(), targetPath); + } catch (IOException e) { + log.error("图片压缩失败",e); + continue; + } + String userName= studentBean.getName(); + baseService.sendImg(file.getAbsolutePath(), targetPath, deviceId, cardNum, userName, String.valueOf(userType), schoolId); + } + //下发大华人脸 + if(clintType.intValue()== 22 || clintType.intValue()== 29){ + HttpUtil.uploadDHImgForOne(filePath,schoolId,studentCode,clintType,deviceId); + } + }catch (Exception e){ + log.error("下发失败表人脸失败,异常信息:{}",e); + continue; + } + } + } + return ResultGenerator.genSuccessResult(); + } -// -// // @Override -//// public boolean sendUserPermission(PermissionBean permissionBean) { -//// //设备ID,多设备户英文逗号,隔开 -//// List deviceIds = permissionBean.getDeviceIds(); -//// if ((CollectionUtils.isEmpty(deviceIds))) { -//// log.error("下发权限,设备ID为空"); -//// return false; -//// } -//// //用户类型 -//// String userType = permissionBean.getUserType(); -//// //学校ID -//// String schoolId = permissionBean.getSchoolId(); -//// -//// //用户iD,批量用户英文逗号,隔开 -//// String userIds = permissionBean.getUserIds(); -//// String[] userIdsStr = userIds.split(","); -//// -//// List cardNumList = new ArrayList<>(); -//// if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.TEACHER.code) { -//// List cardList = getTeacherUserNum(userIds,EnumSzBusinessType.EnumUserType.TEACHER.code); -//// cardNumList.addAll(cardList); -//// } -//// if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.STUDENT.code) { -//// for (String userId : userIdsStr) { -//// String cardNum = userDao.getStudentCardWithUserId(schoolId,userId); -//// if(StringUtils.isNotBlank(cardNum)){ -//// cardNumList.add(cardNum); -//// } -//// } -//// } -//// for(String deviceId : deviceIds){ -//// //权限周计划 -//// List weekDays = permissionBean.getWeekDays(); -//// //存储周计划时段 -//// Map> map = new HashMap<>(); -//// for (WeekDay weekDay : weekDays) { -//// //整理周和时间段 -//// initWeedayAndTimes(weekDay, map); -//// //下发权限 -//// cmsServer.(permissionBean, map, cardNumList,deviceId); -//// } -//// log.info("map{}", JSON.toJSONString(map)); -//// } -//// return true; -//// } -//// -//// /** -//// * 整理时间 -//// * @param weekDay -//// * @param map -//// */ -//// private void initWeedayAndTimes(WeekDay weekDay, Map> map) { -//// -//// String weekDayStr = weekDay.getWeekDay(); -//// String[] weekDays = weekDayStr.split(","); -//// -//// List weekTimes = weekDay.getWeekTimes(); -//// -//// for (int i = 0; i < weekDays.length; i++) { -//// int weekDayIndex = Integer.parseInt(weekDays[i]); -//// if (map.containsKey(weekDayIndex)) {//周已经有时间段 -//// List weekTimeList = map.get(weekDayIndex); -//// for (WeekTime wee : weekTimes) { -//// weekTimeList.add(wee); -//// } -//// map.put(weekDayIndex, weekTimeList); -//// } else { -//// List weekTimes1 = new ArrayList<>(); -//// weekTimes1.addAll(weekTimes); -//// map.put(weekDayIndex, weekTimes1); -//// } -//// } -//// -//// } -//// -//// /** -//// * -//// * @param userIds -//// * @param userType -//// * @return -//// */ -//// private List getTeacherUserNum(String userIds, int userType) { -//// List cards = new ArrayList<>(); -//// try { -//// String[] userIdsStr = userIds.split(","); -//// for (String userId : userIdsStr) { -//// TeacherBean teacherBean = null; -//// if (userType == EnumSzBusinessType.EnumUserType.TEACHER.code) {//教师 -//// teacherBean = userDao.getTeacherWithUserId(userId); -//// if (null != teacherBean) { -//// String card = teacherBean.getTeacer_num(); -//// if (!StringUtils.isEmpty(card)) { -//// cards.add(card); -//// } -//// } else { -//// log.error("教师用户不存在"); -//// } -//// } -//// } -//// -//// } catch (Exception e) { -//// e.printStackTrace(); -//// } -//// return cards; -//// } -//// -//// /** -//// * 把卡号和权限下发到对应的设备 -//// * -//// * @param permissionBean -//// * @param map -//// * @param cardNumList -//// * @return -//// */ -//// private boolean sendPermission(PermissionBean permissionBean, Map> map,List cardNumList,String deviceId) { -//// String userType = permissionBean.getUserType(); -//// if (null == cardNumList || cardNumList.size() == 0) { -//// log.error("卡号为空"); -//// return false; -//// } -//// //设备在线 -//// boolean onLine = cmsServer.getIsDeviceOnline(deviceId); -//// if (onLine) { -//// for (String cardNum : cardNumList) { -//// //卡号取反 -//// String newCardNum = getCardNo(cardNum); -//// if (StringUtils.isBlank(newCardNum)) { -//// continue; -//// } -//// //获取十进制卡 -//// newCardNum = String.valueOf(NumConvertUtil.hex16To10(newCardNum)); -//// //设置卡权限计划模板 -//// if(cmsServer.SetCardWeekPlan(deviceId, HKXmlUtils.getInstance().SetCardTemplate())){ -//// log.info("设置卡权限计划模板成功,成功卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType); -//// }else{ -//// log.error("设置卡权限计划模板失败,失败卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType); -//// } -//// //设置卡权限周计划 -//// if(cmsServer.SetCardWeekPlan(deviceId, HKXmlUtils.getInstance().SetCardWeekPlan())){ -//// log.info("设置卡权限周计划成功,成功卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType); -//// }else{ -//// log.error("设置卡权限周计划失败,失败卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType); -//// } -//// for (Map.Entry> weeKdayMap : map.entrySet()) { -//// int week = weeKdayMap.getKey(); -//// List weekTimes = weeKdayMap.getValue(); -//// -//// StringBuffer stringBuffer = new StringBuffer(); -//// for (WeekTime weekTime : weekTimes) { -//// //周计化时间段 -//// String weekPlanTimes = HKXmlUtils.getInstance().SetCardWeekPlanTimes(weekTime.getStartTime(), weekTime.getEndTime()); -//// stringBuffer.append(weekPlanTimes); -//// } -//// //卡权限周计划时间段 -//// String weekPlanTime = HKXmlUtils.getInstance().SetCardWeekPlanTime(stringBuffer.toString(), "" + week); -//// FileUtils.getInstance().writeLogs(weekPlanTime, "设置卡权限周计划时间.txt"); -//// //设置卡权限 -//// String serCardRightCfg = HKXmlUtils.getInstance().SetCardRightCfg(newCardNum); -//// //设置卡权限周计划 -//// if(cmsServer.SetCardWeekPlan(deviceId, weekPlanTime)){ -//// log.info("设置卡权限计划模板成功,成功卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType); -//// }else{ -//// log.error("设置卡权限计划模板失败,失败卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType); -//// } -//// if(cmsServer.SetCardWeekPlan(deviceId, serCardRightCfg)){ -//// log.info("设置卡权限周计划成功,成功卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType); -//// }else{ -//// log.error("设置卡权限周计划失败,失败卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType); -//// } -//// } -//// } -//// } else { -//// //设备不在线 -//// log.warn("设备: {},不在线.前往253服务器下发", deviceId); -//// HttpUtil.sendPermission2HK(permissionBean); -//// } -//// return true; -//// } -//// -//// -//// /** -//// * 卡号两两取反 -//// * -//// * @param cardDex -//// * @return -//// */ -//// public static String getCardNo(String cardDex) { -//// String cardR = ""; -//// int length = cardDex.length(); -//// if (length != 8) { -//// log.error("卡号格式不正确: 位数有误" + cardDex); -//// return cardDex; -//// } -//// while (length > 0) { -//// length -= 2; -//// cardR += cardDex.substring(length, length + 2); -//// } -//// return cardR; -//// } -//// -//// @Override -//// public boolean sendUserFace(String filePath, String schoolId,String userId, int userType, String deviceId) { -//// File file = new File(filePath); -//// if(file ==null){ -//// log.error("用户人脸不存在"); -//// sendRecoderUtils.sendFail(sendRecordDao, Long.parseLong(getCard(card), 16) + "", filePath, deviceId, userDao, "文件不存在", userType); -//// return false; -//// } -//// String cardNum = userDao.getStudentCardWithUserId(schoolId,userId); -//// String fileName = file.getName(); -//// //文件相对路径 -//// String targetPath = FileUtils.picPathComp + fileName; -//// try { -//// CompressPic.CompressPic(filePath, targetPath); -//// } catch (Exception e) { -//// log.error("人脸图片压缩失败.",e.getMessage()); -//// return false; -//// } -//// return sendImg(filePath, targetPath, deviceId, card, name, userType); -//// } -//} + @Override + public Result deleteFace(Integer schoolId,String cards,String deviceIds) { + if(StringUtils.isBlank(cards)){ + return ResultGenerator.genFailResult("删除人脸卡号"); + } + String[] cardArr = cards.split(","); + List cardList= new ArrayList<>(Arrays.asList(cardArr)); + for(String card : cardList){ + if(StringUtils.isNotBlank(deviceIds)){ + //设备集合 + String[] deviceArr = deviceIds.split(","); + List deviceList= new ArrayList<>(Arrays.asList(deviceArr)); + for(String sno : deviceList){ + try{ + //设备类型 + Integer clintType = userDao.getClintTypeByDeviceId(sno); + if(clintType.intValue()== 18 || clintType.intValue()== 28){ + //删除海康设备人脸 + if (cmsServer.getIsDeviceOnline(sno)) { + String cardNo = Long.parseLong(baseService.getCard(card),16) + ""; + cmsServer.deleteCard(sno, cardNo,schoolId); + }else{ + HttpUtil.deleteCard(sno, card); + } + } + if(clintType.intValue()== 22 || clintType.intValue()== 29){ + //删除大华设备人脸 + HttpUtil.deleteDHFace(schoolId,card,sno); + } + }catch (Exception e){ + log.error("删除人脸失败,异常信息:{}",e); + continue; + } + } + }else{ + List clintIds = userDao.getDeviceIds(schoolId,null); + if(clintIds.size()>0){ + for(String sno : clintIds){ + try{ + //设备类型 + Integer clintType = userDao.getClintTypeByDeviceId(sno); + if(clintType.intValue()== 18 || clintType.intValue()== 28){ + //删除海康设备人脸 + if (cmsServer.getIsDeviceOnline(sno)) { + String cardNo = Long.parseLong(baseService.getCard(card),16) + ""; + cmsServer.deleteCard(sno, cardNo,schoolId); + }else{ + HttpUtil.deleteCard(sno, card); + } + } + if(clintType.intValue()== 22 || clintType.intValue()== 29){ + //删除大华设备人脸 + HttpUtil.deleteDHFace(schoolId,card,sno); + } + }catch (Exception e){ + log.error("删除人脸失败,异常信息:{}",e); + continue; + } + } + } + } + } + return ResultGenerator.genSuccessResult(); + } + + @Override + public Result deleteFaceTest(Integer schoolId, String deviceIds) { + List list = baseService.getStudentList(schoolId,null,""); + if(StringUtils.isBlank(deviceIds)){ + log.warn("未选择下发设备"); + return ResultGenerator.genFailResult("未选择下发设备"); + } + String[] deviceArr = deviceIds.split(","); + List idLists= new ArrayList<>(Arrays.asList(deviceArr)); + for(StudentBean studentBean : list){ + for(String sno : idLists){ + List bean = sendRecordDao.getRecordIsExit(sno,studentBean.getStudent_num(),studentBean.getUser_id()); + if(bean.size()>0){ + continue; + } + try{ + String userName= studentBean.getName(); + String photo = studentBean.getPhoto(); + String cardNum =studentBean.getStudent_num(); + String typeName="Student"; + if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){ + continue; + } + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; + String filePath=""; + if(photo.indexOf("f0i5l7e5")!=-1){ + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\"); + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr; + } else{ + //以学籍号为名的文件名 + String fileName = photo.split(typeName +"/")[1]; + //100服务器上人脸照绝对路径 + filePath = path+ "\\" + fileName; + } + log.info("卡号:{},人脸路径:{}, ",cardNum,filePath); + File file = new File(filePath);//图片 + if(file.exists()){ + String targetPath = FileUtils.picPathComp + file.getName(); + try { + CompressPic.CompressPic(file.getAbsolutePath(), targetPath); + } catch (Exception e) { + log.error("压缩图片失败"); + e.printStackTrace(); + continue; + } + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, 10); + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); + if(!cmsServer.getIsDeviceOnline(sno)){ + if(!StringUtils.isBlank(cardNum)){ + //下发253服务器 + sendUserAsync.uploadImgs(targetPath, cardNum, userName, sno, startTime, endTime, 1, "2"); + } + } + } + }catch (Exception e){ + log.error("人脸下发失败"); + e.printStackTrace(); + continue; + } + } + } + return ResultGenerator.genSuccessResult(); + } +} diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java index d2cc1d7..5e15a3a 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java @@ -52,7 +52,6 @@ public class AlarmUtils { public void deleAlarm(String strXML) { //人脸抓拍机器 if (strXML.contains("FACESNAPREPORT")) { -// System.out.println("人脸抓拍机:" + strXML); BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder(); baiduFaceRecorder.setUploadImgUrl(strXML); baiduFaceRecorder.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); @@ -61,8 +60,6 @@ public class AlarmUtils { deviceId = deviceId.replace("DeviceID>",""); deviceId = deviceId.replace("= 200) { @@ -40,12 +37,9 @@ public class CompressPic { width = bufferedImage1.getWidth(null); height = bufferedImage1.getHeight(null); fileLength = file1.length(); -// System.out.println("最终宽高:" + "width:" + width + "--height:" + height); -// System.out.println("fileLength1:" + fileLength); fileInputStream.close(); } } -// System.out.printf("图片大小:"+fileLength/1024); fileInputStreamSrc.close(); return targetPath; } @@ -54,31 +48,18 @@ public class CompressPic { try { File targetFile = new File(targetPath); if (!targetFile.exists()) targetFile.createNewFile(); - if (width > height) { int width1 = width; width = height; height = width1; } - BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(bufferedImage, 0, 0, width, height, null); // 绘制缩小后的图 FileOutputStream deskImage = new FileOutputStream(targetPath); // 输出到文件流 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(deskImage); encoder.encode(tag); // 近JPEG编码 -// boolean write = ImageIO.write(tag, "jpg", deskImage); - /*if (write) { - int angle = ImageUtils.getImgRotateAngle(targetPath); - System.out.println("angle:" + angle); - if (angle == 0) { -// ImageUtils.rotatePhonePhoto(targetPath, 90); - } - - }*/ -// System.out.println("读写图片:" + write); deskImage.close(); } catch (Exception e) { -// System.out.println("读写图片:" + e.toString()); e.printStackTrace(); } } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java index 5470414..da63645 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java @@ -3,12 +3,14 @@ package com.sincere.haikangface.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.sincere.haikangface.bean.face.PermissionBean; +import com.sincere.haikangface.bean.face.PermissionDHBean; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.Async; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; @@ -93,136 +95,111 @@ public class HttpUtil { return result; } - public static boolean uploadImgs(String filePath, String card, String name, String deviceId, String startTime, + /** + * 下发人脸值253服务设备 + * @param filePath + * @param card + * @param name + * @param deviceId + * @param startTime + * @param endTime + * @param validTimeEnabled + * @param userType + */ + public static void uploadImgs(String filePath, String card, String name, String deviceId, String startTime, String endTime, int validTimeEnabled, String userType) { - if (!new File(filePath).exists()) { - System.out.println("图片不存在"); - return false; + log.error("图片不存在,图片路径:{}",filePath); + return; + } + try{ + String url = "http://120.26.116.253:8089/file/uploadImg"; + RestTemplate restTemplate = new RestTemplate(); + HttpHeaders headers = new HttpHeaders(); + MediaType mediaType = MediaType.parseMediaType(MediaType.MULTIPART_FORM_DATA_VALUE); + headers.setContentType(mediaType); + MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); + FileSystemResource fileSystemResource = new FileSystemResource(filePath); + multivaluedMap.add("file", fileSystemResource); + multivaluedMap.add("deviceId", deviceId); + multivaluedMap.add("card", card); + multivaluedMap.add("name", name); + multivaluedMap.add("startTime", startTime); + multivaluedMap.add("endTime", endTime); + multivaluedMap.add("validTimeEnabled", validTimeEnabled); + multivaluedMap.add("userType", userType); + HttpEntity> httpEntity = new HttpEntity<>(multivaluedMap, headers); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); + log.info("发送请求,下发人脸至253服务器海康设备,请求地址:{} ,下发用户名:{},返回信息:{}",url,name,responseEntity.getBody()); + }catch (Exception e){ + log.error("发送请求,下发人脸至253服务器海康设备,发生异常: {}",e); } - - String url = "http://120.26.116.253:8089/file/uploadImg"; - - RestTemplate restTemplate = new RestTemplate(); - - HttpHeaders headers = new HttpHeaders(); - - MediaType mediaType = MediaType.parseMediaType(MediaType.MULTIPART_FORM_DATA_VALUE); - - headers.setContentType(mediaType); - - MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); - - FileSystemResource fileSystemResource = new FileSystemResource(filePath); - - multivaluedMap.add("file", fileSystemResource); - multivaluedMap.add("deviceId", deviceId); - multivaluedMap.add("card", card); - multivaluedMap.add("name", name); - multivaluedMap.add("startTime", startTime); - multivaluedMap.add("endTime", endTime); - multivaluedMap.add("validTimeEnabled", validTimeEnabled); - multivaluedMap.add("userType", userType); - - HttpEntity> httpEntity = new HttpEntity<>(multivaluedMap, headers); - - ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); - - System.out.println("responseEntity:" + responseEntity.getBody()+name); - return responseEntity.getBody().equals("1"); } public static boolean IsDeviceOnline(String deviceId) { String url = "http://120.26.116.253:8089/file/IsDeviceOnline?deviceId=" + deviceId; - RestTemplate restTemplate = new RestTemplate(); - -// Map map = new HashMap<>(); - -// map.put("deviceId",deviceId); - String res = restTemplate.getForObject(url, String.class); return res.equals("1"); } + /** + * 删除海康设备卡信息 + * @param deviceId + * @param card + * @return + */ public static boolean deleteCard(String deviceId, String card) { - String url = "http://120.26.116.253:8089/file/DeleteCard?deviceId=" + deviceId + "&card=" + card; - RestTemplate restTemplate = new RestTemplate(); - String res = restTemplate.getForObject(url, String.class); - return res.equals("1"); } + /** + * 获取海康设备卡信息 + * @param deviceId + * @param card + * @return + */ public static boolean getCard(String deviceId, String card) { - String url = "http://120.26.116.253:8089/file/getCard?deviceId=" + deviceId + "&card=" + card; - RestTemplate restTemplate = new RestTemplate(); - -// String res = restTemplate.getForObject(url,String.class,map); - return restTemplate.getForObject(url, String.class).equals("1"); + String res = restTemplate.getForObject(url,String.class); + return res.equals("1"); } - + /** + * 下发权限至海康设备 + * @param permissionBean + */ public static void sendPermission2HK(PermissionBean permissionBean) { try { - String url = "http://120.26.116.253:8089/file/sendPermiss"; - if (null != permissionBean) { - RestTemplate restTemplate = new RestTemplate(); - HttpHeaders headers = new HttpHeaders(); - MediaType mediaType = MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE); - headers.setContentType(mediaType); - HttpEntity httpEntity = new HttpEntity<>(permissionBean, headers); - - System.out.println("PermissionBean:" + JSON.toJSONString(permissionBean)); - ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); - - System.out.println("responseEntity:" + responseEntity.getBody()); - + String reqJson= JSON.toJSONString(permissionBean); + log.info("发送请求,下发权限至海康设备,请求地址:{},请求参数:{},返回信息:{}",url,reqJson,responseEntity.getBody()); } } catch (Exception e) { - e.printStackTrace(); - } - } - - public static void uploadDHImgForOne(String filePath,Integer schoolId,String studentCode,int clintType,String deviceId) { - String url = "http://114.55.30.100:8089/user/uploadImgAndUserInfo"; - MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); - HttpHeaders headers = new HttpHeaders(); - RestTemplate restTemplate = new RestTemplate(); - HttpEntity> httpEntity = null; - ResponseEntity responseEntity = null; - try { - MediaType mediaType = MediaType.parseMediaType(MediaType.APPLICATION_JSON_VALUE); - headers.setContentType(mediaType); - multivaluedMap.add("file", filePath); - multivaluedMap.add("schoolId", schoolId); - multivaluedMap.add("studentCode", studentCode); - multivaluedMap.add("clint_type", clintType); - multivaluedMap.add("deviceId", deviceId); - httpEntity = new HttpEntity<>(multivaluedMap, headers); - responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); - log.info("responseEntity:" + responseEntity.getBody()); - } catch (Exception e) { - e.printStackTrace(); + log.error("发送请求,下发权限至海康设备,发生异常: {}",e); } } + /** + * 百度人脸识别查询 + * @param file + * @param schoolId + * @return + */ public static JSONObject sendToKB(File file,String schoolId) { - log.info("开始请求人脸识别查询....."); String url = "http://120.26.116.253:9214/baiduapi/search/" + schoolId; MultiValueMap multivaluedMap = new LinkedMultiValueMap<>(); HttpHeaders headers = new HttpHeaders(); @@ -235,11 +212,108 @@ public class HttpUtil { HttpEntity> httpEntity = new HttpEntity<>(multivaluedMap, headers); ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); JSONObject jsonObject = JSON.parseObject(responseEntity.getBody()); - log.info("responseEntity:" + jsonObject.toJSONString()); + log.info("发送请求,人脸识别查询,请求地址:{},返回信息:{}",url,jsonObject.toJSONString()); return jsonObject; } catch (Exception e) { - log.info("人脸识别异常,异常信息:{}",e); - return null; + log.info("发送请求,百度人脸识别失败,异常信息:{}",e); + } + return null; + } + + /** + * 下发单个人脸至大华设备 + * @param filePath + * @param schoolId + * @param studentCode + * @param clintType + * @param deviceId + * @return + */ + public static void uploadDHImgForOne(String filePath,Integer schoolId,String studentCode,int clintType,String deviceId) { + String api = "http://114.55.30.100:8991/user/uploadImgAndUserInfo"; + try { + String url = String.format(api +"?schoolId=%s&studentCode=%s&deviceId=%s&clint_type=%s&file=%s",schoolId,studentCode,deviceId,clintType,filePath); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + log.info("发送请求,下发单个人脸至大华设备,请求地址:{} ,返回信息:{}",url, responseEntity.getBody()); + } catch (Exception e) { + log.error("发送请求,下发单个人脸至大华,异常信息: {}",e); + } + } + + /** + * 下发权限至大华设备 + * @param permissionBean + * @return + */ + public static void sendDHPermission(PermissionDHBean permissionBean) { + try{ +// String url = "http://121.40.109.21:8991/file/sendPermission"; + String url = "http://localhost:8991/file/sendPermission"; + RestTemplate restTemplate = new RestTemplate(); + HttpHeaders headers = new HttpHeaders(); + MediaType mediaType = MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE); + headers.setContentType(mediaType); + HttpEntity httpEntity = new HttpEntity<>(permissionBean, headers); + ResponseEntity responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); + log.info("发送请求,下发权限至大华设备,请求地址:{} ,返回信息:{}",url, responseEntity.getBody()); + }catch (Exception e){ + log.error("发送请求,下发权限至大华设备,异常信息,{}",e); + } + } + + /** + * 照片下发,发送海康设备 + * @param schoolId + * @param userType + * @param deviceIds + */ + public static void uploadHkImg( String schoolId,int userType,String deviceIds) { + String api = "http://114.55.30.100:8089/facereco/sendFaces"; + try { + String url = String.format(api +"?schoolId=%s&userType=%s&deviceIds=%s",schoolId,userType,deviceIds); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + log.info("发送请求,照片下发至海康设备,请求地址:{},返回信息: {}",url,responseEntity.getBody()); + } catch (Exception e) { + log.error("发送请求,照片下发至海康设备,异常信息:{}",e); + } + } + + /** + * 照片下发,发送大华设备 + * @param schoolId + * @param userType + * @param deviceIds + */ + public static void uploadDHImg( String schoolId,int userType,String deviceIds) { + String api = "http://114.55.30.100:8991/user/sendFaces"; +// String api = "http://127.0.0.1:8991/user/sendFaces"; + try { + String url = String.format(api +"?schoolId=%s&userType=%s&deviceIds=%s",schoolId,userType,deviceIds); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + log.info("发送请求,照片下发至大华设备,请求地址:{},返回信息: {}",url,responseEntity.getBody()); + } catch (Exception e) { + log.error("发送请求,照片下发至大华设备,异常信息:{}",e); + } + } + + /** + * 删除大华设备人脸 + * @param schoolId + * @param cardNum + * @param deviceId + */ + public static void deleteDHFace(Integer schoolId,String cardNum,String deviceId) { + String api = "http://121.40.109.21:8991/operate/deleteFaceByCard"; + try { + String url = String.format(api +"?schoolId=%s&cardNum=%s&deviceId=%s",schoolId,cardNum,deviceId); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity responseEntity = restTemplate.getForEntity(url, String.class); + log.info("发送请求,删除大华设备人脸,请求地址:{},返回信息: {}",url,responseEntity.getBody()); + } catch (Exception e) { + log.error("发送请求,删除大华设备人脸,异常信息:{}",e); } } } diff --git a/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java b/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java index 1a67ddd..f6fcbcf 100644 --- a/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java +++ b/cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java @@ -134,9 +134,12 @@ public interface SendRecordDao { @Param("time") String time, @Param("schoolName") String schoolName, @Param("imgPath") String imgPath, @Param("schoolId") Integer schoolId, @Param("failContent") String failContent, @Param("failType") Integer failType, @Param("userType") Integer userType, @Param("deviceType") Integer deviceType,Integer status); - @Update("update Face_SendRecord set time = #{time},failContent = #{content},imgPath= #{faceUrl},status = 2, where deviceID = #{deviceID} and Num =#{Num} and userId = #{userId}") + @Update("update Face_SendRecord set time = #{time},failContent = #{content},imgPath= #{faceUrl},status = 2 where deviceID = #{deviceID} and Num =#{Num} and userId = #{userId}") void updateFaceFailRecord(@Param("deviceID") String deviceId, @Param("faceUrl") String faceUrl,@Param("Num") String card, @Param("time") String time, @Param("content") String content,@Param("userId") String userId); @Update("update Face_SendRecord set time = #{time},imgPath= #{faceUrl},Name = #{Name},status = 1, failType=null, failContent = null where deviceID = #{deviceID} and Num = #{Num}") void updateFaceSuccessRecord(@Param("deviceID") String deviceId, @Param("Num") String card, @Param("time") String time, @Param("faceUrl") String faceUrl, @Param("Name") String name, @Param("userId") String userId); + + @Select("select * from Face_SendRecord where schoolId = #{schoolId} and status =2") + List getFailRecord(@Param("schoolId") Integer schoolId); } diff --git a/cloud/haikangface/src/main/resources/application.yaml b/cloud/haikangface/src/main/resources/application.yaml index f9b2435..d6de118 100644 --- a/cloud/haikangface/src/main/resources/application.yaml +++ b/cloud/haikangface/src/main/resources/application.yaml @@ -2,6 +2,8 @@ server: port: 8089 spring: + profiles: + active: dev application: name: haikangserver datasource: diff --git a/cloud/haikangface/src/main/resources/logback-spring.xml b/cloud/haikangface/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..c0edbe0 --- /dev/null +++ b/cloud/haikangface/src/main/resources/logback-spring.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} \(L%line\) - %msg%n + + + + + + + ${LOG_PATH}/${BASE_FILE_NAME}.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} \(L%line\) - %msg%n + + + + + + ${LOG_PATH}/history/${BASE_FILE_NAME}.%d{yyyy-MM-dd}.%i.gz + + ${LOG_FILE_MAX_SIZE} + + ${LOG_FILE_MAX_HISTORY} + + + + + + + + + + + + \ No newline at end of file diff --git a/cloud/haikangface/src/main/resources/mapper/usermapper.xml b/cloud/haikangface/src/main/resources/mapper/usermapper.xml index 3bdcc2f..90ed0d7 100644 --- a/cloud/haikangface/src/main/resources/mapper/usermapper.xml +++ b/cloud/haikangface/src/main/resources/mapper/usermapper.xml @@ -47,6 +47,14 @@ select * from AC_DeviceAuthRecord where id = #{id} + + update AC_DeviceAuthRecord set State = 0 where id = #{id} @@ -62,4 +70,33 @@ + + + + + + + + -- libgit2 0.21.0