InviteFrontAttendServiceImpl.class

    1. @Transactional(rollbackFor = Exception.class)
    2. @Override
    3. public boolean handleInviteVisitMsg(UserVisitMqBo userVisitMqBo) {
    4. Long uid = userVisitMqBo.getUid();
    5. //1.refresh活动的时候直接过期,-1保存入redis作为集合为空标识
    6. Set<Object> objects = redisUtil.sGet(getInviteLoginIdsKey());
    7. if (CollectionUtil.isEmpty(objects)) {
    8. //数据库查数据,空集合
    9. List<Long> rewardIds = attendDetailAdminService.getCurrentWaitLoginRewardIds();
    10. rewardIds.add(-1L);
    11. Long[] rewardIdsArray = rewardIds.toArray(new Long[rewardIds.size()]);
    12. redisUtil.sSet(getInviteLoginIdsKey(), rewardIdsArray);
    13. }
    14. Set<Object> uidObjects = redisUtil.sGet(getInviteLoginIdsKey());
    15. if (CollectionUtil.isNotEmpty(uidObjects) && uidObjects.size() == 1) {
    16. return false;
    17. }
    18. //是否包含uid
    19. boolean hasUid = uidObjects.stream().anyMatch(e -> {
    20. Long id = (Long) e;
    21. return id.equals(uid);
    22. });
    23. if (!hasUid) {
    24. return false;
    25. }
    26. String todayStr = DateUtil.format(new Date(), DateUtil.PATTERN_DATE);
    27. Set<Object> dateObjetcs = redisUtil.sGet(getInviteLoginUidIsKey(uid));
    28. if (CollectionUtil.isEmpty(dateObjetcs)) {
    29. redisUtil.sSet(getInviteLoginUidIsKey(uid), todayStr);
    30. log.info("handleInviteVisitMsg, 有效访问 uid:{}", uid);
    31. return false;
    32. }
    33. if (dateObjetcs.size() == 2 && !dateObjetcs.contains(todayStr)) {
    34. //数美校验
    35. String requestNo = UUID.fastUUID().toString();
    36. SkyNetTaskBo netTaskBo = new SkyNetTaskBo();
    37. netTaskBo.setRiskDeviceId(userVisitMqBo.getDeviceId());
    38. netTaskBo.setInvitee(userVisitMqBo.getUid() + "");
    39. netTaskBo.setRequestNo(requestNo);
    40. if (!skyNetService.checkOperate(netTaskBo)) {
    41. log.error("数美校验不通过!netTaskBo:{} userVisitMqBo:{} ", netTaskBo, userVisitMqBo);
    42. throw new IllegalArgumentException("检测到您的行为存在异常,请稍后再试!");
    43. }
    44. //使用乐观锁update,看更新字段是否成功,发送奖励
    45. int update = attendDetailAdminService.updateRemindStatus(uid);
    46. if (update > 0) {
    47. //发送奖励
    48. if (sendLoginReward(userVisitMqBo, uid)) {
    49. //移除uid的set数据=
    50. redisUtil.setRemove(getInviteLoginIdsKey(), uid);
    51. //删除uid的redis
    52. redisUtil.del(getInviteLoginUidIsKey(uid));
    53. return true;
    54. }
    55. }
    56. } else {
    57. redisUtil.sSet(getInviteLoginUidIsKey(uid), todayStr);
    58. }
    59. return false;
    60. }