昨天 69dc6b16ef04bdfbfa65f77c169c0847dc7e65c2
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
155
156
157
158
159
160
161
162
<?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,
               pa.technology_operation_name as process,
               ifnull(ppo.quantity, 0) as quantity,
               ifnull(ppo.scrap_qty, 0) as scrapQty,
               date(pa.scheduling_date) as schedulingDate,
               pa.scheduling_user_name as schedulingUserName,
               cast(ifnull(pa.work_hours, 0) as decimal(18,4)) as workHours,
               cast(
                   ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
                   case
                       when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
                       then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
                       else 1
                   end
                   as decimal(18,4)
               ) as wages
        from production_account pa
                 left join production_product_main ppm on ppm.id = pa.production_product_main_id
                 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 product p_parent on p_parent.id = p.parent_id
                 left join production_product_output ppo on ppo.production_product_main_id = ppm.id
        <where>
            <if test="c != null">
                <if test="c.productCategory != null and c.productCategory != ''">
                    and p_parent.product_name like concat('%', #{c.productCategory}, '%')
                </if>
                <if test="c.specificationModel != null and c.specificationModel != ''">
                    and pm.model like concat('%', #{c.specificationModel}, '%')
                </if>
                <if test="c.schedulingUserId != null">
                    and pa.scheduling_user_id = #{c.schedulingUserId}
                </if>
                <if test="c.schedulingUserName != null and c.schedulingUserName != ''">
                    and pa.scheduling_user_name like concat('%', #{c.schedulingUserName}, '%')
                </if>
                <if test="c.process != null and c.process != ''">
                    and pa.technology_operation_name like concat('%', #{c.process}, '%')
                </if>
                <if test="c.entryDate != null">
                    and date(pa.scheduling_date) = #{c.entryDate}
                </if>
                <if test="c.entryDateStart != null">
                    and date(pa.scheduling_date) &gt;= #{c.entryDateStart}
                </if>
                <if test="c.entryDateEnd != null">
                    and date(pa.scheduling_date) &lt;= #{c.entryDateEnd}
                </if>
            </if>
        </where>
        order by pa.scheduling_date desc, pa.id 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>