feat(report): 更新工单统计数据查询逻辑

- 修改工单统计查询,支持维修、保养、巡检三类工单的分别统计
- 新增维修工单数据源DMS_BILLS_FAULT_INSTANCE,通过IS_FLAG='1'过滤
- 新增保养工单数据源DMS_BILLS_MAINT_INSTANCE,全量统计无IS_FLAG字段
- 新增巡检工单数据源DMS_BILLS_INSPECT_INSTANCE,通过IS_FLAG='1'过滤
- 更新维修时间统计查询,只统计BILLS_STATUS='2'的已完成工单
- 修改保养执行情况统计,使用DMS_BILLS_MAINT_INSTANCE表替换原计划表
- 调整巡检统计逻辑,将完成状态从INSPECT_STATUS='2'改为'3'
master
zangch@mesnac.com 6 days ago
parent 0913687294
commit 79a6fb301b

@ -4,52 +4,63 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aucma.report.mapper.Board5Mapper">
<!-- 查询工单统计(总数、已完成、停机,全量历史) -->
<!-- 数据来源BASE_ORDERINFO -->
<!-- EXECUTION_STATUS: PENDING/RUNNING/COMPLETED/PAUSED -->
<!-- 查询工单统计(维修+保养+巡检工单总数、已完成、停机,全量历史) -->
<!-- 维修工单: DMS_BILLS_FAULT_INSTANCE, WHERE IS_FLAG = '1' -->
<!-- 保养工单: DMS_BILLS_MAINT_INSTANCE无IS_FLAG字段全量统计 -->
<!-- 巡检工单: DMS_BILLS_INSPECT_INSTANCE, WHERE IS_FLAG = '1' -->
<select id="selectOrderWorkStatistics" resultType="java.util.HashMap">
SELECT COUNT(*) AS TOTAL_COUNT,
SUM(CASE WHEN EXECUTION_STATUS = 'COMPLETED' THEN 1 ELSE 0 END) AS COMPLETE_COUNT,
SUM(CASE WHEN EXECUTION_STATUS = 'PAUSED' THEN 1 ELSE 0 END) AS STOP_COUNT
FROM BASE_ORDERINFO
WHERE IS_FLAG = 0
SELECT
-- 工单总数 = 维修工单 + 保养工单 + 巡检工单
(SELECT COUNT(*) FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1') +
(SELECT COUNT(*) FROM DMS_BILLS_MAINT_INSTANCE) +
(SELECT COUNT(*) FROM DMS_BILLS_INSPECT_INSTANCE WHERE IS_FLAG = '1') AS TOTAL_COUNT,
-- 已完成 = 维修完成(BILLS_STATUS='2') + 保养完成(MAINT_STATUS='3') + 巡检完成(INSPECT_STATUS='3')
(SELECT COUNT(*) FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1' AND BILLS_STATUS = '2') +
(SELECT COUNT(*) FROM DMS_BILLS_MAINT_INSTANCE WHERE MAINT_STATUS = '3') +
(SELECT COUNT(*) FROM DMS_BILLS_INSPECT_INSTANCE WHERE IS_FLAG = '1' AND INSPECT_STATUS = '3') AS COMPLETE_COUNT,
-- 停机工单 = 维修中(BILLS_STATUS='1')
(SELECT COUNT(*) FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1' AND BILLS_STATUS = '1') AS STOP_COUNT
FROM DUAL
</select>
<!-- 查询维修时间统计(平均响应时间、平均维修时间,全量历史) -->
<!-- 平均响应时间 = (REAL_BEGIN_TIME - APPLY_TIME) 的平均值,单位分钟 -->
<!-- 平均维修时间 = (REAL_END_TIME - REAL_BEGIN_TIME) 的平均值,单位小时 -->
<!-- 数据来源DMS_BILLS_FAULT_INSTANCE -->
<!-- BILLS_STATUS: 0=待维修, 1=维修中, 2=维修完成 -->
<select id="selectRepairTimeStatistics" resultType="java.util.HashMap">
SELECT ROUND(NVL(AVG((REAL_BEGIN_TIME - APPLY_TIME) * 24 * 60), 0), 2) AS AVG_RESPONSE_TIME,
ROUND(NVL(AVG((REAL_END_TIME - REAL_BEGIN_TIME) * 24), 0), 2) AS AVG_REPAIR_TIME
FROM DMS_BILLS_FAULT_INSTANCE
WHERE IS_FLAG = '1'
AND REAL_BEGIN_TIME IS NOT NULL
AND REAL_END_TIME IS NOT NULL -- 确保完成时间存在
AND BILLS_STATUS IN ('2', '5') -- 仅计算已完成工单
AND REAL_END_TIME IS NOT NULL
AND BILLS_STATUS = '2'
AND APPLY_TIME IS NOT NULL
</select>
<!-- 查询保养执行情况统计(全量历史) -->
<!-- MAINT_STATUS: 1=待保养, 2=保养中, 3=已完成, 4=待验证 -->
<!-- 数据来源DMS_PLAN_MAINT -->
<!-- MAINT_STATUS: 1=待保养, 2=保养中, 3=已完成 -->
<!-- 注意:此表没有 IS_FLAG 字段MAINT_STATUS 是 CHAR(1) 类型 -->
<!-- 注意:工单表没有 MAINT_STATUS=4待验证状态该字段返回0 -->
<select id="selectMaintStatistics" resultType="java.util.HashMap">
SELECT COUNT(*) AS PLAN_COUNT,
SUM(CASE WHEN MAINT_STATUS = 3 THEN 1 ELSE 0 END) AS COMPLETE_COUNT,
SUM(CASE WHEN MAINT_STATUS = 1 THEN 1 ELSE 0 END) AS WAITING_COUNT,
SUM(CASE WHEN MAINT_STATUS = 2 THEN 1 ELSE 0 END) AS DOING_COUNT,
SUM(CASE WHEN MAINT_STATUS = 4 THEN 1 ELSE 0 END) AS VERIFY_COUNT
FROM DMS_PLAN_MAINT
WHERE IS_FLAG = 1
SUM(CASE WHEN MAINT_STATUS = '3' THEN 1 ELSE 0 END) AS COMPLETE_COUNT,
SUM(CASE WHEN MAINT_STATUS = '1' THEN 1 ELSE 0 END) AS WAITING_COUNT,
SUM(CASE WHEN MAINT_STATUS = '2' THEN 1 ELSE 0 END) AS DOING_COUNT,
0 AS VERIFY_COUNT
FROM DMS_BILLS_MAINT_INSTANCE
</select>
<!-- 查询巡检执行情况统计(全量历史) -->
<!-- 应检设备 = DMS_PLAN_INSPECT.DEVICE_AMOUNT 求和 -->
<!-- 已检设备 = DMS_BILLS_INSPECT_INSTANCE 中 INSPECT_STATUS=2(已完成) 的设备数量 -->
<!-- 已检设备 = DMS_BILLS_INSPECT_INSTANCE 中 INSPECT_STATUS='3'(已完成) 的设备数量 -->
<!-- 数据来源DMS_PLAN_INSPECT, DMS_BILLS_INSPECT_INSTANCE -->
<select id="selectInspectStatistics" resultType="java.util.HashMap">
SELECT (SELECT NVL(SUM(DEVICE_AMOUNT), 0) FROM DMS_PLAN_INSPECT WHERE IS_FLAG = '1') AS DEVICE_COUNT,
(SELECT COUNT(*) FROM DMS_BILLS_INSPECT_INSTANCE WHERE IS_FLAG = '1' AND INSPECT_STATUS = '2') AS COMPLETE_COUNT
(SELECT COUNT(*) FROM DMS_BILLS_INSPECT_INSTANCE WHERE IS_FLAG = '1' AND INSPECT_STATUS = '3') AS COMPLETE_COUNT
FROM DUAL
</select>

Loading…
Cancel
Save