chenhj
2026-04-21 1bbe6f787d58b768dce5370aa4e0d242c5e4b62d
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
<?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.ruoyi.production.mapper.ProductOrderMaterialMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.production2.pojo.ProductOrderMaterial">
        <id column="id" property="id" />
                <result column="tenant_id" property="tenantId" />
                <result column="process_name" property="processName" />
                <result column="material_name" property="materialName" />
                <result column="material_model" property="materialModel" />
                <result column="required_qty" property="requiredQty" />
                <result column="unit" property="unit" />
                <result column="pick_qty" property="pickQty" />
                <result column="supplement_qty" property="supplementQty" />
                <result column="return_qty" property="returnQty" />
                <result column="actual_qty" property="actualQty" />
                <result column="create_time" property="createTime" />
                <result column="update_time" property="updateTime" />
                <result column="create_user" property="createUser" />
                <result column="update_user" property="updateUser" />
 
    </resultMap>
        <select id="pickMaterial" resultType="com.ruoyi.production2.pojo.ProductOrderMaterial">
            SELECT
            si.id,
            si.qualitity,
            COALESCE(si.locked_quantity, 0) AS locked_quantity,
            si.product_model_id,
            si.create_time,
            si.update_time,
            COALESCE(si.warn_num, 0) AS warn_num,
            si.version,
            (si.qualitity - COALESCE(si.locked_quantity, 0)) AS un_locked_quantity,
            pm.model,
            si.remark,
            pm.unit,
            pm.uid_no AS uidNo,
            p.product_name,
            p1.product_name AS parentName,
            si.batch_no,
            si.customer
            FROM
            stock_inventory si
            LEFT JOIN product_model pm ON si.product_model_id = pm.id
            LEFT JOIN product p ON pm.product_id = p.id
            LEFT JOIN product p1 ON p1.id = p.parent_id
        </select>
 
    <select id="selectLeafNode" resultType="com.ruoyi.production2.dto.ProductStructureDto">
        SELECT
            ps.*,
            p.product_name,
            pp.NAME AS process_name,
            pm.product_id,
            pm.model
        FROM
            product_structure ps
                LEFT JOIN product_model pm ON ps.product_model_id = pm.id
                LEFT JOIN product p ON pm.product_id = p.id
                LEFT JOIN product_process pp ON ps.process_id = pp.id
        WHERE
            ps.bom_id = #{bomId}
          AND NOT EXISTS (SELECT 1 FROM product_structure ps_child WHERE ps_child.parent_id = ps.id AND ps_child.bom_id = 30)
        ORDER BY
            ps.id
    </select>
 
    <select id="selectByProductModelIds" resultType="com.ruoyi.production2.dto.ProductOrderMaterialDto">
        SELECT
            si.id,
            si.qualitity,
            COALESCE(si.locked_quantity, 0) AS locked_quantity,
            si.product_model_id,
            si.create_time,
            si.update_time,
            COALESCE(si.warn_num, 0) AS warn_num,
            si.version,
            (si.qualitity - COALESCE(si.locked_quantity, 0)) AS un_locked_quantity,
            pm.model as materialModel,
            si.remark,
            pm.unit,
            pm.uid_no AS uidNo,
            p.product_name as materialName,
            p1.product_name AS parentName,
            leaf.process_name,
            leaf.id AS structure_id
            FROM stock_inventory si
            LEFT JOIN product_model pm ON si.product_model_id = pm.id
            LEFT JOIN product p ON pm.product_id = p.id
            LEFT JOIN product p1 ON p1.id = p.parent_id
            INNER JOIN (
            SELECT
            ps.product_model_id,
            pp.name AS process_name,
            ps.id
        FROM product_structure ps
        LEFT JOIN product_process pp ON ps.process_id = pp.id
        WHERE ps.product_model_id IN
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
        AND ps.id NOT IN (
        SELECT DISTINCT parent_id
        FROM product_structure
        WHERE parent_id IS NOT NULL
        AND parent_id != 0
        AND product_model_id IN
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
        ))
        leaf ON leaf.product_model_id = si.product_model_id
        ORDER BY si.id
    </select>
</mapper>