Commit f6c2934ebcb6a58efdd2f3a213647c6ba4350c1c
1 parent
8c4743b8
Exists in
master
大华设备对接艺校考勤
Showing
14 changed files
with
456 additions
and
170 deletions
Show diff stats
cloud/dahua/src/main/java/com/example/dahua/MyTask.java
| ... | ... | @@ -220,6 +220,9 @@ public class MyTask implements ApplicationRunner { |
| 220 | 220 | String deviceId = ""; |
| 221 | 221 | try { |
| 222 | 222 | deviceId = new String(buffer1, "GBK").trim(); |
| 223 | + log.info("设备GBK心跳:" + deviceId); | |
| 224 | + deviceId = new String(buffer1, "UTF-8").trim(); | |
| 225 | + log.info("设备UTF-8心跳:" + deviceId); | |
| 223 | 226 | } catch (UnsupportedEncodingException e) { |
| 224 | 227 | e.printStackTrace(); |
| 225 | 228 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/async/SendUserInfoTask2.java
| ... | ... | @@ -25,6 +25,7 @@ import org.springframework.util.StringUtils; |
| 25 | 25 | |
| 26 | 26 | import java.io.File; |
| 27 | 27 | import java.text.SimpleDateFormat; |
| 28 | +import java.util.ArrayList; | |
| 28 | 29 | import java.util.Calendar; |
| 29 | 30 | import java.util.Date; |
| 30 | 31 | import java.util.List; |
| ... | ... | @@ -183,10 +184,11 @@ public class SendUserInfoTask2 { |
| 183 | 184 | String studentId = userInfoBean.getStudent_id(); |
| 184 | 185 | //学生卡号 |
| 185 | 186 | String studentNum = userInfoBean.getStudent_num(); |
| 187 | + //班级ID | |
| 188 | + String classId = userInfoBean.getClass_id(); | |
| 189 | + Integer studentType = userInfoBean.getStudent_type(); | |
| 186 | 190 | //学生姓名 |
| 187 | 191 | String userName = userInfoBean.getName(); |
| 188 | - //设备类型:默认为大华人脸机 | |
| 189 | - int deviceType = EnumDeviceType.DH_FACE.deviceType; | |
| 190 | 192 | |
| 191 | 193 | int userType2 = Integer.parseInt(userType); |
| 192 | 194 | //下发记录 |
| ... | ... | @@ -209,12 +211,21 @@ public class SendUserInfoTask2 { |
| 209 | 211 | String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime()); |
| 210 | 212 | String channel=""; |
| 211 | 213 | 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); | |
| 214 | + //通道号:先根据学生类型获取,若不存在在根据群组id获取 | |
| 215 | + channel = getAuthChannelByStudentType(Integer.parseInt(schoolId),studentType,deviceId); | |
| 216 | + if(StringUtils.isEmpty(channel)){ | |
| 217 | + log.error("学生类型【{}】无对应权限通道。",studentType); | |
| 218 | + channel = getAuthChannelByClassId(Integer.parseInt(schoolId),Integer.parseInt(classId),deviceId); | |
| 219 | + } | |
| 220 | + if(StringUtils.isEmpty(channel)){ | |
| 221 | + //设备不在线 | |
| 222 | + sendRecordBean.setFailType(EnumSendFaceType.AUTH_NOT_SET.code); | |
| 223 | + sendRecordBean.setFailContent(EnumSendFaceType.AUTH_NOT_SET.message); | |
| 224 | + baseService.sendFailRecord(sendRecordBean,channel); | |
| 225 | + return; | |
| 226 | + } | |
| 217 | 227 | } |
| 228 | + | |
| 218 | 229 | /** |
| 219 | 230 | * 下发升级二代接口,动态库libs下win64,更新为官方最新版sdk add by xuquan 2020-11-23 |
| 220 | 231 | * 注:用户下发逻辑: |
| ... | ... | @@ -234,167 +245,127 @@ public class SendUserInfoTask2 { |
| 234 | 245 | //登录设备 |
| 235 | 246 | NetSDKLib.LLong loginHandleLong = MyTask.lLongSendMap.get(attendanceBean.getClint_id()); |
| 236 | 247 | log.info("设备ID: {},设备登录句柄: {}",attendanceBean.getClint_id(),loginHandleLong); |
| 237 | - | |
| 238 | 248 | //若设备不在线时,且人脸下发失败表中存在记录,则执行修改下发失败状态为:设备不在线 |
| 239 | 249 | if (loginHandleLong == null) { |
| 240 | - log.info("设备不在线, 设备ID: {} ",attendanceBean.getClint_id() ); | |
| 241 | - FileUtils.getInstance().writeLogs("设备不在线:" + attendanceBean.getClint_id(), FileUtils.devices); | |
| 242 | 250 | //设备不在线 |
| 243 | 251 | sendRecordBean.setFailType(EnumSendFaceType.NOT_ONLINE_DEVICE.code); |
| 244 | 252 | sendRecordBean.setFailContent(EnumSendFaceType.NOT_ONLINE_DEVICE.message); |
| 245 | - //判断该学校设备ID对应失败记录是否存在:Face_SendFail | |
| 246 | - deviceId = sendRecordDao.getFailIsExit(deviceId, attendanceBean.getSchool_id()); | |
| 247 | - if (!StringUtils.isEmpty(deviceId)) { | |
| 248 | - sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code); | |
| 249 | - sendRecordBean.setFailContent(EnumSendFaceType.NOT_ONLINE_DEVICE.message); | |
| 250 | - baseService.sendFailRecord(sendRecordBean,channel); | |
| 251 | - } | |
| 253 | + baseService.sendFailRecord(sendRecordBean,channel); | |
| 254 | + log.info("设备不在线, 设备ID: {} ",attendanceBean.getClint_id() ); | |
| 255 | + return; | |
| 256 | + } | |
| 257 | + | |
| 258 | + log.info("=================开始执行下发人脸及卡号任务================="); | |
| 259 | + //卡号取反 | |
| 260 | + String cardNum =""; | |
| 261 | + if(attendanceBean.getClint_id().startsWith("ytj")&&Integer.parseInt(attendanceBean.getSchool_id())!=126 | |
| 262 | + &&Integer.parseInt(attendanceBean.getSchool_id())!=393) { | |
| 263 | + cardNum = studentNum; | |
| 252 | 264 | } else { |
| 253 | - log.info("=================开始执行下发人脸及卡号任务================="); | |
| 254 | - //卡号取反 | |
| 255 | - String cardNum =""; | |
| 256 | - if(attendanceBean.getClint_id().startsWith("ytj")&&Integer.parseInt(attendanceBean.getSchool_id())!=126 | |
| 257 | - &&Integer.parseInt(attendanceBean.getSchool_id())!=393) { | |
| 258 | - cardNum = studentNum; | |
| 259 | - } else { | |
| 260 | - cardNum = cardNo(studentNum); | |
| 261 | - } | |
| 262 | - if(attendanceBean.getClint_id().startsWith("ytj")){ | |
| 263 | - deviceType= EnumDeviceType.DH_FACE_YTJ.deviceType; | |
| 264 | - sendRecordBean.setDeviceType(deviceType); | |
| 265 | - } | |
| 266 | - try{ | |
| 267 | - /** | |
| 268 | - * recordNo 不为空存在下发记录集编号,直接修改执行人脸信息(二代升级接口,此处不需要修改用户信息) | |
| 269 | - */ | |
| 270 | - if (!StringUtils.isEmpty(recordNo)) { | |
| 271 | - //修改用户信息 | |
| 272 | - bUserFlags = GateModule2.addUser(userId,userName,userType2,"123456",channel,startTime,endTime,loginHandleLong); | |
| 273 | - //修改卡 | |
| 274 | - bCardFlags = GateModule2.modifyCard(userId,cardNum,loginHandleLong); | |
| 275 | - //修改人脸 | |
| 276 | - bFaceFalgs = GateModule2.modifyFace(userId,facePath,loginHandleLong); | |
| 277 | - if(bFaceFalgs != 0 || bCardFlags !=0){ | |
| 278 | - //未知错误、对返回数据校验出错,执行删除用户,重新下发 | |
| 279 | - if(bFaceFalgs == EnumSzBusinessType.EnumOperateErrorType.ONE.code || bFaceFalgs == EnumSzBusinessType.EnumOperateErrorType.ERR_21.code|| | |
| 280 | - bCardFlags == EnumSzBusinessType.EnumOperateErrorType.ONE.code || bCardFlags == EnumSzBusinessType.EnumOperateErrorType.ERR_21.code){ | |
| 281 | - if(GateModule2.deleteUser(userId,loginHandleLong) == 0){ | |
| 282 | - bUserFlags = GateModule2.addUser(userId,userName,userType2,"123456",channel,startTime,endTime,loginHandleLong); | |
| 283 | - //新增卡 | |
| 284 | - bCardFlags = GateModule2.addCard(userId,cardNum,loginHandleLong); | |
| 285 | - //新增人脸 | |
| 286 | - bFaceFalgs = GateModule2.addFace(userId,facePath,loginHandleLong); | |
| 287 | - } | |
| 265 | + cardNum = cardNo(studentNum); | |
| 266 | + } | |
| 267 | + //设备类型:默认为大华人脸机 | |
| 268 | + int deviceType = EnumDeviceType.DH_FACE.deviceType; | |
| 269 | + if(attendanceBean.getClint_id().startsWith("ytj")){ | |
| 270 | + deviceType= EnumDeviceType.DH_FACE_YTJ.deviceType; | |
| 271 | + sendRecordBean.setDeviceType(deviceType); | |
| 272 | + } | |
| 273 | + try{ | |
| 274 | + /** | |
| 275 | + * recordNo 不为空存在下发记录集编号,直接修改执行人脸信息(二代升级接口,此处不需要修改用户信息) | |
| 276 | + */ | |
| 277 | + if (!StringUtils.isEmpty(recordNo)) { | |
| 278 | + //修改用户信息 | |
| 279 | + bUserFlags = GateModule2.addUser(userId,userName,userType2,"123456",channel,startTime,endTime,loginHandleLong); | |
| 280 | + //修改卡 | |
| 281 | + bCardFlags = GateModule2.modifyCard(userId,cardNum,loginHandleLong); | |
| 282 | + //修改人脸 | |
| 283 | + bFaceFalgs = GateModule2.modifyFace(userId,facePath,loginHandleLong); | |
| 284 | + if(bFaceFalgs != 0 || bCardFlags !=0){ | |
| 285 | + //未知错误、对返回数据校验出错,执行删除用户,重新下发 | |
| 286 | + if(bFaceFalgs == EnumSzBusinessType.EnumOperateErrorType.ONE.code || bFaceFalgs == EnumSzBusinessType.EnumOperateErrorType.ERR_21.code|| | |
| 287 | + bCardFlags == EnumSzBusinessType.EnumOperateErrorType.ONE.code || bCardFlags == EnumSzBusinessType.EnumOperateErrorType.ERR_21.code){ | |
| 288 | + if(GateModule2.deleteUser(userId,loginHandleLong) == 0){ | |
| 289 | + bUserFlags = GateModule2.addUser(userId,userName,userType2,"123456",channel,startTime,endTime,loginHandleLong); | |
| 290 | + //新增卡 | |
| 291 | + bCardFlags = GateModule2.addCard(userId,cardNum,loginHandleLong); | |
| 292 | + //新增人脸 | |
| 293 | + bFaceFalgs = GateModule2.addFace(userId,facePath,loginHandleLong); | |
| 288 | 294 | } |
| 289 | 295 | } |
| 290 | - } else { | |
| 291 | - //新增用户信息 | |
| 292 | - bUserFlags = GateModule2.addUser(userId,userName,userType2,"123456",channel,startTime,endTime,loginHandleLong); | |
| 293 | - //新增卡 | |
| 294 | - bCardFlags = GateModule2.addCard(userId,cardNum,loginHandleLong); | |
| 295 | - //新增人脸 | |
| 296 | - bFaceFalgs = GateModule2.addFace(userId,facePath,loginHandleLong); | |
| 297 | - | |
| 298 | - //新增用户、卡、人脸信息都成功,则新增记录集信息,默认为1 | |
| 299 | - if (bCardFlags == 0 && bFaceFalgs ==0 && bUserFlags ==0) { | |
| 300 | - userDao.saveRecordNo(userId,1, userName, attendanceBean.getClint_id()); | |
| 301 | - } | |
| 302 | 296 | } |
| 303 | - } catch (RuntimeException e) { | |
| 304 | - log.error("下发异常:异常错误信息msg: {}",e); | |
| 305 | - continue; | |
| 306 | - } | |
| 307 | - /** | |
| 308 | - * 人脸和卡都下发成功 | |
| 309 | - */ | |
| 310 | - if (bUserFlags ==0 && bCardFlags ==0 && bFaceFalgs==0) { | |
| 311 | - FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); | |
| 312 | - log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean)); | |
| 313 | - //保存成功记录 | |
| 314 | - baseService.sendSuccessRecord(sendRecordBean,channel); | |
| 315 | - } | |
| 316 | - /** | |
| 317 | - * 人脸和卡都下发失败 | |
| 318 | - */ | |
| 319 | - if (bUserFlags !=0 && bFaceFalgs != 0 && bCardFlags !=0) { | |
| 320 | - FileUtils.getInstance().writeLogs("下发用户人脸和卡号失败: 卡号:" + cardNum + "用户ID: " + userId + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt); | |
| 321 | - log.info("下发用户人脸和卡号失败, sendRecordBean: "+ JSON.toJSONString(sendRecordBean)); | |
| 322 | - //失败信息 | |
| 323 | - String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); | |
| 324 | - sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code); | |
| 325 | - sendRecordBean.setFailContent(failContent); | |
| 326 | - baseService.sendFailRecord(sendRecordBean,channel); | |
| 327 | - } | |
| 328 | - /** | |
| 329 | - * 下发卡号成功,下发人脸失败, | |
| 330 | - */ | |
| 331 | - if (bUserFlags ==0 && bCardFlags !=0 && bFaceFalgs !=0) { | |
| 332 | - FileUtils.getInstance().writeLogs("下发卡号成功,下发人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt); | |
| 333 | - log.info("下发卡号成功,下发人脸失败, sendRecordBean: " + JSON.toJSONString(sendRecordBean)); | |
| 334 | - //失败信息 | |
| 335 | - String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); | |
| 336 | - sendRecordBean.setFailType(EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code); | |
| 337 | - sendRecordBean.setFailContent(failContent); | |
| 338 | - baseService.sendFailRecord(sendRecordBean,channel); | |
| 339 | - } | |
| 340 | - /** | |
| 341 | - * 下发卡号失败,下发人脸成功, | |
| 342 | - */ | |
| 343 | - if (bUserFlags ==0 && bCardFlags == 0 && bFaceFalgs !=0) { | |
| 344 | - FileUtils.getInstance().writeLogs("卡信息已存在,下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); | |
| 345 | - //失败信息 | |
| 346 | - String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); | |
| 347 | - sendRecordBean.setFailType(EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code); | |
| 348 | - sendRecordBean.setFailContent(failContent); | |
| 349 | - baseService.sendFailRecord(sendRecordBean,channel); | |
| 297 | + } else { | |
| 298 | + //新增用户信息 | |
| 299 | + bUserFlags = GateModule2.addUser(userId,userName,userType2,"123456",channel,startTime,endTime,loginHandleLong); | |
| 300 | + //新增卡 | |
| 301 | + bCardFlags = GateModule2.addCard(userId,cardNum,loginHandleLong); | |
| 302 | + //新增人脸 | |
| 303 | + bFaceFalgs = GateModule2.addFace(userId,facePath,loginHandleLong); | |
| 304 | + | |
| 305 | + //新增用户、卡、人脸信息都成功,则新增记录集信息,默认为1 | |
| 306 | + if (bCardFlags == 0 && bFaceFalgs ==0 && bUserFlags ==0) { | |
| 307 | + userDao.saveRecordNo(userId,1, userName, attendanceBean.getClint_id()); | |
| 308 | + } | |
| 350 | 309 | } |
| 310 | + } catch (RuntimeException e) { | |
| 311 | + log.error("下发异常:异常错误信息msg: {}",e); | |
| 312 | + continue; | |
| 351 | 313 | } |
| 352 | - } | |
| 353 | - | |
| 354 | - | |
| 355 | - } | |
| 356 | - | |
| 357 | - private static JsonUtils objectMapper = JsonUtils.nonEmptyMapper(); | |
| 358 | - | |
| 359 | - /** | |
| 360 | - * 解析权限模板、获取下发通道号 | |
| 361 | - * @param schoolId | |
| 362 | - * @param studentType | |
| 363 | - * @return | |
| 364 | - */ | |
| 365 | - private String analysisPermission(int schoolId, String studentType){ | |
| 366 | - if(StringUtils.isEmpty(studentType)){ | |
| 367 | - return ""; | |
| 368 | - } | |
| 369 | - List<PermissionFaceBean> permissionFaceBeans = permissFaceService.getPermissionList(schoolId); | |
| 370 | - String channel =""; | |
| 371 | - if(permissionFaceBeans.size()>0){ | |
| 372 | - for(PermissionFaceBean permissionFaceBean : permissionFaceBeans){ | |
| 373 | - String json = permissionFaceBean.getPermissionJson(); | |
| 374 | - PermissionBean permissionBean = objectMapper.fromJson(json,PermissionBean.class); | |
| 375 | - //学生考勤类型 1:通校生,2:住校生,3:全部 | |
| 376 | - String studentTypeStr = permissionBean.getStudentType(); | |
| 377 | - if(studentTypeStr.indexOf(studentType)!=-1){ | |
| 378 | - channel= permissionFaceBean.getChannel(); | |
| 379 | - } | |
| 314 | + /** | |
| 315 | + * 人脸和卡都下发成功 | |
| 316 | + */ | |
| 317 | + if (bUserFlags ==0 && bCardFlags ==0 && bFaceFalgs==0) { | |
| 318 | + FileUtils.getInstance().writeLogs("下发人脸和卡号成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); | |
| 319 | + log.info("下发人脸和卡号成功, sendRecordBean: "+ JSON.toJSONString(sendRecordBean)); | |
| 320 | + //保存成功记录 | |
| 321 | + baseService.sendSuccessRecord(sendRecordBean,channel); | |
| 322 | + } | |
| 323 | + /** | |
| 324 | + * 人脸和卡都下发失败 | |
| 325 | + */ | |
| 326 | + if (bUserFlags !=0 && bFaceFalgs != 0 && bCardFlags !=0) { | |
| 327 | + FileUtils.getInstance().writeLogs("下发用户人脸和卡号失败: 卡号:" + cardNum + "用户ID: " + userId + " loginHandleLong: " + loginHandleLong, FileUtils.sendUserErrTxt); | |
| 328 | + log.info("下发用户人脸和卡号失败, sendRecordBean: "+ JSON.toJSONString(sendRecordBean)); | |
| 329 | + //失败信息 | |
| 330 | + String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); | |
| 331 | + sendRecordBean.setFailType(EnumSendFaceType.FACE_AND_CARD_FAIL.code); | |
| 332 | + sendRecordBean.setFailContent(failContent); | |
| 333 | + baseService.sendFailRecord(sendRecordBean,channel); | |
| 334 | + } | |
| 335 | + /** | |
| 336 | + * 下发卡号成功,下发人脸失败, | |
| 337 | + */ | |
| 338 | + if (bUserFlags ==0 && bCardFlags !=0 && bFaceFalgs !=0) { | |
| 339 | + FileUtils.getInstance().writeLogs("下发卡号成功,下发人脸失败:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserErrTxt); | |
| 340 | + log.info("下发卡号成功,下发人脸失败, sendRecordBean: " + JSON.toJSONString(sendRecordBean)); | |
| 341 | + //失败信息 | |
| 342 | + String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); | |
| 343 | + sendRecordBean.setFailType(EnumSendFaceType.FACE_FAIL_CARD_SUCCESS.code); | |
| 344 | + sendRecordBean.setFailContent(failContent); | |
| 345 | + baseService.sendFailRecord(sendRecordBean,channel); | |
| 380 | 346 | } |
| 381 | - if(StringUtils.isEmpty(channel)){ | |
| 382 | - log.warn("未获取到学校权限通道号!"); | |
| 383 | - return ""; | |
| 347 | + /** | |
| 348 | + * 下发卡号失败,下发人脸成功, | |
| 349 | + */ | |
| 350 | + if (bUserFlags ==0 && bCardFlags == 0 && bFaceFalgs !=0) { | |
| 351 | + FileUtils.getInstance().writeLogs("卡信息已存在,下发人脸成功:" + cardNum + " " + attendanceBean.getClint_id(), FileUtils.sendUserSucTxt); | |
| 352 | + //失败信息 | |
| 353 | + String failContent = analysisErrorMsg(bUserFlags,bFaceFalgs,bCardFlags); | |
| 354 | + sendRecordBean.setFailType(EnumSendFaceType.FACE_SUCCESS_CARD_FAIl.code); | |
| 355 | + sendRecordBean.setFailContent(failContent); | |
| 356 | + baseService.sendFailRecord(sendRecordBean,channel); | |
| 384 | 357 | } |
| 385 | - return channel; | |
| 386 | 358 | } |
| 387 | - return channel; | |
| 388 | 359 | } |
| 389 | 360 | |
| 390 | 361 | /** |
| 391 | - * 获取学生时段类型2.0 | |
| 362 | + * 根据学生类型获取学生时段类型 | |
| 392 | 363 | * @param schoolId |
| 393 | 364 | * @param studentType |
| 394 | 365 | * @param deviceId |
| 395 | 366 | * @return |
| 396 | 367 | */ |
| 397 | - private String analysisAuthChannel(Integer schoolId,Integer studentType,String deviceId){ | |
| 368 | + private String getAuthChannelByStudentType(Integer schoolId,Integer studentType,String deviceId){ | |
| 398 | 369 | if(StringUtils.isEmpty(studentType) || StringUtils.isEmpty(schoolId)){ |
| 399 | 370 | return ""; |
| 400 | 371 | } |
| ... | ... | @@ -407,16 +378,46 @@ public class SendUserInfoTask2 { |
| 407 | 378 | //学生考勤类型 1:通校生,2:住校生,3:全部 |
| 408 | 379 | Integer sType = authRecord.getStudentType(); |
| 409 | 380 | log.info("学生类型:{},设备ID:{}",sType,deviceId); |
| 410 | - if(deviceIds.indexOf(deviceId)!=-1 && (studentType.intValue() == sType.intValue() || sType.intValue() == 3)){ | |
| 381 | + if(deviceIds.indexOf(deviceId)!=-1 && studentType.intValue() == sType.intValue()){ | |
| 411 | 382 | channel= authRecord.getShiduan(); |
| 412 | 383 | log.info("通道号:"+channel); |
| 384 | + return channel; | |
| 413 | 385 | } |
| 414 | 386 | } |
| 415 | - if(StringUtils.isEmpty(channel)){ | |
| 416 | - log.warn("未获取到学校权限通道号!"); | |
| 417 | - return ""; | |
| 387 | + } | |
| 388 | + return channel; | |
| 389 | + } | |
| 390 | + | |
| 391 | + /** | |
| 392 | + * 根据班级id获取学生时段 | |
| 393 | + * @param schoolId | |
| 394 | + * @param classId | |
| 395 | + * @param deviceId | |
| 396 | + * @return | |
| 397 | + */ | |
| 398 | + private String getAuthChannelByClassId(Integer schoolId,Integer classId,String deviceId){ | |
| 399 | + if(StringUtils.isEmpty(classId) || StringUtils.isEmpty(schoolId)) { | |
| 400 | + return ""; | |
| 401 | + } | |
| 402 | + List<Integer> groups = userDao.getGroupByClassId(classId); | |
| 403 | + String channel =""; | |
| 404 | + if(groups.size()>0){ | |
| 405 | + List<DeviceAuthRecord> result = new ArrayList<>(); | |
| 406 | + groups.stream().distinct().forEach(s -> { | |
| 407 | + List<DeviceAuthRecord> authRecords = userDao.getAuthRecord(schoolId,s); | |
| 408 | + result.addAll(authRecords); | |
| 409 | + }); | |
| 410 | + if(result.size()>0){ | |
| 411 | + for(DeviceAuthRecord s : result){ | |
| 412 | + String deviceIds = s.getSno(); | |
| 413 | + channel= s.getShiduan(); | |
| 414 | + log.info("学生类型:{},设备ID:{}",deviceId); | |
| 415 | + if(deviceIds.indexOf(deviceId)!=-1 ){ | |
| 416 | + log.info("通道号:"+channel); | |
| 417 | + return channel; | |
| 418 | + } | |
| 419 | + } | |
| 418 | 420 | } |
| 419 | - return channel; | |
| 420 | 421 | } |
| 421 | 422 | return channel; |
| 422 | 423 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/bean/UserInfoBean.java
| ... | ... | @@ -26,6 +26,8 @@ public class UserInfoBean implements Serializable { |
| 26 | 26 | |
| 27 | 27 | private String parentMobile; |
| 28 | 28 | |
| 29 | + private Integer student_type; | |
| 30 | + | |
| 29 | 31 | public String getClass_id() { |
| 30 | 32 | return class_id; |
| 31 | 33 | } |
| ... | ... | @@ -114,6 +116,14 @@ public class UserInfoBean implements Serializable { |
| 114 | 116 | this.parentMobile = parentMobile; |
| 115 | 117 | } |
| 116 | 118 | |
| 119 | + public Integer getStudent_type() { | |
| 120 | + return student_type; | |
| 121 | + } | |
| 122 | + | |
| 123 | + public void setStudent_type(Integer student_type) { | |
| 124 | + this.student_type = student_type; | |
| 125 | + } | |
| 126 | + | |
| 117 | 127 | @Override |
| 118 | 128 | public String toString() { |
| 119 | 129 | return "UserInfoBean{" + | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/dao/UserDao.java
| ... | ... | @@ -279,4 +279,6 @@ public interface UserDao { |
| 279 | 279 | List<String> queryStudentIdList(@Param("schoolId") Integer schoolId,@Param("roomId")Integer roomId); |
| 280 | 280 | |
| 281 | 281 | List<StudentBean> getStudentByClassId(@Param("schoolId") int schoolId,@Param("classIds") List<Integer> classIds); |
| 282 | + | |
| 283 | + List<Integer> getGroupByClassId(@Param("classId") Integer classId); | |
| 282 | 284 | } | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/enums/EnumSendFaceType.java
| ... | ... | @@ -13,7 +13,8 @@ public enum EnumSendFaceType { |
| 13 | 13 | FACE_AND_CARD_FAIL(3, "人脸信息、卡信息下发失败"), |
| 14 | 14 | FACE_FAIL_CARD_SUCCESS(4, "人脸信息下发失败,卡信息下发成功"), |
| 15 | 15 | FACE_SUCCESS_CARD_FAIl(5, "人脸信息下发成功,卡信息下发失败"), |
| 16 | - TIME_INTERVAL_ERROR(6, "刷卡时段验证错误"); | |
| 16 | + TIME_INTERVAL_ERROR(6, "刷卡时段验证错误"), | |
| 17 | + AUTH_NOT_SET(7, "权限时段未设置"); | |
| 17 | 18 | |
| 18 | 19 | public final int code; |
| 19 | 20 | public final String message; | ... | ... |
cloud/dahua/src/main/java/com/example/dahua/module/GateModule2.java
| ... | ... | @@ -120,7 +120,7 @@ public class GateModule2 { |
| 120 | 120 | users[i].nTimeSectionNo[0] = 255; // 表示第一个门全天有效 |
| 121 | 121 | users[i].nTimeSectionNo[1] = 255; // 表示第二个门全天有效 |
| 122 | 122 | }else { |
| 123 | - //此学校不存在权限设置默认为全天有效 | |
| 123 | + //此学校不存在权限,为老师类型 设置默认为全天有效 | |
| 124 | 124 | if(StringUtils.isEmpty(channel)){ |
| 125 | 125 | users[i].nTimeSectionNo[0] = 255; // 表示第一个门全天有效 |
| 126 | 126 | users[i].nTimeSectionNo[1] = 255; // 表示第二个门全天有效 | ... | ... |
cloud/dahua/src/main/resources/mapper/usermapper.xml
| ... | ... | @@ -32,7 +32,7 @@ |
| 32 | 32 | <select id="getAuthRecord" resultType="com.example.dahua.bean.DeviceAuthRecord"> |
| 33 | 33 | select * from AC_DeviceAuthRecord where State = 1 and GrantState = 1 and SchoolId = #{schoolId} |
| 34 | 34 | <if test="studentType != null"> |
| 35 | - and (StudentType = #{studentType} or StudentType =3) | |
| 35 | + and StudentType = #{studentType} | |
| 36 | 36 | </if> |
| 37 | 37 | </select> |
| 38 | 38 | |
| ... | ... | @@ -60,4 +60,14 @@ |
| 60 | 60 | and student_num != '' and photo !='' |
| 61 | 61 | </select> |
| 62 | 62 | |
| 63 | + <select id="getGroupByClassId" resultType="java.lang.Integer"> | |
| 64 | + SELECT | |
| 65 | + Pid | |
| 66 | + FROM | |
| 67 | + SZ_OneCardGrouping | |
| 68 | + WHERE | |
| 69 | + ClassId = #{classId} | |
| 70 | + AND state = 1 | |
| 71 | + </select> | |
| 72 | + | |
| 63 | 73 | </mapper> |
| 64 | 74 | \ No newline at end of file | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserOperateController.java
| ... | ... | @@ -146,12 +146,9 @@ public class UserOperateController { |
| 146 | 146 | return userOperateService.deleteFaceBySchoolId(schoolId,deviceIds); |
| 147 | 147 | } |
| 148 | 148 | |
| 149 | - | |
| 150 | - public static void main(String[] args) { | |
| 151 | - String photo = "http://campus.myjxt.com//f0i5l7e5/0/alluser/20171008/aa26754eb6f24fceb8881d50ee37cdf3.jpg"; | |
| 152 | - //以学籍号为名的文件名 | |
| 153 | - String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); | |
| 154 | - System.out.println(fileName); | |
| 155 | - System.out.println(fileName.split(".")[0]); | |
| 149 | + @ApiOperation(value = "删除指定学校下无效人脸") | |
| 150 | + @RequestMapping(value = "checkFaceSend", method = RequestMethod.GET) | |
| 151 | + public void checkFaceSend(){ | |
| 152 | + userOperateService.checkFaceSend(); | |
| 156 | 153 | } |
| 157 | 154 | } | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java
| ... | ... | @@ -2,6 +2,7 @@ package com.sincere.haikangface.dao; |
| 2 | 2 | |
| 3 | 3 | import com.sincere.haikangface.bean.*; |
| 4 | 4 | import com.sincere.haikangface.bean.face.DeviceAuthRecord; |
| 5 | +import com.sincere.haikangface.bean.test.SaveStudentBak; | |
| 5 | 6 | import org.apache.ibatis.annotations.*; |
| 6 | 7 | import org.springframework.stereotype.Repository; |
| 7 | 8 | |
| ... | ... | @@ -287,4 +288,10 @@ public interface UserDao { |
| 287 | 288 | StudentBean getTeacherWithCard(@Param("teacher_num") String teacher_num,@Param("schoolId") Integer schoolId); |
| 288 | 289 | |
| 289 | 290 | void insertCard(UpdateCardBean bean); |
| 291 | + | |
| 292 | + void insertStudent(SaveStudentBak studentBak); | |
| 293 | + | |
| 294 | + void updateStudent(@Param("id") Integer id); | |
| 295 | + | |
| 296 | + List<SaveStudentBak> selectStudentList(); | |
| 290 | 297 | } | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/service/UserOperateService.java
cloud/haikangface/src/main/java/com/sincere/haikangface/service/impl/UserOperateServiceImpl.java
| ... | ... | @@ -6,6 +6,7 @@ import com.sincere.haikangface.CMSServer; |
| 6 | 6 | import com.sincere.haikangface.async.SendUserAsync; |
| 7 | 7 | import com.sincere.haikangface.bean.*; |
| 8 | 8 | import com.sincere.haikangface.bean.face.*; |
| 9 | +import com.sincere.haikangface.bean.test.SaveStudentBak; | |
| 9 | 10 | import com.sincere.haikangface.dao.DeviceDao; |
| 10 | 11 | import com.sincere.haikangface.dao.UserDao; |
| 11 | 12 | import com.sincere.haikangface.enums.EnumSzBusinessType; |
| ... | ... | @@ -71,13 +72,9 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 71 | 72 | String weekDayJson = objectMapper.toJson(weekDay); |
| 72 | 73 | //设备类型 |
| 73 | 74 | Integer deviceType = userDao.getClintTypeByDeviceId(deviceIds.get(0)); |
| 74 | - String deviceStr = ""; | |
| 75 | - for (String sn : deviceIds) { | |
| 76 | - deviceStr += sn + ","; | |
| 77 | - } | |
| 78 | 75 | Date start = DateUtils.string2Date("2020-01-01", DateUtils.format1); |
| 79 | 76 | Date end = DateUtils.string2Date("2030-01-01", DateUtils.format1); |
| 80 | - deviceStr = deviceStr.substring(0, deviceStr.length() - 1); | |
| 77 | + String deviceStr = deviceIds.stream().collect(Collectors.joining(",")); | |
| 81 | 78 | //保存权限计划 |
| 82 | 79 | saveDeviceAuth(schoolId, deviceStr, studentType, start, end, weekDayJson, sexStr, type, authType,deviceType); |
| 83 | 80 | return true; |
| ... | ... | @@ -167,7 +164,8 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 167 | 164 | dhBean.setWeekDays(weekDayList); |
| 168 | 165 | dhBean.setDeviceIds(devices); |
| 169 | 166 | dhBean.setChannel(record.getShiduan()); |
| 170 | - dhBean.setCustomName(EnumSzBusinessType.EnumStudentType.getByCode(studentType).code+""); | |
| 167 | + EnumSzBusinessType.EnumStudentType enumStudentType = EnumSzBusinessType.EnumStudentType.getByCode(studentType); | |
| 168 | + dhBean.setCustomName(enumStudentType ==null?record.getStudentType()+"": enumStudentType.name); | |
| 171 | 169 | dhBean.setStudentType(String.valueOf(studentType)); |
| 172 | 170 | log.info("下发大华权限计划详情:{}", JSON.toJSONString(dhBean)); |
| 173 | 171 | //发送大华设备 |
| ... | ... | @@ -1036,4 +1034,92 @@ public class UserOperateServiceImpl implements UserOperateService { |
| 1036 | 1034 | } |
| 1037 | 1035 | return ResultGenerator.genSuccessResult(); |
| 1038 | 1036 | } |
| 1037 | + | |
| 1038 | + @Override | |
| 1039 | + public void checkFaceSend() { | |
| 1040 | + List<SaveStudentBak> saveStudentBaks = userDao.selectStudentList(); | |
| 1041 | + if(!CollectionUtils.isEmpty(saveStudentBaks)) { | |
| 1042 | + saveStudentBaks.stream().forEach(saveStudentBak -> { | |
| 1043 | + try{ | |
| 1044 | + String cardNum = saveStudentBak.getCardNum(); | |
| 1045 | + Integer schoolId = saveStudentBak.getSchoolId(); | |
| 1046 | + String deviceId = saveStudentBak.getClientId(); | |
| 1047 | + StudentBean studentBean = userDao.getStudentWithCard(cardNum, schoolId); | |
| 1048 | + if (studentBean == null) { | |
| 1049 | + return; | |
| 1050 | + } | |
| 1051 | + String photo = studentBean.getPhoto(); | |
| 1052 | + if (StringUtils.isBlank(photo)) { | |
| 1053 | + return; | |
| 1054 | + } | |
| 1055 | + int userType = studentBean.getUserType(); | |
| 1056 | + String userName = studentBean.getName(); | |
| 1057 | + String studentCode = studentBean.getStudentCode(); | |
| 1058 | + String typeName = "Student"; | |
| 1059 | + //以学籍号为名的文件名 | |
| 1060 | + String fileName = photo.substring(photo.lastIndexOf("/") + 1, photo.length()); | |
| 1061 | + //100服务器人脸照绝对路径 | |
| 1062 | + String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School" + schoolId + "\\" + typeName; | |
| 1063 | + String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School" + schoolId + "\\" + typeName; | |
| 1064 | + String path_3 = "E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\"; | |
| 1065 | + String filePath = ""; | |
| 1066 | + if (photo.indexOf("f0i5l7e5") != -1) { | |
| 1067 | + String afterStr = photo.split("f0i5l7e5/")[1].replace("/", "\\"); | |
| 1068 | + filePath = path_3 + afterStr; | |
| 1069 | + } | |
| 1070 | + if (photo.indexOf("face17e5") != -1) { | |
| 1071 | + filePath = path_2 + "\\" + fileName; | |
| 1072 | + } | |
| 1073 | + if (photo.indexOf("face17e50") != -1) { | |
| 1074 | + filePath = path_1 + "\\" + fileName; | |
| 1075 | + } | |
| 1076 | + if (filePath.indexOf("?v=") != -1) { | |
| 1077 | + filePath = filePath.split("\\?")[0]; | |
| 1078 | + } | |
| 1079 | + //校验100服务文件存储地址上是否存在此人脸 | |
| 1080 | + File file = new File(filePath.trim());//图片 | |
| 1081 | + if (!file.exists()) { | |
| 1082 | + log.error("文件不存在:" + filePath); | |
| 1083 | + baseService.sendFailRecord(cardNum, filePath, deviceId, "文件不存在", String.valueOf(userType), schoolId); | |
| 1084 | + return; | |
| 1085 | + } | |
| 1086 | + String targetPath = FileUtils.picPathComp + file.getName(); | |
| 1087 | + if (file.exists()) { | |
| 1088 | + try { | |
| 1089 | + CompressPic.CompressPic(file.getAbsolutePath(), targetPath); | |
| 1090 | + } catch (Exception e) { | |
| 1091 | + log.error("压缩图片失败:", e); | |
| 1092 | + } | |
| 1093 | + } | |
| 1094 | + //设备类型 | |
| 1095 | + Integer clintType = userDao.getClintTypeByDeviceId(deviceId); | |
| 1096 | + if (clintType.intValue() == 18 || clintType.intValue() == 28) { | |
| 1097 | +// //1.先删除人脸 | |
| 1098 | +// if (cmsServer.getIsDeviceOnline(deviceId)) { | |
| 1099 | +// String cardNo = Long.parseLong(baseService.getCard(cardNum), 16) + ""; | |
| 1100 | +// cmsServer.deleteFace(deviceId, cardNo, schoolId); | |
| 1101 | +// } else { | |
| 1102 | +// //不在线,去253服务器上删除 | |
| 1103 | +// HttpUtil.deleteCard(deviceId, cardNum); | |
| 1104 | +// } | |
| 1105 | + //2.重新下发 | |
| 1106 | + boolean isOk = baseService.sendImg(file.getAbsolutePath(), targetPath, deviceId, cardNum, userName, String.valueOf(userType), schoolId); | |
| 1107 | + if (isOk) { | |
| 1108 | + return; | |
| 1109 | + } else { | |
| 1110 | + } | |
| 1111 | + } | |
| 1112 | + //下大华人脸 | |
| 1113 | + if (clintType.intValue() == 22 || clintType.intValue() == 29) { | |
| 1114 | + //下发单个人脸至大华设备 | |
| 1115 | + HttpUtil.uploadDHImgForOne(filePath, schoolId, studentCode, clintType, deviceId); | |
| 1116 | + return; | |
| 1117 | + } | |
| 1118 | + }catch (Exception e){ | |
| 1119 | + log.error("下发出错"); | |
| 1120 | + return; | |
| 1121 | + } | |
| 1122 | + }); | |
| 1123 | + } | |
| 1124 | + } | |
| 1039 | 1125 | } | ... | ... |
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/DateUtils.java
| ... | ... | @@ -41,6 +41,16 @@ public class DateUtils { |
| 41 | 41 | return new Date(); |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | + public static String string2Date2(String date, String format) { | |
| 45 | + try{ | |
| 46 | + SimpleDateFormat sdf = new SimpleDateFormat(format); | |
| 47 | + return String.valueOf(sdf.parse(date).getTime()); | |
| 48 | + }catch (Exception e){ | |
| 49 | + | |
| 50 | + } | |
| 51 | + return String.valueOf(new Date().getTime()); | |
| 52 | + } | |
| 53 | + | |
| 44 | 54 | public static Date getToday(){ |
| 45 | 55 | return new Date(); |
| 46 | 56 | } |
| ... | ... | @@ -117,8 +127,11 @@ public class DateUtils { |
| 117 | 127 | |
| 118 | 128 | |
| 119 | 129 | public static void main(String[] args) { |
| 120 | - System.out.println(getDateByTime(3,new Date())); | |
| 121 | - System.out.println(date2String(new Date(),format3)); | |
| 130 | +// System.out.println(getDateByTime(3,new Date())); | |
| 131 | +// System.out.println(date2String(new Date(),format3)); | |
| 132 | + | |
| 133 | + System.out.println(string2Date2("2022-02-23 04:00:00","yyyy-MM-dd HH:mm:ss")); | |
| 134 | + System.out.println(string2Date2("2022-02-23 20:00:00","yyyy-MM-dd HH:mm:ss")); | |
| 122 | 135 | } |
| 123 | 136 | |
| 124 | 137 | } | ... | ... |
cloud/haikangface/src/main/resources/mapper/usermapper.xml
| ... | ... | @@ -163,4 +163,29 @@ |
| 163 | 163 | </if> |
| 164 | 164 | </select> |
| 165 | 165 | |
| 166 | + <resultMap id="BaseResultMap" type="com.sincere.haikangface.bean.test.SaveStudentBak"> | |
| 167 | + <!-- | |
| 168 | + WARNING - @mbg.generated | |
| 169 | + --> | |
| 170 | + <id column="id" jdbcType="INTEGER" property="id"/> | |
| 171 | + <result column="name" property="name"/> | |
| 172 | + <result column="user_id" property="userId"/> | |
| 173 | + <result column="card_num" property="cardNum"/> | |
| 174 | + <result column="class_name" property="className"/> | |
| 175 | + <result column="school_Id" property="schoolId"/> | |
| 176 | + <result column="status" property="status"/> | |
| 177 | + <result column="client_id" property="clientId"/> | |
| 178 | + </resultMap> | |
| 179 | + | |
| 180 | + <insert id="insertStudent" parameterType="com.sincere.haikangface.bean.test.SaveStudentBak"> | |
| 181 | + insert into sz_student_bak values (#{name},#{userId},#{cardNum},#{clientId},#{className},#{status},#{schoolId}) | |
| 182 | + </insert> | |
| 183 | + | |
| 184 | + <select id="selectStudentList" resultMap="BaseResultMap"> | |
| 185 | + select * from sz_student_bak where status = 2 | |
| 186 | + </select> | |
| 187 | + | |
| 188 | + <update id="updateStudent" parameterType="java.lang.Integer"> | |
| 189 | + update sz_student_bak set status = 1 where id = #{id} | |
| 190 | + </update> | |
| 166 | 191 | </mapper> | ... | ... |
cloud/haikangface/src/test/java/com/sincere/haikangface/HaikangfaceApplicationTests.java
| 1 | 1 | package com.sincere.haikangface; |
| 2 | 2 | |
| 3 | +import com.alibaba.fastjson.JSONObject; | |
| 3 | 4 | import com.drew.imaging.jpeg.JpegMetadataReader; |
| 4 | 5 | import com.drew.imaging.jpeg.JpegProcessingException; |
| 5 | 6 | import com.drew.metadata.Directory; |
| ... | ... | @@ -9,6 +10,7 @@ import com.drew.metadata.exif.ExifDirectory; |
| 9 | 10 | import com.sincere.haikangface.admindao.ZuoyeAdminDao; |
| 10 | 11 | import com.sincere.haikangface.bean.*; |
| 11 | 12 | import com.sincere.haikangface.bean.homework.QuestionBean; |
| 13 | +import com.sincere.haikangface.bean.test.SaveStudentBak; | |
| 12 | 14 | import com.sincere.haikangface.bean.xiaoan.AttendanceRecordsSS; |
| 13 | 15 | import com.sincere.haikangface.bean.xiaoan.CreditCardRecordsSS; |
| 14 | 16 | import com.sincere.haikangface.dao.DeviceDao; |
| ... | ... | @@ -16,7 +18,9 @@ import com.sincere.haikangface.dao.UserDao; |
| 16 | 18 | import com.sincere.haikangface.dao.ZuoYeDao; |
| 17 | 19 | import com.sincere.haikangface.service.impl.BaseService; |
| 18 | 20 | import com.sincere.haikangface.utils.ApiUtil; |
| 21 | +import com.sincere.haikangface.utils.DateUtils; | |
| 19 | 22 | import com.sincere.haikangface.xiananDao.SendRecordDao; |
| 23 | +import org.apache.commons.lang3.RandomStringUtils; | |
| 20 | 24 | import org.bouncycastle.asn1.cms.MetaData; |
| 21 | 25 | import org.hibernate.validator.constraints.LuhnCheck; |
| 22 | 26 | import org.junit.Test; |
| ... | ... | @@ -74,10 +78,37 @@ public class HaikangfaceApplicationTests { |
| 74 | 78 | //艺术 |
| 75 | 79 | // String deviceIds = "567176463869,567176463898,567176463903,567176463892"; |
| 76 | 80 | Integer schoolId = 1066; |
| 77 | -// baseService.clearStudent(schoolId,deviceIds); | |
| 81 | + baseService.clearStudent(schoolId,deviceIds); | |
| 78 | 82 | baseService.clearStudent2(schoolId); |
| 79 | 83 | } |
| 80 | 84 | |
| 85 | + @Test | |
| 86 | + public void checkFaceSend() { | |
| 87 | + String deviceIds = "694642005671,694642215671,687425355671,687425325671,338652895671,687425135671,ytj694642375671,338652415671,687425265671,ytj687425345671,338652515671,694642555671,ytj694642105671,338653105671,ytj687425415671,ytj687425155671,740456495671,694642135671,ytj687425395671,687425225671"; | |
| 88 | + //下发设备集合 | |
| 89 | + List<String> deviceList= new ArrayList<>(Arrays.asList(deviceIds.split(","))); | |
| 90 | + List<StudentBean> studentBeans = userDao.getStudentBySchoolId(865); | |
| 91 | + studentBeans.stream().distinct().forEach(studentBean -> { | |
| 92 | + String name = studentBean.getName(); | |
| 93 | + String userId = studentBean.getUser_id(); | |
| 94 | + String cardNum = studentBean.getStudent_num(); | |
| 95 | + String className = studentBean.getClass_name(); | |
| 96 | + for(String s : deviceList){ | |
| 97 | + List<SendRecordBean> sendRecordBeans = sendRecordDao.getRecordIsExit(s,cardNum,userId); | |
| 98 | + if(CollectionUtils.isEmpty(sendRecordBeans)){ | |
| 99 | + SaveStudentBak saveStudentBak = new SaveStudentBak(); | |
| 100 | + saveStudentBak.setCardNum(cardNum); | |
| 101 | + saveStudentBak.setClientId(s); | |
| 102 | + saveStudentBak.setUserId(userId); | |
| 103 | + saveStudentBak.setName(name); | |
| 104 | + saveStudentBak.setClassName(className); | |
| 105 | + saveStudentBak.setStatus(2); | |
| 106 | + userDao.insertStudent(saveStudentBak); | |
| 107 | + } | |
| 108 | + } | |
| 109 | + }); | |
| 110 | + } | |
| 111 | + | |
| 81 | 112 | public String splicingZero(String str, int totalLenght) { |
| 82 | 113 | int strLenght = str.length(); |
| 83 | 114 | String strReturn = str; |
| ... | ... | @@ -137,4 +168,102 @@ public class HaikangfaceApplicationTests { |
| 137 | 168 | } |
| 138 | 169 | } |
| 139 | 170 | } |
| 171 | + | |
| 172 | + @Test | |
| 173 | + public void test() { | |
| 174 | + List<StudentBean> students = userDao.getStudentBySchoolId(12); | |
| 175 | + int i = 0; | |
| 176 | + for(StudentBean studentBean : students){ | |
| 177 | + String time = DateUtils.date2String(new Date(),"yyyyMMddHHmm"); | |
| 178 | + String randomString = RandomStringUtils.randomNumeric(4); | |
| 179 | + String studentCode = "YX"+time+randomString+".png"; | |
| 180 | + String photo = studentBean.getPhoto(); | |
| 181 | + System.out.println("源文件:" + photo); | |
| 182 | + //以学籍号为名的文件名 | |
| 183 | + String fileName = photo.substring(photo.lastIndexOf("/") + 1,photo.length()); | |
| 184 | + //100服务器人脸照绝对路径 | |
| 185 | + //100服务器人脸照绝对路径 | |
| 186 | + String path_1 = "E:\\wwwhtdocs\\SmartCampus\\face17e50\\School12\\Student"; | |
| 187 | + String path_2 = "E:\\wwwhtdocs\\SmartCampus\\face17e5\\School12\\Student"; | |
| 188 | + String path_3 = "E:\\wwwhtdocs\\SmartCampus\\f0i5l7e5\\"; | |
| 189 | + String filePath =""; | |
| 190 | + String filePath2 =""; | |
| 191 | + if(photo.indexOf("f0i5l7e5")!=-1){ | |
| 192 | + String afterStr = photo.split("f0i5l7e5/")[1].replace("/","\\"); | |
| 193 | + filePath = path_3 + afterStr; | |
| 194 | + filePath2 = path_3 + studentCode; | |
| 195 | + } | |
| 196 | + if(photo.indexOf("face17e5")!=-1){ | |
| 197 | + filePath = path_2 + "\\" + fileName; | |
| 198 | + filePath2 = path_2 + "\\" + studentCode; | |
| 199 | + } | |
| 200 | + if(photo.indexOf("face17e50")!=-1){ | |
| 201 | + filePath = path_1 + "\\" + fileName; | |
| 202 | + filePath2 = path_1 + "\\" + studentCode; | |
| 203 | + } | |
| 204 | + if(filePath.indexOf("?v=")!=-1){ | |
| 205 | + filePath = filePath.split("\\?")[0]; | |
| 206 | + } | |
| 207 | + File file = new File(filePath.trim());//图片 | |
| 208 | + if (file.exists()) { | |
| 209 | + //原始文件路径 | |
| 210 | + String srcPath = file.getAbsolutePath(); | |
| 211 | + System.out.println("文件名:" + fileName + ", 学籍号:" + fileName.split("\\.")[0]); | |
| 212 | + //复制文件 | |
| 213 | + copy(srcPath,filePath2); | |
| 214 | + String savePath = "http://campus.myjxt.com//" + filePath2; | |
| 215 | + studentBean.setPhoto(savePath); | |
| 216 | + userDao.updateUser(studentBean.getUser_id(), savePath); | |
| 217 | + file.delete(); | |
| 218 | + i++; | |
| 219 | + } | |
| 220 | + if(i==1){ | |
| 221 | + System.out.println(filePath); | |
| 222 | + return; | |
| 223 | + } | |
| 224 | + } | |
| 225 | + } | |
| 226 | + | |
| 227 | + public static void copy(String srcPathStr, String desPathStr) { | |
| 228 | + //获取源文件的名称 | |
| 229 | + try { | |
| 230 | + FileInputStream fis = new FileInputStream(srcPathStr);//创建输入流对象 | |
| 231 | + FileOutputStream fos = new FileOutputStream(desPathStr); //创建输出流对象 | |
| 232 | + byte datas[] = new byte[1024*8];//创建搬运工具 | |
| 233 | + int len = 0;//创建长度 | |
| 234 | + while((len = fis.read(datas))!=-1)//循环读取数据 | |
| 235 | + { | |
| 236 | + fos.write(datas,0,len); | |
| 237 | + } | |
| 238 | + fis.close();//释放资源 | |
| 239 | + fis.close();//释放资源 | |
| 240 | + } | |
| 241 | + catch (Exception e) | |
| 242 | + { | |
| 243 | + e.printStackTrace(); | |
| 244 | + } | |
| 245 | + } | |
| 246 | + | |
| 247 | + | |
| 248 | + @Test | |
| 249 | + public void send2() { | |
| 250 | + try { | |
| 251 | + String api = "http://yixiao.198.hmkj.com.cn/index.php/Attend/send"; | |
| 252 | + RestTemplate restTemplate = new RestTemplate(); | |
| 253 | + MultiValueMap<String, Object> map = new LinkedMultiValueMap<>(); | |
| 254 | + map.add("name", "测试"); | |
| 255 | + map.add("xuehao", "1122"); | |
| 256 | + map.add("time", "2022-02-10 09:09:00"); | |
| 257 | + map.add("state", 1); | |
| 258 | + HttpHeaders headers = new HttpHeaders(); | |
| 259 | + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); | |
| 260 | + HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers); | |
| 261 | + ResponseEntity<String> response = restTemplate.postForEntity(api, param, String.class); | |
| 262 | + String body = response.getBody(); | |
| 263 | + System.out.println(body); | |
| 264 | + } catch (Exception e) { | |
| 265 | + e.printStackTrace(); | |
| 266 | + System.out.println("考勤失败"); | |
| 267 | + } | |
| 268 | + } | |
| 140 | 269 | } | ... | ... |