|
|
|
|
@ -4,6 +4,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
|
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
|
|
|
<mapper namespace="org.dromara.oa.erp.mapper.ErpTimesheetReportMapper">
|
|
|
|
|
|
|
|
|
|
<sql id="projectManHourReportData">
|
|
|
|
|
SELECT
|
|
|
|
|
d.adjusted_project_id AS project_id,
|
|
|
|
|
s.dept_id AS dept_id,
|
|
|
|
|
d.adjusted_hours AS hours
|
|
|
|
|
FROM erp_timesheet_summary_detail d
|
|
|
|
|
JOIN erp_timesheet_summary s ON d.summary_id = s.summary_id AND s.del_flag = '0'
|
|
|
|
|
JOIN erp_project_info adjusted_project ON d.adjusted_project_id = adjusted_project.project_id AND adjusted_project.del_flag = '0'
|
|
|
|
|
LEFT JOIN erp_project_info original_project ON d.original_project_id = original_project.project_id
|
|
|
|
|
WHERE d.del_flag = '0'
|
|
|
|
|
AND d.is_project = '1'
|
|
|
|
|
AND adjusted_project.project_category <> '9'
|
|
|
|
|
AND (
|
|
|
|
|
d.original_project_id IS NULL
|
|
|
|
|
OR original_project.project_category IS NULL
|
|
|
|
|
OR original_project.project_category <> '4'
|
|
|
|
|
)
|
|
|
|
|
<if test="startTime != null and startTime != ''">
|
|
|
|
|
AND s.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND s.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
UNION ALL
|
|
|
|
|
SELECT
|
|
|
|
|
ad.target_project_id AS project_id,
|
|
|
|
|
target_project.dept_id AS dept_id,
|
|
|
|
|
ad.alloc_hours AS hours
|
|
|
|
|
FROM erp_timesheet_pre_alloc a
|
|
|
|
|
JOIN erp_timesheet_pre_alloc_detail ad ON a.alloc_id = ad.alloc_id AND ad.del_flag = '0'
|
|
|
|
|
JOIN erp_project_info target_project ON ad.target_project_id = target_project.project_id AND target_project.del_flag = '0'
|
|
|
|
|
WHERE a.del_flag = '0'
|
|
|
|
|
AND ad.alloc_hours > 0
|
|
|
|
|
AND target_project.project_category IN ('1', '2')
|
|
|
|
|
<if test="startTime != null and startTime != ''">
|
|
|
|
|
AND a.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND a.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
</sql>
|
|
|
|
|
|
|
|
|
|
<select id="selectProjectManHourList" resultType="org.dromara.oa.erp.domain.vo.ProjectManHourReportVo">
|
|
|
|
|
SELECT
|
|
|
|
|
t_dept.dept_name,
|
|
|
|
|
@ -12,38 +54,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
|
|
p.project_name,
|
|
|
|
|
p.project_code,
|
|
|
|
|
p.project_category,
|
|
|
|
|
COALESCE(SUM(d.adjusted_hours), 0) AS total_hours,
|
|
|
|
|
<!-- 获取该项目在全公司的总工时(用于判断是否存在跨部门) -->
|
|
|
|
|
COALESCE(SUM(report_data.hours), 0) AS total_hours,
|
|
|
|
|
COALESCE(global_stats.total_hours, 0) AS cross_dept_hours
|
|
|
|
|
FROM
|
|
|
|
|
erp_timesheet_summary_detail d
|
|
|
|
|
JOIN erp_timesheet_summary s ON d.summary_id = s.summary_id AND s.del_flag = '0'
|
|
|
|
|
<!-- 关联项目信息表获取项目经理、类别等 -->
|
|
|
|
|
JOIN erp_project_info p ON d.adjusted_project_id = p.project_id AND p.del_flag = '0'
|
|
|
|
|
(
|
|
|
|
|
<include refid="projectManHourReportData"/>
|
|
|
|
|
) report_data
|
|
|
|
|
JOIN erp_project_info p ON report_data.project_id = p.project_id AND p.del_flag = '0'
|
|
|
|
|
LEFT JOIN sys_user u ON p.manager_id = u.user_id
|
|
|
|
|
<!-- 关联汇总所属部门 -->
|
|
|
|
|
LEFT JOIN sys_dept t_dept ON s.dept_id = t_dept.dept_id
|
|
|
|
|
<!-- 关联全局统计 (独立子查询,不受主查询部门条件影响) -->
|
|
|
|
|
LEFT JOIN sys_dept t_dept ON report_data.dept_id = t_dept.dept_id
|
|
|
|
|
LEFT JOIN (
|
|
|
|
|
SELECT
|
|
|
|
|
d2.adjusted_project_id AS project_id,
|
|
|
|
|
SUM(d2.adjusted_hours) AS total_hours
|
|
|
|
|
FROM erp_timesheet_summary_detail d2
|
|
|
|
|
JOIN erp_timesheet_summary s2 ON d2.summary_id = s2.summary_id AND s2.del_flag = '0'
|
|
|
|
|
WHERE d2.del_flag = '0'
|
|
|
|
|
AND d2.is_project = '1'
|
|
|
|
|
<if test="startTime != null and startTime != ''">
|
|
|
|
|
AND s2.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND s2.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
GROUP BY d2.adjusted_project_id
|
|
|
|
|
all_report_data.project_id,
|
|
|
|
|
SUM(all_report_data.hours) AS total_hours
|
|
|
|
|
FROM
|
|
|
|
|
(
|
|
|
|
|
<include refid="projectManHourReportData"/>
|
|
|
|
|
) all_report_data
|
|
|
|
|
GROUP BY all_report_data.project_id
|
|
|
|
|
) global_stats ON p.project_id = global_stats.project_id
|
|
|
|
|
<where>
|
|
|
|
|
d.del_flag = '0'
|
|
|
|
|
AND d.is_project = '1'
|
|
|
|
|
AND p.project_category <> '9'
|
|
|
|
|
p.project_category <> '9'
|
|
|
|
|
<if test="bo.projectName != null and bo.projectName != ''">
|
|
|
|
|
AND p.project_name LIKE concat('%', #{bo.projectName}, '%')
|
|
|
|
|
</if>
|
|
|
|
|
@ -56,19 +87,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
|
|
<if test="bo.deptName != null and bo.deptName != ''">
|
|
|
|
|
AND t_dept.dept_name LIKE concat('%', #{bo.deptName}, '%')
|
|
|
|
|
</if>
|
|
|
|
|
<!-- 月份范围筛选 -->
|
|
|
|
|
<if test="startTime != null and startTime != ''">
|
|
|
|
|
AND s.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND s.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
</where>
|
|
|
|
|
<!-- 按调整后的项目ID 和 汇总所属部门 分组 -->
|
|
|
|
|
GROUP BY d.adjusted_project_id, s.dept_id, global_stats.total_hours
|
|
|
|
|
<!-- 仅显示有工时的记录 -->
|
|
|
|
|
HAVING SUM(d.adjusted_hours) > 0
|
|
|
|
|
ORDER BY p.project_code, t_dept.dept_id
|
|
|
|
|
GROUP BY
|
|
|
|
|
report_data.project_id,
|
|
|
|
|
report_data.dept_id,
|
|
|
|
|
t_dept.dept_name,
|
|
|
|
|
u.nick_name,
|
|
|
|
|
p.project_id,
|
|
|
|
|
p.project_name,
|
|
|
|
|
p.project_code,
|
|
|
|
|
p.project_category,
|
|
|
|
|
global_stats.total_hours
|
|
|
|
|
HAVING SUM(report_data.hours) > 0
|
|
|
|
|
ORDER BY p.project_code, report_data.dept_id
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- 查询项目-人员工时分布 (基于月汇总调整后数据) -->
|
|
|
|
|
|