From 0998498b2f9192b3fd04b34dc6074cac63e14985 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 20 一月 2026 17:43:23 +0800
Subject: [PATCH] 人力资源分析接口
---
src/main/java/com/ruoyi/staff/mapper/StaffOnJobMapper.java | 18 ++
src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java | 7
src/main/java/com/ruoyi/staff/controller/AnalyticsController.java | 32 ++++
src/main/java/com/ruoyi/staff/mapper/StaffLeaveMapper.java | 5
src/main/java/com/ruoyi/project/system/domain/SysDept.java | 12 +
src/main/java/com/ruoyi/staff/vo/MonthlyTurnoverRateVo.java | 39 +++++
src/main/java/com/ruoyi/staff/dto/StaffLeaveDto.java | 10 +
src/main/java/com/ruoyi/staff/vo/TotalTurnoverRateVo.java | 19 ++
src/main/java/com/ruoyi/staff/service/impl/StaffLeaveServiceImpl.java | 4
src/main/java/com/ruoyi/staff/service/AnalyticsService.java | 20 ++
src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java | 145 ++++++++++++++++++++
src/main/resources/mapper/staff/StaffOnJobMapper.xml | 15 ++
src/main/java/com/ruoyi/common/enums/StaffLeaveReason.java | 14 ++
src/main/resources/mapper/staff/StaffLeaveMapper.xml | 20 ++
src/main/resources/mapper/system/SysDeptMapper.xml | 23 ++-
15 files changed, 367 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/enums/StaffLeaveReason.java b/src/main/java/com/ruoyi/common/enums/StaffLeaveReason.java
index 44d3098..5c043fb 100644
--- a/src/main/java/com/ruoyi/common/enums/StaffLeaveReason.java
+++ b/src/main/java/com/ruoyi/common/enums/StaffLeaveReason.java
@@ -25,4 +25,18 @@
public String getInfo() {
return info;
}
+
+ /**
+ * 鏍规嵁code鑾峰彇鏋氫妇瀹炰緥
+ * @param code 绂昏亴鍘熷洜缂栫爜
+ * @return 瀵瑰簲鐨勬灇涓惧疄渚嬶紝鑻ユ湭鎵惧埌鍒欒繑鍥瀗ull
+ */
+ public static StaffLeaveReason getByCode(String code) {
+ for (StaffLeaveReason reason : StaffLeaveReason.values()) {
+ if (reason.getCode().equals(code)) {
+ return reason;
+ }
+ }
+ return null;
+ }
}
diff --git a/src/main/java/com/ruoyi/project/system/domain/SysDept.java b/src/main/java/com/ruoyi/project/system/domain/SysDept.java
index e2c6b2b..54e53a7 100644
--- a/src/main/java/com/ruoyi/project/system/domain/SysDept.java
+++ b/src/main/java/com/ruoyi/project/system/domain/SysDept.java
@@ -54,6 +54,9 @@
/** 閮ㄩ棬缂栧彿 */
private String deptNick;
+
+ /** 鍛樺伐鏁伴噺 */
+ private Integer staffCount;
/** 瀛愰儴闂� */
private List<SysDept> children = new ArrayList<SysDept>();
@@ -192,6 +195,14 @@
this.deptNick = deptNick;
}
+ public Integer getStaffCount() {
+ return staffCount;
+ }
+
+ public void setStaffCount(Integer staffCount) {
+ this.staffCount = staffCount;
+ }
+
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@@ -199,6 +210,7 @@
.append("parentId", getParentId())
.append("ancestors", getAncestors())
.append("deptName", getDeptName())
+ .append("staffCount", getStaffCount())
.append("orderNum", getOrderNum())
.append("leader", getLeader())
.append("phone", getPhone())
diff --git a/src/main/java/com/ruoyi/staff/controller/AnalyticsController.java b/src/main/java/com/ruoyi/staff/controller/AnalyticsController.java
new file mode 100644
index 0000000..cfa802c
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/controller/AnalyticsController.java
@@ -0,0 +1,32 @@
+package com.ruoyi.staff.controller;
+
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.staff.service.AnalyticsService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/staff/analytics")
+public class AnalyticsController {
+
+ @Resource
+ private AnalyticsService analyticsService;
+
+ @GetMapping("/reason")
+ public AjaxResult staffLeaveReasonAnalytics() {
+ return AjaxResult.success(analyticsService.staffLeaveReasonAnalytics());
+ }
+
+ @GetMapping("/monthly_turnover_rate")
+ public AjaxResult getMonthlyTurnoverRateFor12Months() {
+ return AjaxResult.success(analyticsService.getMonthlyTurnoverRateFor12Months());
+ }
+
+ @GetMapping("/total_statistic")
+ public AjaxResult getTotalStatistic() {
+ return AjaxResult.success(analyticsService.getTotalStatistic());
+ }
+}
diff --git a/src/main/java/com/ruoyi/staff/dto/StaffLeaveDto.java b/src/main/java/com/ruoyi/staff/dto/StaffLeaveDto.java
index 7cdf48a..3685410 100644
--- a/src/main/java/com/ruoyi/staff/dto/StaffLeaveDto.java
+++ b/src/main/java/com/ruoyi/staff/dto/StaffLeaveDto.java
@@ -1,11 +1,8 @@
package com.ruoyi.staff.dto;
-import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.staff.pojo.StaffLeave;
import lombok.Data;
-
-import java.util.Date;
@Data
public class StaffLeaveDto extends StaffLeave {
@@ -95,4 +92,11 @@
*/
@Excel(name = "绱ф�ヨ仈绯讳汉鐢佃瘽", sort = 15)
private String emergencyContactPhone;
+
+ private int count;
+
+ /**
+ * 绂昏亴鍘熷洜鏂囨湰
+ */
+ private String reasonText;
}
diff --git a/src/main/java/com/ruoyi/staff/mapper/StaffLeaveMapper.java b/src/main/java/com/ruoyi/staff/mapper/StaffLeaveMapper.java
index e8d2854..170bbba 100644
--- a/src/main/java/com/ruoyi/staff/mapper/StaffLeaveMapper.java
+++ b/src/main/java/com/ruoyi/staff/mapper/StaffLeaveMapper.java
@@ -10,6 +10,7 @@
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import java.time.LocalDate;
import java.util.List;
@@ -18,4 +19,8 @@
IPage<StaffLeaveDto> staffLeaveListPage(Page page, @Param("c") StaffLeaveDto staffLeaveDto);
List<StaffLeaveDto> staffLeaveList(@Param("c") StaffLeaveDto staffLeaveDto);
+
+ List<StaffLeaveDto> staffLeaveReasonAnalytics();
+
+ Integer countLeaveByMonth(@Param("monthStart") LocalDate monthStart, @Param("monthEnd") LocalDate monthEnd);
}
diff --git a/src/main/java/com/ruoyi/staff/mapper/StaffOnJobMapper.java b/src/main/java/com/ruoyi/staff/mapper/StaffOnJobMapper.java
index 1451487..5bd15e4 100644
--- a/src/main/java/com/ruoyi/staff/mapper/StaffOnJobMapper.java
+++ b/src/main/java/com/ruoyi/staff/mapper/StaffOnJobMapper.java
@@ -8,6 +8,7 @@
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import java.time.LocalDate;
import java.util.List;
@Mapper
@@ -16,4 +17,19 @@
IPage<StaffOnJobDto> staffOnJobListPage(Page page, @Param("staffOnJob") StaffOnJob staffOnJob);
List<StaffOnJobDto> staffOnJobList(@Param("staffOnJob") StaffOnJob staffOnJob);
-}
+
+ /**
+ * 缁熻鎸囧畾鏃ユ湡鐨勫湪鑱屽憳宸ユ暟
+ * @param date 鏃ユ湡
+ * @return 鍦ㄨ亴鍛樺伐鏁�
+ */
+ Integer countOnJobStaffByDate(@Param("date") LocalDate date);
+
+ /**
+ * 缁熻鎸囧畾鏈堜唤鐨勬柊鍏ヨ亴鍛樺伐鏁�
+ * @param monthStart 鏈堜唤寮�濮嬫棩鏈�
+ * @param monthEnd 鏈堜唤缁撴潫鏃ユ湡
+ * @return 鏂板叆鑱屽憳宸ユ暟
+ */
+ Integer countNewHireByMonth(@Param("monthStart") LocalDate monthStart, @Param("monthEnd") LocalDate monthEnd);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/staff/service/AnalyticsService.java b/src/main/java/com/ruoyi/staff/service/AnalyticsService.java
new file mode 100644
index 0000000..ee8ff83
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/service/AnalyticsService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.staff.service;
+
+import com.ruoyi.staff.dto.StaffLeaveDto;
+import com.ruoyi.staff.vo.MonthlyTurnoverRateVo;
+import com.ruoyi.staff.vo.TotalTurnoverRateVo;
+
+import java.util.List;
+
+public interface AnalyticsService {
+
+ List<StaffLeaveDto> staffLeaveReasonAnalytics();
+
+ List<MonthlyTurnoverRateVo> getMonthlyTurnoverRateFor12Months();
+
+ /**
+ * 鏌ヨ鎬绘祦鍔ㄧ巼銆佹祦澶辩巼浠ュ強鍦ㄨ亴鍛樺伐鏁�
+ * @return 鎬荤粺璁$粨鏋�
+ */
+ TotalTurnoverRateVo getTotalStatistic();
+}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
new file mode 100644
index 0000000..13a440c
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
@@ -0,0 +1,145 @@
+package com.ruoyi.staff.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.StaffLeaveReason;
+import com.ruoyi.staff.dto.StaffLeaveDto;
+import com.ruoyi.staff.mapper.StaffLeaveMapper;
+import com.ruoyi.staff.mapper.StaffOnJobMapper;
+import com.ruoyi.staff.pojo.StaffLeave;
+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 org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+@AllArgsConstructor
+@Service
+public class AnalyticsServiceImpl extends ServiceImpl<StaffLeaveMapper, StaffLeave> implements AnalyticsService {
+ @Autowired
+ private StaffLeaveMapper staffLeaveMapper;
+
+ @Autowired
+ private StaffOnJobMapper staffOnJobMapper;
+
+ @Override
+ public List<StaffLeaveDto> staffLeaveReasonAnalytics() {
+ List<StaffLeaveDto> result = staffLeaveMapper.staffLeaveReasonAnalytics();
+ result.forEach(dto -> {
+ String reasonCode = dto.getReason();
+ StaffLeaveReason reasonEnum = StaffLeaveReason.getByCode(reasonCode);
+ if (reasonEnum != null) {
+ dto.setReasonText(reasonEnum.getInfo());
+ } else {
+ dto.setReasonText("鏈煡鍘熷洜");
+ }
+ });
+ return result;
+ }
+
+ @Override
+ public List<MonthlyTurnoverRateVo> getMonthlyTurnoverRateFor12Months() {
+ List<MonthlyTurnoverRateVo> result = new ArrayList<>();
+ LocalDate now = LocalDate.now();
+ DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
+
+ // 璁$畻杩�12涓湀鐨勬暟鎹�
+ for (int i = 11; i >= 0; i--) {
+ LocalDate currentMonth = now.minusMonths(i);
+ LocalDate monthStart = currentMonth.withDayOfMonth(1);
+ LocalDate monthEnd = currentMonth.withDayOfMonth(currentMonth.lengthOfMonth());
+
+ MonthlyTurnoverRateVo vo = new MonthlyTurnoverRateVo();
+ vo.setMonth(currentMonth.format(monthFormatter));
+ vo.setMonthStartDate(monthStart);
+ vo.setMonthEndDate(monthEnd);
+
+ // 鏈堝垵鍛樺伐鏁帮紙涓婃湀鏈湪鑱屽憳宸ユ暟锛�
+ LocalDate lastMonthEnd = monthStart.minusDays(1);
+ Integer beginMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(lastMonthEnd);
+ vo.setBeginMonthStaffCount(beginMonthStaffCount != null ? beginMonthStaffCount : 0);
+
+ // 鏈堟湯鍛樺伐鏁�
+ Integer endMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(monthEnd);
+ vo.setEndMonthStaffCount(endMonthStaffCount != null ? endMonthStaffCount : 0);
+
+ // 鏈堝害鍏ヨ亴鍛樺伐鏁�
+ Integer newHireCount = staffOnJobMapper.countNewHireByMonth(monthStart, monthEnd);
+ vo.setNewHireCount(newHireCount != null ? newHireCount : 0);
+
+ // 鏈堝害绂昏亴鍛樺伐鏁�
+ Integer leaveCount = staffLeaveMapper.countLeaveByMonth(monthStart, monthEnd);
+ vo.setLeaveCount(leaveCount != null ? leaveCount : 0);
+
+ // 璁$畻娴佸け鐜囷細娴佸け鐜� = 鏈堝害绂昏亴鍛樺伐鏁� / 鏈堝垵鍛樺伐鏁� * 100%
+ Double turnoverRate = 0.0;
+ if (vo.getBeginMonthStaffCount() > 0) {
+ turnoverRate = (double) vo.getLeaveCount() / vo.getBeginMonthStaffCount() * 100;
+ // 淇濈暀涓や綅灏忔暟
+ turnoverRate = Math.round(turnoverRate * 100.0) / 100.0;
+ }
+ vo.setTurnoverRate(turnoverRate);
+
+ // 璁$畻娴佸姩鐜囷細娴佸姩鐜� = (鏈堝害鍏ヨ亴鍛樺伐鏁� + 鏈堝害绂昏亴鍛樺伐鏁�) / 鏈堝垵鍛樺伐鏁� * 100%
+ Double flowRate = 0.0;
+ if (vo.getBeginMonthStaffCount() > 0) {
+ flowRate = (double) (vo.getNewHireCount() + vo.getLeaveCount()) / vo.getBeginMonthStaffCount() * 100;
+ // 淇濈暀涓や綅灏忔暟
+ flowRate = Math.round(flowRate * 100.0) / 100.0;
+ }
+ vo.setFlowRate(flowRate);
+
+ result.add(vo);
+ }
+
+ return result;
+ }
+
+ @Override
+ public TotalTurnoverRateVo getTotalStatistic() {
+ TotalTurnoverRateVo result = new TotalTurnoverRateVo();
+ LocalDate now = LocalDate.now();
+
+ // 鑾峰彇褰撳墠鍦ㄨ亴鍛樺伐鏁�
+ Integer currentOnJobCount = staffOnJobMapper.countOnJobStaffByDate(now);
+ result.setCurrentOnJobCount(currentOnJobCount);
+
+ // 鑾峰彇鏈湀鐨勫紑濮嬪拰缁撴潫鏃ユ湡
+ LocalDate monthStartDate = now.withDayOfMonth(1);
+ LocalDate monthEndDate = now.withDayOfMonth(now.lengthOfMonth());
+
+ // 鑾峰彇鏈堝垵鍛樺伐鏁帮紙鍗充笂鏈堟湯鍛樺伐鏁帮級
+ Integer beginMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(monthStartDate.minusDays(1));
+
+ // 鑾峰彇鏈湀鏂板叆鑱屽憳宸ユ暟
+ Integer newHireCount = staffOnJobMapper.countNewHireByMonth(monthStartDate, monthEndDate);
+
+ // 鑾峰彇鏈湀绂昏亴鍛樺伐鏁�
+ Integer leaveCount = staffLeaveMapper.countLeaveByMonth(monthStartDate, monthEndDate);
+
+ // 璁$畻鎬绘祦鍔ㄧ巼 = (鍏ヨ亴浜烘暟 + 绂昏亴浜烘暟) / 鏈堝垵鍛樺伐鏁� * 100%
+ Double totalFlowRate = 0.0;
+ if (beginMonthStaffCount > 0) {
+ totalFlowRate = (double) (newHireCount + leaveCount) / beginMonthStaffCount * 100;
+ // 淇濈暀涓や綅灏忔暟
+ totalFlowRate = Math.round(totalFlowRate * 100.0) / 100.0;
+ }
+ result.setTotalFlowRate(totalFlowRate);
+
+ // 璁$畻鎬绘祦澶辩巼 = 绂昏亴浜烘暟 / 鏈堝垵鍛樺伐鏁� * 100%
+ Double totalTurnoverRate = 0.0;
+ if (beginMonthStaffCount > 0) {
+ totalTurnoverRate = (double) leaveCount / beginMonthStaffCount * 100;
+ // 淇濈暀涓や綅灏忔暟
+ totalTurnoverRate = Math.round(totalTurnoverRate * 100.0) / 100.0;
+ }
+ result.setTotalTurnoverRate(totalTurnoverRate);
+
+ return result;
+ }
+}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffLeaveServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffLeaveServiceImpl.java
index 2d30dc5..ff8faa5 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffLeaveServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffLeaveServiceImpl.java
@@ -11,6 +11,7 @@
import com.ruoyi.staff.pojo.StaffOnJob;
import com.ruoyi.staff.service.StaffLeaveService;
import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.staff.pojo.StaffLeave;
import org.springframework.transaction.annotation.Transactional;
@@ -23,8 +24,10 @@
@AllArgsConstructor
@Service
public class StaffLeaveServiceImpl extends ServiceImpl<StaffLeaveMapper, StaffLeave> implements StaffLeaveService {
+ @Autowired
private StaffLeaveMapper staffLeaveMapper;
+ @Autowired
private StaffOnJobMapper staffOnJobMapper;
//鏂板绂昏亴鍒楄〃鍒嗛〉鏌ヨ
@@ -97,6 +100,5 @@
ExcelUtil<StaffLeaveDto> util = new ExcelUtil<StaffLeaveDto>(StaffLeaveDto.class);
util.exportExcel(response, staffLeaves, "鍛樺伐绂昏亴瀵煎嚭");
}
-
}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
index 6fb0cd0..9756f33 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -23,6 +23,7 @@
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@@ -39,12 +40,14 @@
@Service
public class StaffOnJobServiceImpl extends ServiceImpl<StaffOnJobMapper, StaffOnJob> implements IStaffOnJobService {
-
+ @Autowired
private StaffOnJobMapper staffOnJobMapper;
-
+ @Autowired
private SysPostMapper sysPostMapper;
+ @Autowired
private StaffContractMapper staffContractMapper;
+ @Autowired
private StaffLeaveMapper staffLeaveMapper;
diff --git a/src/main/java/com/ruoyi/staff/vo/MonthlyTurnoverRateVo.java b/src/main/java/com/ruoyi/staff/vo/MonthlyTurnoverRateVo.java
new file mode 100644
index 0000000..90f9c69
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/vo/MonthlyTurnoverRateVo.java
@@ -0,0 +1,39 @@
+package com.ruoyi.staff.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * 鏈堝害鍛樺伐娴佸姩鐜囧拰娴佸け鐜囩粺璁O
+ */
+@Data
+public class MonthlyTurnoverRateVo {
+ @ApiModelProperty("鏈堜唤")
+ private String month;
+
+ @ApiModelProperty("鏈堝垵鍛樺伐鏁�")
+ private Integer beginMonthStaffCount;
+
+ @ApiModelProperty("鏈堟湯鍛樺伐鏁�")
+ private Integer endMonthStaffCount;
+
+ @ApiModelProperty("鏈堝害鍏ヨ亴鍛樺伐鏁�")
+ private Integer newHireCount;
+
+ @ApiModelProperty("鏈堝害绂昏亴鍛樺伐鏁�")
+ private Integer leaveCount;
+
+ @ApiModelProperty("娴佸け鐜�(%)")
+ private Double turnoverRate;
+
+ @ApiModelProperty("娴佸姩鐜�(%)")
+ private Double flowRate;
+
+ @ApiModelProperty("鏈堜唤寮�濮嬫棩鏈�")
+ private LocalDate monthStartDate;
+
+ @ApiModelProperty("鏈堜唤缁撴潫鏃ユ湡")
+ private LocalDate monthEndDate;
+}
diff --git a/src/main/java/com/ruoyi/staff/vo/TotalTurnoverRateVo.java b/src/main/java/com/ruoyi/staff/vo/TotalTurnoverRateVo.java
new file mode 100644
index 0000000..49d2f42
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/vo/TotalTurnoverRateVo.java
@@ -0,0 +1,19 @@
+package com.ruoyi.staff.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍛樺伐鎬绘祦鍔ㄧ巼銆佹祦澶辩巼鍙婂湪鑱屽憳宸ユ暟缁熻VO
+ */
+@Data
+public class TotalTurnoverRateVo {
+ @ApiModelProperty("鎬绘祦鍔ㄧ巼(%)")
+ private Double totalFlowRate;
+
+ @ApiModelProperty("鎬绘祦澶辩巼(%)")
+ private Double totalTurnoverRate;
+
+ @ApiModelProperty("褰撳墠鍦ㄨ亴鍛樺伐鏁�")
+ private Integer currentOnJobCount;
+}
diff --git a/src/main/resources/mapper/staff/StaffLeaveMapper.xml b/src/main/resources/mapper/staff/StaffLeaveMapper.xml
index c3faf41..4637ff0 100644
--- a/src/main/resources/mapper/staff/StaffLeaveMapper.xml
+++ b/src/main/resources/mapper/staff/StaffLeaveMapper.xml
@@ -61,4 +61,24 @@
AND soj.staff_name LIKE CONCAT('%',#{c.staffName},'%')
</if>
</select>
+
+ <select id="staffLeaveReasonAnalytics" resultType="com.ruoyi.staff.dto.StaffLeaveDto">
+ SELECT
+ staff_leave.reason as reason,
+ COUNT(*) as count
+ FROM staff_leave
+ LEFT JOIN
+ staff_on_job soj ON soj.id = staff_leave.staff_on_job_id
+ where 1=1
+ GROUP BY staff_leave.reason
+ </select>
+
+ <!-- 缁熻鎸囧畾鏈堜唤鐨勭鑱屽憳宸ユ暟 -->
+ <select id="countLeaveByMonth" resultType="java.lang.Integer">
+ SELECT COUNT(*)
+ FROM staff_leave sl
+ LEFT JOIN staff_on_job soj ON sl.staff_on_job_id = soj.id
+ WHERE DATE_FORMAT(sl.create_time, '%Y-%m-%d') BETWEEN #{monthStart} AND #{monthEnd}
+ AND soj.staff_state = 0
+ </select>
</mapper>
diff --git a/src/main/resources/mapper/staff/StaffOnJobMapper.xml b/src/main/resources/mapper/staff/StaffOnJobMapper.xml
index a43bb37..75ae5ef 100644
--- a/src/main/resources/mapper/staff/StaffOnJobMapper.xml
+++ b/src/main/resources/mapper/staff/StaffOnJobMapper.xml
@@ -43,4 +43,19 @@
AND staff_name LIKE CONCAT('%',#{staffOnJob.staffName},'%')
</if>
</select>
+ <!-- 缁熻鎸囧畾鏃ユ湡鐨勫湪鑱屽憳宸ユ暟 -->
+ <select id="countOnJobStaffByDate" resultType="java.lang.Integer">
+ SELECT COUNT(*)
+ FROM staff_on_job
+ WHERE staff_state = 1
+ AND DATE_FORMAT(create_time, '%Y-%m-%d') <= #{date}
+ </select>
+
+ <!-- 缁熻鎸囧畾鏈堜唤鐨勬柊鍏ヨ亴鍛樺伐鏁� -->
+ <select id="countNewHireByMonth" resultType="java.lang.Integer">
+ SELECT COUNT(*)
+ FROM staff_on_job
+ WHERE staff_state = 1
+ AND DATE_FORMAT(create_time, '%Y-%m-%d') BETWEEN #{monthStart} AND #{monthEnd}
+ </select>
</mapper>
diff --git a/src/main/resources/mapper/system/SysDeptMapper.xml b/src/main/resources/mapper/system/SysDeptMapper.xml
index 5c6310a..afc1130 100644
--- a/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -20,32 +20,37 @@
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
+ <result property="staffCount" column="staff_count" />
</resultMap>
<sql id="selectDeptVo">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time
from sys_dept d
</sql>
-
+
<select id="selectDeptList" parameterType="com.ruoyi.project.system.domain.SysDept" resultMap="SysDeptResult">
- <include refid="selectDeptVo"/>
- where d.del_flag = '0'
+ select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time,
+ count(distinct soj.id) as staff_count
+ from sys_dept d
+ left join staff_on_job soj on soj.sys_dept_id = d.dept_id and soj.staff_state = '1'
+ where d.del_flag = '0'
<if test="deptId != null and deptId != 0">
- AND dept_id = #{deptId}
+ AND d.dept_id = #{deptId}
</if>
- <if test="parentId != null and parentId != 0">
- AND parent_id = #{parentId}
+ <if test="parentId != null and parentId != 0">
+ AND d.parent_id = #{parentId}
</if>
<if test="deptName != null and deptName != ''">
- AND dept_name like concat('%', #{deptName}, '%')
+ AND d.dept_name like concat('%', #{deptName}, '%')
</if>
<if test="status != null and status != ''">
- AND status = #{status}
+ AND d.status = #{status}
</if>
<!-- 鏁版嵁鑼冨洿杩囨护 -->
${params.dataScope}
+ group by d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time
order by d.parent_id, d.order_num
- </select>
+ </select>
<select id="selectDeptListByRoleId" resultType="Long">
select d.dept_id
--
Gitblit v1.9.3