| | |
| | | |
| | | // 1. 参数校验 |
| | | if (!StringUtils.hasText(request.getIdCard())) { |
| | | log.warn("身份证号为空,已跳过,设备编号: {}", request.getDeviceNo()); |
| | | log.warn("身份证号为空,已跳过,人员姓名: {}", request.getIntervieweeName()); |
| | | errorCount++; |
| | | continue; |
| | | } |
| | |
| | | request.setSignImageUrl(url); |
| | | } |
| | | |
| | | // 2. 防重校验(基于设备编号+身份证号+签离时间) |
| | | // 2. 防重校验(身份证号+签离时间) |
| | | String uniqueKey = generateUniqueKey(request); |
| | | String redisKey = "offline:signout:" + uniqueKey; |
| | | if (Boolean.TRUE.equals(redisTemplate.hasKey(redisKey))) { |
| | | log.warn("签离数据重复,已跳过, 设备编号: {}, 身份证号: {}, 签离时间: {}", |
| | | request.getDeviceNo(), request.getIdCard(), request.getSignTime()); |
| | | log.warn("签离数据重复,已跳过, 身份证号: {}, 签离时间: {}", |
| | | request.getIdCard(), request.getSignTime()); |
| | | skipCount++; |
| | | continue; |
| | | } |
| | |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("处理签离数据失败, 身份证号: {}, 设备编号: {}", |
| | | request.getIdCard(), request.getDeviceNo(), e); |
| | | log.error("处理签离数据失败, 身份证号: {}", |
| | | request.getIdCard(), e); |
| | | errorCount++; |
| | | } |
| | | } |
| | |
| | | */ |
| | | private String generateUniqueKey(ApiVisitorRecodeSingoutRequest request) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.append(request.getDeviceNo()).append(":"); |
| | | // sb.append(request.getDeviceNo()).append(":"); |
| | | sb.append(request.getIdCard()).append(":"); |
| | | sb.append(request.getSignTime() != null ? |
| | | request.getSignTime().getTime() : System.currentTimeMillis()); |