薪资分析
This commit is contained in:
143
ruoyi-oa/src/main/resources/mapper/oa/SalaryDashboardMapper.xml
Normal file
143
ruoyi-oa/src/main/resources/mapper/oa/SalaryDashboardMapper.xml
Normal file
@@ -0,0 +1,143 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.oa.mapper.SalaryDashboardMapper">
|
||||
|
||||
<!-- 查询卡片指标数据 -->
|
||||
<select id="queryCardMetrics" resultType="com.ruoyi.oa.domain.vo.CardMetricsVo">
|
||||
SELECT
|
||||
-- 薪资支出总额:只计算salary类型的实际支出
|
||||
SUM(CASE WHEN d.template_type = 'salary' THEN d.paid_amount ELSE 0 END) AS totalSalaryExpenditure,
|
||||
-- 公司总支出:包括薪资和社保的所有实际支出
|
||||
SUM(d.paid_amount) AS totalCompanyExpenditure,
|
||||
COUNT(DISTINCT b.employee_id) AS employeeCount,
|
||||
COUNT(DISTINCT e.dept_id) AS departmentCount
|
||||
FROM
|
||||
oa_employee_template_binding b
|
||||
JOIN oa_binding_item_detail d ON b.binding_id = d.binding_id
|
||||
JOIN oa_employee e ON b.employee_id = e.employee_id
|
||||
WHERE
|
||||
b.pay_year = #{year}
|
||||
AND b.pay_month = #{month}
|
||||
AND b.del_flag = 0
|
||||
AND e.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
</select>
|
||||
|
||||
<!-- 查询年度每月总支出 -->
|
||||
<select id="queryMonthlyExpenditures" resultType="com.ruoyi.oa.domain.vo.MonthlyExpenditureVo">
|
||||
SELECT
|
||||
b.pay_month AS month,
|
||||
SUM(d.paid_amount) AS totalExpenditure
|
||||
FROM
|
||||
oa_employee_template_binding b
|
||||
JOIN oa_binding_item_detail d ON b.binding_id = d.binding_id
|
||||
WHERE
|
||||
b.pay_year = #{year}
|
||||
AND b.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
GROUP BY
|
||||
b.pay_month
|
||||
ORDER BY
|
||||
b.pay_month
|
||||
</select>
|
||||
|
||||
<!-- 查询薪资构成 -->
|
||||
<select id="querySalaryComponents" resultType="com.ruoyi.oa.domain.vo.SalaryComponentVo">
|
||||
SELECT
|
||||
sdt.salary_item AS itemName,
|
||||
SUM(bid.paid_amount) AS totalAmount
|
||||
FROM
|
||||
oa_binding_item_detail bid
|
||||
JOIN oa_employee_template_binding betb ON bid.binding_id = betb.binding_id
|
||||
JOIN oa_salary_template_detail sdt ON bid.item_detail_id = sdt.salary_detail_id
|
||||
WHERE
|
||||
betb.pay_year = #{year}
|
||||
AND betb.pay_month = #{month}
|
||||
AND bid.template_type = 'salary'
|
||||
AND betb.del_flag = 0
|
||||
AND bid.del_flag = 0
|
||||
GROUP BY
|
||||
sdt.salary_item
|
||||
</select>
|
||||
|
||||
<!-- 查询折线图数据 -->
|
||||
<select id="queryLineChartData" resultType="com.ruoyi.oa.domain.vo.LineChartPointVo">
|
||||
SELECT
|
||||
b.pay_month AS month,
|
||||
-- 总支出:所有实际支出(包括薪资和社保)
|
||||
SUM(d.paid_amount) AS totalExpenditure,
|
||||
-- 平均工资:只计算salary类型的实际支出的平均值
|
||||
AVG(CASE WHEN d.template_type = 'salary' THEN d.paid_amount ELSE 0 END) AS avgSalary
|
||||
FROM
|
||||
oa_employee_template_binding b
|
||||
JOIN oa_binding_item_detail d ON b.binding_id = d.binding_id
|
||||
WHERE
|
||||
b.pay_year = #{year}
|
||||
AND b.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
GROUP BY
|
||||
b.pay_month
|
||||
ORDER BY
|
||||
b.pay_month
|
||||
</select>
|
||||
|
||||
<!-- 查询部门统计数据 -->
|
||||
<select id="queryDepartmentStats" resultType="com.ruoyi.oa.domain.vo.DepartmentStatVo">
|
||||
WITH CurrentYearStats AS (
|
||||
SELECT
|
||||
e.dept_id,
|
||||
-- 部门总支出:该部门所有员工的所有实际支出
|
||||
SUM(d.paid_amount) AS totalExpenditure,
|
||||
-- 部门平均工资:该部门所有员工的salary类型实际支出的平均值
|
||||
AVG(CASE WHEN d.template_type = 'salary' THEN d.paid_amount ELSE 0 END) AS avgSalary,
|
||||
COUNT(DISTINCT e.employee_id) AS employeeCount
|
||||
FROM
|
||||
oa_employee_template_binding b
|
||||
JOIN oa_employee e ON b.employee_id = e.employee_id
|
||||
JOIN oa_binding_item_detail d ON b.binding_id = d.binding_id
|
||||
WHERE
|
||||
b.pay_year = #{year}
|
||||
AND b.pay_month = #{month}
|
||||
AND b.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
GROUP BY
|
||||
e.dept_id
|
||||
),
|
||||
LastYearStats AS (
|
||||
SELECT
|
||||
e.dept_id,
|
||||
-- 去年同期部门平均工资:只计算salary类型的实际支出
|
||||
AVG(CASE WHEN d.template_type = 'salary' THEN d.paid_amount ELSE 0 END) AS lastYearAvgSalary
|
||||
FROM
|
||||
oa_employee_template_binding b
|
||||
JOIN oa_employee e ON b.employee_id = e.employee_id
|
||||
JOIN oa_binding_item_detail d ON b.binding_id = d.binding_id
|
||||
WHERE
|
||||
b.pay_year = #{year} - 1
|
||||
AND b.pay_month = #{month}
|
||||
AND b.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
GROUP BY
|
||||
e.dept_id
|
||||
)
|
||||
SELECT
|
||||
d.dept_id,
|
||||
d.dept_name,
|
||||
COALESCE(cys.totalExpenditure, 0) AS totalExpenditure,
|
||||
COALESCE(cys.avgSalary, 0) AS avgSalary,
|
||||
COALESCE(cys.employeeCount, 0) AS employeeCount,
|
||||
CASE
|
||||
WHEN lys.lastYearAvgSalary IS NULL OR lys.lastYearAvgSalary = 0 THEN 0
|
||||
ELSE ((COALESCE(cys.avgSalary, 0) - lys.lastYearAvgSalary) / lys.lastYearAvgSalary) * 100
|
||||
END AS yearOnYearGrowthRate
|
||||
FROM
|
||||
sys_dept d
|
||||
LEFT JOIN CurrentYearStats cys ON d.dept_id = cys.dept_id
|
||||
LEFT JOIN LastYearStats lys ON d.dept_id = lys.dept_id
|
||||
WHERE
|
||||
d.del_flag = '0'
|
||||
AND cys.employeeCount > 0
|
||||
ORDER BY
|
||||
totalExpenditure DESC
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user