feat(oa): 新增工资数据看板功能
- 添加新工资看板相关的 VO 类 - 实现新工资看板的数据获取接口和业务逻辑 - 优化原有工资看板的代码结构 - 新增月度支出、工资构成、趋势分析等图表数据查询- 增加社保公积金统计和单位、部门统计功能
This commit is contained in:
@@ -140,4 +140,277 @@
|
||||
ORDER BY
|
||||
totalExpenditure DESC
|
||||
</select>
|
||||
<!-- 查询卡片指标数据 -->
|
||||
<select id="queryNewCardMetrics" resultType="com.ruoyi.oa.domain.vo.dashboard.NewCardMetricsVo">
|
||||
SELECT
|
||||
COALESCE(SUM(d.net_salary), 0) as totalNetSalary,
|
||||
COALESCE(SUM(d.gross_salary), 0) as totalGrossSalary,
|
||||
COALESCE(SUM(d.unit_total_expense), 0) as totalUnitExpense,
|
||||
COUNT(DISTINCT d.detail_id) as employeeCount,
|
||||
COUNT(DISTINCT m.unit_name) as unitCount
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
</select>
|
||||
|
||||
<!-- 查询月度支出数据 -->
|
||||
<select id="queryMonthlyExpenses" resultType="com.ruoyi.oa.domain.vo.dashboard.MonthlyExpenseVo">
|
||||
SELECT
|
||||
CAST(SUBSTRING(m.salary_period, 6, 2) AS UNSIGNED) as month,
|
||||
COALESCE(SUM(d.net_salary), 0) as totalNetSalary,
|
||||
COALESCE(SUM(d.gross_salary), 0) as totalGrossSalary,
|
||||
COALESCE(SUM(d.unit_total_expense), 0) as totalUnitExpense
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE SUBSTRING(m.salary_period, 1, 4) = #{year}
|
||||
AND m.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
GROUP BY CAST(SUBSTRING(m.salary_period, 6, 2) AS UNSIGNED)
|
||||
ORDER BY month
|
||||
</select>
|
||||
|
||||
<!-- 查询工资构成数据 -->
|
||||
<select id="querySalaryStructures" resultType="com.ruoyi.oa.domain.vo.dashboard.SalaryStructureVo">
|
||||
SELECT
|
||||
'基本工资' as itemName,
|
||||
COALESCE(SUM(d.basic_salary), 0) as totalAmount,
|
||||
CASE
|
||||
WHEN SUM(d.gross_salary) > 0 THEN ROUND((SUM(d.basic_salary) / SUM(d.gross_salary)) * 100, 2)
|
||||
ELSE 0
|
||||
END as percentage
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'岗位工资' as itemName,
|
||||
COALESCE(SUM(d.post_salary), 0) as totalAmount,
|
||||
CASE
|
||||
WHEN SUM(d.gross_salary) > 0 THEN ROUND((SUM(d.post_salary) / SUM(d.gross_salary)) * 100, 2)
|
||||
ELSE 0
|
||||
END as percentage
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'餐补' as itemName,
|
||||
COALESCE(SUM(d.meal_allowance), 0) as totalAmount,
|
||||
CASE
|
||||
WHEN SUM(d.gross_salary) > 0 THEN ROUND((SUM(d.meal_allowance) / SUM(d.gross_salary)) * 100, 2)
|
||||
ELSE 0
|
||||
END as percentage
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'住房补贴' as itemName,
|
||||
COALESCE(SUM(d.housing_allowance), 0) as totalAmount,
|
||||
CASE
|
||||
WHEN SUM(d.gross_salary) > 0 THEN ROUND((SUM(d.housing_allowance) / SUM(d.gross_salary)) * 100, 2)
|
||||
ELSE 0
|
||||
END as percentage
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'公交补贴' as itemName,
|
||||
COALESCE(SUM(d.bus_allowance), 0) as totalAmount,
|
||||
CASE
|
||||
WHEN SUM(d.gross_salary) > 0 THEN ROUND((SUM(d.bus_allowance) / SUM(d.gross_salary)) * 100, 2)
|
||||
ELSE 0
|
||||
END as percentage
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'出差补助' as itemName,
|
||||
COALESCE(SUM(d.business_allowance), 0) as totalAmount,
|
||||
CASE
|
||||
WHEN SUM(d.gross_salary) > 0 THEN ROUND((SUM(d.business_allowance) / SUM(d.gross_salary)) * 100, 2)
|
||||
ELSE 0
|
||||
END as percentage
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'加班工资' as itemName,
|
||||
COALESCE(SUM(d.overtime_total), 0) as totalAmount,
|
||||
CASE
|
||||
WHEN SUM(d.gross_salary) > 0 THEN ROUND((SUM(d.overtime_total) / SUM(d.gross_salary)) * 100, 2)
|
||||
ELSE 0
|
||||
END as percentage
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
ORDER BY totalAmount DESC
|
||||
</select>
|
||||
|
||||
<!-- 查询工资趋势数据 -->
|
||||
<select id="querySalaryTrendData" resultType="com.ruoyi.oa.domain.vo.dashboard.SalaryTrendPointVo">
|
||||
SELECT
|
||||
CAST(SUBSTRING(m.salary_period, 6, 2) AS UNSIGNED) as month,
|
||||
COALESCE(SUM(d.net_salary), 0) as totalNetSalary,
|
||||
COALESCE(SUM(d.gross_salary), 0) as totalGrossSalary,
|
||||
CASE
|
||||
WHEN COUNT(DISTINCT d.detail_id) > 0 THEN ROUND(SUM(d.net_salary) / COUNT(DISTINCT d.detail_id), 2)
|
||||
ELSE 0
|
||||
END as avgNetSalary
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE SUBSTRING(m.salary_period, 1, 4) = #{year}
|
||||
AND m.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
GROUP BY CAST(SUBSTRING(m.salary_period, 6, 2) AS UNSIGNED)
|
||||
ORDER BY month
|
||||
</select>
|
||||
|
||||
<!-- 查询社保公积金统计数据 -->
|
||||
<select id="queryInsuranceStats" resultType="com.ruoyi.oa.domain.vo.dashboard.InsuranceStatVo">
|
||||
SELECT
|
||||
'养老保险' as itemName,
|
||||
COALESCE(SUM(d.personal_pension), 0) as personalTotal,
|
||||
COALESCE(SUM(d.enterprise_pension), 0) as enterpriseTotal,
|
||||
COALESCE(SUM(d.personal_pension) + SUM(d.enterprise_pension), 0) as total
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'医疗保险' as itemName,
|
||||
COALESCE(SUM(d.personal_medical), 0) as personalTotal,
|
||||
COALESCE(SUM(d.enterprise_medical), 0) as enterpriseTotal,
|
||||
COALESCE(SUM(d.personal_medical) + SUM(d.enterprise_medical), 0) as total
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'失业保险' as itemName,
|
||||
COALESCE(SUM(d.personal_unemployment), 0) as personalTotal,
|
||||
COALESCE(SUM(d.enterprise_unemployment), 0) as enterpriseTotal,
|
||||
COALESCE(SUM(d.personal_unemployment) + SUM(d.enterprise_unemployment), 0) as total
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'住房公积金' as itemName,
|
||||
COALESCE(SUM(d.personal_housing_fund), 0) as personalTotal,
|
||||
COALESCE(SUM(d.enterprise_housing_fund), 0) as enterpriseTotal,
|
||||
COALESCE(SUM(d.personal_housing_fund) + SUM(d.enterprise_housing_fund), 0) as total
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'工伤保险' as itemName,
|
||||
0 as personalTotal,
|
||||
COALESCE(SUM(d.enterprise_injury), 0) as enterpriseTotal,
|
||||
COALESCE(SUM(d.enterprise_injury), 0) as total
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'生育保险' as itemName,
|
||||
0 as personalTotal,
|
||||
COALESCE(SUM(d.enterprise_maternity), 0) as enterpriseTotal,
|
||||
COALESCE(SUM(d.enterprise_maternity), 0) as total
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0 AND d.del_flag = 0
|
||||
|
||||
ORDER BY total DESC
|
||||
</select>
|
||||
|
||||
<!-- 查询单位统计数据 -->
|
||||
<select id="queryUnitStats" resultType="com.ruoyi.oa.domain.vo.dashboard.UnitStatVo">
|
||||
SELECT
|
||||
m.unit_name as unitName,
|
||||
COUNT(DISTINCT d.detail_id) as employeeCount,
|
||||
COALESCE(SUM(d.net_salary), 0) as totalNetSalary,
|
||||
COALESCE(SUM(d.gross_salary), 0) as totalGrossSalary,
|
||||
COALESCE(SUM(d.unit_total_expense), 0) as totalUnitExpense,
|
||||
CASE
|
||||
WHEN COUNT(DISTINCT d.detail_id) > 0 THEN ROUND(SUM(d.net_salary) / COUNT(DISTINCT d.detail_id), 2)
|
||||
ELSE 0
|
||||
END as avgNetSalary,
|
||||
m.salary_period as salaryPeriod,
|
||||
0 as yearOnYearGrowthRate
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
GROUP BY m.unit_name, m.salary_period
|
||||
ORDER BY totalNetSalary DESC
|
||||
</select>
|
||||
|
||||
<!-- 查询部门统计数据 -->
|
||||
<select id="queryDeptSalaryStats" resultType="com.ruoyi.oa.domain.vo.dashboard.DeptSalaryStatVo">
|
||||
SELECT
|
||||
COALESCE(d.dept, '未分配部门') as deptName,
|
||||
COUNT(DISTINCT d.detail_id) as employeeCount,
|
||||
COALESCE(SUM(d.net_salary), 0) as totalNetSalary,
|
||||
COALESCE(SUM(d.gross_salary), 0) as totalGrossSalary,
|
||||
CASE
|
||||
WHEN COUNT(DISTINCT d.detail_id) > 0 THEN ROUND(SUM(d.net_salary) / COUNT(DISTINCT d.detail_id), 2)
|
||||
ELSE 0
|
||||
END as avgNetSalary,
|
||||
CASE
|
||||
WHEN COUNT(DISTINCT d.detail_id) > 0 THEN ROUND(SUM(d.gross_salary) / COUNT(DISTINCT d.detail_id), 2)
|
||||
ELSE 0
|
||||
END as avgGrossSalary,
|
||||
0 as yearOnYearGrowthRate
|
||||
FROM oa_salary_master m
|
||||
LEFT JOIN oa_salary_detail d ON m.master_id = d.main_id
|
||||
WHERE m.salary_period = #{salaryPeriod}
|
||||
AND m.del_flag = 0
|
||||
AND d.del_flag = 0
|
||||
GROUP BY d.dept
|
||||
ORDER BY totalNetSalary DESC
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user