首页 > 其他分享 >app直播源代码,当前用户截止当前时间在本月的连续签到统计

app直播源代码,当前用户截止当前时间在本月的连续签到统计

时间:2024-03-23 09:44:28浏览次数:24  
标签:return 签到 app num Result 当前 bit 源代码

需求:实现下面接口,统计当前用户截止当前时间在本月的连续签到天数

有用户有时间我们就可以组织出对应的key,此时就能找到这个用户截止这天的所有签到记录,再根据这套算法,就能统计出来他连续签到的次数了

 


代码

UserController

@GetMapping("/sign/count")
public Result signCount(){
    return userService.signCount();
}

 

UserServiceImpl

@Override
public Result signCount() {
    // 1.获取当前登录用户
    Long userId = UserHolder.getUser().getId();
    // 2.获取日期
    LocalDateTime now = LocalDateTime.now();
    // 3.拼接key
    String keySuffix = now.format(DateTimeFormatter.ofPattern(":yyyyMM"));
    String key = USER_SIGN_KEY + userId + keySuffix;
    // 4.获取今天是本月的第几天
    int dayOfMonth = now.getDayOfMonth();
    // 5.获取本月截止今天为止的所有的签到记录,返回的是一个十进制的数字 BITFIELD sign:5:202203 GET u14 0
    List<Long> result = stringRedisTemplate.opsForValue().bitField(
            key,
            BitFieldSubCommands.create()
                    .get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0)
    );
    if (result == null || result.isEmpty()) {
        // 没有任何签到结果
        return Result.ok(0);
    }
    Long num = result.get(0);
    if (num == null || num == 0) {
        return Result.ok(0);
    }
    // 6.循环遍历
    int count = 0;
    while (true) {
        // 6.1.让这个数字与1做与运算,得到数字的最后一个bit位  // 判断这个bit位是否为0
        if ((num & 1) == 0) {
            // 如果为0,说明未签到,结束
            break;
        }else {
            // 如果不为0,说明已签到,计数器+1
            count++;
        }
        // 把数字右移一位,抛弃最后一个bit位,继续下一个bit位
        num >>>= 1;
    }
    return Result.ok(count);
}

 

以上就是app直播源代码,当前用户截止当前时间在本月的连续签到统计, 更多内容欢迎关注之后的文章

 

标签:return,签到,app,num,Result,当前,bit,源代码
From: https://www.cnblogs.com/yunbaomengnan/p/18090797

相关文章

  • 直播软件app开发,实现用户签到功能助力用户回流
    直播软件app开发,实现用户签到功能助力用户回流需求:实现签到接口,将当前用户当天签到信息保存到Redis中思路:我们可以把年和月作为bitMap的key,然后保存到一个bitMap中,每次签到就到对应的位上把数字从0变成1,只要对应是1,就表明说明这一天已经签到了,反之则没有签到。我们通过......
  • [附源码]JAVA计算机毕业设计安卓装维助手APP(开题+源码)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已经成为人们生活中不可或缺的一部分。在信息化社会的大背景下,各行各业的信息化水平也在不断提升。其中,计算机......
  • [附源码]JAVA计算机毕业设计安卓智能手机个性化定制问卷调查平台app(开题+源码)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网的迅猛发展,智能手机已成为人们日常生活中不可或缺的一部分。在个性化消费趋势的推动下,用户对智能手机的个性化定制需求日益增长。然而......
  • 【Coursera GenAI with LLM】 Week 3 LLM-powered applications Class Notes
    ModeloptimizationstoimproveapplicationperformanceDistillation:usesalargermodel,theteachermodel,totrainasmallermodel,thestudentmodel,wefreezeteacher'sweightsandgeneratecompletions,alsogeneratestudentmodel'scompl......
  • Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately
    VSCode+MSBuild开发过程中出现如下警告:Pleasedefine_WIN32_WINNTor_WIN32_WINDOWSappropriately处理方法为,在c_cpp_properties.json文件中加入"_WIN32_WINNT>=0x0A00"的定义,配置如下:{"configurations":[{"name":"Win32",......
  • Java版本spring cloud + spring boot企业电子招投标系统源代码
    招投标管理系统是一个集门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理于一体的综合性应用平台。它适用于招标代理、政府采购、企业采购和工程交易等业务的企业,旨在提高项目管理的效率和质量。该系统以项目为主......
  • uniapp开发ios,scroll-view横向滚动失效,动态获取scroll-view内部子容器总宽度,然后添加
    这是老bug了,官方一直没有解决掉。已经摸索到完美解决方案,遇到这个问题的可以看下。本文以三级导航页面中的二级横向滚动导航为例,说明如何做到不同宽度子元素的横向滚动。bug定位:本来横向滚动只要子元素宽度大于scroll-view固定宽度就可以滚动的,但是IOSApp开发中子元素高度必须......
  • uni-app/小程序自定义导航栏下拉刷新loading图标看不到问题解决
    实际效果图 我们在page.json中开启了自定义导航栏属性和下拉刷新属性后//开启下拉刷新"enablePullDownRefresh":true//自定义导航栏"navigationStyle":"custom"此时,页面中的下拉刷新三个小圆点会被我们的导航栏遮盖住,导致用户下拉刷新看不到loading效果,如下图:......
  • uniapp根据链接生成二维码
    1.我们在根目录common中新建一个js文件2.然后再这个js文件当中添加以下这些代码//uqrcode.js//---------------------------------------------------------------------//githubhttps://github.com/Sansnn/uQRCode//----------------------------------------------......
  • 从零开始的terraform之旅 - 3命令部分- 部署基础架构 (plan apply destroy)
    3命令部分-部署基础架构(planapply)文章目录3命令部分-部署基础架构(planapply)部署基础架构planplanningmodes**Refresh-onlymode**仅刷新模式,非常有用PlanningOptions规划选项apply命令Plan**Options**apply选项destroy命令部署基础架构terraform的......