fix(report): 修复报表查询中的设备参数和状态统计问题

- 将参数查询条件从PARAM_CODE改为PARAM_NAME以提高兼容性
- 修正设备状态统计查询中数值类型的比较条件
- 更新设备表关联关系使用正确的主键字段OBJ_ID
- 添加详细的注释说明参数查询方式的变化原因
master
zangch@mesnac.com 1 week ago
parent ec4d0834ad
commit a52561e6e3

@ -19,7 +19,8 @@
</select>
<!-- 查询日累计产量(当天工艺参数) -->
<!-- 使用BASE_DEVICE_PARAM_VAL表PARAM_CODE='19'表示实际产出数量 -->
<!-- 使用BASE_DEVICE_PARAM_VAL表通过PARAM_NAME='机台状态-实际产出数量'定位参数 -->
<!-- 注意PARAM_CODE可能因设备不同而变化但PARAM_NAME是固定的 -->
<!-- 取每台设备当天最新的一条记录的实际产出数量进行汇总 -->
<select id="selectDayProductionTotal" resultType="java.lang.Long">
SELECT NVL(SUM(TO_NUMBER(PARAM_VALUE)), 0)
@ -27,7 +28,7 @@
SELECT DEVICE_CODE, PARAM_VALUE,
ROW_NUMBER() OVER (PARTITION BY DEVICE_CODE ORDER BY COLLECT_TIME DESC) AS RN
FROM BASE_DEVICE_PARAM_VAL
WHERE PARAM_CODE = '19'
WHERE PARAM_NAME = '机台状态-实际产出数量'
AND TO_CHAR(COLLECT_TIME, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
)
WHERE RN = 1
@ -56,14 +57,15 @@
</select>
<!-- 查询设备状态统计 -->
<!-- DEVICE_STATUS: 0-使用/正常, 1-停用/告警, 2-报废/停机 -->
<!-- DEVICE_STATUS: NUMBER(1,0)类型0=使用/正常, 1=停用/告警, 2=报废/停机 -->
<!-- IS_FLAG: NUMBER(1,0)类型0=有效 -->
<select id="selectDeviceStatusStatistics" resultType="java.util.HashMap">
SELECT COUNT(*) AS TOTAL_COUNT,
SUM(CASE WHEN DEVICE_STATUS = '0' THEN 1 ELSE 0 END) AS NORMAL_COUNT,
SUM(CASE WHEN DEVICE_STATUS = '1' THEN 1 ELSE 0 END) AS ALARM_COUNT,
SUM(CASE WHEN DEVICE_STATUS = '2' THEN 1 ELSE 0 END) AS STOP_COUNT
SUM(CASE WHEN DEVICE_STATUS = 0 THEN 1 ELSE 0 END) AS NORMAL_COUNT,
SUM(CASE WHEN DEVICE_STATUS = 1 THEN 1 ELSE 0 END) AS ALARM_COUNT,
SUM(CASE WHEN DEVICE_STATUS = 2 THEN 1 ELSE 0 END) AS STOP_COUNT
FROM BASE_DEVICELEDGER
WHERE IS_FLAG = '0'
WHERE IS_FLAG = 0
</select>
<!-- 查询总维修次数 -->
@ -74,28 +76,30 @@
</select>
<!-- 查询最新报警信息 -->
<!-- 设备表使用 BASE_DEVICELEDGER主键是 OBJ_ID -->
<select id="selectLatestAlarmInfo" resultType="java.util.HashMap">
SELECT * FROM (
SELECT d.DEVICE_NAME AS DEVICE_NAME,
a.ALARM_CONTENT AS ALARM_REASON,
TO_CHAR(a.ALARM_TIME, 'HH24:MI:SS') AS ALARM_TIME
FROM DMS_RECORD_ALARM_INFO a
LEFT JOIN DMS_BASE_DEVICE_LEDGER d ON a.DEVICE_ID = d.DEVICE_ID
LEFT JOIN BASE_DEVICELEDGER d ON a.DEVICE_ID = d.OBJ_ID
ORDER BY a.ALARM_TIME DESC
) WHERE ROWNUM = 1
</select>
<!-- 查询维修分析列表(按设备聚合) -->
<!-- 设备表使用 BASE_DEVICELEDGER主键是 OBJ_ID -->
<select id="selectRepairAnalysisByDevice" resultType="com.aucma.report.domain.vo.Board4RepairAnalysisVo">
SELECT * FROM (
SELECT d.DEVICE_NAME AS deviceName,
COUNT(*) AS repairCount,
ROUND(COUNT(*) * 100.0 / NULLIF((SELECT COUNT(*) FROM DMS_BILLS_FAULT_INSTANCE WHERE IS_FLAG = '1'), 0), 0) AS percent
FROM DMS_BILLS_FAULT_INSTANCE f
LEFT JOIN DMS_BASE_DEVICE_LEDGER d ON f.DEVICE_ID = d.DEVICE_ID
LEFT JOIN BASE_DEVICELEDGER d ON f.DEVICE_ID = d.OBJ_ID
WHERE f.IS_FLAG = '1'
AND f.DEVICE_ID IS NOT NULL
GROUP BY d.DEVICE_ID, d.DEVICE_NAME
GROUP BY d.OBJ_ID, d.DEVICE_NAME
ORDER BY repairCount DESC
) WHERE ROWNUM &lt;= 10
</select>
@ -136,6 +140,8 @@
<!-- 查询设备分析列表(各设备机台实际产量) -->
<!-- 从BASE_DEVICE_PARAM_VAL获取当天每台设备的最新实际产出数量 -->
<!-- 注意通过PARAM_NAME='机台状态-实际产出数量'定位参数而非PARAM_CODE -->
<!-- 因为PARAM_CODE可能因设备不同而变化但PARAM_NAME是固定的 -->
<select id="selectDeviceProductionAnalysis" resultType="com.aucma.report.domain.vo.Board4DeviceProductionVo">
SELECT d.DEVICE_NAME AS deviceName,
NVL(TO_NUMBER(p.PARAM_VALUE), 0) AS production
@ -146,12 +152,12 @@
SELECT DEVICE_CODE, PARAM_VALUE,
ROW_NUMBER() OVER (PARTITION BY DEVICE_CODE ORDER BY COLLECT_TIME DESC) AS RN
FROM BASE_DEVICE_PARAM_VAL
WHERE PARAM_CODE = '19'
WHERE PARAM_NAME = '机台状态-实际产出数量'
AND TO_CHAR(COLLECT_TIME, 'YYYY-MM-DD') = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
)
WHERE RN = 1
) p ON d.DEVICE_CODE = p.DEVICE_CODE
WHERE d.IS_FLAG = '0'
WHERE d.IS_FLAG = 0
AND d.DEVICE_TYPE = '1'
ORDER BY production DESC
</select>

Loading…
Cancel
Save