|
|
|
|
@ -12,39 +12,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
|
|
p.project_name,
|
|
|
|
|
p.project_code,
|
|
|
|
|
p.project_category,
|
|
|
|
|
COALESCE(SUM(tp.hours), 0) AS total_hours,
|
|
|
|
|
COALESCE(SUM(d.adjusted_hours), 0) AS total_hours,
|
|
|
|
|
<!-- 获取该项目在全公司的总工时(用于判断是否存在跨部门) -->
|
|
|
|
|
COALESCE(global_stats.total_hours, 0) AS cross_dept_hours
|
|
|
|
|
FROM
|
|
|
|
|
erp_project_info p
|
|
|
|
|
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'
|
|
|
|
|
LEFT JOIN sys_user u ON p.manager_id = u.user_id
|
|
|
|
|
<!-- 关联工时明细 -->
|
|
|
|
|
LEFT JOIN erp_timesheet_project tp ON p.project_id = tp.project_id AND tp.del_flag = '0'
|
|
|
|
|
<!-- 关联工时主表以获取日期和人员(从而获取填报部门) -->
|
|
|
|
|
LEFT JOIN erp_timesheet_info ti ON tp.timesheet_id = ti.timesheet_id AND ti.del_flag = '0'
|
|
|
|
|
<!-- 关联填报部门 -->
|
|
|
|
|
LEFT JOIN sys_dept t_dept ON ti.dept_id = t_dept.dept_id
|
|
|
|
|
<!-- 关联项目所属部门,用于部门筛选 -->
|
|
|
|
|
LEFT JOIN sys_dept p_dept ON p.dept_id = p_dept.dept_id
|
|
|
|
|
<!-- 关联汇总所属部门 -->
|
|
|
|
|
LEFT JOIN sys_dept t_dept ON s.dept_id = t_dept.dept_id
|
|
|
|
|
<!-- 关联全局统计 (独立子查询,不受主查询部门条件影响) -->
|
|
|
|
|
LEFT JOIN (
|
|
|
|
|
SELECT
|
|
|
|
|
tp2.project_id,
|
|
|
|
|
SUM(tp2.hours) AS total_hours
|
|
|
|
|
FROM erp_timesheet_project tp2
|
|
|
|
|
JOIN erp_timesheet_info ti2 ON tp2.timesheet_id = ti2.timesheet_id AND ti2.del_flag = '0'
|
|
|
|
|
WHERE tp2.del_flag = '0'
|
|
|
|
|
AND ti2.timesheet_status = '3'
|
|
|
|
|
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 ti2.start_time >= #{startTime}
|
|
|
|
|
AND s2.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND ti2.end_time <= #{endTime}
|
|
|
|
|
AND s2.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
GROUP BY tp2.project_id
|
|
|
|
|
GROUP BY d2.adjusted_project_id
|
|
|
|
|
) global_stats ON p.project_id = global_stats.project_id
|
|
|
|
|
<where>
|
|
|
|
|
p.del_flag = '0'
|
|
|
|
|
d.del_flag = '0'
|
|
|
|
|
AND d.is_project = '1'
|
|
|
|
|
AND p.project_category <> '9'
|
|
|
|
|
<if test="bo.projectName != null and bo.projectName != ''">
|
|
|
|
|
AND p.project_name LIKE concat('%', #{bo.projectName}, '%')
|
|
|
|
|
@ -58,87 +56,84 @@ 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 ti.start_time >= #{startTime}
|
|
|
|
|
AND s.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND ti.end_time <= #{endTime}
|
|
|
|
|
AND s.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
<!-- 仅统计已审批的工时 (3=已审批) -->
|
|
|
|
|
AND ti.timesheet_status = '3'
|
|
|
|
|
</where>
|
|
|
|
|
<!-- 按项目ID 和 填报部门ID 分组 -->
|
|
|
|
|
GROUP BY p.project_id, ti.dept_id, global_stats.total_hours
|
|
|
|
|
<!-- 按调整后的项目ID 和 汇总所属部门 分组 -->
|
|
|
|
|
GROUP BY d.adjusted_project_id, s.dept_id, global_stats.total_hours
|
|
|
|
|
<!-- 仅显示有工时的记录 -->
|
|
|
|
|
HAVING SUM(tp.hours) > 0
|
|
|
|
|
HAVING SUM(d.adjusted_hours) > 0
|
|
|
|
|
ORDER BY p.project_code, t_dept.dept_id
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- 查询项目-人员工时分布 -->
|
|
|
|
|
<!-- 查询项目-人员工时分布 (基于月汇总调整后数据) -->
|
|
|
|
|
<select id="selectProjectPersonnelHours" resultType="java.util.Map">
|
|
|
|
|
SELECT
|
|
|
|
|
p.project_id AS projectId,
|
|
|
|
|
p.dept_id AS projectDeptId,
|
|
|
|
|
p.project_name AS projectName,
|
|
|
|
|
p.project_code AS projectCode,
|
|
|
|
|
u.user_id AS userId,
|
|
|
|
|
d.staff_user_id AS userId,
|
|
|
|
|
u.nick_name AS nickName,
|
|
|
|
|
COALESCE(SUM(tp.hours), 0) AS hours
|
|
|
|
|
FROM erp_timesheet_project tp
|
|
|
|
|
JOIN erp_timesheet_info ti ON tp.timesheet_id = ti.timesheet_id AND ti.del_flag = '0'
|
|
|
|
|
JOIN erp_project_info p ON tp.project_id = p.project_id AND p.del_flag = '0'
|
|
|
|
|
JOIN sys_user u ON ti.user_id = u.user_id AND u.del_flag = '0'
|
|
|
|
|
WHERE ti.timesheet_status = '3'
|
|
|
|
|
AND tp.del_flag = '0'
|
|
|
|
|
COALESCE(SUM(d.adjusted_hours), 0) 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 p ON d.adjusted_project_id = p.project_id AND p.del_flag = '0'
|
|
|
|
|
JOIN sys_user u ON d.staff_user_id = u.user_id AND u.del_flag = '0'
|
|
|
|
|
WHERE d.del_flag = '0'
|
|
|
|
|
AND d.is_project = '1'
|
|
|
|
|
AND p.project_category <> '9'
|
|
|
|
|
<if test="deptId != null">
|
|
|
|
|
AND ti.dept_id = #{deptId}
|
|
|
|
|
AND s.dept_id = #{deptId}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="startTime != null and startTime != ''">
|
|
|
|
|
AND ti.start_time >= #{startTime}
|
|
|
|
|
AND s.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND ti.end_time <= #{endTime}
|
|
|
|
|
AND s.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
GROUP BY p.project_id, u.user_id
|
|
|
|
|
GROUP BY d.adjusted_project_id, d.staff_user_id
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- 查询项目在全公司的总工时(用于跨部门判断) -->
|
|
|
|
|
<!-- 查询项目在全公司的总工时(用于跨部门判断, 基于月汇总调整后数据) -->
|
|
|
|
|
<select id="selectProjectTotalHours" resultType="java.util.Map">
|
|
|
|
|
SELECT
|
|
|
|
|
tp.project_id AS projectId,
|
|
|
|
|
COALESCE(SUM(tp.hours), 0) AS totalHours
|
|
|
|
|
FROM erp_timesheet_project tp
|
|
|
|
|
JOIN erp_timesheet_info ti ON tp.timesheet_id = ti.timesheet_id AND ti.del_flag = '0'
|
|
|
|
|
JOIN erp_project_info p ON tp.project_id = p.project_id AND p.del_flag = '0'
|
|
|
|
|
WHERE ti.timesheet_status = '3'
|
|
|
|
|
AND tp.del_flag = '0'
|
|
|
|
|
d.adjusted_project_id AS projectId,
|
|
|
|
|
COALESCE(SUM(d.adjusted_hours), 0) AS totalHours
|
|
|
|
|
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'
|
|
|
|
|
WHERE d.del_flag = '0'
|
|
|
|
|
AND d.is_project = '1'
|
|
|
|
|
AND p.project_category <> '9'
|
|
|
|
|
<if test="startTime != null and startTime != ''">
|
|
|
|
|
AND ti.start_time >= #{startTime}
|
|
|
|
|
AND s.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND ti.end_time <= #{endTime}
|
|
|
|
|
AND s.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
<!-- 仅统计涉及到的项目 -->
|
|
|
|
|
AND tp.project_id IN
|
|
|
|
|
<!-- 仅统计涉及到的项目(当前部门参与的项目) -->
|
|
|
|
|
AND d.adjusted_project_id IN
|
|
|
|
|
(
|
|
|
|
|
SELECT DISTINCT tpp.project_id
|
|
|
|
|
FROM erp_timesheet_project tpp
|
|
|
|
|
JOIN erp_timesheet_info tii ON tpp.timesheet_id = tii.timesheet_id
|
|
|
|
|
WHERE tpp.del_flag = '0'
|
|
|
|
|
AND tii.dept_id = #{deptId}
|
|
|
|
|
AND tii.timesheet_status = '3'
|
|
|
|
|
SELECT DISTINCT d3.adjusted_project_id
|
|
|
|
|
FROM erp_timesheet_summary_detail d3
|
|
|
|
|
JOIN erp_timesheet_summary s3 ON d3.summary_id = s3.summary_id AND s3.del_flag = '0'
|
|
|
|
|
WHERE d3.del_flag = '0'
|
|
|
|
|
AND d3.is_project = '1'
|
|
|
|
|
AND s3.dept_id = #{deptId}
|
|
|
|
|
<if test="startTime != null and startTime != ''">
|
|
|
|
|
AND tii.start_time >= #{startTime}
|
|
|
|
|
AND s3.month_code >= #{startTime}
|
|
|
|
|
</if>
|
|
|
|
|
<if test="endTime != null and endTime != ''">
|
|
|
|
|
AND tii.end_time <= #{endTime}
|
|
|
|
|
AND s3.month_code <= #{endTime}
|
|
|
|
|
</if>
|
|
|
|
|
)
|
|
|
|
|
GROUP BY tp.project_id
|
|
|
|
|
GROUP BY d.adjusted_project_id
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- 查询部门的所有人员 -->
|
|
|
|
|
|