2038 lines
99 KiB
XML
2038 lines
99 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||
<mapper namespace="com.klp.ems.mapper.WmsEnergyCoilDailyMapper">
|
||
|
||
<resultMap id="WmsEnergyCoilDailyResult" type="com.klp.ems.domain.WmsEnergyCoilDaily">
|
||
<result property="energyCostId" column="energy_cost_id"/>
|
||
<result property="taskId" column="task_id"/>
|
||
<result property="calcDate" column="calc_date"/>
|
||
<result property="coilId" column="coil_id"/>
|
||
<result property="enterCoilNo" column="enter_coil_no"/>
|
||
<result property="currentCoilNo" column="current_coil_no"/>
|
||
<result property="warehouseId" column="warehouse_id"/>
|
||
<result property="actualWarehouseId" column="actual_warehouse_id"/>
|
||
<result property="energyTypeId" column="energy_type_id"/>
|
||
<result property="meterId" column="meter_id"/>
|
||
<result property="consumptionQty" column="consumption_qty"/>
|
||
<result property="costAmount" column="cost_amount"/>
|
||
<result property="allocationBasisWeight" column="allocation_basis_weight"/>
|
||
<result property="allocationBasisDays" column="allocation_basis_days"/>
|
||
<result property="allocationFactor" column="allocation_factor"/>
|
||
<result property="remark" column="remark"/>
|
||
</resultMap>
|
||
|
||
<delete id="deleteByTaskId" parameterType="long">
|
||
DELETE FROM wms_energy_coil_daily WHERE task_id = #{taskId}
|
||
</delete>
|
||
|
||
<select id="selectListByTask" resultMap="WmsEnergyCoilDailyResult" parameterType="long">
|
||
SELECT * FROM wms_energy_coil_daily WHERE task_id = #{taskId}
|
||
</select>
|
||
|
||
<!-- 入场卷号维度能源+囤积成本汇总(分页) -->
|
||
<select id="selectCoilTotalMerged" parameterType="map"
|
||
resultType="com.klp.ems.domain.vo.CoilTotalCostVo">
|
||
SELECT
|
||
aid.enter_coil_no AS enterCoilNo,
|
||
e.current_coil_no AS currentCoilNo,
|
||
e.coil_count AS coilCount,
|
||
e.total_duration AS totalDuration,
|
||
e.total_consumption AS totalConsumption,
|
||
e.energy_cost AS totalEnergyCost,
|
||
IFNULL(s.stock_cost, 0) AS stockCost,
|
||
IFNULL(x.aux_cost, 0) AS auxCost,
|
||
IFNULL(x.spare_cost, 0) AS spareCost,
|
||
IFNULL(s.total_net_weight, 0) AS totalNetWeight,
|
||
IFNULL(s.total_gross_weight, 0) AS totalGrossWeight,
|
||
(IFNULL(e.energy_cost, 0) + IFNULL(s.stock_cost, 0) + IFNULL(x.aux_cost, 0) + IFNULL(x.spare_cost, 0)) AS totalCost
|
||
FROM (
|
||
SELECT enter_coil_no FROM (
|
||
SELECT DISTINCT c.enter_coil_no
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
WHERE pa.action_status IN (0,1,2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
) eids
|
||
UNION
|
||
SELECT DISTINCT m.enter_coil_no
|
||
FROM wms_material_coil m
|
||
WHERE m.data_type IN (0,1)
|
||
AND m.del_flag = 0
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND m.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND m.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND m.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND m.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
) aid
|
||
LEFT JOIN (
|
||
SELECT
|
||
c.enter_coil_no,
|
||
MIN(pa.current_coil_no) AS current_coil_no,
|
||
COUNT(DISTINCT pa.coil_id) AS coil_count,
|
||
SUM(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN CAST(TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
) AS DECIMAL(20,6)) / 60.0
|
||
ELSE 0
|
||
END
|
||
) AS total_duration,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS total_consumption,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS energy_cost
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
WHERE pa.action_status IN (0, 1, 2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
GROUP BY c.enter_coil_no
|
||
) e ON aid.enter_coil_no = e.enter_coil_no
|
||
LEFT JOIN (
|
||
SELECT
|
||
m.enter_coil_no,
|
||
SUM(CASE
|
||
WHEN cs.unit_cost IS NULL THEN 0
|
||
ELSE (
|
||
CASE
|
||
WHEN IFNULL(m.net_weight, 0) = 0 AND IFNULL(m.gross_weight, 0) > 0 THEN m.gross_weight
|
||
ELSE IFNULL(m.net_weight, 0)
|
||
END
|
||
) * cs.unit_cost
|
||
END) AS stock_cost,
|
||
SUM(IFNULL(m.net_weight, 0)) AS total_net_weight,
|
||
SUM(IFNULL(m.gross_weight, 0)) AS total_gross_weight
|
||
FROM wms_material_coil m
|
||
LEFT JOIN wms_cost_standard_config cs
|
||
ON cs.status = 1
|
||
AND DATE(m.create_time) >= cs.effective_date
|
||
AND (cs.expire_date IS NULL OR DATE(m.create_time) <![CDATA[<=]]> cs.expire_date)
|
||
WHERE m.data_type IN (0,1)
|
||
AND m.del_flag = 0
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND m.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND m.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND m.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND m.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
GROUP BY m.enter_coil_no
|
||
) s ON aid.enter_coil_no = s.enter_coil_no
|
||
LEFT JOIN (
|
||
SELECT
|
||
dm.enter_coil_no,
|
||
SUM(
|
||
CASE
|
||
WHEN dm.total_minutes > 0
|
||
THEN IFNULL(a.aux_amount, 0) * (dm.coil_minutes / dm.total_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS aux_cost,
|
||
SUM(
|
||
CASE
|
||
WHEN dm.total_minutes > 0
|
||
THEN IFNULL(p.spare_amount, 0) * (dm.coil_minutes / dm.total_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS spare_cost
|
||
FROM (
|
||
SELECT
|
||
DATE(pa.create_time) AS day_key,
|
||
c.enter_coil_no,
|
||
SUM(
|
||
CASE
|
||
WHEN pa.create_time < COALESCE(pa.complete_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE, pa.create_time, COALESCE(pa.complete_time, NOW()))
|
||
ELSE 0
|
||
END
|
||
) AS coil_minutes,
|
||
td.total_minutes
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
DATE(pa_all.create_time) AS day_key,
|
||
SUM(
|
||
CASE
|
||
WHEN pa_all.create_time < COALESCE(pa_all.complete_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE, pa_all.create_time, COALESCE(pa_all.complete_time, NOW()))
|
||
ELSE 0
|
||
END
|
||
) AS total_minutes
|
||
FROM wms_coil_pending_action pa_all
|
||
WHERE pa_all.action_status IN (0,1,2)
|
||
AND pa_all.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
AND pa_all.create_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
GROUP BY DATE(pa_all.create_time)
|
||
) td ON td.day_key = DATE(pa.create_time)
|
||
WHERE pa.action_status IN (0,1,2)
|
||
AND pa.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
AND pa.create_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
GROUP BY DATE(pa.create_time), c.enter_coil_no, td.total_minutes
|
||
) dm
|
||
LEFT JOIN (
|
||
SELECT
|
||
DATE(change_time) AS day_key,
|
||
SUM(IFNULL(amount, 0)) AS aux_amount
|
||
FROM eqp_auxiliary_material_change
|
||
WHERE del_flag = '0'
|
||
AND change_type = '减少'
|
||
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
AND change_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
GROUP BY DATE(change_time)
|
||
) a ON dm.day_key = a.day_key
|
||
LEFT JOIN (
|
||
SELECT
|
||
DATE(change_time) AS day_key,
|
||
SUM(IFNULL(amount, 0)) AS spare_amount
|
||
FROM eqp_spare_parts_change
|
||
WHERE del_flag = '0'
|
||
AND change_type = '减少'
|
||
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
AND change_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
GROUP BY DATE(change_time)
|
||
) p ON dm.day_key = p.day_key
|
||
GROUP BY dm.enter_coil_no
|
||
) x ON aid.enter_coil_no = x.enter_coil_no
|
||
ORDER BY totalCost DESC
|
||
LIMIT #{offset}, #{pageSize}
|
||
</select>
|
||
|
||
<!-- 入场卷号维度能源+囤积成本汇总总数 -->
|
||
<select id="selectCoilTotalMergedCount" parameterType="com.klp.ems.domain.bo.CoilTotalCostBo"
|
||
resultType="long">
|
||
SELECT COUNT(1) FROM (
|
||
SELECT DISTINCT c.enter_coil_no
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
WHERE pa.action_status IN (0,1,2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
UNION
|
||
SELECT DISTINCT m.enter_coil_no
|
||
FROM wms_material_coil m
|
||
WHERE m.data_type IN (0,1)
|
||
AND m.del_flag = 0
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND m.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND m.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND m.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND m.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
) tmp
|
||
</select>
|
||
|
||
<!-- 入场卷号维度能源+囤积成本汇总(导出,全部) -->
|
||
<select id="selectCoilTotalMergedExport" parameterType="com.klp.ems.domain.bo.CoilTotalCostBo"
|
||
resultType="com.klp.ems.domain.vo.CoilTotalCostVo">
|
||
SELECT
|
||
aid.enter_coil_no AS enterCoilNo,
|
||
e.current_coil_no AS currentCoilNo,
|
||
e.coil_count AS coilCount,
|
||
e.total_duration AS totalDuration,
|
||
e.total_consumption AS totalConsumption,
|
||
e.energy_cost AS totalEnergyCost,
|
||
IFNULL(s.stock_cost, 0) AS stockCost,
|
||
IFNULL(x.aux_cost, 0) AS auxCost,
|
||
IFNULL(x.spare_cost, 0) AS spareCost,
|
||
IFNULL(s.total_net_weight, 0) AS totalNetWeight,
|
||
IFNULL(s.total_gross_weight, 0) AS totalGrossWeight,
|
||
(IFNULL(e.energy_cost, 0) + IFNULL(s.stock_cost, 0) + IFNULL(x.aux_cost, 0) + IFNULL(x.spare_cost, 0)) AS totalCost
|
||
FROM (
|
||
SELECT enter_coil_no FROM (
|
||
SELECT DISTINCT c.enter_coil_no
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
WHERE pa.action_status IN (0,1,2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
) eids
|
||
UNION
|
||
SELECT DISTINCT m.enter_coil_no
|
||
FROM wms_material_coil m
|
||
WHERE m.data_type IN (0,1)
|
||
AND m.del_flag = 0
|
||
) aid
|
||
LEFT JOIN (
|
||
SELECT
|
||
c.enter_coil_no,
|
||
MIN(pa.current_coil_no) AS current_coil_no,
|
||
COUNT(DISTINCT pa.coil_id) AS coil_count,
|
||
SUM(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN CAST(TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
) AS DECIMAL(20,6)) / 60.0
|
||
ELSE 0
|
||
END
|
||
) AS total_duration,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS total_consumption,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS energy_cost
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
WHERE pa.action_status IN (0, 1, 2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
GROUP BY c.enter_coil_no
|
||
) e ON aid.enter_coil_no = e.enter_coil_no
|
||
LEFT JOIN (
|
||
SELECT
|
||
m.enter_coil_no,
|
||
SUM(CASE
|
||
WHEN cs.unit_cost IS NULL THEN 0
|
||
ELSE (
|
||
CASE
|
||
WHEN IFNULL(m.net_weight, 0) = 0 AND IFNULL(m.gross_weight, 0) > 0 THEN m.gross_weight
|
||
ELSE IFNULL(m.net_weight, 0)
|
||
END
|
||
) * cs.unit_cost
|
||
END) AS stock_cost,
|
||
SUM(IFNULL(m.net_weight, 0)) AS total_net_weight,
|
||
SUM(IFNULL(m.gross_weight, 0)) AS total_gross_weight
|
||
FROM wms_material_coil m
|
||
LEFT JOIN wms_cost_standard_config cs
|
||
ON cs.status = 1
|
||
AND DATE(m.create_time) >= cs.effective_date
|
||
AND (cs.expire_date IS NULL OR DATE(m.create_time) <![CDATA[<=]]> cs.expire_date)
|
||
WHERE m.data_type IN (0,1)
|
||
AND m.del_flag = 0
|
||
GROUP BY m.enter_coil_no
|
||
) s ON aid.enter_coil_no = s.enter_coil_no
|
||
LEFT JOIN (
|
||
SELECT
|
||
dm.enter_coil_no,
|
||
SUM(
|
||
CASE
|
||
WHEN dm.total_minutes > 0
|
||
THEN IFNULL(a.aux_amount, 0) * (dm.coil_minutes / dm.total_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS aux_cost,
|
||
SUM(
|
||
CASE
|
||
WHEN dm.total_minutes > 0
|
||
THEN IFNULL(p.spare_amount, 0) * (dm.coil_minutes / dm.total_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS spare_cost
|
||
FROM (
|
||
SELECT
|
||
DATE(pa.create_time) AS day_key,
|
||
c.enter_coil_no,
|
||
SUM(
|
||
CASE
|
||
WHEN pa.create_time < COALESCE(pa.complete_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE, pa.create_time, COALESCE(pa.complete_time, NOW()))
|
||
ELSE 0
|
||
END
|
||
) AS coil_minutes,
|
||
td.total_minutes
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
DATE(pa_all.create_time) AS day_key,
|
||
SUM(
|
||
CASE
|
||
WHEN pa_all.create_time < COALESCE(pa_all.complete_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE, pa_all.create_time, COALESCE(pa_all.complete_time, NOW()))
|
||
ELSE 0
|
||
END
|
||
) AS total_minutes
|
||
FROM wms_coil_pending_action pa_all
|
||
WHERE pa_all.action_status IN (0,1,2)
|
||
AND pa_all.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
AND pa_all.create_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
GROUP BY DATE(pa_all.create_time)
|
||
) td ON td.day_key = DATE(pa.create_time)
|
||
WHERE pa.action_status IN (0,1,2)
|
||
AND pa.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
AND pa.create_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
GROUP BY DATE(pa.create_time), c.enter_coil_no, td.total_minutes
|
||
) dm
|
||
LEFT JOIN (
|
||
SELECT
|
||
DATE(change_time) AS day_key,
|
||
SUM(IFNULL(amount, 0)) AS aux_amount
|
||
FROM eqp_auxiliary_material_change
|
||
WHERE del_flag = '0'
|
||
AND change_type = '减少'
|
||
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
AND change_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
GROUP BY DATE(change_time)
|
||
) a ON dm.day_key = a.day_key
|
||
LEFT JOIN (
|
||
SELECT
|
||
DATE(change_time) AS day_key,
|
||
SUM(IFNULL(amount, 0)) AS spare_amount
|
||
FROM eqp_spare_parts_change
|
||
WHERE del_flag = '0'
|
||
AND change_type = '减少'
|
||
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
AND change_time <= CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
GROUP BY DATE(change_time)
|
||
) p ON dm.day_key = p.day_key
|
||
GROUP BY dm.enter_coil_no
|
||
) x ON aid.enter_coil_no = x.enter_coil_no
|
||
ORDER BY totalCost DESC
|
||
</select>
|
||
|
||
<!-- 入场卷号维度能源费用汇总 -->
|
||
<select id="selectCoilTotalEnergySummary" parameterType="com.klp.ems.domain.bo.CoilTotalCostBo"
|
||
resultType="com.klp.ems.domain.vo.CoilTotalCostVo">
|
||
SELECT
|
||
c.enter_coil_no AS enterCoilNo,
|
||
COUNT(DISTINCT pa.coil_id) AS coilCount,
|
||
SUM(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN CAST(TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
) AS DECIMAL(20,6)) / 60.0
|
||
ELSE 0
|
||
END
|
||
) AS totalDuration,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS totalConsumption,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS totalEnergyCost
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
LEFT JOIN wms_warehouse w ON pa.warehouse_id = w.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
WHERE pa.action_status IN (0, 1, 2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
GROUP BY c.enter_coil_no
|
||
ORDER BY totalEnergyCost DESC
|
||
LIMIT 1
|
||
</select>
|
||
|
||
<!-- 入场卷号维度能源费用明细(分页) -->
|
||
<select id="selectCoilTotalEnergyDetail" parameterType="com.klp.ems.domain.bo.CoilTotalCostBo"
|
||
resultType="com.klp.ems.domain.vo.CoilTotalCostDetailVo">
|
||
SELECT
|
||
c.enter_coil_no AS enterCoilNo,
|
||
pa.coil_id AS coilId,
|
||
pa.current_coil_no AS currentCoilNo,
|
||
w.warehouse_name AS warehouseName,
|
||
pa.warehouse_id AS warehouseId,
|
||
pa.action_status AS actionStatus,
|
||
pa.create_time AS startTime,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END AS endTime,
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN CAST(TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
) AS DECIMAL(20,6)) / 60.0
|
||
ELSE 0
|
||
END AS duration,
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END AS consumption,
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END AS totalCost
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
LEFT JOIN wms_warehouse w ON pa.warehouse_id = w.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
WHERE pa.action_status IN (0, 1, 2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
ORDER BY pa.create_time DESC
|
||
</select>
|
||
<sql id="ReportWhere">
|
||
<where>
|
||
<if test="bo != null and bo.taskId != null">
|
||
AND c.task_id = #{bo.taskId}
|
||
</if>
|
||
<if test="bo != null and bo.energyTypeId != null">
|
||
AND c.energy_type_id = #{bo.energyTypeId}
|
||
</if>
|
||
<if test="bo != null and bo.meterId != null">
|
||
AND c.meter_id = #{bo.meterId}
|
||
</if>
|
||
<if test="bo != null and bo.warehouseId != null">
|
||
AND c.warehouse_id = #{bo.warehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.actualWarehouseId != null">
|
||
AND c.actual_warehouse_id = #{bo.actualWarehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null">
|
||
AND c.calc_date <![CDATA[>=]]> #{bo.startDate}
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null">
|
||
AND c.calc_date <![CDATA[<=]]> #{bo.endDate}
|
||
</if>
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND c.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
</where>
|
||
</sql>
|
||
|
||
<select id="summaryByEnergyType" parameterType="com.klp.ems.domain.bo.EnergyCostReportBo"
|
||
resultType="com.klp.ems.domain.vo.EnergyCostSummaryVo">
|
||
SELECT
|
||
CAST(c.energy_type_id AS CHAR) AS groupKey,
|
||
COALESCE(et.name, CONCAT('能源-', c.energy_type_id)) AS groupName,
|
||
c.energy_type_id,
|
||
SUM(c.consumption_qty) AS totalConsumption,
|
||
SUM(c.cost_amount) AS totalCost,
|
||
COUNT(DISTINCT c.coil_id) AS coilCount
|
||
FROM wms_energy_coil_daily c
|
||
LEFT JOIN ems_energy_type et ON c.energy_type_id = et.energy_type_id
|
||
<include refid="ReportWhere"/>
|
||
GROUP BY c.energy_type_id
|
||
ORDER BY totalCost DESC
|
||
</select>
|
||
|
||
<select id="summaryByWarehouse" parameterType="com.klp.ems.domain.bo.EnergyCostReportBo"
|
||
resultType="com.klp.ems.domain.vo.EnergyCostSummaryVo">
|
||
SELECT
|
||
CAST(c.warehouse_id AS CHAR) AS groupKey,
|
||
COALESCE(wh.warehouse_name, CONCAT('库区-', c.warehouse_id)) AS groupName,
|
||
c.warehouse_id,
|
||
c.actual_warehouse_id,
|
||
SUM(c.consumption_qty) AS totalConsumption,
|
||
SUM(c.cost_amount) AS totalCost,
|
||
COUNT(DISTINCT c.coil_id) AS coilCount
|
||
FROM wms_energy_coil_daily c
|
||
LEFT JOIN wms_warehouse wh ON c.warehouse_id = wh.warehouse_id
|
||
<include refid="ReportWhere"/>
|
||
GROUP BY c.warehouse_id, c.actual_warehouse_id
|
||
ORDER BY totalCost DESC
|
||
</select>
|
||
|
||
<select id="summaryByMeter" parameterType="com.klp.ems.domain.bo.EnergyCostReportBo"
|
||
resultType="com.klp.ems.domain.vo.EnergyCostSummaryVo">
|
||
SELECT
|
||
CAST(c.meter_id AS CHAR) AS groupKey,
|
||
COALESCE(m.meter_code, CONCAT('计量表-', c.meter_id)) AS groupName,
|
||
c.meter_id,
|
||
c.energy_type_id,
|
||
SUM(c.consumption_qty) AS totalConsumption,
|
||
SUM(c.cost_amount) AS totalCost,
|
||
COUNT(DISTINCT c.coil_id) AS coilCount
|
||
FROM wms_energy_coil_daily c
|
||
LEFT JOIN ems_meter m ON c.meter_id = m.meter_id
|
||
<include refid="ReportWhere"/>
|
||
GROUP BY c.meter_id, c.energy_type_id
|
||
ORDER BY totalCost DESC
|
||
</select>
|
||
|
||
<select id="summaryByTask" parameterType="com.klp.ems.domain.bo.EnergyCostReportBo"
|
||
resultType="com.klp.ems.domain.vo.EnergyCostSummaryVo">
|
||
SELECT
|
||
CAST(c.task_id AS CHAR) AS groupKey,
|
||
CONCAT('任务-', c.task_id) AS groupName,
|
||
c.task_id,
|
||
c.energy_type_id,
|
||
SUM(c.consumption_qty) AS totalConsumption,
|
||
SUM(c.cost_amount) AS totalCost,
|
||
COUNT(DISTINCT c.coil_id) AS coilCount
|
||
FROM wms_energy_coil_daily c
|
||
<include refid="ReportWhere"/>
|
||
GROUP BY c.task_id, c.energy_type_id
|
||
ORDER BY c.task_id DESC
|
||
</select>
|
||
|
||
<select id="selectEnergyOverview" parameterType="com.klp.ems.domain.bo.EnergyCostReportBo"
|
||
resultType="java.util.Map">
|
||
SELECT
|
||
COUNT(DISTINCT c.coil_id) AS coilCount,
|
||
SUM(c.consumption_qty) AS totalConsumption,
|
||
SUM(c.cost_amount) AS totalCost
|
||
FROM wms_energy_coil_daily c
|
||
<include refid="ReportWhere"/>
|
||
</select>
|
||
|
||
<!-- 仓库生产统计(action_status 0,1) -->
|
||
<select id="selectWarehouseProductionStats" parameterType="com.klp.ems.domain.bo.WarehouseProductionBo"
|
||
resultType="com.klp.ems.domain.vo.WarehouseProductionStatVo">
|
||
SELECT
|
||
COUNT(DISTINCT pa.coil_id) AS coilCount,
|
||
SUM(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END
|
||
) / 60.0 AS totalDuration,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS totalConsumption,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS totalCost,
|
||
CASE
|
||
WHEN COUNT(DISTINCT pa.coil_id) > 0
|
||
THEN SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) / COUNT(DISTINCT pa.coil_id)
|
||
ELSE 0
|
||
END AS unitCost
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil mc ON pa.coil_id = mc.coil_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.logicWarehouseId != null">
|
||
AND pa_pd.warehouse_id = #{bo.logicWarehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa_pd.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa_pd.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
WHERE pa.action_status IN (0, 1)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.logicWarehouseId != null">
|
||
AND pa.warehouse_id = #{bo.logicWarehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
</select>
|
||
|
||
<!-- 仓库生产明细(action_status 0,1,2) -->
|
||
<select id="selectWarehouseProductionDetail" parameterType="com.klp.ems.domain.bo.WarehouseProductionBo"
|
||
resultType="com.klp.ems.domain.vo.WarehouseProductionCoilVo">
|
||
SELECT
|
||
pa.coil_id AS coilId,
|
||
COALESCE(pa.current_coil_no, mc.enter_coil_no) AS coilCode,
|
||
pa.create_time AS startTime,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END AS endTime,
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
THEN CAST(TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
) AS DECIMAL(20,6)) / 60.0
|
||
ELSE 0
|
||
END AS duration,
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END AS totalCost
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil mc ON pa.coil_id = mc.coil_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.logicWarehouseId != null">
|
||
AND pa_pd.warehouse_id = #{bo.logicWarehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa_pd.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa_pd.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
WHERE pa.action_status IN (0, 1, 2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.logicWarehouseId != null">
|
||
AND pa.warehouse_id = #{bo.logicWarehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
ORDER BY pa.create_time DESC
|
||
</select>
|
||
|
||
<!-- 仓库生产能源分解(action_status 0,1) -->
|
||
<select id="selectWarehouseProductionEnergyBreakdown" parameterType="com.klp.ems.domain.bo.WarehouseProductionBo"
|
||
resultType="com.klp.ems.domain.vo.EnergyBreakdownItemVo">
|
||
SELECT
|
||
wde.energy_type_id AS energyTypeId,
|
||
wde.energy_type_name AS energyTypeName,
|
||
wde.energy_unit AS consumptionUnit,
|
||
SUM(
|
||
CASE
|
||
WHEN wde.total_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wde.total_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS consumption,
|
||
SUM(
|
||
CASE
|
||
WHEN wde.total_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wde.total_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS cost
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCostByEnergy"/>
|
||
) wde ON pa.warehouse_id = wde.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
<if test="bo != null and bo.logicWarehouseId != null">
|
||
AND pa_pd.warehouse_id = #{bo.logicWarehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa_pd.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa_pd.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
WHERE pa.action_status IN (0, 1)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
AND wde.energy_type_id IS NOT NULL
|
||
<if test="bo != null and bo.logicWarehouseId != null">
|
||
AND pa.warehouse_id = #{bo.logicWarehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
|
||
AND pa.create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
|
||
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
|
||
</if>
|
||
GROUP BY wde.energy_type_id, wde.energy_type_name, wde.energy_unit
|
||
ORDER BY cost DESC
|
||
</select>
|
||
|
||
<!-- 单卷详情(含分摊能耗、成本) -->
|
||
<select id="selectWarehouseProductionCoilDetail" parameterType="long"
|
||
resultType="com.klp.ems.domain.vo.WarehouseProductionCoilVo">
|
||
SELECT
|
||
pa.coil_id AS coilId,
|
||
COALESCE(pa.current_coil_no, mc.enter_coil_no) AS coilCode,
|
||
mc.enter_coil_no AS enterCoilNo,
|
||
pa.current_coil_no AS currentCoilNo,
|
||
pa.warehouse_id AS warehouseId,
|
||
pa.action_status AS actionStatus,
|
||
pa.create_time AS startTime,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END AS endTime,
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN CAST(TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
) AS DECIMAL(20,6)) / 60.0
|
||
ELSE 0
|
||
END AS duration,
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END AS consumption,
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time, NOW())
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END AS totalCost
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil mc ON pa.coil_id = mc.coil_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time, NOW())
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
WHERE pa.coil_id = #{coilId}
|
||
LIMIT 1
|
||
</select>
|
||
|
||
<!-- 查询待操作钢卷的能源成本(按钢卷维度聚合,综合所有能源类型) -->
|
||
<!-- 查询待操作钢卷的能源成本(按时间段分摊) -->
|
||
<sql id="WarehouseMeterTime">
|
||
SELECT
|
||
base.warehouse_id,
|
||
(
|
||
SELECT ec_inner.start_time
|
||
FROM wms_energy_area_link eal_inner
|
||
JOIN ems_meter m_inner ON eal_inner.meter_id = m_inner.meter_id
|
||
JOIN ems_energy_consumption ec_inner ON m_inner.meter_id = ec_inner.meter_id
|
||
WHERE eal_inner.warehouse_id = base.warehouse_id
|
||
AND ec_inner.end_time = base.latest_end_time
|
||
ORDER BY ec_inner.start_time DESC
|
||
LIMIT 1
|
||
) AS warehouse_start_time,
|
||
base.latest_end_time AS warehouse_end_time
|
||
FROM (
|
||
SELECT
|
||
eal.warehouse_id,
|
||
MAX(ec.end_time) AS latest_end_time
|
||
FROM wms_energy_area_link eal
|
||
JOIN ems_meter m ON eal.meter_id = m.meter_id
|
||
JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id
|
||
WHERE eal.warehouse_id IS NOT NULL
|
||
AND ec.end_time IS NOT NULL
|
||
GROUP BY eal.warehouse_id
|
||
) base
|
||
</sql>
|
||
|
||
<!-- 库区分摊时间范围内的总消耗、总成本(按能源类型拆分,统一费率匹配) -->
|
||
<sql id="WarehouseCostByEnergy">
|
||
SELECT
|
||
wmt.warehouse_id,
|
||
et.energy_type_id,
|
||
et.name AS energy_type_name,
|
||
et.unit AS energy_unit,
|
||
SUM(COALESCE(ec.consumption, 0)) AS total_consumption,
|
||
SUM(
|
||
COALESCE(ec.consumption, 0) *
|
||
COALESCE(
|
||
CASE
|
||
WHEN er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 THEN
|
||
COALESCE(tpl.rate, er.rate, 0)
|
||
WHEN er.use_peak_valley = 1 THEN
|
||
COALESCE(rtpl.rate, er.rate, 0)
|
||
WHEN er.use_tiered_pricing = 1 THEN
|
||
COALESCE(rt.rate, er.rate, 0)
|
||
ELSE COALESCE(er.rate, 0)
|
||
END,
|
||
0
|
||
)
|
||
) AS total_cost
|
||
FROM (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt
|
||
LEFT JOIN wms_energy_area_link eal ON wmt.warehouse_id = eal.warehouse_id
|
||
LEFT JOIN ems_meter m ON eal.meter_id = m.meter_id
|
||
LEFT JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id
|
||
AND ec.start_time <![CDATA[>=]]> wmt.warehouse_start_time
|
||
AND ec.end_time <![CDATA[<=]]> wmt.warehouse_end_time
|
||
LEFT JOIN ems_energy_type et ON m.energy_type_id = et.energy_type_id
|
||
LEFT JOIN (
|
||
SELECT er1.*
|
||
FROM ems_energy_rate er1
|
||
WHERE er1.del_flag = '0'
|
||
) er ON et.energy_type_id = er.energy_type_id
|
||
AND er.effective_date <![CDATA[<=]]> COALESCE(DATE(wmt.warehouse_end_time), CURDATE())
|
||
AND (
|
||
er.expiry_date IS NULL
|
||
OR er.expiry_date <![CDATA[>=]]> COALESCE(DATE(wmt.warehouse_start_time), CURDATE())
|
||
)
|
||
LEFT JOIN ems_rate_time_period_link rtpl ON er.use_peak_valley = 1
|
||
AND er.use_tiered_pricing = 0
|
||
AND rtpl.energy_rate_id = er.energy_rate_id
|
||
AND rtpl.del_flag = '0'
|
||
LEFT JOIN ems_time_period tp ON rtpl.period_id = tp.period_id
|
||
AND tp.del_flag = '0'
|
||
AND (
|
||
(tp.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp.start_time, '%H:%i') AND STR_TO_DATE(tp.end_time, '%H:%i'))
|
||
OR (tp.cross_day = 1 AND (TIME(ec.end_time) <![CDATA[>=]]> STR_TO_DATE(tp.start_time, '%H:%i') OR TIME(ec.end_time) <![CDATA[<=]]> STR_TO_DATE(tp.end_time, '%H:%i')))
|
||
)
|
||
LEFT JOIN ems_rate_tier rt ON er.use_peak_valley = 0
|
||
AND er.use_tiered_pricing = 1
|
||
AND rt.energy_rate_id = er.energy_rate_id
|
||
AND rt.del_flag = '0'
|
||
AND (rt.min_usage IS NULL OR ec.consumption <![CDATA[>=]]> rt.min_usage)
|
||
AND (rt.max_usage IS NULL OR ec.consumption <![CDATA[<]]> rt.max_usage)
|
||
LEFT JOIN ems_rate_tier rt_combo ON er.use_peak_valley = 1
|
||
AND er.use_tiered_pricing = 1
|
||
AND rt_combo.energy_rate_id = er.energy_rate_id
|
||
AND rt_combo.del_flag = '0'
|
||
AND (rt_combo.min_usage IS NULL OR ec.consumption <![CDATA[>=]]> rt_combo.min_usage)
|
||
AND (rt_combo.max_usage IS NULL OR ec.consumption <![CDATA[<]]> rt_combo.max_usage)
|
||
LEFT JOIN ems_tier_period_link tpl ON er.use_peak_valley = 1
|
||
AND er.use_tiered_pricing = 1
|
||
AND tpl.tier_id = rt_combo.tier_id
|
||
AND tpl.del_flag = '0'
|
||
LEFT JOIN ems_time_period tp_combo ON tpl.period_id = tp_combo.period_id
|
||
AND tp_combo.del_flag = '0'
|
||
AND (
|
||
(tp_combo.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp_combo.start_time, '%H:%i') AND STR_TO_DATE(tp_combo.end_time, '%H:%i'))
|
||
OR (tp_combo.cross_day = 1 AND (TIME(ec.end_time) <![CDATA[>=]]> STR_TO_DATE(tp_combo.start_time, '%H:%i') OR TIME(ec.end_time) <![CDATA[<=]]> STR_TO_DATE(tp_combo.end_time, '%H:%i')))
|
||
)
|
||
WHERE wmt.warehouse_start_time IS NOT NULL
|
||
AND wmt.warehouse_end_time IS NOT NULL
|
||
GROUP BY wmt.warehouse_id, et.energy_type_id, et.name, et.unit
|
||
</sql>
|
||
|
||
<!-- 库区分摊时间范围内的总消耗、总成本(统一费率匹配) -->
|
||
<sql id="WarehouseCost">
|
||
SELECT
|
||
wmt.warehouse_id,
|
||
SUM(COALESCE(ec.consumption, 0)) AS total_warehouse_consumption,
|
||
SUM(
|
||
COALESCE(ec.consumption, 0) *
|
||
COALESCE(
|
||
CASE
|
||
WHEN er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 THEN
|
||
COALESCE(tpl.rate, er.rate, 0)
|
||
WHEN er.use_peak_valley = 1 THEN
|
||
COALESCE(rtpl.rate, er.rate, 0)
|
||
WHEN er.use_tiered_pricing = 1 THEN
|
||
COALESCE(rt.rate, er.rate, 0)
|
||
ELSE COALESCE(er.rate, 0)
|
||
END,
|
||
0
|
||
)
|
||
) AS total_warehouse_cost
|
||
FROM (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt
|
||
LEFT JOIN wms_energy_area_link eal ON wmt.warehouse_id = eal.warehouse_id
|
||
LEFT JOIN ems_meter m ON eal.meter_id = m.meter_id
|
||
LEFT JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id
|
||
AND ec.start_time >= wmt.warehouse_start_time
|
||
AND ec.end_time <![CDATA[<=]]> wmt.warehouse_end_time
|
||
LEFT JOIN ems_energy_type et ON m.energy_type_id = et.energy_type_id
|
||
LEFT JOIN (
|
||
SELECT er1.*
|
||
FROM ems_energy_rate er1
|
||
WHERE er1.del_flag = '0'
|
||
) er ON et.energy_type_id = er.energy_type_id
|
||
AND er.effective_date <![CDATA[<=]]> COALESCE(DATE(wmt.warehouse_end_time), CURDATE())
|
||
AND (er.expiry_date IS NULL OR er.expiry_date >= COALESCE(DATE(wmt.warehouse_start_time), CURDATE()))
|
||
LEFT JOIN ems_rate_time_period_link rtpl
|
||
ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 0
|
||
AND rtpl.energy_rate_id = er.energy_rate_id
|
||
AND rtpl.del_flag = '0'
|
||
LEFT JOIN ems_time_period tp
|
||
ON rtpl.period_id = tp.period_id
|
||
AND tp.del_flag = '0'
|
||
AND (
|
||
(tp.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp.start_time,'%H:%i') AND STR_TO_DATE(tp.end_time,'%H:%i'))
|
||
OR (tp.cross_day = 1 AND (TIME(ec.end_time) >= STR_TO_DATE(tp.start_time,'%H:%i') OR TIME(ec.end_time) <![CDATA[<=]]> STR_TO_DATE(tp.end_time,'%H:%i')))
|
||
)
|
||
LEFT JOIN ems_rate_tier rt
|
||
ON er.use_peak_valley = 0 AND er.use_tiered_pricing = 1
|
||
AND rt.energy_rate_id = er.energy_rate_id
|
||
AND rt.del_flag = '0'
|
||
AND (rt.min_usage IS NULL OR ec.consumption <![CDATA[>=]]> rt.min_usage)
|
||
AND (rt.max_usage IS NULL OR ec.consumption <![CDATA[<]]> rt.max_usage)
|
||
LEFT JOIN ems_rate_tier rt_combo
|
||
ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 1
|
||
AND rt_combo.energy_rate_id = er.energy_rate_id
|
||
AND rt_combo.del_flag = '0'
|
||
AND (rt_combo.min_usage IS NULL OR ec.consumption <![CDATA[>=]]> rt_combo.min_usage)
|
||
AND (rt_combo.max_usage IS NULL OR ec.consumption <![CDATA[<]]> rt_combo.max_usage)
|
||
LEFT JOIN ems_tier_period_link tpl
|
||
ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 1
|
||
AND tpl.tier_id = rt_combo.tier_id
|
||
AND tpl.del_flag = '0'
|
||
LEFT JOIN ems_time_period tp_combo
|
||
ON tpl.period_id = tp_combo.period_id
|
||
AND tp_combo.del_flag = '0'
|
||
AND (
|
||
(tp_combo.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp_combo.start_time,'%H:%i') AND STR_TO_DATE(tp_combo.end_time,'%H:%i'))
|
||
OR (tp_combo.cross_day = 1 AND (TIME(ec.end_time) >= STR_TO_DATE(tp_combo.start_time,'%H:%i') OR TIME(ec.end_time) <![CDATA[<=]]> STR_TO_DATE(tp_combo.end_time,'%H:%i')))
|
||
)
|
||
WHERE wmt.warehouse_start_time IS NOT NULL
|
||
AND wmt.warehouse_end_time IS NOT NULL
|
||
GROUP BY wmt.warehouse_id
|
||
</sql>
|
||
|
||
<select id="selectPendingActionCoilCost" resultType="com.klp.ems.domain.vo.WmsEnergyCoilDailyVo">
|
||
SELECT
|
||
pa.coil_id AS coilId,
|
||
pa.current_coil_no AS currentCoilNo,
|
||
c.enter_coil_no AS enterCoilNo,
|
||
pa.warehouse_id AS warehouseId,
|
||
wh.warehouse_name AS warehouseName,
|
||
pa.create_time AS scanTime,
|
||
-- 结束时间:优先使用库区绑定设备的最近一次抄表结束时间,其次使用钢卷自身的完成时间
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END AS completeTime,
|
||
-- 生产时长:
|
||
-- 1) 若库区有抄表时间,则按 创建时间 ~ min(完成时间, 库区最近抄表结束时间)
|
||
-- 2) 若库区无抄表时间,则仅在钢卷有完成时间时按 创建时间 ~ 完成时间
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS productionDuration,
|
||
-- 分摊比率:按生产时长占库区总生产时长的比例
|
||
CASE
|
||
WHEN wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
AND pa.create_time <![CDATA[<]]> (CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END)
|
||
THEN CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes
|
||
ELSE 0
|
||
END AS allocationFactor,
|
||
-- 分摊能耗 = 总能耗 * 分摊比率
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END AS consumptionQty,
|
||
-- 分摊成本 = 总成本 * 分摊比率
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN pa.create_time <![CDATA[<]]> (CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
CASE
|
||
WHEN pa.complete_time IS NOT NULL THEN pa.complete_time
|
||
WHEN wmt.warehouse_end_time IS NOT NULL THEN LEAST(wmt.warehouse_end_time, NOW())
|
||
ELSE NOW()
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END AS costAmount,
|
||
wmt.warehouse_start_time AS latestMeterReadStartTime,
|
||
wmt.warehouse_end_time AS latestMeterReadEndTime
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
LEFT JOIN wms_warehouse wh ON pa.warehouse_id = wh.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time)
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
AND wmt_pd.warehouse_end_time IS NOT NULL
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_count.warehouse_id,
|
||
COUNT(*) AS valid_coil_count
|
||
FROM wms_coil_pending_action pa_count
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_count ON pa_count.warehouse_id = wmt_count.warehouse_id
|
||
WHERE pa_count.action_status IN (0, 1)
|
||
AND pa_count.warehouse_id IS NOT NULL
|
||
AND wmt_count.warehouse_end_time IS NOT NULL
|
||
AND pa_count.create_time <![CDATA[<]]> COALESCE(pa_count.complete_time, wmt_count.warehouse_end_time)
|
||
GROUP BY pa_count.warehouse_id
|
||
) wd_count ON pa.warehouse_id = wd_count.warehouse_id
|
||
WHERE pa.action_status IN (0, 1, 2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
ORDER BY pa.warehouse_id, pa.create_time DESC
|
||
</select>
|
||
|
||
<!-- 查询待操作钢卷的能源成本统计(按时间段分摊) -->
|
||
<select id="selectPendingActionCoilCostStatistics" resultType="com.klp.ems.domain.vo.WmsEnergyCoilDailyStatisticsVo">
|
||
SELECT
|
||
COUNT(CASE WHEN pa.action_status IN (0, 1) THEN 1 END) AS totalCoils,
|
||
COUNT(CASE WHEN pa.action_status IN (0, 1, 2) THEN 1 END) AS totalOperationCoils,
|
||
AVG(CASE
|
||
WHEN wmt.warehouse_end_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
AND wd_count.valid_coil_count > 0
|
||
THEN CAST(1 AS DECIMAL(20,6)) / wd_count.valid_coil_count
|
||
ELSE 0
|
||
END) AS avgAllocationFactor,
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN wmt.warehouse_end_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
)
|
||
WHEN wmt.warehouse_end_time IS NULL
|
||
AND pa.complete_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> pa.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
pa.complete_time
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) AS totalCost,
|
||
SUM(CASE
|
||
WHEN wmt.warehouse_end_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
)
|
||
WHEN wmt.warehouse_end_time IS NULL
|
||
AND pa.complete_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> pa.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
pa.complete_time
|
||
)
|
||
ELSE 0
|
||
END) AS totalProductionDuration,
|
||
CASE
|
||
WHEN SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN wmt.warehouse_end_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
)
|
||
WHEN wmt.warehouse_end_time IS NULL
|
||
AND pa.complete_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> pa.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
pa.complete_time
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) > 0
|
||
THEN SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_cost IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_cost *
|
||
(CAST(
|
||
CASE
|
||
WHEN wmt.warehouse_end_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
)
|
||
WHEN wmt.warehouse_end_time IS NULL
|
||
AND pa.complete_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> pa.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
pa.complete_time
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
) /
|
||
SUM(
|
||
CASE
|
||
WHEN wd.total_warehouse_consumption IS NOT NULL
|
||
AND wd_prod.total_prod_minutes IS NOT NULL
|
||
AND wd_prod.total_prod_minutes > 0
|
||
THEN wd.total_warehouse_consumption *
|
||
(CAST(
|
||
CASE
|
||
WHEN wmt.warehouse_end_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
COALESCE(pa.complete_time, wmt.warehouse_end_time)
|
||
)
|
||
WHEN wmt.warehouse_end_time IS NULL
|
||
AND pa.complete_time IS NOT NULL
|
||
AND pa.create_time <![CDATA[<]]> pa.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa.create_time,
|
||
pa.complete_time
|
||
)
|
||
ELSE 0
|
||
END AS DECIMAL(20,6)
|
||
) / wd_prod.total_prod_minutes)
|
||
ELSE 0
|
||
END
|
||
)
|
||
ELSE 0
|
||
END AS avgUnitCost,
|
||
MIN(wmt.warehouse_start_time) AS latestMeterReadStartTime,
|
||
MAX(wmt.warehouse_end_time) AS latestMeterReadEndTime
|
||
FROM wms_coil_pending_action pa
|
||
LEFT JOIN wms_material_coil c ON pa.coil_id = c.coil_id
|
||
LEFT JOIN wms_warehouse wh ON pa.warehouse_id = wh.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt ON pa.warehouse_id = wmt.warehouse_id
|
||
LEFT JOIN (
|
||
<include refid="WarehouseCost"/>
|
||
) wd ON pa.warehouse_id = wd.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_pd.warehouse_id,
|
||
SUM(
|
||
CASE
|
||
WHEN wmt_pd.warehouse_end_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time)
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
COALESCE(pa_pd.complete_time, wmt_pd.warehouse_end_time)
|
||
)
|
||
WHEN wmt_pd.warehouse_end_time IS NULL
|
||
AND pa_pd.complete_time IS NOT NULL
|
||
AND pa_pd.create_time <![CDATA[<]]> pa_pd.complete_time
|
||
THEN TIMESTAMPDIFF(MINUTE,
|
||
pa_pd.create_time,
|
||
pa_pd.complete_time
|
||
)
|
||
ELSE 0
|
||
END
|
||
) AS total_prod_minutes
|
||
FROM wms_coil_pending_action pa_pd
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_pd ON pa_pd.warehouse_id = wmt_pd.warehouse_id
|
||
WHERE pa_pd.action_status IN (0, 1)
|
||
AND pa_pd.warehouse_id IS NOT NULL
|
||
AND wmt_pd.warehouse_end_time IS NOT NULL
|
||
GROUP BY pa_pd.warehouse_id
|
||
) wd_prod ON pa.warehouse_id = wd_prod.warehouse_id
|
||
LEFT JOIN (
|
||
SELECT
|
||
pa_count.warehouse_id,
|
||
COUNT(*) AS valid_coil_count
|
||
FROM wms_coil_pending_action pa_count
|
||
LEFT JOIN (
|
||
<include refid="WarehouseMeterTime"/>
|
||
) wmt_count ON pa_count.warehouse_id = wmt_count.warehouse_id
|
||
WHERE pa_count.action_status IN (0, 1)
|
||
AND pa_count.warehouse_id IS NOT NULL
|
||
AND wmt_count.warehouse_end_time IS NOT NULL
|
||
AND pa_count.create_time <![CDATA[<]]> COALESCE(pa_count.complete_time, wmt_count.warehouse_end_time)
|
||
GROUP BY pa_count.warehouse_id
|
||
) wd_count ON pa.warehouse_id = wd_count.warehouse_id
|
||
WHERE pa.action_status IN (0, 1, 2)
|
||
AND pa.warehouse_id IS NOT NULL
|
||
<if test="enterCoilNo != null and enterCoilNo != ''">
|
||
AND c.enter_coil_no LIKE CONCAT('%', #{enterCoilNo}, '%')
|
||
</if>
|
||
<if test="currentCoilNo != null and currentCoilNo != ''">
|
||
AND pa.current_coil_no LIKE CONCAT('%', #{currentCoilNo}, '%')
|
||
</if>
|
||
<if test="warehouseId != null">
|
||
AND pa.warehouse_id = #{warehouseId}
|
||
</if>
|
||
</select>
|
||
|
||
<select id="selectReportDetail" resultType="com.klp.ems.domain.vo.WmsEnergyCoilDailyVo">
|
||
SELECT
|
||
c.energy_cost_id AS energyCostId,
|
||
c.task_id AS taskId,
|
||
c.calc_date AS calcDate,
|
||
c.coil_id AS coilId,
|
||
c.enter_coil_no AS enterCoilNo,
|
||
c.current_coil_no AS currentCoilNo,
|
||
c.warehouse_id AS warehouseId,
|
||
c.actual_warehouse_id AS actualWarehouseId,
|
||
c.energy_type_id AS energyTypeId,
|
||
c.meter_id AS meterId,
|
||
c.consumption_qty AS consumptionQty,
|
||
c.cost_amount AS costAmount,
|
||
c.allocation_basis_weight AS allocationBasisWeight,
|
||
c.allocation_basis_days AS allocationBasisDays,
|
||
c.allocation_factor AS allocationFactor,
|
||
c.remark AS remark
|
||
FROM wms_energy_coil_daily c
|
||
<where>
|
||
<if test="bo != null and bo.taskId != null">
|
||
AND c.task_id = #{bo.taskId}
|
||
</if>
|
||
<if test="bo != null and bo.energyTypeId != null">
|
||
AND c.energy_type_id = #{bo.energyTypeId}
|
||
</if>
|
||
<if test="bo != null and bo.meterId != null">
|
||
AND c.meter_id = #{bo.meterId}
|
||
</if>
|
||
<if test="bo != null and bo.warehouseId != null">
|
||
AND c.warehouse_id = #{bo.warehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.actualWarehouseId != null">
|
||
AND c.actual_warehouse_id = #{bo.actualWarehouseId}
|
||
</if>
|
||
<if test="bo != null and bo.startDate != null">
|
||
AND c.calc_date <![CDATA[>=]]> #{bo.startDate}
|
||
</if>
|
||
<if test="bo != null and bo.endDate != null">
|
||
AND c.calc_date <![CDATA[<=]]> #{bo.endDate}
|
||
</if>
|
||
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
|
||
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
|
||
</if>
|
||
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
|
||
AND c.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
|
||
</if>
|
||
</where>
|
||
ORDER BY c.calc_date DESC, c.energy_cost_id DESC
|
||
</select>
|
||
|
||
</mapper>
|