Files
klp-oa/klp-wms/src/main/resources/mapper/klp/WmsDeliveryPlanMapper.xml
Joshi 9403803ac3 fix(delivery-plan): 移除收货报表中的计划日期分组
- 移除了查询结果中不必要的计划日期字段
- 删除了按计划日期进行分组的逻辑
- 简化了统计查询以提高性能
2026-01-14 14:23:29 +08:00

200 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,
dp.plan_date AS planDate,
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, dp.plan_date
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>