|
@@ -435,4 +435,92 @@
|
|
|
</update>
|
|
|
|
|
|
|
|
|
+ <select id="countList" parameterType="cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO"
|
|
|
+ resultType="cn.iocoder.yudao.module.pms.dal.dataobject.iotcountdata.IotCountDataDO">
|
|
|
+ -- 统计指定部门及其子部门的工单状态
|
|
|
+ SELECT
|
|
|
+ dept_id,
|
|
|
+ name,
|
|
|
+ total_count,
|
|
|
+ filled_count,
|
|
|
+ unfilled_count,
|
|
|
+ filling_count
|
|
|
+ FROM (
|
|
|
+ -- 第一行:汇总数据
|
|
|
+ SELECT
|
|
|
+ #{deptId} AS dept_id,
|
|
|
+ (SELECT name FROM system_dept WHERE id = #{deptId}) AS name,
|
|
|
+ COUNT(o.id) AS total_count,
|
|
|
+ SUM(CASE WHEN o.order_status = 1 THEN 1 ELSE 0 END) AS filled_count,
|
|
|
+ SUM(CASE WHEN o.order_status = 0 THEN 1 ELSE 0 END) AS unfilled_count,
|
|
|
+ SUM(CASE WHEN o.order_status = 2 THEN 1 ELSE 0 END) AS filling_count,
|
|
|
+ 0 AS sort_order -- 确保汇总数据排在第一行
|
|
|
+ FROM rq_iot_opeation_fill_order o
|
|
|
+ WHERE o.deleted = 0
|
|
|
+ <if test="createTime != null and createTime.length > 0">
|
|
|
+ <choose>
|
|
|
+ <when test="createTime.length == 1">
|
|
|
+ AND o.create_time = #{createTime[0],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler}
|
|
|
+ </when>
|
|
|
+ <otherwise>
|
|
|
+ AND o.create_time BETWEEN #{createTime[0],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler} AND #{createTime[1],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler}
|
|
|
+ </otherwise>
|
|
|
+ </choose>
|
|
|
+ </if>
|
|
|
+ AND o.dept_id IN (
|
|
|
+ SELECT id FROM system_dept WHERE id = #{deptId} -- 包含根部门自身
|
|
|
+ UNION ALL
|
|
|
+ SELECT id FROM system_dept WHERE parent_id = #{deptId} -- 一级子部门
|
|
|
+ UNION ALL
|
|
|
+ SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId}) -- 二级子部门
|
|
|
+ UNION ALL
|
|
|
+ SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId})) -- 三级子部门
|
|
|
+ UNION ALL
|
|
|
+ SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = #{deptId}))) -- 四级子部门
|
|
|
+ )
|
|
|
+
|
|
|
+ UNION ALL
|
|
|
+
|
|
|
+ -- 后续行:直接子部门数据
|
|
|
+ SELECT
|
|
|
+ d.id AS dept_id,
|
|
|
+ d.name,
|
|
|
+ COUNT(o.id) AS total_count,
|
|
|
+ SUM(CASE WHEN o.order_status = 1 THEN 1 ELSE 0 END) AS filled_count,
|
|
|
+ SUM(CASE WHEN o.order_status = 0 THEN 1 ELSE 0 END) AS unfilled_count,
|
|
|
+ SUM(CASE WHEN o.order_status = 2 THEN 1 ELSE 0 END) AS filling_count,
|
|
|
+ 1 AS sort_order -- 子部门数据排在后面
|
|
|
+ FROM system_dept d
|
|
|
+ LEFT JOIN rq_iot_opeation_fill_order o
|
|
|
+ ON o.deleted = 0
|
|
|
+ <if test="createTime != null and createTime.length > 0">
|
|
|
+ <choose>
|
|
|
+ <when test="createTime.length == 1">
|
|
|
+ AND o.create_time = #{createTime[0],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler}
|
|
|
+ </when>
|
|
|
+ <otherwise>
|
|
|
+ AND o.create_time BETWEEN #{createTime[0],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler} AND #{createTime[1],typeHandler=org.apache.ibatis.type.LocalDateTimeTypeHandler}
|
|
|
+ </otherwise>
|
|
|
+ </choose>
|
|
|
+ </if>
|
|
|
+ AND o.dept_id IN (
|
|
|
+ SELECT id FROM system_dept WHERE id = d.id -- 子部门自身
|
|
|
+ UNION ALL
|
|
|
+ SELECT id FROM system_dept WHERE parent_id = d.id -- 子部门的一级子部门
|
|
|
+ UNION ALL
|
|
|
+ SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = d.id) -- 子部门的二级子部门
|
|
|
+ UNION ALL
|
|
|
+ SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = d.id)) -- 子部门的三级子部门
|
|
|
+ UNION ALL
|
|
|
+ SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id IN (SELECT id FROM system_dept WHERE parent_id = d.id))) -- 子部门的四级子部门
|
|
|
+ )
|
|
|
+ WHERE d.parent_id = #{deptId} -- 只查询直接子部门
|
|
|
+ AND d.deleted = 0 -- 排除已删除的部门
|
|
|
+ GROUP BY d.id, d.name
|
|
|
+ HAVING COUNT(o.id) > 0 -- 只显示有数据的部门
|
|
|
+ ) t
|
|
|
+ ORDER BY sort_order, dept_id;
|
|
|
+
|
|
|
+ </select>
|
|
|
+
|
|
|
</mapper>
|