From 469a106cf617efd2e9fbe02937c355fa392ae7bc Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 10 二月 2026 17:53:07 +0800
Subject: [PATCH] feat: 消息通知添加APP跳转路由
---
src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java | 79 ++++++++++++++++++++++++++++-----------
1 files changed, 56 insertions(+), 23 deletions(-)
diff --git a/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java
index 5e0b5df..a0cf8f2 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/PersonalAttendanceRecordsServiceImpl.java
@@ -18,6 +18,7 @@
import com.ruoyi.staff.pojo.StaffOnJob;
import com.ruoyi.staff.service.PersonalAttendanceRecordsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.staff.task.PersonalAttendanceRecordsTask;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -48,6 +49,9 @@
private StaffOnJobMapper staffOnJobMapper;
@Autowired
+ private PersonalAttendanceRecordsTask personalAttendanceRecordsTask;
+
+ @Autowired
private ISysDictDataService dictDataService;
@Autowired
@@ -67,26 +71,43 @@
throw new BaseException("褰撳墠鐢ㄦ埛娌℃湁瀵瑰簲鐨勫憳宸ヤ俊鎭�");
}
+ // 褰撳墠鏃堕棿
+ LocalDateTime currentDateTime = LocalDateTime.now();
+
+ // 濡傛灉鎵撳崱鏃堕棿瓒呰繃鑰冨嫟涓嬬彮鏃堕棿涓嶈兘鎵撳崱
+ // 鑾峰彇鑰冨嫟涓嬬彮鏃堕棿鐐�
+ String[] timeConfigs = getAttendanceTimeConfig();
+ String timeConfig = timeConfigs[1];
+ String[] timeParts = timeConfig.split(":");
+ int standardHour = Integer.parseInt(timeParts[0]);
+ int standardMinute = Integer.parseInt(timeParts[1]);
+ // 褰撳墠鏃堕棿
+ int actualHour = currentDateTime.getHour();
+ int actualMinute = currentDateTime.getMinute();
+ // 鍒ゆ柇鎵撳崱鏃堕棿鏄惁鏅氫簬褰撳墠鏃堕棿
+ if (actualHour > standardHour || (actualHour == standardHour && actualMinute > standardMinute)) {
+ throw new BaseException("鎵撳崱鏃堕棿涓嶈兘鏅氫簬涓嬬彮鏃堕棿");
+ }
+
// 鏍规嵁鍛樺伐ID鍜屽綋鍓嶆棩鏈熸煡璇㈡墦鍗¤褰�
QueryWrapper<PersonalAttendanceRecords> attendanceQueryWrapper = new QueryWrapper<>();
attendanceQueryWrapper.eq("staff_on_job_id", staffOnJob.getId())
.eq("date", currentDate);
PersonalAttendanceRecords attendanceRecord = personalAttendanceRecordsMapper.selectOne(attendanceQueryWrapper);
- DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
// 鏍规嵁瀛楀吀璁剧疆鐨勮�冨嫟鏃堕棿鍒ゆ柇杩熷埌鏃╅��
if (attendanceRecord == null) {
// 涓嶅瓨鍦ㄦ墦鍗¤褰曪紝鍒涘缓鏂拌褰�
personalAttendanceRecords.setStaffOnJobId(staffOnJob.getId());
personalAttendanceRecords.setDate(currentDate);
- personalAttendanceRecords.setWorkStartAt(LocalDateTime.now());
- personalAttendanceRecords.setStatus(determineAttendanceStatus(personalAttendanceRecords.getWorkStartAt(), true));
+ personalAttendanceRecords.setWorkStartAt(currentDateTime);
+ personalAttendanceRecords.setStatus(determineAttendanceStatus(personalAttendanceRecords, true));
personalAttendanceRecords.setRemark(personalAttendanceRecords.getRemark());
personalAttendanceRecords.setTenantId(staffOnJob.getTenantId());
return personalAttendanceRecordsMapper.insert(personalAttendanceRecords);
} else {
if (attendanceRecord.getWorkEndAt() == null) {
// 鏇存柊宸ヤ綔缁撴潫鏃堕棿鍜屽伐浣滄椂闀�
- attendanceRecord.setWorkEndAt(LocalDateTime.now());
+ attendanceRecord.setWorkEndAt(currentDateTime);
// 璁$畻宸ヤ綔鏃堕暱锛堢簿纭埌鍒嗛挓锛屼繚鐣�2浣嶅皬鏁帮級
LocalDateTime startTime = attendanceRecord.getWorkStartAt();
LocalDateTime endTime = attendanceRecord.getWorkEndAt();
@@ -96,7 +117,7 @@
.divide(BigDecimal.valueOf(60), 2, RoundingMode.HALF_UP);
attendanceRecord.setWorkHours(workHours);
// 鏇存柊鑰冨嫟鐘舵��
- attendanceRecord.setStatus(determineAttendanceStatus(attendanceRecord.getWorkEndAt(), false));
+ attendanceRecord.setStatus(determineAttendanceStatus(attendanceRecord, false));
return personalAttendanceRecordsMapper.updateById(attendanceRecord);
} else {
throw new BaseException("鎮ㄥ凡缁忔墦杩囧崱浜�,鏃犻渶閲嶅鎵撳崱!!!");
@@ -104,27 +125,36 @@
}
}
+ // 鑾峰彇鑰冨嫟鏃堕棿閰嶇疆
+ private String[] getAttendanceTimeConfig() {
+ String[] timeConfigs = new String[2];
+ try {
+ String dictType = "sys_work_time";
+
+ // 鑾峰彇涓婄彮鏃堕棿閰嶇疆锛岄粯璁や负09:00
+ String startTimeConfig = dictDataService.selectDictLabel(dictType, "start_at");
+ timeConfigs[0] = (startTimeConfig == null || startTimeConfig.trim().isEmpty()) ? "09:00" : startTimeConfig;
+
+ // 鑾峰彇涓嬬彮鏃堕棿閰嶇疆锛岄粯璁や负18:00
+ String endTimeConfig = dictDataService.selectDictLabel(dictType, "end_at");
+ timeConfigs[1] = (endTimeConfig == null || endTimeConfig.trim().isEmpty()) ? "18:00" : endTimeConfig;
+
+ return timeConfigs;
+ } catch (Exception e) {
+ timeConfigs[0] = "09:00"; // 榛樿涓婄彮鏃堕棿
+ timeConfigs[1] = "18:00"; // 榛樿涓嬬彮鏃堕棿
+ return timeConfigs;
+ }
+ }
+
// 鏍规嵁瀹為檯鏃堕棿鍜屾槸鍚︿笂鐝椂闂村垽鏂�冨嫟鐘舵��
- // 0 姝e父 1 杩熷埌 2 鏃╅��
- private byte determineAttendanceStatus(LocalDateTime actualTime, boolean isStart) {
+ // 0 姝e父 1 杩熷埌 2 鏃╅�� 3 杩熷埌鏃╅�� 4 缂哄嫟
+ private Integer determineAttendanceStatus(PersonalAttendanceRecords attendanceRecord, boolean isStart) {
+ LocalDateTime actualTime = isStart ? attendanceRecord.getWorkStartAt() : attendanceRecord.getWorkEndAt();
try {
// 鑾峰彇鑰冨嫟鏃堕棿閰嶇疆
- String dictType = "sys_work_time"; // 鑰冨嫟鏃堕棿瀛楀吀绫诲瀷
- String timeConfig;
-
- if (isStart) {
- // 涓婄彮鏃堕棿閰嶇疆锛岄粯璁や负09:00
- timeConfig = dictDataService.selectDictLabel(dictType, "work_start_time");
- if (timeConfig == null || timeConfig.trim().isEmpty()) {
- timeConfig = "09:00";
- }
- } else {
- // 涓嬬彮鏃堕棿閰嶇疆锛岄粯璁や负18:00
- timeConfig = dictDataService.selectDictLabel(dictType, "work_end_time");
- if (timeConfig == null || timeConfig.trim().isEmpty()) {
- timeConfig = "18:00";
- }
- }
+ String[] timeConfigs = getAttendanceTimeConfig();
+ String timeConfig = isStart ? timeConfigs[0] : timeConfigs[1];
// 瑙f瀽鏍囧噯鏃堕棿
String[] timeParts = timeConfig.split(":");
@@ -144,6 +174,9 @@
} else {
// 涓嬬彮鎵撳崱锛氭棭浜庢爣鍑嗘椂闂寸畻鏃╅��
if (actualHour < standardHour || (actualHour == standardHour && actualMinute < standardMinute)) {
+ if (attendanceRecord.getStatus() == 1) {
+ return 3; // 杩熷埌鏃╅��
+ }
return 2; // 鏃╅��
}
}
--
Gitblit v1.9.3