• Java中使用redis的bitMap实现签到功能


    简介

    使用redis中的bitMap实现 功能

    1. 用户签到, 可以补签

    2. 用户当前签到情况

    3. 用户当月签到情况

    SignController

    1. import com.example.signdemo.service.SignService;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.web.bind.annotation.GetMapping;
    4. import org.springframework.web.bind.annotation.PostMapping;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.RestController;
    7. import java.util.Map;
    8. @RestController
    9. @RequestMapping("sign")
    10. public class SignController {
    11. @Autowired
    12. private SignService signService;
    13. /***
    14. * 用户签到, 可以补签
    15. */
    16. @PostMapping
    17. public Map<String, Object> doSign(Integer userId, String dateStr){
    18. return signService.doSign(userId, dateStr);
    19. }
    20. /**
    21. * 获取用户当前签到情况
    22. *
    23. * @param userId
    24. * @param dateStr
    25. * @return
    26. */
    27. @GetMapping("/today")
    28. public Map<String, Object> today(Integer userId, String dateStr){
    29. return signService.today(userId, dateStr);
    30. }
    31. /**
    32. * 获取用户当月签到情况
    33. *
    34. * @param userId
    35. * @param dateStr
    36. * @return
    37. */
    38. @GetMapping("/getSignInfo")
    39. public Map<String, Object> getSignInfo(Integer userId, String dateStr){
    40. return signService.getSignInfo(userId, dateStr);
    41. }
    42. }

     

    1. import cn.hutool.core.date.DateUtil;
    2. import com.example.signdemo.utils.SignUtils;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.data.redis.core.RedisTemplate;
    5. import org.springframework.stereotype.Service;
    6. import java.util.Date;
    7. import java.util.HashMap;
    8. import java.util.Map;
    9. import java.util.TreeMap;
    10. @Service
    11. public class SignService {
    12. @Autowired
    13. private RedisTemplate redisTemplate;
    14. @Autowired
    15. private SignUtils signUtils;
    16. public Map<String, Object> doSign(Integer userId, String dateStr) {
    17. Map<String, Object> result = new HashMap<>();
    18. //获取日期
    19. Date date = signUtils.getDate(dateStr);
    20. // 获取日期对应的天数, 多少号
    21. int day = DateUtil.dayOfMonth(date) - 1;
    22. // 构建redis ke
    23. String signKey = signUtils.buildSignKey(userId, date);
    24. // 获取对应的日期是否已签到
    25. Boolean isSigned = redisTemplate.opsForValue().getBit(signKey, day);
    26. if (isSigned) {
    27. result.put("code", 400);
    28. result.put("message", "用户该日期已签到, 无需再签");
    29. return result;
    30. }
    31. // 签到
    32. redisTemplate.opsForValue().setBit(signKey, day, true);
    33. // 根据当前日期统计签到次数
    34. Date todate = new Date();
    35. // 统计连续签到
    36. int contniuousSignCount = signUtils.getContniuousSignCount(userId, todate);
    37. // 统计总签到数
    38. long sumSignCount = signUtils.getSumSignCount(userId, todate);
    39. result.put("code", 200);
    40. result.put("message", "签到成功");
    41. result.put("contniuousSignCount", contniuousSignCount);
    42. result.put("sumSignCount", sumSignCount);
    43. return result;
    44. }
    45. /**
    46. * 获取用户当前签到情况
    47. *
    48. * @param userId
    49. * @param dateStr
    50. * @return
    51. */
    52. public Map<String, Object> today(Integer userId, String dateStr) {
    53. Map<String, Object> result = new HashMap<>();
    54. // TODO
    55. return result;
    56. }
    57. /**
    58. * 获取用户当月签到情况
    59. *
    60. * @param userId
    61. * @param dateStr
    62. * @return
    63. */
    64. public Map<String, Object> getSignInfo(Integer userId, String dateStr) {
    65. Map<String, Object> signInfo = new TreeMap<>();
    66. // TODO
    67. return signInfo;
    68. }
    69. }

    发送内容: "签到功能", 获取提取码

     

     

     

  • 相关阅读:
    MySQL(1) 索引结构
    【ESP32】ESP32-Face人脸识别过程概述
    Laravel 博客开发|导入 md 博客文章
    【POJ No. 3067】 公路交叉数 Japan
    CSS期末复习速览(二)
    (附源码)python方块新闻网站 毕业设计 091600
    qt模块feature QT_FEATURE_* qt_lib_*.pri QT_CONFG qtConfig
    SoilingNet: Soiling Detection on Automotive Surround-View Cameras 个人总结
    源码分享-M3U8数据流ts的AES-128解密并合并---GoLang实现
    机器学习评估指标 - f1, precision, recall, acc, MCC
  • 原文地址:https://blog.csdn.net/weixin_43652507/article/details/136709286