修改人天计算方法,避免笛卡尔积问题导致人天错误

This commit is contained in:
2025-04-01 17:22:34 +08:00
parent dbc2515bf0
commit d43f063f6f
2 changed files with 80 additions and 39 deletions

View File

@@ -96,30 +96,41 @@
</select>
<select id="getProjectDataByMonth" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
SELECT sop.project_id,
sop.project_name,
sop.color,
ROUND(SUM(soa.day_length + soa.hour / 9), 2) AS labor_cost,
SELECT
p.project_id,
p.project_name,
p.color,
-- 子查询里已经聚合完 labor_cost
a.labor_cost,
-- 同理财务部分
f.total_price
FROM sys_oa_project AS p
LEFT JOIN (
SELECT
project_id,
ROUND(SUM(day_length + hour / 9), 2) AS labor_cost
FROM sys_oa_attendance
WHERE create_time BETWEEN #{firstDay} AND #{lastDay}
AND del_flag = '0'
GROUP BY project_id
) AS a ON p.project_id = a.project_id
LEFT JOIN (
SELECT
sof.project_id,
SUM(
CASE
WHEN sof.finance_type = 0 THEN sod.price
ELSE 0
END
CASE WHEN sof.finance_type = 0 THEN sod.price ELSE 0 END
) AS total_price
FROM sys_oa_project AS sop
LEFT JOIN sys_oa_attendance AS soa
ON sop.project_id = soa.project_id
AND soa.create_time BETWEEN #{firstDay} AND #{lastDay}
AND soa.del_flag = '0'
LEFT JOIN sys_oa_finance AS sof
ON sop.project_id = sof.project_id
AND sof.create_time BETWEEN #{firstDay} AND #{lastDay}
LEFT JOIN sys_oa_detail AS sod
ON sof.finance_id = sod.finance_id
AND sod.create_time BETWEEN #{firstDay} AND #{lastDay}
GROUP BY sop.project_id,
sop.project_name,
sop.color
FROM sys_oa_finance sof
JOIN sys_oa_detail sod ON sof.finance_id = sod.finance_id
AND sod.create_time BETWEEN #{firstDay} AND #{lastDay}
WHERE sof.create_time BETWEEN #{firstDay} AND #{lastDay}
GROUP BY sof.project_id
) AS f ON p.project_id = f.project_id
-- 最后只要在这里加一个 WHERE 条件,过滤掉 labor_cost=0 或者为空
WHERE a.labor_cost > 0
</select>
<select id="getProjectDataByMonthAndDate" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">