Commit 2cbbb1644bd6bb3b5c9aec6b383c37a08e80924c

Authored by 徐泉
1 parent 1232df0d
Exists in master

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

Showing 48 changed files with 2404 additions and 1411 deletions   Show diff stats
cloud/dahua/src/main/java/com/example/dahua/MyTask.java
@@ -72,6 +72,8 @@ public class MyTask implements ApplicationRunner { @@ -72,6 +72,8 @@ public class MyTask implements ApplicationRunner {
72 //设备断线 72 //设备断线
73 public static boolean isFirstAutoRegister = false; 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 @Override 77 @Override
76 public void run(ApplicationArguments args) throws Exception { 78 public void run(ApplicationArguments args) throws Exception {
77 79
@@ -141,7 +143,7 @@ public class MyTask implements ApplicationRunner { @@ -141,7 +143,7 @@ public class MyTask implements ApplicationRunner {
141 String deviceId = getDeviceId(pchDVRIP, nDVRPort); 143 String deviceId = getDeviceId(pchDVRIP, nDVRPort);
142 log.info("DisConnect Device: {}, IP: {}, Port: {}",deviceId,pchDVRIP,nDVRPort); 144 log.info("DisConnect Device: {}, IP: {}, Port: {}",deviceId,pchDVRIP,nDVRPort);
143 if (!StringUtils.isEmpty(deviceId)) { 145 if (!StringUtils.isEmpty(deviceId)) {
144 - myTaskUtil.attendanceService.updateConnectStateWithDevid(0, deviceId); 146 + myTaskUtil.attendanceService.updateConnectStateWithDevid(0,inTime,deviceId);
145 GateModule.stopRealLoadPic(attachLongMap.get(deviceId)); 147 GateModule.stopRealLoadPic(attachLongMap.get(deviceId));
146 //移除在线 148 //移除在线
147 removeDevice(deviceId); 149 removeDevice(deviceId);
@@ -167,7 +169,7 @@ public class MyTask implements ApplicationRunner { @@ -167,7 +169,7 @@ public class MyTask implements ApplicationRunner {
167 String deviceId = getDeviceId(pchDVRIP, nDVRPort); 169 String deviceId = getDeviceId(pchDVRIP, nDVRPort);
168 log.info("ReConnect Device: {},IP: {},Port: {}", deviceId,pchDVRIP, nDVRPort); 170 log.info("ReConnect Device: {},IP: {},Port: {}", deviceId,pchDVRIP, nDVRPort);
169 if (!StringUtils.isEmpty(deviceId)) { 171 if (!StringUtils.isEmpty(deviceId)) {
170 - myTaskUtil.attendanceService.updateConnectStateWithDevid(1, deviceId); 172 + myTaskUtil.attendanceService.updateConnectStateWithDevid(1,inTime,deviceId);
171 DeviceInfoBean deviceInfoBean = new DeviceInfoBean(); 173 DeviceInfoBean deviceInfoBean = new DeviceInfoBean();
172 deviceInfoBean.setDevcieId(deviceId); 174 deviceInfoBean.setDevcieId(deviceId);
173 deviceInfoBean.setDeviceIp(pchDVRIP); 175 deviceInfoBean.setDeviceIp(pchDVRIP);
@@ -223,6 +225,8 @@ public class MyTask implements ApplicationRunner { @@ -223,6 +225,8 @@ public class MyTask implements ApplicationRunner {
223 case NetSDKLib.EM_LISTEN_TYPE.NET_DVR_SERIAL_RETURN: { // 设备注册携带序列号 225 case NetSDKLib.EM_LISTEN_TYPE.NET_DVR_SERIAL_RETURN: { // 设备注册携带序列号
224 log.info("Register Device Info Device address: {},port: {},DeviceID: {}", pIp, wPort, deviceId); 226 log.info("Register Device Info Device address: {},port: {},DeviceID: {}", pIp, wPort, deviceId);
225 log.info("EM_LISTEN_TYPE:设备注册携带序列号"); 227 log.info("EM_LISTEN_TYPE:设备注册携带序列号");
  228 + //保存设备
  229 + saveAttendanceService(deviceId,pIp,wPort);
226 CDevInfo dev = new CDevInfo(); 230 CDevInfo dev = new CDevInfo();
227 System.arraycopy(pIp.getBytes(),0,dev.address,0,pIp.getBytes().length); 231 System.arraycopy(pIp.getBytes(),0,dev.address,0,pIp.getBytes().length);
228 dev.port=wPort; 232 dev.port=wPort;
@@ -352,8 +356,6 @@ public class MyTask implements ApplicationRunner { @@ -352,8 +356,6 @@ public class MyTask implements ApplicationRunner {
352 //下发句柄 356 //下发句柄
353 lLongSendMap.put(deviceId, m_hLoginHandle); 357 lLongSendMap.put(deviceId, m_hLoginHandle);
354 addDeviceInfo(deviceId,address,port,m_hLoginHandle); 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,7 +570,6 @@ public class MyTask implements ApplicationRunner {
568 * @param port 570 * @param port
569 */ 571 */
570 private static void saveAttendanceService(String deviceId, String ip, int port){ 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 String clintType = String.valueOf(EnumDeviceType.DH_FACE.deviceType); 573 String clintType = String.valueOf(EnumDeviceType.DH_FACE.deviceType);
573 if(deviceId.startsWith("ytj")){ 574 if(deviceId.startsWith("ytj")){
574 clintType = String.valueOf(EnumDeviceType.DH_FACE_YTJ.deviceType); 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,32 +3,31 @@ package com.example.dahua.async;
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.example.dahua.MyTask; 4 import com.example.dahua.MyTask;
5 import com.example.dahua.bean.*; 5 import com.example.dahua.bean.*;
6 -import com.example.dahua.common.Res; 6 +import com.example.dahua.control.FileControl;
7 import com.example.dahua.dao.UserDao; 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 import com.example.dahua.lib.CompressPic; 11 import com.example.dahua.lib.CompressPic;
10 import com.example.dahua.lib.FilePath; 12 import com.example.dahua.lib.FilePath;
11 import com.example.dahua.lib.NetSDKLib; 13 import com.example.dahua.lib.NetSDKLib;
12 -import com.example.dahua.lib.ToolKits;  
13 -import com.example.dahua.module.GateModule;  
14 import com.example.dahua.module.GateModule2; 14 import com.example.dahua.module.GateModule2;
15 import com.example.dahua.service.PermissFaceService; 15 import com.example.dahua.service.PermissFaceService;
  16 +import com.example.dahua.service.imp.BaseService;
16 import com.example.dahua.utils.FileUtils; 17 import com.example.dahua.utils.FileUtils;
17 import com.example.dahua.utils.HttpUtils; 18 import com.example.dahua.utils.HttpUtils;
18 import com.example.dahua.utils.JsonUtils; 19 import com.example.dahua.utils.JsonUtils;
19 import com.example.dahua.xiananDao.SendRecordDao; 20 import com.example.dahua.xiananDao.SendRecordDao;
20 -import com.sun.jna.Memory;  
21 import lombok.extern.slf4j.Slf4j; 21 import lombok.extern.slf4j.Slf4j;
22 import org.springframework.beans.factory.annotation.Autowired; 22 import org.springframework.beans.factory.annotation.Autowired;
23 -import org.springframework.http.ResponseEntity;  
24 -import org.springframework.scheduling.annotation.Async;  
25 import org.springframework.stereotype.Component; 23 import org.springframework.stereotype.Component;
26 import org.springframework.util.StringUtils; 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 import java.text.SimpleDateFormat; 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,6 +45,8 @@ public class SendUserInfoTask2 {
46 SendRecordDao sendRecordDao; 45 SendRecordDao sendRecordDao;
47 @Autowired 46 @Autowired
48 PermissFaceService permissFaceService; 47 PermissFaceService permissFaceService;
  48 + @Autowired
  49 + BaseService baseService;
49 50
50 /** 51 /**
51 * 下发单个用户人脸任务 52 * 下发单个用户人脸任务
@@ -129,7 +130,7 @@ public class SendUserInfoTask2 { @@ -129,7 +130,7 @@ public class SendUserInfoTask2 {
129 */ 130 */
130 pushCardAndFace(file, userInfoBean, attendanceBeans, sendRecordBean.getUserType()+"",sendRecordBean.getFailType()); 131 pushCardAndFace(file, userInfoBean, attendanceBeans, sendRecordBean.getUserType()+"",sendRecordBean.getFailType());
131 } catch (Exception e) { 132 } catch (Exception e) {
132 - e.printStackTrace(); 133 + log.error("下发失败");
133 return false; 134 return false;
134 } 135 }
135 return false; 136 return false;
@@ -192,6 +193,7 @@ public class SendUserInfoTask2 { @@ -192,6 +193,7 @@ public class SendUserInfoTask2 {
192 SendRecordBean sendRecordBean = new SendRecordBean(); 193 SendRecordBean sendRecordBean = new SendRecordBean();
193 sendRecordBean.setImgPath(picSrc); 194 sendRecordBean.setImgPath(picSrc);
194 sendRecordBean.setCustomerid(studentId); 195 sendRecordBean.setCustomerid(studentId);
  196 + sendRecordBean.setUserId(userId);
195 sendRecordBean.setName(userName); 197 sendRecordBean.setName(userName);
196 sendRecordBean.setUserType(Integer.parseInt(userType)); 198 sendRecordBean.setUserType(Integer.parseInt(userType));
197 sendRecordBean.setNum(studentNum); 199 sendRecordBean.setNum(studentNum);
@@ -205,12 +207,14 @@ public class SendUserInfoTask2 { @@ -205,12 +207,14 @@ public class SendUserInfoTask2 {
205 Calendar calendar = Calendar.getInstance(); 207 Calendar calendar = Calendar.getInstance();
206 calendar.add(Calendar.YEAR, 4); 208 calendar.add(Calendar.YEAR, 4);
207 String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); 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 * 下发升级二代接口,动态库libs下win64,更新为官方最新版sdk add by xuquan 2020-11-23 219 * 下发升级二代接口,动态库libs下win64,更新为官方最新版sdk add by xuquan 2020-11-23
216 * 注:用户下发逻辑: 220 * 注:用户下发逻辑:
@@ -241,10 +245,9 @@ public class SendUserInfoTask2 { @@ -241,10 +245,9 @@ public class SendUserInfoTask2 {
241 //判断该学校设备ID对应失败记录是否存在:Face_SendFail 245 //判断该学校设备ID对应失败记录是否存在:Face_SendFail
242 deviceId = sendRecordDao.getFailIsExit(deviceId, attendanceBean.getSchool_id()); 246 deviceId = sendRecordDao.getFailIsExit(deviceId, attendanceBean.getSchool_id());
243 if (!StringUtils.isEmpty(deviceId)) { 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 } else { 252 } else {
250 log.info("=================开始执行下发人脸及卡号任务================="); 253 log.info("=================开始执行下发人脸及卡号任务=================");
@@ -253,10 +256,13 @@ public class SendUserInfoTask2 { @@ -253,10 +256,13 @@ public class SendUserInfoTask2 {
253 if(attendanceBean.getClint_id().startsWith("ytj")&&Integer.parseInt(attendanceBean.getSchool_id())!=126 256 if(attendanceBean.getClint_id().startsWith("ytj")&&Integer.parseInt(attendanceBean.getSchool_id())!=126
254 &&Integer.parseInt(attendanceBean.getSchool_id())!=393) { 257 &&Integer.parseInt(attendanceBean.getSchool_id())!=393) {
255 cardNum = studentNum; 258 cardNum = studentNum;
256 - deviceType= EnumDeviceType.DH_FACE_YTJ.deviceType;  
257 } else { 259 } else {
258 cardNum = cardNo(studentNum); 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 try{ 266 try{
261 /** 267 /**
262 * recordNo 不为空存在下发记录集编号,直接修改执行人脸信息(二代升级接口,此处不需要修改用户信息) 268 * recordNo 不为空存在下发记录集编号,直接修改执行人脸信息(二代升级接口,此处不需要修改用户信息)
@@ -294,9 +300,9 @@ public class SendUserInfoTask2 { @@ -294,9 +300,9 @@ public class SendUserInfoTask2 {
294 userDao.saveRecordNo(userId,1, userName, attendanceBean.getClint_id()); 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,21 +310,8 @@ public class SendUserInfoTask2 {
304 if (bUserFlags ==0 && bCardFlags ==0 && bFaceFalgs==0) { 310 if (bUserFlags ==0 && bCardFlags ==0 && bFaceFalgs==0) {
305 FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); 311 FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt);
306 log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean)); 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,8 +323,7 @@ public class SendUserInfoTask2 {
330 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); 323 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
331 sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code); 324 sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code);
332 sendRecordBean.setFailContent(failContent); 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,8 +335,7 @@ public class SendUserInfoTask2 {
343 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); 335 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
344 sendRecordBean.setFailType(EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code); 336 sendRecordBean.setFailType(EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code);
345 sendRecordBean.setFailContent(failContent); 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,8 +346,7 @@ public class SendUserInfoTask2 {
355 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); 346 String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags);
356 sendRecordBean.setFailType(EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code); 347 sendRecordBean.setFailType(EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code);
357 sendRecordBean.setFailContent(failContent); 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,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 * @param userErrNum 426 * @param userErrNum
403 * @param faceErrNum 427 * @param faceErrNum
@@ -479,9 +503,157 @@ public class SendUserInfoTask2 { @@ -479,9 +503,157 @@ public class SendUserInfoTask2 {
479 length -= 2; 503 length -= 2;
480 cardR += cardDex.substring(length, length + 2); 504 cardR += cardDex.substring(length, length + 2);
481 } 505 }
482 -  
483 return cardR; 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 @@ @@ -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 @@ @@ -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,6 +7,7 @@ import java.io.Serializable;
7 */ 7 */
8 public class SendRecordBean implements Serializable { 8 public class SendRecordBean implements Serializable {
9 9
  10 + private Integer id;
10 //用户编号:学生student_id;老师teacher_id 11 //用户编号:学生student_id;老师teacher_id
11 private String customerid; 12 private String customerid;
12 //卡号 13 //卡号
@@ -29,7 +30,26 @@ public class SendRecordBean implements Serializable { @@ -29,7 +30,26 @@ public class SendRecordBean implements Serializable {
29 private String failContent; 30 private String failContent;
30 //下发失败类型:详情见枚举:EnumSendFaceType 31 //下发失败类型:详情见枚举:EnumSendFaceType
31 private int failType; 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 public String getCustomerid() { 54 public String getCustomerid() {
35 return customerid; 55 return customerid;
@@ -119,6 +139,14 @@ public class SendRecordBean implements Serializable { @@ -119,6 +139,14 @@ public class SendRecordBean implements Serializable {
119 this.failType = failType; 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 @Override 150 @Override
123 public String toString() { 151 public String toString() {
124 return "SendRecordBean{" + 152 return "SendRecordBean{" +
cloud/dahua/src/main/java/com/example/dahua/bean/StudentBean.java
@@ -47,6 +47,8 @@ public class StudentBean implements Serializable { @@ -47,6 +47,8 @@ public class StudentBean implements Serializable {
47 47
48 private String Face; 48 private String Face;
49 49
  50 + private String photo;
  51 +
50 // private String StudentCode; 52 // private String StudentCode;
51 53
52 private String student_num; 54 private String student_num;
@@ -227,7 +229,14 @@ public class StudentBean implements Serializable { @@ -227,7 +229,14 @@ public class StudentBean implements Serializable {
227 Face = face; 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 // return StudentCode; 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,6 +5,7 @@ import org.apache.ibatis.annotations.*;
5 import org.springframework.stereotype.Repository; 5 import org.springframework.stereotype.Repository;
6 6
7 import java.util.List; 7 import java.util.List;
  8 +import java.util.Map;
8 9
9 @Repository 10 @Repository
10 @Mapper 11 @Mapper
@@ -240,7 +241,7 @@ public interface UserDao { @@ -240,7 +241,7 @@ public interface UserDao {
240 List<String> getRecordNoTest(@Param("student_name") String name,@Param("user_id") String user_id,@Param("deviceId") String deviceId); 241 List<String> getRecordNoTest(@Param("student_name") String name,@Param("user_id") String user_id,@Param("deviceId") String deviceId);
241 242
242 @Select("select Top(1) user_id from SZ_V_School_Student where student_num = #{student_num} and school_id = #{school_id}") 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 @Select("select * from SZ_V_School_Student where school_id = #{school_id}") 246 @Select("select * from SZ_V_School_Student where school_id = #{school_id}")
246 List<UserInfoBean> getUserIdTest(@Param("school_id") String schoolId); 247 List<UserInfoBean> getUserIdTest(@Param("school_id") String schoolId);
@@ -250,4 +251,19 @@ public interface UserDao { @@ -250,4 +251,19 @@ public interface UserDao {
250 251
251 /*************************************** 仅供测试,下发失败使用接口 end ************************************/ 252 /*************************************** 仅供测试,下发失败使用接口 end ************************************/
252 253
  254 +
  255 + @Select("select Top(1)* from SZ_V_School_Teacher where teacher_num = #{teacher_num}")
  256 + StudentBean getTeacherWithCard(@Param("teacher_num") String teacher_num);
  257 +
  258 + @Select("select Top(1)* from SZ_V_School_Student where student_num = #{card}")
  259 + StudentBean getStudentWithCard(@Param("card") String card);
  260 +
  261 + List<StudentBean> getStudentList(@Param("schoolId") Integer schoolId,@Param("studentType")Integer studentType,@Param("sex") List<Integer> sex);
  262 +
  263 + List<StudentBean> getTeacherList(@Param("schoolId") Integer schoolId);
  264 +
  265 + List<DeviceAuthRecord> getAuthRecord(@Param("schoolId") Integer schoolId,@Param("studentType")Integer studentType);
  266 +
  267 + List<AttendanceBean> queryClintList(@Param("schoolId") Integer schoolId,@Param("deviceId")String deviceId);
  268 +
253 } 269 }
cloud/dahua/src/main/java/com/example/dahua/filter/AllowOriginFilter.java
@@ -9,9 +9,6 @@ import java.io.IOException; @@ -9,9 +9,6 @@ import java.io.IOException;
9 9
10 /** 10 /**
11 * 用于解决跨域问题 11 * 用于解决跨域问题
12 - * @author chen  
13 - * @version 1.0  
14 - * @date 2019/10/11 0011 10:17  
15 */ 12 */
16 @Component 13 @Component
17 @WebFilter(urlPatterns = "/*", filterName = "authFilter") 14 @WebFilter(urlPatterns = "/*", filterName = "authFilter")
cloud/dahua/src/main/java/com/example/dahua/module/GateModule.java
@@ -409,7 +409,6 @@ public class GateModule { @@ -409,7 +409,6 @@ public class GateModule {
409 */ 409 */
410 public static void setAccessTimeSchedule(LLong lLong, PermissionBean permissionBean) { 410 public static void setAccessTimeSchedule(LLong lLong, PermissionBean permissionBean) {
411 try { 411 try {
412 -  
413 CFG_ACCESS_TIMESCHEDULE_INFO msg = new CFG_ACCESS_TIMESCHEDULE_INFO(); 412 CFG_ACCESS_TIMESCHEDULE_INFO msg = new CFG_ACCESS_TIMESCHEDULE_INFO();
414 String strCmd = NetSDKLib.CFG_CMD_ACCESSTIMESCHEDULE; 413 String strCmd = NetSDKLib.CFG_CMD_ACCESSTIMESCHEDULE;
415 // 通道号 414 // 通道号
@@ -450,52 +449,13 @@ public class GateModule { @@ -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 boolean set = ToolKits.SetDevConfig(lLong, nChannel, strCmd, msg); 452 boolean set = ToolKits.SetDevConfig(lLong, nChannel, strCmd, msg);
489 -// msg.read();  
490 // 设置 453 // 设置
491 if (set) { 454 if (set) {
492 System.out.println("Set AccessTimeSchedule Succeed!"); 455 System.out.println("Set AccessTimeSchedule Succeed!");
493 } else { 456 } else {
494 System.err.println("Set AccessTimeSchedule Failed!" + ToolKits.getErrorCodePrint()); 457 System.err.println("Set AccessTimeSchedule Failed!" + ToolKits.getErrorCodePrint());
495 } 458 }
496 -// } else {  
497 -// System.err.println("Get AccessTimeSchedule Failed!" + ToolKits.getErrorCodePrint());  
498 -// }  
499 } catch (Exception e) { 459 } catch (Exception e) {
500 e.printStackTrace(); 460 e.printStackTrace();
501 } 461 }
cloud/dahua/src/main/java/com/example/dahua/module/GateModule2.java
@@ -267,11 +267,10 @@ public class GateModule2 { @@ -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 int emtype = NET_EM_ACCESS_CTL_USER_SERVICE.NET_EM_ACCESS_CTL_USER_SERVICE_CLEAR; 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,8 +288,10 @@ public class GateModule2 {
289 boolean result = netsdk.CLIENT_OperateAccessUserService(lLong, emtype, stIn.getPointer(), stOut.getPointer(), TIME_OUT); 288 boolean result = netsdk.CLIENT_OperateAccessUserService(lLong, emtype, stIn.getPointer(), stOut.getPointer(), TIME_OUT);
290 if (result) { 289 if (result) {
291 log.info("清空用户成功!"); 290 log.info("清空用户成功!");
  291 + return true;
292 } else { 292 } else {
293 log.error("清空用户失败!"); 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,6 +19,6 @@ public interface AttendanceService {
19 */ 19 */
20 int updateConnectState(int isConnection, String ip, String port); 20 int updateConnectState(int isConnection, String ip, String port);
21 21
22 - int updateConnectStateWithDevid(int isConnection, String clint_id); 22 + int updateConnectStateWithDevid(int isConnection, String inTime, String clint_id);
23 23
24 } 24 }
cloud/dahua/src/main/java/com/example/dahua/service/DeleteBatchTest.java
@@ -12,4 +12,7 @@ public interface DeleteBatchTest { @@ -12,4 +12,7 @@ public interface DeleteBatchTest {
12 void test(String schoolId); 12 void test(String schoolId);
13 void test2(String schoolId); 13 void test2(String schoolId);
14 void test3(String schoolId); 14 void test3(String schoolId);
  15 +
  16 + void test4(Integer schoolId,Integer studentType,String sex);
  17 +
15 } 18 }
cloud/dahua/src/main/java/com/example/dahua/service/UserOperateService.java
1 -//package com.example.dahua.service;  
2 -//  
3 -///**  
4 -// * 下发用户信息、人脸、卡、权限接口  
5 -// * @author xuquan  
6 -// * @date 2020/12/1 11:08  
7 -// */  
8 -//public interface UserOperateService {  
9 -//  
10 -// void sendUserInfo(String file,int userType,String schoolId,String userId,String deviceId,String deviceType,int flag);  
11 -//  
12 -// void addFaceGroup(String file,int userType,String schoolId,String userId,String deviceId,String deviceType);  
13 -//} 1 +package com.example.dahua.service;
  2 +
  3 +import com.example.dahua.bean.SendFaceDto;
  4 +
  5 +/**
  6 + * 下发用户信息、人脸、卡、权限接口
  7 + * @author xuquan
  8 + * @date 2020/12/1 11:08
  9 + */
  10 +public interface UserOperateService {
  11 +
  12 + /**
  13 + * 照片下发
  14 + * @param sendFaceDto
  15 + */
  16 + void sendUserFaces(SendFaceDto sendFaceDto);
  17 +
  18 +}
cloud/dahua/src/main/java/com/example/dahua/service/imp/AttendanceImp.java
@@ -24,7 +24,7 @@ public class AttendanceImp implements AttendanceService { @@ -24,7 +24,7 @@ public class AttendanceImp implements AttendanceService {
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); 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 return jdbcTemplate.update(insertSql); 25 return jdbcTemplate.update(insertSql);
26 } else {//设备 已经存在,更新在线状态 26 } else {//设备 已经存在,更新在线状态
27 - updateConnectStateWithDevid(1, clint_id); 27 + updateConnectStateWithDevid(1,intime, clint_id);
28 } 28 }
29 } catch (Exception e) { 29 } catch (Exception e) {
30 e.printStackTrace(); 30 e.printStackTrace();
@@ -54,10 +54,10 @@ public class AttendanceImp implements AttendanceService { @@ -54,10 +54,10 @@ public class AttendanceImp implements AttendanceService {
54 } 54 }
55 55
56 @Override 56 @Override
57 - public int updateConnectStateWithDevid(int isConnection, String clint_id) { 57 + public int updateConnectStateWithDevid(int isConnection,String inTime, String clint_id) {
58 int index = 0; 58 int index = 0;
59 try { 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 index = jdbcTemplate.update(updateSql); 61 index = jdbcTemplate.update(updateSql);
62 // System.out.println("updateIndex:"+index+" isConnection:"+isConnection+"updateSql:"+updateSql); 62 // System.out.println("updateIndex:"+index+" isConnection:"+isConnection+"updateSql:"+updateSql);
63 } catch (Exception e) { 63 } catch (Exception e) {
cloud/dahua/src/main/java/com/example/dahua/service/imp/BaseService.java 0 → 100644
@@ -0,0 +1,133 @@ @@ -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 package com.example.dahua.service.imp; 1 package com.example.dahua.service.imp;
2 2
3 import com.example.dahua.bean.SendRecordBean; 3 import com.example.dahua.bean.SendRecordBean;
  4 +import com.example.dahua.bean.StudentBean;
4 import com.example.dahua.bean.UserInfoBean; 5 import com.example.dahua.bean.UserInfoBean;
5 import com.example.dahua.dao.UserDao; 6 import com.example.dahua.dao.UserDao;
6 import com.example.dahua.service.DeleteBatchTest; 7 import com.example.dahua.service.DeleteBatchTest;
@@ -8,8 +9,10 @@ import com.example.dahua.xiananDao.SendRecordDao; @@ -8,8 +9,10 @@ import com.example.dahua.xiananDao.SendRecordDao;
8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.stereotype.Repository; 10 import org.springframework.stereotype.Repository;
10 import org.springframework.stereotype.Service; 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 * TODO 18 * TODO
@@ -25,6 +28,9 @@ public class DeleteBatchTestImpl implements DeleteBatchTest { @@ -25,6 +28,9 @@ public class DeleteBatchTestImpl implements DeleteBatchTest {
25 private UserDao userDao; 28 private UserDao userDao;
26 @Autowired 29 @Autowired
27 private SendRecordDao sendRecordDao; 30 private SendRecordDao sendRecordDao;
  31 + @Autowired
  32 + private BaseService baseService;
  33 +
28 34
29 @Override 35 @Override
30 public void test(String schoolId) { 36 public void test(String schoolId) {
@@ -39,7 +45,7 @@ public class DeleteBatchTestImpl implements DeleteBatchTest { @@ -39,7 +45,7 @@ public class DeleteBatchTestImpl implements DeleteBatchTest {
39 if(sendRecords.size()>0){ 45 if(sendRecords.size()>0){
40 sendRecordDao.deleteFaceFailTest(s.getDeviceID(),s.getNum(),String.valueOf(s.getSchoolId())); 46 sendRecordDao.deleteFaceFailTest(s.getDeviceID(),s.getNum(),String.valueOf(s.getSchoolId()));
41 //获取用户iD 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 List<String> recordNos = userDao.getRecordNoTest(s.getName(),userId,s.getDeviceID()); 50 List<String> recordNos = userDao.getRecordNoTest(s.getName(),userId,s.getDeviceID());
45 if(recordNos.size()>0){ 51 if(recordNos.size()>0){
@@ -62,7 +68,7 @@ public class DeleteBatchTestImpl implements DeleteBatchTest { @@ -62,7 +68,7 @@ public class DeleteBatchTestImpl implements DeleteBatchTest {
62 int i = 0; 68 int i = 0;
63 for(SendRecordBean s : sendRecordBeanList){ 69 for(SendRecordBean s : sendRecordBeanList){
64 //获取用户iD 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 List<String> recordNos = userDao.getRecordNoTest(s.getName(),userId,s.getDeviceID()); 73 List<String> recordNos = userDao.getRecordNoTest(s.getName(),userId,s.getDeviceID());
68 if(recordNos.size()>0){ 74 if(recordNos.size()>0){
@@ -92,4 +98,31 @@ public class DeleteBatchTestImpl implements DeleteBatchTest { @@ -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,17 +78,15 @@ public class UserServiceImp implements UserService {
78 String[] studentInfo = studentCodes.split("_"); 78 String[] studentInfo = studentCodes.split("_");
79 79
80 if (studentInfo.length > 1) {//附属卡 80 if (studentInfo.length > 1) {//附属卡
81 -  
82 String studentCodeF = studentInfo[0]; 81 String studentCodeF = studentInfo[0];
83 String CardType = studentInfo[1]; 82 String CardType = studentInfo[1];
84 userInfoBean = getUserInfo(schoolId, studentCodeF); 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 } else { 88 } else {
89 -  
90 userInfoBean = getUserInfo(schoolId, studentCode);//获取用户信息 89 userInfoBean = getUserInfo(schoolId, studentCode);//获取用户信息
91 -  
92 } 90 }
93 } else if (userType == 1) { 91 } else if (userType == 1) {
94 TeacherBean teacher = userDao.getTeacher(schoolId, studentCode); 92 TeacherBean teacher = userDao.getTeacher(schoolId, studentCode);
@@ -104,10 +102,11 @@ public class UserServiceImp implements UserService { @@ -104,10 +102,11 @@ public class UserServiceImp implements UserService {
104 //下发任务 102 //下发任务
105 // myTask.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType); 103 // myTask.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType);
106 sendUserInfoTask2.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType); 104 sendUserInfoTask2.doTaskOne(file, attendanceBeans, userInfoBean, schoolId, -1, userType);
  105 + return true;
107 } catch (Exception e) { 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,6 +148,13 @@ public class HttpUtils {
148 return result.getBody(); 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 * @param permissionBean 160 * @param permissionBean
cloud/dahua/src/main/java/com/example/dahua/xiananDao/SendRecordDao.java
@@ -99,5 +99,26 @@ public interface SendRecordDao { @@ -99,5 +99,26 @@ public interface SendRecordDao {
99 @Select("select * from Face_SendSuccess where schoolId = #{schoolId} and userType = #{userType} and deviceId in ('G04F98PAJ164D7','6G04F8PAJ5CAA','6G04F98PAJ1E0DB','6G04F98PAJEE38C')") 99 @Select("select * from Face_SendSuccess where schoolId = #{schoolId} and userType = #{userType} and deviceId in ('G04F98PAJ164D7','6G04F8PAJ5CAA','6G04F98PAJ1E0DB','6G04F98PAJEE38C')")
100 List<SendRecordBean> getFaceSuccessIsExitTest(@Param("schoolId") String schoolId,@Param("userType") int userType); 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 +8,8 @@
8 <!--<include resource="org/springframework/boot/logging/logback/defaults.xml" />--> 8 <!--<include resource="org/springframework/boot/logging/logback/defaults.xml" />-->
9 9
10 <!--日志文件存储的基础路径: ${user.home} 为当前服务器用户主目录--> 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 <property name="BASE_FILE_NAME" value="dahua"/> 14 <property name="BASE_FILE_NAME" value="dahua"/>
15 <property name="LOG_FILE_MAX_SIZE" value="10MB"/> 15 <property name="LOG_FILE_MAX_SIZE" value="10MB"/>
cloud/dahua/src/main/resources/mapper/usermapper.xml
@@ -9,15 +9,38 @@ @@ -9,15 +9,38 @@
9 <!--and studentcode = #{studentcode}--> 9 <!--and studentcode = #{studentcode}-->
10 <!--</select>--> 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 </select> 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 </mapper> 46 </mapper>
24 \ No newline at end of file 47 \ No newline at end of file
cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java
@@ -145,4 +145,9 @@ public class SearchMapperTest extends Tester { @@ -145,4 +145,9 @@ public class SearchMapperTest extends Tester {
145 String schoolId = "1485"; 145 String schoolId = "1485";
146 deleteBatchTest.test3(schoolId); 146 deleteBatchTest.test3(schoolId);
147 } 147 }
  148 +
  149 + @Test
  150 + public void test9() {
  151 + deleteBatchTest.test4(27,2,"1");
  152 + }
148 } 153 }
cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
1 package com.sincere.haikangface; 1 package com.sincere.haikangface;
2 2
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 -import com.alibaba.fastjson.JSONArray;  
5 import com.alibaba.fastjson.JSONObject; 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 import com.sincere.haikangface.bean.xiaoan.Face_Recoder; 7 import com.sincere.haikangface.bean.xiaoan.Face_Recoder;
8 import com.sincere.haikangface.dao.DeviceDao; 8 import com.sincere.haikangface.dao.DeviceDao;
9 import com.sincere.haikangface.dao.UserDao; 9 import com.sincere.haikangface.dao.UserDao;
10 -import com.sincere.haikangface.enums.EnumSzBusinessType;  
11 import com.sincere.haikangface.haikanglibs.HCEHomeAlarm; 10 import com.sincere.haikangface.haikanglibs.HCEHomeAlarm;
12 import com.sincere.haikangface.haikanglibs.HCEHomeCMS; 11 import com.sincere.haikangface.haikanglibs.HCEHomeCMS;
13 import com.sincere.haikangface.haikanglibs.HCEHomeSS; 12 import com.sincere.haikangface.haikanglibs.HCEHomeSS;
14 -import com.sincere.haikangface.mqtt.MqtUtils;  
15 import com.sincere.haikangface.service.impl.BaseService; 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 import com.sincere.haikangface.xiananDao.SendRecordDao; 16 import com.sincere.haikangface.xiananDao.SendRecordDao;
18 import com.sun.jna.NativeLong; 17 import com.sun.jna.NativeLong;
19 import com.sun.jna.Pointer; 18 import com.sun.jna.Pointer;
@@ -23,15 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -23,15 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.beans.factory.annotation.Value; 22 import org.springframework.beans.factory.annotation.Value;
24 import org.springframework.boot.ApplicationArguments; 23 import org.springframework.boot.ApplicationArguments;
25 import org.springframework.boot.ApplicationRunner; 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 import org.springframework.stereotype.Component; 25 import org.springframework.stereotype.Component;
33 -import org.springframework.util.LinkedMultiValueMap;  
34 -import org.springframework.util.MultiValueMap;  
35 import org.springframework.util.StringUtils; 26 import org.springframework.util.StringUtils;
36 import org.springframework.web.client.RestTemplate; 27 import org.springframework.web.client.RestTemplate;
37 28
@@ -40,7 +31,10 @@ import java.net.InetAddress; @@ -40,7 +31,10 @@ import java.net.InetAddress;
40 import java.net.UnknownHostException; 31 import java.net.UnknownHostException;
41 import java.nio.ByteBuffer; 32 import java.nio.ByteBuffer;
42 import java.text.SimpleDateFormat; 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 import java.util.regex.Pattern; 38 import java.util.regex.Pattern;
45 39
46 @Component 40 @Component
@@ -67,17 +61,19 @@ public class CMSServer implements ApplicationRunner { @@ -67,17 +61,19 @@ public class CMSServer implements ApplicationRunner {
67 // 存储设备登录句柄 61 // 存储设备登录句柄
68 static Map<String, NativeLong> map = new HashMap<>(); 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 //114.55.30.100 66 //114.55.30.100
71 //120.26.116.253 67 //120.26.116.253
72 // private String ip_cloud = "114.55.30.100"; 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 private String ip; 71 private String ip;
76 { 72 {
77 try { 73 try {
78 ip = InetAddress.getLocalHost().getHostAddress(); 74 ip = InetAddress.getLocalHost().getHostAddress();
79 } catch (UnknownHostException e) { 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,7 +243,7 @@ public class CMSServer implements ApplicationRunner {
247 try { 243 try {
248 deviceId = new String(strDevRegInfo.byDeviceID, "utf-8").trim(); 244 deviceId = new String(strDevRegInfo.byDeviceID, "utf-8").trim();
249 } catch (UnsupportedEncodingException e) { 245 } catch (UnsupportedEncodingException e) {
250 - e.printStackTrace(); 246 + log.error("注册设备,设置设备ID异常,错误信息:{}",e);
251 } 247 }
252 pInBuffer.dwSize = pInBuffer.size(); 248 pInBuffer.dwSize = pInBuffer.size();
253 AttendanceBean attendanceBean = new AttendanceBean(); 249 AttendanceBean attendanceBean = new AttendanceBean();
@@ -262,7 +258,7 @@ public class CMSServer implements ApplicationRunner { @@ -262,7 +258,7 @@ public class CMSServer implements ApplicationRunner {
262 attendanceBean.setSchool_id("-1"); 258 attendanceBean.setSchool_id("-1");
263 attendanceBean.setState(1); 259 attendanceBean.setState(1);
264 if (deviceDao.selectDevice(deviceId) != null) { 260 if (deviceDao.selectDevice(deviceId) != null) {
265 - deviceDao.updateDeviceStatu(1, deviceId); 261 + deviceDao.updateDeviceStatu(1,inTime,deviceId);
266 } else { 262 } else {
267 deviceDao.addDevide(attendanceBean.getClint_id(), attendanceBean.getClint_type(), attendanceBean.getIntime(), 263 deviceDao.addDevide(attendanceBean.getClint_id(), attendanceBean.getClint_type(), attendanceBean.getIntime(),
268 attendanceBean.getSchool_id(), attendanceBean.getState() + "", attendanceBean.getIsConnection() + ""); 264 attendanceBean.getSchool_id(), attendanceBean.getState() + "", attendanceBean.getIsConnection() + "");
@@ -305,7 +301,6 @@ public class CMSServer implements ApplicationRunner { @@ -305,7 +301,6 @@ public class CMSServer implements ApplicationRunner {
305 String szDevUri = new String(pTomcatMsg.szDevUri).trim(); 301 String szDevUri = new String(pTomcatMsg.szDevUri).trim();
306 int dwPicNum = pTomcatMsg.dwPicNum; 302 int dwPicNum = pTomcatMsg.dwPicNum;
307 String pPicURLs = pTomcatMsg.pPicURLs; 303 String pPicURLs = pTomcatMsg.pPicURLs;
308 -// System.out.println("szDevUri = " + szDevUri + " dwPicNum= " + dwPicNum + " pPicURLs=" + pPicURLs);  
309 } else if (2 == enumType) { 304 } else if (2 == enumType) {
310 // int type = pInBuffer.dwAlarmServerType; 305 // int type = pInBuffer.dwAlarmServerType;
311 // int picServerType = pInBuffer.dwPicServerType; 306 // int picServerType = pInBuffer.dwPicServerType;
@@ -339,7 +334,7 @@ public class CMSServer implements ApplicationRunner { @@ -339,7 +334,7 @@ public class CMSServer implements ApplicationRunner {
339 try { 334 try {
340 strFilePathFile.createNewFile(); 335 strFilePathFile.createNewFile();
341 } catch (IOException e) { 336 } catch (IOException e) {
342 - e.printStackTrace(); 337 + log.error("处理人脸机抓拍文件异常,错误信息:{}",e);
343 } 338 }
344 } 339 }
345 if (dwFileLen > 0 && pFileBuf != null) { 340 if (dwFileLen > 0 && pFileBuf != null) {
@@ -366,9 +361,9 @@ public class CMSServer implements ApplicationRunner { @@ -366,9 +361,9 @@ public class CMSServer implements ApplicationRunner {
366 baseService.sendUserInfoToKB(strFilePathFile, deviceId); 361 baseService.sendUserInfoToKB(strFilePathFile, deviceId);
367 } 362 }
368 } catch (FileNotFoundException e) { 363 } catch (FileNotFoundException e) {
369 - e.printStackTrace(); 364 + log.error("处理人脸机抓拍文件异常,错误信息:{}",e);
370 } catch (IOException e) { 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,30 +392,36 @@ public class CMSServer implements ApplicationRunner {
397 strXMLData.read(); 392 strXMLData.read();
398 String strXML = new String(strXMLData.byValue); 393 String strXML = new String(strXMLData.byValue);
399 if (null == alarmUtils) { 394 if (null == alarmUtils) {
  395 + log.info("初始化报警工具类");
400 alarmUtils = new AlarmUtils(deviceDao, userDao); 396 alarmUtils = new AlarmUtils(deviceDao, userDao);
401 alarmUtils.setCallBack(new AlarmUtils.AlarmCallBack() { 397 alarmUtils.setCallBack(new AlarmUtils.AlarmCallBack() {
402 @Override 398 @Override
403 public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) { 399 public void callBack(String minorType, String deviceID, String cardNo, String time, String picDataUrlId, String currTemperature) {
404 switch (minorType) { 400 switch (minorType) {
405 case "0x4b"://人脸认证通过 401 case "0x4b"://人脸认证通过
  402 + log.info("人脸验证通过,事件次类型:"+minorType);
406 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); 403 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
407 break; 404 break;
408 case "0x426"://人证设备在线 405 case "0x426"://人证设备在线
409 break; 406 break;
410 case "0x427"://人证设备离线 407 case "0x427"://人证设备离线
  408 + log.info("设备掉线了,设备ID: "+deviceID);
411 map.remove(deviceID); 409 map.remove(deviceID);
412 - deviceDao.updateDeviceStatu(0, deviceID); 410 + deviceDao.updateDeviceStatu(0,inTime,deviceID);
413 break; 411 break;
414 case "0x69"://人证比对通过 412 case "0x69"://人证比对通过
  413 + log.info("人证比对通过,事件次类型:"+minorType);
415 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); 414 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
416 break; 415 break;
417 case "0x6": 416 case "0x6":
  417 + log.info("通过,事件次类型:"+minorType);
418 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature); 418 saveFaceRecoder(deviceID, cardNo, time, picDataUrlId, currTemperature);
419 break; 419 break;
420 } 420 }
421 } 421 }
422 }); 422 });
423 } else { 423 } else {
  424 + log.info("处理报警进来了");
424 //处理报警事件 425 //处理报警事件
425 alarmUtils.deleAlarm(strXML); 426 alarmUtils.deleAlarm(strXML);
426 } 427 }
@@ -447,6 +448,7 @@ public class CMSServer implements ApplicationRunner { @@ -447,6 +448,7 @@ public class CMSServer implements ApplicationRunner {
447 try { 448 try {
448 if (!StringUtils.isEmpty(cardNo) && isNumeric(cardNo)) { 449 if (!StringUtils.isEmpty(cardNo) && isNumeric(cardNo)) {
449 Face_Recoder face_recoder = new Face_Recoder(); 450 Face_Recoder face_recoder = new Face_Recoder();
  451 + //十进制卡转十六进制卡
450 String card = splicingZero(Long.toHexString(Long.parseLong(cardNo)), 8).toUpperCase(); 452 String card = splicingZero(Long.toHexString(Long.parseLong(cardNo)), 8).toUpperCase();
451 //卡号逆转 453 //卡号逆转
452 cardNo = baseService.getCard(card); 454 cardNo = baseService.getCard(card);
@@ -486,7 +488,6 @@ public class CMSServer implements ApplicationRunner { @@ -486,7 +488,6 @@ public class CMSServer implements ApplicationRunner {
486 488
487 public void isTeacher(String cardNo, String deviceID) { 489 public void isTeacher(String cardNo, String deviceID) {
488 List<String> devLists = userDao.getDeviceRoomRelation(deviceID); 490 List<String> devLists = userDao.getDeviceRoomRelation(deviceID);
489 -// log.error("cardNo:{},devLists{}", cardNo, devLists);  
490 if (null != devLists && devLists.size() > 0) { 491 if (null != devLists && devLists.size() > 0) {
491 492
492 StudentBean teacher = userDao.getTeacherWithCard(cardNo); 493 StudentBean teacher = userDao.getTeacherWithCard(cardNo);
@@ -509,7 +510,8 @@ public class CMSServer implements ApplicationRunner { @@ -509,7 +510,8 @@ public class CMSServer implements ApplicationRunner {
509 * @param deviceId 510 * @param deviceId
510 * @return 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 if (map.containsKey(deviceId)) { 515 if (map.containsKey(deviceId)) {
514 HCEHomeSS.NET_EHOME_SS_CLIENT_PARAM pClientParam = new HCEHomeSS.NET_EHOME_SS_CLIENT_PARAM(); 516 HCEHomeSS.NET_EHOME_SS_CLIENT_PARAM pClientParam = new HCEHomeSS.NET_EHOME_SS_CLIENT_PARAM();
515 pClientParam.enumType = HCEHomeSS.NET_EHOME_SS_CLIENT_TYPE_KMS; 517 pClientParam.enumType = HCEHomeSS.NET_EHOME_SS_CLIENT_TYPE_KMS;
@@ -548,11 +550,11 @@ public class CMSServer implements ApplicationRunner { @@ -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 }else{ 558 }else{
557 baseService.sendFail(card, srcFile, deviceId,"设备不在线", userType); 559 baseService.sendFail(card, srcFile, deviceId,"设备不在线", userType);
558 } 560 }
@@ -564,7 +566,7 @@ public class CMSServer implements ApplicationRunner { @@ -564,7 +566,7 @@ public class CMSServer implements ApplicationRunner {
564 * 566 *
565 * @Param picUrl 原图 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 // deleteCard(deviceId, card); 570 // deleteCard(deviceId, card);
569 // editCard(startTime, endTime, 0, name, card, deviceId, employeeNo); 571 // editCard(startTime, endTime, 0, name, card, deviceId, employeeNo);
570 editCard(startTime, endTime, validTimeEnabled, name, card, deviceId, employeeNo); 572 editCard(startTime, endTime, validTimeEnabled, name, card, deviceId, employeeNo);
@@ -579,7 +581,7 @@ public class CMSServer implements ApplicationRunner { @@ -579,7 +581,7 @@ public class CMSServer implements ApplicationRunner {
579 "</SetFaceParamCfg>"; 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,7 +655,7 @@ public class CMSServer implements ApplicationRunner {
653 655
654 System.arraycopy(nameAfterBy, 0, resultBy, nameBeforBy.length + nameBy.length, nameAfterBy.length); 656 System.arraycopy(nameAfterBy, 0, resultBy, nameBeforBy.length + nameBy.length, nameAfterBy.length);
655 } catch (UnsupportedEncodingException e) { 657 } catch (UnsupportedEncodingException e) {
656 - e.printStackTrace(); 658 + log.error("编码异常:异常信息:{}",e);
657 } 659 }
658 660
659 struConfigXMLCard.byString = resultBy; 661 struConfigXMLCard.byString = resultBy;
@@ -701,7 +703,7 @@ public class CMSServer implements ApplicationRunner { @@ -701,7 +703,7 @@ public class CMSServer implements ApplicationRunner {
701 * 703 *
702 * @param clint_id 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 try { 707 try {
706 708
707 HCEHomeCMS.NET_EHOME_XML_CFG struXMLCard = new HCEHomeCMS.NET_EHOME_XML_CFG(); 709 HCEHomeCMS.NET_EHOME_XML_CFG struXMLCard = new HCEHomeCMS.NET_EHOME_XML_CFG();
@@ -745,7 +747,7 @@ public class CMSServer implements ApplicationRunner { @@ -745,7 +747,7 @@ public class CMSServer implements ApplicationRunner {
745 log.error(content + "失败:" + iErr); 747 log.error(content + "失败:" + iErr);
746 if(schoolId !=null && (schoolId.intValue() == 4 || 748 if(schoolId !=null && (schoolId.intValue() == 4 ||
747 schoolId.intValue() == 27 || schoolId.intValue() == 2 || schoolId.intValue() == 16)){ 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 }else{ 751 }else{
750 baseService.sendFail(card,"",clint_id,content + "失败:" + iErr, userType); 752 baseService.sendFail(card,"",clint_id,content + "失败:" + iErr, userType);
751 } 753 }
@@ -753,7 +755,7 @@ public class CMSServer implements ApplicationRunner { @@ -753,7 +755,7 @@ public class CMSServer implements ApplicationRunner {
753 log.info(content + "成功"); 755 log.info(content + "成功");
754 } 756 }
755 } catch (Exception e) { 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,7 +771,7 @@ public class CMSServer implements ApplicationRunner {
769 String strConfigXML = "<DelFaceParamCfg>" + 771 String strConfigXML = "<DelFaceParamCfg>" +
770 "<cardNo>" + card + "</cardNo><cardReaderNo>1</cardReaderNo>" + 772 "<cardNo>" + card + "</cardNo><cardReaderNo>1</cardReaderNo>" +
771 "<faceID>1</faceID></DelFaceParamCfg>"; 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,10 +786,10 @@ public class CMSServer implements ApplicationRunner {
784 String strConfigXML = "<GetFaceParamCfgCond version=\"2.0\" xmlns=\"http://www.isapi.org/ver20/XMLSchema\">" + 786 String strConfigXML = "<GetFaceParamCfgCond version=\"2.0\" xmlns=\"http://www.isapi.org/ver20/XMLSchema\">" +
785 "<cardNo>" + card + "</cardNo><cardReaderNo>1</cardReaderNo>" + 787 "<cardNo>" + card + "</cardNo><cardReaderNo>1</cardReaderNo>" +
786 "<faceID>1</faceID></GetFaceParamCfgCond>"; 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 // deleteCard(deviceId, card); 794 // deleteCard(deviceId, card);
793 // lLoginID = map.get(deviceId); 795 // lLoginID = map.get(deviceId);
@@ -818,24 +820,24 @@ public class CMSServer implements ApplicationRunner { @@ -818,24 +820,24 @@ public class CMSServer implements ApplicationRunner {
818 if (type == 1) {//下发人脸 820 if (type == 1) {//下发人脸
819 if (!hCEhomeCMS.NET_ECMS_PostPTXMLConfig(map.get(deviceId), struISAPXML)) { 821 if (!hCEhomeCMS.NET_ECMS_PostPTXMLConfig(map.get(deviceId), struISAPXML)) {
820 int iErr = hCEhomeCMS.NET_ECMS_GetLastError(); 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 }else{ 827 }else{
826 - baseService.sendFail(card,"",deviceId,content + "失败:" + iErr, userType); 828 + baseService.sendFail(card,"",deviceId,content + "失败,错误号:" + iErr, userType);
827 } 829 }
828 // sendRecoderUtils.sendFailRecord(sendRecordDao, card, srcFile, deviceId, userDao, content + "失败,错误号:" + iErr, userType); 830 // sendRecoderUtils.sendFailRecord(sendRecordDao, card, srcFile, deviceId, userDao, content + "失败,错误号:" + iErr, userType);
829 } else { 831 } else {
830 stringXMLOut.read(); 832 stringXMLOut.read();
831 String strOutXML = new String(stringXMLOut.byString).trim(); 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 }else{ 837 }else{
836 baseService.sendSuccess(card,faceUrl, deviceId,userType); 838 baseService.sendSuccess(card,faceUrl, deviceId,userType);
837 } 839 }
838 - log.info(content + "成功:" + card); 840 + log.info(content + "成功: 下发卡号:" + card);
839 } 841 }
840 } else if (type == 2) {//删除人脸 842 } else if (type == 2) {//删除人脸
841 if (!hCEhomeCMS.NET_ECMS_PutPTXMLConfig(map.get(deviceId), struISAPXML)) { 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 +11,13 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerA
11 import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 11 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
12 import org.springframework.cloud.openfeign.EnableFeignClients; 12 import org.springframework.cloud.openfeign.EnableFeignClients;
13 import org.springframework.context.annotation.ComponentScan; 13 import org.springframework.context.annotation.ComponentScan;
  14 +import org.springframework.scheduling.annotation.EnableAsync;
14 15
15 @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class}) 16 @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})
16 @SpringBootApplication 17 @SpringBootApplication
17 @EnableDiscoveryClient 18 @EnableDiscoveryClient
18 @EnableFeignClients(basePackages = "com.sincere.haikangface.fegin") 19 @EnableFeignClients(basePackages = "com.sincere.haikangface.fegin")
  20 +//@EnableAsync
19 public class HaikangfaceApplication { 21 public class HaikangfaceApplication {
20 22
21 public static void main(String[] args) { 23 public static void main(String[] args) {
cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendFaceBatchTask100.java 0 → 100644
@@ -0,0 +1,110 @@ @@ -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 @@ @@ -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,17 +12,21 @@ import com.sincere.haikangface.dao.DeviceDao;
12 import com.sincere.haikangface.dao.UserDao; 12 import com.sincere.haikangface.dao.UserDao;
13 import com.sincere.haikangface.enums.EnumSzBusinessType; 13 import com.sincere.haikangface.enums.EnumSzBusinessType;
14 import com.sincere.haikangface.service.impl.BaseService; 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 import com.sincere.haikangface.xiananDao.SendRecordDao; 19 import com.sincere.haikangface.xiananDao.SendRecordDao;
17 import lombok.extern.slf4j.Slf4j; 20 import lombok.extern.slf4j.Slf4j;
18 import org.springframework.beans.factory.annotation.Autowired; 21 import org.springframework.beans.factory.annotation.Autowired;
19 -import org.springframework.http.ResponseEntity;  
20 import org.springframework.scheduling.annotation.Async; 22 import org.springframework.scheduling.annotation.Async;
21 import org.springframework.stereotype.Component; 23 import org.springframework.stereotype.Component;
22 import org.springframework.util.StringUtils; 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 @Component 31 @Component
28 @Slf4j 32 @Slf4j
@@ -59,14 +63,14 @@ public class SendUserAsync { @@ -59,14 +63,14 @@ public class SendUserAsync {
59 * @param deviceId 63 * @param deviceId
60 * @param userType 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 //1、检测图片是否合格 67 //1、检测图片是否合格
64 boolean check = true; 68 boolean check = true;
65 if (check) {//合格 69 if (check) {//合格
66 //根据设备是5603 还是新设备 70 //根据设备是5603 还是新设备
67 String employeeNo = ""; 71 String employeeNo = "";
68 //picUrl:压缩后的图片路径,图片上传,用户信息、用户卡下发。 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 if (deviceId.contains("ymzx") || deviceId.contains("5607") || deviceId.contains("5671") || deviceId.contains("5604")) { 75 if (deviceId.contains("ymzx") || deviceId.contains("5607") || deviceId.contains("5671") || deviceId.contains("5604")) {
72 long lon = Long.parseLong(card); 76 long lon = Long.parseLong(card);
@@ -94,18 +98,18 @@ public class SendUserAsync { @@ -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 for (int i = 0; i < 7; i++) { 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 } else {//不合格 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 }else{ 113 }else{
110 baseService.sendFail(card, srcFile, deviceId, "人脸照片不合格", userType); 114 baseService.sendFail(card, srcFile, deviceId, "人脸照片不合格", userType);
111 } 115 }
@@ -154,8 +158,7 @@ public class SendUserAsync { @@ -154,8 +158,7 @@ public class SendUserAsync {
154 log.info("map{}", JSON.toJSONString(map)); 158 log.info("map{}", JSON.toJSONString(map));
155 return true; 159 return true;
156 }catch (Exception e){ 160 }catch (Exception e){
157 - e.printStackTrace();  
158 - log.error("下发权限失败"); 161 + log.error("下发卡权限失败,异常信息:{}",e);
159 } 162 }
160 return false; 163 return false;
161 } 164 }
@@ -190,8 +193,7 @@ public class SendUserAsync { @@ -190,8 +193,7 @@ public class SendUserAsync {
190 cardNumList.addAll(cardList); 193 cardNumList.addAll(cardList);
191 } 194 }
192 if (Integer.parseInt(userType) == EnumSzBusinessType.EnumUserType.STUDENT.code) { 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 initWeedayAndTimes(weekDay, map); 199 initWeedayAndTimes(weekDay, map);
@@ -203,8 +205,7 @@ public class SendUserAsync { @@ -203,8 +205,7 @@ public class SendUserAsync {
203 userDao.updateAuthRecord(id,1); 205 userDao.updateAuthRecord(id,1);
204 return true; 206 return true;
205 }catch (Exception e){ 207 }catch (Exception e){
206 - e.printStackTrace();  
207 - log.error("下发权限失败"); 208 + log.error("下发卡权限失败,异常信息:{}",e);
208 } 209 }
209 return false; 210 return false;
210 } 211 }
@@ -229,7 +230,7 @@ public class SendUserAsync { @@ -229,7 +230,7 @@ public class SendUserAsync {
229 } 230 }
230 231
231 } catch (Exception e) { 232 } catch (Exception e) {
232 - e.printStackTrace(); 233 + log.error("获取用户卡异常,异常信息:{}",e);
233 } 234 }
234 return cards; 235 return cards;
235 } 236 }
@@ -268,8 +269,8 @@ public class SendUserAsync { @@ -268,8 +269,8 @@ public class SendUserAsync {
268 } 269 }
269 cardNum = Long.parseLong(newCardNum, 16) + ""; 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 for (Map.Entry<Integer, List<WeekTime>> weeKdayMap : map.entrySet()) { 275 for (Map.Entry<Integer, List<WeekTime>> weeKdayMap : map.entrySet()) {
275 276
@@ -285,20 +286,19 @@ public class SendUserAsync { @@ -285,20 +286,19 @@ public class SendUserAsync {
285 String weekPlanTime = HKXmlUtils.getInstance().SetCardWeekPlanTime(stringBuffer.toString(), "" + week); 286 String weekPlanTime = HKXmlUtils.getInstance().SetCardWeekPlanTime(stringBuffer.toString(), "" + week);
286 String serCardRightCfg = HKXmlUtils.getInstance().SetCardRightCfg(cardNum); 287 String serCardRightCfg = HKXmlUtils.getInstance().SetCardRightCfg(cardNum);
287 FileUtils.getInstance().writeLogs(weekPlanTime, "设置卡权限周计划时间.txt"); 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 if (i == 0) HttpUtil.sendPermission2HK(permissionBean); 295 if (i == 0) HttpUtil.sendPermission2HK(permissionBean);
295 log.error("deviceId:{}", deviceId + "不在线"); 296 log.error("deviceId:{}", deviceId + "不在线");
296 } 297 }
297 } 298 }
298 return true; 299 return true;
299 }catch (Exception e){ 300 }catch (Exception e){
300 - log.error("下发失败,错误信息{}",e);  
301 - e.printStackTrace(); 301 + log.error("下发卡权限失败,异常信息{}",e);
302 } 302 }
303 return false; 303 return false;
304 } 304 }
@@ -320,14 +320,7 @@ public class SendUserAsync { @@ -320,14 +320,7 @@ public class SendUserAsync {
320 return cardList; 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 private void initWeedayAndTimes(WeekDay weekDay, Map<Integer, List<WeekTime>> map) { 326 private void initWeedayAndTimes(WeekDay weekDay, Map<Integer, List<WeekTime>> map) {
@@ -393,32 +386,4 @@ public class SendUserAsync { @@ -393,32 +386,4 @@ public class SendUserAsync {
393 public boolean IsDeviceOnline(String deviceId) { 386 public boolean IsDeviceOnline(String deviceId) {
394 return HttpUtil.IsDeviceOnline(deviceId); 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,13 +15,13 @@ public class AuthRecordDto {
15 15
16 @ApiModelProperty("权限表ID") 16 @ApiModelProperty("权限表ID")
17 private Integer id ; 17 private Integer id ;
18 - @ApiModelProperty("1 学生类型 2 学生组") 18 + @ApiModelProperty("1学生类型 2 学生组")
19 private Integer type ; 19 private Integer type ;
20 @ApiModelProperty("学校ID") 20 @ApiModelProperty("学校ID")
21 private Integer schoolId ; 21 private Integer schoolId ;
22 - @ApiModelProperty("设备号,逗号隔开") 22 + @ApiModelProperty("设备号集合")
23 private List<String> snList; 23 private List<String> snList;
24 - @ApiModelProperty("学生类型,1通校2住校") 24 + @ApiModelProperty("学生类型,1通校2住校;群组时,为群组号")
25 private Integer studentType ; 25 private Integer studentType ;
26 @ApiModelProperty("权限周计划列表") 26 @ApiModelProperty("权限周计划列表")
27 private List<WeekDay> weekDays ; 27 private List<WeekDay> weekDays ;
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/PermissionDHBean.java 0 → 100644
@@ -0,0 +1,63 @@ @@ -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 @@ @@ -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,21 +3,16 @@ package com.sincere.haikangface.control;
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.sincere.haikangface.CMSServer; 4 import com.sincere.haikangface.CMSServer;
5 import com.sincere.haikangface.async.SendUserAsync; 5 import com.sincere.haikangface.async.SendUserAsync;
6 -import com.sincere.haikangface.bean.Images2Ddevices;  
7 import com.sincere.haikangface.bean.StudentBean; 6 import com.sincere.haikangface.bean.StudentBean;
8 -import com.sincere.haikangface.bean.UploadBean;  
9 import com.sincere.haikangface.bean.face.PermissionBean; 7 import com.sincere.haikangface.bean.face.PermissionBean;
10 import com.sincere.haikangface.dao.UserDao; 8 import com.sincere.haikangface.dao.UserDao;
11 import com.sincere.haikangface.service.impl.BaseService; 9 import com.sincere.haikangface.service.impl.BaseService;
12 import com.sincere.haikangface.utils.CompressPic; 10 import com.sincere.haikangface.utils.CompressPic;
13 import com.sincere.haikangface.utils.FileUtils; 11 import com.sincere.haikangface.utils.FileUtils;
14 -import com.sincere.haikangface.utils.SendRecoderUtils;  
15 import com.sincere.haikangface.xiananDao.SendRecordDao; 12 import com.sincere.haikangface.xiananDao.SendRecordDao;
16 import io.swagger.annotations.Api; 13 import io.swagger.annotations.Api;
17 import io.swagger.annotations.ApiOperation; 14 import io.swagger.annotations.ApiOperation;
18 import lombok.extern.slf4j.Slf4j; 15 import lombok.extern.slf4j.Slf4j;
19 -import org.slf4j.Logger;  
20 -import org.slf4j.LoggerFactory;  
21 import org.springframework.beans.factory.annotation.Autowired; 16 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.util.StringUtils; 17 import org.springframework.util.StringUtils;
23 import org.springframework.web.bind.annotation.*; 18 import org.springframework.web.bind.annotation.*;
@@ -25,8 +20,6 @@ import org.springframework.web.multipart.MultipartFile; @@ -25,8 +20,6 @@ import org.springframework.web.multipart.MultipartFile;
25 20
26 import java.io.File; 21 import java.io.File;
27 import java.io.FileOutputStream; 22 import java.io.FileOutputStream;
28 -import java.text.SimpleDateFormat;  
29 -import java.util.*;  
30 23
31 @RestController 24 @RestController
32 @Api("文件管理器") 25 @Api("文件管理器")
@@ -65,7 +58,11 @@ public class FileControl { @@ -65,7 +58,11 @@ public class FileControl {
65 @RequestParam("endTime") String endTime, @RequestParam("validTimeEnabled") int validTimeEnabled, @RequestParam("userType") String userType) { 58 @RequestParam("endTime") String endTime, @RequestParam("validTimeEnabled") int validTimeEnabled, @RequestParam("userType") String userType) {
66 try { 59 try {
67 if (!cmsServer.getIsDeviceOnline(deviceId)) { 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 return "0"; 66 return "0";
70 } 67 }
71 String fileName = file.getOriginalFilename();//文件名 68 String fileName = file.getOriginalFilename();//文件名
@@ -76,11 +73,10 @@ public class FileControl { @@ -76,11 +73,10 @@ public class FileControl {
76 fileOutputStream.write(file.getBytes()); 73 fileOutputStream.write(file.getBytes());
77 fileOutputStream.close(); 74 fileOutputStream.close();
78 String filePath = dest.getAbsolutePath(); 75 String filePath = dest.getAbsolutePath();
79 - FileUtils.getInstance().writeLogs("filePath:" + filePath + " card:" + card + " name:" + name + " deviceId:" + deviceId, FileUtils.sendUserInfo);  
80 long time = System.currentTimeMillis(); 76 long time = System.currentTimeMillis();
81 StudentBean studentBean = userDao.getStudentWithCard(card); 77 StudentBean studentBean = userDao.getStudentWithCard(card);
82 Integer schoolId = studentBean ==null ?null:studentBean.getSchool_id(); 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 if (new File(filePath.trim()).exists()) { 80 if (new File(filePath.trim()).exists()) {
85 String targetPath = FileUtils.picPathComp + new File(filePath).getName(); 81 String targetPath = FileUtils.picPathComp + new File(filePath).getName();
86 try { 82 try {
@@ -89,7 +85,8 @@ public class FileControl { @@ -89,7 +85,8 @@ public class FileControl {
89 e.printStackTrace(); 85 e.printStackTrace();
90 } 86 }
91 try { 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 System.out.println("time:" + (System.currentTimeMillis() - time) / 1000); 90 System.out.println("time:" + (System.currentTimeMillis() - time) / 1000);
94 return "1"; 91 return "1";
95 } catch (Exception e) { 92 } catch (Exception e) {
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java
@@ -137,7 +137,7 @@ public class UserControl { @@ -137,7 +137,7 @@ public class UserControl {
137 if (null != studentBean) { 137 if (null != studentBean) {
138 if (cmsServer.getIsDeviceOnline(devId)) { 138 if (cmsServer.getIsDeviceOnline(devId)) {
139 String cardNum = Long.parseLong(baseService.getCard(card), 16) + ""; 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 } else { 141 } else {
142 sendUserAsync.uploadImgs(targetPath, card, name, devId, startTime, endTime, 1, images2Ddevices.getUserType()); 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 package com.sincere.haikangface.control; 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 import com.sincere.haikangface.bean.Result; 3 import com.sincere.haikangface.bean.Result;
7 import com.sincere.haikangface.bean.ResultGenerator; 4 import com.sincere.haikangface.bean.ResultGenerator;
8 import com.sincere.haikangface.bean.face.AuthRecordDto; 5 import com.sincere.haikangface.bean.face.AuthRecordDto;
9 import com.sincere.haikangface.bean.face.DeviceAuthRecord; 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 import com.sincere.haikangface.dao.UserDao; 8 import com.sincere.haikangface.dao.UserDao;
13 -import com.sincere.haikangface.enums.EnumSzBusinessType;  
14 import com.sincere.haikangface.service.UserOperateService; 9 import com.sincere.haikangface.service.UserOperateService;
15 -import com.sincere.haikangface.utils.FileUtils;  
16 import com.sincere.haikangface.utils.JsonUtils; 10 import com.sincere.haikangface.utils.JsonUtils;
17 import io.swagger.annotations.ApiOperation; 11 import io.swagger.annotations.ApiOperation;
18 import lombok.extern.slf4j.Slf4j; 12 import lombok.extern.slf4j.Slf4j;
19 import org.springframework.beans.factory.annotation.Autowired; 13 import org.springframework.beans.factory.annotation.Autowired;
20 import org.springframework.http.MediaType; 14 import org.springframework.http.MediaType;
21 -import org.springframework.util.StringUtils;  
22 import org.springframework.web.bind.annotation.*; 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 * @author xuquan 19 * @author xuquan
@@ -39,14 +27,11 @@ public class UserOperateController { @@ -39,14 +27,11 @@ public class UserOperateController {
39 @Autowired 27 @Autowired
40 UserDao userDao; 28 UserDao userDao;
41 @Autowired 29 @Autowired
42 - SendUserAsync sendUserAsync;  
43 - @Autowired  
44 UserOperateService userOperateService; 30 UserOperateService userOperateService;
45 31
46 @RequestMapping(value = "createHKAuth", method = RequestMethod.POST) 32 @RequestMapping(value = "createHKAuth", method = RequestMethod.POST)
47 @ApiOperation("人脸机创建权限2.0") 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 if(userOperateService.createHKAuth(authRecordDto)){ 35 if(userOperateService.createHKAuth(authRecordDto)){
51 return ResultGenerator.genSuccessResult(); 36 return ResultGenerator.genSuccessResult();
52 }else{ 37 }else{
@@ -57,34 +42,8 @@ public class UserOperateController { @@ -57,34 +42,8 @@ public class UserOperateController {
57 private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper(); 42 private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper();
58 @RequestMapping(value = "sendHKAuth", method = RequestMethod.POST) 43 @RequestMapping(value = "sendHKAuth", method = RequestMethod.POST)
59 @ApiOperation("下发权限给设备2.0") 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 @ApiOperation("删除单卡权限2.0") 49 @ApiOperation("删除单卡权限2.0")
@@ -112,25 +71,34 @@ public class UserOperateController { @@ -112,25 +71,34 @@ public class UserOperateController {
112 return userOperateService.sendFace(schoolId,type,deviceIds); 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,8 +27,8 @@ public interface DeviceDao {
27 // @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}") 27 // @Select("select * from SZ_Attendance where IsKaoqin = #{IsKaoqin}")
28 // List<SZ_AttendanceDto> getAttensWithIsKaoqin(@Param("IsKaoqin")int IsKaoqin); 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,18 +29,12 @@ public interface UserDao {
29 */ 29 */
30 @Select("select * from HS_StudentUpdateCard where ID > #{id} and StudentType = #{StudentType} order by AddTime desc") 30 @Select("select * from HS_StudentUpdateCard where ID > #{id} and StudentType = #{StudentType} order by AddTime desc")
31 List<StudentBean> getAllStudents(@Param("id") long id, @Param("StudentType") int StudentType); 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 @Update("update SZ_V_School_Student set name = #{name} where student_id = #{student_id}") 32 @Update("update SZ_V_School_Student set name = #{name} where student_id = #{student_id}")
36 void updateTest(@Param("student_id") String student_id, @Param("name") String name); 33 void updateTest(@Param("student_id") String student_id, @Param("name") String name);
37 34
38 @Select("select Top(1) student_num from SZ_V_School_Student where student_id = #{student_id} and role_state = 1") 35 @Select("select Top(1) student_num from SZ_V_School_Student where student_id = #{student_id} and role_state = 1")
39 String getStudent_Num(@Param("student_id") String student_id); 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 @Insert("insert into TK_Question (Question,Qtype,Answer,CorrectAnswer,Analysis,State,Intime,ExamineFlag,ExamineUserId, " + 38 @Insert("insert into TK_Question (Question,Qtype,Answer,CorrectAnswer,Analysis,State,Intime,ExamineFlag,ExamineUserId, " +
45 "CreateUserId,SubjectId,SuggestionTime,DifficulteId,KnowledgeId,TestId,ChapterId,\n" + 39 "CreateUserId,SubjectId,SuggestionTime,DifficulteId,KnowledgeId,TestId,ChapterId,\n" +
46 "GradeId,SourceId,OrderId,SId,StemId,AutomaticCorrection,SchoolId) values(#{Question},#{Qtype},#{Answer},#{CorrectAnswer},#{Analysis}" + 40 "GradeId,SourceId,OrderId,SId,StemId,AutomaticCorrection,SchoolId) values(#{Question},#{Qtype},#{Answer},#{CorrectAnswer},#{Analysis}" +
@@ -262,6 +256,8 @@ public interface UserDao { @@ -262,6 +256,8 @@ public interface UserDao {
262 /**************************************** add by xuquan **************************************/ 256 /**************************************** add by xuquan **************************************/
263 DeviceAuthRecord getAuthRecord(Integer authId); 257 DeviceAuthRecord getAuthRecord(Integer authId);
264 258
  259 + Integer getAuthRecordBySchoolId(@Param("schoolId") Integer schoolId, @Param("studentType") Integer studentType,@Param("status") Integer status);
  260 +
265 void insertAuthRecord(DeviceAuthRecord record); 261 void insertAuthRecord(DeviceAuthRecord record);
266 262
267 void deleteAuthRecord(@Param("id") Integer authId); 263 void deleteAuthRecord(@Param("id") Integer authId);
@@ -274,4 +270,10 @@ public interface UserDao { @@ -274,4 +270,10 @@ public interface UserDao {
274 270
275 @Select("select clint_type from SZ_Attendance where clint_id = #{deviceId}") 271 @Select("select clint_type from SZ_Attendance where clint_id = #{deviceId}")
276 Integer getClintTypeByDeviceId(@Param("deviceId") String deviceId); 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,10 +41,24 @@ public interface EnumSzBusinessType {
41 public final int code; 41 public final int code;
42 public final String name; 42 public final String name;
43 43
  44 + public int getCode() {
  45 + return code;
  46 + }
  47 + public String getName() {
  48 + return name;
  49 + }
44 EnumStudentType(int code, String name) { 50 EnumStudentType(int code, String name) {
45 this.code = code; 51 this.code = code;
46 this.name = name; 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,24 +4,17 @@ import com.sincere.haikangface.bean.Result;
4 import com.sincere.haikangface.bean.face.AuthRecordDto; 4 import com.sincere.haikangface.bean.face.AuthRecordDto;
5 import com.sincere.haikangface.bean.face.DeviceAuthRecord; 5 import com.sincere.haikangface.bean.face.DeviceAuthRecord;
6 import com.sincere.haikangface.bean.face.PermissionBean; 6 import com.sincere.haikangface.bean.face.PermissionBean;
  7 +import com.sincere.haikangface.bean.face.SendFaceDto;
7 import org.apache.ibatis.annotations.Param; 8 import org.apache.ibatis.annotations.Param;
8 9
9 /** 10 /**
  11 + * 用户操作业务接口
10 * @author xuquan 12 * @author xuquan
11 * @date 2020/12/10 17:25 13 * @date 2020/12/10 17:25
12 */ 14 */
13 15
14 public interface UserOperateService { 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 * @param recordDto 20 * @param recordDto
@@ -30,6 +23,13 @@ public interface UserOperateService { @@ -30,6 +23,13 @@ public interface UserOperateService {
30 boolean createHKAuth(AuthRecordDto recordDto); 23 boolean createHKAuth(AuthRecordDto recordDto);
31 24
32 /** 25 /**
  26 + * 下发权限
  27 + * @param authId
  28 + * @return
  29 + */
  30 + Result sendHKAuth(Integer authId);
  31 +
  32 + /**
33 * 权限ID删除权限下发记录 33 * 权限ID删除权限下发记录
34 * @param authId 34 * @param authId
35 * @return 35 * @return
@@ -43,8 +43,54 @@ public interface UserOperateService { @@ -43,8 +43,54 @@ public interface UserOperateService {
43 */ 43 */
44 DeviceAuthRecord getAuthRecord(Integer authId); 44 DeviceAuthRecord getAuthRecord(Integer authId);
45 45
  46 + /**
  47 + * 重新下发人脸
  48 + * @param userId
  49 + * @param deviceId
  50 + * @param userType
  51 + * @return
  52 + */
46 Result againSendFace(String userId,String deviceId,Integer userType); 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 Result sendFace(String schoolId,Integer type,String deviceIds); 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,7 +3,10 @@ package com.sincere.haikangface.service.impl;
3 3
4 import com.alibaba.fastjson.JSONArray; 4 import com.alibaba.fastjson.JSONArray;
5 import com.alibaba.fastjson.JSONObject; 5 import com.alibaba.fastjson.JSONObject;
  6 +import com.google.common.util.concurrent.ThreadFactoryBuilder;
6 import com.sincere.haikangface.CMSServer; 7 import com.sincere.haikangface.CMSServer;
  8 +import com.sincere.haikangface.async.SendFaceBatchTask100;
  9 +import com.sincere.haikangface.async.SendFaceBatchTask253;
7 import com.sincere.haikangface.async.SendUserAsync; 10 import com.sincere.haikangface.async.SendUserAsync;
8 import com.sincere.haikangface.bean.BaiduFaceRecorder; 11 import com.sincere.haikangface.bean.BaiduFaceRecorder;
9 import com.sincere.haikangface.bean.SendRecordBean; 12 import com.sincere.haikangface.bean.SendRecordBean;
@@ -12,17 +15,23 @@ import com.sincere.haikangface.bean.TeacherBean; @@ -12,17 +15,23 @@ import com.sincere.haikangface.bean.TeacherBean;
12 import com.sincere.haikangface.dao.UserDao; 15 import com.sincere.haikangface.dao.UserDao;
13 import com.sincere.haikangface.enums.EnumSzBusinessType; 16 import com.sincere.haikangface.enums.EnumSzBusinessType;
14 import com.sincere.haikangface.mqtt.MqtUtils; 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 import com.sincere.haikangface.xiananDao.SendRecordDao; 22 import com.sincere.haikangface.xiananDao.SendRecordDao;
17 import lombok.extern.slf4j.Slf4j; 23 import lombok.extern.slf4j.Slf4j;
18 import org.apache.commons.lang3.StringUtils; 24 import org.apache.commons.lang3.StringUtils;
19 import org.springframework.beans.factory.annotation.Autowired; 25 import org.springframework.beans.factory.annotation.Autowired;
20 import org.springframework.beans.factory.annotation.Value; 26 import org.springframework.beans.factory.annotation.Value;
  27 +import org.springframework.scheduling.annotation.Async;
21 import org.springframework.stereotype.Service; 28 import org.springframework.stereotype.Service;
22 29
23 import java.io.File; 30 import java.io.File;
24 import java.text.SimpleDateFormat; 31 import java.text.SimpleDateFormat;
25 import java.util.*; 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,13 +99,13 @@ public class BaseService {
90 if (cmsServer.getIsDeviceOnline(deviceId)) { 99 if (cmsServer.getIsDeviceOnline(deviceId)) {
91 String cardNo = Long.parseLong(getCard(card),16)+""; 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 }else { 103 }else {
95 sendUserAsync.uploadImgs(targetPath, card, name, deviceId, startTime, endTime, validTimeEnabled, userType); 104 sendUserAsync.uploadImgs(targetPath, card, name, deviceId, startTime, endTime, validTimeEnabled, userType);
96 } 105 }
97 return true; 106 return true;
98 } catch (Exception e) { 107 } catch (Exception e) {
99 - log.error("下发人脸照失败,错误信息:"+ e.getMessage()); 108 + log.error("下发人脸照失败,错误信息:"+e);
100 return false; 109 return false;
101 } 110 }
102 } 111 }
@@ -149,91 +158,93 @@ public class BaseService { @@ -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 } else { 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 * @param faceUrl 205 * @param faceUrl
197 * @param deviceId 206 * @param deviceId
198 * @param content 207 * @param content
199 * @param userType 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,7 +350,7 @@ public class BaseService {
339 * @param card 350 * @param card
340 * @return 351 * @return
341 */ 352 */
342 - public String getCard(String card) { 353 + public static String getCard(String card) {
343 if (card.length() == 8) { 354 if (card.length() == 8) {
344 int length = card.length(); 355 int length = card.length();
345 String result = card.substring(length - 2, length) + card.substring(length - 4, length - 2) + card.substring(length - 6, length - 4) 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,4 +523,220 @@ public class BaseService {
512 //插入百度人脸记录表 523 //插入百度人脸记录表
513 userDao.insertBaiduFaceRecorder(baiduFaceRecorder); 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 package com.sincere.haikangface.service.impl; 1 package com.sincere.haikangface.service.impl;
  2 +
  3 +import com.alibaba.fastjson.JSON;
  4 +import com.fasterxml.jackson.databind.JavaType;
2 import com.sincere.haikangface.CMSServer; 5 import com.sincere.haikangface.CMSServer;
3 import com.sincere.haikangface.async.SendUserAsync; 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 import com.sincere.haikangface.bean.face.*; 11 import com.sincere.haikangface.bean.face.*;
  12 +import com.sincere.haikangface.control.UserControl;
6 import com.sincere.haikangface.dao.DeviceDao; 13 import com.sincere.haikangface.dao.DeviceDao;
7 import com.sincere.haikangface.dao.UserDao; 14 import com.sincere.haikangface.dao.UserDao;
  15 +import com.sincere.haikangface.enums.EnumSzBusinessType;
8 import com.sincere.haikangface.service.UserOperateService; 16 import com.sincere.haikangface.service.UserOperateService;
9 import com.sincere.haikangface.utils.*; 17 import com.sincere.haikangface.utils.*;
10 import com.sincere.haikangface.xiananDao.SendRecordDao; 18 import com.sincere.haikangface.xiananDao.SendRecordDao;
11 import lombok.extern.slf4j.Slf4j; 19 import lombok.extern.slf4j.Slf4j;
12 import org.apache.commons.lang3.StringUtils; 20 import org.apache.commons.lang3.StringUtils;
13 import org.springframework.beans.factory.annotation.Autowired; 21 import org.springframework.beans.factory.annotation.Autowired;
  22 +import org.springframework.scheduling.annotation.Async;
14 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
  24 +
15 import java.io.File; 25 import java.io.File;
  26 +import java.io.IOException;
  27 +import java.text.SimpleDateFormat;
16 import java.util.*; 28 import java.util.*;
17 29
18 /** 30 /**
19 - * TODO  
20 - *  
21 - * @author Administrator 31 + * 海康设备用户操作业务实现
  32 + * @author xuquan
22 * @date 2020/12/10 21:26 33 * @date 2020/12/10 21:26
23 */ 34 */
24 @Slf4j 35 @Slf4j
@@ -37,6 +48,8 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -37,6 +48,8 @@ public class UserOperateServiceImpl implements UserOperateService {
37 BaseService baseService; 48 BaseService baseService;
38 @Autowired 49 @Autowired
39 SendUserAsync sendUserAsync; 50 SendUserAsync sendUserAsync;
  51 + @Autowired
  52 + UserControl userControl;
40 53
41 private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper(); 54 private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper();
42 55
@@ -45,18 +58,20 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -45,18 +58,20 @@ public class UserOperateServiceImpl implements UserOperateService {
45 try { 58 try {
46 String sexStr = recordDto.getWeekDays().get(0).getSex(); 59 String sexStr = recordDto.getWeekDays().get(0).getSex();
47 //1学生类型,当为组时为群组iD 60 //1学生类型,当为组时为群组iD
48 - int studentType = recordDto.getStudentType(); 61 + Integer studentType = recordDto.getStudentType();
49 //学校ID 62 //学校ID
50 - int schoolId = recordDto.getSchoolId(); 63 + Integer schoolId = recordDto.getSchoolId();
51 //设备ID 64 //设备ID
52 List<String> deviceIds = recordDto.getSnList(); 65 List<String> deviceIds = recordDto.getSnList();
53 //1 学生类型 2 学生组 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 List<WeekDay> weekDay = recordDto.getWeekDays(); 71 List<WeekDay> weekDay = recordDto.getWeekDays();
59 String weekDayJson = objectMapper.toJson(weekDay); 72 String weekDayJson = objectMapper.toJson(weekDay);
  73 + //设备类型
  74 + Integer deviceType = userDao.getClintTypeByDeviceId(deviceIds.get(0));
60 String deviceStr = ""; 75 String deviceStr = "";
61 for (String sn : deviceIds) { 76 for (String sn : deviceIds) {
62 deviceStr += sn + ","; 77 deviceStr += sn + ",";
@@ -65,16 +80,15 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -65,16 +80,15 @@ public class UserOperateServiceImpl implements UserOperateService {
65 Date end = DateUtils.string2Date("2030-01-01", DateUtils.format1); 80 Date end = DateUtils.string2Date("2030-01-01", DateUtils.format1);
66 deviceStr = deviceStr.substring(0, deviceStr.length() - 1); 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 return true; 84 return true;
70 } catch (Exception e) { 85 } catch (Exception e) {
71 - e.printStackTrace();  
72 - log.error("创建权限失败"); 86 + log.error("创建权限失败,异常信息:{}",e);
73 } 87 }
74 return false; 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 DeviceAuthRecord record = new DeviceAuthRecord(); 93 DeviceAuthRecord record = new DeviceAuthRecord();
80 //学校ID 94 //学校ID
@@ -89,8 +103,14 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -89,8 +103,14 @@ public class UserOperateServiceImpl implements UserOperateService {
89 record.setStudentType(studentType); 103 record.setStudentType(studentType);
90 //性别 104 //性别
91 record.setSex(sexStr); 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 //计划状态1正常2停用 114 //计划状态1正常2停用
95 record.setState(1); 115 record.setState(1);
96 //计划下发状态1下发成功2下发失败3待下发 116 //计划下发状态1下发成功2下发失败3待下发
@@ -103,6 +123,59 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -103,6 +123,59 @@ public class UserOperateServiceImpl implements UserOperateService {
103 record.setaType(type); 123 record.setaType(type);
104 //插入权限记录表AC_DeviceAuthRecord 124 //插入权限记录表AC_DeviceAuthRecord
105 userDao.insertAuthRecord(record); 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 @Override 181 @Override
@@ -149,8 +222,8 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -149,8 +222,8 @@ public class UserOperateServiceImpl implements UserOperateService {
149 File file = new File(filePath.trim()); 222 File file = new File(filePath.trim());
150 if (!file.exists()) { 223 if (!file.exists()) {
151 log.error("文件不存在:" + filePath); 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 return ResultGenerator.genFailResult("文件不存在"); 227 return ResultGenerator.genFailResult("文件不存在");
155 } 228 }
156 //设备类型 229 //设备类型
@@ -170,7 +243,7 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -170,7 +243,7 @@ public class UserOperateServiceImpl implements UserOperateService {
170 } catch (Exception e) { 243 } catch (Exception e) {
171 log.error("图片压缩失败"); 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 if (isOk) { 247 if (isOk) {
175 return ResultGenerator.genSuccessResult(); 248 return ResultGenerator.genSuccessResult();
176 } else { 249 } else {
@@ -217,10 +290,10 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -217,10 +290,10 @@ public class UserOperateServiceImpl implements UserOperateService {
217 //设备类型 290 //设备类型
218 Integer clintType = userDao.getClintTypeByDeviceId(idLists.get(0)); 291 Integer clintType = userDao.getClintTypeByDeviceId(idLists.get(0));
219 if(clintType.intValue()== 22 || clintType.intValue()== 29){ 292 if(clintType.intValue()== 22 || clintType.intValue()== 29){
220 - sendUserAsync.uploadDHImg(schoolId,userType,deviceIds); 293 + HttpUtil.uploadDHImg(schoolId,userType,deviceIds);
221 } 294 }
222 if(clintType.intValue()== 18 || clintType.intValue()== 28){ 295 if(clintType.intValue()== 18 || clintType.intValue()== 28){
223 - sendUserAsync.uploadHkImg(schoolId,userType,deviceIds); 296 + HttpUtil.uploadHkImg(schoolId,userType,deviceIds);
224 } 297 }
225 int fileSize = filesStudent.length; 298 int fileSize = filesStudent.length;
226 int clintNum = deviceArr.length; 299 int clintNum = deviceArr.length;
@@ -238,260 +311,283 @@ public class UserOperateServiceImpl implements UserOperateService { @@ -238,260 +311,283 @@ public class UserOperateServiceImpl implements UserOperateService {
238 return ResultGenerator.genFailResult("下发失败"); 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,7 +52,6 @@ public class AlarmUtils {
52 public void deleAlarm(String strXML) { 52 public void deleAlarm(String strXML) {
53 //人脸抓拍机器 53 //人脸抓拍机器
54 if (strXML.contains("FACESNAPREPORT")) { 54 if (strXML.contains("FACESNAPREPORT")) {
55 -// System.out.println("人脸抓拍机:" + strXML);  
56 BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder(); 55 BaiduFaceRecorder baiduFaceRecorder = new BaiduFaceRecorder();
57 baiduFaceRecorder.setUploadImgUrl(strXML); 56 baiduFaceRecorder.setUploadImgUrl(strXML);
58 baiduFaceRecorder.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); 57 baiduFaceRecorder.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
@@ -61,8 +60,6 @@ public class AlarmUtils { @@ -61,8 +60,6 @@ public class AlarmUtils {
61 deviceId = deviceId.replace("DeviceID>",""); 60 deviceId = deviceId.replace("DeviceID>","");
62 deviceId = deviceId.replace("</",""); 61 deviceId = deviceId.replace("</","");
63 userDao.insertBaiduFaceRecorder(baiduFaceRecorder); 62 userDao.insertBaiduFaceRecorder(baiduFaceRecorder);
64 -// if (null != alarmCallBack)  
65 -// alarmCallBack.callBack(minorType, deviceID, cardNo, time, picDataUrlId, currTemperature);  
66 } else {//人脸识别 63 } else {//人脸识别
67 //主类型 64 //主类型
68 String majirType = strXML.substring(strXML.indexOf("MajorType"), strXML.lastIndexOf("MajorType")).trim(); 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,10 +22,7 @@ public class CompressPic {
22 int width = bufferedImage.getWidth(null); 22 int width = bufferedImage.getWidth(null);
23 int height = bufferedImage.getHeight(null); 23 int height = bufferedImage.getHeight(null);
24 long fileLength = file.length(); 24 long fileLength = file.length();
25 -// System.out.println("fileLength:" + fileLength);  
26 -// System.out.println("原始宽高:" + "width:" + width + "--height:" + height);  
27 if ((fileLength / 1024) < 200) { 25 if ((fileLength / 1024) < 200) {
28 -// System.out.println("小于200k压缩:" + "width:" + width + "--height:" + height);  
29 writeImgToFile(bufferedImage, width, height, targetPath); 26 writeImgToFile(bufferedImage, width, height, targetPath);
30 } else { 27 } else {
31 while ((fileLength / 1024) >= 200) { 28 while ((fileLength / 1024) >= 200) {
@@ -40,12 +37,9 @@ public class CompressPic { @@ -40,12 +37,9 @@ public class CompressPic {
40 width = bufferedImage1.getWidth(null); 37 width = bufferedImage1.getWidth(null);
41 height = bufferedImage1.getHeight(null); 38 height = bufferedImage1.getHeight(null);
42 fileLength = file1.length(); 39 fileLength = file1.length();
43 -// System.out.println("最终宽高:" + "width:" + width + "--height:" + height);  
44 -// System.out.println("fileLength1:" + fileLength);  
45 fileInputStream.close(); 40 fileInputStream.close();
46 } 41 }
47 } 42 }
48 -// System.out.printf("图片大小:"+fileLength/1024);  
49 fileInputStreamSrc.close(); 43 fileInputStreamSrc.close();
50 return targetPath; 44 return targetPath;
51 } 45 }
@@ -54,31 +48,18 @@ public class CompressPic { @@ -54,31 +48,18 @@ public class CompressPic {
54 try { 48 try {
55 File targetFile = new File(targetPath); 49 File targetFile = new File(targetPath);
56 if (!targetFile.exists()) targetFile.createNewFile(); 50 if (!targetFile.exists()) targetFile.createNewFile();
57 -  
58 if (width > height) { 51 if (width > height) {
59 int width1 = width; 52 int width1 = width;
60 width = height; 53 width = height;
61 height = width1; 54 height = width1;
62 } 55 }
63 -  
64 BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 56 BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
65 tag.getGraphics().drawImage(bufferedImage, 0, 0, width, height, null); // 绘制缩小后的图 57 tag.getGraphics().drawImage(bufferedImage, 0, 0, width, height, null); // 绘制缩小后的图
66 FileOutputStream deskImage = new FileOutputStream(targetPath); // 输出到文件流 58 FileOutputStream deskImage = new FileOutputStream(targetPath); // 输出到文件流
67 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(deskImage); 59 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(deskImage);
68 encoder.encode(tag); // 近JPEG编码 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 deskImage.close(); 61 deskImage.close();
80 } catch (Exception e) { 62 } catch (Exception e) {
81 -// System.out.println("读写图片:" + e.toString());  
82 e.printStackTrace(); 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,12 +3,14 @@ package com.sincere.haikangface.utils;
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONObject; 4 import com.alibaba.fastjson.JSONObject;
5 import com.sincere.haikangface.bean.face.PermissionBean; 5 import com.sincere.haikangface.bean.face.PermissionBean;
  6 +import com.sincere.haikangface.bean.face.PermissionDHBean;
6 import lombok.extern.slf4j.Slf4j; 7 import lombok.extern.slf4j.Slf4j;
7 import org.springframework.core.io.FileSystemResource; 8 import org.springframework.core.io.FileSystemResource;
8 import org.springframework.http.HttpEntity; 9 import org.springframework.http.HttpEntity;
9 import org.springframework.http.HttpHeaders; 10 import org.springframework.http.HttpHeaders;
10 import org.springframework.http.MediaType; 11 import org.springframework.http.MediaType;
11 import org.springframework.http.ResponseEntity; 12 import org.springframework.http.ResponseEntity;
  13 +import org.springframework.scheduling.annotation.Async;
12 import org.springframework.util.LinkedMultiValueMap; 14 import org.springframework.util.LinkedMultiValueMap;
13 import org.springframework.util.MultiValueMap; 15 import org.springframework.util.MultiValueMap;
14 import org.springframework.util.StringUtils; 16 import org.springframework.util.StringUtils;
@@ -93,136 +95,111 @@ public class HttpUtil { @@ -93,136 +95,111 @@ public class HttpUtil {
93 return result; 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 String endTime, int validTimeEnabled, String userType) { 110 String endTime, int validTimeEnabled, String userType) {
98 -  
99 if (!new File(filePath).exists()) { 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 public static boolean IsDeviceOnline(String deviceId) { 140 public static boolean IsDeviceOnline(String deviceId) {
137 141
138 String url = "http://120.26.116.253:8089/file/IsDeviceOnline?deviceId=" + deviceId; 142 String url = "http://120.26.116.253:8089/file/IsDeviceOnline?deviceId=" + deviceId;
139 -  
140 RestTemplate restTemplate = new RestTemplate(); 143 RestTemplate restTemplate = new RestTemplate();
141 -  
142 -// Map<String,Object> map = new HashMap<>();  
143 -  
144 -// map.put("deviceId",deviceId);  
145 -  
146 String res = restTemplate.getForObject(url, String.class); 144 String res = restTemplate.getForObject(url, String.class);
147 return res.equals("1"); 145 return res.equals("1");
148 } 146 }
149 147
  148 + /**
  149 + * 删除海康设备卡信息
  150 + * @param deviceId
  151 + * @param card
  152 + * @return
  153 + */
150 public static boolean deleteCard(String deviceId, String card) { 154 public static boolean deleteCard(String deviceId, String card) {
151 -  
152 String url = "http://120.26.116.253:8089/file/DeleteCard?deviceId=" + deviceId + "&card=" + card; 155 String url = "http://120.26.116.253:8089/file/DeleteCard?deviceId=" + deviceId + "&card=" + card;
153 -  
154 RestTemplate restTemplate = new RestTemplate(); 156 RestTemplate restTemplate = new RestTemplate();
155 -  
156 String res = restTemplate.getForObject(url, String.class); 157 String res = restTemplate.getForObject(url, String.class);
157 -  
158 return res.equals("1"); 158 return res.equals("1");
159 } 159 }
160 160
  161 + /**
  162 + * 获取海康设备卡信息
  163 + * @param deviceId
  164 + * @param card
  165 + * @return
  166 + */
161 public static boolean getCard(String deviceId, String card) { 167 public static boolean getCard(String deviceId, String card) {
162 -  
163 String url = "http://120.26.116.253:8089/file/getCard?deviceId=" + deviceId + "&card=" + card; 168 String url = "http://120.26.116.253:8089/file/getCard?deviceId=" + deviceId + "&card=" + card;
164 -  
165 RestTemplate restTemplate = new RestTemplate(); 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 public static void sendPermission2HK(PermissionBean permissionBean) { 178 public static void sendPermission2HK(PermissionBean permissionBean) {
173 try { 179 try {
174 -  
175 String url = "http://120.26.116.253:8089/file/sendPermiss"; 180 String url = "http://120.26.116.253:8089/file/sendPermiss";
176 -  
177 if (null != permissionBean) { 181 if (null != permissionBean) {
178 -  
179 RestTemplate restTemplate = new RestTemplate(); 182 RestTemplate restTemplate = new RestTemplate();
180 -  
181 HttpHeaders headers = new HttpHeaders(); 183 HttpHeaders headers = new HttpHeaders();
182 -  
183 MediaType mediaType = MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE); 184 MediaType mediaType = MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE);
184 -  
185 headers.setContentType(mediaType); 185 headers.setContentType(mediaType);
186 -  
187 HttpEntity<PermissionBean> httpEntity = new HttpEntity<>(permissionBean, headers); 186 HttpEntity<PermissionBean> httpEntity = new HttpEntity<>(permissionBean, headers);
188 -  
189 - System.out.println("PermissionBean:" + JSON.toJSONString(permissionBean));  
190 -  
191 ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); 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 } catch (Exception e) { 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 public static JSONObject sendToKB(File file,String schoolId) { 202 public static JSONObject sendToKB(File file,String schoolId) {
225 - log.info("开始请求人脸识别查询.....");  
226 String url = "http://120.26.116.253:9214/baiduapi/search/" + schoolId; 203 String url = "http://120.26.116.253:9214/baiduapi/search/" + schoolId;
227 MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>(); 204 MultiValueMap<String, Object> multivaluedMap = new LinkedMultiValueMap<>();
228 HttpHeaders headers = new HttpHeaders(); 205 HttpHeaders headers = new HttpHeaders();
@@ -235,11 +212,108 @@ public class HttpUtil { @@ -235,11 +212,108 @@ public class HttpUtil {
235 HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(multivaluedMap, headers); 212 HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(multivaluedMap, headers);
236 ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class); 213 ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
237 JSONObject jsonObject = JSON.parseObject(responseEntity.getBody()); 214 JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
238 - log.info("responseEntity:" + jsonObject.toJSONString()); 215 + log.info("发送请求,人脸识别查询,请求地址:{},返回信息:{}",url,jsonObject.toJSONString());
239 return jsonObject; 216 return jsonObject;
240 } catch (Exception e) { 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,9 +134,12 @@ public interface SendRecordDao {
134 @Param("time") String time, @Param("schoolName") String schoolName, @Param("imgPath") String imgPath, @Param("schoolId") Integer schoolId, @Param("failContent") String failContent, 134 @Param("time") String time, @Param("schoolName") String schoolName, @Param("imgPath") String imgPath, @Param("schoolId") Integer schoolId, @Param("failContent") String failContent,
135 @Param("failType") Integer failType, @Param("userType") Integer userType, @Param("deviceType") Integer deviceType,Integer status); 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 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); 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 @Update("update Face_SendRecord set time = #{time},imgPath= #{faceUrl},Name = #{Name},status = 1, failType=null, failContent = null where deviceID = #{deviceID} and Num = #{Num}") 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 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); 141 void updateFaceSuccessRecord(@Param("deviceID") String deviceId, @Param("Num") String card, @Param("time") String time, @Param("faceUrl") String faceUrl, @Param("Name") String name, @Param("userId") String userId);
  142 +
  143 + @Select("select * from Face_SendRecord where schoolId = #{schoolId} and status =2")
  144 + List<SendRecordBean> getFailRecord(@Param("schoolId") Integer schoolId);
142 } 145 }
cloud/haikangface/src/main/resources/application.yaml
@@ -2,6 +2,8 @@ server: @@ -2,6 +2,8 @@ server:
2 port: 8089 2 port: 8089
3 3
4 spring: 4 spring:
  5 + profiles:
  6 + active: dev
5 application: 7 application:
6 name: haikangserver 8 name: haikangserver
7 datasource: 9 datasource:
cloud/haikangface/src/main/resources/logback-spring.xml 0 → 100644
@@ -0,0 +1,54 @@ @@ -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 \ No newline at end of file 55 \ No newline at end of file
cloud/haikangface/src/main/resources/mapper/usermapper.xml
@@ -47,6 +47,14 @@ @@ -47,6 +47,14 @@
47 select * from AC_DeviceAuthRecord where id = #{id} 47 select * from AC_DeviceAuthRecord where id = #{id}
48 </select> 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 <update id="deleteAuthRecord"> 58 <update id="deleteAuthRecord">
51 update AC_DeviceAuthRecord set State = 0 where id = #{id} 59 update AC_DeviceAuthRecord set State = 0 where id = #{id}
52 </update> 60 </update>
@@ -62,4 +70,33 @@ @@ -62,4 +70,33 @@
62 <select id="getTeacherByUserId" resultType="com.sincere.haikangface.bean.StudentBean" parameterType="java.lang.String"> 70 <select id="getTeacherByUserId" resultType="com.sincere.haikangface.bean.StudentBean" parameterType="java.lang.String">
63 select Top(1) * from SZ_V_School_Teacher where user_id = #{userId} 71 select Top(1) * from SZ_V_School_Teacher where user_id = #{userId}
64 </select> 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 </mapper> 102 </mapper>