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