基于springboot的打卡签到
生活随笔
收集整理的這篇文章主要介紹了
基于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的打卡签到的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: knative入门指南
- 下一篇: 数字规律问题--面试题43、44、45、