自动化立体仓库 - WMS系统
chen.llin
2025-12-24 f7ac54f86129a2d4875c7107a84556849c3d8c2a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?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.zy.asrs.mapper.MonthlySettleMapper">
 
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.MonthlySettle">
        <id column="id" property="id" />
    <result column="settle_no" property="settleNo" />
    <result column="start_date" property="startDate" />
        <result column="end_date" property="endDate" />
        <result column="status" property="status" />
        <result column="total_in_qty" property="totalInQty" />
        <result column="total_out_qty" property="totalOutQty" />
        <result column="total_materials" property="totalMaterials" />
        <result column="memo" property="memo" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="is_deleted" property="isDeleted" />
    </resultMap>
 
    <!-- 获取最近的月结记录 -->
    <select id="selectLatestSettle" resultMap="BaseResultMap">
        SELECT TOP 1 * FROM man_monthly_settle
        WHERE is_deleted = 0
        ORDER BY end_date DESC
    </select>
 
    <!-- 统计月结时间范围内未完成的入库订单数量 -->
    <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="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="statisticsMaterialInOutFromPakin" resultType="com.zy.asrs.entity.result.MaterialInOutRawDTO">
        SELECT 
            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,
            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>
 
    <!-- 更新入库订单的月结信息 -->
    <update id="updateOrderSettleInfo">
        UPDATE man_order_log_pakin
        SET monthly_settle_id = #{settleId},
            monthly_settle_no = #{settleNo}
        WHERE status = 1
        AND order_time >= #{startDate}
        AND order_time &lt;= #{endDate}
        AND settle = 6
        AND (monthly_settle_id IS NULL OR monthly_settle_id = 0)
    </update>
 
    <!-- 更新出库订单的月结信息 -->
    <update id="updateOrderSettleInfoPakout">
        UPDATE man_order_log_pakout
        SET monthly_settle_id = #{settleId},
            monthly_settle_no = #{settleNo}
        WHERE status = 1
        AND order_time >= #{startDate}
        AND order_time &lt;= #{endDate}
        AND settle = 6
        AND (monthly_settle_id IS NULL OR monthly_settle_id = 0)
    </update>
 
    <!-- 清除入库订单的月结信息 -->
    <update id="clearOrderSettleInfo">
        UPDATE man_order_log_pakin
        SET monthly_settle_id = NULL,
            monthly_settle_no = NULL
        WHERE monthly_settle_id = #{settleId}
    </update>
 
    <!-- 清除出库订单的月结信息 -->
    <update id="clearOrderSettleInfoPakout">
        UPDATE man_order_log_pakout
        SET monthly_settle_id = NULL,
            monthly_settle_no = NULL
        WHERE monthly_settle_id = #{settleId}
    </update>
 
</mapper>