java用户每日签到

签到规则

签到周期以周为单位(最大连续签到天数为 7 天),周一为新的签到周期,所有连续签到天数重新开始计算。

表字段

以下为数据库所需的字段;

代码实现

非全部的代码;

/*** 判断用户连续签到的天数*/private Integer userSignDays(List<Date> dates, Serializable userId) {//判断今日的日期是周几?Date date = new Date();String weekOfDate = getWeekOfDate(date);//判断用户今日是否签到long count = userSignRecordDao.userSignCount(userId, date);Integer num;//判断今日是周几,查用户前几天连续签到的天数switch (weekOfDate) {case "Monday":num = signDays(dates, 1, count);break;case "Tuesday":num = signDays(dates, 2, count);break;case "Wednesday":num = signDays(dates, 3, count);break;case "Thursday":num = signDays(dates, 4, count);break;case "Friday":num = signDays(dates, 5, count);break;case "Saturday":num = signDays(dates, 6, count);break;case "Sunday":num = signDays(dates, 7, count);break;default:return 0;}return num;}
/*** 连续签到天数统计** @param dates      用户签到天数 list* @param weekOfDate 查询最近weekOfDate天的数据* @return 用户连续签到的天数*/private Integer signDays(List<Date> dates, Integer weekOfDate, Long count) {int n = 0;int m = 1;//非周一今日未签到查询用户连续签到天数if (weekOfDate != 1 && count == 0) {return forWeekOfDate(dates, weekOfDate - 1, m);} else if (weekOfDate != 1 && count == 1) {//非周一今日已签到查询用户连续签到天数return forWeekOfDate(dates, weekOfDate, n);}return (weekOfDate == 1 && count == 1) ? 1 : 0;}/*** for 遍历获取用户签到的天数** @param dates      用户签到天数 list* @param weekOfDate 获取用户最近几天的签到时间* @param number     0,用户当天已经签到,从当天记录开始查询,1,用户当天没有签到,从前一个日期记录开始查询* @return 用户连续签到的天数*/private Integer forWeekOfDate(List<Date> dates, Integer weekOfDate, Integer number) {int continuousDay = 0;if (dates.size() < weekOfDate) {weekOfDate = dates.size();}for (int i = 0; i < weekOfDate; i++) {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(Calendar.DAY_OF_YEAR, -number++);Date d = calendar.getTime();boolean sign = isSameDay(dates.get(i), d);if (sign) {continuousDay++;} else {return continuousDay;}}return continuousDay;}
/*** 判断当前日期是否是周一*/private static boolean currentIsMonday() {Date date = new Date();Calendar calendar = Calendar.getInstance();calendar.setTime(date);if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {return Boolean.TRUE;}return Boolean.FALSE;}
/*** 判断两个日期是否为同一天** @param date1 日期* @param date2 日期* @return true&false*/private static boolean isSameDay(Date date1, Date date2) {Calendar calDateA = Calendar.getInstance();calDateA.setTime(date1);Calendar calDateB = Calendar.getInstance();calDateB.setTime(date2);return calDateA.get(Calendar.YEAR) == calDateB.get(Calendar.YEAR)&& calDateA.get(Calendar.MONTH) == calDateB.get(Calendar.MONTH)&& calDateA.get(Calendar.DAY_OF_MONTH) == calDateB.get(Calendar.DAY_OF_MONTH);}/*** 判断今天是周几** @param date 当前日期* @return 今天周几*/private static String getWeekOfDate(Date date) {String[] weekDays = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};Calendar cal = Calendar.getInstance();cal.setTime(date);int w = cal.get(Calendar.DAY_OF_WEEK) - 1;if (w < 0)w = 0;return weekDays[w];}

java实现用户每日签到功能相关推荐

  1. 每日签到功能怎么实现的?

    关于网友提出的" 每日签到功能怎么实现的?"问题疑问,本网通过在网上对" 每日签到功能怎么实现的?"有关的相关答案进行了整理,供用户进行参考,详细问题解答如下: ...

  2. html+css+JavaScript实现每日签到功能

    用户每日签到主要在于实现点击-签到-显示即时时间 本次使用的是原生js实现签到功能,绑定签到按钮点击需要显示的内容,获取网络时间,获取年月日,再对文字进行拼接,最后再进行插入html中的展示内容 下面 ...

  3. js php 实现日历签到_js实现每日签到功能

    本文实例为大家分享了js实现每日签到功能的具体代码,供大家参考,具体内容如下 js: var calUtil = { getDaysInmonth : function(iMonth, iYear){ ...

  4. 公众号签到领积分怎么做?每日签到功能上架

    每日签到为公众号实现了每日积分签到的的功能,对于吸粉和留存起到了非常重要的意义. 微Sir图文助手可以实现递增签到和签到上限和自定义签到签到回复的功能. 费用:接入微Sir图文助手基础服务后免费使用 ...

  5. java实现用户登录注册功能(用集合框架来实现)

    需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTe ...

  6. 基于jQuery的日历+每日签到功能

    公司要开发一个h5页面,里边有一个每日签到抽奖的功能,本以为这样的插件应该会有很多,结果找到的全都是仅生成日历的插件,于是乎就出现了下面这个东西.(前端菜鸟,请大神嘴下留情,也请小伙伴们多提宝贵意见) ...

  7. 每日积分返还的php代码,php实现每日签到功能

    每日签到的功能,供大家参考,具体内容如下 首次签到获得1个积分,第二次签到获得2个积分,第三次签到获得3个积分,以此类推但是签到必须每天连续积分才可以递增,如果有中断再次签到时获得积分仍然从1开始递增 ...

  8. tp5实现每日签到功能

    tp5每日签到设计 数据库设计 代码实现 数据库设计 要求: 每个用户可以签到7天,连续签到7天或者中途断签都重新开始计算签到天数,签到会获取对应奖励 分析: 1.连续签到 2.签到7天或者断签重新开 ...

  9. js实现每日签到功能

    注:此功能是在借鉴一位前辈的功能上实现的,稍有改动,具体在哪里我又忘了,因为我都是写好了才来博客记录的,所以之前在哪里找的资料没给记住,对不住啦! 不废话,先看效果! 核心js: var calUti ...

最新文章

  1. BZOJ2938:[POI2000] 病毒
  2. ZOJ3531: [SDOI2014] 旅行
  3. 达芬奇linux 与win,抛弃Linux:达芬奇软件WIN版安装及设置.doc
  4. r语言worldclim数据_R语言空间数据分析(五):栅格数据处理
  5. 使用Angular2建立项目
  6. 国开大学计算机应用基础形考答案模块了2,国开电大 计算机应用基础(本) 形考二答案...
  7. IT男,程序猿在婚恋市场有多受欢迎?
  8. C 标准库中输出到字符串、到文件的相关函数
  9. VMware visio制图形状大全
  10. html如何上下滚动字幕,html页面实现滚动字幕
  11. 企业AD域管理利弊_如何避免企业AD域管理中的各种弊端?
  12. LimeSDR 中文教程 (九)
  13. tensorflow with求导_Tensorflow 是如何求导的?
  14. mpu6050常见问题
  15. tft液晶屏接口概述及信号类型
  16. 宇枫资本上班族理财的方法
  17. 在上海创业的日子之寻找办公室
  18. 深度学习核心技术精讲100篇(四十五)-商业DMP数据管理平台的架构与实践
  19. OpenCV——将图片转换成视频
  20. 国外的码农是什么状态?硅谷程序员:不加班,不穿女装

热门文章

  1. [转]借闪光灯的东风 成就你完美的摄影作品
  2. 格物钛数据平台国内外经典开源数据汇总(自动驾驶、目标检测、人脸识别、人体姿态估计、文本检测、NLP、医疗)
  3. 有没有好用的资产管理系统推荐(免费好用的it资产管理系统)
  4. 邓耀鑫:黄金短线继续下挫,黄金最新行情分析及操作建议
  5. 华为认证考试费用多少钱
  6. 什么是并发、并行、高并发?到底多大才算高并发?
  7. 国产达梦数据库(DM)安装教程及使用
  8. CAD入门技巧:粗糙度符号动态块详解
  9. 速盘服务器什么时候停止维护,速盘竟然收集用户数据并上传自己服务器?作者出来澄清。还有干净安全的网盘吗?...
  10. 云服务器、虚拟主机、VPS有什么具体区别?