143 lines
5.8 KiB
XML
143 lines
5.8 KiB
XML
<?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> |