From 2a71f6790ddf6be7f63e6b009fc8d325a2a1d13b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 27 四月 2026 13:07:34 +0800
Subject: [PATCH] 添加相关接口附件信息
---
src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java | 48 +++++++++++++++++++++++++++++-------------------
1 files changed, 29 insertions(+), 19 deletions(-)
diff --git a/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
index 24abcfc..2705b4d 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
@@ -9,8 +9,7 @@
import com.ruoyi.staff.service.AnalyticsService;
import com.ruoyi.staff.vo.MonthlyTurnoverRateVo;
import com.ruoyi.staff.vo.TotalTurnoverRateVo;
-import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
@@ -20,14 +19,12 @@
import java.util.List;
import java.util.Map;
-@AllArgsConstructor
@Service
+@RequiredArgsConstructor
public class AnalyticsServiceImpl extends ServiceImpl<StaffLeaveMapper, StaffLeave> implements AnalyticsService {
- @Autowired
- private StaffLeaveMapper staffLeaveMapper;
- @Autowired
- private StaffOnJobMapper staffOnJobMapper;
+ private final StaffLeaveMapper staffLeaveMapper;
+ private final StaffOnJobMapper staffOnJobMapper;
@Override
public List<StaffLeaveDto> staffLeaveReasonAnalytics() {
@@ -94,19 +91,22 @@
Integer leaveCount = staffLeaveMapper.countLeaveByMonth(monthStart, monthEnd);
vo.setLeaveCount(leaveCount != null ? leaveCount : 0);
- // 璁$畻娴佸け鐜囷細娴佸け鐜� = 鏈堝害绂昏亴鍛樺伐鏁� / 鏈堝垵鍛樺伐鏁� * 100%
+ // 璁$畻褰撴湡骞冲潎鍦ㄨ亴浜烘暟 = (鏈堝垵鍛樺伐鏁� + 鏈堟湯鍛樺伐鏁�) / 2
+ Double averageStaffCount = (vo.getBeginMonthStaffCount() + vo.getEndMonthStaffCount()) / 2.0;
+
+ // 璁$畻娴佸け鐜囷細娴佸け鐜� = 鏈堝害绂昏亴鍛樺伐鏁� / 褰撴湡骞冲潎鍦ㄨ亴浜烘暟 * 100%
Double turnoverRate = 0.0;
- if (vo.getBeginMonthStaffCount() > 0) {
- turnoverRate = (double) vo.getLeaveCount() / vo.getBeginMonthStaffCount() * 100;
+ if (averageStaffCount > 0) {
+ turnoverRate = (double) vo.getLeaveCount() / averageStaffCount * 100;
// 淇濈暀涓や綅灏忔暟
turnoverRate = Math.round(turnoverRate * 100.0) / 100.0;
}
vo.setTurnoverRate(turnoverRate);
- // 璁$畻娴佸姩鐜囷細娴佸姩鐜� = (鏈堝害鍏ヨ亴鍛樺伐鏁� + 鏈堝害绂昏亴鍛樺伐鏁�) / 鏈堝垵鍛樺伐鏁� * 100%
+ // 璁$畻娴佸姩鐜囷細娴佸姩鐜� = (鏈堝害鍏ヨ亴鍛樺伐鏁� + 鏈堝害绂昏亴鍛樺伐鏁�) / 褰撴湡骞冲潎鍦ㄨ亴浜烘暟 * 100%
Double flowRate = 0.0;
- if (vo.getBeginMonthStaffCount() > 0) {
- flowRate = (double) (vo.getNewHireCount() + vo.getLeaveCount()) / vo.getBeginMonthStaffCount() * 100;
+ if (averageStaffCount > 0) {
+ flowRate = (double) (vo.getNewHireCount() + vo.getLeaveCount()) / averageStaffCount * 100;
// 淇濈暀涓や綅灏忔暟
flowRate = Math.round(flowRate * 100.0) / 100.0;
}
@@ -133,26 +133,36 @@
// 鑾峰彇鏈堝垵鍛樺伐鏁帮紙鍗充笂鏈堟湯鍛樺伐鏁帮級
Integer beginMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(monthStartDate.minusDays(1));
+ beginMonthStaffCount = beginMonthStaffCount != null ? beginMonthStaffCount : 0;
+
+ // 鑾峰彇鏈堟湯鍛樺伐鏁�
+ Integer endMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(monthEndDate);
+ endMonthStaffCount = endMonthStaffCount != null ? endMonthStaffCount : 0;
// 鑾峰彇鏈湀鏂板叆鑱屽憳宸ユ暟
Integer newHireCount = staffOnJobMapper.countNewHireByMonth(monthStartDate, monthEndDate);
+ newHireCount = newHireCount != null ? newHireCount : 0;
// 鑾峰彇鏈湀绂昏亴鍛樺伐鏁�
Integer leaveCount = staffLeaveMapper.countLeaveByMonth(monthStartDate, monthEndDate);
+ leaveCount = leaveCount != null ? leaveCount : 0;
- // 璁$畻鎬绘祦鍔ㄧ巼 = (鍏ヨ亴浜烘暟 + 绂昏亴浜烘暟) / 鏈堝垵鍛樺伐鏁� * 100%
+ // 璁$畻褰撴湡骞冲潎鍦ㄨ亴浜烘暟 = (鏈堝垵鍛樺伐鏁� + 鏈堟湯鍛樺伐鏁�) / 2
+ Double averageStaffCount = (beginMonthStaffCount + endMonthStaffCount) / 2.0;
+
+ // 璁$畻鎬绘祦鍔ㄧ巼 = (鍏ヨ亴浜烘暟 + 绂昏亴浜烘暟) / 褰撴湡骞冲潎鍦ㄨ亴浜烘暟 * 100%
Double totalFlowRate = 0.0;
- if (beginMonthStaffCount > 0) {
- totalFlowRate = (double) (newHireCount + leaveCount) / beginMonthStaffCount * 100;
+ if (averageStaffCount > 0) {
+ totalFlowRate = (double) (newHireCount + leaveCount) / averageStaffCount * 100;
// 淇濈暀涓や綅灏忔暟
totalFlowRate = Math.round(totalFlowRate * 100.0) / 100.0;
}
result.setTotalFlowRate(totalFlowRate);
- // 璁$畻鎬绘祦澶辩巼 = 绂昏亴浜烘暟 / 鏈堝垵鍛樺伐鏁� * 100%
+ // 璁$畻鎬绘祦澶辩巼 = 绂昏亴浜烘暟 / 褰撴湡骞冲潎鍦ㄨ亴浜烘暟 * 100%
Double totalTurnoverRate = 0.0;
- if (beginMonthStaffCount > 0) {
- totalTurnoverRate = (double) leaveCount / beginMonthStaffCount * 100;
+ if (averageStaffCount > 0) {
+ totalTurnoverRate = (double) leaveCount / averageStaffCount * 100;
// 淇濈暀涓や綅灏忔暟
totalTurnoverRate = Math.round(totalTurnoverRate * 100.0) / 100.0;
}
--
Gitblit v1.9.3