feat(hrm): 添加请假统计功能

- 在控制器中新增 /stats 接口用于获取请假统计数据
- 新增 HrmLeaveStatsVo 数据传输对象定义统计结构
- 在数据访问层添加多个统计查询方法,包括按类型、部门、月份统计
- 实现服务层统计业务逻辑,包括请假汇总、分类统计、员工状态统计
- 配置 MyBatis 映射文件实现各维度统计 SQL 查询
- 添加员工总数和请假中员工数的统计功能
This commit is contained in:
2026-02-24 14:56:51 +08:00
parent 613bf59833
commit 4447fb1cb1
6 changed files with 211 additions and 0 deletions

View File

@@ -149,4 +149,64 @@
</if>
ORDER BY l.create_time DESC
</select>
<!-- 统计查询 -->
<select id="selectLeaveSummary" resultType="java.util.Map">
SELECT
COUNT(*) as totalRequests,
SUM(hours) as totalHours
FROM hrm_leave_req
WHERE del_flag = 0
AND status = 'approved'
</select>
<select id="selectLeaveByType" resultType="java.util.Map">
SELECT
leave_type as leaveType,
COUNT(*) as count,
SUM(hours) as totalHours
FROM hrm_leave_req
WHERE del_flag = 0
AND status = 'approved'
GROUP BY leave_type
ORDER BY totalHours DESC
</select>
<select id="selectLeaveByDept" resultType="java.util.Map">
SELECT
d.dept_name as deptName,
COUNT(l.biz_id) as count,
SUM(l.hours) as totalHours
FROM hrm_leave_req l
JOIN hrm_employee e ON l.emp_id = e.emp_id AND e.del_flag = 0
LEFT JOIN sys_dept d ON e.dept_id = d.dept_id AND d.del_flag = '0'
WHERE l.del_flag = 0
AND l.status = 'approved'
GROUP BY d.dept_id, d.dept_name
ORDER BY totalHours DESC
</select>
<select id="selectLeaveByMonth" resultType="java.util.Map">
SELECT
DATE_FORMAT(start_time, '%Y-%m') as month,
COUNT(*) as count,
SUM(hours) as totalHours
FROM hrm_leave_req
WHERE del_flag = 0
AND status = 'approved'
AND YEAR(start_time) = #{year}
GROUP BY DATE_FORMAT(start_time, '%Y-%m')
ORDER BY month
</select>
<select id="selectTotalEmployees" resultType="java.lang.Integer">
SELECT COUNT(*) FROM hrm_employee WHERE del_flag = 0 AND status = 'onboard'
</select>
<select id="selectLeavingEmployees" resultType="java.lang.Integer">
SELECT COUNT(DISTINCT l.emp_id)
FROM hrm_leave_req l
WHERE l.del_flag = 0
AND l.status = 'approved'
AND NOW() BETWEEN l.start_time AND l.end_time
</select>
</mapper>