自动化立体仓库 - WMS系统
chen.llin
2025-12-24 43525a12afaf7368decbed730f0240a6709d8355
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
154
<?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="countOrdersInRange" resultType="int">
        SELECT COUNT(*) FROM man_order
        WHERE status = 1
        AND order_time >= #{startDate}
        AND order_time &lt;= #{endDate}
    </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>
 
    <!-- 统计月结时间范围内的物料出入库数量(从入库表查询) -->
    <select id="statisticsMaterialInOutFromPakin" resultType="com.zy.asrs.entity.result.MaterialInOutRawDTO">
        SELECT 
            od.matnr,
            od.maktx,
            od.batch,
            od.brand,
            SUM(od.qty) as qty,
            COALESCE(od.pakin_pakout_status, o.pakin_pakout_status) as pakinPakoutStatus
        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)
        AND COALESCE(od.pakin_pakout_status, o.pakin_pakout_status) IN (1, 2)
        GROUP BY od.matnr, od.maktx, od.batch, od.brand, COALESCE(od.pakin_pakout_status, o.pakin_pakout_status)
    </select>
 
    <!-- 统计月结时间范围内的物料出入库数量(从出库表查询) -->
    <select id="statisticsMaterialInOutFromPakout" resultType="com.zy.asrs.entity.result.MaterialInOutRawDTO">
        SELECT 
            od.matnr,
            od.maktx,
            od.batch,
            od.brand,
            SUM(od.qty) as qty,
            COALESCE(od.pakin_pakout_status, o.pakin_pakout_status) as pakinPakoutStatus
        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)
        AND COALESCE(od.pakin_pakout_status, o.pakin_pakout_status) IN (1, 2)
        GROUP BY od.matnr, od.maktx, od.batch, od.brand, COALESCE(od.pakin_pakout_status, o.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 CONVERT(date, order_time) >= #{startDate}
        AND order_time &lt;= #{endDate}
        AND move_status = 2
        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 CONVERT(date, order_time) >= #{startDate}
        AND order_time &lt;= #{endDate}
        AND move_status = 2
        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>