Files
klp-oa/klp-wms/src/main/resources/mapper/klp/WmsDeliveryPlanMapper.xml
Joshi cff1bdc46b feat(wms): 添加发货计划审核功能
- 在 WmsDeliveryPlan 实体中新增 auditStatus、auditBy 和 auditTime 字段
- 在 WmsDeliveryPlanBo 业务对象中同步新增审核相关字段
- 更新 WmsDeliveryPlanMapper.xml 映射文件以支持新字段查询
- 在 WmsDeliveryPlanServiceImpl 查询条件构造器中增加 auditStatus 筛选
- 在 WmsDeliveryPlanVo 视图对象中新增审核字段并配置日期格式化注解
2025-12-08 14:42:28 +08:00

132 lines
5.3 KiB
XML

<?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
WHERE dwd.del_flag = 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
WHERE dwd.del_flag = 0
<if test="startTime != null">
AND dw.create_time >= #{startTime}
</if>
<if test="endTime != null">
AND dw.create_time &lt;= #{endTime}
</if>
</select>
</mapper>