InviteFrontAttendServiceImpl.class
@Transactional(rollbackFor = Exception.class)@Overridepublic boolean handleInviteVisitMsg(UserVisitMqBo userVisitMqBo) {Long uid = userVisitMqBo.getUid();//1.refresh活动的时候直接过期,-1保存入redis作为集合为空标识Set<Object> objects = redisUtil.sGet(getInviteLoginIdsKey());if (CollectionUtil.isEmpty(objects)) {//数据库查数据,空集合List<Long> rewardIds = attendDetailAdminService.getCurrentWaitLoginRewardIds();rewardIds.add(-1L);Long[] rewardIdsArray = rewardIds.toArray(new Long[rewardIds.size()]);redisUtil.sSet(getInviteLoginIdsKey(), rewardIdsArray);}Set<Object> uidObjects = redisUtil.sGet(getInviteLoginIdsKey());if (CollectionUtil.isNotEmpty(uidObjects) && uidObjects.size() == 1) {return false;}//是否包含uidboolean hasUid = uidObjects.stream().anyMatch(e -> {Long id = (Long) e;return id.equals(uid);});if (!hasUid) {return false;}String todayStr = DateUtil.format(new Date(), DateUtil.PATTERN_DATE);Set<Object> dateObjetcs = redisUtil.sGet(getInviteLoginUidIsKey(uid));if (CollectionUtil.isEmpty(dateObjetcs)) {redisUtil.sSet(getInviteLoginUidIsKey(uid), todayStr);log.info("handleInviteVisitMsg, 有效访问 uid:{}", uid);return false;}if (dateObjetcs.size() == 2 && !dateObjetcs.contains(todayStr)) {//数美校验String requestNo = UUID.fastUUID().toString();SkyNetTaskBo netTaskBo = new SkyNetTaskBo();netTaskBo.setRiskDeviceId(userVisitMqBo.getDeviceId());netTaskBo.setInvitee(userVisitMqBo.getUid() + "");netTaskBo.setRequestNo(requestNo);if (!skyNetService.checkOperate(netTaskBo)) {log.error("数美校验不通过!netTaskBo:{} userVisitMqBo:{} ", netTaskBo, userVisitMqBo);throw new IllegalArgumentException("检测到您的行为存在异常,请稍后再试!");}//使用乐观锁update,看更新字段是否成功,发送奖励int update = attendDetailAdminService.updateRemindStatus(uid);if (update > 0) {//发送奖励if (sendLoginReward(userVisitMqBo, uid)) {//移除uid的set数据=redisUtil.setRemove(getInviteLoginIdsKey(), uid);//删除uid的redisredisUtil.del(getInviteLoginUidIsKey(uid));return true;}}} else {redisUtil.sSet(getInviteLoginUidIsKey(uid), todayStr);}return false;}
