基于springboot的打卡签到

  • 统计连续打卡天数
  • 返回指定日期是早上、下午、晚上、凌晨的哪个时间段
  • 统计本周的打卡记录
  • mapper.xml

统计连续打卡天数

  /*** 统计出最大连续打卡天数* @param signInDates* @return*/private static int persistentDay(List<Date> signInDates) {if (signInDates.size() == 0){return 0;}//对日期进行从小到大的排序List<Date> sortDates = Lists.newArrayList(new TreeSet<>(signInDates));//定义一个变量表示连续签到天数,从1开始int continuousDay = 1;int maxContinuousDay = 1;for (int i = 0; i < sortDates.size() - 1; i++) {int intervalDay = DateUtils.getDistanceDay(sortDates.get(i),sortDates.get(i + 1));if (intervalDay == 1){continuousDay++;}else{maxContinuousDay = maxContinuousDay <= continuousDay ? continuousDay : maxContinuousDay;continuousDay = 1;}}maxContinuousDay = maxContinuousDay <= continuousDay ? continuousDay : maxContinuousDay;return maxContinuousDay;}public static void main(String[] args) {List<Date> signInDates = Lists.newArrayList();try {signInDates.add(DateUtils.parseDate("2021-4-19","yyyy-MM-dd"));signInDates.add(DateUtils.parseDate("2021-4-20","yyyy-MM-dd"));signInDates.add(DateUtils.parseDate("2021-4-21","yyyy-MM-dd"));
//            signInDates.add(DateUtils.parseDate("2021-4-22","yyyy-MM-dd"));signInDates.add(DateUtils.parseDate("2021-4-23","yyyy-MM-dd"));signInDates.add(DateUtils.parseDate("2021-4-24","yyyy-MM-dd"));System.out.println(persistentDay(signInDates));} catch (ParseException e) {e.printStackTrace();}}

返回指定日期是早上、下午、晚上、凌晨的哪个时间段

  /*** 返回判断当前时间是早、下、晚、凌晨的哪个时间段。* @return*/private int timePerods(Date time){long mT = 0l;long zT = 0l;long eT = 0l;long dT = 0l;long tm = 0l;try {mT = DateUtils.parseDate("06:00:00", "HH:mm:ss").getTime();zT = DateUtils.parseDate("12:00:00", "HH:mm:ss").getTime();eT = DateUtils.parseDate("18:00:00", "HH:mm:ss").getTime();dT = DateUtils.parseDate("24:00:00", "HH:mm:ss").getTime();tm = DateUtils.parseDate(DateUtils.formatDate(time,"HH:mm:ss"),"HH:mm:ss").getTime();} catch (ParseException e) {e.printStackTrace();}if (tm >= mT && tm < zT){  //早上return 0;}else if (tm >= zT && tm < eT){ //下午return 1;}else if (tm >= eT && tm < dT){  //晚上return 2;}else {  //凌晨return 3;}}

统计本周的打卡记录

   //查询出该用户本周的打卡日期List<Date> dates = signTimeMapper.signDates(userId);//使用TreeMap排序,获取一周的日期,格式为MM-ddMap<String,Boolean> map = new TreeMap<>();for (int i = 0; i < 7; i++) {map.put(DateUtils.formatDate(org.apache.commons.lang3.time.DateUtils.addDays(DateUtils.getCurrWeekFirst(),i),"MM-dd"),false);}dates.forEach(item->{map.put(DateUtils.formatDate(item,"MM-dd"),true);});List<Boolean> weekRecords = Lists.newArrayList(map.values());//统计打卡排名List<Integer> sortRecordList = Lists.newArrayList();QueryWrapper<SignTime> qw = new QueryWrapper<>();qw.groupBy("user_id");list(qw).forEach(item->{sortRecordList.add(signTimeMapper.getSignRecord(item.getUserId()));});sortRecordList.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {  //反序排序return o2 - o1;}});signRecord.setSortRecordList(sortRecordList);signRecord.setSortRecord(sortRecordList.indexOf(signRecordTotals) + 1);

mapper.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.signtime.mapper.SignTimeMapper"><select id="getSignList" resultType="com.example.signtime.modules.vo.SignTimeVO">SELECTst.*,sign_in_time signDate,p.periods_info periodsInfoFROMsign_time stLEFT JOIN periods p ON p.periods = st.periodsWHEREDATE_SUB( CURRENT_DATE, INTERVAL #{countDays} DAY ) &lt;= date(sign_in_time) order by signDate</select><select id="getSignRecord" resultType="integer">SELECTcount( 1 )  signRecordTotalsFROM(SELECTuser_idFROMsign_time stWHEREuser_id = #{userId}AND YEARWEEK(date_format( sign_in_time, '%Y-%m-%d' )) = YEARWEEK(now())GROUP BYdate( sign_in_time )) sign_count</select><select id="signDates" resultType="date">SELECTdate( sign_in_time ) signTimeFROMsign_timeWHEREuser_id = #{userId}AND YEARWEEK(date_format( sign_in_time, '%Y-%m-%d' )) = YEARWEEK(now())GROUP BYdate(sign_in_time)</select>
</mapper>

项目地址:https://gitee.com/yzq1831914/sign-time.git

基于springboot的打卡签到相关推荐

  1. 基于springboot的课堂考勤签到打卡小程序

  2. 基于SpringBoot+jpa+Erupt的出入登记签到打卡系统

    目录 基于 SpringBoot + jpa + Erupt 后台框架开发的综合签到打卡系统 1 一.项目背景及需求分析 1 直接选择 ==> 用户 [不安全/不可靠] 1 用户名 + 密码 查 ...

  3. 基于 SpringBoot + jpa + Erupt 后台框架开发的综合签到打卡系统【100010425】

    基于 SpringBoot + jpa + Erupt 后台框架开发的综合签到打卡系统 一 .项目背景及需求分析 用户在可靠验证下实现简化身份确认 在已有用户数据库基础上 传统校验方式: 直接选择 = ...

  4. 基于JAVA人脸识别公司签到系统(Springboot框架+AI人工智能) 开题报告

      本科生毕业论文 基于Java(springboot框架)人脸识别公司签到系统 开题报告 学    院: 专    业: 计算机科学与技术 年    级: 学生姓名: 指导教师:   XXXX大学本 ...

  5. 基于springboot的高校疫情打卡上报系统设计与实现 文档+项目源码及数据库文件+演示视频

    基于springboot的高校疫情打卡上报系统设计与实现 摘要:在互联网环境下结合疫情防控要求,开发了基于微信小程序的体温填报.信息预警管理平台.随着微信小程序的热度越来越高,更多的人将目光放在这个平 ...

  6. 【JAVA程序设计】基于SpringBoot+VUE的高校疫情打卡系统-前后端分离

    基于SpringBoot+VUE的高校疫情打卡系统 零.项目获取 一.项目简介 二.开发环境 三.项目技术 四.系统架构 五.运行截图 六.数据库设计 零.项目获取 获取方式(点击下载):是云猿实战 ...

  7. 【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)

    [优秀毕设]基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发.可基于树莓派) 该系统利用Harr级联检测和LPBH进行人脸检测和训练.识别 利用Tkinter完成界面搭建 利用Fla ...

  8. 如何做一个基于微信小程序的打卡签到

    要做一个基于微信小程序的打卡签到系统,可以按照以下步骤进行: 创建小程序:在微信公众平台上注册小程序账号,创建一个新的小程序. 设计打卡签到功能:根据需求,设计打卡签到的功能模块,包括签到按钮.签到时 ...

  9. 基于springboot高校学生健康打卡系统021009

    基于springboot 高校学生健康打卡系统 摘 要 2019年12月19号中国武汉发生第一例新冠病毒的到来,大家都在听从政府的号召在居家隔离,不管是在城市还是在乡镇.农村,这引起我的注目,设计一套 ...

  10. 基于springboot+uniapp的物联网卡平台

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 基于springboot+uniapp的物联网卡平台 二.实现功能 支持客服系统 支持套餐管理 支持卡片管理 支持代理管理 支持客户管理 支持分销设 ...

最新文章

  1. 首次使用mysql_mysql的初次使用操作
  2. Android抽象布局——include、merge 、ViewStub
  3. 【转】asp.net中的WebApplication(web应用程序)和WebSite(网站)
  4. 会计基础模拟练习一(3)
  5. 重磅快讯:CCF发布最新版推荐中文科技期刊目录
  6. 详细解释下头条图文和微头条发布建议
  7. MySQL中的备份和恢复
  8. Swift之UITextField+富文本+代理传值
  9. php imagefill,PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
  10. 高效管理CrossOver容器里的程序
  11. WebService /php soap 相关调用 收藏
  12. CNC编程工程师如何炼成?要哪些必备技能?
  13. 微软高级流格式ASF简介
  14. BP神经网络:误差反向传播公式的简单推导
  15. 利用python将长视频、长语音转换成文字教程 ,非常好用
  16. python中plt.cm.Paired
  17. 求神州战神Z7-SL7D3的2018BIOS
  18. 不可逆加密算法MD5 SHA与可逆加密算法Base64
  19. [转]步入成熟的无线视频应用 英特尔WiDi无线视频传输研究
  20. 双重否定的翻译 百度翻译 VS. 谷歌翻译

热门文章

  1. Spring IOC/DI和AOP
  2. 正则匹配0-999区间数字
  3. IDEA 报错 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath,如何排除依赖冲突
  4. 阿里云oss出现Unable to execute HTTP request: bucket.二级域名.域名: nodename nor servname provided, or not known
  5. 渲染用计算机功耗,【IT之家评测室】满功耗 RTX 3060 笔记本 GPU 表现如何?拯救者 R9000P 实测...
  6. 安卓root后查看WiFi密码
  7. VB代码窗口鼠标滚轮的使用
  8. android 模拟下雪的效果
  9. 菜鸟点评-FILCO 忍者二代机械键
  10. 视频教程-QQ机器人--基于酷Q开发7精讲-C/C++