DELETE FROM wms_energy_coil_daily WHERE task_id = #{taskId}
SELECT * FROM wms_energy_coil_daily WHERE task_id = #{taskId}
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(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)) 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
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
AND pa.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
) 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
AND m.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND m.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
AND m.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND m.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
) 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 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 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 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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
AND pa.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
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) cs.expire_date)
WHERE m.data_type IN (0,1)
AND m.del_flag = 0
AND m.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND m.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
AND m.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND m.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY m.enter_coil_no
) s ON aid.enter_coil_no = s.enter_coil_no
ORDER BY totalCost DESC
LIMIT #{offset}, #{pageSize}
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
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
AND pa.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
UNION
SELECT DISTINCT m.enter_coil_no
FROM wms_material_coil m
WHERE m.data_type IN (0,1)
AND m.del_flag = 0
AND m.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND m.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
AND m.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND m.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
) tmp
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(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)) 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 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 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 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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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) 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
ORDER BY totalCost DESC
SELECT
c.enter_coil_no AS enterCoilNo,
COUNT(DISTINCT pa.coil_id) AS coilCount,
SUM(
CASE
WHEN pa.create_time 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 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 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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
AND pa.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY c.enter_coil_no
ORDER BY totalEnergyCost DESC
LIMIT 1
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 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 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 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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
AND pa.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
ORDER BY pa.create_time DESC
AND c.task_id = #{bo.taskId}
AND c.energy_type_id = #{bo.energyTypeId}
AND c.meter_id = #{bo.meterId}
AND c.warehouse_id = #{bo.warehouseId}
AND c.actual_warehouse_id = #{bo.actualWarehouseId}
AND c.calc_date =]]> #{bo.startDate}
AND c.calc_date #{bo.endDate}
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND c.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
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
GROUP BY c.energy_type_id
ORDER BY totalCost DESC
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
GROUP BY c.warehouse_id, c.actual_warehouse_id
ORDER BY totalCost DESC
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
GROUP BY c.meter_id, c.energy_type_id
ORDER BY totalCost DESC
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
GROUP BY c.task_id, c.energy_type_id
ORDER BY c.task_id DESC
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
SELECT
COUNT(DISTINCT pa.coil_id) AS coilCount,
SUM(
CASE
WHEN 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
)
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 (
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 (
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 (
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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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 pa_pd.warehouse_id = #{bo.logicWarehouseId}
AND pa_pd.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa_pd.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
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 pa.warehouse_id = #{bo.logicWarehouseId}
AND pa.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
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 (
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 (
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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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 pa_pd.warehouse_id = #{bo.logicWarehouseId}
AND pa_pd.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa_pd.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
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
AND pa.warehouse_id = #{bo.logicWarehouseId}
AND pa.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
ORDER BY pa.create_time DESC
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 (
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 (
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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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 pa_pd.warehouse_id = #{bo.logicWarehouseId}
AND pa_pd.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa_pd.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
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
AND pa.warehouse_id = #{bo.logicWarehouseId}
AND pa.create_time =]]> CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY wde.energy_type_id, wde.energy_type_name, wde.energy_unit
ORDER BY cost DESC
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 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 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 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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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
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
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 (
) 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 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 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) 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 =]]> rt.min_usage)
AND (rt.max_usage IS NULL OR ec.consumption 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 =]]> rt_combo.min_usage)
AND (rt_combo.max_usage IS NULL OR ec.consumption 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) 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
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 (
) 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 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 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) 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 =]]> rt.min_usage)
AND (rt.max_usage IS NULL OR ec.consumption 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 =]]> rt_combo.min_usage)
AND (rt_combo.max_usage IS NULL OR ec.consumption 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) 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
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 (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 (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 (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 (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 (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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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 (
) 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 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
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 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 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 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 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 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 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 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 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 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 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 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 (
) wmt ON pa.warehouse_id = wmt.warehouse_id
LEFT JOIN (
) 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 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 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 (
) 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 (
) 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 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
AND c.enter_coil_no LIKE CONCAT('%', #{enterCoilNo}, '%')
AND pa.current_coil_no LIKE CONCAT('%', #{currentCoilNo}, '%')
AND pa.warehouse_id = #{warehouseId}
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
AND c.task_id = #{bo.taskId}
AND c.energy_type_id = #{bo.energyTypeId}
AND c.meter_id = #{bo.meterId}
AND c.warehouse_id = #{bo.warehouseId}
AND c.actual_warehouse_id = #{bo.actualWarehouseId}
AND c.calc_date =]]> #{bo.startDate}
AND c.calc_date #{bo.endDate}
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND c.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
ORDER BY c.calc_date DESC, c.energy_cost_id DESC