请用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
//考勤记录跨天新增 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
//判断时间是否跨天 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(); }
原文地址: https://www.cveoy.top/t/topic/bHyq 著作权归作者所有。请勿转载和采集!