自动化立体仓库 - WMS系统
chen.llin
2026-01-18 d6d25613f504d8fc4c6ffa8a1854beb4dac044d0
src/main/resources/mapper/MonthlySettleMapper.xml
@@ -27,91 +27,87 @@
        ORDER BY end_date DESC
    </select>
    <!-- 统计月结时间范围内的订单数量 -->
    <select id="countOrdersInRange" resultType="int">
        SELECT COUNT(*) FROM man_order
        WHERE status = 1
        AND order_time >= #{startDate}
        AND order_time &lt;= #{endDate}
    <!-- 统计月结时间范围内未完成的入库订单数量 -->
    <select id="countUnfinishedOrdersInRangePakin" resultType="int">
        SELECT COUNT(1) FROM man_order_log_pakin molpi
        WHERE molpi.status = 1
        AND molpi.order_time >= #{startDate}
        AND molpi.order_time &lt;= #{endDate}
        AND (molpi.settle IS NULL OR molpi.settle != 6)
        AND (molpi.monthly_settle_id IS NULL OR molpi.monthly_settle_id = 0)
        AND EXISTS (
            SELECT 1 FROM man_order_detl_log_pakin modlpi
            WHERE modlpi.order_id = molpi.id
            AND (modlpi.anfme > modlpi.qty OR modlpi.qty IS NULL)
        )
    </select>
    <!-- 统计月结时间范围内未完成的订单数量(入库和出库) -->
    <select id="countUnfinishedOrdersInRange" resultType="int">
        SELECT COUNT(*) FROM (
            SELECT DISTINCT o.id FROM man_order_log_pakin o
            INNER JOIN man_order_detl_log_pakin od ON o.id = od.order_id
            WHERE o.status = 1
            AND CONVERT(date, o.order_time) >= #{startDate}
            AND o.order_time &lt;= #{endDate}
            AND o.move_status != 2
            AND (od.anfme > od.qty OR od.qty IS NULL)
            AND (o.monthly_settle_id IS NULL OR o.monthly_settle_id = 0)
            UNION
            SELECT DISTINCT o.id FROM man_order_log_pakout o
            INNER JOIN man_order_detl_log_pakout od ON o.id = od.order_id
            WHERE o.status = 1
            AND CONVERT(date, o.order_time) >= #{startDate}
            AND o.order_time &lt;= #{endDate}
            AND o.move_status != 2
            AND (od.anfme > od.qty OR od.qty IS NULL)
            AND (o.monthly_settle_id IS NULL OR o.monthly_settle_id = 0)
        ) t
    <!-- 统计月结时间范围内未完成的出库订单数量 -->
    <select id="countUnfinishedOrdersInRangePakout" resultType="int">
        SELECT COUNT(1) FROM man_order_log_pakout molpo
        WHERE molpo.status = 1
        AND molpo.order_time >= #{startDate}
        AND molpo.order_time &lt;= #{endDate}
        AND (molpo.settle IS NULL OR molpo.settle != 6)
        AND (molpo.monthly_settle_id IS NULL OR molpo.monthly_settle_id = 0)
        AND EXISTS (
            SELECT 1 FROM man_order_detl_log_pakout modlpo
            WHERE modlpo.order_id = molpo.id
            AND (modlpo.anfme > modlpo.qty OR modlpo.qty IS NULL)
        )
    </select>
    <!-- 统计月结时间范围内的物料出入库数量(合并入库出库) -->
    <select id="statisticsMaterialInOut" resultType="com.zy.asrs.entity.result.MaterialInOutStatDTO">
    <!-- 统计月结时间范围内的物料出入库数量(从入库表查询) -->
    <select id="statisticsMaterialInOutFromPakin" resultType="com.zy.asrs.entity.result.MaterialInOutRawDTO">
        SELECT 
            matnr,
            MAX(maktx) as maktx,
            batch,
            brand,
            SUM(in_qty) as inQty,
            SUM(out_qty) as outQty
        FROM (
            SELECT
                od.matnr,
                MAX(od.maktx) as maktx,
                ISNULL(od.batch, '') as batch,
                ISNULL(od.brand, '') as brand,
                SUM(od.qty) as in_qty,
                0 as out_qty
            FROM man_order_log_pakin o
            INNER JOIN man_order_detl_log_pakin od ON o.id = od.order_id
            WHERE o.status = 1
            AND CONVERT(date, o.order_time) >= #{startDate}
            AND o.order_time &lt;= #{endDate}
            AND o.move_status = 2
            AND (o.monthly_settle_id IS NULL OR o.monthly_settle_id = 0)
            GROUP BY od.matnr, od.batch, od.brand
            UNION ALL
            SELECT
                od.matnr,
                MAX(od.maktx) as maktx,
                ISNULL(od.batch, '') as batch,
                ISNULL(od.brand, '') as brand,
                0 as in_qty,
                SUM(od.qty) as out_qty
            FROM man_order_log_pakout o
            INNER JOIN man_order_detl_log_pakout od ON o.id = od.order_id
            WHERE o.status = 1
            AND CONVERT(date, o.order_time) >= #{startDate}
            AND o.order_time &lt;= #{endDate}
            AND o.move_status = 2
            AND (o.monthly_settle_id IS NULL OR o.monthly_settle_id = 0)
            GROUP BY od.matnr, od.batch, od.brand
        ) t
        GROUP BY matnr, batch, brand
            modlpi.matnr,
            modlpi.maktx,
            modlpi.batch,
            modlpi.brand,
            SUM(modlpi.qty) as qty,
            COALESCE(modlpi.pakin_pakout_status, molpi.pakin_pakout_status) as pakinPakoutStatus
        FROM man_order_log_pakin molpi
        INNER JOIN man_order_detl_log_pakin modlpi ON molpi.id = modlpi.order_id
        WHERE molpi.status = 1
        AND molpi.order_time >= #{startDate}
        AND molpi.order_time &lt;= #{endDate}
        AND molpi.settle = 6
        AND (molpi.monthly_settle_id IS NULL OR molpi.monthly_settle_id = 0)
        AND COALESCE(modlpi.pakin_pakout_status, molpi.pakin_pakout_status) IN (1, 2)
        GROUP BY modlpi.matnr, modlpi.maktx, modlpi.batch, modlpi.brand, COALESCE(modlpi.pakin_pakout_status, molpi.pakin_pakout_status)
    </select>
    <!-- 统计月结时间范围内的物料出入库数量(从出库表查询) -->
    <select id="statisticsMaterialInOutFromPakout" resultType="com.zy.asrs.entity.result.MaterialInOutRawDTO">
        SELECT
            modlpo.matnr,
            modlpo.maktx,
            modlpo.batch,
            modlpo.brand,
            SUM(modlpo.qty) as qty,
            COALESCE(modlpo.pakin_pakout_status, molpo.pakin_pakout_status) as pakinPakoutStatus
        FROM man_order_log_pakout molpo
        INNER JOIN man_order_detl_log_pakout modlpo ON molpo.id = modlpo.order_id
        WHERE molpo.status = 1
        AND molpo.order_time >= #{startDate}
        AND molpo.order_time &lt;= #{endDate}
        AND molpo.settle = 6
        AND (molpo.monthly_settle_id IS NULL OR molpo.monthly_settle_id = 0)
        AND COALESCE(modlpo.pakin_pakout_status, molpo.pakin_pakout_status) IN (1, 2)
        GROUP BY modlpo.matnr, modlpo.maktx, modlpo.batch, modlpo.brand, COALESCE(modlpo.pakin_pakout_status, molpo.pakin_pakout_status)
    </select>
    <!-- 获取上一个月结的物料期末库存 -->
    <select id="getPreviousSettleEndingQty" resultType="com.zy.asrs.entity.result.PreviousSettleEndingQtyDTO">
        SELECT 
            matnr,
            batch,
            brand,
            ISNULL(batch, '') as batch,
            ISNULL(brand, '') as brand,
            ISNULL(maktx, '') as maktx,
            ending_qty as endingQty
        FROM man_monthly_settle_detail
        WHERE settle_id = #{previousSettleId}
        AND is_deleted = 0
    </select>
    <!-- 更新入库订单的月结信息 -->
@@ -120,9 +116,9 @@
        SET monthly_settle_id = #{settleId},
            monthly_settle_no = #{settleNo}
        WHERE status = 1
        AND CONVERT(date, order_time) >= #{startDate}
        AND order_time >= #{startDate}
        AND order_time &lt;= #{endDate}
        AND move_status = 2
        AND settle = 6
        AND (monthly_settle_id IS NULL OR monthly_settle_id = 0)
    </update>
@@ -132,9 +128,9 @@
        SET monthly_settle_id = #{settleId},
            monthly_settle_no = #{settleNo}
        WHERE status = 1
        AND CONVERT(date, order_time) >= #{startDate}
        AND order_time >= #{startDate}
        AND order_time &lt;= #{endDate}
        AND move_status = 2
        AND settle = 6
        AND (monthly_settle_id IS NULL OR monthly_settle_id = 0)
    </update>