Commit 2cbbb1644bd6bb3b5c9aec6b383c37a08e80924c
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
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
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
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
... | ... | @@ -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> | ... | ... |