|
@@ -343,20 +343,23 @@ public class DataCollectController {
|
|
|
userFvTime.setProcinstId(resultSet.getString("id"));
|
|
|
userFvTime.setUserId(resultSet.getString("emp_no"));
|
|
|
userFvTime.setWorkDate(null==resultSet.getDate("attendance_date")?null:LocalDate.parse(sdfYmd.format(resultSet.getDate("attendance_date")), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+
|
|
|
+ LeaveSheet leaveSheet = null;
|
|
|
if (pageBO.getJobNumber() != null) {
|
|
|
//用户单独刷新某天的
|
|
|
String date = sdfYmd.format(resultSet.getDate("attendance_date"));
|
|
|
List<LeaveSheet> sheetList = getLeaveSheetInRange(date, date, pageBO.getJobNumber());
|
|
|
if (sheetList != null && sheetList.size() > 0) {
|
|
|
- //获取请假的最晚时间点作为考勤开始时间
|
|
|
- LeaveSheet leaveSheet = sheetList.get(0);
|
|
|
- userFvTime.setStartTime(leaveSheet.getEndTime());
|
|
|
+ leaveSheet = sheetList.get(0);
|
|
|
}
|
|
|
}
|
|
|
String startTime = resultSet.getString("come1");
|
|
|
- //如果有请假的结束时间,并且比打卡时间要晚,以请假结束时间作为上班时间
|
|
|
- if (userFvTime.getStartTime() != null && userFvTime.getStartTime().compareTo(startTime) > 0) {
|
|
|
- startTime = userFvTime.getStartTime();
|
|
|
+ //如果有请假时间,并且打卡时间在请假时间范围内,以请假结束时间作为打卡上班时间
|
|
|
+ if (leaveSheet != null) {
|
|
|
+ //获取请假的最晚时间点作为考勤开始时间
|
|
|
+ if (startTime.compareTo(leaveSheet.getBeginTime()) > 0 && startTime.compareTo(leaveSheet.getEndTime()) < 0) {
|
|
|
+ startTime = leaveSheet.getEndTime();
|
|
|
+ }
|
|
|
}
|
|
|
//从9:05开始计算,小于9:05的以9:00为准,向上取30分钟, 比如9:09,就转换为9:30
|
|
|
if (startTime.compareTo("09:05") <= 0) {
|
|
@@ -403,9 +406,10 @@ public class DataCollectController {
|
|
|
for (LeaveSheet leaveSheet : leaveSheetList) {
|
|
|
List<UserFvTime> userFvTimeList = resList.stream().filter(userFvTime -> leaveSheet.getStartDate().isEqual(userFvTime.getWorkDate()) && leaveSheet.getOwnerId().equals(userFvTime.getUserId())).collect(Collectors.toList());
|
|
|
if (userFvTimeList != null && userFvTimeList.size() > 0) {
|
|
|
- //有记录的话,更新考勤开始时间
|
|
|
+ //如果有请假时间,并且打卡时间在请假时间范围内,以请假结束时间作为打卡上班时间
|
|
|
UserFvTime userFvTime = userFvTimeList.get(0);
|
|
|
- if (userFvTime.getStartTime() == null || userFvTime.getStartTime().compareTo(leaveSheet.getEndTime()) < 0) {
|
|
|
+ if (userFvTime.getStartTime() == null ||
|
|
|
+ (userFvTime.getStartTime().compareTo(leaveSheet.getEndTime()) < 0 && userFvTime.getStartTime().compareTo(leaveSheet.getBeginTime()) > 0)) {
|
|
|
userFvTime.setStartTime(leaveSheet.getEndTime());
|
|
|
userFvTime.setWorkHours(calculateWorkHoursFromTime(userFvTime));
|
|
|
}
|