Commit 2cbbb1644bd6bb3b5c9aec6b383c37a08e80924c

Authored by 徐泉
1 parent 1232df0d
Exists in master

智能校卫:海康、大华人脸机代码提交

Showing 48 changed files with 2404 additions and 1411 deletions   Show diff stats
cloud/dahua/src/main/java/com/example/dahua/MyTask.java
... ... @@ -72,6 +72,8 @@ public class MyTask implements ApplicationRunner {
72 72 //设备断线
73 73 public static boolean isFirstAutoRegister = false;
74 74  
  75 + public static String inTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  76 +
75 77 @Override
76 78 public void run(ApplicationArguments args) throws Exception {
77 79  
... ... @@ -141,7 +143,7 @@ public class MyTask implements ApplicationRunner {
141 143 String deviceId = getDeviceId(pchDVRIP, nDVRPort);
142 144 log.info("DisConnect Device: {}, IP: {}, Port: {}",deviceId,pchDVRIP,nDVRPort);
143 145 if (!StringUtils.isEmpty(deviceId)) {
144   - myTaskUtil.attendanceService.updateConnectStateWithDevid(0, deviceId);
  146 + myTaskUtil.attendanceService.updateConnectStateWithDevid(0,inTime,deviceId);
145 147 GateModule.stopRealLoadPic(attachLongMap.get(deviceId));
146 148 //移除在线
147 149 removeDevice(deviceId);
... ... @@ -167,7 +169,7 @@ public class MyTask implements ApplicationRunner {
167 169 String deviceId = getDeviceId(pchDVRIP, nDVRPort);
168 170 log.info("ReConnect Device: {},IP: {},Port: {}", deviceId,pchDVRIP, nDVRPort);
169 171 if (!StringUtils.isEmpty(deviceId)) {
170   - myTaskUtil.attendanceService.updateConnectStateWithDevid(1, deviceId);
  172 + myTaskUtil.attendanceService.updateConnectStateWithDevid(1,inTime,deviceId);
171 173 DeviceInfoBean deviceInfoBean = new DeviceInfoBean();
172 174 deviceInfoBean.setDevcieId(deviceId);
173 175 deviceInfoBean.setDeviceIp(pchDVRIP);
... ... @@ -223,6 +225,8 @@ public class MyTask implements ApplicationRunner {
223 225 case NetSDKLib.EM_LISTEN_TYPE.NET_DVR_SERIAL_RETURN: { // 设备注册携带序列号
224 226 log.info("Register Device Info Device address: {},port: {},DeviceID: {}", pIp, wPort, deviceId);
225 227 log.info("EM_LISTEN_TYPE:设备注册携带序列号");
  228 + //保存设备
  229 + saveAttendanceService(deviceId,pIp,wPort);
226 230 CDevInfo dev = new CDevInfo();
227 231 System.arraycopy(pIp.getBytes(),0,dev.address,0,pIp.getBytes().length);
228 232 dev.port=wPort;
... ... @@ -352,8 +356,6 @@ public class MyTask implements ApplicationRunner {
352 356 //下发句柄
353 357 lLongSendMap.put(deviceId, m_hLoginHandle);
354 358 addDeviceInfo(deviceId,address,port,m_hLoginHandle);
355   - //保存设备
356   - saveAttendanceService(deviceId,address,port);
357 359 }
358 360  
359 361  
... ... @@ -568,7 +570,6 @@ public class MyTask implements ApplicationRunner {
568 570 * @param port
569 571 */
570 572 private static void saveAttendanceService(String deviceId, String ip, int port){
571   - String inTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
572 573 String clintType = String.valueOf(EnumDeviceType.DH_FACE.deviceType);
573 574 if(deviceId.startsWith("ytj")){
574 575 clintType = String.valueOf(EnumDeviceType.DH_FACE_YTJ.deviceType);
... ...
cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask2.java
... ... @@ -3,32 +3,31 @@ package com.example.dahua.async;
3 3 import com.alibaba.fastjson.JSON;
4 4 import com.example.dahua.MyTask;
5 5 import com.example.dahua.bean.*;
6   -import com.example.dahua.common.Res;
  6 +import com.example.dahua.control.FileControl;
7 7 import com.example.dahua.dao.UserDao;
8   -import com.example.dahua.enums.*;
  8 +import com.example.dahua.enums.EnumDeviceType;
  9 +import com.example.dahua.enums.EnumSendFaceType;
  10 +import com.example.dahua.enums.EnumSzBusinessType;
9 11 import com.example.dahua.lib.CompressPic;
10 12 import com.example.dahua.lib.FilePath;
11 13 import com.example.dahua.lib.NetSDKLib;
12   -import com.example.dahua.lib.ToolKits;
13   -import com.example.dahua.module.GateModule;
14 14 import com.example.dahua.module.GateModule2;
15 15 import com.example.dahua.service.PermissFaceService;
  16 +import com.example.dahua.service.imp.BaseService;
16 17 import com.example.dahua.utils.FileUtils;
17 18 import com.example.dahua.utils.HttpUtils;
18 19 import com.example.dahua.utils.JsonUtils;
19 20 import com.example.dahua.xiananDao.SendRecordDao;
20   -import com.sun.jna.Memory;
21 21 import lombok.extern.slf4j.Slf4j;
22 22 import org.springframework.beans.factory.annotation.Autowired;
23   -import org.springframework.http.ResponseEntity;
24   -import org.springframework.scheduling.annotation.Async;
25 23 import org.springframework.stereotype.Component;
26 24 import org.springframework.util.StringUtils;
27   -import org.springframework.web.client.RestTemplate;
28 25  
29   -import java.io.*;
  26 +import java.io.File;
30 27 import java.text.SimpleDateFormat;
31   -import java.util.*;
  28 +import java.util.Calendar;
  29 +import java.util.Date;
  30 +import java.util.List;
32 31  
33 32 /**
34 33 * 下发卡号的异步操作
... ... @@ -46,6 +45,8 @@ public class SendUserInfoTask2 {
46 45 SendRecordDao sendRecordDao;
47 46 @Autowired
48 47 PermissFaceService permissFaceService;
  48 + @Autowired
  49 + BaseService baseService;
49 50  
50 51 /**
51 52 * 下发单个用户人脸任务
... ... @@ -129,7 +130,7 @@ public class SendUserInfoTask2 {
129 130 */
130 131 pushCardAndFace(file, userInfoBean, attendanceBeans, sendRecordBean.getUserType()+"",sendRecordBean.getFailType());
131 132 } catch (Exception e) {
132   - e.printStackTrace();
  133 + log.error("下发失败");
133 134 return false;
134 135 }
135 136 return false;
... ... @@ -192,6 +193,7 @@ public class SendUserInfoTask2 {
192 193 SendRecordBean sendRecordBean = new SendRecordBean();
193 194 sendRecordBean.setImgPath(picSrc);
194 195 sendRecordBean.setCustomerid(studentId);
  196 + sendRecordBean.setUserId(userId);
195 197 sendRecordBean.setName(userName);
196 198 sendRecordBean.setUserType(Integer.parseInt(userType));
197 199 sendRecordBean.setNum(studentNum);
... ... @@ -205,12 +207,14 @@ public class SendUserInfoTask2 {
205 207 Calendar calendar = Calendar.getInstance();
206 208 calendar.add(Calendar.YEAR, 4);
207 209 String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
208   - //根据学生ID\学校ID获取学生类型
209   - String studentType = userDao.getStudentType(schoolId,studentId);
210   - //通道号
211   - String channel = analysisPermission(Integer.parseInt(schoolId),studentType);
212   - log.info("通道号: "+channel);
213   -
  210 + String channel="";
  211 + if(userType2 ==2){
  212 + //根据学生ID\学校ID获取学生类型
  213 + String studentType = userDao.getStudentType(schoolId,studentId);
  214 + //通道号
  215 +// String channel = analysisPermission(Integer.parseInt(schoolId),studentType);
  216 + channel = analysisAuthChannel(Integer.parseInt(schoolId),Integer.parseInt(studentType),deviceId);
  217 + }
214 218 /**
215 219 * 下发升级二代接口,动态库libs下win64,更新为官方最新版sdk add by xuquan 2020-11-23
216 220 * 注:用户下发逻辑:
... ... @@ -241,10 +245,9 @@ public class SendUserInfoTask2 {
241 245 //判断该学校设备ID对应失败记录是否存在:Face_SendFail
242 246 deviceId = sendRecordDao.getFailIsExit(deviceId, attendanceBean.getSchool_id());
243 247 if (!StringUtils.isEmpty(deviceId)) {
244   - //更新下发失败状态
245   - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.NOT_ONLINE_DEVICE.code);
246   - //添加下发失败记录
247   - addFailDace(sendRecordBean);
  248 + sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code);
  249 + sendRecordBean.setFailContent(EnumSendFaceType.NOT_ONLINE_DEVICE.message);
  250 + baseService.sendFailRecord(sendRecordBean);
248 251 }
249 252 } else {
250 253 log.info("=================开始执行下发人脸及卡号任务=================");
... ... @@ -253,10 +256,13 @@ public class SendUserInfoTask2 {
253 256 if(attendanceBean.getClint_id().startsWith("ytj")&&Integer.parseInt(attendanceBean.getSchool_id())!=126
254 257 &&Integer.parseInt(attendanceBean.getSchool_id())!=393) {
255 258 cardNum = studentNum;
256   - deviceType= EnumDeviceType.DH_FACE_YTJ.deviceType;
257 259 } else {
258 260 cardNum = cardNo(studentNum);
259 261 }
  262 + if(attendanceBean.getClint_id().startsWith("ytj")){
  263 + deviceType= EnumDeviceType.DH_FACE_YTJ.deviceType;
  264 + sendRecordBean.setDeviceType(deviceType);
  265 + }
260 266 try{
261 267 /**
262 268 * recordNo 不为空存在下发记录集编号,直接修改执行人脸信息(二代升级接口,此处不需要修改用户信息)
... ... @@ -294,9 +300,9 @@ public class SendUserInfoTask2 {
294 300 userDao.saveRecordNo(userId,1, userName, attendanceBean.getClint_id());
295 301 }
296 302 }
297   - } catch (Exception e) {
298   - log.error("下发异常:异常错误信息msg: {}",e.getMessage());
299   - return;
  303 + } catch (RuntimeException e) {
  304 + log.error("下发异常:异常错误信息msg: {}",e);
  305 + continue;
300 306 }
301 307 /**
302 308 * 人脸和卡都下发成功
... ... @@ -304,21 +310,8 @@ public class SendUserInfoTask2 {
304 310 if (bUserFlags ==0 && bCardFlags ==0 && bFaceFalgs==0) {
305 311 FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);
306 312 log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean));
307   -
308   - //人脸下发成功记录, 先判断是否已经存在了
309   - List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(sendRecordBean.getDeviceID(), String.valueOf(sendRecordBean.getSchoolId()), sendRecordBean.getNum());
310   - if (sendRecordBeanList.size() > 0) {
311   - //删除重复数据
312   - for (int i = 0; i < sendRecordBeanList.size(); i++) {
313   - sendRecordDao.deleteFaceSuccess(sendRecordBeanList.get(i).getDeviceID(), sendRecordBeanList.get(i).getNum());
314   - }
315   - }
316   - //重新添加人脸下发记录
317   - sendRecordDao.addFaceSuccess(sendRecordBean.getCustomerid(), sendRecordBean.getDeviceID(), sendRecordBean.getNum(), sendRecordBean.getName(), sendRecordBean.getTime(),
318   - sendRecordBean.getSchoolName(), sendRecordBean.getImgPath(), sendRecordBean.getSchoolId(), sendRecordBean.getUserType(), deviceType);
319   -
320   - //删除之前失败记录
321   - sendRecordDao.deleteFaceFail(sendRecordBean.getNum(), sendRecordBean.getDeviceID());
  313 + //保存成功记录
  314 + baseService.sendSuccessRecord(sendRecordBean);
322 315 }
323 316 /**
324 317 * 人脸和卡都下发失败
... ... @@ -330,8 +323,7 @@ public class SendUserInfoTask2 {
330 323 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
331 324 sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code);
332 325 sendRecordBean.setFailContent(failContent);
333   - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_AND_CARD_FAIL.code);
334   - addFailDace(sendRecordBean);
  326 + baseService.sendFailRecord(sendRecordBean);
335 327 }
336 328 /**
337 329 * 下发卡号成功,下发人脸失败,
... ... @@ -343,8 +335,7 @@ public class SendUserInfoTask2 {
343 335 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
344 336 sendRecordBean.setFailType(EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code);
345 337 sendRecordBean.setFailContent(failContent);
346   - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code);
347   - addFailDace(sendRecordBean);
  338 + baseService.sendFailRecord(sendRecordBean);
348 339 }
349 340 /**
350 341 * 下发卡号失败,下发人脸成功,
... ... @@ -355,8 +346,7 @@ public class SendUserInfoTask2 {
355 346 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
356 347 sendRecordBean.setFailType(EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code);
357 348 sendRecordBean.setFailContent(failContent);
358   - sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code);
359   - addFailDace(sendRecordBean);
  349 + baseService.sendFailRecord(sendRecordBean);
360 350 }
361 351 }
362 352 }
... ... @@ -398,6 +388,40 @@ public class SendUserInfoTask2 {
398 388 }
399 389  
400 390 /**
  391 + * 获取学生时段类型2.0
  392 + * @param schoolId
  393 + * @param studentType
  394 + * @param deviceId
  395 + * @return
  396 + */
  397 + private String analysisAuthChannel(Integer schoolId,Integer studentType,String deviceId){
  398 + if(StringUtils.isEmpty(studentType) || StringUtils.isEmpty(schoolId)){
  399 + return "";
  400 + }
  401 + List<DeviceAuthRecord> authRecords = userDao.getAuthRecord(schoolId,studentType);
  402 + log.info("权限信息:"+ JsonUtils.nonDefaultMapper().toJson(authRecords));
  403 + String channel ="";
  404 + if(authRecords.size()>0){
  405 + for(DeviceAuthRecord authRecord : authRecords){
  406 + String deviceIds = authRecord.getSno();
  407 + //学生考勤类型 1:通校生,2:住校生,3:全部
  408 + Integer sType = authRecord.getStudentType();
  409 + log.info("学生类型:{},设备ID:{}",sType,deviceId);
  410 + if(deviceIds.indexOf(deviceId)!=-1 && (studentType.intValue() == sType.intValue() || sType.intValue() == 3)){
  411 + channel= authRecord.getShiduan();
  412 + log.info("通道号:"+channel);
  413 + }
  414 + }
  415 + if(StringUtils.isEmpty(channel)){
  416 + log.warn("未获取到学校权限通道号!");
  417 + return "";
  418 + }
  419 + return channel;
  420 + }
  421 + return channel;
  422 + }
  423 +
  424 + /**
401 425 * 解析下发异常信息
402 426 * @param userErrNum
403 427 * @param faceErrNum
... ... @@ -479,9 +503,157 @@ public class SendUserInfoTask2 {
479 503 length -= 2;
480 504 cardR += cardDex.substring(length, length + 2);
481 505 }
482   -
483 506 return cardR;
  507 + }
  508 +
484 509  
  510 + /**
  511 + * 清空人脸
  512 + * @param deviceId
  513 + */
  514 + public boolean clearAllFace(Integer schoolId, String deviceId) {
  515 + if(StringUtils.isEmpty(schoolId)){
  516 + log.error("清空人脸时,学校ID不能为空");
  517 + return false;
  518 + }
  519 + List<AttendanceBean> attendanceBeanList = userDao.queryClintList(schoolId,deviceId);
  520 + if(attendanceBeanList.size()>0){
  521 + for(AttendanceBean bean : attendanceBeanList){
  522 + deviceId = bean.getClint_id();
  523 + GateModule2.clearUser(MyTask.lLongSendMap.get(deviceId));
  524 + }
  525 + return true;
  526 + }
  527 + return false;
485 528 }
486 529  
  530 + /**
  531 + * 删除失败人脸
  532 + * @param schoolId
  533 + * @return
  534 + */
  535 + public boolean deleteFailFace(Integer schoolId) {
  536 + if(StringUtils.isEmpty(schoolId)){
  537 + log.error("删除人脸时,学校ID不能为空");
  538 + return false;
  539 + }
  540 + List<SendRecordBean> recordBeanList = sendRecordDao.getFailRecord(schoolId);
  541 + if(recordBeanList.size()>0){
  542 + for(SendRecordBean recordBean : recordBeanList){
  543 + String deviceId = recordBean.getDeviceID();
  544 + //下操作记录集
  545 + String recordNo = userDao.getRecordNo(recordBean.getUserId(), deviceId);
  546 + if(StringUtils.isEmpty(recordNo)){
  547 + log.info("删除人脸时,该用户卡号未添加过人脸");
  548 + }
  549 + if(GateModule2.deleteUser(recordBean.getUserId(),MyTask.lLongSendMap.get(deviceId)) ==0){
  550 + userDao.deleteRecordNoTest(recordBean.getUserId(),deviceId);
  551 + }
  552 + }
  553 + return true;
  554 + }
  555 + return false;
  556 + }
  557 +
  558 + /**
  559 + * 下发失败人脸
  560 + * @param schoolId
  561 + * @return
  562 + */
  563 + public boolean sendFailFace(Integer schoolId) {
  564 + if(StringUtils.isEmpty(schoolId)){
  565 + log.error("下发人脸时,学校ID不能为空");
  566 + return false;
  567 + }
  568 + List<SendRecordBean> recordBeanList = sendRecordDao.getFailRecord(schoolId);
  569 + if(recordBeanList.size()>0){
  570 + for(SendRecordBean recordBean : recordBeanList){
  571 + int userType = recordBean.getUserType();
  572 + String deviceId = recordBean.getDeviceID();
  573 + String clintType = userDao.getClintType(deviceId);
  574 + StudentBean studentBean= null;
  575 + String typeName ="";
  576 + if(userType ==1){
  577 + typeName= "Teacher";
  578 + studentBean = userDao.getTeacherWithCard(recordBean.getNum());
  579 + }else{
  580 + typeName= "Student";
  581 + studentBean= userDao.getStudentWithCard(recordBean.getNum());
  582 + }
  583 + if(studentBean==null){
  584 + continue;
  585 + }
  586 + //100服务器文件目录绝对路径
  587 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  588 + String photo= userType==1?studentBean.getFace():studentBean.getPhoto();
  589 + //学籍号
  590 + String studentCode=userType==1?studentBean.getNum():studentBean.getStudentcode();
  591 + if (StringUtils.isEmpty(photo) || StringUtils.isEmpty(studentCode)){
  592 + continue;
  593 + }
  594 + String filePath="";
  595 + if(photo.indexOf("f0i5l7e5")!=-1){
  596 + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\");
  597 + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr;
  598 + } else{
  599 + //以学籍号为名的文件名
  600 + String fileName = photo.split(typeName +"/")[1];
  601 + //100服务器上人脸照绝对路径
  602 + filePath = path+ "\\" + fileName;
  603 + }
  604 + try{
  605 + HttpUtils.uploadImgs(new File(filePath), String.valueOf(schoolId),studentCode, clintType, userType,deviceId);
  606 + }catch (Exception e){
  607 + e.printStackTrace();
  608 + continue;
  609 + }
  610 + }
  611 + return true;
  612 + }
  613 + return false;
  614 + }
  615 +
  616 + /**
  617 + * 根据卡号下发失败人脸
  618 + * @param schoolId
  619 + * @param cardNum
  620 + * @param deviceId
  621 + * @return
  622 + */
  623 + public boolean deleteFaceByCard(Integer schoolId,String cardNum,String deviceId) {
  624 + if(StringUtils.isEmpty(schoolId) && StringUtils.isEmpty(cardNum) && StringUtils.isEmpty(deviceId)){
  625 + log.error("删除人脸时,学校ID、卡号、设备ID不能为空.");
  626 + return false;
  627 + }
  628 + if(MyTask.lLongSendMap.get(deviceId) ==null){
  629 + log.error("设备不在线");
  630 + return false;
  631 + }
  632 + StudentBean studentBean = userDao.getStudentWithCard(cardNum);
  633 + if(studentBean == null){
  634 + log.error("此卡号:{},未查询到相应学生信息。",cardNum);
  635 + return false;
  636 + }
  637 + String userId = userDao.getUerIdWithNumTest(cardNum,schoolId);
  638 + if(StringUtils.isEmpty(userId)){
  639 + log.error("删除人脸时,用户卡号不存在。");
  640 + return false;
  641 + }
  642 + List<AttendanceBean> attendanceBeanList = userDao.queryClintList(schoolId,deviceId);
  643 + if(attendanceBeanList.size()>0){
  644 + for(AttendanceBean bean : attendanceBeanList){
  645 + deviceId = bean.getClint_id();
  646 + //下操作记录集
  647 + String recordNo = userDao.getRecordNo(userId, deviceId);
  648 + if(StringUtils.isEmpty(recordNo)){
  649 + log.info("删除人脸时,该用户卡号未添加过人脸");
  650 + }
  651 + if(GateModule2.deleteUser(userId,MyTask.lLongSendMap.get(deviceId)) ==0){
  652 + userDao.deleteRecordNoTest(userId,deviceId);
  653 + }
  654 + }
  655 + return true;
  656 + }
  657 + return false;
  658 + }
487 659 }
... ...
cloud/dahua/src/main/java/com/example/dahua/bean/DeviceAuthRecord.java 0 → 100644
... ... @@ -0,0 +1,140 @@
  1 +package com.example.dahua.bean;
  2 +
  3 +import java.util.Date;
  4 +
  5 +/**
  6 + * 下发权限时段实体类
  7 + * @author xuquan
  8 + * @date 2020/12/17 12:40
  9 + */
  10 +public class DeviceAuthRecord {
  11 +
  12 + private int id;
  13 + //时段
  14 + private String shiduan ;
  15 + //学生组 就是powerGroupId 学生类型就是 studentType
  16 + private int studentType ;
  17 + //性别
  18 + private String sex ;
  19 + //学校ID
  20 + private int schoolId ;
  21 + //开始时间
  22 + private Date startTime ;
  23 + //结束时间
  24 + private Date endTime ;
  25 + //设备ID
  26 + private String sno ;
  27 + //周计划json
  28 + private String weekDays;
  29 + //状态
  30 + private int state;
  31 + //下发状态
  32 + private int grantState;
  33 + //权限类型
  34 + private int authType;
  35 + //计划类型
  36 + private int aType;
  37 +
  38 + public int getId() {
  39 + return id;
  40 + }
  41 + public void setId(int id) {
  42 + this.id = id;
  43 + }
  44 +
  45 + public String getShiduan() {
  46 + return shiduan;
  47 + }
  48 +
  49 + public void setShiduan(String shiduan) {
  50 + this.shiduan = shiduan;
  51 + }
  52 +
  53 + public int getAuthType() {
  54 + return authType;
  55 + }
  56 +
  57 + public void setAuthType(int authType) {
  58 + this.authType = authType;
  59 + }
  60 +
  61 + public String getSno() {
  62 + return sno;
  63 + }
  64 +
  65 + public void setSno(String sno) {
  66 + this.sno = sno;
  67 + }
  68 +
  69 + public int getStudentType() {
  70 + return studentType;
  71 + }
  72 +
  73 + public void setStudentType(int studentType) {
  74 + this.studentType = studentType;
  75 + }
  76 +
  77 + public String getSex() {
  78 + return sex;
  79 + }
  80 +
  81 + public void setSex(String sex) {
  82 + this.sex = sex;
  83 + }
  84 +
  85 + public int getSchoolId() {
  86 + return schoolId;
  87 + }
  88 +
  89 + public void setSchoolId(int schoolId) {
  90 + this.schoolId = schoolId;
  91 + }
  92 +
  93 + public Date getStartTime() {
  94 + return startTime;
  95 + }
  96 +
  97 + public void setStartTime(Date startTime) {
  98 + this.startTime = startTime;
  99 + }
  100 +
  101 + public Date getEndTime() {
  102 + return endTime;
  103 + }
  104 +
  105 + public void setEndTime(Date endTime) {
  106 + this.endTime = endTime;
  107 + }
  108 +
  109 + public String getWeekDays() {
  110 + return weekDays;
  111 + }
  112 +
  113 + public void setWeekDays(String weekDays) {
  114 + this.weekDays = weekDays;
  115 + }
  116 +
  117 + public int getState() {
  118 + return state;
  119 + }
  120 +
  121 + public void setState(int state) {
  122 + this.state = state;
  123 + }
  124 +
  125 + public int getGrantState() {
  126 + return grantState;
  127 + }
  128 +
  129 + public void setGrantState(int grantState) {
  130 + this.grantState = grantState;
  131 + }
  132 +
  133 + public int getaType() {
  134 + return aType;
  135 + }
  136 +
  137 + public void setaType(int aType) {
  138 + this.aType = aType;
  139 + }
  140 +}
... ...
cloud/dahua/src/main/java/com/example/dahua/bean/SendFaceDto.java 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +package com.example.dahua.bean;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +
  6 +/**
  7 + * 照片下发人脸实体类
  8 + * @author xuquan
  9 + * @date 2020/12/16 09:10
  10 + */
  11 +@ApiModel
  12 +public class SendFaceDto {
  13 +
  14 + @ApiModelProperty("0主卡1教师卡2副卡")
  15 + private Integer type ;
  16 + @ApiModelProperty("学校ID")
  17 + private Integer schoolId ;
  18 + @ApiModelProperty("设备号,逗号隔开")
  19 + private String sNos;
  20 + @ApiModelProperty("学生类型,1通校2住校;群组时,为群组号")
  21 + private Integer studentType;
  22 + @ApiModelProperty("性别:1男2女,多个逗号隔开")
  23 + private String sex;
  24 +
  25 + public Integer getType() {
  26 + return type;
  27 + }
  28 +
  29 + public void setType(Integer type) {
  30 + this.type = type;
  31 + }
  32 +
  33 + public Integer getSchoolId() {
  34 + return schoolId;
  35 + }
  36 +
  37 + public void setSchoolId(Integer schoolId) {
  38 + this.schoolId = schoolId;
  39 + }
  40 +
  41 + public String getsNos() {
  42 + return sNos;
  43 + }
  44 +
  45 + public void setsNos(String sNos) {
  46 + this.sNos = sNos;
  47 + }
  48 +
  49 + public Integer getStudentType() {
  50 + return studentType;
  51 + }
  52 +
  53 + public void setStudentType(Integer studentType) {
  54 + this.studentType = studentType;
  55 + }
  56 +
  57 + public String getSex() {
  58 + return sex;
  59 + }
  60 +
  61 + public void setSex(String sex) {
  62 + this.sex = sex;
  63 + }
  64 +}
... ...
cloud/dahua/src/main/java/com/example/dahua/bean/SendRecordBean.java
... ... @@ -7,6 +7,7 @@ import java.io.Serializable;
7 7 */
8 8 public class SendRecordBean implements Serializable {
9 9  
  10 + private Integer id;
10 11 //用户编号:学生student_id;老师teacher_id
11 12 private String customerid;
12 13 //卡号
... ... @@ -29,7 +30,26 @@ public class SendRecordBean implements Serializable {
29 30 private String failContent;
30 31 //下发失败类型:详情见枚举:EnumSendFaceType
31 32 private int failType;
  33 + //设备类型
  34 + private int deviceType;
32 35  
  36 + private String userId;
  37 +
  38 + public String getUserId() {
  39 + return userId;
  40 + }
  41 +
  42 + public void setUserId(String userId) {
  43 + this.userId = userId;
  44 + }
  45 +
  46 + public Integer getId() {
  47 + return id;
  48 + }
  49 +
  50 + public void setId(Integer id) {
  51 + this.id = id;
  52 + }
33 53  
34 54 public String getCustomerid() {
35 55 return customerid;
... ... @@ -119,6 +139,14 @@ public class SendRecordBean implements Serializable {
119 139 this.failType = failType;
120 140 }
121 141  
  142 + public int getDeviceType() {
  143 + return deviceType;
  144 + }
  145 +
  146 + public void setDeviceType(int deviceType) {
  147 + this.deviceType = deviceType;
  148 + }
  149 +
122 150 @Override
123 151 public String toString() {
124 152 return "SendRecordBean{" +
... ...
cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java
... ... @@ -47,6 +47,8 @@ public class StudentBean implements Serializable {
47 47  
48 48 private String Face;
49 49  
  50 + private String photo;
  51 +
50 52 // private String StudentCode;
51 53  
52 54 private String student_num;
... ... @@ -227,7 +229,14 @@ public class StudentBean implements Serializable {
227 229 Face = face;
228 230 }
229 231  
230   -// public String getStudentCode() {
  232 + public String getPhoto() {
  233 + return photo;
  234 + }
  235 +
  236 + public void setPhoto(String photo) {
  237 + this.photo = photo;
  238 + }
  239 + // public String getStudentCode() {
231 240 // return StudentCode;
232 241 // }
233 242 //
... ...
cloud/dahua/src/main/java/com/example/dahua/control/UserOperateController.java
1   -//package com.example.dahua.control;
2   -//
3   -//import com.example.dahua.MyTask;
4   -//import com.example.dahua.async.SendUserInfoTask;
5   -//import com.example.dahua.bean.PermissionBean;
6   -//import com.example.dahua.bean.SendRecordBean;
7   -//import com.example.dahua.bean.StudentBean;
8   -//import com.example.dahua.dao.UserDao;
9   -//import com.example.dahua.enums.EnumSzBusinessType;
10   -//import com.example.dahua.lib.CompressPic;
11   -//import com.example.dahua.service.UserOperateService;
12   -//import com.example.dahua.service.UserService;
13   -//import com.example.dahua.utils.BaiduUtils;
14   -//import com.example.dahua.utils.FileUtils;
15   -//import com.example.dahua.utils.HttpUtils;
16   -//import com.example.dahua.xiananDao.SendRecordDao;
17   -//import io.swagger.annotations.Api;
18   -//import io.swagger.annotations.ApiImplicitParam;
19   -//import io.swagger.annotations.ApiImplicitParams;
20   -//import io.swagger.annotations.ApiOperation;
21   -//import lombok.extern.slf4j.Slf4j;
22   -//import org.json.JSONException;
23   -//import org.json.JSONObject;
24   -//import org.springframework.beans.factory.annotation.Autowired;
25   -//import org.springframework.http.MediaType;
26   -//import org.springframework.util.StringUtils;
27   -//import org.springframework.web.bind.annotation.*;
28   -//import org.springframework.web.client.RestTemplate;
29   -//import org.springframework.web.multipart.MultipartFile;
30   -//
31   -//import java.io.File;
32   -//import java.io.FileNotFoundException;
33   -//import java.io.FileOutputStream;
34   -//import java.io.IOException;
35   -//import java.util.List;
36   -//
37   -///**
38   -// * 用户信息、人脸、卡信息、权限下发控制类
39   -// * @author xuquan
40   -// * @date 2020/12/01 15:16
41   -// */
42   -//@Slf4j
43   -//@RestController("/operate/")
44   -//@Api(tags = "下发用户信息、人脸、卡、权限信息")
45   -//@RequestMapping(value = "/operate/*", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
46   -//public class UserOperateController {
47   -//
48   -// @Autowired
49   -// UserOperateService operateService;
50   -//
51   -// @Autowired
52   -// SendUserInfoTask sendUserInfoTask;
53   -//
54   -//
55   -// /**
56   -// * 单个用户下发至设备
57   -// * @param schoolId
58   -// * @param userId
59   -// * @param clintType
60   -// * @return
61   -// */
62   -// @RequestMapping(value = "sendUser", method = RequestMethod.GET)
63   -// @ApiOperation(value = "上传用户信息")
64   -// public String sendUser(@RequestParam("file") MultipartFile file, @RequestParam("schoolId") String schoolId, @RequestParam("userId") String userId,
65   -// @RequestParam("clintType") String clintType, @RequestParam("userType") int userType,@RequestParam("flag") int flag,
66   -// @RequestParam(required = false) String deviceId) {
67   -// //文件名
68   -// String fileName = file.getOriginalFilename();
69   -// //21服务器临时文件存储路径
70   -// File outFile = new File("C://imgCom");
71   -// if (!outFile.exists()) outFile.mkdirs();
72   -// try {
73   -// File dest = new File(outFile, fileName);
74   -//
75   -// FileOutputStream fileOutputStream = new FileOutputStream(dest);
76   -// fileOutputStream.write(file.getBytes());
77   -// fileOutputStream.close();
78   -// String filePath = dest.getAbsolutePath();
79   -// deviceId = StringUtils.isEmpty(deviceId)?"":deviceId;
80   -// operateService.sendUserInfo(filePath, userType,schoolId,userId,deviceId, clintType,flag);
81   -// return "1";
82   -// } catch (FileNotFoundException e) {
83   -// e.printStackTrace();
84   -// } catch (IOException e) {
85   -// e.printStackTrace();
86   -// }
87   -// return "0";
88   -// }
89   -//
90   -//
91   -// /**
92   -// * 大华枪机人脸库添加
93   -// * @param schoolId
94   -// * @param userId
95   -// * @param clintType
96   -// * @return
97   -// */
98   -// @RequestMapping(value = "addFaceData", method = RequestMethod.GET)
99   -// @ApiOperation(value = "上传用户信息")
100   -// public String sendUser(@RequestParam("file") MultipartFile file, @RequestParam("schoolId") String schoolId, @RequestParam("userId") String userId,
101   -// @RequestParam("clintType") String clintType, @RequestParam("userType") int userType, @RequestParam(required = false) String deviceId) {
102   -// //文件名
103   -// String fileName = file.getOriginalFilename();
104   -// //21服务器临时文件存储路径
105   -// File outFile = new File("C://imgCom");
106   -// if (!outFile.exists()) outFile.mkdirs();
107   -// try {
108   -// File dest = new File(outFile, fileName);
109   -//
110   -// FileOutputStream fileOutputStream = new FileOutputStream(dest);
111   -// fileOutputStream.write(file.getBytes());
112   -// fileOutputStream.close();
113   -// String filePath = dest.getAbsolutePath();
114   -// deviceId = StringUtils.isEmpty(deviceId)?"":deviceId;
115   -// operateService.addFaceGroup(filePath, userType,schoolId,userId,deviceId, clintType);
116   -// return "1";
117   -// } catch (FileNotFoundException e) {
118   -// e.printStackTrace();
119   -// } catch (IOException e) {
120   -// e.printStackTrace();
121   -// }
122   -// return "0";
123   -// }
124   -//
125   -//}
  1 +package com.example.dahua.control;
  2 +
  3 +import com.example.dahua.async.SendUserInfoTask2;
  4 +import com.example.dahua.bean.SendFaceDto;
  5 +import com.example.dahua.dao.UserDao;
  6 +import com.example.dahua.service.UserOperateService;
  7 +import com.example.dahua.utils.HttpUtils;
  8 +import io.swagger.annotations.Api;
  9 +import io.swagger.annotations.ApiOperation;
  10 +import lombok.extern.slf4j.Slf4j;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.http.MediaType;
  13 +import org.springframework.web.bind.annotation.*;
  14 +
  15 +/**
  16 + * 用户信息、人脸、卡信息、权限下发控制类
  17 + * @author xuquan
  18 + * @date 2020/12/01 15:16
  19 + */
  20 +@Slf4j
  21 +@RestController("/operate/")
  22 +@Api(tags = "大华设备操作接口")
  23 +@RequestMapping(value = "/operate/*", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  24 +public class UserOperateController {
  25 +
  26 + @Autowired
  27 + SendUserInfoTask2 sendUserInfoTask;
  28 +
  29 + @Autowired
  30 + UserDao userDao;
  31 +
  32 + @Autowired
  33 + UserOperateService userOperateService;
  34 +
  35 + @RequestMapping(value = "clearAllFace", method = RequestMethod.POST)
  36 + @ApiOperation(value = "21服务器清空指定学校,指定设备下所有人脸2.0")
  37 + public boolean clearAllFace(@RequestParam("schoolId") Integer schoolId, @RequestParam("deviceId") String deviceId) {
  38 + return sendUserInfoTask.clearAllFace(schoolId,deviceId);
  39 + }
  40 +
  41 + @RequestMapping(value = "sendUserFaces", method = RequestMethod.POST)
  42 + @ApiOperation(value = "100服务器下发学校下所有人脸给指定设备2.0")
  43 + public void sendUserFaces(@RequestBody SendFaceDto sendFaceDto) {
  44 + userOperateService.sendUserFaces(sendFaceDto);
  45 + }
  46 +
  47 + @RequestMapping(value = "deleteFailFace100", method = RequestMethod.POST)
  48 + @ApiOperation(value = "100服务器删除失败人脸2.0")
  49 + public boolean deleteFailFace100(@RequestParam("schoolId") Integer schoolId) {
  50 + HttpUtils.deleteFace(schoolId);
  51 + return true;
  52 + }
  53 +
  54 + @RequestMapping(value = "sendFailFace", method = RequestMethod.POST)
  55 + @ApiOperation(value = "100服务器下发失败人脸2.0")
  56 + public boolean sendFailFace(@RequestParam("schoolId") Integer schoolId) {
  57 + return sendUserInfoTask.sendFailFace(schoolId);
  58 + }
  59 +
  60 + @RequestMapping(value = "deleteFailFace", method = RequestMethod.GET)
  61 + @ApiOperation(value = "21服务器删除失败人脸2.0")
  62 + public boolean deleteFailFace(Integer schoolId) {
  63 + return sendUserInfoTask.deleteFailFace(schoolId);
  64 + }
  65 +
  66 + @RequestMapping(value = "deleteFaceByCard", method = RequestMethod.GET)
  67 + @ApiOperation(value = "21服务器根据卡号删除人脸")
  68 + public boolean deleteFaceByCard(Integer schoolId,String cardNum,String deviceId) {
  69 + return sendUserInfoTask.deleteFaceByCard(schoolId,cardNum,deviceId);
  70 + }
  71 +
  72 +}
... ...
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
... ... @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.*;
5 5 import org.springframework.stereotype.Repository;
6 6  
7 7 import java.util.List;
  8 +import java.util.Map;
8 9  
9 10 @Repository
10 11 @Mapper
... ... @@ -240,7 +241,7 @@ public interface UserDao {
240 241 List<String> getRecordNoTest(@Param("student_name") String name,@Param("user_id") String user_id,@Param("deviceId") String deviceId);
241 242  
242 243 @Select("select Top(1) user_id from SZ_V_School_Student where student_num = #{student_num} and school_id = #{school_id}")
243   - String getUerIdWithNumTest(@Param("student_num") String student_num,@Param("school_id") String schoolId);
  244 + String getUerIdWithNumTest(@Param("student_num") String student_num,@Param("school_id") Integer schoolId);
244 245  
245 246 @Select("select * from SZ_V_School_Student where school_id = #{school_id}")
246 247 List<UserInfoBean> getUserIdTest(@Param("school_id") String schoolId);
... ... @@ -250,4 +251,19 @@ public interface UserDao {
250 251  
251 252 /*************************************** 仅供测试,下发失败使用接口 end ************************************/
252 253  
  254 +
  255 + @Select("select Top(1)* from SZ_V_School_Teacher where teacher_num = #{teacher_num}")
  256 + StudentBean getTeacherWithCard(@Param("teacher_num") String teacher_num);
  257 +
  258 + @Select("select Top(1)* from SZ_V_School_Student where student_num = #{card}")
  259 + StudentBean getStudentWithCard(@Param("card") String card);
  260 +
  261 + List<StudentBean> getStudentList(@Param("schoolId") Integer schoolId,@Param("studentType")Integer studentType,@Param("sex") List<Integer> sex);
  262 +
  263 + List<StudentBean> getTeacherList(@Param("schoolId") Integer schoolId);
  264 +
  265 + List<DeviceAuthRecord> getAuthRecord(@Param("schoolId") Integer schoolId,@Param("studentType")Integer studentType);
  266 +
  267 + List<AttendanceBean> queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId);
  268 +
253 269 }
... ...
cloud/dahua/src/main/java/com/example/dahua/filter/AllowOriginFilter.java
... ... @@ -9,9 +9,6 @@ import java.io.IOException;
9 9  
10 10 /**
11 11 * 用于解决跨域问题
12   - * @author chen
13   - * @version 1.0
14   - * @date 2019/10/11 0011 10:17
15 12 */
16 13 @Component
17 14 @WebFilter(urlPatterns = "/*", filterName = "authFilter")
... ...
cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
... ... @@ -409,7 +409,6 @@ public class GateModule {
409 409 */
410 410 public static void setAccessTimeSchedule(LLong lLong, PermissionBean permissionBean) {
411 411 try {
412   -
413 412 CFG_ACCESS_TIMESCHEDULE_INFO msg = new CFG_ACCESS_TIMESCHEDULE_INFO();
414 413 String strCmd = NetSDKLib.CFG_CMD_ACCESSTIMESCHEDULE;
415 414 // 通道号
... ... @@ -450,52 +449,13 @@ public class GateModule {
450 449  
451 450 }
452 451 }
453   -
454   -
455   - /* for (WeekDay weekDay :
456   - weekDays) {
457   - List<WeekTime> weekTimes = weekDay.getWeekTimes();
458   - for (int i = 0; i < weekTimes.size(); i++) {
459   - WeekTime weekTime = weekTimes.get(i);
460   - String startTime = weekTime.getStartTime();
461   - String endTime = weekTime.getEndTime();
462   - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nBeginHour = Integer.parseInt(startTime.split(":")[0]);
463   - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nBeginMin = Integer.parseInt(startTime.split(":")[1]);
464   - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nBeginSec = 0;
465   -
466   - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nEndHour = Integer.parseInt(endTime.split(":")[0]);
467   - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nEndMin = Integer.parseInt(endTime.split(":")[1]);
468   - msg.stuTimeWeekDay[weekDay.getWeekDay()].stuTimeSection[i].nEndSec = 0;
469   -
470   - }
471   - }*/
472   -
473   -// 获取
474   -// if (ToolKits.GetDevConfig(lLong, nChannel, strCmd, msg)) {
475   -// System.out.println("Enable:" + msg.bEnable);
476   -// try {
477   -// System.out.println("自定义名称:" + new String(msg.szName, "UTF-8").trim());
478   -// } catch (UnsupportedEncodingException e) {
479   -// e.printStackTrace();
480   -// }
481   -// for (int i = 0; i < 7; i++) {
482   -// for (int j = 0; j < 4; j++) {
483   -// System.out.println("dwRecordMask:" + msg.stuTimeWeekDay[i].stuTimeSection[j].dwRecordMask);
484   -// System.out.println(msg.stuTimeWeekDay[i].stuTimeSection[j].startTime() + "-" + msg.stuTimeWeekDay[i].stuTimeSection[j].endTime() + "\n");
485   -// }
486   -// }
487   -// msg.write();
488 452 boolean set = ToolKits.SetDevConfig(lLong, nChannel, strCmd, msg);
489   -// msg.read();
490 453 // 设置
491 454 if (set) {
492 455 System.out.println("Set AccessTimeSchedule Succeed!");
493 456 } else {
494 457 System.err.println("Set AccessTimeSchedule Failed!" + ToolKits.getErrorCodePrint());
495 458 }
496   -// } else {
497   -// System.err.println("Get AccessTimeSchedule Failed!" + ToolKits.getErrorCodePrint());
498   -// }
499 459 } catch (Exception e) {
500 460 e.printStackTrace();
501 461 }
... ...
cloud/dahua/src/main/java/com/example/dahua/module/GateModule2.java
... ... @@ -267,11 +267,10 @@ public class GateModule2 {
267 267 /**
268 268 * 清空所有用户
269 269 */
270   - public static void clearUser(LLong lLong) {
  270 + public static boolean clearUser(LLong lLong) {
271 271 // 用户操作类型
272 272 // 清空用户
273 273 int emtype = NET_EM_ACCESS_CTL_USER_SERVICE.NET_EM_ACCESS_CTL_USER_SERVICE_CLEAR;
274   -
275 274 /**
276 275 * 入参
277 276 */
... ... @@ -289,8 +288,10 @@ public class GateModule2 {
289 288 boolean result = netsdk.CLIENT_OperateAccessUserService(lLong, emtype, stIn.getPointer(), stOut.getPointer(), TIME_OUT);
290 289 if (result) {
291 290 log.info("清空用户成功!");
  291 + return true;
292 292 } else {
293 293 log.error("清空用户失败!");
  294 + return false;
294 295 }
295 296 }
296 297  
... ...
cloud/dahua/src/main/java/com/example/dahua/service/AttendanceService.java
... ... @@ -19,6 +19,6 @@ public interface AttendanceService {
19 19 */
20 20 int updateConnectState(int isConnection, String ip, String port);
21 21  
22   - int updateConnectStateWithDevid(int isConnection, String clint_id);
  22 + int updateConnectStateWithDevid(int isConnection, String inTime, String clint_id);
23 23  
24 24 }
... ...
cloud/dahua/src/main/java/com/example/dahua/service/DeleteBatchTest.java
... ... @@ -12,4 +12,7 @@ public interface DeleteBatchTest {
12 12 void test(String schoolId);
13 13 void test2(String schoolId);
14 14 void test3(String schoolId);
  15 +
  16 + void test4(Integer schoolId,Integer studentType,String sex);
  17 +
15 18 }
... ...
cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java
1   -//package com.example.dahua.service;
2   -//
3   -///**
4   -// * 下发用户信息、人脸、卡、权限接口
5   -// * @author xuquan
6   -// * @date 2020/12/1 11:08
7   -// */
8   -//public interface UserOperateService {
9   -//
10   -// void sendUserInfo(String file,int userType,String schoolId,String userId,String deviceId,String deviceType,int flag);
11   -//
12   -// void addFaceGroup(String file,int userType,String schoolId,String userId,String deviceId,String deviceType);
13   -//}
  1 +package com.example.dahua.service;
  2 +
  3 +import com.example.dahua.bean.SendFaceDto;
  4 +
  5 +/**
  6 + * 下发用户信息、人脸、卡、权限接口
  7 + * @author xuquan
  8 + * @date 2020/12/1 11:08
  9 + */
  10 +public interface UserOperateService {
  11 +
  12 + /**
  13 + * 照片下发
  14 + * @param sendFaceDto
  15 + */
  16 + void sendUserFaces(SendFaceDto sendFaceDto);
  17 +
  18 +}
... ...
cloud/dahua/src/main/java/com/example/dahua/service/imp/AttendanceImp.java
... ... @@ -24,7 +24,7 @@ public class AttendanceImp implements AttendanceService {
24 24 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);
25 25 return jdbcTemplate.update(insertSql);
26 26 } else {//设备 已经存在,更新在线状态
27   - updateConnectStateWithDevid(1, clint_id);
  27 + updateConnectStateWithDevid(1,intime, clint_id);
28 28 }
29 29 } catch (Exception e) {
30 30 e.printStackTrace();
... ... @@ -54,10 +54,10 @@ public class AttendanceImp implements AttendanceService {
54 54 }
55 55  
56 56 @Override
57   - public int updateConnectStateWithDevid(int isConnection, String clint_id) {
  57 + public int updateConnectStateWithDevid(int isConnection,String inTime, String clint_id) {
58 58 int index = 0;
59 59 try {
60   - String updateSql = String.format(" update SZ_Attendance set isConnection = %d where clint_id = '%s' ", isConnection, clint_id);
  60 + String updateSql = String.format(" update SZ_Attendance set isConnection = %d,inTime='%s' where clint_id = '%s' ", isConnection,inTime,clint_id);
61 61 index = jdbcTemplate.update(updateSql);
62 62 // System.out.println("updateIndex:"+index+" isConnection:"+isConnection+"updateSql:"+updateSql);
63 63 } catch (Exception e) {
... ...
cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java 0 → 100644
... ... @@ -0,0 +1,133 @@
  1 +package com.example.dahua.service.imp;
  2 +
  3 +
  4 +import com.example.dahua.bean.SendRecordBean;
  5 +import com.example.dahua.bean.StudentBean;
  6 +import com.example.dahua.dao.UserDao;
  7 +import com.example.dahua.xiananDao.SendRecordDao;
  8 +import lombok.extern.slf4j.Slf4j;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.stereotype.Service;
  11 +import org.springframework.util.StringUtils;
  12 +
  13 +import java.text.SimpleDateFormat;
  14 +import java.util.*;
  15 +import java.util.stream.Collectors;
  16 +
  17 +/**
  18 + * 业务基础类
  19 + * @author xuquan
  20 + * @date 2020/12/23 10:16
  21 + */
  22 +@Slf4j
  23 +@Service
  24 +public class BaseService {
  25 +
  26 + @Autowired
  27 + private SendRecordDao sendRecordDao;
  28 +
  29 + @Autowired
  30 + private UserDao userDao;
  31 +
  32 + /**
  33 + * 获取学校下学生数据
  34 + * @param schoolId
  35 + * @param studentType
  36 + * @param sex
  37 + * @return
  38 + */
  39 + public List<StudentBean> getStudentList(Integer schoolId, Integer studentType, String sex) {
  40 + List<Integer> list = new ArrayList<>();
  41 + if(!StringUtils.isEmpty(sex)){
  42 + String[] msg = sex.split(",");
  43 + for(String s : msg){
  44 + list.add(Integer.valueOf(s));
  45 + }
  46 + }
  47 + List<StudentBean> students = userDao.getStudentList(schoolId,studentType, list);
  48 + //去重重复数据
  49 + List<StudentBean> studentList = students.stream().collect(Collectors.collectingAndThen(
  50 + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new));
  51 + return studentList;
  52 + }
  53 +
  54 + /**
  55 + * 获取学校下老师数据
  56 + * @param schoolId
  57 + * @return
  58 + */
  59 + public List<StudentBean> getTeacherList(Integer schoolId) {
  60 + List<StudentBean> teachers = userDao.getTeacherList(schoolId);
  61 + //去重重复数据
  62 + List<StudentBean> teacherist = teachers.stream().collect(Collectors.collectingAndThen(
  63 + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getTeacher_num))), ArrayList::new));
  64 + return teacherist;
  65 + }
  66 +
  67 + /**
  68 + * 保存成功下发记录
  69 + */
  70 + public synchronized void sendSuccessRecord(SendRecordBean recordBean) {
  71 + try{
  72 + String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  73 + Integer schoolId = recordBean.getSchoolId();
  74 + String deviceId = recordBean.getDeviceID();
  75 + String resultCard = recordBean.getNum();
  76 + String userId= recordBean.getUserId();
  77 + String schoolName = recordBean.getSchoolName();
  78 + String userName = recordBean.getName();
  79 + String faceUrl = recordBean.getImgPath();
  80 + Integer userType = recordBean.getUserType();
  81 + Integer deviceType = recordBean.getDeviceType();
  82 + List<SendRecordBean> sendRecordBeans = sendRecordDao.getRecordIsExit(schoolId,deviceId,resultCard,userId);
  83 + SendRecordBean sendRecordBean =null;
  84 + if(sendRecordBeans.size()>0){
  85 + sendRecordBean = sendRecordBeans.get(0);
  86 + }
  87 + if (null == sendRecordBean) {
  88 + sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName,
  89 + faceUrl, schoolId,null,null, userType,deviceType,1);
  90 + } else {
  91 + sendRecordDao.updateFaceSuccessRecord(deviceId, resultCard, time, faceUrl, userName, userId);
  92 + }
  93 + }catch (Exception e){
  94 + log.error("保存成功记录失败。");
  95 + return;
  96 + }
  97 + }
  98 +
  99 +
  100 + /**
  101 + * 保存下发失败记录
  102 + */
  103 + public synchronized void sendFailRecord(SendRecordBean recordBean) {
  104 + try{
  105 + String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  106 + Integer schoolId = recordBean.getSchoolId();
  107 + String deviceId = recordBean.getDeviceID();
  108 + String resultCard = recordBean.getNum();
  109 + String userId= recordBean.getUserId();
  110 + String schoolName = recordBean.getSchoolName();
  111 + String userName = recordBean.getName();
  112 + String faceUrl = recordBean.getImgPath();
  113 + Integer userType = recordBean.getUserType();
  114 + Integer failType = recordBean.getFailType();
  115 + String failContent = recordBean.getFailContent();
  116 + Integer deviceType = recordBean.getDeviceType();
  117 + List<SendRecordBean> sendRecordBeans = sendRecordDao.getRecordIsExit(schoolId,deviceId,resultCard,userId);
  118 + SendRecordBean sendRecordBean =null;
  119 + if(sendRecordBeans.size()>0){
  120 + sendRecordBean = sendRecordBeans.get(0);
  121 + }
  122 + if (null == sendRecordBean) {
  123 + sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName,
  124 + faceUrl, schoolId,failContent,failType, userType,deviceType,2);
  125 + }else {
  126 + sendRecordDao.updateFaceFailRecord(deviceId,faceUrl,resultCard,time,failContent,userId);
  127 + }
  128 + }catch (Exception e){
  129 + log.error("保存失败记录失败。");
  130 + return;
  131 + }
  132 + }
  133 +}
... ...
cloud/dahua/src/main/java/com/example/dahua/service/imp/DeleteBatchTestImpl.java
1 1 package com.example.dahua.service.imp;
2 2  
3 3 import com.example.dahua.bean.SendRecordBean;
  4 +import com.example.dahua.bean.StudentBean;
4 5 import com.example.dahua.bean.UserInfoBean;
5 6 import com.example.dahua.dao.UserDao;
6 7 import com.example.dahua.service.DeleteBatchTest;
... ... @@ -8,8 +9,10 @@ import com.example.dahua.xiananDao.SendRecordDao;
8 9 import org.springframework.beans.factory.annotation.Autowired;
9 10 import org.springframework.stereotype.Repository;
10 11 import org.springframework.stereotype.Service;
  12 +import org.springframework.util.StringUtils;
11 13  
12   -import java.util.List;
  14 +import java.util.*;
  15 +import java.util.stream.Collectors;
13 16  
14 17 /**
15 18 * TODO
... ... @@ -25,6 +28,9 @@ public class DeleteBatchTestImpl implements DeleteBatchTest {
25 28 private UserDao userDao;
26 29 @Autowired
27 30 private SendRecordDao sendRecordDao;
  31 + @Autowired
  32 + private BaseService baseService;
  33 +
28 34  
29 35 @Override
30 36 public void test(String schoolId) {
... ... @@ -39,7 +45,7 @@ public class DeleteBatchTestImpl implements DeleteBatchTest {
39 45 if(sendRecords.size()>0){
40 46 sendRecordDao.deleteFaceFailTest(s.getDeviceID(),s.getNum(),String.valueOf(s.getSchoolId()));
41 47 //获取用户iD
42   - String userId = userDao.getUerIdWithNumTest(s.getNum(),String.valueOf(s.getSchoolId()));
  48 + String userId = userDao.getUerIdWithNumTest(s.getNum(),s.getSchoolId());
43 49 //获取记录集编号
44 50 List<String> recordNos = userDao.getRecordNoTest(s.getName(),userId,s.getDeviceID());
45 51 if(recordNos.size()>0){
... ... @@ -62,7 +68,7 @@ public class DeleteBatchTestImpl implements DeleteBatchTest {
62 68 int i = 0;
63 69 for(SendRecordBean s : sendRecordBeanList){
64 70 //获取用户iD
65   - String userId = userDao.getUerIdWithNumTest(s.getNum(),String.valueOf(s.getSchoolId()));
  71 + String userId = userDao.getUerIdWithNumTest(s.getNum(),s.getSchoolId());
66 72 //获取记录集编号
67 73 List<String> recordNos = userDao.getRecordNoTest(s.getName(),userId,s.getDeviceID());
68 74 if(recordNos.size()>0){
... ... @@ -92,4 +98,31 @@ public class DeleteBatchTestImpl implements DeleteBatchTest {
92 98 }
93 99 }
94 100  
  101 + @Override
  102 + public void test4(Integer schoolId,Integer studentType,String sex) {
  103 + String str = "949252605603,949252365603,949251825603,949252545603,949252345603,949252245603,949252185603,949252085603,949252285603,949252725603,949252305603,949252065603,949251885603,949252525603,949251945603,949252625603,949251985603,949252505603";
  104 + String[] deviceArr = str.split(",");
  105 + List<String> deviceList= new ArrayList<>(Arrays.asList(deviceArr));
  106 + List<StudentBean> lists = baseService.getStudentList(schoolId, studentType, sex);
  107 + if(lists.size() >0){
  108 + System.out.println("总数 :"+lists.size());
  109 +// int i = 0;
  110 +// for(StudentBean studentBean : lists){
  111 +// String cardNum = studentBean.getStudent_num();
  112 +// String userId = studentBean.getUser_id();
  113 +// for (String sno : deviceList){
  114 +// List<SendRecordBean> sendRecordBeans = sendRecordDao.getRecordIsExit(schoolId,sno,cardNum,userId);
  115 +// SendRecordBean sendRecordBean =null;
  116 +// if(sendRecordBeans.size()>0){
  117 +// System.out.println("进行删除:"+i);
  118 +// sendRecordBean = sendRecordBeans.get(0);
  119 +// sendRecordDao.deleteRecord(sendRecordBean.getId());
  120 +// }
  121 +// }
  122 +// i++;
  123 +// }
  124 + System.out.println("完成");
  125 + }
  126 + }
  127 +
95 128 }
... ...
cloud/dahua/src/main/java/com/example/dahua/service/imp/UserOperateServiceImpl.java
1   -//package com.example.dahua.service.imp;
2   -//
3   -//import com.example.dahua.MyTask;
4   -//import com.example.dahua.bean.*;
5   -//import com.example.dahua.dao.UserDao;
6   -//import com.example.dahua.enums.EnumDeviceType;
7   -//import com.example.dahua.enums.EnumSendFaceType;
8   -//import com.example.dahua.enums.EnumSzBusinessType;
9   -//import com.example.dahua.lib.CompressPic;
10   -//import com.example.dahua.lib.FilePath;
11   -//import com.example.dahua.lib.NetSDKLib;
12   -//import com.example.dahua.module.GateModule2;
13   -//import com.example.dahua.service.PermissFaceService;
14   -//import com.example.dahua.service.UserOperateService;
15   -//import com.example.dahua.service.UserService;
16   -//import com.example.dahua.utils.DateFormatUtil;
17   -//import com.example.dahua.utils.FileUtils;
18   -//import com.example.dahua.utils.JsonUtils;
19   -//import com.example.dahua.xiananDao.SendRecordDao;
20   -//import lombok.extern.slf4j.Slf4j;
21   -//import org.springframework.beans.factory.annotation.Autowired;
22   -//import org.springframework.stereotype.Service;
23   -//import org.springframework.util.StringUtils;
24   -//
25   -//import java.util.Date;
26   -//import java.util.List;
27   -//
28   -///**
29   -// * 下发用户信息、人脸、卡、权限接口实现类
30   -// * @author xuquan
31   -// * @date 2020/12/1 11:12
32   -// */
33   -//@Slf4j
34   -//@Service
35   -//public class UserOperateServiceImpl implements UserOperateService {
36   -//
37   -// @Autowired
38   -// private UserDao userDao;
39   -// @Autowired
40   -// private SendRecordDao sendRecordDao;
41   -// @Autowired
42   -// private UserService userService;
43   -// @Autowired
44   -// PermissFaceService permissFaceService;
45   -//
46   -// private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper();
47   -//
48   -// @Override
49   -// public void sendUserInfo(String filePath,int userType,String schoolId,String userId,String deviceId,String deviceType,int flag) {
50   -// String schoolName= userDao.getSchoolName(schoolId);
51   -// if(StringUtils.isEmpty(schoolName)){
52   -// log.info("下发用户失败,学校ID: {},未查询到对应学校.",schoolId);
53   -// return;
54   -// }
55   -// //获取学生信息
56   -// UserInfoBean userInfoBean = null;
57   -// if (userType == EnumSzBusinessType.EnumUserType.STUDENT.code) {
58   -// userInfoBean = userDao.getUserInfoByUserId(schoolId,userId);
59   -// if(null == userInfoBean){
60   -// log.info("下发学生信息失败,学校ID: {},用户ID: {},未查询到对应学生.",schoolId,userId);
61   -// return;
62   -// }
63   -// }
64   -// //获取老师信息
65   -// if (userType == EnumSzBusinessType.EnumUserType.TEACHER.code){
66   -// TeacherBean teacher = userDao.getTeacherByUserId(schoolId,userId);
67   -// if (null == teacher) {
68   -// log.info("下发教师信息失败,学校ID: {},用户ID: {},未查询到对应教师.",schoolId,userId);
69   -// return;
70   -// }
71   -// userInfoBean.setStudent_num(teacher.getTeacher_num());
72   -// userInfoBean.setName(teacher.getName());
73   -// userInfoBean.setUser_id(teacher.getUser_id());
74   -// userInfoBean.setStudentcode(teacher.getNum());
75   -// userInfoBean.setStudent_id(teacher.getTeacher_id());
76   -// userInfoBean.setSchool_id(teacher.getSchool_id());
77   -// }
78   -// //如果未传指定设备ID,则获取学校下所有设备进行下发
79   -// List<AttendanceBean> attendanceBeans = userService.getAttendanceBeans(schoolId, String.valueOf(deviceType), deviceId);
80   -// if(attendanceBeans.size()<1){
81   -// log.info("下发用户信息失败,学校ID: {},设备类型:{},未查询到对应设备.",schoolId,deviceType);
82   -// return;
83   -// }
84   -// //下发用户
85   -// sendUser(filePath,attendanceBeans,userInfoBean,userType,Integer.parseInt(deviceType),flag);
86   -// }
87   -//
88   -//
89   -// /**
90   -// * 下发用户
91   -// * @param filePath
92   -// * @param attendanceBeans
93   -// * @param userInfoBean
94   -// * @param userType
95   -// * @param deviceType
96   -// * @param flag
97   -// */
98   -// private void sendUser(String filePath,List<AttendanceBean> attendanceBeans,UserInfoBean userInfoBean,int userType,int deviceType,int flag){
99   -// String facePath = compressPic(filePath,userInfoBean.getStudentcode());
100   -// if(StringUtils.isEmpty(facePath)){
101   -// log.warn("压缩后图片路径为空!");
102   -// return;
103   -// }
104   -// //下发至所有设备
105   -// for (AttendanceBean attendanceBean : attendanceBeans) {
106   -// //下发用户有效期
107   -// String startTime = DateFormatUtil.dateFormatString(new Date(), "yyyy-MM-dd HH:mm:ss");
108   -// Date endDate = DateFormatUtil.getDateByYearLength(4, new Date());
109   -// String endTime = DateFormatUtil.dateFormatString(endDate, "yyyy-MM-dd HH:mm:ss");
110   -// //学校
111   -// String schoolId = attendanceBean.getSchool_id();
112   -// String schoolName = userDao.getSchoolName(schoolId);
113   -// //用户ID
114   -// String userId = userInfoBean.getUser_id();
115   -// //学生ID,老师ID
116   -// String studentId = userInfoBean.getStudent_id();
117   -// //设备ID
118   -// String deviceId = attendanceBean.getClint_id();
119   -// //学生姓名
120   -// String userName = userInfoBean.getName();
121   -// //卡号
122   -// String studentNum = userInfoBean.getStudent_num();
123   -// if(flag == EnumSzBusinessType.EnumSendType.TWO.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){
124   -// if(StringUtils.isEmpty(studentNum)){
125   -// log.error("下发失败, 用户卡号不存在。");
126   -// return;
127   -// }
128   -// }
129   -// //通道号
130   -// String channel ="";
131   -// if (userType == EnumSzBusinessType.EnumUserType.STUDENT.code){
132   -// //根据学生ID\学校ID获取学生类型
133   -// String studentType = userDao.getStudentType(schoolId, studentId);
134   -// channel = analysisPermission(Integer.parseInt(schoolId), studentType);
135   -// }
136   -//
137   -// //登录设备
138   -// NetSDKLib.LLong loginHandleLong = MyTask.lLongMap.get(attendanceBean.getClint_id());
139   -// //若设备不在线时,且人脸下发失败表中存在记录,则执行修改下发失败状态为:设备不在线
140   -// if (loginHandleLong == null) {
141   -// log.info(", 设备ID: {},设备不在线", attendanceBean.getClint_id());
142   -// FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices);
143   -// //设备不在线
144   -// int failType = EnumSendFaceType.NOT_ONLINE_DEVICE.code;
145   -// String failContent = EnumSendFaceType.NOT_ONLINE_DEVICE.message;
146   -// saveSendFailRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,failType,failContent,deviceId,deviceType);
147   -// } else {
148   -// log.info("=================开始执行下发人脸及卡号任务=================");
149   -// /**
150   -// * 下发升级二代接口,动态库libs下win64,更新为官方最新版sdk
151   -// * 注:用户下发方案:
152   -// * flag=1:用户+人脸 flag=2:用户+卡号;flag=3:用户+人脸+卡号
153   -// * 新增: 用户信息和卡信息,一同下发, 人脸单独下发;返回信息 0 为成功,其他为相应错误码 参考:NET_EM_FAILCODE
154   -// * 修改: 同上
155   -// * 复用一代接口字段recordNo,新增时为默认添加,修改时,查询表字段不为空,则表示此用户以存在设备中。则进行修改
156   -// */
157   -// //人脸操作错误号:0为成功,其他为相应错误号
158   -// int bFaceFalgs = -1;
159   -// //用户操作错误号:0为成功,其他为相应错误号
160   -// int bUserFlags = -1;
161   -// //卡操作错误号 :0为成功,其他为相应错误号
162   -// int bCardFlags = -1;
163   -// //获取记录集编号
164   -// String recordNo = userDao.getRecordNo(userId, deviceId);
165   -// String cardNum ="";
166   -// if (attendanceBean.getClint_id().startsWith("ytj") && Integer.parseInt(attendanceBean.getSchool_id()) != 126
167   -// && Integer.parseInt(attendanceBean.getSchool_id()) != 393) {
168   -// cardNum = studentNum;
169   -// deviceType = EnumDeviceType.DH_FACE_YTJ.deviceType;
170   -// } else {
171   -// //卡号取反
172   -// cardNum = cardNo(studentNum);
173   -// }
174   -// try {
175   -// /**
176   -// * recordNo 不为空存在下发记录集编号,直接修改执行人脸信息(二代升级接口,此处不需要修改用户信息)
177   -// */
178   -// if (!StringUtils.isEmpty(recordNo)) {
179   -// //修改用户信息
180   -// bUserFlags = GateModule2.addUser(userId,userName,userType,"123456",channel,startTime,endTime,loginHandleLong);
181   -// if(flag == EnumSzBusinessType.EnumSendType.TWO.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){
182   -// //修改卡
183   -// bCardFlags = GateModule2.modifyCard(userId,cardNum,loginHandleLong);
184   -// }
185   -// if(flag == EnumSzBusinessType.EnumSendType.ONE.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){
186   -// //修改人脸
187   -// bFaceFalgs = GateModule2.modifyFace(userId,facePath,loginHandleLong);
188   -// }
189   -// if(bFaceFalgs != 0 ){
190   -// //未知错误、对返回数据校验出错,执行删除用户,重新下发
191   -// if(bFaceFalgs == EnumSzBusinessType.EnumOperateErrorType.ONE.code || bFaceFalgs == EnumSzBusinessType.EnumOperateErrorType.ERR_21.code){
192   -// if(GateModule2.deleteUser(userId,loginHandleLong) == 0){
193   -// bUserFlags = GateModule2.addUser(userId,userName,userType,"123456",channel,startTime,endTime,loginHandleLong);
194   -// if(flag == EnumSzBusinessType.EnumSendType.TWO.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){
195   -// //新增卡
196   -// bCardFlags = GateModule2.addCard(userId,cardNum,loginHandleLong);
197   -// }
198   -// if(flag == EnumSzBusinessType.EnumSendType.ONE.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){
199   -// //新增人脸
200   -// bFaceFalgs = GateModule2.addFace(userId,facePath,loginHandleLong);
201   -// }
202   -//
203   -// }
204   -// }
205   -// }
206   -// } else {
207   -// if(flag == EnumSzBusinessType.EnumSendType.TWO.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){
208   -// //新增卡
209   -// bCardFlags = GateModule2.addCard(userId,cardNum,loginHandleLong);
210   -// }
211   -// if(flag == EnumSzBusinessType.EnumSendType.ONE.code || flag == EnumSzBusinessType.EnumSendType.THREE.code){
212   -// //新增人脸
213   -// bFaceFalgs = GateModule2.addFace(userId,facePath,loginHandleLong);
214   -// }
215   -// //三种方式都下发成功,则新增记录集信息,默认为1
216   -// if ((bFaceFalgs ==0 && bUserFlags ==0)||(bCardFlags ==0 && bUserFlags ==0)||(bFaceFalgs ==0 && bUserFlags ==0 && bCardFlags ==0)) {
217   -// userDao.saveRecordNo(userId,1, userName, deviceId);
218   -// }
219   -// }
220   -// } catch (Exception e) {
221   -// log.error("下发异常:异常错误信息msg: {}", e.getMessage());
222   -// continue;
223   -// }
224   -// /**
225   -// * 人脸和卡都下发成功
226   -// */
227   -// if (bUserFlags ==0 && bFaceFalgs ==0) {
228   -// FileUtils.getInstance().writeLogs("下发用户和人脸成功: userName: " + userName + ",设备ID: " + deviceId, FileUtils.sendUserSucTxt);
229   -// log.info("下发用户和人脸成功: userName: " + userName + ",设备ID: " + deviceId);
230   -// saveSendSuccessRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,deviceId,deviceType);
231   -// }
232   -// if (bUserFlags ==0 && bCardFlags ==0) {
233   -// FileUtils.getInstance().writeLogs("下发用户和卡号成功: userName: " + userName +",卡号: "+ cardNum + ",设备ID: " + deviceId, FileUtils.sendUserSucTxt);
234   -// log.info("下发用户和卡号成功: userName: " + userName +",卡号: "+ cardNum + ",设备ID: " + deviceId);
235   -// saveSendSuccessRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,deviceId,deviceType);
236   -// }
237   -// if (bFaceFalgs ==0 && bUserFlags ==0 && bCardFlags ==0) {
238   -// FileUtils.getInstance().writeLogs("下发用户和人脸、卡号成功: userName: " + userName +",卡号: "+ cardNum + ",设备ID: " + deviceId, FileUtils.sendUserSucTxt);
239   -// log.info("下发用户和人脸、卡号成功: userName: " + userName +",卡号: "+ cardNum + ",设备ID: " + deviceId);
240   -// saveSendSuccessRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,deviceId,deviceType);
241   -// }
242   -// /**
243   -// * 人脸和人脸都下发失败
244   -// */
245   -// if (bUserFlags < 0 && bFaceFalgs < 0 ) {
246   -// FileUtils.getInstance().writeLogs("下发用户和人脸和失败: userName: " + userName + ",设备ID: " + deviceId, FileUtils.sendUserErrTxt);
247   -// log.info("下发用户和人脸和失败: userName: " + userName + ",设备ID: " + deviceId);
248   -// //失败信息
249   -// int failType = EnumSendFaceType.FACE_AND_CARD_FAIL.code;
250   -// String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
251   -// saveSendFailRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,failType,failContent,deviceId,deviceType);
252   -// }
253   -// /**
254   -// * 人脸和卡都下发失败
255   -// */
256   -// if (bUserFlags < 0 && bCardFlags< 0) {
257   -// FileUtils.getInstance().writeLogs("下发用户和卡号失败: userName: " + userName + ",设备ID: " + deviceId, FileUtils.sendUserErrTxt);
258   -// log.info("下发用户和卡号失败: userName: " + userName + ",设备ID: " + deviceId);
259   -// //失败信息
260   -// int failType = EnumSendFaceType.FACE_AND_CARD_FAIL.code;
261   -// String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
262   -// saveSendFailRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,failType,failContent,deviceId,deviceType);
263   -// }
264   -// /**
265   -// * 下发卡号成功,下发人脸失败,
266   -// */
267   -// if (bUserFlags < 0 && bCardFlags < 0 && bFaceFalgs < 0) {
268   -// FileUtils.getInstance().writeLogs("下发用户、人脸、卡号失败: userName: " + userName + ",设备ID: " + deviceId, FileUtils.sendUserErrTxt);
269   -// log.info("下发用户、人脸、卡号失败: userName: " + userName + ",设备ID: " + deviceId);
270   -// //失败信息
271   -// int failType = EnumSendFaceType.FACE_AND_CARD_FAIL.code;
272   -// String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
273   -// saveSendFailRecord(Integer.parseInt(schoolId),schoolName,userType,userName,filePath,studentId,studentNum,failType,failContent,deviceId,deviceType);
274   -// }
275   -// /**
276   -//// * 下发卡号失败,下发人脸成功,
277   -//// */
278   -//// if (bUserFlags ==0 && bCardFlags == 0 && bFaceFalgs !=0) {
279   -//// FileUtils.getInstance().writeLogs("卡信息已存在,下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);
280   -//// //失败信息
281   -//// String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
282   -//// sendRecordBean.setFailType(EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code);
283   -//// sendRecordBean.setFailContent(failContent);
284   -//// sendRecordDao.updateFace(sendRecordBean.getNum(), sendRecordBean.getDeviceID(), sendRecordBean.getFailType(), EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code);
285   -//// addFailDace(sendRecordBean);
286   -//// }
287   -// }
288   -// }
289   -// }
290   -//
291   -// /**
292   -// * 解析下发异常信息
293   -// * @param userErrNum
294   -// * @param faceErrNum
295   -// * @return
296   -// */
297   -// private String analysisErrorMsg(int userErrNum,int faceErrNum,int cardErrNum){
298   -// StringBuffer sb = new StringBuffer();
299   -// //用户信息
300   -// if(!StringUtils.isEmpty(userErrNum)){
301   -// EnumSzBusinessType.EnumOperateErrorType operateErrorType = EnumSzBusinessType.EnumOperateErrorType.getByCode(userErrNum);
302   -// String message = "";
303   -// if(operateErrorType !=null){
304   -// message= operateErrorType.getMessage();
305   -// sb.append("下发用户信息:").append(message).append(";");
306   -// }
307   -// log.info("下发用户失败,错误码:{},错误描述:{}",userErrNum,message);
308   -// }
309   -// //卡异常信息
310   -// if(!StringUtils.isEmpty(cardErrNum)){
311   -// EnumSzBusinessType.EnumOperateErrorType operateErrorType = EnumSzBusinessType.EnumOperateErrorType.getByCode(cardErrNum);
312   -// String message = "";
313   -// if(operateErrorType !=null){
314   -// message= operateErrorType.getMessage();
315   -// sb.append("下发用户卡信息:").append(message).append(";");
316   -// }
317   -// log.info("下发用户卡失败,错误码:{},错误描述:{}",cardErrNum,message);
318   -// }
319   -// //人脸异常信息
320   -// if(!StringUtils.isEmpty(faceErrNum)){
321   -// EnumSzBusinessType.EnumOperateErrorType operateErrorType = EnumSzBusinessType.EnumOperateErrorType.getByCode(faceErrNum);
322   -// String message = "";
323   -// if(operateErrorType !=null){
324   -// message= operateErrorType.getMessage();
325   -// sb.append("下发用户人脸:").append(message);
326   -// }
327   -// log.info("下发用户人脸失败,错误码:{},错误描述:{}",faceErrNum,message);
328   -// }
329   -// return sb.toString();
330   -// }
331   -//
332   -// /**
333   -// * 保存下发记录
334   -// */
335   -// private void saveSendFailRecord(int schoolId,String schoolName,int userType,String userName,String filePath,String customerId,
336   -// String cardNum,int failType,String failContent,String deviceId,int deviceType){
337   -// //设置下发记录
338   -// String time = DateFormatUtil.dateFormatString(new Date(),"yyyy-MM-dd HH:mm:ss");
339   -// //获取指定设备指定用户的人脸失败记录
340   -// List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceFailIsExit(deviceId, customerId);
341   -// if(sendRecordBeanList.size() >0){
342   -// //删除失败记录
343   -// for (SendRecordBean recordBean : sendRecordBeanList) {
344   -// sendRecordDao.deleteFaceFail(recordBean.getNum(), recordBean.getDeviceID());
345   -// }
346   -// }
347   -// String rootPath = userType == EnumSzBusinessType.EnumUserType.TEACHER.code ? "Teacher" : "Student" ;
348   -// //人脸路径
349   -// String imagePath = filePath.replace("C:/imgCom", String.format("E:\\wwwhtdocs\\smartcampus\\face17e5\\School%s\\%s", schoolId, rootPath));
350   -// //添加失败记录
351   -// sendRecordDao.addFaceFail(customerId, deviceId, cardNum, userName,time,schoolName,imagePath,schoolId,failContent,failType,userType,deviceType);
352   -// }
353   -//
354   -// /**
355   -// * 保存成功记录
356   -// */
357   -// private void saveSendSuccessRecord(int schoolId,String schoolName,int userType,String userName,String filePath,String customerId,
358   -// String cardNum,String deviceId,int deviceType){
359   -// //人脸下发成功记录, 先判断是否已经存在了
360   -// List<SendRecordBean> sendRecordBeanList = sendRecordDao.getFaceSucceIsexit(deviceId, String.valueOf(schoolId),cardNum);
361   -// if (sendRecordBeanList.size() > 0) {
362   -// //删除重复数据
363   -// for (SendRecordBean recordBean : sendRecordBeanList) {
364   -// sendRecordDao.deleteFaceSuccess(recordBean.getDeviceID(),recordBean.getNum());
365   -// }
366   -// }
367   -// String time = DateFormatUtil.dateFormatString(new Date(),"yyyy-MM-dd HH:mm:ss");
368   -// //重新添加人脸下发记录
369   -// sendRecordDao.addFaceSuccess(customerId, deviceId, cardNum, userName, time, schoolName, filePath, schoolId, userType, deviceType);
370   -//
371   -// //删除之前失败记录
372   -// sendRecordDao.deleteFaceFail(cardNum,deviceId);
373   -// }
374   -//
375   -// /**
376   -// * 解析权限模板、获取下发通道号
377   -// * @param schoolId
378   -// * @param studentType
379   -// * @return
380   -// */
381   -// private String analysisPermission(int schoolId, String studentType){
382   -// List<PermissionFaceBean> permissionFaceBeans = permissFaceService.getPermissionList(schoolId);
383   -// String channel ="";
384   -// if(permissionFaceBeans.size()>0){
385   -// for(PermissionFaceBean permissionFaceBean : permissionFaceBeans){
386   -// String json = permissionFaceBean.getPermissionJson();
387   -// PermissionBean permissionBean = objectMapper.fromJson(json,PermissionBean.class);
388   -// //学生考勤类型 1:通校生,2:住校生,3:全部
389   -// String studentTypeStr = permissionBean.getStudentType();
390   -// if(studentTypeStr.indexOf(studentType)!=-1){
391   -// channel= permissionFaceBean.getChannel();
392   -// }
393   -// }
394   -// if(StringUtils.isEmpty(channel)){
395   -// log.warn("未获取到学校权限通道号!");
396   -// return "";
397   -// }
398   -// return channel;
399   -// }
400   -// return channel;
401   -// }
402   -//
403   -// /**
404   -// * 压缩图片
405   -// * @param picSrc
406   -// * @param userId
407   -// * @return
408   -// */
409   -// private String compressPic(String picSrc,String userId){
410   -// //压缩后图片地址
411   -// String targPath ="";
412   -// try{
413   -// targPath = FilePath.picPathComp + userId + ".jpg";
414   -// //压缩后的图片
415   -// CompressPic.CompressPic(picSrc, targPath, userId);
416   -// return targPath;
417   -// } catch (Exception e) {
418   -// log.error("图片压缩失败,错误信息;{}",e);
419   -// }
420   -// return "";
421   -// }
422   -//
423   -// public String cardNo(String cardDex) {
424   -//
425   -// String cardR = "";
426   -// int length = cardDex.length();
427   -// if (length != 8) {
428   -// System.out.println("卡号格式不正确:" + cardDex);
429   -// return cardDex;
430   -// }
431   -// while (length > 0) {
432   -// length -= 2;
433   -// cardR += cardDex.substring(length, length + 2);
434   -// }
435   -//
436   -// return cardR;
437   -//
438   -// }
439   -//
440   -// @Override
441   -// public void addFaceGroup(String file, int userType, String schoolId, String userId, String deviceId, String deviceType) {
442   -// String schoolName= userDao.getSchoolName(schoolId);
443   -// if(StringUtils.isEmpty(schoolName)){
444   -// log.info("下发用户失败,学校ID: {},未查询到对应学校.",schoolId);
445   -// return;
446   -// }
447   -// //获取学生信息
448   -// UserInfoBean userInfoBean = null;
449   -// if (userType == EnumSzBusinessType.EnumUserType.STUDENT.code) {
450   -// userInfoBean = userDao.getUserInfoByUserId(schoolId,userId);
451   -// if(null == userInfoBean){
452   -// log.info("下发学生信息失败,学校ID: {},用户ID: {},未查询到对应学生.",schoolId,userId);
453   -// return;
454   -// }
455   -// }
456   -// //获取老师信息
457   -// if (userType == EnumSzBusinessType.EnumUserType.TEACHER.code){
458   -// TeacherBean teacher = userDao.getTeacherByUserId(schoolId,userId);
459   -// if (null == teacher) {
460   -// log.info("下发教师信息失败,学校ID: {},用户ID: {},未查询到对应教师.",schoolId,userId);
461   -// return;
462   -// }
463   -// userInfoBean.setStudent_num(teacher.getTeacher_num());
464   -// userInfoBean.setName(teacher.getName());
465   -// userInfoBean.setUser_id(teacher.getUser_id());
466   -// userInfoBean.setStudentcode(teacher.getNum());
467   -// userInfoBean.setStudent_id(teacher.getTeacher_id());
468   -// userInfoBean.setSchool_id(teacher.getSchool_id());
469   -// }
470   -// //如果未传指定设备ID,则获取学校下所有设备进行下发
471   -// List<AttendanceBean> attendanceBeans = userService.getAttendanceBeans(schoolId, String.valueOf(deviceType), deviceId);
472   -// if(attendanceBeans.size()<1){
473   -// log.info("下发用户信息失败,学校ID: {},设备类型:{},未查询到对应设备.",schoolId,deviceType);
474   -// return;
475   -// }
476   -// //下发用户
477   -//// addUserFaceGroup(filePath,attendanceBeans,userInfoBean,userType,Integer.parseInt(deviceType),flag);
478   -// }
479   -//
480   -//
481   -//}
  1 +package com.example.dahua.service.imp;
  2 +
  3 +import com.example.dahua.bean.SendFaceDto;
  4 +import com.example.dahua.bean.StudentBean;
  5 +import com.example.dahua.dao.UserDao;
  6 +import com.example.dahua.lib.CompressPic;
  7 +import com.example.dahua.lib.FilePath;
  8 +import com.example.dahua.service.UserOperateService;
  9 +import com.example.dahua.utils.HttpUtils;
  10 +import lombok.extern.slf4j.Slf4j;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.stereotype.Service;
  13 +import org.springframework.util.StringUtils;
  14 +
  15 +import java.io.File;
  16 +import java.util.ArrayList;
  17 +import java.util.Arrays;
  18 +import java.util.List;
  19 +
  20 +/**
  21 + * 下发用户信息、人脸、卡、权限接口实现类
  22 + * @author xuquan
  23 + * @date 2020/12/1 11:12
  24 + */
  25 +@Slf4j
  26 +@Service
  27 +public class UserOperateServiceImpl implements UserOperateService {
  28 +
  29 + @Autowired
  30 + private UserDao userDao;
  31 + @Autowired
  32 + private BaseService baseService;
  33 +
  34 + @Override
  35 + public void sendUserFaces(SendFaceDto sendFaceDto) {
  36 + Integer schoolId = sendFaceDto.getSchoolId();
  37 + Integer studentType = sendFaceDto.getStudentType();
  38 + Integer type = sendFaceDto.getType();
  39 + String sex = sendFaceDto.getSex();
  40 + //下发设备集合
  41 + String[] deviceArr = sendFaceDto.getsNos().split(",");
  42 + List<String> deviceList= new ArrayList<>(Arrays.asList(deviceArr));
  43 + if(deviceList.size()<1){
  44 + log.error("未选择下发设备");
  45 + return;
  46 + }
  47 + Integer userType=null;
  48 + //根据类型获取下发用户信息、文件名目录
  49 + String typeName="";
  50 + List<StudentBean> studentBeanList = null;
  51 + if(type.intValue() == 0 || type.intValue()==1){
  52 + userType = 2;
  53 + typeName= "Student";
  54 + studentBeanList = baseService.getStudentList(schoolId,studentType,sex);
  55 + }else{
  56 + userType = 1;
  57 + typeName= "Teacher";
  58 + studentBeanList = baseService.getTeacherList(schoolId);
  59 + }
  60 + for(StudentBean studentBean : studentBeanList){
  61 + try{
  62 + //100服务器文件目录绝对路径
  63 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  64 + String photo= userType.intValue()==1?studentBean.getFace():studentBean.getPhoto();
  65 + //学籍号
  66 + String studentCode=userType.intValue()==1?studentBean.getNum():studentBean.getStudentcode();
  67 + if (StringUtils.isEmpty(photo) || StringUtils.isEmpty(studentCode)){
  68 + continue;
  69 + }
  70 + String filePath="";
  71 + if(photo.indexOf("f0i5l7e5")!=-1){
  72 + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\");
  73 + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr;
  74 + } else{
  75 + //以学籍号为名的文件名
  76 + String fileName = photo.split(typeName +"/")[1];
  77 + //100服务器上人脸照绝对路径
  78 + filePath = path+ "\\" + fileName;
  79 + }
  80 + log.info("学籍号:{},人脸路径:{}, ",studentCode,filePath);
  81 + //100服务人脸照图片路径
  82 + File file = new File(filePath);
  83 + if(file.exists()){
  84 + String targetPath = FilePath.picPathComp+ file.getName();
  85 + try {
  86 + CompressPic.CompressPic(file.getAbsolutePath(), targetPath,"");
  87 + } catch (Exception e) {
  88 + log.error("压缩图片失败");
  89 + e.printStackTrace();
  90 + continue;
  91 + }
  92 + for(String sno : deviceList){
  93 + String clint_type = userDao.getClintType(sno);
  94 + HttpUtils.uploadImgs(new File(targetPath), String.valueOf(schoolId), studentCode, clint_type, userType, sno);
  95 + }
  96 + }
  97 + }catch (Exception e){
  98 + log.error("人脸下发失败");
  99 + e.printStackTrace();
  100 + continue;
  101 + }
  102 + }
  103 + }
  104 +
  105 + public static void main(String[] args) {
  106 + String photo = "http://campus.myjxt.com//f0i5l7e5/0/alluser/20210114/430f64e104ea4a7bb7f78f0e42b3fad8.jpg";
  107 + System.out.println(photo.indexOf("f0i5l7e5")!=-1);
  108 + String path = photo.split("f0i5l7e5/")[1];
  109 + path= path.replace("/","\\");
  110 + System.out.println("E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\"+path);
  111 +// System.out.println(photo.split("f0i5l7e5/")[1]);
  112 +// System.out.println(photo.split("f0i5l7e5/")[0]);
  113 + }
  114 +
  115 +}
... ...
cloud/dahua/src/main/java/com/example/dahua/service/imp/UserServiceImp.java
... ... @@ -78,17 +78,15 @@ public class UserServiceImp implements UserService {
78 78 String[] studentInfo = studentCodes.split("_");
79 79  
80 80 if (studentInfo.length > 1) {//附属卡
81   -
82 81 String studentCodeF = studentInfo[0];
83 82 String CardType = studentInfo[1];
84 83 userInfoBean = getUserInfo(schoolId, studentCodeF);
85   - String cardNum = userDao.getCardNum(userInfoBean.getStudent_id(), CardType);
86   - userInfoBean.setStudent_num(cardNum);
87   -
  84 + if(userInfoBean !=null){
  85 + String cardNum = userDao.getCardNum(userInfoBean.getStudent_id(), CardType);
  86 + userInfoBean.setStudent_num(cardNum);
  87 + }
88 88 } else {
89   -
90 89 userInfoBean = getUserInfo(schoolId, studentCode);//获取用户信息
91   -
92 90 }
93 91 } else if (userType == 1) {
94 92 TeacherBean teacher = userDao.getTeacher(schoolId, studentCode);
... ... @@ -104,10 +102,11 @@ public class UserServiceImp implements UserService {
104 102 //下发任务
105 103 // myTask.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType);
106 104 sendUserInfoTask2.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType);
  105 + return true;
107 106 } catch (Exception e) {
108   - e.printStackTrace();
  107 + log.info("方法:uploadImgAndUserInfo,执行时,发生异常",e);
109 108 }
110   - return true;
  109 + return false;
111 110 }
112 111  
113 112 /**
... ...
cloud/dahua/src/main/java/com/example/dahua/utils/HttpUtils.java
... ... @@ -148,6 +148,13 @@ public class HttpUtils {
148 148 return result.getBody();
149 149 }
150 150  
  151 + public static void deleteFace(Integer schoolId) {
  152 + String url = "http://121.40.109.21:8991/operate/deleteFailFace?schoolId=" + schoolId;
  153 + RestTemplate restTemplate = new RestTemplate();
  154 + ResponseEntity<Boolean> result = restTemplate.getForEntity(url, Boolean.class);
  155 + System.out.println("发生请求21服务删除人脸,请求地址: +" + url+ "返回信息: "+ result.getBody());
  156 + }
  157 +
151 158 /**
152 159 * 权限下发至设备
153 160 * @param permissionBean
... ...
cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java
... ... @@ -99,5 +99,26 @@ public interface SendRecordDao {
99 99 @Select("select * from Face_SendSuccess where schoolId = #{schoolId} and userType = #{userType} and deviceId in ('G04F98PAJ164D7','6G04F8PAJ5CAA','6G04F98PAJ1E0DB','6G04F98PAJEE38C')")
100 100 List<SendRecordBean> getFaceSuccessIsExitTest(@Param("schoolId") String schoolId,@Param("userType") int userType);
101 101  
  102 + @Update("delete from Face_SendRecord where id = #{id}")
  103 + void deleteRecord(@Param("id") Integer id);
  104 +
  105 + // ======================== 表 Face_SendRecord ========================
  106 + @Select("select * from Face_SendRecord where schoolId = #{schoolId} and deviceID = #{deviceID} and Num = #{Num} and userId = #{userId}")
  107 + List<SendRecordBean> getRecordIsExit(@Param("schoolId") Integer schoolId,@Param("deviceID") String deviceId, @Param("Num") String card,@Param("userId") String userId);
  108 +
  109 + @Insert("insert into Face_SendRecord values(#{deviceID},#{userId},#{num},#{name},#{time},#{schoolName},#{imgPath},#{schoolId},#{failContent},#{failType},#{userType},#{deviceType},#{status})")
  110 + void saveFaceRecord(@Param("userId") String userId, @Param("deviceID") String deviceID, @Param("num") String num, @Param("name") String name,
  111 + @Param("time") String time, @Param("schoolName") String schoolName, @Param("imgPath") String imgPath, @Param("schoolId") Integer schoolId, @Param("failContent") String failContent,
  112 + @Param("failType") Integer failType, @Param("userType") Integer userType, @Param("deviceType") Integer deviceType,Integer status);
  113 +
  114 + @Update("update Face_SendRecord set time = #{time},failContent = #{content},imgPath= #{faceUrl},status = 2 where deviceID = #{deviceID} and Num =#{Num} and userId = #{userId}")
  115 + 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);
  116 +
  117 + @Update("update Face_SendRecord set time = #{time},imgPath= #{faceUrl},Name = #{Name},status = 1, failType=null, failContent = null where deviceID = #{deviceID} and Num = #{Num}")
  118 + 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);
  119 +
  120 + @Select("select * from Face_SendRecord where schoolId = #{schoolId} and status =2")
  121 + List<SendRecordBean> getFailRecord(@Param("schoolId") Integer schoolId);
  122 +
102 123 }
103 124  
... ...
cloud/dahua/src/main/resources/logback-spring.xml
... ... @@ -8,8 +8,8 @@
8 8 <!--<include resource="org/springframework/boot/logging/logback/defaults.xml" />-->
9 9  
10 10 <!--日志文件存储的基础路径: ${user.home} 为当前服务器用户主目录-->
11   - <property name="LOG_PATH" value="E:/dahua-logs"/>
12   -
  11 + <property name="LOG_PATH" value="D:/dahua-logs"/>
  12 +
13 13 <!--日志文件基础名称-->
14 14 <property name="BASE_FILE_NAME" value="dahua"/>
15 15 <property name="LOG_FILE_MAX_SIZE" value="10MB"/>
... ...
cloud/dahua/src/main/resources/mapper/usermapper.xml
... ... @@ -9,15 +9,38 @@
9 9 <!--and studentcode = #{studentcode}-->
10 10 <!--</select>-->
11 11  
12   - <select id="getStudentWiSidAndSex" resultType="java.lang.String">
13   -
14   - select student_num from SZ_V_School_Student where school_id = #{schoolId} and sex in
15   - <foreach collection="sexs" item="sex" index="index" open="(" separator="," close=")">
16   - #{sex}
17   - </foreach>
  12 + <select id="getStudentList" resultType="com.example.dahua.bean.StudentBean">
  13 + select * from SZ_V_School_Student where school_id = #{schoolId}
  14 + <if test="studentType != null">
  15 + and student_type = #{studentType}
  16 + </if>
  17 + <if test="sex != null and sex.size() >0">
  18 + and sex in
  19 + <foreach item="item" collection="sex" separator="," open="(" close=")" index="">
  20 + #{item}
  21 + </foreach>
  22 + </if>
  23 + and (student_num is not null or student_num != '') and (photo is not null or photo !='')
  24 + </select>
18 25  
  26 + <select id="getTeacherList" resultType="com.example.dahua.bean.StudentBean">
  27 + select * from SZ_V_School_Teacher where school_id = #{schoolId}
  28 + and (teacher_num is not null or teacher_num !='')
  29 + and (face is not null or face !='')
19 30 </select>
20 31  
  32 + <select id="getAuthRecord" resultType="com.example.dahua.bean.DeviceAuthRecord">
  33 + select * from AC_DeviceAuthRecord where State = 1 and GrantState = 1 and SchoolId = #{schoolId}
  34 + <if test="studentType != null">
  35 + and (StudentType = #{studentType} or StudentType =3)
  36 + </if>
  37 + </select>
21 38  
  39 + <select id="queryClintList" resultType="com.example.dahua.bean.AttendanceBean">
  40 + select * from SZ_Attendance where school_id = #{schoolId} and clint_type in(22,29)
  41 + <if test="deviceId != null and deviceId.trim() !=''">
  42 + and clint_id = #{deviceId}
  43 + </if>
  44 + </select>
22 45  
23 46 </mapper>
24 47 \ No newline at end of file
... ...
cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java
... ... @@ -145,4 +145,9 @@ public class SearchMapperTest extends Tester {
145 145 String schoolId = "1485";
146 146 deleteBatchTest.test3(schoolId);
147 147 }
  148 +
  149 + @Test
  150 + public void test9() {
  151 + deleteBatchTest.test4(27,2,"1");
  152 + }
148 153 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
1 1 package com.sincere.haikangface;
2 2  
3 3 import com.alibaba.fastjson.JSON;
4   -import com.alibaba.fastjson.JSONArray;
5 4 import com.alibaba.fastjson.JSONObject;
6   -import com.sincere.haikangface.bean.*;
  5 +import com.sincere.haikangface.bean.AttendanceBean;
  6 +import com.sincere.haikangface.bean.StudentBean;
7 7 import com.sincere.haikangface.bean.xiaoan.Face_Recoder;
8 8 import com.sincere.haikangface.dao.DeviceDao;
9 9 import com.sincere.haikangface.dao.UserDao;
10   -import com.sincere.haikangface.enums.EnumSzBusinessType;
11 10 import com.sincere.haikangface.haikanglibs.HCEHomeAlarm;
12 11 import com.sincere.haikangface.haikanglibs.HCEHomeCMS;
13 12 import com.sincere.haikangface.haikanglibs.HCEHomeSS;
14   -import com.sincere.haikangface.mqtt.MqtUtils;
15 13 import com.sincere.haikangface.service.impl.BaseService;
16   -import com.sincere.haikangface.utils.*;
  14 +import com.sincere.haikangface.utils.AlarmUtils;
  15 +import com.sincere.haikangface.utils.FileUtils;
17 16 import com.sincere.haikangface.xiananDao.SendRecordDao;
18 17 import com.sun.jna.NativeLong;
19 18 import com.sun.jna.Pointer;
... ... @@ -23,15 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
23 22 import org.springframework.beans.factory.annotation.Value;
24 23 import org.springframework.boot.ApplicationArguments;
25 24 import org.springframework.boot.ApplicationRunner;
26   -import org.springframework.core.io.FileSystemResource;
27   -import org.springframework.http.HttpEntity;
28   -import org.springframework.http.HttpHeaders;
29   -import org.springframework.http.MediaType;
30   -import org.springframework.http.ResponseEntity;
31   -import org.springframework.scheduling.annotation.Scheduled;
32 25 import org.springframework.stereotype.Component;
33   -import org.springframework.util.LinkedMultiValueMap;
34   -import org.springframework.util.MultiValueMap;
35 26 import org.springframework.util.StringUtils;
36 27 import org.springframework.web.client.RestTemplate;
37 28  
... ... @@ -40,7 +31,10 @@ import java.net.InetAddress;
40 31 import java.net.UnknownHostException;
41 32 import java.nio.ByteBuffer;
42 33 import java.text.SimpleDateFormat;
43   -import java.util.*;
  34 +import java.util.Date;
  35 +import java.util.HashMap;
  36 +import java.util.List;
  37 +import java.util.Map;
44 38 import java.util.regex.Pattern;
45 39  
46 40 @Component
... ... @@ -67,17 +61,19 @@ public class CMSServer implements ApplicationRunner {
67 61 // 存储设备登录句柄
68 62 static Map<String, NativeLong> map = new HashMap<>();
69 63  
  64 + public static String inTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  65 +
70 66 //114.55.30.100
71 67 //120.26.116.253
72 68 // private String ip_cloud = "114.55.30.100";
73   - private String ip_cloud = "172.16.2.166";
  69 + private String ip_cloud = "114.55.30.100";
74 70  
75 71 private String ip;
76 72 {
77 73 try {
78 74 ip = InetAddress.getLocalHost().getHostAddress();
79 75 } catch (UnknownHostException e) {
80   - e.printStackTrace();
  76 + log.error("获取主机IP异常,错误信息:{}",e);
81 77 }
82 78 }
83 79  
... ... @@ -247,7 +243,7 @@ public class CMSServer implements ApplicationRunner {
247 243 try {
248 244 deviceId = new String(strDevRegInfo.byDeviceID, "utf-8").trim();
249 245 } catch (UnsupportedEncodingException e) {
250   - e.printStackTrace();
  246 + log.error("注册设备,设置设备ID异常,错误信息:{}",e);
251 247 }
252 248 pInBuffer.dwSize = pInBuffer.size();
253 249 AttendanceBean attendanceBean = new AttendanceBean();
... ... @@ -262,7 +258,7 @@ public class CMSServer implements ApplicationRunner {
262 258 attendanceBean.setSchool_id("-1");
263 259 attendanceBean.setState(1);
264 260 if (deviceDao.selectDevice(deviceId) != null) {
265   - deviceDao.updateDeviceStatu(1, deviceId);
  261 + deviceDao.updateDeviceStatu(1,inTime,deviceId);
266 262 } else {
267 263 deviceDao.addDevide(attendanceBean.getClint_id(), attendanceBean.getClint_type(), attendanceBean.getIntime(),
268 264 attendanceBean.getSchool_id(), attendanceBean.getState() + "", attendanceBean.getIsConnection() + "");
... ... @@ -305,7 +301,6 @@ public class CMSServer implements ApplicationRunner {
305 301 String szDevUri = new String(pTomcatMsg.szDevUri).trim();
306 302 int dwPicNum = pTomcatMsg.dwPicNum;
307 303 String pPicURLs = pTomcatMsg.pPicURLs;
308   -// System.out.println("szDevUri = " + szDevUri + " dwPicNum= " + dwPicNum + " pPicURLs=" + pPicURLs);
309 304 } else if (2 == enumType) {
310 305 // int type = pInBuffer.dwAlarmServerType;
311 306 // int picServerType = pInBuffer.dwPicServerType;
... ... @@ -339,7 +334,7 @@ public class CMSServer implements ApplicationRunner {
339 334 try {
340 335 strFilePathFile.createNewFile();
341 336 } catch (IOException e) {
342   - e.printStackTrace();
  337 + log.error("处理人脸机抓拍文件异常,错误信息:{}",e);
343 338 }
344 339 }
345 340 if (dwFileLen > 0 && pFileBuf != null) {
... ... @@ -366,9 +361,9 @@ public class CMSServer implements ApplicationRunner {
366 361 baseService.sendUserInfoToKB(strFilePathFile, deviceId);
367 362 }
368 363 } catch (FileNotFoundException e) {
369   - e.printStackTrace();
  364 + log.error("处理人脸机抓拍文件异常,错误信息:{}",e);
370 365 } catch (IOException e) {
371   - e.printStackTrace();
  366 + log.error("处理人脸机抓拍文件异常,错误信息:{}",e);
372 367 }
373 368 }
374 369  
... ... @@ -397,30 +392,36 @@ public class CMSServer implements ApplicationRunner {
397 392 strXMLData.read();
398 393 String strXML = new String(strXMLData.byValue);
399 394 if (null == alarmUtils) {
  395 + log.info("初始化报警工具类");
400 396 alarmUtils = new AlarmUtils(deviceDao, userDao);
401 397 alarmUtils.setCallBack(new AlarmUtils.AlarmCallBack() {
402 398 @Override
403 399 public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) {
404 400 switch (minorType) {
405 401 case "0x4b"://人脸认证通过
  402 + log.info("人脸验证通过,事件次类型:"+minorType);
406 403 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
407 404 break;
408 405 case "0x426"://人证设备在线
409 406 break;
410 407 case "0x427"://人证设备离线
  408 + log.info("设备掉线了,设备ID: "+deviceID);
411 409 map.remove(deviceID);
412   - deviceDao.updateDeviceStatu(0, deviceID);
  410 + deviceDao.updateDeviceStatu(0,inTime,deviceID);
413 411 break;
414 412 case "0x69"://人证比对通过
  413 + log.info("人证比对通过,事件次类型:"+minorType);
415 414 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
416 415 break;
417 416 case "0x6":
  417 + log.info("通过,事件次类型:"+minorType);
418 418 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
419 419 break;
420 420 }
421 421 }
422 422 });
423 423 } else {
  424 + log.info("处理报警进来了");
424 425 //处理报警事件
425 426 alarmUtils.deleAlarm(strXML);
426 427 }
... ... @@ -447,6 +448,7 @@ public class CMSServer implements ApplicationRunner {
447 448 try {
448 449 if (!StringUtils.isEmpty(cardNo) && isNumeric(cardNo)) {
449 450 Face_Recoder face_recoder = new Face_Recoder();
  451 + //十进制卡转十六进制卡
450 452 String card = splicingZero(Long.toHexString(Long.parseLong(cardNo)), 8).toUpperCase();
451 453 //卡号逆转
452 454 cardNo = baseService.getCard(card);
... ... @@ -486,7 +488,6 @@ public class CMSServer implements ApplicationRunner {
486 488  
487 489 public void isTeacher(String cardNo, String deviceID) {
488 490 List<String> devLists = userDao.getDeviceRoomRelation(deviceID);
489   -// log.error("cardNo:{},devLists{}", cardNo, devLists);
490 491 if (null != devLists && devLists.size() > 0) {
491 492  
492 493 StudentBean teacher = userDao.getTeacherWithCard(cardNo);
... ... @@ -509,7 +510,8 @@ public class CMSServer implements ApplicationRunner {
509 510 * @param deviceId
510 511 * @return
511 512 */
512   - 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) {
  513 + 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) {
  514 + log.info("下发卡号:"+card);
513 515 if (map.containsKey(deviceId)) {
514 516 HCEHomeSS.NET_EHOME_SS_CLIENT_PARAM pClientParam = new HCEHomeSS.NET_EHOME_SS_CLIENT_PARAM();
515 517 pClientParam.enumType = HCEHomeSS.NET_EHOME_SS_CLIENT_TYPE_KMS;
... ... @@ -548,11 +550,11 @@ public class CMSServer implements ApplicationRunner {
548 550 /**
549 551 * 下发用户信息
550 552 */
551   - return sendInfo(srcFile, url, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo, schoolId);
  553 + return sendInfo(srcFile, url, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo, schoolId,cardNum);
552 554 }
553   - if(schoolId !=null && (schoolId.intValue() == 4 ||
554   - schoolId.intValue() == 27|| schoolId.intValue() == 2 || schoolId.intValue() == 16)){
555   - baseService.sendFailRecord(card, srcFile, deviceId,"设备不在线", userType);
  555 + if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 864 ||
  556 + schoolId.intValue() == 2 || schoolId.intValue() == 16)){
  557 + baseService.sendFailRecord(cardNum, srcFile, deviceId,"设备不在线", userType);
556 558 }else{
557 559 baseService.sendFail(card, srcFile, deviceId,"设备不在线", userType);
558 560 }
... ... @@ -564,7 +566,7 @@ public class CMSServer implements ApplicationRunner {
564 566 *
565 567 * @Param picUrl 原图
566 568 */
567   - 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) {
  569 + 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) {
568 570 // deleteCard(deviceId, card);
569 571 // editCard(startTime, endTime, 0, name, card, deviceId, employeeNo);
570 572 editCard(startTime, endTime, validTimeEnabled, name, card, deviceId, employeeNo);
... ... @@ -579,7 +581,7 @@ public class CMSServer implements ApplicationRunner {
579 581 "</SetFaceParamCfg>";
580 582 //开始下发人脸
581 583  
582   - return editFace(srcFile, url, card, strRequest, strConfigXML, "下发人脸", deviceId, EnumSzBusinessType.EnumHkOperateType.ADD.code, userType,schoolId);
  584 + return editFace(srcFile, url, card, strRequest, strConfigXML, "下发人脸", deviceId, validTimeEnabled, userType,schoolId,cardNum);
583 585 }
584 586  
585 587 /**
... ... @@ -653,7 +655,7 @@ public class CMSServer implements ApplicationRunner {
653 655  
654 656 System.arraycopy(nameAfterBy, 0, resultBy, nameBeforBy.length + nameBy.length, nameAfterBy.length);
655 657 } catch (UnsupportedEncodingException e) {
656   - e.printStackTrace();
  658 + log.error("编码异常:异常信息:{}",e);
657 659 }
658 660  
659 661 struConfigXMLCard.byString = resultBy;
... ... @@ -701,7 +703,7 @@ public class CMSServer implements ApplicationRunner {
701 703 *
702 704 * @param clint_id
703 705 */
704   - public void SetCardWeekPlan(String clint_id, String card, String userType, String strConfigXMLCard, String content,Integer schoolId) {
  706 + public void SetCardWeekPlan(String clint_id, String card, String userType, String strConfigXMLCard, String content,Integer schoolId,String cardNum) {
705 707 try {
706 708  
707 709 HCEHomeCMS.NET_EHOME_XML_CFG struXMLCard = new HCEHomeCMS.NET_EHOME_XML_CFG();
... ... @@ -745,7 +747,7 @@ public class CMSServer implements ApplicationRunner {
745 747 log.error(content + "失败:" + iErr);
746 748 if(schoolId !=null && (schoolId.intValue() == 4 ||
747 749 schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){
748   - baseService.sendFailRecord(card,"",clint_id,content + "失败:" + iErr, userType);
  750 + baseService.sendFailRecord(cardNum,"",clint_id,content + "失败:" + iErr, userType);
749 751 }else{
750 752 baseService.sendFail(card,"",clint_id,content + "失败:" + iErr, userType);
751 753 }
... ... @@ -753,7 +755,7 @@ public class CMSServer implements ApplicationRunner {
753 755 log.info(content + "成功");
754 756 }
755 757 } catch (Exception e) {
756   - e.printStackTrace();
  758 + log.error("设置卡权限周计划异常:异常信息:{}",e);
757 759 }
758 760 }
759 761  
... ... @@ -769,7 +771,7 @@ public class CMSServer implements ApplicationRunner {
769 771 String strConfigXML = "<DelFaceParamCfg>" +
770 772 "<cardNo>" + card + "</cardNo><cardReaderNo>1</cardReaderNo>" +
771 773 "<faceID>1</faceID></DelFaceParamCfg>";
772   - return editFace("", "", card, strRequest, strConfigXML, "删除人脸", deviceId, 2, "",schoolId);
  774 + return editFace("", "", card, strRequest, strConfigXML, "删除人脸", deviceId, 2, "",schoolId,"");
773 775 }
774 776  
775 777 /**
... ... @@ -784,10 +786,10 @@ public class CMSServer implements ApplicationRunner {
784 786 String strConfigXML = "<GetFaceParamCfgCond version=\"2.0\" xmlns=\"http://www.isapi.org/ver20/XMLSchema\">" +
785 787 "<cardNo>" + card + "</cardNo><cardReaderNo>1</cardReaderNo>" +
786 788 "<faceID>1</faceID></GetFaceParamCfgCond>";
787   - return editFace("", "", card, strRequest, strConfigXML, "获取人脸信息", deviceId, 3, "",schoolId);
  789 + return editFace("", "", card, strRequest, strConfigXML, "获取人脸信息", deviceId, 3, "",schoolId,"");
788 790 }
789 791  
790   - private boolean editFace(String srcFile, String faceUrl, String card, String strRequest, String strConfigXML, String content, String deviceId, int type, String userType,Integer schoolId) {
  792 + 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) {
791 793  
792 794 // deleteCard(deviceId, card);
793 795 // lLoginID = map.get(deviceId);
... ... @@ -818,24 +820,24 @@ public class CMSServer implements ApplicationRunner {
818 820 if (type == 1) {//下发人脸
819 821 if (!hCEhomeCMS.NET_ECMS_PostPTXMLConfig(map.get(deviceId), struISAPXML)) {
820 822 int iErr = hCEhomeCMS.NET_ECMS_GetLastError();
821   - System.err.println(content + "失败,错误号:" + iErr + "---" + strConfigXML + "\n");
822   - if(schoolId !=null && (schoolId.intValue() == 4 ||
823   - schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){
824   - baseService.sendFailRecord(card,"",deviceId,content + "失败:" + iErr, userType);
  823 + log.error(content + "失败,错误号:" + iErr + "---" + strConfigXML + "\n");
  824 + if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 864 ||
  825 + schoolId.intValue() == 2 || schoolId.intValue() == 16)){
  826 + baseService.sendFailRecord(cardNum,"",deviceId,content + "失败,错误号:" + iErr, userType);
825 827 }else{
826   - baseService.sendFail(card,"",deviceId,content + "失败:" + iErr, userType);
  828 + baseService.sendFail(card,"",deviceId,content + "失败,错误号:" + iErr, userType);
827 829 }
828 830 // sendRecoderUtils.sendFailRecord(sendRecordDao, card, srcFile, deviceId, userDao, content + "失败,错误号:" + iErr, userType);
829 831 } else {
830 832 stringXMLOut.read();
831 833 String strOutXML = new String(stringXMLOut.byString).trim();
832   - if(schoolId !=null && (schoolId.intValue() == 4 ||
833   - schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){
834   - baseService.sendSuccessRecord(card,faceUrl, deviceId,userType);
  834 + if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 864 ||
  835 + schoolId.intValue() == 2 || schoolId.intValue() == 16)){
  836 + baseService.sendSuccessRecord(cardNum,faceUrl, deviceId,userType);
835 837 }else{
836 838 baseService.sendSuccess(card,faceUrl, deviceId,userType);
837 839 }
838   - log.info(content + "成功:" + card);
  840 + log.info(content + "成功: 下发卡号:" + card);
839 841 }
840 842 } else if (type == 2) {//删除人脸
841 843 if (!hCEhomeCMS.NET_ECMS_PutPTXMLConfig(map.get(deviceId), struISAPXML)) {
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/HaikangfaceApplication.java
... ... @@ -11,11 +11,13 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerA
11 11 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
12 12 import org.springframework.cloud.openfeign.EnableFeignClients;
13 13 import org.springframework.context.annotation.ComponentScan;
  14 +import org.springframework.scheduling.annotation.EnableAsync;
14 15  
15 16 @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})
16 17 @SpringBootApplication
17 18 @EnableDiscoveryClient
18 19 @EnableFeignClients(basePackages = "com.sincere.haikangface.fegin")
  20 +//@EnableAsync
19 21 public class HaikangfaceApplication {
20 22  
21 23 public static void main(String[] args) {
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask100.java 0 → 100644
... ... @@ -0,0 +1,110 @@
  1 +package com.sincere.haikangface.async;
  2 +
  3 +import com.sincere.haikangface.bean.StudentBean;
  4 +import com.sincere.haikangface.enums.EnumSzBusinessType;
  5 +import com.sincere.haikangface.service.impl.BaseService;
  6 +import com.sincere.haikangface.utils.CompressPic;
  7 +import com.sincere.haikangface.utils.FileUtils;
  8 +import lombok.extern.slf4j.Slf4j;
  9 +import org.apache.commons.lang3.StringUtils;
  10 +
  11 +import java.io.File;
  12 +import java.text.SimpleDateFormat;
  13 +import java.util.Calendar;
  14 +import java.util.Date;
  15 +import java.util.List;
  16 +import java.util.concurrent.CountDownLatch;
  17 +
  18 +/**
  19 + * 多线程执行卡下发
  20 + * @author xuquan
  21 + * @date 2021/01/12 15:56
  22 + */
  23 +@Slf4j
  24 +public class SendFaceBatchTask100 implements Runnable {
  25 +
  26 + private String schoolId;
  27 + private String userType;
  28 + private List<StudentBean> students;
  29 + private String sno;
  30 + private FileUtils fileUtils;
  31 + private SendUserAsync sendUserAsync;
  32 + private BaseService baseService;
  33 + CountDownLatch begin;
  34 + CountDownLatch end;
  35 +
  36 + public SendFaceBatchTask100(String schoolId, String userType,String sno,List<StudentBean> students,BaseService baseService,
  37 + FileUtils fileUtils,SendUserAsync sendUserAsync, CountDownLatch begin, CountDownLatch end){
  38 + this.userType=userType;
  39 + this.schoolId=schoolId;
  40 + this.students=students;
  41 + this.sno=sno;
  42 + this.fileUtils=fileUtils;
  43 + this.sendUserAsync=sendUserAsync;
  44 + this.baseService=baseService;
  45 + this.begin=begin;
  46 + this.end=end;
  47 + }
  48 +
  49 + @Override
  50 + public void run() {
  51 + try {
  52 + begin.await();
  53 + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  54 + Calendar calendar = Calendar.getInstance();
  55 + calendar.add(Calendar.YEAR, 10);
  56 + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
  57 + //下发标识:详情见枚举 EnumHkOperateType
  58 + int validTimeEnabled = EnumSzBusinessType.EnumHkOperateType.ADD.code;
  59 + for(StudentBean studentBean : students){
  60 + try{
  61 + String photo= studentBean.getPhoto();
  62 + if (StringUtils.isBlank(photo)){
  63 + continue;
  64 + }
  65 + String userName= studentBean.getName();
  66 + String cardNum ="";
  67 + String typeName="";
  68 + if(userType.equals("1")){
  69 + cardNum = studentBean.getTeacher_num();
  70 + typeName= "Teacher";
  71 + }else {
  72 + cardNum = studentBean.getStudent_num();
  73 + typeName= "Student";
  74 + }
  75 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  76 + log.info("人脸路径:"+photo);
  77 + //以学籍号为名的文件名
  78 + String fileName = photo.split(typeName +"/")[1];
  79 + //100服务器上人脸照绝对路径
  80 + String filePath = path+ "\\" + fileName;
  81 + File file = new File(filePath);//图片
  82 + if(file.exists()){
  83 + String targetPath = fileUtils.picPathComp + file.getName();
  84 + log.info("文件名:"+fileName);
  85 + try {
  86 + CompressPic.CompressPic(file.getAbsolutePath(), targetPath);
  87 + } catch (Exception e) {
  88 + log.error("压缩图片失败");
  89 + e.printStackTrace();
  90 + continue;
  91 + }
  92 + String cardNumLong = Long.parseLong(baseService.getCard(cardNum), 16) + "";
  93 + //下发100海康设备
  94 + sendUserAsync.sendStuToHaiKang(file.getAbsolutePath(),targetPath,cardNumLong, startTime, endTime, validTimeEnabled, userName, sno, userType,Integer.parseInt(schoolId),cardNum);
  95 + }
  96 + }catch (Exception e){
  97 + log.error("人脸下发失败");
  98 + e.printStackTrace();
  99 + continue;
  100 + }
  101 + }
  102 + }catch (Exception e){
  103 + log.error("下发人脸异常,信息:");
  104 + e.printStackTrace();
  105 + }finally {
  106 + end.countDown();
  107 + }
  108 + }
  109 +
  110 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask253.java 0 → 100644
... ... @@ -0,0 +1,89 @@
  1 +package com.sincere.haikangface.async;
  2 +
  3 +import com.sincere.haikangface.bean.StudentBean;
  4 +import com.sincere.haikangface.enums.EnumSzBusinessType;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.apache.commons.lang3.StringUtils;
  7 +
  8 +import java.text.SimpleDateFormat;
  9 +import java.util.Calendar;
  10 +import java.util.Date;
  11 +import java.util.List;
  12 +import java.util.concurrent.CountDownLatch;
  13 +
  14 +/**
  15 + * 多线程执行卡下发
  16 + * @author xuquan
  17 + * @date 2021/01/12 15:56
  18 + */
  19 +@Slf4j
  20 +public class SendFaceBatchTask253 implements Runnable {
  21 +
  22 + private String schoolId;
  23 + private String userType;
  24 + private List<StudentBean> students;
  25 + private String sno;
  26 + private SendUserAsync sendUserAsync;
  27 + CountDownLatch begin;
  28 + CountDownLatch end;
  29 +
  30 + public SendFaceBatchTask253(String schoolId, String userType,String sno,List<StudentBean> students,
  31 + SendUserAsync sendUserAsync, CountDownLatch begin, CountDownLatch end){
  32 + this.userType=userType;
  33 + this.schoolId=schoolId;
  34 + this.students=students;
  35 + this.sno=sno;
  36 + this.sendUserAsync=sendUserAsync;
  37 + this.begin=begin;
  38 + this.end=end;
  39 + }
  40 +
  41 + @Override
  42 + public void run() {
  43 + try {
  44 + begin.await();
  45 + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  46 + Calendar calendar = Calendar.getInstance();
  47 + calendar.add(Calendar.YEAR, 10);
  48 + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
  49 + //下发标识:详情见枚举 EnumHkOperateType
  50 + int validTimeEnabled = EnumSzBusinessType.EnumHkOperateType.ADD.code;
  51 + for(StudentBean studentBean : students){
  52 + try{
  53 + String photo= studentBean.getPhoto();
  54 + if (StringUtils.isBlank(photo)){
  55 + continue;
  56 + }
  57 + String userName= studentBean.getName();
  58 + String cardNum ="";
  59 + String typeName="";
  60 + if(userType.equals("1")){
  61 + cardNum = studentBean.getTeacher_num();
  62 + typeName= "Teacher";
  63 + }else {
  64 + cardNum = studentBean.getStudent_num();
  65 + typeName= "Student";
  66 + }
  67 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  68 + //以学籍号为名的文件名
  69 + String fileName = photo.split(typeName+"/")[1];
  70 + //100服务器上人脸照绝对路径
  71 + String filePath = path+ "\\" + fileName;
  72 + Thread.sleep(1000);
  73 + //下发253服务器
  74 + sendUserAsync.uploadImgs(filePath, cardNum, userName, sno, startTime, endTime, validTimeEnabled, userType);
  75 + }catch (Exception e){
  76 + log.error("人脸下发失败");
  77 + e.printStackTrace();
  78 + continue;
  79 + }
  80 + }
  81 + }catch (Exception e){
  82 + log.error("下发人脸异常,信息:");
  83 + e.printStackTrace();
  84 + }finally {
  85 + end.countDown();
  86 + }
  87 + }
  88 +
  89 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java
... ... @@ -12,17 +12,21 @@ import com.sincere.haikangface.dao.DeviceDao;
12 12 import com.sincere.haikangface.dao.UserDao;
13 13 import com.sincere.haikangface.enums.EnumSzBusinessType;
14 14 import com.sincere.haikangface.service.impl.BaseService;
15   -import com.sincere.haikangface.utils.*;
  15 +import com.sincere.haikangface.utils.FileUtils;
  16 +import com.sincere.haikangface.utils.HKXmlUtils;
  17 +import com.sincere.haikangface.utils.HttpUtil;
  18 +import com.sincere.haikangface.utils.SendRecoderUtils;
16 19 import com.sincere.haikangface.xiananDao.SendRecordDao;
17 20 import lombok.extern.slf4j.Slf4j;
18 21 import org.springframework.beans.factory.annotation.Autowired;
19   -import org.springframework.http.ResponseEntity;
20 22 import org.springframework.scheduling.annotation.Async;
21 23 import org.springframework.stereotype.Component;
22 24 import org.springframework.util.StringUtils;
23   -import org.springframework.web.client.RestTemplate;
24 25  
25   -import java.util.*;
  26 +import java.util.ArrayList;
  27 +import java.util.HashMap;
  28 +import java.util.List;
  29 +import java.util.Map;
26 30  
27 31 @Component
28 32 @Slf4j
... ... @@ -59,14 +63,14 @@ public class SendUserAsync {
59 63 * @param deviceId
60 64 * @param userType
61 65 */
62   - public void sendStuToHaiKang(String srcFile, String picUrl, String card, String startTime, String endTime, int validTimeEnabled, String name, String deviceId, String userType,Integer schoolId) {
  66 + 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) {
63 67 //1、检测图片是否合格
64 68 boolean check = true;
65 69 if (check) {//合格
66 70 //根据设备是5603 还是新设备
67 71 String employeeNo = "";
68 72 //picUrl:压缩后的图片路径,图片上传,用户信息、用户卡下发。
69   - cmsServer.createImgPath(srcFile, picUrl, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo,schoolId);
  73 + cmsServer.createImgPath(srcFile, picUrl, card, startTime, endTime, validTimeEnabled, name, deviceId, userType, employeeNo,schoolId,cardNum);
70 74 //根据设备
71 75 if (deviceId.contains("ymzx") || deviceId.contains("5607") || deviceId.contains("5671") || deviceId.contains("5604")) {
72 76 long lon = Long.parseLong(card);
... ... @@ -94,18 +98,18 @@ public class SendUserAsync {
94 98 }
95 99 }
96 100 //设置卡权限计划模板
97   - cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板",schoolId);
  101 + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板",schoolId,cardNum);
98 102 //设置卡权限周计划
99   - cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划" ,schoolId);
  103 + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划" ,schoolId,cardNum);
100 104 for (int i = 0; i < 7; i++) {
101   - cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlanTime(HKXmlUtils.getInstance().SetCardWeekPlanTimes("00:00:00", "23:00:00"), "" + i), "设置卡权限周计划时间",schoolId);
  105 + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardWeekPlanTime(HKXmlUtils.getInstance().SetCardWeekPlanTimes("00:00:00", "23:00:00"), "" + i), "设置卡权限周计划时间",schoolId,cardNum);
102 106 }
103   - cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardRightCfg(card), "设置卡权限",schoolId);
  107 + cmsServer.SetCardWeekPlan(deviceId, card, userType, HKXmlUtils.getInstance().SetCardRightCfg(card), "设置卡权限",schoolId,cardNum);
104 108 }
105 109 } else {//不合格
106   - if(schoolId !=null && (schoolId.intValue() == 4 ||
107   - schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){
108   - baseService.sendFailRecord(card, srcFile, deviceId, "人脸照片不合格", userType);
  110 + if(schoolId !=null && (schoolId.intValue() == 4 || schoolId.intValue() == 27 || schoolId.intValue() == 864 ||
  111 + schoolId.intValue() == 2 || schoolId.intValue() == 16)){
  112 + baseService.sendFailRecord(cardNum, srcFile, deviceId, "人脸照片不合格", userType);
109 113 }else{
110 114 baseService.sendFail(card, srcFile, deviceId, "人脸照片不合格", userType);
111 115 }
... ... @@ -154,8 +158,7 @@ public class SendUserAsync {
154 158 log.info("map{}", JSON.toJSONString(map));
155 159 return true;
156 160 }catch (Exception e){
157   - e.printStackTrace();
158   - log.error("下发权限失败");
  161 + log.error("下发卡权限失败,异常信息:{}",e);
159 162 }
160 163 return false;
161 164 }
... ... @@ -190,8 +193,7 @@ public class SendUserAsync {
190 193 cardNumList.addAll(cardList);
191 194 }
192 195 if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.STUDENT.code) {
193   -// cardNumList = getCards(sex, userType, schoolId);
194   - cardNumList = getStudentCard(Integer.parseInt(schoolId),studentType,sex);
  196 + cardNumList = baseService.getStudentCard(Integer.parseInt(schoolId),studentType,sex);
195 197 }
196 198 //整理周和时间段
197 199 initWeedayAndTimes(weekDay, map);
... ... @@ -203,8 +205,7 @@ public class SendUserAsync {
203 205 userDao.updateAuthRecord(id,1);
204 206 return true;
205 207 }catch (Exception e){
206   - e.printStackTrace();
207   - log.error("下发权限失败");
  208 + log.error("下发卡权限失败,异常信息:{}",e);
208 209 }
209 210 return false;
210 211 }
... ... @@ -229,7 +230,7 @@ public class SendUserAsync {
229 230 }
230 231  
231 232 } catch (Exception e) {
232   - e.printStackTrace();
  233 + log.error("获取用户卡异常,异常信息:{}",e);
233 234 }
234 235 return cards;
235 236 }
... ... @@ -268,8 +269,8 @@ public class SendUserAsync {
268 269 }
269 270 cardNum = Long.parseLong(newCardNum, 16) + "";
270 271  
271   - cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板",schoolId);
272   - cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划",schoolId);
  272 + cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, HKXmlUtils.getInstance().SetCardTemplate(), "设置卡权限计划模板",schoolId,cardNum);
  273 + cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, HKXmlUtils.getInstance().SetCardWeekPlan(), "卡权限周计划",schoolId,cardNum);
273 274  
274 275 for (Map.Entry<Integer, List<WeekTime>> weeKdayMap : map.entrySet()) {
275 276  
... ... @@ -285,20 +286,19 @@ public class SendUserAsync {
285 286 String weekPlanTime = HKXmlUtils.getInstance().SetCardWeekPlanTime(stringBuffer.toString(), "" + week);
286 287 String serCardRightCfg = HKXmlUtils.getInstance().SetCardRightCfg(cardNum);
287 288 FileUtils.getInstance().writeLogs(weekPlanTime, "设置卡权限周计划时间.txt");
288   - cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, weekPlanTime, "设置卡权限周计划时间",schoolId);
289   - cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, serCardRightCfg, "设置卡权限",schoolId);
  289 + cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, weekPlanTime, "设置卡权限周计划时间",schoolId,cardNum);
  290 + cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, serCardRightCfg, "设置卡权限",schoolId,cardNum);
290 291 }
291 292 }
292 293 }
293   - } else {//设备不在线
  294 + } else {//设备不在线,请求253服务器执行下发
294 295 if (i == 0) HttpUtil.sendPermission2HK(permissionBean);
295 296 log.error("deviceId:{}", deviceId + "不在线");
296 297 }
297 298 }
298 299 return true;
299 300 }catch (Exception e){
300   - log.error("下发失败,错误信息{}",e);
301   - e.printStackTrace();
  301 + log.error("下发卡权限失败,异常信息{}",e);
302 302 }
303 303 return false;
304 304 }
... ... @@ -320,14 +320,7 @@ public class SendUserAsync {
320 320 return cardList;
321 321 }
322 322  
323   - public List<String> getStudentCard(int schoolId, int studentType, String sex) {
324   - String[] msg = sex.split(",");
325   - List<Integer> list = new ArrayList<>();
326   - for(String s : msg){
327   - list.add(Integer.valueOf(s));
328   - }
329   - return userDao.getStudentCard(schoolId,studentType, list);
330   - }
  323 +
331 324  
332 325  
333 326 private void initWeedayAndTimes(WeekDay weekDay, Map<Integer, List<WeekTime>> map) {
... ... @@ -393,32 +386,4 @@ public class SendUserAsync {
393 386 public boolean IsDeviceOnline(String deviceId) {
394 387 return HttpUtil.IsDeviceOnline(deviceId);
395 388 }
396   -
397   - @Async
398   - public void uploadHkImg( String schoolId,int userType,String deviceIds) {
399   - String api = "http://114.55.30.100:8089/facereco/sendFaces";
400   - try {
401   - String url = String.format(api +"?schoolId=%s&userType=%s&deviceIds=%s",schoolId,userType,deviceIds);
402   - RestTemplate restTemplate = new RestTemplate();
403   - ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
404   - log.info("请求成功:responseEntity:" + responseEntity.getBody());
405   - } catch (Exception e) {
406   - e.printStackTrace();
407   - }
408   -
409   - }
410   -
411   - @Async
412   - public void uploadDHImg( String schoolId,int userType,String deviceIds) {
413   - String api = "http://114.55.30.100:8991/user/sendFaces";
414   - try {
415   - String url = String.format(api +"?schoolId=%s&userType=%s&deviceIds=%s",schoolId,userType,deviceIds);
416   - RestTemplate restTemplate = new RestTemplate();
417   - ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
418   - log.info("请求成功:responseEntity:" + responseEntity.getBody());
419   - } catch (Exception e) {
420   - e.printStackTrace();
421   - }
422   - }
423   -
424 389 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/AuthRecordDto.java
... ... @@ -15,13 +15,13 @@ public class AuthRecordDto {
15 15  
16 16 @ApiModelProperty("权限表ID")
17 17 private Integer id ;
18   - @ApiModelProperty("1 学生类型 2 学生组")
  18 + @ApiModelProperty("1学生类型 2 学生组")
19 19 private Integer type ;
20 20 @ApiModelProperty("学校ID")
21 21 private Integer schoolId ;
22   - @ApiModelProperty("设备号,逗号隔开")
  22 + @ApiModelProperty("设备号集合")
23 23 private List<String> snList;
24   - @ApiModelProperty("学生类型,1通校2住校")
  24 + @ApiModelProperty("学生类型,1通校2住校;群组时,为群组号")
25 25 private Integer studentType ;
26 26 @ApiModelProperty("权限周计划列表")
27 27 private List<WeekDay> weekDays ;
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/PermissionDHBean.java 0 → 100644
... ... @@ -0,0 +1,63 @@
  1 +package com.sincere.haikangface.bean.face;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +
  5 +import java.io.Serializable;
  6 +import java.util.List;
  7 +
  8 +public class PermissionDHBean implements Serializable {
  9 +
  10 + @ApiModelProperty(value = "设备id",required = true)
  11 + private List<String> deviceIds;
  12 +
  13 + private List<WeekDay> weekDays;
  14 +
  15 + @ApiModelProperty("用逗号隔开,1:通校生,2:住校生,3:全部")
  16 + private String studentType;
  17 +
  18 + @ApiModelProperty("权限通道号")
  19 + private String channel;
  20 +
  21 + @ApiModelProperty("权限自定义名成")
  22 + private String customName;
  23 +
  24 + public String getStudentType() {
  25 + return studentType;
  26 + }
  27 +
  28 + public void setStudentType(String studentType) {
  29 + this.studentType = studentType;
  30 + }
  31 +
  32 + public List<String> getDeviceIds() {
  33 + return deviceIds;
  34 + }
  35 +
  36 + public void setDeviceIds(List<String> deviceIds) {
  37 + this.deviceIds = deviceIds;
  38 + }
  39 +
  40 + public List<WeekDay> getWeekDays() {
  41 + return weekDays;
  42 + }
  43 +
  44 + public void setWeekDays(List<WeekDay> weekDays) {
  45 + this.weekDays = weekDays;
  46 + }
  47 +
  48 + public String getChannel() {
  49 + return channel;
  50 + }
  51 +
  52 + public void setChannel(String channel) {
  53 + this.channel = channel;
  54 + }
  55 +
  56 + public String getCustomName() {
  57 + return customName;
  58 + }
  59 +
  60 + public void setCustomName(String customName) {
  61 + this.customName = customName;
  62 + }
  63 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/SendFaceDto.java 0 → 100644
... ... @@ -0,0 +1,66 @@
  1 +package com.sincere.haikangface.bean.face;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +
  6 +import java.util.List;
  7 +
  8 +/**
  9 + * 照片下发人脸实体类
  10 + * @author xuquan
  11 + * @date 2020/12/16 09:10
  12 + */
  13 +@ApiModel
  14 +public class SendFaceDto {
  15 +
  16 + @ApiModelProperty("0主卡1教师卡2副卡")
  17 + private Integer type ;
  18 + @ApiModelProperty("学校ID")
  19 + private Integer schoolId ;
  20 + @ApiModelProperty("设备号,逗号隔开")
  21 + private String sNos;
  22 + @ApiModelProperty("学生类型,1通校2住校;群组时,为群组号")
  23 + private Integer studentType;
  24 + @ApiModelProperty("性别:1男2女,多个逗号隔开")
  25 + private String sex;
  26 +
  27 + public Integer getType() {
  28 + return type;
  29 + }
  30 +
  31 + public void setType(Integer type) {
  32 + this.type = type;
  33 + }
  34 +
  35 + public Integer getSchoolId() {
  36 + return schoolId;
  37 + }
  38 +
  39 + public void setSchoolId(Integer schoolId) {
  40 + this.schoolId = schoolId;
  41 + }
  42 +
  43 + public String getsNos() {
  44 + return sNos;
  45 + }
  46 +
  47 + public void setsNos(String sNos) {
  48 + this.sNos = sNos;
  49 + }
  50 +
  51 + public Integer getStudentType() {
  52 + return studentType;
  53 + }
  54 +
  55 + public void setStudentType(Integer studentType) {
  56 + this.studentType = studentType;
  57 + }
  58 +
  59 + public String getSex() {
  60 + return sex;
  61 + }
  62 +
  63 + public void setSex(String sex) {
  64 + this.sex = sex;
  65 + }
  66 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java
... ... @@ -3,21 +3,16 @@ package com.sincere.haikangface.control;
3 3 import com.alibaba.fastjson.JSON;
4 4 import com.sincere.haikangface.CMSServer;
5 5 import com.sincere.haikangface.async.SendUserAsync;
6   -import com.sincere.haikangface.bean.Images2Ddevices;
7 6 import com.sincere.haikangface.bean.StudentBean;
8   -import com.sincere.haikangface.bean.UploadBean;
9 7 import com.sincere.haikangface.bean.face.PermissionBean;
10 8 import com.sincere.haikangface.dao.UserDao;
11 9 import com.sincere.haikangface.service.impl.BaseService;
12 10 import com.sincere.haikangface.utils.CompressPic;
13 11 import com.sincere.haikangface.utils.FileUtils;
14   -import com.sincere.haikangface.utils.SendRecoderUtils;
15 12 import com.sincere.haikangface.xiananDao.SendRecordDao;
16 13 import io.swagger.annotations.Api;
17 14 import io.swagger.annotations.ApiOperation;
18 15 import lombok.extern.slf4j.Slf4j;
19   -import org.slf4j.Logger;
20   -import org.slf4j.LoggerFactory;
21 16 import org.springframework.beans.factory.annotation.Autowired;
22 17 import org.springframework.util.StringUtils;
23 18 import org.springframework.web.bind.annotation.*;
... ... @@ -25,8 +20,6 @@ import org.springframework.web.multipart.MultipartFile;
25 20  
26 21 import java.io.File;
27 22 import java.io.FileOutputStream;
28   -import java.text.SimpleDateFormat;
29   -import java.util.*;
30 23  
31 24 @RestController
32 25 @Api("文件管理器")
... ... @@ -65,7 +58,11 @@ public class FileControl {
65 58 @RequestParam("endTime") String endTime, @RequestParam("validTimeEnabled") int validTimeEnabled, @RequestParam("userType") String userType) {
66 59 try {
67 60 if (!cmsServer.getIsDeviceOnline(deviceId)) {
68   - FileUtils.getInstance().writeLogs("设备不在线:" + deviceId, FileUtils.devices);
  61 + log.warn("设备ID: {},设备不在线",deviceId);
  62 + return "0";
  63 + }
  64 + if(StringUtils.isEmpty(card)){
  65 + log.warn("卡号为空");
69 66 return "0";
70 67 }
71 68 String fileName = file.getOriginalFilename();//文件名
... ... @@ -76,11 +73,10 @@ public class FileControl {
76 73 fileOutputStream.write(file.getBytes());
77 74 fileOutputStream.close();
78 75 String filePath = dest.getAbsolutePath();
79   - FileUtils.getInstance().writeLogs("filePath:" + filePath + " card:" + card + " name:" + name + " deviceId:" + deviceId, FileUtils.sendUserInfo);
80 76 long time = System.currentTimeMillis();
81 77 StudentBean studentBean = userDao.getStudentWithCard(card);
82 78 Integer schoolId = studentBean ==null ?null:studentBean.getSchool_id();
83   - String cardNum = Long.parseLong(baseService.getCard(card), 16) + "";
  79 + String cardNum = Long.parseLong(baseService.getCard(card),16) + "";
84 80 if (new File(filePath.trim()).exists()) {
85 81 String targetPath = FileUtils.picPathComp + new File(filePath).getName();
86 82 try {
... ... @@ -89,7 +85,8 @@ public class FileControl {
89 85 e.printStackTrace();
90 86 }
91 87 try {
92   - sendUserAsync.sendStuToHaiKang(filePath, targetPath,cardNum,startTime, endTime, validTimeEnabled, name, deviceId, userType,schoolId);
  88 + log.info("下发人脸,人脸路径:{},用户名:{},下发设备:{}",filePath,name,deviceId);
  89 + sendUserAsync.sendStuToHaiKang(filePath, targetPath,cardNum,startTime, endTime, validTimeEnabled, name, deviceId, userType,schoolId,card);
93 90 System.out.println("time:" + (System.currentTimeMillis() - time) / 1000);
94 91 return "1";
95 92 } catch (Exception e) {
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java
... ... @@ -137,7 +137,7 @@ public class UserControl {
137 137 if (null != studentBean) {
138 138 if (cmsServer.getIsDeviceOnline(devId)) {
139 139 String cardNum = Long.parseLong(baseService.getCard(card), 16) + "";
140   - sendUserAsync.sendStuToHaiKang(filePath.getAbsolutePath(),targetPath,cardNum, startTime, endTime, 1, name, devId, images2Ddevices.getUserType(), 0);
  140 + sendUserAsync.sendStuToHaiKang(filePath.getAbsolutePath(),targetPath,cardNum, startTime, endTime,1, name, devId, images2Ddevices.getUserType(), 0,card);
141 141 } else {
142 142 sendUserAsync.uploadImgs(targetPath, card, name, devId, startTime, endTime, 1, images2Ddevices.getUserType());
143 143 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java
1 1 package com.sincere.haikangface.control;
2 2  
3   -import com.alibaba.fastjson.JSON;
4   -import com.fasterxml.jackson.databind.JavaType;
5   -import com.sincere.haikangface.async.SendUserAsync;
6 3 import com.sincere.haikangface.bean.Result;
7 4 import com.sincere.haikangface.bean.ResultGenerator;
8 5 import com.sincere.haikangface.bean.face.AuthRecordDto;
9 6 import com.sincere.haikangface.bean.face.DeviceAuthRecord;
10   -import com.sincere.haikangface.bean.face.PermissionBean;
11   -import com.sincere.haikangface.bean.face.WeekDay;
  7 +import com.sincere.haikangface.bean.face.SendFaceDto;
12 8 import com.sincere.haikangface.dao.UserDao;
13   -import com.sincere.haikangface.enums.EnumSzBusinessType;
14 9 import com.sincere.haikangface.service.UserOperateService;
15   -import com.sincere.haikangface.utils.FileUtils;
16 10 import com.sincere.haikangface.utils.JsonUtils;
17 11 import io.swagger.annotations.ApiOperation;
18 12 import lombok.extern.slf4j.Slf4j;
19 13 import org.springframework.beans.factory.annotation.Autowired;
20 14 import org.springframework.http.MediaType;
21   -import org.springframework.util.StringUtils;
22 15 import org.springframework.web.bind.annotation.*;
23 16  
24   -import java.util.ArrayList;
25   -import java.util.Arrays;
26   -import java.util.List;
27   -import java.util.Map;
28   -
29 17 /**
30 18 * 用户信息、人脸、卡信息、权限下发控制类
31 19 * @author xuquan
... ... @@ -39,14 +27,11 @@ public class UserOperateController {
39 27 @Autowired
40 28 UserDao userDao;
41 29 @Autowired
42   - SendUserAsync sendUserAsync;
43   - @Autowired
44 30 UserOperateService userOperateService;
45 31  
46 32 @RequestMapping(value = "createHKAuth", method = RequestMethod.POST)
47 33 @ApiOperation("人脸机创建权限2.0")
48   - public Result sendPermiss(@RequestBody AuthRecordDto authRecordDto) {
49   - log.info("permissionBean:{}", JSON.toJSONString(authRecordDto));
  34 + public Result createHKAuth(@RequestBody AuthRecordDto authRecordDto) {
50 35 if(userOperateService.createHKAuth(authRecordDto)){
51 36 return ResultGenerator.genSuccessResult();
52 37 }else{
... ... @@ -57,34 +42,8 @@ public class UserOperateController {
57 42 private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper();
58 43 @RequestMapping(value = "sendHKAuth", method = RequestMethod.POST)
59 44 @ApiOperation("下发权限给设备2.0")
60   - public Result sendHKPermiss(@RequestParam("authId") Integer authId) {
61   - DeviceAuthRecord record = userDao.getAuthRecord(authId);
62   - if(record ==null){
63   - log.info("未查询到对应权限ID: {}, 权限计划。",authId);
64   - return ResultGenerator.genFailResult("未查询到对应权限");
65   - }
66   - Integer studentType = record.getStudentType();
67   - //周计划
68   - String weekDaysJson = record.getWeekDays();
69   - JavaType javaType = objectMapper.contructCollectionType(ArrayList.class, WeekDay.class);
70   - ArrayList<WeekDay> weekDayList = objectMapper.fromJson(weekDaysJson,javaType);
71   - //设备ID
72   - String[] deviceArr = record.getSno().split(",");
73   - List<String> devices= new ArrayList<>(Arrays.asList(deviceArr));
74   - PermissionBean permissionBean = new PermissionBean();
75   - permissionBean.setWeekDays(weekDayList);
76   - permissionBean.setDeviceIds(devices);
77   - permissionBean.setSchoolId(String.valueOf(record.getSchoolId()));
78   - permissionBean.setUserType(String.valueOf(EnumSzBusinessType.EnumUserType.STUDENT.code));
79   - FileUtils.getInstance().writeLogs("传入权限模板:" + JSON.toJSONString(permissionBean), "设置权限内容.txt");
80   - if (!StringUtils.isEmpty(permissionBean.getDeviceIds())) {
81   - if(sendUserAsync.sendHKAuth(permissionBean,record.getId(),studentType)){
82   - return ResultGenerator.genSuccessResult();
83   - }else{
84   - return ResultGenerator.genFailResult("下发权限失败");
85   - }
86   - }
87   - return ResultGenerator.genSuccessResult();
  45 + public Result sendHKAuth(@RequestParam("authId") Integer authId) {
  46 + return userOperateService.sendHKAuth(authId);
88 47 }
89 48  
90 49 @ApiOperation("删除单卡权限2.0")
... ... @@ -112,25 +71,34 @@ public class UserOperateController {
112 71 return userOperateService.sendFace(schoolId,type,deviceIds);
113 72 }
114 73  
115   - // /**
116   -// * 下发卡权限至指定设备(含批量)
117   -// * @param permissionBean
118   -// * @return
119   -// */
120   -// @RequestMapping(value = "sendUserPermission", method = RequestMethod.POST)
121   -// @ApiOperation("下发权限给设备")
122   -// public boolean sendUserPermission(@RequestBody PermissionBean permissionBean) {
123   -// log.error("permissionBean:{}", JSON.toJSONString(permissionBean));
124   -// FileUtils.getInstance().writeLogs("传入权限模板:" + JSON.toJSONString(permissionBean), "设置权限内容.txt");
125   -//
126   -// return userOperateService.sendUserPermission(permissionBean);
127   -// }
128   -//
129   -//
130   -// @RequestMapping(value = "sendUserFace", method = RequestMethod.POST)
131   -// @ApiOperation("下发人脸给设备")
132   -// public boolean sendUserFace(@RequestParam("filePath") String filePath, @RequestParam("userId") String userId,@RequestParam("userType") Integer userType,
133   -// @RequestParam("schoolId") String schoolId, @RequestParam("deviceId") String deviceId) {
134   -// return userOperateService.sendUserFace(filePath,schoolId, userId,userType,deviceId);
135   -// }
  74 + @ApiOperation(value = "照片下发2.1")
  75 + @RequestMapping(value = "sendFaceByThread", method = RequestMethod.POST)
  76 + public Result sendFaceByThread(@RequestBody SendFaceDto sendFaceDto) {
  77 + return userOperateService.sendUserFaceByThread(sendFaceDto);
  78 + }
  79 +
  80 + @ApiOperation(value = "删除下发失败人脸2.0")
  81 + @RequestMapping(value = "deleteFailFace", method = RequestMethod.POST)
  82 + public Result deleteFailFace(@RequestParam("schoolId") Integer schoolId) {
  83 + return userOperateService.deleteFailFace(schoolId);
  84 + }
  85 +
  86 + @RequestMapping(value = "sendFailFace", method = RequestMethod.POST)
  87 + @ApiOperation(value = "重新下发失败人脸2.0")
  88 + public Result sendFailFace(@RequestParam("schoolId") Integer schoolId) {
  89 + return userOperateService.sendFailFace(schoolId);
  90 + }
  91 +
  92 + @ApiOperation(value = "删除指定人脸2.0")
  93 + @RequestMapping(value = "deleteFace", method = RequestMethod.POST)
  94 + public Result deleteFace(@RequestParam("schoolId") Integer schoolId, @RequestParam("cards") String cards,@RequestParam("deviceIds") String deviceIds) {
  95 + return userOperateService.deleteFace(schoolId,cards,deviceIds);
  96 + }
  97 +
  98 + @ApiOperation(value = "测试下发人脸2.0")
  99 + @RequestMapping(value = "deleteFaceTest", method = RequestMethod.POST)
  100 + public Result deleteFaceTest(@RequestParam("schoolId") Integer schoolId,@RequestParam("deviceIds") String deviceIds) {
  101 + return userOperateService.deleteFaceTest(schoolId,deviceIds);
  102 + }
  103 +
136 104 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/DeviceDao.java
... ... @@ -27,8 +27,8 @@ public interface DeviceDao {
27 27 // @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}")
28 28 // List<SZ_AttendanceDto> getAttensWithIsKaoqin(@Param("IsKaoqin")int IsKaoqin);
29 29  
30   - @Update("update SZ_Attendance set isConnection = #{isConnection} where clint_id = #{clint_id}")
31   - int updateDeviceStatu(@Param("isConnection") int isConnection, @Param("clint_id") String clint_id);
  30 + @Update("update SZ_Attendance set isConnection = #{isConnection},intime = #{inTime} where clint_id = #{clint_id}")
  31 + int updateDeviceStatu(@Param("isConnection") int isConnection, @Param("inTime") String inTime, @Param("clint_id") String clint_id);
32 32  
33 33  
34 34 /**
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java
... ... @@ -29,18 +29,12 @@ public interface UserDao {
29 29 */
30 30 @Select("select * from HS_StudentUpdateCard where ID > #{id} and StudentType = #{StudentType} order by AddTime desc")
31 31 List<StudentBean> getAllStudents(@Param("id") long id, @Param("StudentType") int StudentType);
32   -// @Select("select * from HS_StudentUpdateCard where ID > #{id} order by AddTime desc")
33   -// List<StudentBean> getAllStudents(@Param("id")long id);
34   -
35 32 @Update("update SZ_V_School_Student set name = #{name} where student_id = #{student_id}")
36 33 void updateTest(@Param("student_id") String student_id, @Param("name") String name);
37 34  
38 35 @Select("select Top(1) student_num from SZ_V_School_Student where student_id = #{student_id} and role_state = 1")
39 36 String getStudent_Num(@Param("student_id") String student_id);
40 37  
41   -// @Select("select * from TK_QuestionBar")
42   -// List<TK_Question> getQuestion();
43   -
44 38 @Insert("insert into TK_Question (Question,Qtype,Answer,CorrectAnswer,Analysis,State,Intime,ExamineFlag,ExamineUserId, " +
45 39 "CreateUserId,SubjectId,SuggestionTime,DifficulteId,KnowledgeId,TestId,ChapterId,\n" +
46 40 "GradeId,SourceId,OrderId,SId,StemId,AutomaticCorrection,SchoolId) values(#{Question},#{Qtype},#{Answer},#{CorrectAnswer},#{Analysis}" +
... ... @@ -262,6 +256,8 @@ public interface UserDao {
262 256 /**************************************** add by xuquan **************************************/
263 257 DeviceAuthRecord getAuthRecord(Integer authId);
264 258  
  259 + Integer getAuthRecordBySchoolId(@Param("schoolId") Integer schoolId, @Param("studentType") Integer studentType,@Param("status") Integer status);
  260 +
265 261 void insertAuthRecord(DeviceAuthRecord record);
266 262  
267 263 void deleteAuthRecord(@Param("id") Integer authId);
... ... @@ -274,4 +270,10 @@ public interface UserDao {
274 270  
275 271 @Select("select clint_type from SZ_Attendance where clint_id = #{deviceId}")
276 272 Integer getClintTypeByDeviceId(@Param("deviceId") String deviceId);
  273 +
  274 + List<StudentBean> getStudentList(@Param("schoolId") Integer schoolId,@Param("studentType")Integer studentType,@Param("sex") List<Integer> sex);
  275 +
  276 + List<StudentBean> getTeacherList(@Param("schoolId") Integer schoolId);
  277 +
  278 + List<String> getDeviceIds(@Param("schoolId") Integer schoolId,@Param("deviceId") String deviceId);
277 279 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/enums/EnumSzBusinessType.java
... ... @@ -41,10 +41,24 @@ public interface EnumSzBusinessType {
41 41 public final int code;
42 42 public final String name;
43 43  
  44 + public int getCode() {
  45 + return code;
  46 + }
  47 + public String getName() {
  48 + return name;
  49 + }
44 50 EnumStudentType(int code, String name) {
45 51 this.code = code;
46 52 this.name = name;
47 53 }
  54 + public static EnumSzBusinessType.EnumStudentType getByCode(int code){
  55 + for(EnumSzBusinessType.EnumStudentType enums: EnumSzBusinessType.EnumStudentType.values()){
  56 + if(enums.getCode()==code){
  57 + return enums;
  58 + }
  59 + }
  60 + return null;
  61 + }
48 62 }
49 63  
50 64 /**
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java
... ... @@ -4,24 +4,17 @@ import com.sincere.haikangface.bean.Result;
4 4 import com.sincere.haikangface.bean.face.AuthRecordDto;
5 5 import com.sincere.haikangface.bean.face.DeviceAuthRecord;
6 6 import com.sincere.haikangface.bean.face.PermissionBean;
  7 +import com.sincere.haikangface.bean.face.SendFaceDto;
7 8 import org.apache.ibatis.annotations.Param;
8 9  
9 10 /**
  11 + * 用户操作业务接口
10 12 * @author xuquan
11 13 * @date 2020/12/10 17:25
12 14 */
13 15  
14 16 public interface UserOperateService {
15 17  
16   -// /**
17   -// * 下发卡权限至指定设备(含批量)a/
18   -// * @param permissionBean
19   -// * @return
20   -// */
21   -// boolean sendUserPermission(PermissionBean permissionBean);
22   -//
23   -// boolean sendUserFace(String filePath, String schoolId,String userId,int userType, String deviceId);
24   -
25 18 /**
26 19 * 创建权限
27 20 * @param recordDto
... ... @@ -30,6 +23,13 @@ public interface UserOperateService {
30 23 boolean createHKAuth(AuthRecordDto recordDto);
31 24  
32 25 /**
  26 + * 下发权限
  27 + * @param authId
  28 + * @return
  29 + */
  30 + Result sendHKAuth(Integer authId);
  31 +
  32 + /**
33 33 * 权限ID删除权限下发记录
34 34 * @param authId
35 35 * @return
... ... @@ -43,8 +43,54 @@ public interface UserOperateService {
43 43 */
44 44 DeviceAuthRecord getAuthRecord(Integer authId);
45 45  
  46 + /**
  47 + * 重新下发人脸
  48 + * @param userId
  49 + * @param deviceId
  50 + * @param userType
  51 + * @return
  52 + */
46 53 Result againSendFace(String userId,String deviceId,Integer userType);
47 54  
  55 + /**
  56 + * 批量照片下发
  57 + * @param schoolId
  58 + * @param type
  59 + * @param deviceIds
  60 + * @return
  61 + */
48 62 Result sendFace(String schoolId,Integer type,String deviceIds);
49 63  
  64 + /**
  65 + * 多线程照片下发
  66 + * @param sendFaceDto
  67 + * @return
  68 + */
  69 + Result sendUserFaceByThread(SendFaceDto sendFaceDto);
  70 +
  71 + /**
  72 + * 删除失败表人脸
  73 + * @param schoolId
  74 + * @return
  75 + */
  76 + Result deleteFailFace(Integer schoolId);
  77 +
  78 + /**
  79 + * 下发失败表人脸
  80 + * @param schoolId
  81 + * @return
  82 + */
  83 + Result sendFailFace(Integer schoolId);
  84 +
  85 + /**
  86 + * 删除指定人脸
  87 + * @param schoolId
  88 + * @param cards
  89 + * @param deviceIds
  90 + * @return
  91 + */
  92 + Result deleteFace(Integer schoolId,String cards,String deviceIds);
  93 +
  94 + Result deleteFaceTest(Integer schoolId,String deviceIds);
  95 +
50 96 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/BaseService.java
... ... @@ -3,7 +3,10 @@ package com.sincere.haikangface.service.impl;
3 3  
4 4 import com.alibaba.fastjson.JSONArray;
5 5 import com.alibaba.fastjson.JSONObject;
  6 +import com.google.common.util.concurrent.ThreadFactoryBuilder;
6 7 import com.sincere.haikangface.CMSServer;
  8 +import com.sincere.haikangface.async.SendFaceBatchTask100;
  9 +import com.sincere.haikangface.async.SendFaceBatchTask253;
7 10 import com.sincere.haikangface.async.SendUserAsync;
8 11 import com.sincere.haikangface.bean.BaiduFaceRecorder;
9 12 import com.sincere.haikangface.bean.SendRecordBean;
... ... @@ -12,17 +15,23 @@ import com.sincere.haikangface.bean.TeacherBean;
12 15 import com.sincere.haikangface.dao.UserDao;
13 16 import com.sincere.haikangface.enums.EnumSzBusinessType;
14 17 import com.sincere.haikangface.mqtt.MqtUtils;
15   -import com.sincere.haikangface.utils.*;
  18 +import com.sincere.haikangface.utils.CompressPic;
  19 +import com.sincere.haikangface.utils.DateUtils;
  20 +import com.sincere.haikangface.utils.FileUtils;
  21 +import com.sincere.haikangface.utils.HttpUtil;
16 22 import com.sincere.haikangface.xiananDao.SendRecordDao;
17 23 import lombok.extern.slf4j.Slf4j;
18 24 import org.apache.commons.lang3.StringUtils;
19 25 import org.springframework.beans.factory.annotation.Autowired;
20 26 import org.springframework.beans.factory.annotation.Value;
  27 +import org.springframework.scheduling.annotation.Async;
21 28 import org.springframework.stereotype.Service;
22 29  
23 30 import java.io.File;
24 31 import java.text.SimpleDateFormat;
25 32 import java.util.*;
  33 +import java.util.concurrent.*;
  34 +import java.util.stream.Collectors;
26 35  
27 36 /**
28 37 * 业务基础类
... ... @@ -90,13 +99,13 @@ public class BaseService {
90 99 if (cmsServer.getIsDeviceOnline(deviceId)) {
91 100 String cardNo = Long.parseLong(getCard(card),16)+"";
92 101 //下发海康设备
93   - sendUserAsync.sendStuToHaiKang(filePath,targetPath, cardNo, startTime, endTime, validTimeEnabled, name, deviceId, userType,schoolId);
  102 + sendUserAsync.sendStuToHaiKang(filePath,targetPath, cardNo, startTime, endTime, validTimeEnabled, name, deviceId, userType,schoolId,card);
94 103 }else {
95 104 sendUserAsync.uploadImgs(targetPath, card, name, deviceId, startTime, endTime, validTimeEnabled, userType);
96 105 }
97 106 return true;
98 107 } catch (Exception e) {
99   - log.error("下发人脸照失败,错误信息:"+ e.getMessage());
  108 + log.error("下发人脸照失败,错误信息:"+e);
100 109 return false;
101 110 }
102 111 }
... ... @@ -149,91 +158,93 @@ public class BaseService {
149 158 /**
150 159 * 保存成功下发记录
151 160 */
152   - public synchronized void sendSuccessRecord(String card, String faceUrl, String deviceId,String userType) {
153   - long lon = Long.parseLong(card);
154   - String resultCard = getCard(String.format("%08x", lon)).toUpperCase();
155   - StudentBean studentBean = null;
156   - switch (userType) {
157   - case "1"://老师
158   - studentBean = userDao.getTeacherWithCard(resultCard);
159   - break;
160   - case "2"://学生
161   - studentBean = userDao.getStudentWithCard(resultCard);
162   - break;
163   - case "3"://家长
164   - break;
165   - }
166   - if (null != studentBean) {
167   - //用户ID
168   - String userId = studentBean.getUser_id();
169   - //用户名称
170   - String userName = studentBean.getName();
171   - //所属学校
172   - int schoolId = studentBean.getSchool_id();
173   - String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
174   - String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + "");
175   - List<SendRecordBean> sendRecordBeans = sendRecordDao.getRecordIsExit(deviceId,resultCard,userId);
176   - SendRecordBean sendRecordBean =null;
177   - if(sendRecordBeans.size()>0){
178   - sendRecordBean = sendRecordBeans.get(0);
  161 + public synchronized void sendSuccessRecord(String resultCard, String faceUrl, String deviceId,String userType) {
  162 + try{
  163 + StudentBean studentBean = null;
  164 + switch (userType) {
  165 + case "1"://老师
  166 + studentBean = userDao.getTeacherWithCard(resultCard);
  167 + break;
  168 + case "2"://学生
  169 + studentBean = userDao.getStudentWithCard(resultCard);
  170 + break;
  171 + case "3"://家长
  172 + break;
179 173 }
180   - if (null == sendRecordBean) {
181   - sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName,
182   - faceUrl, schoolId,null,null, Integer.parseInt(userType),18,1);
  174 + if (null != studentBean) {
  175 + //用户ID
  176 + String userId = studentBean.getUser_id();
  177 + //用户名称
  178 + String userName = studentBean.getName();
  179 + //所属学校
  180 + int schoolId = studentBean.getSchool_id();
  181 + String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  182 + String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + "");
  183 + List<SendRecordBean> sendRecordBeans = sendRecordDao.getRecordIsExit(deviceId,resultCard,userId);
  184 + SendRecordBean sendRecordBean =null;
  185 + if(sendRecordBeans.size()>0){
  186 + sendRecordBean = sendRecordBeans.get(0);
  187 + }
  188 + if (null == sendRecordBean) {
  189 + sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName,
  190 + faceUrl, schoolId,null,null, Integer.parseInt(userType),18,1);
  191 + } else {
  192 + sendRecordDao.updateFaceSuccessRecord(deviceId,resultCard,time,faceUrl,userName,userId);
  193 + }
  194 + FileUtils.getInstance().writeLogs(studentBean.toString() + "\r\n" + resultCard, "下发成功记录");
183 195 } else {
184   - sendRecordDao.updateFaceSuccessRecord(deviceId,resultCard,time,faceUrl,userName,userId);
  196 + log.error("用户不存在: 对应卡号{} ," + resultCard);
185 197 }
186   - FileUtils.getInstance().writeLogs(studentBean.toString() + "\r\n" + resultCard, "下发成功记录");
187   - } else {
188   - log.error("用户不存在: 对应卡号{} ," + resultCard);
  198 + }catch (Exception e){
  199 + log.error("保存记录异常,异常信息:{}",e);
189 200 }
190 201 }
191 202  
192   -
193 203 /**
194 204 * 保存下发失败记录
195   - * @param card
196 205 * @param faceUrl
197 206 * @param deviceId
198 207 * @param content
199 208 * @param userType
200 209 */
201   - public synchronized void sendFailRecord(String card, String faceUrl, String deviceId,String content,String userType) {
202   - long lon = Long.parseLong(card);
203   - String resultCard = getCard(String.format("%08x", lon)).toUpperCase();
204   - StudentBean studentBean = null;
205   - switch (userType) {
206   - case "1"://老师
207   - studentBean = userDao.getTeacherWithCard(resultCard);
208   - break;
209   - case "2"://学生
210   - studentBean = userDao.getStudentWithCard(resultCard);
211   - break;
212   - case "3"://家长
213   - break;
214   - }
215   - if (null != studentBean) {
216   - //用户ID
217   - String userId = studentBean.getUser_id();
218   - //用户名称
219   - String userName = studentBean.getName();
220   - //所属学校
221   - int schoolId = studentBean.getSchool_id();
222   - String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
223   - String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + "");
224   - List<SendRecordBean> sendRecordBeans = sendRecordDao.getRecordIsExit(deviceId,resultCard,userId);
225   - SendRecordBean sendRecordBean =null;
226   - if(sendRecordBeans.size()>0){
227   - sendRecordBean = sendRecordBeans.get(0);
  210 + public synchronized void sendFailRecord(String resultCard, String faceUrl, String deviceId,String content,String userType) {
  211 + try{
  212 + StudentBean studentBean = null;
  213 + switch (userType) {
  214 + case "1"://老师
  215 + studentBean = userDao.getTeacherWithCard(resultCard);
  216 + break;
  217 + case "2"://学生
  218 + studentBean = userDao.getStudentWithCard(resultCard);
  219 + break;
  220 + case "3"://家长
  221 + break;
228 222 }
229   - if (null == sendRecordBean) {
230   - sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName,
231   - faceUrl, schoolId, content,9, Integer.parseInt(userType),18,2);
232   - }else {
233   - sendRecordDao.updateFaceFailRecord(deviceId,faceUrl,resultCard,time,content,userId);
  223 + if (null != studentBean) {
  224 + //用户ID
  225 + String userId = studentBean.getUser_id();
  226 + //用户名称
  227 + String userName = studentBean.getName();
  228 + //所属学校
  229 + int schoolId = studentBean.getSchool_id();
  230 + String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  231 + String schoolName = userDao.getSchoolName(studentBean.getSchool_id() + "");
  232 + List<SendRecordBean> sendRecordBeans = sendRecordDao.getRecordIsExit(deviceId,resultCard,userId);
  233 + SendRecordBean sendRecordBean =null;
  234 + if(sendRecordBeans.size()>0){
  235 + sendRecordBean = sendRecordBeans.get(0);
  236 + }
  237 + if (null == sendRecordBean) {
  238 + sendRecordDao.saveFaceRecord(userId, deviceId, resultCard, userName, time, schoolName,
  239 + faceUrl, schoolId, content,9, Integer.parseInt(userType),18,2);
  240 + }else {
  241 + sendRecordDao.updateFaceFailRecord(deviceId,faceUrl,resultCard,time,content,userId);
  242 + }
  243 + } else {
  244 + log.error("用户不存在: 对应卡号: {}" + resultCard);
234 245 }
235   - } else {
236   - log.error("用户不存在: 对应卡号{} ," + resultCard);
  246 + }catch (Exception e){
  247 + log.error("保存记录失败,异常信息:{}",e);
237 248 }
238 249 }
239 250  
... ... @@ -339,7 +350,7 @@ public class BaseService {
339 350 * @param card
340 351 * @return
341 352 */
342   - public String getCard(String card) {
  353 + public static String getCard(String card) {
343 354 if (card.length() == 8) {
344 355 int length = card.length();
345 356 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 {
512 523 //插入百度人脸记录表
513 524 userDao.insertBaiduFaceRecorder(baiduFaceRecorder);
514 525 }
  526 +
  527 + @Async
  528 + public void sendUserFaceByAsyncThread(Integer schoolId,Integer userType,Integer studentType,String sex,List<String> deviceList){
  529 + List<String> deviceId_100 = new ArrayList<>();
  530 + List<String> deviceId_253 = new ArrayList<>();
  531 + //过滤设备
  532 + for (String sno : deviceList) {
  533 + //若100服务器有此设备再进行多线程执行下发人脸任务,否则请求253服务执行单个下发人脸
  534 + if (cmsServer.getIsDeviceOnline(sno)) {
  535 + deviceId_100.add(sno);
  536 + }else{
  537 + deviceId_253.add(sno);
  538 + }
  539 + }
  540 + //根据类型获取下发用户信息
  541 + List<StudentBean> studentBeanList = null;
  542 + if (userType == EnumSzBusinessType.EnumUserType.TEACHER.code) {
  543 + studentBeanList = getTeacherList(schoolId);
  544 + }
  545 + if (userType == EnumSzBusinessType.EnumUserType.STUDENT.code) {
  546 + studentBeanList = getStudentList(schoolId,studentType,sex);
  547 + }
  548 + log.info("统计共有下发用户数量:"+studentBeanList.size());
  549 + if(deviceId_100.size()>0){
  550 + //100服务器
  551 + sendFaceToDevice100(deviceId_100,studentBeanList,String.valueOf(schoolId),userType);
  552 + }
  553 + if(deviceId_253.size()>0){
  554 + //253服务器
  555 + sendFaceToDevice253(deviceId_253,studentBeanList,String.valueOf(schoolId),userType);
  556 + }
  557 + }
  558 +
  559 +
  560 + protected void sendFaceToDevice100(List<String> deviceIds,List<StudentBean> studentBeanList,String schoolId,Integer userType){
  561 + log.info("------------------------开始执行100服务,人脸照下发---------------------");
  562 +// //启用多线程执行
  563 +// CountDownLatch begin = new CountDownLatch(1);
  564 +// CountDownLatch end = new CountDownLatch(deviceIds.size());
  565 +// ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-sendFace-runner-%d").build();
  566 +// ExecutorService exe = new ThreadPoolExecutor(4,8,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedThreadFactory);
  567 +// for(String sno : deviceIds){
  568 +// log.info("设备ID:"+ sno);
  569 +// exe.execute(new SendFaceBatchTask100(schoolId,userType,sno,studentBeanList,FileUtils.getInstance(),sendUserAsync,begin,end));
  570 +// }
  571 +// begin.countDown();
  572 +// try {
  573 +// end.await();
  574 +// }catch (Exception e){
  575 +// log.error("下发人脸照失败"+e);
  576 +// e.printStackTrace();
  577 +// }
  578 +// exe.shutdown();
  579 +// System.out.println("统计100服务器总共有"+deviceIds.size()+"个设备,处理完毕");
  580 + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  581 + Calendar calendar = Calendar.getInstance();
  582 + calendar.add(Calendar.YEAR, 10);
  583 + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
  584 + //下发标识:详情见枚举 EnumHkOperateType
  585 + int validTimeEnabled = EnumSzBusinessType.EnumHkOperateType.ADD.code;
  586 + for(StudentBean studentBean : studentBeanList){
  587 + try{
  588 + String userName= studentBean.getName();
  589 + String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto();
  590 + String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num();
  591 + String typeName=userType.intValue()==1?"Teacher":"Student";
  592 + if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){
  593 + continue;
  594 + }
  595 +// String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  596 + String path = "D:\\haikangface\\School" + schoolId + "\\" + typeName;
  597 + String filePath="";
  598 + if(photo.indexOf("f0i5l7e5")!=-1){
  599 + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\");
  600 + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr;
  601 + } else{
  602 + //以学籍号为名的文件名
  603 + String fileName = photo.split(typeName +"/")[1];
  604 + //100服务器上人脸照绝对路径
  605 + filePath = path+ "\\" + fileName;
  606 + }
  607 + log.info("卡号:{},人脸路径:{}, ",cardNum,filePath);
  608 + File file = new File(filePath);//图片
  609 + if(file.exists()){
  610 + String targetPath = FileUtils.picPathComp + file.getName();
  611 + try {
  612 + CompressPic.CompressPic(file.getAbsolutePath(), targetPath);
  613 + } catch (Exception e) {
  614 + log.error("压缩图片失败");
  615 + e.printStackTrace();
  616 + continue;
  617 + }
  618 + for(String sno : deviceIds){
  619 + if(cmsServer.getIsDeviceOnline(sno)){
  620 + if(!StringUtils.isBlank(cardNum)){
  621 + String cardNumLong = Long.parseLong(getCard(cardNum),16) + "";
  622 + //下发100海康设备
  623 + sendUserAsync.sendStuToHaiKang(file.getAbsolutePath(),targetPath,cardNumLong, startTime, endTime, validTimeEnabled, userName, sno, String.valueOf(userType),Integer.parseInt(schoolId),cardNum);
  624 + }
  625 + }else{
  626 + log.error("100服务器,设备不在线");
  627 + }
  628 +
  629 + }
  630 + }
  631 + }catch (Exception e){
  632 + log.error("人脸下发失败");
  633 + e.printStackTrace();
  634 + continue;
  635 + }
  636 + }
  637 + }
  638 +
  639 + protected void sendFaceToDevice253(List<String> deviceIds,List<StudentBean> studentBeanList,String schoolId,Integer userType){
  640 + log.info("------------------------开始执行253服务,人脸照下发---------------------");
  641 +// //启用多线程执行
  642 +// CountDownLatch begin = new CountDownLatch(1);
  643 +// CountDownLatch end = new CountDownLatch(deviceIds.size());
  644 +// ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-sendFace-runner-%d").build();
  645 +// ExecutorService exe = new ThreadPoolExecutor(8,8,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedThreadFactory);
  646 +// for(String sno : deviceIds){
  647 +// log.info("设备ID:"+ sno);
  648 +// exe.execute(new SendFaceBatchTask253(schoolId,userType,sno,studentBeanList,sendUserAsync,begin,end));
  649 +// }
  650 +// begin.countDown();
  651 +// try {
  652 +// end.await();
  653 +// }catch (Exception e){
  654 +// log.error("下发人脸照失败"+e);
  655 +// e.printStackTrace();
  656 +// }
  657 +// exe.shutdown();
  658 +// System.out.println("统计253服务器总共有"+deviceIds.size()+"个设备,处理完毕");
  659 + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  660 + Calendar calendar = Calendar.getInstance();
  661 + calendar.add(Calendar.YEAR, 10);
  662 + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
  663 + //下发标识:详情见枚举 EnumHkOperateType
  664 + int validTimeEnabled = EnumSzBusinessType.EnumHkOperateType.ADD.code;
  665 + for(StudentBean studentBean : studentBeanList){
  666 + try{
  667 + String userName= studentBean.getName();
  668 + String photo = userType.intValue()==1?studentBean.getFace():studentBean.getPhoto();
  669 + String cardNum =userType.intValue()==1?studentBean.getTeacher_num():studentBean.getStudent_num();
  670 + String typeName=userType.intValue()==1?"Teacher":"Student";
  671 + if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){
  672 + continue;
  673 + }
  674 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  675 + String filePath="";
  676 + if(photo.indexOf("f0i5l7e5")!=-1){
  677 + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\");
  678 + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr;
  679 + } else{
  680 + //以学籍号为名的文件名
  681 + String fileName = photo.split(typeName +"/")[1];
  682 + //100服务器上人脸照绝对路径
  683 + filePath = path+ "\\" + fileName;
  684 + }
  685 + log.info("卡号:{},人脸路径:{}, ",cardNum,filePath);
  686 + for(String sno : deviceIds) {
  687 + //下发253服务器
  688 + sendUserAsync.uploadImgs(filePath, cardNum, userName, sno, startTime, endTime, validTimeEnabled, String.valueOf(userType));
  689 + }
  690 + }catch (Exception e){
  691 + log.error("人脸下发失败");
  692 + e.printStackTrace();
  693 + continue;
  694 + }
  695 + }
  696 + }
  697 +
  698 +
  699 + public List<String> getStudentCard(int schoolId, int studentType, String sex) {
  700 + String[] msg = sex.split(",");
  701 + List<Integer> list = new ArrayList<>();
  702 + for(String s : msg){
  703 + list.add(Integer.valueOf(s));
  704 + }
  705 + return userDao.getStudentCard(schoolId,studentType, list);
  706 + }
  707 +
  708 + /**
  709 + * 获取学校下学生数据
  710 + * @param schoolId
  711 + * @param studentType
  712 + * @param sex
  713 + * @return
  714 + */
  715 + public List<StudentBean> getStudentList(Integer schoolId, Integer studentType, String sex) {
  716 + List<Integer> list = new ArrayList<>();
  717 + if(StringUtils.isNotBlank(sex)){
  718 + String[] msg = sex.split(",");
  719 + for(String s : msg){
  720 + list.add(Integer.valueOf(s));
  721 + }
  722 + }
  723 + List<StudentBean> students = userDao.getStudentList(schoolId,studentType,list);
  724 + //去重重复数据
  725 + List<StudentBean> studentList = students.stream().collect(Collectors.collectingAndThen(
  726 + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getStudent_num))), ArrayList::new));
  727 + return studentList;
  728 + }
  729 +
  730 + /**
  731 + * 获取学校下老师数据
  732 + * @param schoolId
  733 + * @return
  734 + */
  735 + public List<StudentBean> getTeacherList(Integer schoolId) {
  736 + List<StudentBean> teachers = userDao.getTeacherList(schoolId);
  737 + //去重重复数据
  738 + List<StudentBean> teacherist = teachers.stream().collect(Collectors.collectingAndThen(
  739 + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(StudentBean::getTeacher_num))), ArrayList::new));
  740 + return teacherist;
  741 + }
515 742 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java
1 1 package com.sincere.haikangface.service.impl;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.fasterxml.jackson.databind.JavaType;
2 5 import com.sincere.haikangface.CMSServer;
3 6 import com.sincere.haikangface.async.SendUserAsync;
4   -import com.sincere.haikangface.bean.*;
  7 +import com.sincere.haikangface.bean.Result;
  8 +import com.sincere.haikangface.bean.ResultGenerator;
  9 +import com.sincere.haikangface.bean.SendRecordBean;
  10 +import com.sincere.haikangface.bean.StudentBean;
5 11 import com.sincere.haikangface.bean.face.*;
  12 +import com.sincere.haikangface.control.UserControl;
6 13 import com.sincere.haikangface.dao.DeviceDao;
7 14 import com.sincere.haikangface.dao.UserDao;
  15 +import com.sincere.haikangface.enums.EnumSzBusinessType;
8 16 import com.sincere.haikangface.service.UserOperateService;
9 17 import com.sincere.haikangface.utils.*;
10 18 import com.sincere.haikangface.xiananDao.SendRecordDao;
11 19 import lombok.extern.slf4j.Slf4j;
12 20 import org.apache.commons.lang3.StringUtils;
13 21 import org.springframework.beans.factory.annotation.Autowired;
  22 +import org.springframework.scheduling.annotation.Async;
14 23 import org.springframework.stereotype.Service;
  24 +
15 25 import java.io.File;
  26 +import java.io.IOException;
  27 +import java.text.SimpleDateFormat;
16 28 import java.util.*;
17 29  
18 30 /**
19   - * TODO
20   - *
21   - * @author Administrator
  31 + * 海康设备用户操作业务实现
  32 + * @author xuquan
22 33 * @date 2020/12/10 21:26
23 34 */
24 35 @Slf4j
... ... @@ -37,6 +48,8 @@ public class UserOperateServiceImpl implements UserOperateService {
37 48 BaseService baseService;
38 49 @Autowired
39 50 SendUserAsync sendUserAsync;
  51 + @Autowired
  52 + UserControl userControl;
40 53  
41 54 private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper();
42 55  
... ... @@ -45,18 +58,20 @@ public class UserOperateServiceImpl implements UserOperateService {
45 58 try {
46 59 String sexStr = recordDto.getWeekDays().get(0).getSex();
47 60 //1学生类型,当为组时为群组iD
48   - int studentType = recordDto.getStudentType();
  61 + Integer studentType = recordDto.getStudentType();
49 62 //学校ID
50   - int schoolId = recordDto.getSchoolId();
  63 + Integer schoolId = recordDto.getSchoolId();
51 64 //设备ID
52 65 List<String> deviceIds = recordDto.getSnList();
53 66 //1 学生类型 2 学生组
54   - int type = recordDto.getType();
  67 + Integer type = recordDto.getType();
55 68 //权限类型
56   - int authType = recordDto.getAuthType();
  69 + Integer authType = recordDto.getAuthType();
57 70 //权限周计划
58 71 List<WeekDay> weekDay = recordDto.getWeekDays();
59 72 String weekDayJson = objectMapper.toJson(weekDay);
  73 + //设备类型
  74 + Integer deviceType = userDao.getClintTypeByDeviceId(deviceIds.get(0));
60 75 String deviceStr = "";
61 76 for (String sn : deviceIds) {
62 77 deviceStr += sn + ",";
... ... @@ -65,16 +80,15 @@ public class UserOperateServiceImpl implements UserOperateService {
65 80 Date end = DateUtils.string2Date("2030-01-01", DateUtils.format1);
66 81 deviceStr = deviceStr.substring(0, deviceStr.length() - 1);
67 82 //保存权限计划
68   - saveDeviceAuth(schoolId, deviceStr, studentType, start, end, weekDayJson, sexStr, type, authType);
  83 + saveDeviceAuth(schoolId, deviceStr, studentType, start, end, weekDayJson, sexStr, type, authType,deviceType);
69 84 return true;
70 85 } catch (Exception e) {
71   - e.printStackTrace();
72   - log.error("创建权限失败");
  86 + log.error("创建权限失败,异常信息:{}",e);
73 87 }
74 88 return false;
75 89 }
76 90  
77   - private void saveDeviceAuth(int schoolId, String sn, int studentType, Date start, Date end, String json, String sexStr, int type, int authType) {
  91 + private void saveDeviceAuth(Integer schoolId, String sn, Integer studentType, Date start, Date end, String json, String sexStr, Integer type, Integer authType,Integer deviceType) {
78 92 //设置权限信息
79 93 DeviceAuthRecord record = new DeviceAuthRecord();
80 94 //学校ID
... ... @@ -89,8 +103,14 @@ public class UserOperateServiceImpl implements UserOperateService {
89 103 record.setStudentType(studentType);
90 104 //性别
91 105 record.setSex(sexStr);
92   - //时段
93   - record.setShiduan(null);
  106 + if(deviceType.intValue()== 22 || deviceType.intValue()== 29){
  107 + Integer shiduan = userDao.getAuthRecordBySchoolId(schoolId,studentType,null);
  108 + //如果是大华一体机
  109 + record.setShiduan(shiduan!=null?shiduan+1+"":1+"");
  110 + }else{
  111 + //时段
  112 + record.setShiduan(null);
  113 + }
94 114 //计划状态1正常2停用
95 115 record.setState(1);
96 116 //计划下发状态1下发成功2下发失败3待下发
... ... @@ -103,6 +123,59 @@ public class UserOperateServiceImpl implements UserOperateService {
103 123 record.setaType(type);
104 124 //插入权限记录表AC_DeviceAuthRecord
105 125 userDao.insertAuthRecord(record);
  126 + log.info("创建权限周计划成功", JSON.toJSONString(record));
  127 + }
  128 +
  129 + @Override
  130 + public Result sendHKAuth(Integer authId) {
  131 + DeviceAuthRecord record = userDao.getAuthRecord(authId);
  132 + if(record ==null){
  133 + log.info("未查询到对应权限ID: {}, 权限计划。",authId);
  134 + return ResultGenerator.genFailResult("未查询到对应权限");
  135 + }
  136 + //设备ID
  137 + String[] deviceArr = record.getSno().split(",");
  138 + List<String> devices= new ArrayList<>(Arrays.asList(deviceArr));
  139 + if(devices.size()<1){
  140 + return ResultGenerator.genFailResult("未选择下发设备");
  141 + }
  142 + //学生类型
  143 + Integer studentType = record.getStudentType();
  144 + //周计划
  145 + String weekDaysJson = record.getWeekDays();
  146 + JavaType javaType = objectMapper.contructCollectionType(ArrayList.class, WeekDay.class);
  147 + ArrayList<WeekDay> weekDayList = objectMapper.fromJson(weekDaysJson,javaType);
  148 + //设备类型
  149 + Integer clintType = userDao.getClintTypeByDeviceId(devices.get(0));
  150 + if(clintType.intValue()== 22 || clintType.intValue()== 29){
  151 + PermissionDHBean dhBean = new PermissionDHBean();
  152 + dhBean.setWeekDays(weekDayList);
  153 + dhBean.setDeviceIds(devices);
  154 + dhBean.setChannel(record.getShiduan());
  155 + dhBean.setCustomName(EnumSzBusinessType.EnumStudentType.getByCode(studentType).code+"");
  156 + dhBean.setStudentType(String.valueOf(studentType));
  157 + //发送大华设备
  158 + HttpUtil.sendDHPermission(dhBean);
  159 + log.info("map{}", JSON.toJSONString(dhBean));
  160 + //更新计划位下发成功
  161 + userDao.updateAuthRecord(record.getId(),1);
  162 + return ResultGenerator.genSuccessResult();
  163 + }
  164 + if(clintType.intValue()== 18 || clintType.intValue()== 28){
  165 + PermissionBean permissionBean = new PermissionBean();
  166 + permissionBean.setWeekDays(weekDayList);
  167 + permissionBean.setDeviceIds(devices);
  168 + permissionBean.setSchoolId(String.valueOf(record.getSchoolId()));
  169 + permissionBean.setUserType(String.valueOf(EnumSzBusinessType.EnumUserType.STUDENT.code));
  170 + if (!org.springframework.util.StringUtils.isEmpty(permissionBean.getDeviceIds())) {
  171 + if(sendUserAsync.sendHKAuth(permissionBean,record.getId(),studentType)){
  172 + return ResultGenerator.genSuccessResult();
  173 + }else{
  174 + return ResultGenerator.genFailResult("下发权限失败");
  175 + }
  176 + }
  177 + }
  178 + return ResultGenerator.genSuccessResult();
106 179 }
107 180  
108 181 @Override
... ... @@ -149,8 +222,8 @@ public class UserOperateServiceImpl implements UserOperateService {
149 222 File file = new File(filePath.trim());
150 223 if (!file.exists()) {
151 224 log.error("文件不存在:" + filePath);
152   - String card = Long.parseLong(baseService.getCard(cardNum), 16)+"";
153   - baseService.sendFailRecord(card, filePath, deviceId, "文件不存在", String.valueOf(userType));
  225 +// String card = Long.parseLong(baseService.getCard(cardNum), 16)+"";
  226 + baseService.sendFailRecord(cardNum, filePath, deviceId, "文件不存在", String.valueOf(userType));
154 227 return ResultGenerator.genFailResult("文件不存在");
155 228 }
156 229 //设备类型
... ... @@ -170,7 +243,7 @@ public class UserOperateServiceImpl implements UserOperateService {
170 243 } catch (Exception e) {
171 244 log.error("图片压缩失败");
172 245 }
173   - boolean isOk = baseService.sendImg(photo, targetPath, deviceId, cardNum, userName, String.valueOf(userType), schoolId);
  246 + boolean isOk = baseService.sendImg(file.getAbsolutePath(), targetPath, deviceId, cardNum, userName, String.valueOf(userType), schoolId);
174 247 if (isOk) {
175 248 return ResultGenerator.genSuccessResult();
176 249 } else {
... ... @@ -217,10 +290,10 @@ public class UserOperateServiceImpl implements UserOperateService {
217 290 //设备类型
218 291 Integer clintType = userDao.getClintTypeByDeviceId(idLists.get(0));
219 292 if(clintType.intValue()== 22 || clintType.intValue()== 29){
220   - sendUserAsync.uploadDHImg(schoolId,userType,deviceIds);
  293 + HttpUtil.uploadDHImg(schoolId,userType,deviceIds);
221 294 }
222 295 if(clintType.intValue()== 18 || clintType.intValue()== 28){
223   - sendUserAsync.uploadHkImg(schoolId,userType,deviceIds);
  296 + HttpUtil.uploadHkImg(schoolId,userType,deviceIds);
224 297 }
225 298 int fileSize = filesStudent.length;
226 299 int clintNum = deviceArr.length;
... ... @@ -238,260 +311,283 @@ public class UserOperateServiceImpl implements UserOperateService {
238 311 return ResultGenerator.genFailResult("下发失败");
239 312 }
240 313 }
241   -}
242 314  
243   -// p }ublic boolean sendPermiss2(PermissionBean permissionBean, int i) {
244   -// return sendImg(filePath, targetPath, deviceId, card, name, userType); String userType = permissionBean.getUserType();
245   -// String schoolId = permissionBean.getSchoolId();
246   -// //设备ID,多设备户英文逗号,隔开
247   -// List<String> deviceIds = permissionBean.getDeviceIds();
248   -// //用户iD,批量用户英文逗号,隔开
249   -// String userIds = permissionBean.getUserIds();
250   -// String[] userIdsStr = userIds.split(",");
251   -//
252   -// List<String> cardNumList = new ArrayList<>();
253   -// if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.TEACHER.code) {
254   -// List<String> cardList = getUserCard(userIds,EnumSzBusinessType.EnumUserType.TEACHER.code);
255   -// cardNumList.addAll(cardList);
256   -// }
257   -// if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.STUDENT.code) {
258   -// for (String userId : userIdsStr) {
259   -// String cardNum = userDao.getStudentCardWithUserId(schoolId,userId);
260   -// cardNumList.add(cardNum);
261   -// }
262   -// }
263   -// //权限周计划
264   -// List<WeekDay> weekDays = permissionBean.getWeekDays();
265   -// //存储周计划时段
266   -// Map<Integer, List<WeekTime>> map = new HashMap<>();
267   -// for (WeekDay weekDay : weekDays) {
268   -// //整理周和时间段
269   -// initWeedayAndTimes(weekDay, map);
270   -// senPsermiss(permissionBean, map, deviceIds, cardNumList, i);
271   -// }
272   -// log.error("map{}", JSON.toJSONString(map));
273   -// return true;
274   -// }
  315 + @Override
  316 + public Result sendUserFaceByThread(SendFaceDto sendFaceDto) {
  317 + //下发设备集合
  318 + String[] deviceArr = sendFaceDto.getsNos().split(",");
  319 + List<String> deviceList= new ArrayList<>(Arrays.asList(deviceArr));
  320 + if(deviceList.size()<1){
  321 + return ResultGenerator.genFailResult("未选择下发设备");
  322 + }
  323 + Integer schoolId = sendFaceDto.getSchoolId();
  324 + Integer studentType = sendFaceDto.getStudentType();
  325 + String sex = sendFaceDto.getSex();
  326 + Integer userType = null;
  327 + if(sendFaceDto.getType().intValue()==0 || sendFaceDto.getType().intValue()==1){
  328 + userType = 2;
  329 + }else{
  330 + userType = 1;
  331 + }
  332 + //设备类型
  333 + Integer clintType = userDao.getClintTypeByDeviceId(deviceList.get(0));
  334 + if(clintType.intValue()== 22 || clintType.intValue()== 29){
  335 + //发送大华设备
  336 + HttpUtil.uploadDHImg(String.valueOf(schoolId),userType,sendFaceDto.getsNos());
  337 + }
  338 + if(clintType.intValue()== 18 || clintType.intValue()== 28){
  339 + //发送海康设备
  340 + baseService.sendUserFaceByAsyncThread(schoolId,userType,studentType,sex,deviceList);
  341 + }
  342 + return ResultGenerator.genSuccessResult();
  343 + }
  344 +
  345 + @Override
  346 + public Result deleteFailFace(Integer schoolId) {
  347 + if(schoolId ==null){
  348 + return ResultGenerator.genFailResult("删除失败人脸,学校ID不能为空");
  349 + }
  350 + List<SendRecordBean> recordBeanList = sendRecordDao.getFailRecord(schoolId);
  351 + if(recordBeanList.size()>0){
  352 + for(SendRecordBean recordBean : recordBeanList){
  353 + try{
  354 + //人脸卡号
  355 + String cardNum = recordBean.getNum();
  356 + //设备ID、设备类型
  357 + String deviceId = recordBean.getDeviceID();
  358 + Integer clintType = userDao.getClintTypeByDeviceId(deviceId);
  359 + //删除海康人脸
  360 + if(clintType.intValue()== 18 || clintType.intValue()== 28){
  361 + if (cmsServer.getIsDeviceOnline(deviceId)) {
  362 + String cardNo = Long.parseLong(baseService.getCard(cardNum),16) + "";
  363 + cmsServer.deleteCard(deviceId, cardNo,schoolId);
  364 + }else{
  365 + //不在线,去253服务器上删除
  366 + HttpUtil.deleteCard(deviceId, cardNum);
  367 + }
  368 + }
  369 + //删除大华人脸
  370 + if(clintType.intValue()== 22 || clintType.intValue()== 29){
  371 + HttpUtil.deleteDHFace(schoolId,cardNum,deviceId);
  372 + }
  373 + }catch (Exception e){
  374 + log.error("删除失败人脸失败,异常信息:{}",e);
  375 + continue;
  376 + }
  377 + }
  378 + }
  379 + return ResultGenerator.genSuccessResult();
  380 + }
  381 +
  382 + @Override
  383 + public Result sendFailFace(Integer schoolId) {
  384 + if(schoolId ==null){
  385 + return ResultGenerator.genFailResult("删除失败人脸,学校ID不能为空");
  386 + }
  387 + List<SendRecordBean> recordBeanList = sendRecordDao.getFailRecord(schoolId);
  388 + if(recordBeanList.size()>0){
  389 + for(SendRecordBean recordBean : recordBeanList){
  390 + try{
  391 + //用户类型1老师2学生
  392 + int userType = recordBean.getUserType();
  393 + //人脸卡号
  394 + String cardNum = recordBean.getNum();
  395 + //设备ID、设备类型
  396 + String deviceId = recordBean.getDeviceID();
  397 + Integer clintType = userDao.getClintTypeByDeviceId(deviceId);
  398 + //2.重新下发
  399 + StudentBean studentBean= null;
  400 + String typeName ="";
  401 + if(userType ==1){
  402 + typeName= "Teacher";
  403 + studentBean = userDao.getTeacherWithCard(cardNum);
  404 + }else{
  405 + typeName= "Student";
  406 + studentBean= userDao.getStudentWithCard(cardNum);
  407 + }
  408 + if(studentBean==null){
  409 + continue;
  410 + }
  411 + String studentCode = studentBean.getStudentCode();
  412 + String filePath="";
  413 + //下发海康人脸
  414 + if(clintType.intValue()== 18 || clintType.intValue()== 28){
  415 + //1.先删除人脸
  416 + if (cmsServer.getIsDeviceOnline(deviceId)) {
  417 + String cardNo = Long.parseLong(baseService.getCard(cardNum),16) + "";
  418 + cmsServer.deleteCard(deviceId, cardNo,schoolId);
  419 + }else{
  420 + //不在线,去253服务器上删除
  421 + HttpUtil.deleteCard(deviceId, cardNum);
  422 + }
  423 + //100服务器文件目录绝对路径
  424 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  425 + String photo= userType==1?studentBean.getFace():studentBean.getPhoto();
  426 + if (StringUtils.isBlank(photo)){
  427 + continue;
  428 + }
  429 + if(photo.indexOf("f0i5l7e5")!=-1){
  430 + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\");
  431 + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr;
  432 + } else{
  433 + //以学籍号为名的文件名
  434 + String fileName = photo.split(typeName +"/")[1];
  435 + //100服务器上人脸照绝对路径
  436 + filePath = path+ "\\" + fileName;
  437 + }
  438 + log.info("卡号:{},人脸路径:{}, ",cardNum, filePath);
  439 + File file = new File(filePath);//图片
  440 + String targetPath = FileUtils.picPathComp + file.getName();
  441 + try {
  442 + CompressPic.CompressPic(file.getAbsolutePath(), targetPath);
  443 + } catch (IOException e) {
  444 + log.error("图片压缩失败",e);
  445 + continue;
  446 + }
  447 + String userName= studentBean.getName();
  448 + baseService.sendImg(file.getAbsolutePath(), targetPath, deviceId, cardNum, userName, String.valueOf(userType), schoolId);
  449 + }
  450 + //下发大华人脸
  451 + if(clintType.intValue()== 22 || clintType.intValue()== 29){
  452 + HttpUtil.uploadDHImgForOne(filePath,schoolId,studentCode,clintType,deviceId);
  453 + }
  454 + }catch (Exception e){
  455 + log.error("下发失败表人脸失败,异常信息:{}",e);
  456 + continue;
  457 + }
  458 + }
  459 + }
  460 + return ResultGenerator.genSuccessResult();
  461 + }
275 462  
276   -//
277   -// // @Override
278   -//// public boolean sendUserPermission(PermissionBean permissionBean) {
279   -//// //设备ID,多设备户英文逗号,隔开
280   -//// List<String> deviceIds = permissionBean.getDeviceIds();
281   -//// if ((CollectionUtils.isEmpty(deviceIds))) {
282   -//// log.error("下发权限,设备ID为空");
283   -//// return false;
284   -//// }
285   -//// //用户类型
286   -//// String userType = permissionBean.getUserType();
287   -//// //学校ID
288   -//// String schoolId = permissionBean.getSchoolId();
289   -////
290   -//// //用户iD,批量用户英文逗号,隔开
291   -//// String userIds = permissionBean.getUserIds();
292   -//// String[] userIdsStr = userIds.split(",");
293   -////
294   -//// List<String> cardNumList = new ArrayList<>();
295   -//// if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.TEACHER.code) {
296   -//// List<String> cardList = getTeacherUserNum(userIds,EnumSzBusinessType.EnumUserType.TEACHER.code);
297   -//// cardNumList.addAll(cardList);
298   -//// }
299   -//// if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.STUDENT.code) {
300   -//// for (String userId : userIdsStr) {
301   -//// String cardNum = userDao.getStudentCardWithUserId(schoolId,userId);
302   -//// if(StringUtils.isNotBlank(cardNum)){
303   -//// cardNumList.add(cardNum);
304   -//// }
305   -//// }
306   -//// }
307   -//// for(String deviceId : deviceIds){
308   -//// //权限周计划
309   -//// List<WeekDay> weekDays = permissionBean.getWeekDays();
310   -//// //存储周计划时段
311   -//// Map<Integer, List<WeekTime>> map = new HashMap<>();
312   -//// for (WeekDay weekDay : weekDays) {
313   -//// //整理周和时间段
314   -//// initWeedayAndTimes(weekDay, map);
315   -//// //下发权限
316   -//// cmsServer.(permissionBean, map, cardNumList,deviceId);
317   -//// }
318   -//// log.info("map{}", JSON.toJSONString(map));
319   -//// }
320   -//// return true;
321   -//// }
322   -////
323   -//// /**
324   -//// * 整理时间
325   -//// * @param weekDay
326   -//// * @param map
327   -//// */
328   -//// private void initWeedayAndTimes(WeekDay weekDay, Map<Integer, List<WeekTime>> map) {
329   -////
330   -//// String weekDayStr = weekDay.getWeekDay();
331   -//// String[] weekDays = weekDayStr.split(",");
332   -////
333   -//// List<WeekTime> weekTimes = weekDay.getWeekTimes();
334   -////
335   -//// for (int i = 0; i < weekDays.length; i++) {
336   -//// int weekDayIndex = Integer.parseInt(weekDays[i]);
337   -//// if (map.containsKey(weekDayIndex)) {//周已经有时间段
338   -//// List<WeekTime> weekTimeList = map.get(weekDayIndex);
339   -//// for (WeekTime wee : weekTimes) {
340   -//// weekTimeList.add(wee);
341   -//// }
342   -//// map.put(weekDayIndex, weekTimeList);
343   -//// } else {
344   -//// List<WeekTime> weekTimes1 = new ArrayList<>();
345   -//// weekTimes1.addAll(weekTimes);
346   -//// map.put(weekDayIndex, weekTimes1);
347   -//// }
348   -//// }
349   -////
350   -//// }
351   -////
352   -//// /**
353   -//// *
354   -//// * @param userIds
355   -//// * @param userType
356   -//// * @return
357   -//// */
358   -//// private List<String> getTeacherUserNum(String userIds, int userType) {
359   -//// List<String> cards = new ArrayList<>();
360   -//// try {
361   -//// String[] userIdsStr = userIds.split(",");
362   -//// for (String userId : userIdsStr) {
363   -//// TeacherBean teacherBean = null;
364   -//// if (userType == EnumSzBusinessType.EnumUserType.TEACHER.code) {//教师
365   -//// teacherBean = userDao.getTeacherWithUserId(userId);
366   -//// if (null != teacherBean) {
367   -//// String card = teacherBean.getTeacer_num();
368   -//// if (!StringUtils.isEmpty(card)) {
369   -//// cards.add(card);
370   -//// }
371   -//// } else {
372   -//// log.error("教师用户不存在");
373   -//// }
374   -//// }
375   -//// }
376   -////
377   -//// } catch (Exception e) {
378   -//// e.printStackTrace();
379   -//// }
380   -//// return cards;
381   -//// }
382   -////
383   -//// /**
384   -//// * 把卡号和权限下发到对应的设备
385   -//// *
386   -//// * @param permissionBean
387   -//// * @param map
388   -//// * @param cardNumList
389   -//// * @return
390   -//// */
391   -//// private boolean sendPermission(PermissionBean permissionBean, Map<Integer, List<WeekTime>> map,List<String> cardNumList,String deviceId) {
392   -//// String userType = permissionBean.getUserType();
393   -//// if (null == cardNumList || cardNumList.size() == 0) {
394   -//// log.error("卡号为空");
395   -//// return false;
396   -//// }
397   -//// //设备在线
398   -//// boolean onLine = cmsServer.getIsDeviceOnline(deviceId);
399   -//// if (onLine) {
400   -//// for (String cardNum : cardNumList) {
401   -//// //卡号取反
402   -//// String newCardNum = getCardNo(cardNum);
403   -//// if (StringUtils.isBlank(newCardNum)) {
404   -//// continue;
405   -//// }
406   -//// //获取十进制卡
407   -//// newCardNum = String.valueOf(NumConvertUtil.hex16To10(newCardNum));
408   -//// //设置卡权限计划模板
409   -//// if(cmsServer.SetCardWeekPlan(deviceId, HKXmlUtils.getInstance().SetCardTemplate())){
410   -//// log.info("设置卡权限计划模板成功,成功卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType);
411   -//// }else{
412   -//// log.error("设置卡权限计划模板失败,失败卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType);
413   -//// }
414   -//// //设置卡权限周计划
415   -//// if(cmsServer.SetCardWeekPlan(deviceId, HKXmlUtils.getInstance().SetCardWeekPlan())){
416   -//// log.info("设置卡权限周计划成功,成功卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType);
417   -//// }else{
418   -//// log.error("设置卡权限周计划失败,失败卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType);
419   -//// }
420   -//// for (Map.Entry<Integer, List<WeekTime>> weeKdayMap : map.entrySet()) {
421   -//// int week = weeKdayMap.getKey();
422   -//// List<WeekTime> weekTimes = weeKdayMap.getValue();
423   -////
424   -//// StringBuffer stringBuffer = new StringBuffer();
425   -//// for (WeekTime weekTime : weekTimes) {
426   -//// //周计化时间段
427   -//// String weekPlanTimes = HKXmlUtils.getInstance().SetCardWeekPlanTimes(weekTime.getStartTime(), weekTime.getEndTime());
428   -//// stringBuffer.append(weekPlanTimes);
429   -//// }
430   -//// //卡权限周计划时间段
431   -//// String weekPlanTime = HKXmlUtils.getInstance().SetCardWeekPlanTime(stringBuffer.toString(), "" + week);
432   -//// FileUtils.getInstance().writeLogs(weekPlanTime, "设置卡权限周计划时间.txt");
433   -//// //设置卡权限
434   -//// String serCardRightCfg = HKXmlUtils.getInstance().SetCardRightCfg(newCardNum);
435   -//// //设置卡权限周计划
436   -//// if(cmsServer.SetCardWeekPlan(deviceId, weekPlanTime)){
437   -//// log.info("设置卡权限计划模板成功,成功卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType);
438   -//// }else{
439   -//// log.error("设置卡权限计划模板失败,失败卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType);
440   -//// }
441   -//// if(cmsServer.SetCardWeekPlan(deviceId, serCardRightCfg)){
442   -//// log.info("设置卡权限周计划成功,成功卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType);
443   -//// }else{
444   -//// log.error("设置卡权限周计划失败,失败卡号: {},设备ID: {},用户类型:{}",cardNum,deviceId,userType);
445   -//// }
446   -//// }
447   -//// }
448   -//// } else {
449   -//// //设备不在线
450   -//// log.warn("设备: {},不在线.前往253服务器下发", deviceId);
451   -//// HttpUtil.sendPermission2HK(permissionBean);
452   -//// }
453   -//// return true;
454   -//// }
455   -////
456   -////
457   -//// /**
458   -//// * 卡号两两取反
459   -//// *
460   -//// * @param cardDex
461   -//// * @return
462   -//// */
463   -//// public static String getCardNo(String cardDex) {
464   -//// String cardR = "";
465   -//// int length = cardDex.length();
466   -//// if (length != 8) {
467   -//// log.error("卡号格式不正确: 位数有误" + cardDex);
468   -//// return cardDex;
469   -//// }
470   -//// while (length > 0) {
471   -//// length -= 2;
472   -//// cardR += cardDex.substring(length, length + 2);
473   -//// }
474   -//// return cardR;
475   -//// }
476   -////
477   -//// @Override
478   -//// public boolean sendUserFace(String filePath, String schoolId,String userId, int userType, String deviceId) {
479   -//// File file = new File(filePath);
480   -//// if(file ==null){
481   -//// log.error("用户人脸不存在");
482   -//// sendRecoderUtils.sendFail(sendRecordDao, Long.parseLong(getCard(card), 16) + "", filePath, deviceId, userDao, "文件不存在", userType);
483   -//// return false;
484   -//// }
485   -//// String cardNum = userDao.getStudentCardWithUserId(schoolId,userId);
486   -//// String fileName = file.getName();
487   -//// //文件相对路径
488   -//// String targetPath = FileUtils.picPathComp + fileName;
489   -//// try {
490   -//// CompressPic.CompressPic(filePath, targetPath);
491   -//// } catch (Exception e) {
492   -//// log.error("人脸图片压缩失败.",e.getMessage());
493   -//// return false;
494   -//// }
495   -//// return sendImg(filePath, targetPath, deviceId, card, name, userType);
496   -//// }
497   -//}
  463 + @Override
  464 + public Result deleteFace(Integer schoolId,String cards,String deviceIds) {
  465 + if(StringUtils.isBlank(cards)){
  466 + return ResultGenerator.genFailResult("删除人脸卡号");
  467 + }
  468 + String[] cardArr = cards.split(",");
  469 + List<String> cardList= new ArrayList<>(Arrays.asList(cardArr));
  470 + for(String card : cardList){
  471 + if(StringUtils.isNotBlank(deviceIds)){
  472 + //设备集合
  473 + String[] deviceArr = deviceIds.split(",");
  474 + List<String> deviceList= new ArrayList<>(Arrays.asList(deviceArr));
  475 + for(String sno : deviceList){
  476 + try{
  477 + //设备类型
  478 + Integer clintType = userDao.getClintTypeByDeviceId(sno);
  479 + if(clintType.intValue()== 18 || clintType.intValue()== 28){
  480 + //删除海康设备人脸
  481 + if (cmsServer.getIsDeviceOnline(sno)) {
  482 + String cardNo = Long.parseLong(baseService.getCard(card),16) + "";
  483 + cmsServer.deleteCard(sno, cardNo,schoolId);
  484 + }else{
  485 + HttpUtil.deleteCard(sno, card);
  486 + }
  487 + }
  488 + if(clintType.intValue()== 22 || clintType.intValue()== 29){
  489 + //删除大华设备人脸
  490 + HttpUtil.deleteDHFace(schoolId,card,sno);
  491 + }
  492 + }catch (Exception e){
  493 + log.error("删除人脸失败,异常信息:{}",e);
  494 + continue;
  495 + }
  496 + }
  497 + }else{
  498 + List<String> clintIds = userDao.getDeviceIds(schoolId,null);
  499 + if(clintIds.size()>0){
  500 + for(String sno : clintIds){
  501 + try{
  502 + //设备类型
  503 + Integer clintType = userDao.getClintTypeByDeviceId(sno);
  504 + if(clintType.intValue()== 18 || clintType.intValue()== 28){
  505 + //删除海康设备人脸
  506 + if (cmsServer.getIsDeviceOnline(sno)) {
  507 + String cardNo = Long.parseLong(baseService.getCard(card),16) + "";
  508 + cmsServer.deleteCard(sno, cardNo,schoolId);
  509 + }else{
  510 + HttpUtil.deleteCard(sno, card);
  511 + }
  512 + }
  513 + if(clintType.intValue()== 22 || clintType.intValue()== 29){
  514 + //删除大华设备人脸
  515 + HttpUtil.deleteDHFace(schoolId,card,sno);
  516 + }
  517 + }catch (Exception e){
  518 + log.error("删除人脸失败,异常信息:{}",e);
  519 + continue;
  520 + }
  521 + }
  522 + }
  523 + }
  524 + }
  525 + return ResultGenerator.genSuccessResult();
  526 + }
  527 +
  528 + @Override
  529 + public Result deleteFaceTest(Integer schoolId, String deviceIds) {
  530 + List<StudentBean> list = baseService.getStudentList(schoolId,null,"");
  531 + if(StringUtils.isBlank(deviceIds)){
  532 + log.warn("未选择下发设备");
  533 + return ResultGenerator.genFailResult("未选择下发设备");
  534 + }
  535 + String[] deviceArr = deviceIds.split(",");
  536 + List<String> idLists= new ArrayList<>(Arrays.asList(deviceArr));
  537 + for(StudentBean studentBean : list){
  538 + for(String sno : idLists){
  539 + List<SendRecordBean> bean = sendRecordDao.getRecordIsExit(sno,studentBean.getStudent_num(),studentBean.getUser_id());
  540 + if(bean.size()>0){
  541 + continue;
  542 + }
  543 + try{
  544 + String userName= studentBean.getName();
  545 + String photo = studentBean.getPhoto();
  546 + String cardNum =studentBean.getStudent_num();
  547 + String typeName="Student";
  548 + if (StringUtils.isBlank(photo) || StringUtils.isBlank(cardNum)){
  549 + continue;
  550 + }
  551 + String path = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName;
  552 + String filePath="";
  553 + if(photo.indexOf("f0i5l7e5")!=-1){
  554 + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\");
  555 + filePath="E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\" + afterStr;
  556 + } else{
  557 + //以学籍号为名的文件名
  558 + String fileName = photo.split(typeName +"/")[1];
  559 + //100服务器上人脸照绝对路径
  560 + filePath = path+ "\\" + fileName;
  561 + }
  562 + log.info("卡号:{},人脸路径:{}, ",cardNum,filePath);
  563 + File file = new File(filePath);//图片
  564 + if(file.exists()){
  565 + String targetPath = FileUtils.picPathComp + file.getName();
  566 + try {
  567 + CompressPic.CompressPic(file.getAbsolutePath(), targetPath);
  568 + } catch (Exception e) {
  569 + log.error("压缩图片失败");
  570 + e.printStackTrace();
  571 + continue;
  572 + }
  573 + String startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
  574 + Calendar calendar = Calendar.getInstance();
  575 + calendar.add(Calendar.YEAR, 10);
  576 + String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
  577 + if(!cmsServer.getIsDeviceOnline(sno)){
  578 + if(!StringUtils.isBlank(cardNum)){
  579 + //下发253服务器
  580 + sendUserAsync.uploadImgs(targetPath, cardNum, userName, sno, startTime, endTime, 1, "2");
  581 + }
  582 + }
  583 + }
  584 + }catch (Exception e){
  585 + log.error("人脸下发失败");
  586 + e.printStackTrace();
  587 + continue;
  588 + }
  589 + }
  590 + }
  591 + return ResultGenerator.genSuccessResult();
  592 + }
  593 +}
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/AlarmUtils.java
... ... @@ -52,7 +52,6 @@ public class AlarmUtils {
52 52 public void deleAlarm(String strXML) {
53 53 //人脸抓拍机器
54 54 if (strXML.contains("FACESNAPREPORT")) {
55   -// System.out.println("人脸抓拍机:" + strXML);
56 55 BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder();
57 56 baiduFaceRecorder.setUploadImgUrl(strXML);
58 57 baiduFaceRecorder.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
... ... @@ -61,8 +60,6 @@ public class AlarmUtils {
61 60 deviceId = deviceId.replace("DeviceID>","");
62 61 deviceId = deviceId.replace("</","");
63 62 userDao.insertBaiduFaceRecorder(baiduFaceRecorder);
64   -// if (null != alarmCallBack)
65   -// alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId, currTemperature);
66 63 } else {//人脸识别
67 64 //主类型
68 65 String majirType = strXML.substring(strXML.indexOf("MajorType"), strXML.lastIndexOf("MajorType")).trim();
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java
... ... @@ -22,10 +22,7 @@ public class CompressPic {
22 22 int width = bufferedImage.getWidth(null);
23 23 int height = bufferedImage.getHeight(null);
24 24 long fileLength = file.length();
25   -// System.out.println("fileLength:" + fileLength);
26   -// System.out.println("原始宽高:" + "width:" + width + "--height:" + height);
27 25 if ((fileLength / 1024) < 200) {
28   -// System.out.println("小于200k压缩:" + "width:" + width + "--height:" + height);
29 26 writeImgToFile(bufferedImage, width, height, targetPath);
30 27 } else {
31 28 while ((fileLength / 1024) >= 200) {
... ... @@ -40,12 +37,9 @@ public class CompressPic {
40 37 width = bufferedImage1.getWidth(null);
41 38 height = bufferedImage1.getHeight(null);
42 39 fileLength = file1.length();
43   -// System.out.println("最终宽高:" + "width:" + width + "--height:" + height);
44   -// System.out.println("fileLength1:" + fileLength);
45 40 fileInputStream.close();
46 41 }
47 42 }
48   -// System.out.printf("图片大小:"+fileLength/1024);
49 43 fileInputStreamSrc.close();
50 44 return targetPath;
51 45 }
... ... @@ -54,31 +48,18 @@ public class CompressPic {
54 48 try {
55 49 File targetFile = new File(targetPath);
56 50 if (!targetFile.exists()) targetFile.createNewFile();
57   -
58 51 if (width > height) {
59 52 int width1 = width;
60 53 width = height;
61 54 height = width1;
62 55 }
63   -
64 56 BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
65 57 tag.getGraphics().drawImage(bufferedImage, 0, 0, width, height, null); // 绘制缩小后的图
66 58 FileOutputStream deskImage = new FileOutputStream(targetPath); // 输出到文件流
67 59 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(deskImage);
68 60 encoder.encode(tag); // 近JPEG编码
69   -// boolean write = ImageIO.write(tag, "jpg", deskImage);
70   - /*if (write) {
71   - int angle = ImageUtils.getImgRotateAngle(targetPath);
72   - System.out.println("angle:" + angle);
73   - if (angle == 0) {
74   -// ImageUtils.rotatePhonePhoto(targetPath, 90);
75   - }
76   -
77   - }*/
78   -// System.out.println("读写图片:" + write);
79 61 deskImage.close();
80 62 } catch (Exception e) {
81   -// System.out.println("读写图片:" + e.toString());
82 63 e.printStackTrace();
83 64 }
84 65 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java
... ... @@ -3,12 +3,14 @@ package com.sincere.haikangface.utils;
3 3 import com.alibaba.fastjson.JSON;
4 4 import com.alibaba.fastjson.JSONObject;
5 5 import com.sincere.haikangface.bean.face.PermissionBean;
  6 +import com.sincere.haikangface.bean.face.PermissionDHBean;
6 7 import lombok.extern.slf4j.Slf4j;
7 8 import org.springframework.core.io.FileSystemResource;
8 9 import org.springframework.http.HttpEntity;
9 10 import org.springframework.http.HttpHeaders;
10 11 import org.springframework.http.MediaType;
11 12 import org.springframework.http.ResponseEntity;
  13 +import org.springframework.scheduling.annotation.Async;
12 14 import org.springframework.util.LinkedMultiValueMap;
13 15 import org.springframework.util.MultiValueMap;
14 16 import org.springframework.util.StringUtils;
... ... @@ -93,136 +95,111 @@ public class HttpUtil {
93 95 return result;
94 96 }
95 97  
96   - public static boolean uploadImgs(String filePath, String card, String name, String deviceId, String startTime,
  98 + /**
  99 + * 下发人脸值253服务设备
  100 + * @param filePath
  101 + * @param card
  102 + * @param name
  103 + * @param deviceId
  104 + * @param startTime
  105 + * @param endTime
  106 + * @param validTimeEnabled
  107 + * @param userType
  108 + */
  109 + public static void uploadImgs(String filePath, String card, String name, String deviceId, String startTime,
97 110 String endTime, int validTimeEnabled, String userType) {
98   -
99 111 if (!new File(filePath).exists()) {
100   - System.out.println("图片不存在");
101   - return false;
  112 + log.error("图片不存在,图片路径:{}",filePath);
  113 + return;
  114 + }
  115 + try{
  116 + String url = "http://120.26.116.253:8089/file/uploadImg";
  117 + RestTemplate restTemplate = new RestTemplate();
  118 + HttpHeaders headers = new HttpHeaders();
  119 + MediaType mediaType = MediaType.parseMediaType(MediaType.MULTIPART_FORM_DATA_VALUE);
  120 + headers.setContentType(mediaType);
  121 + MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>();
  122 + FileSystemResource fileSystemResource = new FileSystemResource(filePath);
  123 + multivaluedMap.add("file", fileSystemResource);
  124 + multivaluedMap.add("deviceId", deviceId);
  125 + multivaluedMap.add("card", card);
  126 + multivaluedMap.add("name", name);
  127 + multivaluedMap.add("startTime", startTime);
  128 + multivaluedMap.add("endTime", endTime);
  129 + multivaluedMap.add("validTimeEnabled", validTimeEnabled);
  130 + multivaluedMap.add("userType", userType);
  131 + HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(multivaluedMap, headers);
  132 + ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
  133 + log.info("发送请求,下发人脸至253服务器海康设备,请求地址:{} ,下发用户名:{},返回信息:{}",url,name,responseEntity.getBody());
  134 + }catch (Exception e){
  135 + log.error("发送请求,下发人脸至253服务器海康设备,发生异常: {}",e);
102 136 }
103   -
104   - String url = "http://120.26.116.253:8089/file/uploadImg";
105   -
106   - RestTemplate restTemplate = new RestTemplate();
107   -
108   - HttpHeaders headers = new HttpHeaders();
109   -
110   - MediaType mediaType = MediaType.parseMediaType(MediaType.MULTIPART_FORM_DATA_VALUE);
111   -
112   - headers.setContentType(mediaType);
113   -
114   - MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>();
115   -
116   - FileSystemResource fileSystemResource = new FileSystemResource(filePath);
117   -
118   - multivaluedMap.add("file", fileSystemResource);
119   - multivaluedMap.add("deviceId", deviceId);
120   - multivaluedMap.add("card", card);
121   - multivaluedMap.add("name", name);
122   - multivaluedMap.add("startTime", startTime);
123   - multivaluedMap.add("endTime", endTime);
124   - multivaluedMap.add("validTimeEnabled", validTimeEnabled);
125   - multivaluedMap.add("userType", userType);
126   -
127   - HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(multivaluedMap, headers);
128   -
129   - ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
130   -
131   - System.out.println("responseEntity:" + responseEntity.getBody()+name);
132   - return responseEntity.getBody().equals("1");
133 137 }
134 138  
135 139  
136 140 public static boolean IsDeviceOnline(String deviceId) {
137 141  
138 142 String url = "http://120.26.116.253:8089/file/IsDeviceOnline?deviceId=" + deviceId;
139   -
140 143 RestTemplate restTemplate = new RestTemplate();
141   -
142   -// Map<String,Object> map = new HashMap<>();
143   -
144   -// map.put("deviceId",deviceId);
145   -
146 144 String res = restTemplate.getForObject(url, String.class);
147 145 return res.equals("1");
148 146 }
149 147  
  148 + /**
  149 + * 删除海康设备卡信息
  150 + * @param deviceId
  151 + * @param card
  152 + * @return
  153 + */
150 154 public static boolean deleteCard(String deviceId, String card) {
151   -
152 155 String url = "http://120.26.116.253:8089/file/DeleteCard?deviceId=" + deviceId + "&card=" + card;
153   -
154 156 RestTemplate restTemplate = new RestTemplate();
155   -
156 157 String res = restTemplate.getForObject(url, String.class);
157   -
158 158 return res.equals("1");
159 159 }
160 160  
  161 + /**
  162 + * 获取海康设备卡信息
  163 + * @param deviceId
  164 + * @param card
  165 + * @return
  166 + */
161 167 public static boolean getCard(String deviceId, String card) {
162   -
163 168 String url = "http://120.26.116.253:8089/file/getCard?deviceId=" + deviceId + "&card=" + card;
164   -
165 169 RestTemplate restTemplate = new RestTemplate();
166   -
167   -// String res = restTemplate.getForObject(url,String.class,map);
168   - return restTemplate.getForObject(url, String.class).equals("1");
  170 + String res = restTemplate.getForObject(url,String.class);
  171 + return res.equals("1");
169 172 }
170 173  
171   -
  174 + /**
  175 + * 下发权限至海康设备
  176 + * @param permissionBean
  177 + */
172 178 public static void sendPermission2HK(PermissionBean permissionBean) {
173 179 try {
174   -
175 180 String url = "http://120.26.116.253:8089/file/sendPermiss";
176   -
177 181 if (null != permissionBean) {
178   -
179 182 RestTemplate restTemplate = new RestTemplate();
180   -
181 183 HttpHeaders headers = new HttpHeaders();
182   -
183 184 MediaType mediaType = MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE);
184   -
185 185 headers.setContentType(mediaType);
186   -
187 186 HttpEntity<PermissionBean> httpEntity = new HttpEntity<>(permissionBean, headers);
188   -
189   - System.out.println("PermissionBean:" + JSON.toJSONString(permissionBean));
190   -
191 187 ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
192   -
193   - System.out.println("responseEntity:" + responseEntity.getBody());
194   -
  188 + String reqJson= JSON.toJSONString(permissionBean);
  189 + log.info("发送请求,下发权限至海康设备,请求地址:{},请求参数:{},返回信息:{}",url,reqJson,responseEntity.getBody());
195 190 }
196 191 } catch (Exception e) {
197   - e.printStackTrace();
198   - }
199   - }
200   -
201   - public static void uploadDHImgForOne(String filePath,Integer schoolId,String studentCode,int clintType,String deviceId) {
202   - String url = "http://114.55.30.100:8089/user/uploadImgAndUserInfo";
203   - MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>();
204   - HttpHeaders headers = new HttpHeaders();
205   - RestTemplate restTemplate = new RestTemplate();
206   - HttpEntity<MultiValueMap<String, Object>> httpEntity = null;
207   - ResponseEntity<String> responseEntity = null;
208   - try {
209   - MediaType mediaType = MediaType.parseMediaType(MediaType.APPLICATION_JSON_VALUE);
210   - headers.setContentType(mediaType);
211   - multivaluedMap.add("file", filePath);
212   - multivaluedMap.add("schoolId", schoolId);
213   - multivaluedMap.add("studentCode", studentCode);
214   - multivaluedMap.add("clint_type", clintType);
215   - multivaluedMap.add("deviceId", deviceId);
216   - httpEntity = new HttpEntity<>(multivaluedMap, headers);
217   - responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
218   - log.info("responseEntity:" + responseEntity.getBody());
219   - } catch (Exception e) {
220   - e.printStackTrace();
  192 + log.error("发送请求,下发权限至海康设备,发生异常: {}",e);
221 193 }
222 194 }
223 195  
  196 + /**
  197 + * 百度人脸识别查询
  198 + * @param file
  199 + * @param schoolId
  200 + * @return
  201 + */
224 202 public static JSONObject sendToKB(File file,String schoolId) {
225   - log.info("开始请求人脸识别查询.....");
226 203 String url = "http://120.26.116.253:9214/baiduapi/search/" + schoolId;
227 204 MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>();
228 205 HttpHeaders headers = new HttpHeaders();
... ... @@ -235,11 +212,108 @@ public class HttpUtil {
235 212 HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(multivaluedMap, headers);
236 213 ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
237 214 JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
238   - log.info("responseEntity:" + jsonObject.toJSONString());
  215 + log.info("发送请求,人脸识别查询,请求地址:{},返回信息:{}",url,jsonObject.toJSONString());
239 216 return jsonObject;
240 217 } catch (Exception e) {
241   - log.info("人脸识别异常,异常信息:{}",e);
242   - return null;
  218 + log.info("发送请求,百度人脸识别失败,异常信息:{}",e);
  219 + }
  220 + return null;
  221 + }
  222 +
  223 + /**
  224 + * 下发单个人脸至大华设备
  225 + * @param filePath
  226 + * @param schoolId
  227 + * @param studentCode
  228 + * @param clintType
  229 + * @param deviceId
  230 + * @return
  231 + */
  232 + public static void uploadDHImgForOne(String filePath,Integer schoolId,String studentCode,int clintType,String deviceId) {
  233 + String api = "http://114.55.30.100:8991/user/uploadImgAndUserInfo";
  234 + try {
  235 + String url = String.format(api +"?schoolId=%s&studentCode=%s&deviceId=%s&clint_type=%s&file=%s",schoolId,studentCode,deviceId,clintType,filePath);
  236 + RestTemplate restTemplate = new RestTemplate();
  237 + ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
  238 + log.info("发送请求,下发单个人脸至大华设备,请求地址:{} ,返回信息:{}",url, responseEntity.getBody());
  239 + } catch (Exception e) {
  240 + log.error("发送请求,下发单个人脸至大华,异常信息: {}",e);
  241 + }
  242 + }
  243 +
  244 + /**
  245 + * 下发权限至大华设备
  246 + * @param permissionBean
  247 + * @return
  248 + */
  249 + public static void sendDHPermission(PermissionDHBean permissionBean) {
  250 + try{
  251 +// String url = "http://121.40.109.21:8991/file/sendPermission";
  252 + String url = "http://localhost:8991/file/sendPermission";
  253 + RestTemplate restTemplate = new RestTemplate();
  254 + HttpHeaders headers = new HttpHeaders();
  255 + MediaType mediaType = MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE);
  256 + headers.setContentType(mediaType);
  257 + HttpEntity<PermissionDHBean> httpEntity = new HttpEntity<>(permissionBean, headers);
  258 + ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
  259 + log.info("发送请求,下发权限至大华设备,请求地址:{} ,返回信息:{}",url, responseEntity.getBody());
  260 + }catch (Exception e){
  261 + log.error("发送请求,下发权限至大华设备,异常信息,{}",e);
  262 + }
  263 + }
  264 +
  265 + /**
  266 + * 照片下发,发送海康设备
  267 + * @param schoolId
  268 + * @param userType
  269 + * @param deviceIds
  270 + */
  271 + public static void uploadHkImg( String schoolId,int userType,String deviceIds) {
  272 + String api = "http://114.55.30.100:8089/facereco/sendFaces";
  273 + try {
  274 + String url = String.format(api +"?schoolId=%s&userType=%s&deviceIds=%s",schoolId,userType,deviceIds);
  275 + RestTemplate restTemplate = new RestTemplate();
  276 + ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
  277 + log.info("发送请求,照片下发至海康设备,请求地址:{},返回信息: {}",url,responseEntity.getBody());
  278 + } catch (Exception e) {
  279 + log.error("发送请求,照片下发至海康设备,异常信息:{}",e);
  280 + }
  281 + }
  282 +
  283 + /**
  284 + * 照片下发,发送大华设备
  285 + * @param schoolId
  286 + * @param userType
  287 + * @param deviceIds
  288 + */
  289 + public static void uploadDHImg( String schoolId,int userType,String deviceIds) {
  290 + String api = "http://114.55.30.100:8991/user/sendFaces";
  291 +// String api = "http://127.0.0.1:8991/user/sendFaces";
  292 + try {
  293 + String url = String.format(api +"?schoolId=%s&userType=%s&deviceIds=%s",schoolId,userType,deviceIds);
  294 + RestTemplate restTemplate = new RestTemplate();
  295 + ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
  296 + log.info("发送请求,照片下发至大华设备,请求地址:{},返回信息: {}",url,responseEntity.getBody());
  297 + } catch (Exception e) {
  298 + log.error("发送请求,照片下发至大华设备,异常信息:{}",e);
  299 + }
  300 + }
  301 +
  302 + /**
  303 + * 删除大华设备人脸
  304 + * @param schoolId
  305 + * @param cardNum
  306 + * @param deviceId
  307 + */
  308 + public static void deleteDHFace(Integer schoolId,String cardNum,String deviceId) {
  309 + String api = "http://121.40.109.21:8991/operate/deleteFaceByCard";
  310 + try {
  311 + String url = String.format(api +"?schoolId=%s&cardNum=%s&deviceId=%s",schoolId,cardNum,deviceId);
  312 + RestTemplate restTemplate = new RestTemplate();
  313 + ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
  314 + log.info("发送请求,删除大华设备人脸,请求地址:{},返回信息: {}",url,responseEntity.getBody());
  315 + } catch (Exception e) {
  316 + log.error("发送请求,删除大华设备人脸,异常信息:{}",e);
243 317 }
244 318 }
245 319 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/xiananDao/SendRecordDao.java
... ... @@ -134,9 +134,12 @@ public interface SendRecordDao {
134 134 @Param("time") String time, @Param("schoolName") String schoolName, @Param("imgPath") String imgPath, @Param("schoolId") Integer schoolId, @Param("failContent") String failContent,
135 135 @Param("failType") Integer failType, @Param("userType") Integer userType, @Param("deviceType") Integer deviceType,Integer status);
136 136  
137   - @Update("update Face_SendRecord set time = #{time},failContent = #{content},imgPath= #{faceUrl},status = 2, where deviceID = #{deviceID} and Num =#{Num} and userId = #{userId}")
  137 + @Update("update Face_SendRecord set time = #{time},failContent = #{content},imgPath= #{faceUrl},status = 2 where deviceID = #{deviceID} and Num =#{Num} and userId = #{userId}")
138 138 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);
139 139  
140 140 @Update("update Face_SendRecord set time = #{time},imgPath= #{faceUrl},Name = #{Name},status = 1, failType=null, failContent = null where deviceID = #{deviceID} and Num = #{Num}")
141 141 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);
  142 +
  143 + @Select("select * from Face_SendRecord where schoolId = #{schoolId} and status =2")
  144 + List<SendRecordBean> getFailRecord(@Param("schoolId") Integer schoolId);
142 145 }
... ...
cloud/haikangface/src/main/resources/application.yaml
... ... @@ -2,6 +2,8 @@ server:
2 2 port: 8089
3 3  
4 4 spring:
  5 + profiles:
  6 + active: dev
5 7 application:
6 8 name: haikangserver
7 9 datasource:
... ...
cloud/haikangface/src/main/resources/logback-spring.xml 0 → 100644
... ... @@ -0,0 +1,54 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<configuration>
  3 + <!--
  4 + SpringBoot下,默认会加载logback-spring.xml,其他项目建议文件名改为logback.xml
  5 + 目录 org/springframework/boot/logging/logback/*.xml下有一些log的基础配置
  6 + 不是所有的项目都是Springboot,这里为了做成通用的logback.xml文件,对这里进行修改
  7 + -->
  8 + <!--<include resource="org/springframework/boot/logging/logback/defaults.xml" />-->
  9 +
  10 + <!--日志文件存储的基础路径: ${user.home} 为当前服务器用户主目录-->
  11 + <property name="LOG_PATH" value="D:/haikang-logs"/>
  12 +
  13 + <!--日志文件基础名称-->
  14 + <property name="BASE_FILE_NAME" value="haikang"/>
  15 + <property name="LOG_FILE_MAX_SIZE" value="10MB"/>
  16 + <property name="LOG_FILE_MAX_HISTORY" value="3"/>
  17 +
  18 + <!--控制台的输出-->
  19 + <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  20 + <!-- 设置输出格式-->
  21 + <encoder>
  22 + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} \(L%line\) - %msg%n</pattern>
  23 + </encoder>
  24 + </appender>
  25 +
  26 + <!--文件输出-->
  27 + <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
  28 + <!--输出文件名-->
  29 + <file>${LOG_PATH}/${BASE_FILE_NAME}.log</file>
  30 + <!--日志文件格式-->
  31 + <encoder>
  32 + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} \(L%line\) - %msg%n</pattern>
  33 + </encoder>
  34 +
  35 + <!-- 日志文件滚动策略-->
  36 + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  37 + <!--历史文件存放格式和路径:-->
  38 + <fileNamePattern>${LOG_PATH}/history/${BASE_FILE_NAME}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
  39 + <!-- 文件最大的大小-->
  40 + <maxFileSize>${LOG_FILE_MAX_SIZE}</maxFileSize>
  41 + <!-- 日志文件保留天数 -->
  42 + <maxHistory>${LOG_FILE_MAX_HISTORY}</maxHistory>
  43 + </rollingPolicy>
  44 + </appender>
  45 +
  46 + <!--测试环境和开发环境打印控制台输出-->
  47 + <springProfile name="test,dev">
  48 + <root level="INFO">
  49 + <appender-ref ref="console" />
  50 + <appender-ref ref="file" />
  51 + </root>
  52 + </springProfile>
  53 +
  54 +</configuration>
0 55 \ No newline at end of file
... ...
cloud/haikangface/src/main/resources/mapper/usermapper.xml
... ... @@ -47,6 +47,14 @@
47 47 select * from AC_DeviceAuthRecord where id = #{id}
48 48 </select>
49 49  
  50 + <select id="getAuthRecordBySchoolId" resultType="java.lang.Integer">
  51 + select top 1 ShiDuan from AC_DeviceAuthRecord where SchoolId = #{schoolId} and StudentType = #{studentType}
  52 + <if test="status != null">
  53 + and State= #{status}
  54 + </if>
  55 + order by ShiDuan desc
  56 + </select>
  57 +
50 58 <update id="deleteAuthRecord">
51 59 update AC_DeviceAuthRecord set State = 0 where id = #{id}
52 60 </update>
... ... @@ -62,4 +70,33 @@
62 70 <select id="getTeacherByUserId" resultType="com.sincere.haikangface.bean.StudentBean" parameterType="java.lang.String">
63 71 select Top(1) * from SZ_V_School_Teacher where user_id = #{userId}
64 72 </select>
  73 +
  74 + <select id="getStudentList" resultType="com.sincere.haikangface.bean.StudentBean">
  75 + select * from SZ_V_School_Student where school_id = #{schoolId}
  76 + <if test="studentType != null">
  77 + and student_type = #{studentType}
  78 + </if>
  79 + <if test="sex != null and sex.size() >0">
  80 + and sex in
  81 + <foreach item="item" collection="sex" separator="," open="(" close=")" index="">
  82 + #{item}
  83 + </foreach>
  84 + </if>
  85 + and (student_num is not null or student_num != '') and (photo is not null or photo !='')
  86 + </select>
  87 +
  88 + <select id="getTeacherList" resultType="com.sincere.haikangface.bean.StudentBean">
  89 + select * from SZ_V_School_Teacher where school_id = #{schoolId}
  90 + and (teacher_num is not null or teacher_num !='')
  91 + and (face is not null or face !='')
  92 + </select>
  93 +
  94 + <select id="getDeviceIds" resultType="java.lang.String">
  95 + select clint_id from SZ_Attendance where clint_type in(22,18,28,29) and school_id = #{schoolId}
  96 + <if test="deviceId != null and deviceId.trim() != ''">
  97 + and clint_id = #{deviceId}
  98 + </if>
  99 + </select>
  100 +
  101 +
65 102 </mapper>
... ...