优化成本计算问题,加入辅料备件分摊页面

This commit is contained in:
2026-01-26 19:29:11 +08:00
parent 50fa87115d
commit d5cbaab645
14 changed files with 1754 additions and 117 deletions

View File

@@ -33,12 +33,12 @@
<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,
m.enter_coil_no AS enterCoilNo,
m.current_coil_no AS currentCoilNo,
IFNULL(e.coil_count, 0) AS coilCount,
IFNULL(e.total_duration, 0) AS totalDuration,
IFNULL(e.total_consumption, 0) AS totalConsumption,
IFNULL(e.energy_cost, 0) AS totalEnergyCost,
IFNULL(s.stock_cost, 0) AS stockCost,
IFNULL(x.aux_cost, 0) AS auxCost,
IFNULL(x.spare_cost, 0) AS spareCost,
@@ -46,47 +46,31 @@
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
SELECT
MAX(enter_coil_no) AS enter_coil_no,
current_coil_no,
MIN(create_time) AS create_time
FROM wms_material_coil
WHERE data_type = 1
AND del_flag = 0
AND status = 0
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
AND m.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND 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}, '%')
AND 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')
AND 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')
AND create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
) aid
GROUP BY current_coil_no
) m
LEFT JOIN (
SELECT
c.enter_coil_no,
MIN(pa.current_coil_no) AS current_coil_no,
pa.current_coil_no,
COUNT(DISTINCT pa.coil_id) AS coil_count,
SUM(
CASE
@@ -137,7 +121,7 @@
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 wms_material_coil c ON pa.coil_id = c.coil_id AND c.data_type = 1 AND c.del_flag = 0 AND c.status = 0
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
) wmt ON pa.warehouse_id = wmt.warehouse_id
@@ -174,6 +158,7 @@
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.del_flag='0'
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}, '%')
@@ -187,29 +172,30 @@
<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
GROUP BY pa.current_coil_no
) e ON m.current_coil_no = e.current_coil_no
LEFT JOIN (
SELECT
m.enter_coil_no,
current_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)
WHEN IFNULL(net_weight, 0) = 0 AND IFNULL(gross_weight, 0) > 0 THEN gross_weight
ELSE IFNULL(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
SUM(IFNULL(net_weight, 0)) AS total_net_weight,
SUM(IFNULL(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)
WHERE m.data_type = 1
AND m.del_flag = 0
AND m.status = 0
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
AND m.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
</if>
@@ -222,11 +208,11 @@
<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
GROUP BY current_coil_no
) s ON m.current_coil_no = s.current_coil_no
LEFT JOIN (
SELECT
dm.enter_coil_no,
dm.current_coil_no,
SUM(
CASE
WHEN dm.total_minutes > 0
@@ -244,7 +230,7 @@
FROM (
SELECT
DATE(pa.create_time) AS day_key,
c.enter_coil_no,
pa.current_coil_no,
SUM(
CASE
WHEN pa.create_time &lt; COALESCE(pa.complete_time, NOW())
@@ -254,7 +240,7 @@
) 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 wms_material_coil c ON pa.coil_id = c.coil_id AND c.data_type = 1 AND c.del_flag = 0 AND c.status = 0
LEFT JOIN (
SELECT
DATE(pa_all.create_time) AS day_key,
@@ -267,14 +253,28 @@
) AS total_minutes
FROM wms_coil_pending_action pa_all
WHERE pa_all.action_status IN (0,1,2)
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
AND pa_all.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND pa_all.create_time &lt;= CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
GROUP BY DATE(pa_all.create_time)
) td ON td.day_key = DATE(pa.create_time)
WHERE pa.action_status IN (0,1,2)
<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 >= CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND pa.create_time &lt;= CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(pa.create_time), c.enter_coil_no, td.total_minutes
</if>
GROUP BY DATE(pa.create_time), pa.current_coil_no, td.total_minutes
) dm
LEFT JOIN (
SELECT
@@ -283,8 +283,12 @@
FROM eqp_auxiliary_material_change
WHERE del_flag = '0'
AND change_type = '减少'
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND change_time &lt;= CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
GROUP BY DATE(change_time)
) a ON dm.day_key = a.day_key
LEFT JOIN (
@@ -294,12 +298,17 @@
FROM eqp_spare_parts_change
WHERE del_flag = '0'
AND change_type = '减少'
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND change_time &lt;= CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
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
GROUP BY dm.current_coil_no
) x ON m.current_coil_no = x.current_coil_no
WHERE s.current_coil_no IS NOT NULL
ORDER BY totalCost DESC
LIMIT #{offset}, #{pageSize}
</select>
@@ -307,54 +316,42 @@
<!-- 入场卷号维度能源+囤积成本汇总总数 -->
<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
SELECT COUNT(1)
FROM (
SELECT
current_coil_no,
MAX(enter_coil_no) AS enter_coil_no,
MIN(create_time) AS create_time
FROM wms_material_coil
WHERE data_type = 1
AND del_flag = 0
AND status = 0
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
AND 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}, '%')
AND 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')
AND 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')
AND 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
GROUP BY current_coil_no
) m
</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,
m.enter_coil_no AS enterCoilNo,
m.current_coil_no AS currentCoilNo,
IFNULL(e.coil_count, 0) AS coilCount,
IFNULL(e.total_duration, 0) AS totalDuration,
IFNULL(e.total_consumption, 0) AS totalConsumption,
IFNULL(e.energy_cost, 0) AS totalEnergyCost,
IFNULL(s.stock_cost, 0) AS stockCost,
IFNULL(x.aux_cost, 0) AS auxCost,
IFNULL(x.spare_cost, 0) AS spareCost,
@@ -362,23 +359,31 @@
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
SELECT
MAX(enter_coil_no) AS enter_coil_no,
current_coil_no,
MIN(create_time) AS create_time
FROM wms_material_coil
WHERE data_type IN (0,1)
AND del_flag = 0
AND status = 0
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
AND enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%')
</if>
<if test="bo != null and bo.currentCoilNo != null and bo.currentCoilNo != ''">
AND current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
</if>
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
AND create_time <![CDATA[>=]]> CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
GROUP BY current_coil_no
) m
LEFT JOIN (
SELECT
c.enter_coil_no,
MIN(pa.current_coil_no) AS current_coil_no,
pa.current_coil_no,
COUNT(DISTINCT pa.coil_id) AS coil_count,
SUM(
CASE
@@ -429,7 +434,7 @@
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 wms_material_coil c ON pa.coil_id = c.coil_id AND c.status = 0
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
) wmt ON pa.warehouse_id = wmt.warehouse_id
@@ -468,7 +473,7 @@
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
) e ON m.enter_coil_no = e.enter_coil_no
LEFT JOIN (
SELECT
m.enter_coil_no,
@@ -490,8 +495,9 @@
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
AND m.status = 0
GROUP BY m.enter_coil_no
) s ON aid.enter_coil_no = s.enter_coil_no
) s ON m.enter_coil_no = s.enter_coil_no
LEFT JOIN (
SELECT
dm.enter_coil_no,
@@ -522,7 +528,7 @@
) 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 wms_material_coil c ON pa.coil_id = c.coil_id AND c.status = 0
LEFT JOIN (
SELECT
DATE(pa_all.create_time) AS day_key,
@@ -535,13 +541,21 @@
) AS total_minutes
FROM wms_coil_pending_action pa_all
WHERE pa_all.action_status IN (0,1,2)
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
AND pa_all.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND pa_all.create_time &lt;= CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
GROUP BY DATE(pa_all.create_time)
) td ON td.day_key = DATE(pa.create_time)
WHERE pa.action_status IN (0,1,2)
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
AND pa.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND pa.create_time &lt;= CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
GROUP BY DATE(pa.create_time), c.enter_coil_no, td.total_minutes
) dm
LEFT JOIN (
@@ -551,8 +565,12 @@
FROM eqp_auxiliary_material_change
WHERE del_flag = '0'
AND change_type = '减少'
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND change_time &lt;= CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
GROUP BY DATE(change_time)
) a ON dm.day_key = a.day_key
LEFT JOIN (
@@ -562,12 +580,16 @@
FROM eqp_spare_parts_change
WHERE del_flag = '0'
AND change_type = '减少'
<if test="bo != null and bo.startDate != null and bo.startDate != ''">
AND change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
</if>
<if test="bo != null and bo.endDate != null and bo.endDate != ''">
AND change_time &lt;= CONCAT(#{bo.endDate}, ' 23:59:59')
</if>
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
) x ON m.enter_coil_no = x.enter_coil_no
ORDER BY totalCost DESC
</select>
@@ -626,7 +648,7 @@
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_material_coil c ON pa.coil_id = c.coil_id AND c.status = 0
LEFT JOIN wms_warehouse w ON pa.warehouse_id = w.warehouse_id
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
@@ -741,7 +763,7 @@
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_material_coil c ON pa.coil_id = c.coil_id AND c.status = 0
LEFT JOIN wms_warehouse w ON pa.warehouse_id = w.warehouse_id
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
@@ -776,9 +798,11 @@
) 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.del_flag=0
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.del_flag = 0
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}, '%')
@@ -1019,7 +1043,7 @@
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 wms_material_coil mc ON pa.coil_id = mc.coil_id AND mc.status = 0
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
) wmt ON pa.warehouse_id = wmt.warehouse_id
@@ -1135,7 +1159,7 @@
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 wms_material_coil mc ON pa.coil_id = mc.coil_id AND mc.status = 0
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
) wmt ON pa.warehouse_id = wmt.warehouse_id
@@ -1379,7 +1403,7 @@
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 wms_material_coil mc ON pa.coil_id = mc.coil_id AND mc.status = 0
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
) wmt ON pa.warehouse_id = wmt.warehouse_id
@@ -1719,7 +1743,7 @@
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_material_coil c ON pa.coil_id = c.coil_id AND c.status = 0
LEFT JOIN wms_warehouse wh ON pa.warehouse_id = wh.warehouse_id
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
@@ -1773,9 +1797,184 @@
) 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="bo != null and bo.coilId != null">
AND pa.coil_id = #{bo.coilId}
</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 pa.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%')
</if>
<if test="bo != null and bo.warehouseId != null">
AND pa.warehouse_id = #{bo.warehouseId}
</if>
ORDER BY pa.warehouse_id, pa.create_time DESC
</select>
<!-- 查询待操作钢卷的能源成本详情(单卷) -->
<select id="selectPendingActionCoilCostDetail" 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 AND c.status = 0
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
WHERE pa.coil_id = #{coilId}
AND pa.action_status IN (0, 1, 2)
AND pa.warehouse_id IS NOT NULL
AND pa.del_flag = 0
LIMIT 1
</select>
<!-- 查询待操作钢卷的能源成本统计(按时间段分摊) -->
<select id="selectPendingActionCoilCostStatistics" resultType="com.klp.ems.domain.vo.WmsEnergyCoilDailyStatisticsVo">
SELECT
@@ -1918,7 +2117,7 @@
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_material_coil c ON pa.coil_id = c.coil_id AND c.status = 0
LEFT JOIN wms_warehouse wh ON pa.warehouse_id = wh.warehouse_id
LEFT JOIN (
<include refid="WarehouseMeterTime"/>
@@ -2034,4 +2233,181 @@
ORDER BY c.calc_date DESC, c.energy_cost_id DESC
</select>
<!-- 辅料分摊构成(按物料汇总,数量与金额按卷的日分摊系数分摊) -->
<select id="selectAuxMaterialBreakdown" resultType="com.klp.ems.domain.vo.AuxMaterialBreakdownVo">
SELECT
CAST(t.auxiliary_id AS CHAR) AS itemCode,
t.item_name AS itemName,
t.spec AS spec,
t.unit AS unit,
SUM(t.total_qty) AS totalQty,
SUM(t.total_amount) AS totalAmount,
SUM(t.allocated_qty) AS allocatedQty,
SUM(t.allocated_amount) AS allocatedAmount
FROM (
SELECT
adc.day_key,
adc.auxiliary_id,
adc.item_name,
adc.spec,
adc.unit,
adc.total_qty,
adc.total_amount,
CASE
WHEN dtm.total_minutes > 0 AND cdm.coil_minutes IS NOT NULL AND cdm.coil_minutes > 0
THEN adc.total_qty * (cdm.coil_minutes / dtm.total_minutes)
ELSE 0
END AS allocated_qty,
CASE
WHEN dtm.total_minutes > 0 AND cdm.coil_minutes IS NOT NULL AND cdm.coil_minutes > 0
THEN adc.total_amount * (cdm.coil_minutes / dtm.total_minutes)
ELSE 0
END AS allocated_amount
FROM (
SELECT
DATE(amc.change_time) AS day_key,
am.auxiliary_id,
am.auxiliary_name AS item_name,
am.auxiliary_model AS spec,
am.unit,
SUM(ABS(amc.change_quantity)) AS total_qty,
SUM(ABS(IFNULL(amc.amount, 0))) AS total_amount
FROM eqp_auxiliary_material_change amc
JOIN eqp_auxiliary_material am ON amc.auxiliary_id = am.auxiliary_id
WHERE amc.del_flag = '0'
AND amc.change_type = '减少'
AND amc.change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND amc.change_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(amc.change_time), am.auxiliary_id, am.auxiliary_name, am.auxiliary_model, am.unit
) adc
JOIN (
SELECT
DATE(pa_all.create_time) AS day_key,
SUM(
CASE
WHEN pa_all.create_time <![CDATA[<]]> 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 <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(pa_all.create_time)
) dtm ON adc.day_key = dtm.day_key
LEFT JOIN (
SELECT
c.enter_coil_no,
DATE(pa.create_time) AS day_key,
SUM(
CASE
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, NOW())
THEN TIMESTAMPDIFF(MINUTE, pa.create_time, COALESCE(pa.complete_time, NOW()))
ELSE 0
END
) AS coil_minutes
FROM wms_coil_pending_action pa
JOIN wms_material_coil c ON pa.coil_id = c.coil_id AND c.status = 0
WHERE pa.action_status IN (0,1,2)
AND pa.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
AND c.enter_coil_no = #{bo.enterCoilNo}
</if>
GROUP BY c.enter_coil_no, DATE(pa.create_time)
) cdm ON adc.day_key = cdm.day_key
) t
GROUP BY t.auxiliary_id, t.item_name, t.spec, t.unit
ORDER BY allocatedAmount DESC
</select>
<!-- 备件分摊构成(按备件汇总,数量与金额按卷的日分摊系数分摊) -->
<select id="selectSparePartBreakdown" resultType="com.klp.ems.domain.vo.SparePartBreakdownVo">
SELECT
CAST(t.part_id AS CHAR) AS itemCode,
t.item_name AS itemName,
t.spec AS spec,
t.unit AS unit,
SUM(t.total_qty) AS totalQty,
SUM(t.total_amount) AS totalAmount,
SUM(t.allocated_qty) AS allocatedQty,
SUM(t.allocated_amount) AS allocatedAmount
FROM (
SELECT
sdc.day_key,
sdc.part_id,
sdc.item_name,
sdc.spec,
sdc.unit,
sdc.total_qty,
sdc.total_amount,
CASE
WHEN dtm.total_minutes > 0 AND cdm.coil_minutes IS NOT NULL AND cdm.coil_minutes > 0
THEN sdc.total_qty * (cdm.coil_minutes / dtm.total_minutes)
ELSE 0
END AS allocated_qty,
CASE
WHEN dtm.total_minutes > 0 AND cdm.coil_minutes IS NOT NULL AND cdm.coil_minutes > 0
THEN sdc.total_amount * (cdm.coil_minutes / dtm.total_minutes)
ELSE 0
END AS allocated_amount
FROM (
SELECT
DATE(spc.change_time) AS day_key,
sp.part_id,
sp.part_name AS item_name,
sp.model AS spec,
sp.unit,
SUM(ABS(spc.change_quantity)) AS total_qty,
SUM(ABS(IFNULL(spc.amount, 0))) AS total_amount
FROM eqp_spare_parts_change spc
JOIN eqp_spare_part sp ON spc.part_id = sp.part_id
WHERE spc.del_flag = '0'
AND spc.change_type = '减少'
AND spc.change_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND spc.change_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(spc.change_time), sp.part_id, sp.part_name, sp.model, sp.unit
) sdc
JOIN (
SELECT
DATE(pa_all.create_time) AS day_key,
SUM(
CASE
WHEN pa_all.create_time <![CDATA[<]]> 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 <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
GROUP BY DATE(pa_all.create_time)
) dtm ON sdc.day_key = dtm.day_key
LEFT JOIN (
SELECT
c.enter_coil_no,
DATE(pa.create_time) AS day_key,
SUM(
CASE
WHEN pa.create_time <![CDATA[<]]> COALESCE(pa.complete_time, NOW())
THEN TIMESTAMPDIFF(MINUTE, pa.create_time, COALESCE(pa.complete_time, NOW()))
ELSE 0
END
) AS coil_minutes
FROM wms_coil_pending_action pa
JOIN wms_material_coil c ON pa.coil_id = c.coil_id AND c.status = 0
WHERE pa.action_status IN (0,1,2)
AND pa.create_time >= CONCAT(#{bo.startDate}, ' 00:00:00')
AND pa.create_time <![CDATA[<=]]> CONCAT(#{bo.endDate}, ' 23:59:59')
<if test="bo != null and bo.enterCoilNo != null and bo.enterCoilNo != ''">
AND c.enter_coil_no = #{bo.enterCoilNo}
</if>
GROUP BY c.enter_coil_no, DATE(pa.create_time)
) cdm ON sdc.day_key = cdm.day_key
) t
GROUP BY t.part_id, t.item_name, t.spec, t.unit
ORDER BY allocatedAmount DESC
</select>
</mapper>