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 | } | ... | ... |