Files
klp-oa/klp-wms/src/main/resources/mapper/klp/WmsCostCoilDailyMapper.xml

567 lines
23 KiB
XML
Raw Normal View History

2025-12-02 17:58:16 +08:00
<?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">
2025-12-03 10:32:06 +08:00
<mapper namespace="com.klp.mapper.WmsCostCoilDailyMapper">
2025-12-02 17:58:16 +08:00
2025-12-03 10:32:06 +08:00
<resultMap type="com.klp.domain.WmsCostCoilDaily" id="CostCoilDailyResult">
2025-12-02 17:58:16 +08:00
<result property="costId" column="cost_id"/>
<result property="coilId" column="coil_id"/>
<result property="currentCoilNo" column="current_coil_no"/>
<result property="calcDate" column="calc_date"/>
<result property="netWeight" column="net_weight"/>
<result property="unitCost" column="unit_cost"/>
<result property="dailyCost" column="daily_cost"/>
<result property="storageDays" column="storage_days"/>
<result property="totalCost" column="total_cost"/>
<result property="warehouseId" column="warehouse_id"/>
<result property="itemType" column="item_type"/>
<result property="materialType" column="material_type"/>
<result property="createTime" column="create_time"/>
</resultMap>
2025-12-03 10:32:06 +08:00
<resultMap type="com.klp.domain.vo.WmsCostCoilDailyVo" id="CostCoilDailyVoResult">
2025-12-02 17:58:16 +08:00
<result property="costId" column="cost_id"/>
<result property="coilId" column="coil_id"/>
<result property="currentCoilNo" column="current_coil_no"/>
<result property="calcDate" column="calc_date"/>
<result property="netWeight" column="net_weight"/>
<result property="unitCost" column="unit_cost"/>
<result property="dailyCost" column="daily_cost"/>
<result property="storageDays" column="storage_days"/>
<result property="totalCost" column="total_cost"/>
<result property="warehouseId" column="warehouse_id"/>
<result property="warehouseName" column="warehouse_name"/>
<result property="itemType" column="item_type"/>
<result property="materialType" column="material_type"/>
</resultMap>
<!-- 自定义查询,关联库区名称 -->
2025-12-03 10:32:06 +08:00
<select id="selectVoPage" resultType="com.klp.domain.vo.WmsCostCoilDailyVo">
2025-12-02 17:58:16 +08:00
SELECT
ccd.cost_id,
ccd.coil_id,
ccd.current_coil_no,
ccd.calc_date,
ccd.net_weight,
ccd.unit_cost,
ccd.daily_cost,
ccd.storage_days,
ccd.total_cost,
ccd.warehouse_id,
w.warehouse_name,
ccd.item_type,
ccd.material_type
2025-12-03 10:32:06 +08:00
FROM wms_cost_coil_daily ccd
2025-12-02 17:58:16 +08:00
LEFT JOIN wms_warehouse w ON ccd.warehouse_id = w.warehouse_id AND w.del_flag = 0
${ew.customSqlSegment}
</select>
2025-12-03 10:39:28 +08:00
<select id="selectVoList" resultType="com.klp.domain.vo.WmsCostCoilDailyVo">
2025-12-02 17:58:16 +08:00
SELECT
ccd.cost_id,
ccd.coil_id,
ccd.current_coil_no,
ccd.calc_date,
ccd.net_weight,
ccd.unit_cost,
ccd.daily_cost,
ccd.storage_days,
ccd.total_cost,
ccd.warehouse_id,
w.warehouse_name,
ccd.item_type,
ccd.material_type
2025-12-03 10:32:06 +08:00
FROM wms_cost_coil_daily ccd
2025-12-02 17:58:16 +08:00
LEFT JOIN wms_warehouse w ON ccd.warehouse_id = w.warehouse_id AND w.del_flag = 0
${ew.customSqlSegment}
</select>
2025-12-03 10:39:28 +08:00
<select id="selectVoById" resultType="com.klp.domain.vo.WmsCostCoilDailyVo">
2025-12-02 17:58:16 +08:00
SELECT
ccd.cost_id,
ccd.coil_id,
ccd.current_coil_no,
ccd.calc_date,
ccd.net_weight,
ccd.unit_cost,
ccd.daily_cost,
ccd.storage_days,
ccd.total_cost,
ccd.warehouse_id,
w.warehouse_name,
ccd.item_type,
ccd.material_type
2025-12-03 10:32:06 +08:00
FROM wms_cost_coil_daily ccd
2025-12-02 17:58:16 +08:00
LEFT JOIN wms_warehouse w ON ccd.warehouse_id = w.warehouse_id AND w.del_flag = 0
WHERE ccd.cost_id = #{costId}
</select>
<!-- 查询成本统计汇总(基于当前 wms_material_coil 快照) -->
<select id="selectCostSummary" resultType="java.util.HashMap">
SELECT
COUNT(*) AS totalCoils,
SUM(t.net_weight_ton) AS totalNetWeight,
2025-12-03 10:32:06 +08:00
SUM(t.gross_weight_ton) AS totalGrossWeight,
2025-12-02 17:58:16 +08:00
SUM(t.total_cost_amount) AS totalCost,
AVG(t.storage_days) AS avgStorageDays,
SUM(t.daily_cost_amount) AS totalDailyCost
FROM (
SELECT
2025-12-03 10:32:06 +08:00
IFNULL(m.net_weight, 0) AS net_weight_ton,
IFNULL(m.gross_weight, 0) AS gross_weight_ton,
2025-12-02 17:58:16 +08:00
(DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1) AS storage_days,
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
2025-12-03 16:29:00 +08:00
WHEN IFNULL(m.net_weight, 0) > 0 THEN m.net_weight
ELSE IFNULL(m.gross_weight, 0)
2025-12-02 17:58:16 +08:00
END
2025-12-03 10:32:06 +08:00
) * cs.unit_cost
2025-12-02 17:58:16 +08:00
END AS daily_cost_amount,
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
2025-12-03 16:29:00 +08:00
WHEN IFNULL(m.net_weight, 0) = 0 AND IFNULL(m.gross_weight, 0) > 0 THEN m.gross_weight
ELSE IFNULL(m.net_weight, 0)
2025-12-02 17:58:16 +08:00
END
2025-12-03 10:32:06 +08:00
) * cs.unit_cost * (DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1)
2025-12-02 17:58:16 +08:00
END AS total_cost_amount
FROM wms_material_coil m
2025-12-03 10:32:06 +08:00
LEFT JOIN wms_cost_standard_config cs
2025-12-02 17:58:16 +08:00
ON cs.status = 1
AND DATE(m.create_time) >= cs.effective_date
AND (cs.expire_date IS NULL OR DATE(m.create_time) &lt;= cs.expire_date)
WHERE m.data_type = 1
AND m.del_flag = 0
2025-12-03 16:29:00 +08:00
and m.status = 0
2025-12-02 17:58:16 +08:00
AND m.export_time IS NULL
<if test="warehouseId != null">
AND m.warehouse_id = #{warehouseId}
</if>
<if test="itemType != null and itemType != ''">
AND m.item_type = #{itemType}
</if>
<if test="materialType != null and materialType != ''">
AND m.material_type = #{materialType}
</if>
) t
</select>
<!-- 按库区统计成本(基于当前 wms_material_coil 快照) -->
<select id="selectCostByWarehouse" resultType="java.util.HashMap">
SELECT
t.warehouse_id AS warehouseId,
COALESCE(w.warehouse_name, '-') AS warehouseName,
COUNT(*) AS coilCount,
SUM(t.total_cost_amount) AS totalCost,
AVG(t.storage_days) AS avgStorageDays,
2025-12-03 10:32:06 +08:00
SUM(t.net_weight_ton) AS totalNetWeight,
SUM(t.gross_weight_ton) AS totalGrossWeight
2025-12-02 17:58:16 +08:00
FROM (
SELECT
m.coil_id,
m.warehouse_id,
2025-12-03 10:32:06 +08:00
IFNULL(m.net_weight, 0) AS net_weight_ton,
IFNULL(m.gross_weight, 0) AS gross_weight_ton,
2025-12-02 17:58:16 +08:00
(DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1) AS storage_days,
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
2025-12-03 16:29:00 +08:00
WHEN IFNULL(m.net_weight, 0) = 0 AND IFNULL(m.gross_weight, 0) > 0 THEN m.gross_weight
2025-12-02 17:58:16 +08:00
ELSE IFNULL(m.net_weight, 0)
END
2025-12-03 10:32:06 +08:00
) * cs.unit_cost * (DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1)
2025-12-02 17:58:16 +08:00
END AS total_cost_amount
FROM wms_material_coil m
2025-12-03 10:32:06 +08:00
LEFT JOIN wms_cost_standard_config cs
2025-12-02 17:58:16 +08:00
ON cs.status = 1
AND DATE(m.create_time) >= cs.effective_date
AND (cs.expire_date IS NULL OR DATE(m.create_time) &lt;= cs.expire_date)
WHERE m.data_type = 1
AND m.del_flag = 0
AND m.export_time IS NULL
) t
LEFT JOIN wms_warehouse w ON t.warehouse_id = w.warehouse_id
GROUP BY t.warehouse_id, w.warehouse_name
ORDER BY totalCost DESC
</select>
<!-- 按物品类型统计成本(基于当前 wms_material_coil 快照) -->
<select id="selectCostByItemType" resultType="java.util.HashMap">
SELECT
t.item_type AS itemType,
COUNT(*) AS coilCount,
SUM(t.total_cost_amount) AS totalCost,
AVG(t.storage_days) AS avgStorageDays,
2025-12-03 10:32:06 +08:00
SUM(t.net_weight_ton) AS totalNetWeight,
SUM(t.gross_weight_ton) AS totalGrossWeight
2025-12-02 17:58:16 +08:00
FROM (
SELECT
m.coil_id,
m.item_type,
2025-12-03 10:32:06 +08:00
IFNULL(m.net_weight, 0) AS net_weight_ton,
IFNULL(m.gross_weight, 0) AS gross_weight_ton,
2025-12-02 17:58:16 +08:00
(DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1) AS storage_days,
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
2025-12-03 16:29:00 +08:00
WHEN IFNULL(m.net_weight, 0) = 0 AND IFNULL(m.gross_weight, 0) > 0 THEN m.gross_weight
2025-12-02 17:58:16 +08:00
ELSE IFNULL(m.net_weight, 0)
END
2025-12-03 10:32:06 +08:00
) * cs.unit_cost * (DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1)
2025-12-02 17:58:16 +08:00
END AS total_cost_amount
FROM wms_material_coil m
2025-12-03 10:32:06 +08:00
LEFT JOIN wms_cost_standard_config cs
2025-12-02 17:58:16 +08:00
ON cs.status = 1
AND DATE(m.create_time) >= cs.effective_date
AND (cs.expire_date IS NULL OR DATE(m.create_time) &lt;= cs.expire_date)
WHERE m.data_type = 1
AND m.del_flag = 0
AND m.export_time IS NULL
) t
GROUP BY t.item_type
ORDER BY totalCost DESC
</select>
<!-- 检查指定日期和钢卷的成本记录是否存在 -->
<select id="countByCoilIdAndDate" resultType="int">
SELECT COUNT(1)
2025-12-03 10:32:06 +08:00
FROM wms_cost_coil_daily
2025-12-02 17:58:16 +08:00
WHERE coil_id = #{coilId}
AND calc_date = #{calcDate}
</select>
<!-- 按入场钢卷号统计成本 -->
2026-01-27 16:54:46 +08:00
<!-- 虽然方法名仍然包含 EnterCoilNo但统计口径已统一为“当前钢卷号current_coil_no-->
2025-12-02 17:58:16 +08:00
<select id="selectCostByEnterCoilNo" resultType="java.util.HashMap">
SELECT
2026-01-27 16:54:46 +08:00
mc.current_coil_no AS currentCoilNo,
2025-12-02 17:58:16 +08:00
COUNT(DISTINCT mc.coil_id) AS coilCount,
COUNT(DISTINCT CASE WHEN mc.export_time IS NULL THEN mc.coil_id END) AS unshippedCount,
COUNT(DISTINCT CASE WHEN mc.export_time IS NOT NULL THEN mc.coil_id END) AS shippedCount,
SUM(ccd.total_cost) AS totalCost,
SUM(ccd.net_weight) AS totalNetWeight,
AVG(ccd.storage_days) AS avgStorageDays,
MAX(ccd.calc_date) AS lastCalcDate
2025-12-03 10:32:06 +08:00
FROM wms_cost_coil_daily ccd
2025-12-02 17:58:16 +08:00
INNER JOIN wms_material_coil mc ON ccd.coil_id = mc.coil_id
WHERE ccd.calc_date BETWEEN #{startDate} AND #{endDate}
AND mc.data_type = 1
AND mc.del_flag = 0
<if test="enterCoilNo != null and enterCoilNo != ''">
2026-01-27 16:54:46 +08:00
AND mc.current_coil_no = #{enterCoilNo}
2025-12-02 17:58:16 +08:00
</if>
2026-01-27 16:54:46 +08:00
GROUP BY mc.current_coil_no
2025-12-02 17:58:16 +08:00
ORDER BY totalCost DESC
</select>
2026-01-27 16:54:46 +08:00
<!-- 囤积成本(按当前钢卷号聚合)列表 -->
2025-12-02 17:58:16 +08:00
<select id="selectStockpileByEnterCoilNo" resultType="java.util.HashMap">
SELECT
2026-01-27 16:54:46 +08:00
t.current_coil_no AS currentCoilNo,
2025-12-02 17:58:16 +08:00
COUNT(*) AS coilCount,
SUM(t.net_weight_ton) AS totalNetWeight,
SUM(t.gross_weight_ton) AS totalGrossWeight,
SUM(t.cost_amount) AS totalCost,
AVG(t.storage_days) AS avgStorageDays,
2025-12-03 10:32:06 +08:00
MAX(t.storage_days) AS maxStorageDays,
MAX(CASE WHEN IFNULL(t.net_weight_ton, 0) = 0 THEN 1 ELSE 0 END) AS hasNetWeightZero
2025-12-02 17:58:16 +08:00
FROM (
SELECT
2026-01-27 16:54:46 +08:00
m.current_coil_no,
2025-12-03 10:32:06 +08:00
IFNULL(m.net_weight, 0) AS net_weight_ton,
IFNULL(m.gross_weight, 0) AS gross_weight_ton,
2025-12-02 17:58:16 +08:00
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
2025-12-03 10:32:06 +08:00
WHEN IFNULL(m.net_weight, 0) = 0 AND IFNULL(m.gross_weight, 0) > 0 THEN m.gross_weight
2025-12-02 17:58:16 +08:00
ELSE IFNULL(m.net_weight, 0)
END
2025-12-03 10:32:06 +08:00
) * cs.unit_cost * (DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1)
2025-12-02 17:58:16 +08:00
END AS cost_amount,
(DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1) AS storage_days
FROM wms_material_coil m
2025-12-03 10:32:06 +08:00
LEFT JOIN wms_cost_standard_config cs
2025-12-02 17:58:16 +08:00
ON cs.status = 1
AND DATE(m.create_time) >= cs.effective_date
AND (cs.expire_date IS NULL OR DATE(m.create_time) &lt;= cs.expire_date)
WHERE m.data_type = 1
AND m.del_flag = 0
AND m.export_time IS NULL
<if test="enterCoilNo != null and enterCoilNo != ''">
2026-01-27 16:54:46 +08:00
AND m.current_coil_no LIKE CONCAT(#{enterCoilNo}, '%')
2025-12-02 17:58:16 +08:00
</if>
) t
2026-01-27 16:54:46 +08:00
GROUP BY t.current_coil_no
ORDER BY t.current_coil_no DESC
2025-12-02 17:58:16 +08:00
LIMIT #{offset}, #{pageSize}
</select>
2026-01-27 16:54:46 +08:00
<!-- 囤积成本(按当前钢卷号聚合)列表总数 -->
2025-12-02 17:58:16 +08:00
<select id="countStockpileByEnterCoilNo" resultType="long">
SELECT
COUNT(*) AS cnt
FROM (
2026-01-27 16:54:46 +08:00
SELECT m.current_coil_no
2025-12-02 17:58:16 +08:00
FROM wms_material_coil m
WHERE m.data_type = 1
AND m.del_flag = 0
2025-12-03 16:29:00 +08:00
and m.status = 0
2025-12-02 17:58:16 +08:00
AND m.export_time IS NULL
<if test="enterCoilNo != null and enterCoilNo != ''">
2026-01-27 16:54:46 +08:00
AND m.current_coil_no LIKE CONCAT(#{enterCoilNo}, '%')
2025-12-02 17:58:16 +08:00
</if>
2026-01-27 16:54:46 +08:00
GROUP BY m.current_coil_no
2025-12-02 17:58:16 +08:00
) t
</select>
2026-01-27 16:54:46 +08:00
<!-- 囤积成本(按当前钢卷号聚合)汇总 -->
2025-12-02 17:58:16 +08:00
<select id="selectStockpileSummaryByEnterCoilNo" resultType="java.util.HashMap">
SELECT
SUM(t.net_weight_ton) AS totalNetWeight,
SUM(t.gross_weight_ton) AS totalGrossWeight,
SUM(t.cost_amount) AS totalCost,
2025-12-03 16:29:00 +08:00
AVG(t.storage_days) AS avgStorageDays,
SUM(t.today_cost_amount) AS todayCost
2025-12-02 17:58:16 +08:00
FROM (
SELECT
2025-12-03 10:32:06 +08:00
IFNULL(m.net_weight, 0) AS net_weight_ton,
IFNULL(m.gross_weight, 0) AS gross_weight_ton,
2025-12-02 17:58:16 +08:00
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
2025-12-03 16:29:00 +08:00
WHEN IFNULL(m.net_weight, 0) > 0 THEN m.net_weight
ELSE IFNULL(m.gross_weight, 0)
2025-12-02 17:58:16 +08:00
END
2025-12-03 10:32:06 +08:00
) * cs.unit_cost * (DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1)
2025-12-02 17:58:16 +08:00
END AS cost_amount,
2025-12-03 16:29:00 +08:00
CASE
WHEN m.status = 0 THEN (
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
WHEN IFNULL(m.net_weight, 0) > 0 THEN m.net_weight
ELSE IFNULL(m.gross_weight, 0)
END
) * cs.unit_cost
END
)
ELSE 0
END AS today_cost_amount,
2025-12-02 17:58:16 +08:00
(DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1) AS storage_days
FROM wms_material_coil m
2025-12-03 10:32:06 +08:00
LEFT JOIN wms_cost_standard_config cs
2025-12-02 17:58:16 +08:00
ON cs.status = 1
AND DATE(m.create_time) >= cs.effective_date
AND (cs.expire_date IS NULL OR DATE(m.create_time) &lt;= cs.expire_date)
WHERE m.data_type = 1
AND m.del_flag = 0
2025-12-03 16:29:00 +08:00
and m.status = 0
2025-12-02 17:58:16 +08:00
AND m.export_time IS NULL
<if test="enterCoilNo != null and enterCoilNo != ''">
AND m.enter_coil_no LIKE CONCAT(#{enterCoilNo}, '%')
</if>
) t
</select>
<select id="selectOverviewFromMaterialCoil" resultType="java.util.HashMap">
SELECT
COUNT(*) AS totalCoils,
SUM(t.net_weight_ton) AS totalNetWeight,
SUM(t.gross_weight_ton) AS totalGrossWeight,
AVG(t.storage_days) AS avgStorageDays,
2025-12-03 16:29:00 +08:00
SUM(t.cost_amount) AS totalCost,
SUM(t.today_cost_amount) AS todayCost
2025-12-02 17:58:16 +08:00
FROM (
SELECT
2025-12-03 10:32:06 +08:00
IFNULL(m.net_weight, 0) AS net_weight_ton,
IFNULL(m.gross_weight, 0) AS gross_weight_ton,
2025-12-02 17:58:16 +08:00
(DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1) AS storage_days,
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
2025-12-03 16:29:00 +08:00
WHEN IFNULL(m.net_weight, 0) > 0 THEN m.gross_weight
ELSE IFNULL(m.gross_weight, 0)
2025-12-02 17:58:16 +08:00
END
2025-12-03 10:32:06 +08:00
) * cs.unit_cost * (DATEDIFF(CURDATE(), IFNULL(m.create_time, CURDATE())) + 1)
2025-12-03 16:29:00 +08:00
END AS cost_amount,
CASE
WHEN m.status = 0 THEN (
CASE
WHEN cs.unit_cost IS NULL THEN 0
ELSE (
CASE
WHEN IFNULL(m.net_weight, 0) > 0 THEN m.net_weight
ELSE IFNULL(m.gross_weight, 0)
END
) * cs.unit_cost
END
)
ELSE 0
END AS today_cost_amount
2025-12-02 17:58:16 +08:00
FROM wms_material_coil m
2025-12-03 10:32:06 +08:00
LEFT JOIN wms_cost_standard_config cs
2025-12-02 17:58:16 +08:00
ON cs.status = 1
AND DATE(m.create_time) >= cs.effective_date
AND (cs.expire_date IS NULL OR DATE(m.create_time) &lt;= cs.expire_date)
WHERE m.data_type = 1
AND m.del_flag = 0
2025-12-03 16:29:00 +08:00
AND m.status = 0
2025-12-02 17:58:16 +08:00
AND m.export_time IS NULL
) t
</select>
2025-12-03 10:32:06 +08:00
<!-- 成本趋势(按日统计 wms_cost_coil_daily -->
2025-12-02 17:58:16 +08:00
<select id="selectCostTrend" resultType="java.util.HashMap">
SELECT
ccd.calc_date AS date,
SUM(ccd.total_cost) AS totalCost,
SUM(ccd.net_weight) AS totalNetWeight,
2025-12-03 10:32:06 +08:00
SUM(ccd.daily_cost) AS totalDailyCost,
COUNT(*) AS coilCount
FROM wms_cost_coil_daily ccd
2025-12-02 17:58:16 +08:00
WHERE 1 = 1
<if test="startDate != null">
AND ccd.calc_date &gt;= #{startDate}
</if>
<if test="endDate != null">
AND ccd.calc_date &lt;= #{endDate}
</if>
GROUP BY ccd.calc_date
ORDER BY ccd.calc_date
</select>
<!-- ==================== 成本检索(实时计算) ==================== -->
<sql id="MaterialCoilCostBase">
SELECT
m.enter_coil_no,
m.coil_id,
m.current_coil_no,
2025-12-03 10:32:06 +08:00
IFNULL(m.net_weight, 0) AS net_weight_ton,
IFNULL(m.gross_weight, 0) AS gross_weight_ton,
2025-12-02 17:58:16 +08:00
CASE
WHEN IFNULL(m.gross_weight, 0) > 0 THEN 'gross'
ELSE 'net'
END AS weight_basis,
CASE
2025-12-03 16:29:00 +08:00
WHEN IFNULL(m.net_weight, 0) = 0 AND IFNULL(m.gross_weight, 0) > 0 THEN m.gross_weight
2025-12-02 17:58:16 +08:00
ELSE IFNULL(m.net_weight, 0)
2025-12-03 10:32:06 +08:00
END AS charge_weight_ton,
2025-12-02 17:58:16 +08:00
DATE(m.create_time) AS start_date,
CASE
WHEN m.export_time IS NOT NULL THEN DATE_SUB(DATE(m.export_time), INTERVAL 1 DAY)
WHEN #{calcDate} IS NOT NULL THEN #{calcDate}
ELSE CURDATE()
END AS raw_end_date,
CASE
WHEN m.export_time IS NULL THEN 0
ELSE 1
END AS is_shipped,
IFNULL(cs.unit_cost, 0) AS unit_cost,
m.warehouse_id,
COALESCE(w.warehouse_name, '-') AS warehouse_name
FROM wms_material_coil m
2025-12-03 10:32:06 +08:00
LEFT JOIN wms_cost_standard_config cs
2025-12-02 17:58:16 +08:00
ON cs.status = 1
AND DATE(m.create_time) >= cs.effective_date
AND (cs.expire_date IS NULL OR DATE(m.create_time) &lt;= cs.expire_date)
LEFT JOIN wms_warehouse w ON w.warehouse_id = m.warehouse_id AND w.del_flag = 0
WHERE m.data_type = 1
AND m.del_flag = 0
AND m.enter_coil_no IS NOT NULL
<if test="enterCoilNo != null and enterCoilNo != ''">
AND m.enter_coil_no LIKE CONCAT(#{enterCoilNo}, '%')
</if>
</sql>
<sql id="MaterialCoilCostCalc">
SELECT
base.*,
CASE
WHEN base.raw_end_date &lt; base.start_date THEN base.start_date
ELSE base.raw_end_date
END AS end_date,
CASE
WHEN DATEDIFF(
CASE
WHEN base.raw_end_date &lt; base.start_date THEN base.start_date
ELSE base.raw_end_date
END,
base.start_date
) &lt; 0 THEN 1
ELSE DATEDIFF(
CASE
WHEN base.raw_end_date &lt; base.start_date THEN base.start_date
ELSE base.raw_end_date
END,
base.start_date
) + 1
END AS storage_days
FROM (
<include refid="MaterialCoilCostBase"/>
) base
</sql>
<select id="selectMaterialCostSummary" resultType="java.util.HashMap">
SELECT
COUNT(*) AS totalCoils,
IFNULL(SUM(calc_data.net_weight_ton), 0) AS totalNetWeight,
IFNULL(SUM(calc_data.gross_weight_ton), 0) AS totalGrossWeight,
IFNULL(SUM(calc_data.charge_weight_ton * calc_data.unit_cost * calc_data.storage_days), 0) AS totalCost,
IFNULL(AVG(calc_data.storage_days), 0) AS avgStorageDays,
IFNULL(SUM(CASE WHEN calc_data.is_shipped = 1 THEN 1 ELSE 0 END), 0) AS shippedCount,
IFNULL(SUM(CASE WHEN calc_data.is_shipped = 0 THEN 1 ELSE 0 END), 0) AS unshippedCount
FROM (
<include refid="MaterialCoilCostCalc"/>
) calc_data
</select>
<select id="countMaterialCostCards" resultType="long">
SELECT COUNT(1)
FROM (
<include refid="MaterialCoilCostCalc"/>
) calc_data
</select>
<select id="selectMaterialCostCards" resultType="java.util.HashMap">
SELECT
calc_data.enter_coil_no AS enterCoilNo,
calc_data.coil_id AS coilId,
calc_data.current_coil_no AS currentCoilNo,
calc_data.net_weight_ton AS netWeightTon,
calc_data.gross_weight_ton AS grossWeightTon,
calc_data.weight_basis AS weightBasis,
calc_data.storage_days AS storageDays,
ROUND(calc_data.unit_cost, 2) AS unitCost,
ROUND(calc_data.charge_weight_ton * calc_data.unit_cost, 2) AS dailyCost,
ROUND(calc_data.charge_weight_ton * calc_data.unit_cost * calc_data.storage_days, 2) AS totalCost,
calc_data.is_shipped AS isShipped,
calc_data.start_date AS startDate,
calc_data.end_date AS endDate,
calc_data.warehouse_id AS warehouseId,
calc_data.warehouse_name AS warehouseName
FROM (
<include refid="MaterialCoilCostCalc"/>
) calc_data
ORDER BY calc_data.start_date DESC, calc_data.current_coil_no DESC
LIMIT #{offset}, #{pageSize}
</select>
<!-- 删除指定日期的成本记录 -->
<delete id="deleteByCalcDate">
2025-12-03 10:32:06 +08:00
DELETE FROM wms_cost_coil_daily
2025-12-02 17:58:16 +08:00
WHERE calc_date = #{calcDate}
</delete>
</mapper>