• 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. }

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

     

     

     

  • 相关阅读:
    19.12 Boost Asio 获取远程进程
    关于SparkRdd和SparkSql的几个指标统计,scala语言,打包上传到spark集群,yarn模式运行
    Android服务器——TomCat服务器的搭建
    百度智能云正式上线Python SDK版本并全面开源!
    vite下,修改node_modules源码后,在浏览器源码中看不到改动的内容
    请你谈谈网站是如何进行访问的?【web领域面试题】
    NODE基于express 框架和mongoDB完成session认证 和图片上传删除等功能
    论文笔记:HG-SL 面向假新闻早期发现的全局和本地用户传播行为联合学习
    [附源码]计算机毕业设计大学生心理测评系统
    IP请求工具
  • 原文地址:https://blog.csdn.net/weixin_43652507/article/details/136709286