Files
klp-oa/klp-wms/src/main/resources/mapper/klp/WmsMaterialCoilMapper.xml
Joshi 2dbbb942ef refactor(wms): 优化卷材变更日志记录逻辑
- 重构加工变换日志记录,支持合并、分卷等不同场景
- 修改快照对比逻辑,合并新旧键值以避免遗漏空值字段
- 调整仓库层级排序算法,移除四级库位的序号修正
- 注释掉卷材合同关系中的日志记录代码
- 在撤回导出时清空操作人员信息
2026-07-11 16:49:20 +08:00

1149 lines
51 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.klp.mapper.WmsMaterialCoilMapper">
<resultMap type="com.klp.domain.WmsMaterialCoil" id="WmsMaterialCoilResult">
<result property="coilId" column="coil_id"/>
<result property="parentCoilId" column="parent_coil_id"/>
<result property="enterCoilNo" column="enter_coil_no"/>
<result property="currentCoilNo" column="current_coil_no"/>
<result property="supplierCoilNo" column="supplier_coil_no"/>
<result property="dataType" column="data_type"/>
<result property="warehouseId" column="warehouse_id"/>
<result property="nextWarehouseId" column="next_warehouse_id"/>
<result property="qrcodeRecordId" column="qrcode_record_id"/>
<result property="team" column="team"/>
<result property="hasMergeSplit" column="has_merge_split"/>
<result property="parentCoilNos" column="parent_coil_nos"/>
<result property="itemType" column="item_type"/>
<result property="itemId" column="item_id"/>
<result property="grossWeight" column="gross_weight"/>
<result property="netWeight" column="net_weight"/>
<result property="length" column="length"/>
<result property="actualLength" column="actual_length"/>
<result property="actualWidth" column="actual_width"/>
<result property="actualThickness" column="actual_thickness"/>
<result property="productionStartTime" column="production_start_time"/>
<result property="productionEndTime" column="production_end_time"/>
<result property="productionDuration" column="production_duration"/>
<result property="reservedWidth" column="reserved_width"/>
<result property="status" column="status"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
<result property="saleId" column="sale_id"/>
<result property="saleName" column="sale_name"/>
<result property="coilSurfaceTreatment" column="coil_surface_treatment"/>
<result property="transferType" column="transfer_type"/>
<result property="specId" column="spec_id"/>
<result property="versionId" column="version_id"/>
<result property="theoreticalThickness" column="theoretical_thickness"/>
<result property="scheduleThickness" column="schedule_thickness"/>
<result property="theoreticalLength" column="theoretical_length"/>
<result property="chromePlateCoilNo" column="chrome_plate_coil_no"/>
<result property="contractNo" column="contract_no"/>
</resultMap>
<!-- 统计查询专用的ResultMap -->
<resultMap type="com.klp.domain.vo.WmsMaterialCoilVo" id="WmsMaterialCoilDistributionResult">
<result property="warehouseId" column="warehouse_id"/>
<result property="warehouseName" column="warehouse_name"/>
<result property="itemType" column="item_type"/>
<result property="coilCount" column="coil_count"/>
<result property="totalGrossWeight" column="total_gross_weight"/>
<result property="totalNetWeight" column="total_net_weight"/>
</resultMap>
<!-- 查询各个库区中钢卷的汇总分布情况(按仓库汇总) -->
<select id="getDistributionByWarehouse" resultType="java.util.Map">
SELECT
w.warehouse_id,
w.warehouse_name,
COUNT(mc.coil_id) as coil_count,
COALESCE(SUM(mc.gross_weight), 0) as total_gross_weight,
COALESCE(SUM(mc.net_weight), 0) as total_net_weight
FROM wms_warehouse w
LEFT JOIN wms_material_coil mc ON w.warehouse_id = mc.warehouse_id
AND mc.data_type = 1
AND mc.del_flag = '0'
and (mc.material_type='成品' or mc.material_type='原料')
and mc.status!=1
WHERE w.del_flag = '0'
<if test="itemType != null and itemType != ''">
AND mc.item_type = #{itemType}
</if>
<if test="itemId != null">
AND mc.item_id = #{itemId}
</if>
GROUP BY w.warehouse_id, w.warehouse_name
ORDER BY w.warehouse_id
</select>
<!-- ==================== 公共 SQL 片段 ==================== -->
<sql id="baseColumns">
mc.coil_id,
mc.parent_coil_id,
mc.export_time,
mc.export_by,
mc.enter_coil_no,
mc.current_coil_no,
mc.supplier_coil_no,
mc.data_type,
mc.material_type,
mc.next_warehouse_id,
mc.qrcode_record_id,
mc.team,
mc.has_merge_split,
mc.parent_coil_nos,
mc.item_type,
mc.item_id,
mc.gross_weight,
mc.net_weight,
mc.status,
mc.remark,
mc.warehouse_id,
mc.actual_warehouse_id,
mc.del_flag,
mc.create_time,
mc.update_time,
mc.create_by,
mc.update_by,
mc.quality_status,
mc.trimming_requirement,
mc.packaging_requirement,
mc.packing_status,
mc.length,
mc.actual_length,
mc.actual_width,
mc.actual_thickness,
mc.production_start_time,
mc.production_end_time,
mc.production_duration,
mc.coil_surface_treatment,
mc.reserved_width,
mc.coating_type,
mc.temper_grade,
mc.business_purpose,
mc.is_related_to_order,
mc.exclusive_status,
mc.transfer_type,
mc.theoretical_thickness,
mc.schedule_thickness,
mc.theoretical_length,
mc.chrome_plate_coil_no,
mc.sale_name AS saleName,
mc.contract_no AS contractNo,
w.warehouse_name AS warehouseName,
nw.warehouse_name AS nextWarehouseName,
aw.actual_warehouse_name AS actualWarehouseName,
CASE WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL END AS specification,
CASE WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL END AS material,
CASE WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL END AS manufacturer,
CASE WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL END AS surfaceTreatmentDesc,
CASE WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL END AS zincLayer,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL
END as itemName,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_code
WHEN mc.item_type = 'product' THEN p.product_code
ELSE NULL
END as itemCode,
COALESCE(ca.abnormal_count, 0) AS abnormalCount
</sql>
<sql id="baseFrom">
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_warehouse nw ON mc.next_warehouse_id = nw.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
LEFT JOIN (
SELECT coil_id, COUNT(*) AS abnormal_count
FROM wms_coil_abnormal
WHERE del_flag = 0
GROUP BY coil_id
) ca ON mc.coil_id = ca.coil_id
</sql>
<!-- ==================== 各场景查询 ==================== -->
<select id="selectVoPagePlus" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT <include refid="baseColumns"/>
<include refid="baseFrom"/>
${ew.customSqlSegment}
</select>
<!-- orderBy=true 专用包含库位排序辅助字段aw_sort_key/aw_layer_key/aw_id_key以及父库位 join -->
<select id="selectVoPagePlusOrderBy" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT
<include refid="baseColumns"/>,
COALESCE(CASE WHEN aw.actual_warehouse_type = 4 THEN awp.sort_no ELSE aw.sort_no END, 0) AS aw_sort_key,
CASE WHEN aw.actual_warehouse_type = 4 THEN CAST(SUBSTRING_INDEX(aw.actual_warehouse_code, '-', -1) AS UNSIGNED) ELSE 0 END AS aw_layer_key,
COALESCE(aw.actual_warehouse_id, 0) AS aw_id_key
<include refid="baseFrom"/>
LEFT JOIN wms_actual_warehouse awp ON aw.parent_id = awp.actual_warehouse_id
${ew.customSqlSegment}
</select>
<!-- orderByPlanDesc=true 专用:包含发货计划 join支持按计划创建时间倒序排序 -->
<select id="selectVoPagePlusPlanOrder" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT <include refid="baseColumns"/>
<include refid="baseFrom"/>
LEFT JOIN wms_delivery_waybill_detail d ON d.coil_id = mc.coil_id AND d.del_flag = 0
LEFT JOIN wms_delivery_waybill wb ON wb.waybill_id = d.waybill_id AND wb.del_flag = 0
LEFT JOIN wms_delivery_plan pl ON pl.plan_id = wb.plan_id AND pl.del_flag = 0
${ew.customSqlSegment}
</select>
<!-- 查询不同类型的钢卷在不同库区的分布情况 -->
<select id="getDistributionByItemType" resultType="java.util.Map">
SELECT
mc.item_type,
mc.item_id,
w.warehouse_id,
w.warehouse_name,
COUNT(mc.coil_id) as coil_count,
COALESCE(SUM(mc.gross_weight), 0) as total_gross_weight,
COALESCE(SUM(mc.net_weight), 0) as total_net_weight,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL
END as itemName,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_code
WHEN mc.item_type = 'product' THEN p.product_code
ELSE NULL
END as itemCode,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL
END as specification,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL
END as material,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL
END as surfaceTreatmentDesc,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL
END as zincLayer,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL
END as manufacturer
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
WHERE mc.data_type = 1
AND mc.del_flag = '0'
AND (w.del_flag = '0' OR w.del_flag IS NULL)
and (mc.material_type='成品' or mc.material_type='原料')
and mc.status!=1
<if test="itemType != null and itemType != ''">
AND mc.item_type = #{itemType}
</if>
<if test="itemId != null">
AND mc.item_id = #{itemId}
</if>
GROUP BY mc.item_type, mc.item_id, w.warehouse_id, w.warehouse_name, itemName, itemCode, specification, material,
surfaceTreatmentDesc, zincLayer, manufacturer
ORDER BY mc.item_type, mc.item_id, w.warehouse_id
</select>
<select id="selectVoListWithDynamicJoin" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT mc.*,
w.warehouse_name AS warehouseName,
aw.actual_warehouse_name AS actualWarehouseName,
CASE WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL END AS specification,
CASE WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL END AS material,
CASE WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL END AS manufacturer,
CASE WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL END AS surfaceTreatmentDesc,
CASE WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL END AS zincLayer,
-- 物品名称和编号(用于兼容)
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL
END as itemName,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_code
WHEN mc.item_type = 'product' THEN p.product_code
ELSE NULL
END as itemCode,
-- 异常数量统计
COALESCE(ca.abnormal_count, 0) AS abnormalCount
FROM wms_material_coil mc
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN (
SELECT coil_id, COUNT(*) AS abnormal_count
FROM wms_coil_abnormal
WHERE del_flag = 0
GROUP BY coil_id
) ca ON mc.coil_id = ca.coil_id
${ew.customSqlSegment}
</select>
<select id="getDistributionByActualWarehouse" resultType="java.util.Map">
SELECT
w.actual_warehouse_id,
w.actual_warehouse_name,
COUNT(mc.coil_id) as coil_count,
COALESCE(SUM(mc.gross_weight), 0) as total_gross_weight,
COALESCE(SUM(mc.net_weight), 0) as total_net_weight
FROM wms_actual_warehouse w
LEFT JOIN wms_material_coil mc ON w.actual_warehouse_id = mc.actual_warehouse_id
AND mc.data_type = 1
AND mc.del_flag = '0'
and (mc.material_type='成品' or mc.material_type='原料')
and mc.status!=1
WHERE w.del_flag = '0'
<if test="itemType != null and itemType != ''">
AND mc.item_type = #{itemType}
</if>
<if test="itemId != null">
AND mc.item_id = #{itemId}
</if>
GROUP BY w.actual_warehouse_id, w.actual_warehouse_name
ORDER BY w.actual_warehouse_id
</select>
<select id="getDistributionByActualItemType" resultType="java.util.Map">
SELECT
mc.item_type,
mc.item_id,
w.actual_warehouse_id,
w.actual_warehouse_name,
COUNT(mc.coil_id) as coil_count,
COALESCE(SUM(mc.gross_weight), 0) as total_gross_weight,
COALESCE(SUM(mc.net_weight), 0) as total_net_weight,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL
END as itemName,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_code
WHEN mc.item_type = 'product' THEN p.product_code
ELSE NULL
END as itemCode,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL
END as specification,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL
END as material,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL
END as surfaceTreatmentDesc,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL
END as zincLayer,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL
END as manufacturer
FROM wms_material_coil mc
LEFT JOIN wms_actual_warehouse w ON mc.actual_warehouse_id = w.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
WHERE mc.data_type = 1
AND mc.del_flag = '0'
AND (w.del_flag = '0' OR w.del_flag IS NULL)
and (mc.material_type='成品' or mc.material_type='原料')
and mc.status!=1
<if test="itemType != null and itemType != ''">
AND mc.item_type = #{itemType}
</if>
<if test="itemId != null">
AND mc.item_id = #{itemId}
</if>
GROUP BY mc.item_type, mc.item_id, w.actual_warehouse_id, w.actual_warehouse_name, itemName, itemCode, specification,
material,surfaceTreatmentDesc, zincLayer, manufacturer
ORDER BY mc.item_type, mc.item_id, w.actual_warehouse_id
</select>
<!-- 查询钢卷报表数据:轻量级,仅返回必要字段 -->
<select id="selectReportList" resultType="com.klp.domain.vo.WmsMaterialCoilReportVo">
SELECT
mc.coil_id AS coilId,
mc.net_weight AS netWeight,
mc.warehouse_id AS warehouseId,
mc.quality_status AS qualityStatus,
mc.team AS team,
mc.create_time AS createTime
FROM wms_material_coil mc
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
${ew.customSqlSegment}
</select>
<!-- 查询钢卷环比报表数据:轻量级,包含实际长度、理论长度、理论厚度 -->
<select id="selectPeriodComparisonList" resultType="com.klp.domain.vo.WmsMaterialCoilPeriodComparisonVo">
SELECT
mc.coil_id AS coilId,
mc.net_weight AS netWeight,
mc.warehouse_id AS warehouseId,
mc.quality_status AS qualityStatus,
mc.team AS team,
mc.create_time AS createTime,
mc.actual_length AS actualLength,
mc.theoretical_length AS theoreticalLength,
mc.theoretical_thickness AS theoreticalThickness
FROM wms_material_coil mc
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
${ew.customSqlSegment}
</select>
<!-- 导出查询:包含所有需要的字段 -->
<select id="selectExportList" resultType="com.klp.domain.vo.WmsMaterialCoilExportVo">
SELECT
-- 类型(中文显示)
CASE
WHEN mc.item_type = 'product' THEN '成品'
WHEN mc.item_type = 'raw_material' THEN '原料'
ELSE mc.item_type
END AS itemTypeDesc,
-- 物品ID
mc.item_id AS itemId,
-- 钢卷ID
mc.coil_id AS coilId,
-- 数据类型
mc.data_type AS dataType,
-- 逻辑库区
w.warehouse_name AS warehouseName,
-- 实际库区
aw.actual_warehouse_name AS actualWarehouseName,
-- 入场卷号
mc.enter_coil_no AS enterCoilNo,
-- 厂家卷号
mc.supplier_coil_no AS supplierCoilNo,
-- 成品卷号
mc.current_coil_no AS currentCoilNo,
-- 日期
mc.create_time AS createTime,
-- 班组
mc.team AS team,
-- 发货时间
mc.export_time AS exportTime,
-- 新增:更新时间(用于发货时间为空时兜底)
mc.update_time AS updateTime,
-- 发货人
mc.export_by AS exportBy,
-- 重量
mc.net_weight AS netWeight,
-- 长度
mc.length AS length,
-- 实测长度
mc.actual_length AS actualLength,
-- 实测宽度
mc.actual_width AS actualWidth,
-- 实测厚度
mc.actual_thickness AS actualThickness,
-- 镀层种类
mc.coating_type AS coatingType,
-- 调制度
mc.temper_grade AS temperGrade,
-- 业务用途
mc.business_purpose AS businessPurpose,
-- 是否与订单相关
mc.is_related_to_order AS isRelatedToOrder,
-- 切边要求
mc.trimming_requirement AS trimmingRequirement,
-- 包装种类
mc.packaging_requirement AS packagingRequirement,
-- 产品状态(直接展示原始值)
mc.quality_status AS qualityStatus,
-- 打包状态(直接展示原始值)
mc.packing_status AS packingStatus,
-- 销售
mc.sale_name AS saleName,
-- 合同
mc.contract_no AS contractNo,
-- 调拨类型
mc.transfer_type AS transferType,
-- 理论厚度
mc.theoretical_thickness AS theoreticalThickness,
-- 排产厚度
mc.schedule_thickness AS scheduleThickness,
-- 理论长度
mc.theoretical_length AS theoreticalLength,
-- 工序卷号
mc.chrome_plate_coil_no AS chromePlateCoilNo,
-- 库存状态(中文显示)
CASE
WHEN mc.status = 0 THEN '在库'
WHEN mc.status = 1 THEN '已发货'
ELSE CAST(mc.status AS CHAR)
END AS statusDesc,
-- 备注
mc.remark AS remark,
-- 名称(根据类型从不同表获取)
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL
END AS itemName,
-- 规格
CASE
WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL
END AS specification,
-- 材质
CASE
WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL
END AS material,
-- 厂家
CASE
WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL
END AS manufacturer,
-- 表面处理
CASE
WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL
END AS surfaceTreatmentDesc,
-- 锌层
CASE
WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL
END AS zincLayer
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
${ew.customSqlSegment}
</select>
<!-- 发货报表导出:按 coilIds 联查钢卷 + 发货单明细 + 发货单主表 + 发货计划 -->
<select id="selectDeliveryExportListByCoilIds" resultType="com.klp.domain.vo.WmsMaterialCoilDeliveryExportVo">
SELECT
-- 钢卷ID
mc.coil_id AS coilId,
-- 发货人
mc.export_by AS exportBy,
-- 类型(中文显示)
CASE
WHEN mc.item_type = 'product' THEN '成品'
WHEN mc.item_type = 'raw_material' THEN '原料'
ELSE mc.item_type
END AS itemTypeDesc,
mc.item_id AS itemId,
mc.data_type AS dataType,
w.warehouse_name AS warehouseName,
aw.actual_warehouse_name AS actualWarehouseName,
mc.enter_coil_no AS enterCoilNo,
mc.supplier_coil_no AS supplierCoilNo,
mc.current_coil_no AS currentCoilNo,
mc.create_time AS createTime,
mc.export_time AS exportTime,
mc.update_time AS updateTime,
mc.net_weight AS netWeight,
mc.length AS length,
mc.coating_type AS coatingType,
mc.temper_grade AS temperGrade,
mc.business_purpose AS businessPurpose,
mc.is_related_to_order AS isRelatedToOrder,
mc.trimming_requirement AS trimmingRequirement,
mc.packaging_requirement AS packagingRequirement,
mc.quality_status AS qualityStatus,
mc.packing_status AS packingStatus,
mc.sale_name AS saleName,
mc.contract_no AS contractNo,
mc.transfer_type AS transferType,
mc.theoretical_thickness AS theoreticalThickness,
mc.schedule_thickness AS scheduleThickness,
mc.theoretical_length AS theoreticalLength,
mc.chrome_plate_coil_no AS chromePlateCoilNo,
CASE
WHEN mc.status = 0 THEN '在库'
WHEN mc.status = 1 THEN '已发货'
ELSE CAST(mc.status AS CHAR)
END AS statusDesc,
mc.remark AS remark,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN pdt.product_name
ELSE NULL
END AS itemName,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN pdt.specification
ELSE NULL
END AS specification,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN pdt.material
ELSE NULL
END AS material,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN pdt.manufacturer
ELSE NULL
END AS manufacturer,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN pdt.surface_treatment_desc
ELSE NULL
END AS surfaceTreatmentDesc,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN pdt.zinc_layer
ELSE NULL
END AS zincLayer,
-- 发货计划
pl.plan_id AS planId,
pl.plan_name AS planName,
pl.plan_date AS planDate,
-- 发货单主表
wb.waybill_id AS waybillId,
wb.waybill_no AS waybillNo,
wb.waybill_name AS waybillName,
wb.license_plate AS licensePlate,
wb.consignee_unit AS consigneeUnit,
wb.sender_unit AS senderUnit,
wb.delivery_time AS deliveryTime,
wb.weighbridge AS weighbridge,
wb.sales_person AS salesPerson,
wb.principal AS principal,
wb.principal_phone AS principalPhone,
wb.status AS waybillStatus,
wb.remark AS waybillRemark,
-- 发货单明细
dtl.detail_id AS detailId,
dtl.product_name AS detailProductName,
dtl.edge_type AS detailEdgeType,
dtl.packaging AS detailPackaging,
dtl.settlement_type AS detailSettlementType,
dtl.raw_material_factory AS detailRawMaterialFactory,
dtl.coil_no AS detailCoilNo,
dtl.specification AS detailSpecification,
dtl.material AS detailMaterial,
dtl.quantity AS detailQuantity,
dtl.weight AS detailWeight,
dtl.unit_price AS detailUnitPrice,
dtl.remark AS detailRemark
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product pdt ON mc.item_type = 'product' AND mc.item_id = pdt.product_id
LEFT JOIN wms_delivery_waybill_detail dtl ON dtl.coil_id = mc.coil_id AND dtl.del_flag = 0
LEFT JOIN wms_delivery_waybill wb ON wb.waybill_id = dtl.waybill_id AND wb.del_flag = 0
LEFT JOIN wms_delivery_plan pl ON pl.plan_id = wb.plan_id AND pl.del_flag = 0
WHERE mc.del_flag = 0
AND mc.coil_id IN
<foreach collection="coilIds" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
ORDER BY mc.create_time DESC
</select>
<!-- 退火报表导出:按 coilIds 联查钢卷 + 退火计划 + 退火计划钢卷关系 -->
<select id="selectAnnealExportListByCoilIds" resultType="com.klp.domain.vo.WmsMaterialCoilAnnealExportVo">
SELECT
mc.coil_id AS coilId,
CASE
WHEN mc.item_type = 'product' THEN '成品'
WHEN mc.item_type = 'raw_material' THEN '原料'
ELSE mc.item_type
END AS itemTypeDesc,
mc.item_id AS itemId,
mc.data_type AS dataType,
w.warehouse_name AS warehouseName,
aw.actual_warehouse_name AS actualWarehouseName,
mc.enter_coil_no AS enterCoilNo,
mc.supplier_coil_no AS supplierCoilNo,
mc.current_coil_no AS currentCoilNo,
mc.create_time AS createTime,
mc.export_time AS exportTime,
mc.update_time AS updateTime,
mc.net_weight AS netWeight,
mc.length AS length,
mc.coating_type AS coatingType,
mc.temper_grade AS temperGrade,
mc.business_purpose AS businessPurpose,
mc.is_related_to_order AS isRelatedToOrder,
mc.trimming_requirement AS trimmingRequirement,
mc.packaging_requirement AS packagingRequirement,
mc.quality_status AS qualityStatus,
mc.packing_status AS packingStatus,
mc.transfer_type AS transferType,
mc.theoretical_thickness AS theoreticalThickness,
mc.schedule_thickness AS scheduleThickness,
mc.theoretical_length AS theoreticalLength,
mc.chrome_plate_coil_no AS chromePlateCoilNo,
CASE
WHEN mc.status = 0 THEN '在库'
WHEN mc.status = 1 THEN '已发货'
ELSE CAST(mc.status AS CHAR)
END AS statusDesc,
mc.remark AS remark,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN pdt.product_name
ELSE NULL
END AS itemName,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN pdt.specification
ELSE NULL
END AS specification,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN pdt.material
ELSE NULL
END AS material,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN pdt.manufacturer
ELSE NULL
END AS manufacturer,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN pdt.surface_treatment_desc
ELSE NULL
END AS surfaceTreatmentDesc,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN pdt.zinc_layer
ELSE NULL
END AS zincLayer,
fp.plan_no AS planNo,
fp.plan_start_time AS planStartTime,
fp.actual_start_time AS actualStartTime,
fp.end_time AS endTime,
fp.target_furnace_id AS targetFurnaceId,
f.furnace_name AS targetFurnaceName,
fp.status AS status,
fp.remark AS remark,
fpc.logic_warehouse_id AS logicWarehouseId,
lw.warehouse_name AS logicWarehouseName,
fpc.furnace_level AS furnaceLevel
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product pdt ON mc.item_type = 'product' AND mc.item_id = pdt.product_id
LEFT JOIN wms_furnace_plan_coil fpc ON fpc.coil_id = mc.coil_id AND fpc.del_flag = 0
LEFT JOIN wms_furnace_plan fp ON fp.plan_id = fpc.plan_id AND fp.del_flag = 0
LEFT JOIN wms_furnace f ON f.furnace_id = fp.target_furnace_id AND f.del_flag = 0
LEFT JOIN wms_warehouse lw ON lw.warehouse_id = fpc.logic_warehouse_id AND lw.del_flag = 0
WHERE mc.del_flag = 0
AND mc.coil_id IN
<foreach collection="coilIds" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
ORDER BY mc.create_time DESC
</select>
<!-- 查询重复入场卷号的钢卷信息 -->
<select id="selectDuplicateEnterCoilNoList" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT mc.*,
w.warehouse_name AS warehouseName,
aw.actual_warehouse_name AS actualWarehouseName,
CASE WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL END AS specification,
CASE WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL END AS material,
CASE WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL END AS manufacturer,
CASE WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL END AS surfaceTreatmentDesc,
CASE WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL END AS zincLayer,
-- 物品名称和编号(用于兼容)
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL
END as itemName,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_code
WHEN mc.item_type = 'product' THEN p.product_code
ELSE NULL
END as itemCode
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
WHERE mc.data_type = 1
AND mc.del_flag = 0
AND mc.enter_coil_no IN (
SELECT enter_coil_no
FROM wms_material_coil
WHERE data_type = 1
AND del_flag = 0
AND enter_coil_no IS NOT NULL
AND enter_coil_no != ''
GROUP BY enter_coil_no
HAVING COUNT(*) > 1
)
ORDER BY mc.enter_coil_no, mc.create_time
</select>
<!-- 查询重复当前卷号的钢卷信息 -->
<select id="selectDuplicateCurrentCoilNoList" resultType="com.klp.domain.vo.WmsMaterialCoilVo">
SELECT mc.*,
w.warehouse_name AS warehouseName,
aw.actual_warehouse_name AS actualWarehouseName,
CASE WHEN mc.item_type = 'raw_material' THEN rm.specification
WHEN mc.item_type = 'product' THEN p.specification
ELSE NULL END AS specification,
CASE WHEN mc.item_type = 'raw_material' THEN rm.material
WHEN mc.item_type = 'product' THEN p.material
ELSE NULL END AS material,
CASE WHEN mc.item_type = 'raw_material' THEN rm.manufacturer
WHEN mc.item_type = 'product' THEN p.manufacturer
ELSE NULL END AS manufacturer,
CASE WHEN mc.item_type = 'raw_material' THEN rm.surface_treatment_desc
WHEN mc.item_type = 'product' THEN p.surface_treatment_desc
ELSE NULL END AS surfaceTreatmentDesc,
CASE WHEN mc.item_type = 'raw_material' THEN rm.zinc_layer
WHEN mc.item_type = 'product' THEN p.zinc_layer
ELSE NULL END AS zincLayer,
-- 物品名称和编号(用于兼容)
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_name
WHEN mc.item_type = 'product' THEN p.product_name
ELSE NULL
END as itemName,
CASE
WHEN mc.item_type = 'raw_material' THEN rm.raw_material_code
WHEN mc.item_type = 'product' THEN p.product_code
ELSE NULL
END as itemCode
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
WHERE mc.data_type = 1
AND mc.del_flag = 0
AND mc.current_coil_no IN (
SELECT current_coil_no
FROM wms_material_coil
WHERE data_type = 1
AND del_flag = 0
AND current_coil_no IS NOT NULL
AND current_coil_no != ''
GROUP BY current_coil_no
HAVING COUNT(*) > 1
)
ORDER BY mc.current_coil_no, mc.create_time
</select>
<!-- 更新钢卷发货撤回:将发货时间置空,状态改为未发货 -->
<update id="updateForWithdrawExport">
UPDATE wms_material_coil
SET export_time = NULL,
export_by = NULL,
status = #{status}
WHERE coil_id = #{coilId}
</update>
<!-- 冷硬卷切边统计:按厚度、宽度、切边要求统计数量和重量 -->
<select id="selectCoilTrimStatistics" resultType="com.klp.domain.vo.dashboard.CoilTrimRawVo">
SELECT
SUBSTRING_INDEX(COALESCE(rm.specification, p.specification), '*', 1) AS thickness,
SUBSTRING_INDEX(COALESCE(rm.specification, p.specification), '*', -1) AS width,
CASE
WHEN mc.trimming_requirement = '净边' THEN '净边'
ELSE '毛边'
END AS trimmingRequirement,
COUNT(mc.coil_id) AS coilCount,
COALESCE(SUM(mc.net_weight), 0) AS totalWeight
FROM wms_material_coil mc
LEFT JOIN wms_raw_material rm ON mc.item_id = rm.raw_material_id AND mc.item_type = 'raw_material'
LEFT JOIN wms_product p ON mc.item_id = p.product_id AND mc.item_type = 'product'
WHERE mc.del_flag = 0
AND mc.data_type = 1
AND mc.status = 0
AND (
rm.raw_material_name LIKE '%冷硬卷%'
OR p.product_name LIKE '%冷硬卷%'
)
GROUP BY thickness, width, trimmingRequirement
ORDER BY thickness, width, trimmingRequirement
</select>
<!-- 类别宽度统计 -->
<select id="selectCategoryWidthStatistics" resultType="com.klp.domain.vo.dashboard.CategoryWidthRawVo">
SELECT
CASE
WHEN rm.raw_material_name LIKE '%热轧卷板%' OR p.product_name LIKE '%热轧卷板%' THEN '热轧卷板'
WHEN rm.raw_material_name LIKE '%冷硬卷%' OR p.product_name LIKE '%冷硬卷%' THEN '冷硬卷'
WHEN rm.raw_material_name LIKE '%冷轧卷%' OR p.product_name LIKE '%冷轧卷%' THEN '冷轧卷'
WHEN rm.raw_material_name LIKE '%镀锌卷%' OR p.product_name LIKE '%镀锌卷%' THEN
CASE
WHEN mc.business_purpose = '毛化镀锌卷' THEN '镀锌钢卷(毛化)'
WHEN mc.business_purpose = '镀锌管料' THEN '镀锌管料'
WHEN mc.business_purpose = '镀锌钢卷' THEN '镀锌钢卷(未光整)'
ELSE '镀锌卷'
END
ELSE '其他'
END AS category,
SUBSTRING_INDEX(COALESCE(rm.specification, p.specification), '*', -1) AS width,
CASE
WHEN mc.trimming_requirement = '净边' THEN '净边'
ELSE '毛边'
END AS isTrimmed,
COALESCE(SUM(mc.net_weight), 0) AS totalWeight
FROM wms_material_coil mc
LEFT JOIN wms_raw_material rm ON mc.item_id = rm.raw_material_id AND mc.item_type = 'raw_material'
LEFT JOIN wms_product p ON mc.item_id = p.product_id AND mc.item_type = 'product'
WHERE mc.del_flag = 0
AND mc.data_type = 1
AND mc.status = 0
AND (
rm.raw_material_name LIKE '%热轧卷板%'
OR p.product_name LIKE '%热轧卷板%'
OR rm.raw_material_name LIKE '%冷硬卷%'
OR p.product_name LIKE '%冷硬卷%'
OR rm.raw_material_name LIKE '%冷轧卷%'
OR p.product_name LIKE '%冷轧卷%'
OR rm.raw_material_name LIKE '%镀锌卷%'
OR p.product_name LIKE '%镀锌卷%'
)
GROUP BY category, width, isTrimmed
ORDER BY category, isTrimmed, width
</select>
<!-- 查询itemId和itemType不匹配的钢卷 -->
<select id="selectMismatchedItemCoils" resultMap="WmsMaterialCoilResult">
SELECT mc.*
FROM wms_material_coil mc
WHERE mc.del_flag = 0
AND mc.item_id IS NOT NULL
AND mc.item_type IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM wms_raw_material rm WHERE rm.raw_material_id = mc.item_id AND rm.del_flag = 0
)
AND NOT EXISTS (
SELECT 1 FROM wms_product wp WHERE wp.product_id = mc.item_id AND wp.del_flag = 0
)
</select>
<!-- 统计筛选条件下的全量汇总数据高性能只查sum/count -->
<select id="selectStatistics" resultType="java.util.Map">
SELECT
IFNULL(SUM(mc.gross_weight), 0) AS total_gross_weight,
IFNULL(SUM(mc.net_weight), 0) AS total_net_weight,
COUNT(mc.coil_id) AS total_count
FROM wms_material_coil mc
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_warehouse nw ON mc.next_warehouse_id = nw.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
LEFT JOIN (
SELECT coil_id, COUNT(*) AS abnormal_count
FROM wms_coil_abnormal
WHERE del_flag = 0
GROUP BY coil_id
) ca ON mc.coil_id = ca.coil_id
${ew.customSqlSegment}
</select>
<!-- 统计已发货钢卷的囤积周期和囤积成本在selectStatistics基础上JOIN二维码表解析steps[0].create_time -->
<select id="selectHoardingStatistics" resultType="java.util.Map">
SELECT
COUNT(*) AS total_count,
ROUND(AVG(hoarding_seconds / 86400), 2) AS avg_hoarding_days,
ROUND(AVG(hoarding_seconds / 86400 * net_weight), 2) AS avg_hoarding_cost
FROM (
SELECT
IFNULL(mc.net_weight, 0) AS net_weight,
TIMESTAMPDIFF(SECOND,
FROM_UNIXTIME(JSON_EXTRACT(wgr.content, '$.steps[0].create_time') / 1000),
COALESCE(mc.export_time, mc.update_time)
) AS hoarding_seconds
FROM wms_material_coil mc
INNER JOIN wms_generate_record wgr ON mc.qrcode_record_id = wgr.record_id
AND JSON_EXTRACT(wgr.content, '$.steps[0].create_time') IS NOT NULL
LEFT JOIN wms_warehouse w ON mc.warehouse_id = w.warehouse_id
LEFT JOIN wms_warehouse nw ON mc.next_warehouse_id = nw.warehouse_id
LEFT JOIN wms_actual_warehouse aw ON mc.actual_warehouse_id = aw.actual_warehouse_id
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id
${ew.customSqlSegment}
) t
WHERE t.hoarding_seconds > 0
</select>
<!-- 统计仓库使用次数按warehouse_id出现次数排序 -->
<select id="selectWarehouseIdCount" resultType="java.util.Map">
SELECT warehouse_id, COUNT(*) AS coil_count
FROM wms_material_coil
WHERE del_flag = 0
AND warehouse_id IN
<foreach collection="list" item="wid" open="(" separator="," close=")">
#{wid}
</foreach>
GROUP BY warehouse_id
</select>
<!-- 分页查询材质异常的钢卷查询同一入场钢卷号下packing_status与热轧卷板的material不一致的钢卷 -->
<select id="selectMaterialMismatchCoilsPage" resultMap="WmsMaterialCoilResult">
SELECT mc.*
FROM wms_material_coil mc
WHERE mc.del_flag = 0
AND mc.enter_coil_no IS NOT NULL
AND mc.packing_status IS NOT NULL
AND mc.enter_coil_no IN (
SELECT DISTINCT mci.enter_coil_no
FROM wms_material_coil mci
LEFT JOIN wms_raw_material rm ON mci.item_type = 'raw_material' AND mci.item_id = rm.raw_material_id AND rm.del_flag = 0
WHERE mci.del_flag = 0
AND mci.item_id IS NOT NULL
AND (mci.item_type = 'raw_material' AND rm.raw_material_name LIKE '%热轧卷板%')
)
AND EXISTS (
SELECT 1
FROM wms_material_coil mci2
LEFT JOIN wms_raw_material rm2 ON mci2.item_type = 'raw_material' AND mci2.item_id = rm2.raw_material_id AND rm2.del_flag = 0
WHERE mci2.del_flag = 0
AND mci2.enter_coil_no = mc.enter_coil_no
AND mci2.item_type = 'raw_material'
AND rm2.raw_material_name LIKE '%热轧卷板%'
AND (
rm2.material IS NULL
OR (
mc.packing_status NOT LIKE CONCAT(rm2.material, '%')
AND rm2.material NOT LIKE CONCAT(mc.packing_status, '%')
)
)
)
</select>
<!-- 根据入场钢卷号查询最早的热轧卷板材质 -->
<select id="selectEarliestHotRolledMaterial" resultType="java.lang.String">
SELECT rm.material
FROM wms_material_coil mc
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id AND rm.del_flag = 0
WHERE mc.del_flag = 0
AND mc.enter_coil_no = #{enterCoilNo}
AND mc.item_type = 'raw_material'
AND rm.raw_material_name LIKE '%热轧卷板%'
AND rm.material IS NOT NULL
ORDER BY mc.create_time ASC
LIMIT 1
</select>
<!-- 规程同步页面:一次 SQL 返回 total/synced/unsynced 三个计数 -->
<select id="selectCountForSpecSync" resultType="java.util.Map">
SELECT COUNT(*) AS total,
SUM(CASE WHEN mc.version_id IS NOT NULL THEN 1 ELSE 0 END) AS synced,
SUM(CASE WHEN mc.version_id IS NULL THEN 1 ELSE 0 END) AS unsynced,
SUM(CASE WHEN mc.data_type = 0 THEN 1 ELSE 0 END) AS movedOn
FROM wms_material_coil mc
LEFT JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id AND rm.del_flag = 0
LEFT JOIN wms_product p ON mc.item_type = 'product' AND mc.item_id = p.product_id AND p.del_flag = 0
${ew.customSqlSegment}
</select>
<!-- 根据父级钢卷ID列表批量查询子钢卷使用FIND_IN_SET匹配逗号分隔的parent_coil_id -->
<select id="selectByParentCoilIds" resultMap="WmsMaterialCoilResult">
SELECT * FROM wms_material_coil
WHERE del_flag = 0
AND parent_coil_id IS NOT NULL
AND parent_coil_id != ''
AND (
<foreach collection="coilIds" item="id" separator=" OR ">
FIND_IN_SET(#{id}, parent_coil_id) > 0
</foreach>
)
</select>
<!-- 根据入场钢卷号列表批量查询热轧卷板原料的规格(用于提取原料厚度) -->
<select id="selectRawMaterialThicknessByEnterCoilNos" resultType="java.util.Map">
SELECT mc.enter_coil_no AS enterCoilNo, rm.specification AS specification
FROM wms_material_coil mc
INNER JOIN wms_raw_material rm ON mc.item_type = 'raw_material' AND mc.item_id = rm.raw_material_id AND rm.del_flag = 0
WHERE mc.del_flag = 0
AND mc.enter_coil_no IN
<foreach collection="enterCoilNos" item="no" open="(" separator="," close=")">
#{no}
</foreach>
AND (mc.parent_coil_id IS NULL OR mc.parent_coil_id = '')
AND mc.item_type = 'raw_material'
AND rm.raw_material_name LIKE '%热轧卷板%'
AND rm.specification IS NOT NULL
AND rm.specification != ''
</select>
</mapper>