From 344a18cc69dd2f728734e940421b717cacb85563 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 22:33:38 +0800
Subject: [PATCH] fix(staff): 排班管理合计出勤改为按打卡记录统计
---
src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java | 62 ++++++++++++++++++++++++------
1 files changed, 49 insertions(+), 13 deletions(-)
diff --git a/src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java
index 81a3545..24d0511 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java
@@ -156,6 +156,12 @@
}
}
}
+ // 鍚堣鍑哄嫟澶╂暟浠ュ疄闄呮墦鍗¤褰曚负鍑嗭紙鎺掔彮鍙唬琛ㄨ鍒掞級
+ Map<String, Integer> attendanceDays = loadMonthAttendanceDays(time, userName, sysDeptId);
+ for (PerformanceShiftMapDto i : mapIPage.getRecords()) {
+ i.getMonthlyAttendance().put("totalAttendance",
+ attendanceDays.getOrDefault(i.getUserId(), 0));
+ }
// 鑾峰彇header鏃堕棿
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -190,7 +196,8 @@
IPage<Map<String, Object>> mapYearIPage = baseMapper.performanceShiftYear(page, time, userName, sysDeptId);
//鏌ヨ鎵�鏈夌彮娆�(鎵撳崱瑙勫垯)
List<PersonalAttendanceLocationConfig> personalAttendanceLocationConfigs = personalAttendanceLocationConfigMapper.selectList(null);
- mapYearIPage.setRecords(annualAttendanceProcessing(mapYearIPage.getRecords(), personalAttendanceLocationConfigs));
+ Map<String, Map<Integer, Integer>> attendanceCounts = loadYearAttendanceDays(time, userName, sysDeptId);
+ mapYearIPage.setRecords(annualAttendanceProcessing(mapYearIPage.getRecords(), personalAttendanceLocationConfigs, attendanceCounts));
return mapYearIPage;
}
@@ -204,7 +211,8 @@
LocalDateTime localDateTime = LocalDateTime.parse(time, formatters);
map.put("header", getYearHeader(localDateTime.getYear() + " 骞�", personalAttendanceLocationConfigs));
List<Map<String, Object>> mapYearList = baseMapper.performanceShiftYearList(time, userName, sysDeptId);
- annualAttendanceProcessing(mapYearList, personalAttendanceLocationConfigs);
+ Map<String, Map<Integer, Integer>> attendanceCounts = loadYearAttendanceDays(time, userName, sysDeptId);
+ annualAttendanceProcessing(mapYearList, personalAttendanceLocationConfigs, attendanceCounts);
List<List<Object>> lists = dataRequiredForProcessingIntoExcel(mapYearList, personalAttendanceLocationConfigs);
map.put("data", lists);
return map;
@@ -215,6 +223,8 @@
//鏌ヨ鎵�鏈夌彮娆�(鎵撳崱瑙勫垯)
List<PersonalAttendanceLocationConfig> personalAttendanceLocationConfigs = personalAttendanceLocationConfigMapper.selectList(null);
List<PerformanceShiftMapDto> mapIPage = baseMapper.performanceShiftList(time, userName, sysDeptId);
+ // 鍚堣鍑哄嫟澶╂暟浠ュ疄闄呮墦鍗¤褰曚负鍑嗭紙鎺掔彮鍙唬琛ㄨ鍒掞級
+ Map<String, Integer> attendanceDays = loadMonthAttendanceDays(time, userName, sysDeptId);
mapIPage.forEach(i -> {
String[] shiftTimes = i.getShiftTime().split(";");
double totalAttendance = 0;
@@ -249,6 +259,8 @@
}
i.setList(map);
i.setShiftTime(null);
+ i.getMonthlyAttendance().put("totalAttendance",
+ attendanceDays.getOrDefault(i.getUserId(), 0));
});
Map<Object, Object> map = new HashMap<>();
DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -270,16 +282,46 @@
return map;
}
+ // 瀹為檯鎵撳崱鍑哄嫟澶╂暟锛堟寜鏈堬級
+ private Map<String, Integer> loadMonthAttendanceDays(String time, String userName, Integer sysDeptId) {
+ Map<String, Integer> result = new HashMap<>();
+ for (Map<String, Object> row : baseMapper.attendanceDayCountByMonth(time, userName, sysDeptId)) {
+ Object userId = row.get("user_id");
+ Object days = row.get("days");
+ if (userId != null && days != null) {
+ result.put(String.valueOf(userId), new BigDecimal(days.toString()).intValue());
+ }
+ }
+ return result;
+ }
+
+ // 瀹為檯鎵撳崱鍑哄嫟澶╂暟锛堟寜骞达紝姣忎汉姣忔湀锛�
+ private Map<String, Map<Integer, Integer>> loadYearAttendanceDays(String time, String userName, Integer sysDeptId) {
+ Map<String, Map<Integer, Integer>> result = new HashMap<>();
+ for (Map<String, Object> row : baseMapper.attendanceMonthCountByYear(time, userName, sysDeptId)) {
+ Object userId = row.get("user_id");
+ Object month = row.get("month");
+ Object days = row.get("days");
+ if (userId == null || month == null || days == null) {
+ continue;
+ }
+ result.computeIfAbsent(String.valueOf(userId), k -> new HashMap<>())
+ .put(Integer.parseInt(month.toString()), new BigDecimal(days.toString()).intValue());
+ }
+ return result;
+ }
+
// 骞村垎椤典笌瀵煎嚭鍏卞悓浣跨敤
- public List<Map<String, Object>> annualAttendanceProcessing(List<Map<String, Object>> mapYearList,List<PersonalAttendanceLocationConfig> personalAttendanceLocationConfigs) {
+ public List<Map<String, Object>> annualAttendanceProcessing(List<Map<String, Object>> mapYearList, List<PersonalAttendanceLocationConfig> personalAttendanceLocationConfigs, Map<String, Map<Integer, Integer>> attendanceCounts) {
for (Map<String, Object> map : mapYearList) {
Map<String, Object> resultMap = new LinkedHashMap<>();
Map<String, Object> hashMapYear = new LinkedHashMap<>();
double totalYearAttendance = 0;
+ // 姣忎釜鏈堢殑鍚堣鍑哄嫟澶╂暟浠ュ疄闄呮墦鍗¤褰曚负鍑�
+ Map<Integer, Integer> staffMonthAttendance = attendanceCounts.getOrDefault(String.valueOf(map.get("user_id")), Collections.emptyMap());
// 涓�骞�12涓湀
for (int i = 1; i < 13; i++) {
Map<String, Object> hashMapMonth = new LinkedHashMap<>();
- double totalMonthAttendance = 0;
for (PersonalAttendanceLocationConfig personalAttendanceLocationConfig : personalAttendanceLocationConfigs) {
// 鍒濆鍖栬祴鍊�
if (!hashMapYear.containsKey(personalAttendanceLocationConfig.getShift())){
@@ -291,14 +333,6 @@
int count = countOccurrences(charArray, i + "锛�" + personalAttendanceLocationConfig.getShift());
hashMapMonth.put(personalAttendanceLocationConfig.getShift(), count);
hashMapYear.put(personalAttendanceLocationConfig.getShift(), new BigDecimal(hashMapYear.get(personalAttendanceLocationConfig.getShift()).toString()).add(new BigDecimal(count)));
- // 鏃╋紝涓紝澶滐紝宸�
- if (personalAttendanceLocationConfig.getShift().contains("鏃�") ||
- personalAttendanceLocationConfig.getShift().contains("涓�") ||
- personalAttendanceLocationConfig.getShift().contains("鏅�") ||
- personalAttendanceLocationConfig.getShift().contains("澶�")) {
- totalMonthAttendance += count;
- totalYearAttendance += count;
- }
}
// 绌烘暟鎹�
else {
@@ -306,7 +340,9 @@
hashMapMonth.put(personalAttendanceLocationConfig.getShift(), 0);
}
}
- hashMapMonth.put("totalMonthAttendance", totalMonthAttendance);
+ int monthAttendance = staffMonthAttendance.getOrDefault(i, 0);
+ totalYearAttendance += monthAttendance;
+ hashMapMonth.put("totalMonthAttendance", monthAttendance);
hashMapYear.put("totalYearAttendance", totalYearAttendance);
resultMap.put(i + "", hashMapMonth);
}
--
Gitblit v1.9.3