From 1b2f1eb44d9f0de6b9238cfe314988a95c87344a Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 02 四月 2026 13:37:15 +0800
Subject: [PATCH] 绩效管理:工时汇总对接MES数据&人员考勤调整
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/StaffAttendanceTrackingRecordServiceImpl.java | 29 ++++++++++++++++++-----------
1 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/StaffAttendanceTrackingRecordServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/StaffAttendanceTrackingRecordServiceImpl.java
index 99d2aaf..27a6c78 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/StaffAttendanceTrackingRecordServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/StaffAttendanceTrackingRecordServiceImpl.java
@@ -19,6 +19,7 @@
import com.ruoyi.inspect.pojo.StaffAttendanceTrackingRecord;
import com.ruoyi.inspect.service.StaffAttendanceTrackingRecordService;
import com.ruoyi.inspect.util.HourDiffCalculator;
+import com.ruoyi.inspect.util.TimeDiffCalculator;
import com.ruoyi.inspect.vo.StaffAttendanceVO;
import com.ruoyi.inspect.vo.StaffClockInVO;
import com.ruoyi.performance.dto.PerformanceShiftMapDto;
@@ -90,6 +91,11 @@
private final static List<String> syncDeviceCode = Arrays.asList("1001538", "1001539", "1001540", "1001541",
"1001626", "1001627", "1001628", "1001629");
+ /**
+ * 涓婄彮鏃堕棿鍒ゅ畾杈圭晫灏忔椂鏁�
+ */
+ private final static long WORK_TIME_BOUNDARY = 2L;
+
@Override
@Transactional(rollbackFor = Exception.class)
public boolean syncAttendanceRecord(LocalDateTime startDate, LocalDateTime endDate) {
@@ -140,9 +146,6 @@
public IPage<StaffAttendanceVO> pageAttendanceRecord(Page<StaffAttendanceTrackingRecord> page,
StaffAttendanceDTO staffAttendanceDTO) {
// 鏌ヨ鎵撳崱璁板綍
- System.out.println(staffAttendanceDTO.getStartDate());
- System.out.println(staffAttendanceDTO.getEndDate());
- System.out.println(ObjectUtils.allNotNull(staffAttendanceDTO.getStartDate(),staffAttendanceDTO.getEndDate()));
Wrapper<StaffAttendanceTrackingRecord> queryWrapper = Wrappers.<StaffAttendanceTrackingRecord>lambdaQuery()
.eq(StaffAttendanceTrackingRecord::getEnableReport, Boolean.TRUE)
.between(ObjectUtils.allNotNull(staffAttendanceDTO.getStartDate(),staffAttendanceDTO.getEndDate()),
@@ -181,10 +184,6 @@
LocalTime currentShiftStartTime = LocalTime.parse(p.getStartTime(), HHmm);
LocalDateTime currentShiftStartDateTime = LocalDateTime.of(p.getWorkTime().toLocalDate(),
currentShiftStartTime);
- // 褰撳墠鐝缁撴潫鏃堕棿
- LocalTime currentShiftEndTime = LocalTime.parse(p.getEndTime(), HHmm);
- LocalDateTime currentShiftEndDateTime = LocalDateTime.of(endDateTime.toLocalDate(),
- currentShiftEndTime);
// 涓嬩竴鐝寮�濮嬫椂闂�
LocalDateTime nextShiftStartDateTime = getShiftStartDateTime(i + 1, performanceShifts,
startDateTime.plusDays(1L));
@@ -192,15 +191,21 @@
// 濡傛灉灏忔椂宸负璐熸暟锛岃〃绀鸿法澶╋紝缁撴潫鏃堕棿闇�鍔犱竴
endDateTime = endDateTime.plusDays(1L);
}
+ // 褰撳墠鐝缁撴潫鏃堕棿
+ LocalTime currentShiftEndTime = LocalTime.parse(p.getEndTime(), HHmm);
+ LocalDateTime currentShiftEndDateTime = LocalDateTime.of(endDateTime.toLocalDate(),
+ currentShiftEndTime);
// 杩囨护鍑哄綋鍓嶄汉鍛樺綋鍓嶇彮娆$殑杩�/鍑鸿褰�
LocalDateTime workDateTime = null;
LocalDateTime offWorkDateTime = null;
List<StaffAttendanceTrackingRecord> enterRecords = filterAttendanceRecord(p.getPersonCode(),
EnterOrExitType.ENTER.getValue(), startDateTime, endDateTime, recordList);
+ //涓婄彮鏃堕棿鍒ゅ畾杈圭晫
+ LocalDateTime boundaryTime = currentShiftStartDateTime.minusHours(WORK_TIME_BOUNDARY);
if (!enterRecords.isEmpty()) {
// 涓婄彮鏃堕棿鍜岀姸鎬�
StaffAttendanceTrackingRecord enterRecord = enterRecords.stream()
- .filter(s -> !s.getSwingTime().isAfter(currentShiftStartDateTime))
+ .filter(s -> !s.getSwingTime().isAfter(currentShiftStartDateTime) && !s.getSwingTime().isBefore(boundaryTime))
.max(Comparator.comparing(StaffAttendanceTrackingRecord::getSwingTime))
.orElse(new StaffAttendanceTrackingRecord());
if (BeanUtil.isEmpty(enterRecord)) {
@@ -244,14 +249,16 @@
}
if (ObjectUtils.allNotNull(workDateTime, offWorkDateTime)) {
- vo.setActualWorkHours(HourDiffCalculator.getHourDiff(workDateTime.toLocalTime().format(HHmm),
- offWorkDateTime.toLocalTime().format(HHmm)));
+ vo.setActualWorkHours(TimeDiffCalculator.getHourDiff(workDateTime,
+ offWorkDateTime));
}
// 璧嬪��
vo.setShiftId(p.getShift());
vo.setPersonCode(p.getPersonCode());
vo.setPersonName(p.getUserName());
- vo.setPlannedWorkHours(hourDiff);
+ //搴斿嫟鏃堕暱
+ double plannedWorkHours = Math.abs(hourDiff);
+ vo.setPlannedWorkHours(plannedWorkHours);
vo.setSwingDate(startDateTime);
vo.setWorkDateTime(workDateTime);
vo.setOffWorkDateTime(offWorkDateTime);
--
Gitblit v1.9.3