基于springboot的打卡签到
基于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 ) <= 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的打卡签到相关推荐
- 基于springboot的课堂考勤签到打卡小程序
- 基于SpringBoot+jpa+Erupt的出入登记签到打卡系统
目录 基于 SpringBoot + jpa + Erupt 后台框架开发的综合签到打卡系统 1 一.项目背景及需求分析 1 直接选择 ==> 用户 [不安全/不可靠] 1 用户名 + 密码 查 ...
- 基于 SpringBoot + jpa + Erupt 后台框架开发的综合签到打卡系统【100010425】
基于 SpringBoot + jpa + Erupt 后台框架开发的综合签到打卡系统 一 .项目背景及需求分析 用户在可靠验证下实现简化身份确认 在已有用户数据库基础上 传统校验方式: 直接选择 = ...
- 基于JAVA人脸识别公司签到系统(Springboot框架+AI人工智能) 开题报告
本科生毕业论文 基于Java(springboot框架)人脸识别公司签到系统 开题报告 学 院: 专 业: 计算机科学与技术 年 级: 学生姓名: 指导教师: XXXX大学本 ...
- 基于springboot的高校疫情打卡上报系统设计与实现 文档+项目源码及数据库文件+演示视频
基于springboot的高校疫情打卡上报系统设计与实现 摘要:在互联网环境下结合疫情防控要求,开发了基于微信小程序的体温填报.信息预警管理平台.随着微信小程序的热度越来越高,更多的人将目光放在这个平 ...
- 【JAVA程序设计】基于SpringBoot+VUE的高校疫情打卡系统-前后端分离
基于SpringBoot+VUE的高校疫情打卡系统 零.项目获取 一.项目简介 二.开发环境 三.项目技术 四.系统架构 五.运行截图 六.数据库设计 零.项目获取 获取方式(点击下载):是云猿实战 ...
- 【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)
[优秀毕设]基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发.可基于树莓派) 该系统利用Harr级联检测和LPBH进行人脸检测和训练.识别 利用Tkinter完成界面搭建 利用Fla ...
- 如何做一个基于微信小程序的打卡签到
要做一个基于微信小程序的打卡签到系统,可以按照以下步骤进行: 创建小程序:在微信公众平台上注册小程序账号,创建一个新的小程序. 设计打卡签到功能:根据需求,设计打卡签到的功能模块,包括签到按钮.签到时 ...
- 基于springboot高校学生健康打卡系统021009
基于springboot 高校学生健康打卡系统 摘 要 2019年12月19号中国武汉发生第一例新冠病毒的到来,大家都在听从政府的号召在居家隔离,不管是在城市还是在乡镇.农村,这引起我的注目,设计一套 ...
- 基于springboot+uniapp的物联网卡平台
真正的大师,永远都怀着一颗学徒的心! 一.项目简介 基于springboot+uniapp的物联网卡平台 二.实现功能 支持客服系统 支持套餐管理 支持卡片管理 支持代理管理 支持客户管理 支持分销设 ...
最新文章
- 首次使用mysql_mysql的初次使用操作
- Android抽象布局——include、merge 、ViewStub
- 【转】asp.net中的WebApplication(web应用程序)和WebSite(网站)
- 会计基础模拟练习一(3)
- 重磅快讯:CCF发布最新版推荐中文科技期刊目录
- 详细解释下头条图文和微头条发布建议
- MySQL中的备份和恢复
- Swift之UITextField+富文本+代理传值
- php imagefill,PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
- 高效管理CrossOver容器里的程序
- WebService /php soap 相关调用 收藏
- CNC编程工程师如何炼成?要哪些必备技能?
- 微软高级流格式ASF简介
- BP神经网络:误差反向传播公式的简单推导
- 利用python将长视频、长语音转换成文字教程 ,非常好用
- python中plt.cm.Paired
- 求神州战神Z7-SL7D3的2018BIOS
- 不可逆加密算法MD5 SHA与可逆加密算法Base64
- [转]步入成熟的无线视频应用 英特尔WiDi无线视频传输研究
- 双重否定的翻译 百度翻译 VS. 谷歌翻译
热门文章
- Spring IOC/DI和AOP
- 正则匹配0-999区间数字
- IDEA 报错 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath,如何排除依赖冲突
- 阿里云oss出现Unable to execute HTTP request: bucket.二级域名.域名: nodename nor servname provided, or not known
- 渲染用计算机功耗,【IT之家评测室】满功耗 RTX 3060 笔记本 GPU 表现如何?拯救者 R9000P 实测...
- 安卓root后查看WiFi密码
- VB代码窗口鼠标滚轮的使用
- android 模拟下雪的效果
- 菜鸟点评-FILCO 忍者二代机械键
- 视频教程-QQ机器人--基于酷Q开发7精讲-C/C++