Files
klp-oa/klp-wms/src/main/resources/mapper/klp/WmsDeliveryPlanMapper.xml
Joshi de69397da6 fix(wms): 修正钢卷数据插入逻辑并优化查询条件
- 在 WmsDeliveryPlanMapper.xml 中增加 action_status = 2 的过滤条件
- 修正 WmsMaterialCoilServiceImpl.java 中 dataType 的设置逻辑,
  当传入值为 10 时保留原值,否则默认设为 1
2025-12-16 14:13:08 +08:00

199 lines
8.9 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.WmsDeliveryPlanMapper">
<resultMap type="com.klp.domain.WmsDeliveryPlan" id="WmsDeliveryPlanResult">
<result property="planId" column="plan_id"/>
<result property="planName" column="plan_name"/>
<result property="planDate" column="plan_date"/>
<result property="planType" column="plan_type"/>
<result property="coil" column="coil"/>
<result property="auditStatus" column="audit_status"/>
<result property="auditBy" column="audit_by"/>
<result property="auditTime" column="audit_time"/>
<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"/>
</resultMap>
<select id="selectDeliveryPlanStatistics" resultType="com.klp.domain.vo.WmsDeliveryPlanStatisticsVo">
SELECT
dp.plan_id as planId,
dp.plan_name as planName,
COUNT(DISTINCT dw.waybill_id) as waybillCount,
COALESCE(SUM(completed_waybills.completed_count), 0) as completedWaybillCount,
COALESCE(SUM(detail_stats.total_coil_count), 0) as totalCoilCount,
COALESCE(SUM(detail_stats.total_weight), 0) as totalWeight,
CASE
WHEN COUNT(DISTINCT dw.waybill_id) > 0 THEN
ROUND((COALESCE(SUM(completed_waybills.completed_count), 0) * 100.0) / COUNT(DISTINCT dw.waybill_id), 2)
ELSE 0
END as completionRate
FROM wms_delivery_plan dp
LEFT JOIN wms_delivery_waybill dw ON dp.plan_id = dw.plan_id AND dw.del_flag = 0
LEFT JOIN (
SELECT
waybill_id,
COUNT(*) as total_coil_count,
SUM(weight) as total_weight
FROM wms_delivery_waybill_detail
WHERE del_flag = 0
GROUP BY waybill_id
) detail_stats ON dw.waybill_id = detail_stats.waybill_id
LEFT JOIN (
SELECT
plan_id,
COUNT(*) as completed_count
FROM wms_delivery_waybill
WHERE status = 2 AND del_flag = 0
GROUP BY plan_id
) completed_waybills ON dp.plan_id = completed_waybills.plan_id
WHERE dp.del_flag = 0
<if test="planId != null">
AND dp.plan_id = #{planId}
</if>
GROUP BY dp.plan_id, dp.plan_name
ORDER BY dp.create_time DESC
</select>
<select id="selectDeliveryReportByType" resultType="com.klp.domain.vo.WmsDeliveryReportByTypeVo">
SELECT
dwd.product_name as productName,
COUNT(DISTINCT dw.waybill_id) as waybillCount,
SUM(dwd.quantity) as coilCount,
SUM(dwd.weight) as totalWeight,
CASE
WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(COUNT(DISTINCT dw.waybill_id) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0
END as dailyWaybillCount,
CASE
WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(SUM(dwd.quantity) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0
END as dailyCoilCount,
CASE
WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(SUM(dwd.weight) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0
END as dailyWeight
FROM wms_delivery_waybill_detail dwd
LEFT JOIN wms_delivery_waybill dw ON dwd.waybill_id = dw.waybill_id AND dw.del_flag = 0
LEFT JOIN wms_delivery_plan dp ON dw.plan_id = dp.plan_id AND dp.del_flag = 0
WHERE dwd.del_flag = 0
AND dp.plan_type = 0
<if test="startTime != null">
AND dw.create_time >= #{startTime}
</if>
<if test="endTime != null">
AND dw.create_time &lt;= #{endTime}
</if>
GROUP BY dwd.product_name
ORDER BY totalWeight DESC
</select>
<select id="selectDeliveryReportSummary" resultType="com.klp.domain.vo.WmsDeliveryReportSummaryVo">
SELECT
COUNT(DISTINCT dw.waybill_id) as waybillCount,
SUM(dwd.quantity) as coilCount,
SUM(dwd.weight) as totalWeight,
CASE
WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(COUNT(DISTINCT dw.waybill_id) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0
END as dailyWaybillCount,
CASE
WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(SUM(dwd.quantity) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0
END as dailyCoilCount,
CASE
WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(SUM(dwd.weight) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0
END as dailyWeight,
#{startTime} as startTime,
#{endTime} as endTime
FROM wms_delivery_waybill_detail dwd
LEFT JOIN wms_delivery_waybill dw ON dwd.waybill_id = dw.waybill_id AND dw.del_flag = 0
LEFT JOIN wms_delivery_plan dp ON dw.plan_id = dp.plan_id AND dp.del_flag = 0
WHERE dwd.del_flag = 0
AND dp.plan_type = 0
<if test="startTime != null">
AND dw.create_time >= #{startTime}
</if>
<if test="endTime != null">
AND dw.create_time &lt;= #{endTime}
</if>
</select>
<!-- 收货报表按计划统计基于钢卷待操作action_type=401wcpa.warehouse_id -> 收货计划ID统计全量收货计划 -->
<select id="selectReceivingReportByType" resultType="com.klp.domain.vo.WmsReceivingReportByTypeVo">
SELECT
dp.plan_name AS productName,
COUNT(wcpa.action_id) AS taskCount,
COUNT(DISTINCT wcpa.coil_id) AS coilCount,
COALESCE(SUM(mc.net_weight), 0) AS totalWeight,
CASE WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(COUNT(wcpa.action_id) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0 END AS dailyTaskCount,
CASE WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(COUNT(DISTINCT wcpa.coil_id) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0 END AS dailyCoilCount,
CASE WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(COALESCE(SUM(mc.net_weight), 0) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0 END AS dailyWeight
FROM wms_coil_pending_action wcpa
LEFT JOIN wms_delivery_plan dp ON dp.plan_id = wcpa.warehouse_id AND dp.del_flag = 0 AND dp.plan_type = 1
LEFT JOIN wms_material_coil mc ON mc.coil_id = wcpa.coil_id AND mc.del_flag = 0
WHERE wcpa.del_flag = 0
AND wcpa.action_type = 401
AND wcpa.action_status = 2
<if test="startTime != null">
AND wcpa.create_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND wcpa.create_time &lt;= #{endTime}
</if>
GROUP BY dp.plan_name
ORDER BY taskCount DESC
</select>
<!-- 收货报表汇总统计基于钢卷待操作action_type=401统计全量收货计划 -->
<select id="selectReceivingReportSummary" resultType="com.klp.domain.vo.WmsReceivingReportSummaryVo">
SELECT
COUNT(wcpa.action_id) AS taskCount,
COUNT(DISTINCT wcpa.coil_id) AS coilCount,
COALESCE(SUM(mc.net_weight), 0) AS totalWeight,
CASE WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(COUNT(wcpa.action_id) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0 END AS dailyTaskCount,
CASE WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(COUNT(DISTINCT wcpa.coil_id) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0 END AS dailyCoilCount,
CASE WHEN #{startTime} IS NOT NULL AND #{endTime} IS NOT NULL THEN
ROUND(COALESCE(SUM(mc.net_weight), 0) / (DATEDIFF(#{endTime}, #{startTime}) + 1), 2)
ELSE 0 END AS dailyWeight,
#{startTime} AS startTime,
#{endTime} AS endTime
FROM wms_coil_pending_action wcpa
LEFT JOIN wms_delivery_plan dp ON dp.plan_id = wcpa.warehouse_id AND dp.del_flag = 0 AND dp.plan_type = 1
LEFT JOIN wms_material_coil mc ON mc.coil_id = wcpa.coil_id AND mc.del_flag = 0
WHERE wcpa.del_flag = 0
AND wcpa.action_type = 401
AND wcpa.action_status = 2
<if test="startTime != null">
AND wcpa.create_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND wcpa.create_time &lt;= #{endTime}
</if>
</select>
</mapper>