InviteFrontAttendServiceImpl.class
@Transactional(rollbackFor = Exception.class)
@Override
public 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;
}
//是否包含uid
boolean 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的redis
redisUtil.del(getInviteLoginUidIsKey(uid));
return true;
}
}
} else {
redisUtil.sSet(getInviteLoginUidIsKey(uid), todayStr);
}
return false;
}