I am sugar
@Override
public SignResultVO addSignRecord() {
// 获取用户id
Long userId = UserContext.getUser();
// 拼接key
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
// String format = simpleDateFormat.format(new Date());
LocalDate now = LocalDate.now();
String format = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
String key = RedisConstants.SIGN_RECORD_KEY_PREFIX + userId.toString() + format;
// 利用bitset命令将签到记录保存到redis 需要判断返回值 如果true代表已签到
int offset = now.getDayOfMonth() - 1;
Boolean setBit = redisTemplate.opsForValue().setBit(key, offset, true);
if (setBit) {
throw new BizIllegalException("不能重复签到");
}
// 计算连续签到的天数
int days = countSignDays(key, now.getDayOfMonth());
// 计算连续签到的奖励积分
int rewardPoints = 0; //
switch (days) {
case 7:
rewardPoints = 10;
break;
case 14:
rewardPoints = 20;
break;
case 28:
rewardPoints = 40;
break;
}
// 保存积分
mqHelper.send(MqConstants.Exchange.LEARNING_EXCHANGE,
MqConstants.Key.SIGN_IN, SignInMessage.of(userId, rewardPoints + 1));
// 封装vo返回
SignResultVO vo = new SignResultVO();
vo.setSignDays(days);
vo.setRewardPoints(rewardPoints);
return vo;
}