|
|
@@ -442,109 +442,65 @@
|
|
|
|
|
|
<select id="truckHisTareComparison" parameterType="java.util.HashMap"
|
|
|
resultType="com.steerinfo.meterwork.meterworkdatacount.model.TruckHisTareComparison">
|
|
|
- WITH
|
|
|
- -- 1. 历史皮重表最新记录(每个车号最近一条)
|
|
|
- latest_tare AS (
|
|
|
- SELECT car_no, avg_weight, up_weight, tare_type,
|
|
|
- ROW_NUMBER() OVER (PARTITION BY car_no ORDER BY create_time DESC) AS rn
|
|
|
- FROM meter_base_his_tare_data
|
|
|
- ),
|
|
|
- -- 2. 洁净表最新非混装记录(排除混装/混卸)
|
|
|
- latest_clean AS (
|
|
|
- SELECT car_no, tare_weight AS clean_up_weight,
|
|
|
- ROW_NUMBER() OVER (PARTITION BY car_no ORDER BY net_time DESC) AS rn
|
|
|
- FROM meter_work_car_actual
|
|
|
- WHERE PREDICTION_TYPE = 1 -- 请根据实际业务调整条件
|
|
|
- ),
|
|
|
- -- 3. 主关联 + 计算有效皮重及偏差
|
|
|
- base_with_effective AS (
|
|
|
SELECT
|
|
|
- A.base_spot_name,
|
|
|
- A.car_no,
|
|
|
- A.meter_weight,
|
|
|
- A.MATTER_NAME,
|
|
|
- A.FORWARDING_UNIT_NAME,
|
|
|
- A.RECEIVING_UINT_NAME,
|
|
|
- A.value_flag,
|
|
|
- A.create_man_no,
|
|
|
- A.create_man_name,
|
|
|
- A.create_time,
|
|
|
- A.update_man_no,
|
|
|
- A.update_man_name,
|
|
|
- A.update_time,
|
|
|
- A.meter_mode,
|
|
|
- A.meter_type_Name,
|
|
|
- A.note,
|
|
|
- B.avg_weight,
|
|
|
- B.up_weight,
|
|
|
- B.tare_type,
|
|
|
- C.clean_up_weight,
|
|
|
- -- 有效皮重上限:当 tare_type 为 '3' 或 '4' 时取洁净皮重,否则取历史皮重
|
|
|
- CASE
|
|
|
- WHEN B.tare_type IN ('3', '4') THEN C.clean_up_weight
|
|
|
- ELSE B.up_weight
|
|
|
- END AS effectiveUpWeight,
|
|
|
- -- 偏差绝对值(用于报警判断和过滤)
|
|
|
- ABS(ROUND((A.meter_weight -
|
|
|
- CASE
|
|
|
- WHEN B.tare_type IN ('3', '4') THEN C.clean_up_weight
|
|
|
- ELSE B.up_weight
|
|
|
- END) / 1000, 2)) AS deviation
|
|
|
- FROM meter_work_car_actual_first A
|
|
|
- LEFT JOIN latest_tare B ON A.car_no = B.car_no AND B.rn = 1
|
|
|
- LEFT JOIN latest_clean C ON A.car_no = C.car_no AND C.rn = 1
|
|
|
- WHERE A.weight_type = '1'
|
|
|
- )
|
|
|
- -- 4. 最终查询:投影 + 过滤 + 排序
|
|
|
- SELECT
|
|
|
- base_spot_name AS baseSpotName,
|
|
|
- car_no AS carNo,
|
|
|
- -- 报警类型:根据 deviation 和阈值动态生成
|
|
|
+ A.base_spot_name AS baseSpotName,
|
|
|
+ A.car_no AS carNo,
|
|
|
+ -- 报警类型
|
|
|
CASE
|
|
|
- WHEN effectiveUpWeight IS NOT NULL
|
|
|
- AND deviation > (SELECT TO_NUMBER(BASE_NAME) / 1000 FROM com_base_info WHERE BASE_CODE = '001067001')
|
|
|
+ WHEN C.clean_up_weight IS NOT NULL
|
|
|
+ AND ABS(ROUND((A.meter_weight - C.clean_up_weight) / 1000, 2)) >
|
|
|
+ (SELECT TO_NUMBER(BASE_NAME) / 1000 FROM com_base_info WHERE BASE_CODE = '001067001')
|
|
|
THEN '皮重超过偏差'
|
|
|
- WHEN effectiveUpWeight IS NOT NULL THEN '正常皮重'
|
|
|
+ WHEN C.clean_up_weight IS NOT NULL THEN '正常皮重'
|
|
|
ELSE NULL
|
|
|
END AS alarmType,
|
|
|
- ROUND(meter_weight / 1000, 2) AS meterWeight,
|
|
|
- ROUND(avg_weight / 1000, 2) AS avgWeight,
|
|
|
- ROUND(up_weight / 1000, 2) AS upWeight,
|
|
|
- tare_type AS tareType,
|
|
|
- ROUND((meter_weight - effectiveUpWeight) / 1000, 2) AS absoluteError,
|
|
|
- ROUND((meter_weight / (meter_weight + effectiveUpWeight)) * 100, 2) AS relativeError,
|
|
|
+ ROUND(A.meter_weight / 1000, 2) AS meterWeight,
|
|
|
+ null AS avgWeight,
|
|
|
+ ROUND(C.clean_up_weight / 1000, 2) AS upWeight,
|
|
|
+ ROUND((A.meter_weight - C.clean_up_weight) / 1000, 2) AS absoluteError,
|
|
|
+ ROUND((A.meter_weight / (A.meter_weight + C.clean_up_weight)) * 100, 2) AS relativeError,
|
|
|
CASE
|
|
|
- WHEN value_flag = '0' THEN '作废'
|
|
|
- WHEN value_flag = '1' THEN '有效'
|
|
|
- WHEN value_flag = '2' THEN '结净'
|
|
|
+ WHEN A.value_flag = '0' THEN '作废'
|
|
|
+ WHEN A.value_flag = '1' THEN '有效'
|
|
|
+ WHEN A.value_flag = '2' THEN '结净'
|
|
|
ELSE NULL
|
|
|
END AS valueFlag,
|
|
|
- create_man_no AS createManNo,
|
|
|
- create_man_name AS createManName,
|
|
|
- create_time AS createTime,
|
|
|
- update_man_no AS updateManNo,
|
|
|
- update_man_name AS updateManName,
|
|
|
- update_time AS updateTime,
|
|
|
- RECEIVING_UINT_NAME AS receivingUintName,
|
|
|
- FORWARDING_UNIT_NAME AS forwardingUnitName,
|
|
|
- MATTER_NAME AS matterName,
|
|
|
+ A.create_man_no AS createManNo,
|
|
|
+ A.create_man_name AS createManName,
|
|
|
+ A.create_time AS createTime,
|
|
|
+ A.update_man_no AS updateManNo,
|
|
|
+ A.update_man_name AS updateManName,
|
|
|
+ A.update_time AS updateTime,
|
|
|
+ A.RECEIVING_UINT_NAME AS receivingUintName,
|
|
|
+ A.FORWARDING_UNIT_NAME AS forwardingUnitName,
|
|
|
+ A.MATTER_NAME AS matterName,
|
|
|
CASE
|
|
|
- WHEN meter_mode = '1' THEN '远程计量'
|
|
|
- WHEN meter_mode = '2' THEN '智能计量'
|
|
|
- WHEN meter_mode = '3' THEN '手工计量'
|
|
|
+ WHEN A.meter_mode = '1' THEN '远程计量'
|
|
|
+ WHEN A.meter_mode = '2' THEN '智能计量'
|
|
|
+ WHEN A.meter_mode = '3' THEN '手工计量'
|
|
|
ELSE NULL
|
|
|
END AS meterMode,
|
|
|
CASE
|
|
|
- WHEN meter_type_Name = 'SendToOutTms' THEN '外发'
|
|
|
- WHEN meter_type_Name = 'GM2GM' THEN '厂内转储'
|
|
|
- WHEN meter_type_Name = 'PO2GM' THEN '外进'
|
|
|
+ WHEN A.meter_type_Name = 'SendToOutTms' THEN '外发'
|
|
|
+ WHEN A.meter_type_Name = 'GM2GM' THEN '厂内转储'
|
|
|
+ WHEN A.meter_type_Name = 'PO2GM' THEN '外进'
|
|
|
ELSE NULL
|
|
|
END AS meterTypeName,
|
|
|
- note,
|
|
|
- effectiveUpWeight,
|
|
|
- clean_up_weight AS cleanUpWeight
|
|
|
- FROM base_with_effective
|
|
|
- WHERE 1=1
|
|
|
+ A.note,
|
|
|
+ C.clean_up_weight AS effectiveUpWeight,
|
|
|
+ C.clean_up_weight AS cleanUpWeight
|
|
|
+ FROM meter_work_car_actual_first A
|
|
|
+ OUTER APPLY (
|
|
|
+ SELECT tare_weight AS clean_up_weight
|
|
|
+ FROM meter_work_car_actual C
|
|
|
+ WHERE C.car_no = A.car_no
|
|
|
+ AND C.create_time < A.create_time
|
|
|
+ AND C.VALUE_FLAG != 0
|
|
|
+ AND C.prediction_Combination is null -- 非混装/混卸
|
|
|
+ ORDER BY C.create_time DESC
|
|
|
+ FETCH FIRST 1 ROW ONLY
|
|
|
+ ) C
|
|
|
+ WHERE A.weight_type = '1'
|
|
|
<!-- 时间范围 -->
|
|
|
<if test="startTime != null and endTime != null and startTime != '' and endTime != ''">
|
|
|
AND create_time >= TO_DATE(#{startTime}, 'yyyy-MM-dd HH24:mi:ss')
|
|
|
@@ -556,6 +512,7 @@
|
|
|
AND deviation > (SELECT TO_NUMBER(BASE_NAME) / 1000 FROM com_base_info WHERE BASE_CODE = '001067001')
|
|
|
</if>
|
|
|
<if test="alarmType == 1">
|
|
|
+ AND effectiveUpWeight IS NOT NULL
|
|
|
AND deviation <= (SELECT TO_NUMBER(BASE_NAME) / 1000 FROM com_base_info WHERE BASE_CODE = '001067001')
|
|
|
</if>
|
|
|
</if>
|
|
|
@@ -563,14 +520,6 @@
|
|
|
<if test="carNo != null and carNo != ''">
|
|
|
AND car_no LIKE '%${carNo}%'
|
|
|
</if>
|
|
|
- <!-- 创建人 -->
|
|
|
- <if test="createManNo != null and createManNo != ''">
|
|
|
- AND create_man_no = #{createManNo}
|
|
|
- </if>
|
|
|
- <!-- 更新人 -->
|
|
|
- <if test="updateManNo != null and updateManNo != ''">
|
|
|
- AND update_man_no = #{updateManNo}
|
|
|
- </if>
|
|
|
<!-- 计量模式 -->
|
|
|
<if test="meterMode != null and meterMode != ''">
|
|
|
AND meter_mode = #{meterMode}
|