请用java代码写出考勤夜班记录跨天新增和查询
由于没有提供具体的数据库结构和表结构,下面的代码只是提供一个大概的思路和示例代码,需要根据实际情况进行修改。
- 考勤夜班记录跨天新增
假设有一个考勤记录表attendance,包含以下字段:id、user_id、start_time、end_time、is_night_shift。
新增考勤夜班记录时,需要根据实际情况判断是否跨天,如果跨天则需要将开始时间和结束时间分别拆成两条记录插入到表中。
示例代码:
//获取当前时间
Date now = new Date();
//判断是否跨天
if (end_time.before(start_time)) {
//跨天,则需要拆成两条记录插入
AttendanceRecord record1 = new AttendanceRecord();
record1.setUser_id(user_id);
record1.setStart_time(start_time);
record1.setEnd_time(DateUtils.getEndOfDay(start_time));
record1.setIs_night_shift(true);
record1.setCreate_time(now);
attendanceDao.save(record1);
AttendanceRecord record2 = new AttendanceRecord();
record2.setUser_id(user_id);
record2.setStart_time(DateUtils.getStartOfDay(end_time));
record2.setEnd_time(end_time);
record2.setIs_night_shift(true);
record2.setCreate_time(now);
attendanceDao.save(record2);
} else {
//不跨天,则直接插入一条记录
AttendanceRecord record = new AttendanceRecord();
record.setUser_id(user_id);
record.setStart_time(start_time);
record.setEnd_time(end_time);
record.setIs_night_shift(true);
record.setCreate_time(now);
attendanceDao.save(record);
}
- 考勤夜班记录跨天查询
查询考勤夜班记录时,需要根据实际情况判断查询时间是否跨天,如果跨天则需要将查询时间分别拆成两个时间段查询,然后将结果合并。
示例代码:
//获取查询时间段
Date start = DateUtils.getStartOfDay(queryTime);
Date end = DateUtils.getEndOfDay(queryTime);
//判断是否跨天
if (end_time.before(start) || start_time.after(end)) {
//不跨天,则直接查询
List<AttendanceRecord> records = attendanceDao.findByUserIdAndIsNightShiftAndStartTimeBetweenOrEndTimeBetween(
userId, true, start, end, start, end);
return records;
} else {
//跨天,则拆成两个时间段查询,然后合并结果
List<AttendanceRecord> records1 = attendanceDao.findByUserIdAndIsNightShiftAndStartTimeBetweenOrEndTimeBetween(
userId, true, start, DateUtils.getEndOfDay(start), start, end);
List<AttendanceRecord> records2 = attendanceDao.findByUserIdAndIsNightShiftAndStartTimeBetweenOrEndTimeBetween(
userId, true, DateUtils.getStartOfDay(end), end, start, end);
records1.addAll(records2);
return records1;
}
原文地址: https://www.cveoy.top/t/topic/bHw8 著作权归作者所有。请勿转载和采集!