diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java index c69278a3..33a4673f 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceCheckServiceImpl.java @@ -265,6 +265,22 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService boolean hasPeriod2 = schedule.getShiftStartTime2() != null && schedule.getShiftEndTime2() != null; + boolean backward = isBackwardCrossDay(schedule); + + if (hasPeriod2) { + check.setP1StartTime(combineTime(schedule.getWorkDate(), schedule.getShiftStartTime())); + check.setP1EndTime(combineTime(schedule.getWorkDate(), schedule.getShiftEndTime())); + check.setP2StartTime(combineTime(schedule.getWorkDate(), schedule.getShiftStartTime2())); + check.setP2EndTime(combineTime(schedule.getWorkDate(), schedule.getShiftEndTime2())); + } else { + check.setP1StartTime(crossDay && backward + ? combinePrevDay(schedule.getWorkDate(), schedule.getShiftStartTime()) + : combineTime(schedule.getWorkDate(), schedule.getShiftStartTime())); + check.setP1EndTime(crossDay && !backward + ? combineNextDay(schedule.getWorkDate(), schedule.getShiftEndTime()) + : combineTime(schedule.getWorkDate(), schedule.getShiftEndTime())); + } + if (records.isEmpty()) { check.setOverallStatus("absent_full"); check.setAbsentType("full_day"); @@ -289,18 +305,11 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService } } - check.setP1StartTime(schedule.getShiftStartTime()); - check.setP1EndTime(schedule.getShiftEndTime()); checkPeriod(check, rule, 1, p1Records, schedule.getShiftStartTime(), schedule.getShiftEndTime()); - - check.setP2StartTime(schedule.getShiftStartTime2()); - check.setP2EndTime(schedule.getShiftEndTime2()); checkPeriod(check, rule, 2, p2Records, schedule.getShiftStartTime2(), schedule.getShiftEndTime2()); } else { List filtered = filterWindow(records, schedule.getWorkDate(), schedule.getShiftStartTime(), schedule.getShiftEndTime(), crossDay); - check.setP1StartTime(schedule.getShiftStartTime()); - check.setP1EndTime(schedule.getShiftEndTime()); checkPeriod(check, rule, 1, filtered, schedule.getShiftStartTime(), schedule.getShiftEndTime()); } @@ -551,4 +560,25 @@ public class WmsAttendanceCheckServiceImpl implements IWmsAttendanceCheckService private static Date toDate(LocalDateTime ldt) { return Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant()); } + + private static Date combineTime(Date workDate, Date shiftTime) { + if (workDate == null || shiftTime == null) return null; + LocalDate ld = toLocalDate(workDate); + LocalTime lt = toLocalTime(shiftTime); + return toDate(LocalDateTime.of(ld, lt)); + } + + private static Date combineNextDay(Date workDate, Date shiftTime) { + if (workDate == null || shiftTime == null) return null; + LocalDate ld = toLocalDate(workDate).plusDays(1); + LocalTime lt = toLocalTime(shiftTime); + return toDate(LocalDateTime.of(ld, lt)); + } + + private static Date combinePrevDay(Date workDate, Date shiftTime) { + if (workDate == null || shiftTime == null) return null; + LocalDate ld = toLocalDate(workDate).minusDays(1); + LocalTime lt = toLocalTime(shiftTime); + return toDate(LocalDateTime.of(ld, lt)); + } }