2025-11-25 15:44:19 +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">
|
|
|
|
|
|
<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"/>
|
2025-11-29 15:31:49 +08:00
|
|
|
|
<result property="planType" column="plan_type"/>
|
2025-12-08 11:38:32 +08:00
|
|
|
|
<result property="coil" column="coil"/>
|
2025-12-08 14:42:28 +08:00
|
|
|
|
<result property="auditStatus" column="audit_status"/>
|
|
|
|
|
|
<result property="auditBy" column="audit_by"/>
|
|
|
|
|
|
<result property="auditTime" column="audit_time"/>
|
2025-11-25 15:44:19 +08:00
|
|
|
|
<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>
|
|
|
|
|
|
|
2025-11-25 16:58:47 +08:00
|
|
|
|
<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,
|
2025-11-25 17:42:01 +08:00
|
|
|
|
SUM(weight) as total_weight
|
2025-11-25 16:58:47 +08:00
|
|
|
|
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>
|
|
|
|
|
|
|
2025-11-27 11:05:01 +08:00
|
|
|
|
<select id="selectDeliveryReportByType" resultType="com.klp.domain.vo.WmsDeliveryReportByTypeVo">
|
2025-11-26 09:38:22 +08:00
|
|
|
|
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
|
2025-12-12 10:38:55 +08:00
|
|
|
|
LEFT JOIN wms_delivery_plan dp ON dw.plan_id = dp.plan_id AND dp.del_flag = 0
|
2025-11-26 09:38:22 +08:00
|
|
|
|
WHERE dwd.del_flag = 0
|
2025-12-12 10:38:55 +08:00
|
|
|
|
AND dp.plan_type = 0
|
2025-11-26 09:38:22 +08:00
|
|
|
|
<if test="startTime != null">
|
|
|
|
|
|
AND dw.create_time >= #{startTime}
|
|
|
|
|
|
</if>
|
|
|
|
|
|
<if test="endTime != null">
|
|
|
|
|
|
AND dw.create_time <= #{endTime}
|
|
|
|
|
|
</if>
|
|
|
|
|
|
GROUP BY dwd.product_name
|
|
|
|
|
|
ORDER BY totalWeight DESC
|
|
|
|
|
|
</select>
|
2025-11-27 11:05:01 +08:00
|
|
|
|
<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
|
2025-12-12 10:38:55 +08:00
|
|
|
|
LEFT JOIN wms_delivery_plan dp ON dw.plan_id = dp.plan_id AND dp.del_flag = 0
|
2025-11-27 11:05:01 +08:00
|
|
|
|
WHERE dwd.del_flag = 0
|
2025-12-12 10:38:55 +08:00
|
|
|
|
AND dp.plan_type = 0
|
2025-11-27 11:05:01 +08:00
|
|
|
|
<if test="startTime != null">
|
|
|
|
|
|
AND dw.create_time >= #{startTime}
|
|
|
|
|
|
</if>
|
|
|
|
|
|
<if test="endTime != null">
|
|
|
|
|
|
AND dw.create_time <= #{endTime}
|
|
|
|
|
|
</if>
|
|
|
|
|
|
</select>
|
2025-11-25 16:58:47 +08:00
|
|
|
|
|
2025-11-25 15:44:19 +08:00
|
|
|
|
|
2025-12-12 10:38:55 +08:00
|
|
|
|
<!-- 收货报表:按计划统计(基于钢卷待操作,action_type=401,wcpa.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
|
2025-12-16 14:13:08 +08:00
|
|
|
|
AND wcpa.action_status = 2
|
2025-12-12 10:38:55 +08:00
|
|
|
|
<if test="startTime != null">
|
|
|
|
|
|
AND wcpa.create_time >= #{startTime}
|
|
|
|
|
|
</if>
|
|
|
|
|
|
<if test="endTime != null">
|
|
|
|
|
|
AND wcpa.create_time <= #{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
|
2025-12-16 14:13:08 +08:00
|
|
|
|
AND wcpa.action_status = 2
|
2025-12-12 10:38:55 +08:00
|
|
|
|
<if test="startTime != null">
|
|
|
|
|
|
AND wcpa.create_time >= #{startTime}
|
|
|
|
|
|
</if>
|
|
|
|
|
|
<if test="endTime != null">
|
|
|
|
|
|
AND wcpa.create_time <= #{endTime}
|
|
|
|
|
|
</if>
|
|
|
|
|
|
</select>
|
|
|
|
|
|
|
2025-11-25 15:44:19 +08:00
|
|
|
|
</mapper>
|