//考勤记录跨天新增 public void addAttendanceLog(AttendanceLog attendanceLog){ //判断打卡时间是否跨天 if(isCrossDay(attendanceLog.getAttendanceTime())){ //将跨天记录分为两条记录,一条记录上班时间,一条记录下班时间 AttendanceLog upAttendanceLog = new AttendanceLog(); upAttendanceLog.setUserId(attendanceLog.getUserId()); upAttendanceLog.setDeptId(attendanceLog.getDeptId()); upAttendanceLog.setUmsClassId(attendanceLog.getUmsClassId()); upAttendanceLog.setAttendanceTime(getUpTime(attendanceLog.getAttendanceTime())); upAttendanceLog.setType(0); upAttendanceLog.setAttendanceType(attendanceLog.getAttendanceType()); upAttendanceLog.setYear(attendanceLog.getYear()); upAttendanceLog.setMonth(attendanceLog.getMonth()); upAttendanceLog.setWeek(attendanceLog.getWeek()); upAttendanceLog.setDay(getUpDay(attendanceLog.getAttendanceTime())); upAttendanceLog.setHourMinterSecond(getUpHourMinuteSecond(attendanceLog.getAttendanceTime())); upAttendanceLog.setAttendanceLogType(attendanceLog.getAttendanceLogType()); upAttendanceLog.setImg(attendanceLog.getImg()); upAttendanceLog.setCreateBy(attendanceLog.getCreateBy()); upAttendanceLog.setCreateTime(new Date()); upAttendanceLog.setUpdateBy(attendanceLog.getUpdateBy()); upAttendanceLog.setUpdateTime(new Date()); upAttendanceLog.setRemark(attendanceLog.getRemark());

    AttendanceLog downAttendanceLog = new AttendanceLog();
    downAttendanceLog.setUserId(attendanceLog.getUserId());
    downAttendanceLog.setDeptId(attendanceLog.getDeptId());
    downAttendanceLog.setUmsClassId(attendanceLog.getUmsClassId());
    downAttendanceLog.setAttendanceTime(getDownTime(attendanceLog.getAttendanceTime()));
    downAttendanceLog.setType(1);
    downAttendanceLog.setAttendanceType(attendanceLog.getAttendanceType());
    downAttendanceLog.setYear(attendanceLog.getYear());
    downAttendanceLog.setMonth(attendanceLog.getMonth());
    downAttendanceLog.setWeek(attendanceLog.getWeek());
    downAttendanceLog.setDay(getDownDay(attendanceLog.getAttendanceTime()));
    downAttendanceLog.setHourMinterSecond(getDownHourMinuteSecond(attendanceLog.getAttendanceTime()));
    downAttendanceLog.setAttendanceLogType(attendanceLog.getAttendanceLogType());
    downAttendanceLog.setImg(attendanceLog.getImg());
    downAttendanceLog.setCreateBy(attendanceLog.getCreateBy());
    downAttendanceLog.setCreateTime(new Date());
    downAttendanceLog.setUpdateBy(attendanceLog.getUpdateBy());
    downAttendanceLog.setUpdateTime(new Date());
    downAttendanceLog.setRemark(attendanceLog.getRemark());
    
    //将分开的两条记录添加到数据库中
    attendanceLogMapper.insert(upAttendanceLog);
    attendanceLogMapper.insert(downAttendanceLog);
}else{
    //不跨天直接添加
    attendanceLogMapper.insert(attendanceLog);
}

}

//考勤记录跨天查询 public List getAttendanceLogByTimeAndUserId(String attendanceTime, Long userId){ List attendanceLogList = new ArrayList<>(); //判断查询时间是否跨天 if(isCrossDay(attendanceTime)){ //查询上班记录 AttendanceLog upAttendanceLog = attendanceLogMapper.selectByTimeAndUserId(getUpTime(attendanceTime), userId); if(upAttendanceLog != null){ attendanceLogList.add(upAttendanceLog); } //查询下班记录 AttendanceLog downAttendanceLog = attendanceLogMapper.selectByTimeAndUserId(getDownTime(attendanceTime), userId); if(downAttendanceLog != null){ attendanceLogList.add(downAttendanceLog); } }else{ //不跨天直接查询 attendanceLogList = attendanceLogMapper.selectByTimeAndUserId(attendanceTime, userId); } return attendanceLogList; }

//判断时间是否跨天 public boolean isCrossDay(String attendanceTime){ //获取打卡时间的日期 Date date = parseDate(attendanceTime); //获取打卡时间的时分秒 String hourMinuteSecond = getHourMinuteSecond(attendanceTime); //将打卡时间的时分秒转化为秒 int second = parseHourMinuteSecond(hourMinuteSecond); //获取当天的结束时间(即23:59:59) int endSecond = 236060 + 59*60 + 59; //如果打卡时间的秒数大于当天的结束时间,则说明打卡时间跨天 if(second > endSecond){ return true; } return false; }

//获取上班记录的打卡时间 public String getUpTime(String attendanceTime){ //获取打卡时间的日期 Date date = parseDate(attendanceTime); //获取打卡时间的时分秒 String hourMinuteSecond = getHourMinuteSecond(attendanceTime); //如果打卡时间的时分秒小于上班时间,则说明是前一天的下班记录,打卡时间日期需要加1天 if(parseHourMinuteSecond(hourMinuteSecond) < parseHourMinuteSecond("08:30:00")){ date = addDay(date, 1); } //将打卡时间的日期和上班时间的时分秒拼接起来 String upTime = formatDate(date) + " 08:30:00"; return upTime; }

//获取下班记录的打卡时间 public String getDownTime(String attendanceTime){ //获取打卡时间的日期 Date date = parseDate(attendanceTime); //获取打卡时间的时分秒 String hourMinuteSecond = getHourMinuteSecond(attendanceTime); //如果打卡时间的时分秒大于下班时间,则说明是第二天的上班记录,打卡时间日期需要减1天 if(parseHourMinuteSecond(hourMinuteSecond) > parseHourMinuteSecond("17:30:00")){ date = addDay(date, -1); } //将打卡时间的日期和下班时间的时分秒拼接起来 String downTime = formatDate(date) + " 17:30:00"; return downTime; }

//获取上班记录的打卡日期 public String getUpDay(String attendanceTime){ //获取打卡时间的日期 Date date = parseDate(attendanceTime); //获取打卡时间的时分秒 String hourMinuteSecond = getHourMinuteSecond(attendanceTime); //如果打卡时间的时分秒小于上班时间,则说明是前一天的下班记录,打卡日期需要加1天 if(parseHourMinuteSecond(hourMinuteSecond) < parseHourMinuteSecond("08:30:00")){ date = addDay(date, 1); } //将打卡日期转化为字符串 String upDay = formatDate(date, "dd"); return upDay; }

//获取下班记录的打卡日期 public String getDownDay(String attendanceTime){ //获取打卡时间的日期 Date date = parseDate(attendanceTime); //获取打卡时间的时分秒 String hourMinuteSecond = getHourMinuteSecond(attendanceTime); //如果打卡时间的时分秒大于下班时间,则说明是第二天的上班记录,打卡日期需要减1天 if(parseHourMinuteSecond(hourMinuteSecond) > parseHourMinuteSecond("17:30:00")){ date = addDay(date, -1); } //将打卡日期转化为字符串 String downDay = formatDate(date, "dd"); return downDay; }

//获取上班记录的打卡时分秒 public String getUpHourMinuteSecond(String attendanceTime){ //获取打卡时间的时分秒 String hourMinuteSecond = getHourMinuteSecond(attendanceTime); //如果打卡时间的时分秒小于上班时间,则说明是前一天的下班记录,打卡时分秒需要加24小时 if(parseHourMinuteSecond(hourMinuteSecond) < parseHourMinuteSecond("08:30:00")){ hourMinuteSecond = addHour(hourMinuteSecond, 24); } return hourMinuteSecond; }

//获取下班记录的打卡时分秒 public String getDownHourMinuteSecond(String attendanceTime){ //获取打卡时间的时分秒 String hourMinuteSecond = getHourMinuteSecond(attendanceTime); //如果打卡时间的时分秒大于下班时间,则说明是第二天的上班记录,打卡时分秒需要减24小时 if(parseHourMinuteSecond(hourMinuteSecond) > parseHourMinuteSecond("17:30:00")){ hourMinuteSecond = addHour(hourMinuteSecond, -24); } return hourMinuteSecond; }

//将日期转化为字符串 public String formatDate(Date date, String pattern){ SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(date); }

public String formatDate(Date date){ return formatDate(date, "yyyy-MM-dd"); }

//将字符串转化为日期 public Date parseDate(String dateStr){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { return sdf.parse(dateStr.substring(0, 10)); } catch (ParseException e) { e.printStackTrace(); return null; } }

//将时分秒转化为秒 public int parseHourMinuteSecond(String hourMinuteSecond){ String[] hms = hourMinuteSecond.split(":"); return Integer.parseInt(hms[0])6060 + Integer.parseInt(hms[1])*60 + Integer.parseInt(hms[2]); }

//将秒转化为时分秒 public String formatHourMinuteSecond(int second){ int hour = second / 3600; int minute = (second - hour3600) / 60; int sec = second - hour3600 - minute*60; return String.format("%02d:%02d:%02d", hour, minute, sec); }

//在时分秒上加上指定的小时数 public String addHour(String hourMinuteSecond, int hour){ int second = parseHourMinuteSecond(hourMinuteSecond) + hour*3600; return formatHourMinuteSecond(second); }

//在日期上加上指定的天数 public Date addDay(Date date, int day){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, day); return calendar.getTime(); }

请用java代码写出考勤夜班记录跨天新增和查询数据库表结构如下CREATE TABLE ums_attendance_log attendance_log_id bigint20 NOT NULL AUTO_INCREMENT COMMENT 考勤记录id user_id bigint20 NOT NULL COMMENT 员工id dept_id bigint20 NOT NULL C

原文地址: https://www.cveoy.top/t/topic/bHyq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录