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
<?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.ProductionProductMainMapper">
 
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductionProductMain">
        <id column="id" property="id" />
        <result column="product_no" property="productNo" />
        <result column="production_operation_task_id" property="productionOperationTaskId" />
        <result column="dept_id" property="deptId" />
        <result column="update_time" property="updateTime" />
        <result column="create_user" property="createUser" />
        <result column="create_time" property="createTime" />
        <result column="update_user" property="updateUser" />
    </resultMap>
 
    <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.bean.dto.ProductionProductMainDto">
        select ppm.*,
               pot.work_order_no as workOrderNo,
               case pot.status
                   when 1 then '待确认'
                   when 2 then '待生产'
                   when 3 then '生产中'
                   when 4 then '已生产'
                   else '未知'
                   end as workOrderStatus,
               su.nick_name as nickName,
               ifnull(ppo.quantity, 0) as quantity,
               ifnull(ppo.scrap_qty, 0) as scrapQty,
               p.product_name as productName,
               pm.model as productModelName,
               pm.unit,
               po_sales.salesContractNo,
               date(ppm.create_time) as schedulingDate,
               su.nick_name as schedulingUserName,
               po_sales.customerName,
               poro.operation_name as process
        from production_product_main ppm
                 left join production_operation_task pot on ppm.production_operation_task_id = pot.id
                 left join production_order po on pot.production_order_id = po.id
                 left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
                 left join (
            select po2.id as orderId,
                   group_concat(distinct sl2.sales_contract_no order by sl2.sales_contract_no separator ',') as salesContractNo,
                   group_concat(distinct sl2.customer_name order by sl2.customer_name separator ',') as customerName
            from production_order po2
                     left join production_plan pp2
                               on find_in_set(pp2.id, replace(replace(replace(po2.production_plan_ids, '[', ''), ']', ''), ' ', '')) > 0
                     left join sales_ledger sl2 on sl2.id = pp2.sales_ledger_id
            group by po2.id
        ) po_sales on po_sales.orderId = po.id
                 left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id)
                 left join product p on pm.product_id = p.id
                 left join sys_user su on ppm.create_user = su.user_id
                 left join production_product_output ppo on ppo.production_product_main_id = ppm.id
        <where>
            <if test="c.productNo != null and c.productNo != ''">
                and ppm.product_no like concat('%', #{c.productNo}, '%')
            </if>
            <if test="c.workOrderNo != null and c.workOrderNo != ''">
                and pot.work_order_no like concat('%', #{c.workOrderNo}, '%')
            </if>
            <if test="c.salesContractNo != null and c.salesContractNo != ''">
                and po_sales.salesContractNo like concat('%', #{c.salesContractNo}, '%')
            </if>
            <if test="c.customerName != null and c.customerName != ''">
                and po_sales.customerName like concat('%', #{c.customerName}, '%')
            </if>
            <if test="c.productName != null and c.productName != ''">
                and p.product_name like concat('%', #{c.productName}, '%')
            </if>
            <if test="c.productModelName != null and c.productModelName != ''">
                and pm.model like concat('%', #{c.productModelName}, '%')
            </if>
            <if test="c.process != null and c.process != ''">
                and poro.operation_name like concat('%', #{c.process}, '%')
            </if>
            <if test="c.schedulingDate != null">
                and date(ppm.create_time) = #{c.schedulingDate}
            </if>
            <if test="c.productMainId != null">
                and ppm.id = #{c.productMainId}
            </if>
        </where>
        order by ppm.create_time desc
    </select>
 
    <select id="getOrderByMainId" resultType="com.ruoyi.production.pojo.ProductionOrder">
        select null
    </select>
 
    <select id="listProductionDetails" resultType="com.ruoyi.production.bean.dto.ProductionProductMainDto">
        select ppm.*,
               pot.work_order_no as workOrderNo,
               p.product_name as productName,
               pm.model as productModelName,
               pm.unit,
               poro.operation_name as process,
               ifnull(ppo.quantity, 0) as quantity,
               ifnull(ppo.scrap_qty, 0) as scrapQty
        from production_product_main ppm
                 left join production_operation_task pot on ppm.production_operation_task_id = pot.id
                 left join production_order po on pot.production_order_id = po.id
                 left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
                 left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id)
                 left join product p on pm.product_id = p.id
                 left join production_product_output ppo on ppo.production_product_main_id = ppm.id
        order by ppm.create_time desc
    </select>
 
    <select id="listMain" resultType="java.lang.Long">
        select id
        from production_product_main
        where production_operation_task_id in
        <foreach collection="list" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </select>
 
</mapper>