廖井涛
2025-08-21 bf90cf8568301edb38920e8b0a0ce7e137a668ef
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
<?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.example.erp.mapper.sd.OrderProcessDetailMapper">
 
    <insert id="insertOrderProcessDetail" >
        insert into
            order_process_detail(
                order_id,
                order_number,
                technology_number,
                process,
                process_id
            )
        values
        <foreach collection ="processDetailList" item="processDetail" separator =",">
            (
             #{processDetail.orderId},
             #{processDetail.orderNumber},
             #{processDetail.technologyNumber},
             #{processDetail.process},
              #{processDetail.processId}
             )
        </foreach>
 
 
    </insert>
    <update id="updateQuantity">
        update sd.order_process_detail as a
        inner join
        (select
             rwd.completed_quantity,
             rwd.breakage_quantity,
             rw.process_id,
             rwd.order_number,
             rwd.technology_number
              from pp.reporting_work_detail as rwd
            left join pp.reporting_work as rw
                on rwd.reporting_work_id =  rw.reporting_work_id
            where rwd.reporting_work_id =#{reportingWorkId} )  as b
        on a.process_id = b.process_id
        and a.order_number = b.order_number
        and a.technology_number = b.technology_number
 
        <if test="type == 'delete'">
            set a.reporting_work_num_count
                = a.reporting_work_num_count-b.completed_quantity,
 
            a.reporting_work_num
                = a.reporting_work_num-b.completed_quantity,
 
            a.broken_num
                = a.broken_num-b.breakage_quantity
        </if>
 
        <if test="type == 'add'">
            set a.reporting_work_num_count
            = a.reporting_work_num_count+b.completed_quantity,
 
            a.reporting_work_num
            = a.reporting_work_num+b.completed_quantity,
 
            a.broken_num
            = a.broken_num+b.breakage_quantity
        </if>
 
        where a.process = #{process}
 
    </update>
 
    <!--查询筛选后唯一的流程卡号-->
    <select id="filterOrderProcess">
      select a.* from( select id as id,process,order_number,technology_number,b.nickname,
                            case b.nickname when '' then 1
                            when null then 1
                            when 'stepC' then 2
                            when 'stepA' then 3
                            when 'stepD' then 4
                            when 'stepB' then 4
                     end as sort
 
 
        from order_process_detail
        left join (select DISTINCT basic_name,nickname from basic_data where basic_category = 'process') as b
        on b.basic_name = process
        where order_id = #{orderId}
        group by process) as a
        left join (SELECT max(count) as count,process from (SELECT count(opd1.id) as count,opd.process
                                                    from order_process_detail as opd
                                                             LEFT JOIN (SELECT id,process_id,order_number,technology_number
                                                                        from order_process_detail
                                                                        where order_id = #{orderId}) as opd1
                                                                       on opd.process_id = opd1.process_id
                                                                           and opd.order_number = opd1.order_number
                                                                           and opd.technology_number = opd1.technology_number
                                                                           and opd.id>=opd1.id
                                                    where opd.order_id =#{orderId}
                                                    group by opd.id) as a
                    GROUP BY process)   as sort1
        on sort1.process = a.process
        order by sort,sort1.count,id
 
    </select>
 
    <select id="filterLastProcess">
        select id,process,order_number,technology_number
        from order_process_detail
        where order_id = #{orderId}
        and order_number = #{orderNumber}
        and technology_number = #{technologyNumber}
        and id &gt; #{id}
        group by process
    </select>
 
 
 
    <select id="getGlassLRow">
        select
             max(a.technology_number) as rowCount,
             RowNum
        from pp.flow_card as a
        left join
            (select min((@i:=@i+1)) AS RowNum,c.*
             from pp.flow_card  as c,
                  (SELECT @i:=-1) as d
             where order_id = #{orderId}
             GROUP BY order_number,process_id
             ) as b
        on b.id = a.id
        where a.order_id = #{orderId}
        group by a.order_number,a.process_id
        order by RowNum
 
    </select>
 
    <select id="getProcessGlassLRow">
        select
            max(a.technology_number) as rowCount,
            RowNum
        from pp.flow_card as a
                 left join
             (select min((@i:=@i+1)) AS RowNum,c.*
              from pp.flow_card  as c,
                   (SELECT @i:=-1) as d
              where order_id = #{orderId}
              GROUP BY process_id
             ) as b
             on b.id = a.id
        where a.order_id = #{orderId}
        group by a.process_id
        order by RowNum
 
    </select>
    <update id="insertByReportingWorkDetail">
        update sd.order_process_detail as a
        set
            a.reporting_work_num_count=
                a.reporting_work_num_count+#{reportingWorkDetail.completedQuantity},
            a.reporting_work_num =a.reporting_work_num +#{reportingWorkDetail.completedQuantity},
            a.broken_num =a.broken_num +#{reportingWorkDetail.breakageQuantity}
 
        where
            a.process_id = #{processId}
            and a.order_number= #{reportingWorkDetail.orderNumber}
            and a.technology_number= #{reportingWorkDetail.technologyNumber}
            and a.process=#{thisProcess}
 
    </update>
 
    <select id="filterOrderProcessCollect">
        select a.id,process,order_number,technology_number,a.order_id
        from order_process_detail as a
        left join `order` as b on a.order_id=b.order_id
        where b.create_time BETWEEN #{selectTime1} and #{selectTime2}
          and position(#{orderId} in b.order_id)
        group by process
 
    </select>
 
    <select id="getGlassLRowCollect">
        select
            max(a.technology_number) as rowCount,
            RowNum
        from order_process_detail as a
                 left join
             (select min((@i:=@i+1)) AS RowNum,c.*
              from sd.order_glass_detail as c
                   left join sd.`order` o2 on c.order_id = o2.order_id,
                   (SELECT @i:=-1) as d
              where o2.create_time BETWEEN #{selectTime1} and #{selectTime2}
                and position(#{orderId} in o2.order_id)
              GROUP BY order_number
             ) as b
             on b.order_number = a.order_number
        left join sd.`order` o on a.order_id = o.order_id
        where o.create_time BETWEEN #{selectTime1} and #{selectTime2} and position(#{orderId} in o.order_id)
        group by a.order_number
    </select>
    
    <select id="selectNextProcess">
        select a.process from sd.order_process_detail as a,
                              (select id,process from sd.order_process_detail
                                  where process_id=#{processId}
                                    and position(technology_number in #{technologyNumber})
                                    and order_number=#{orderNumber}
                                    and process=#{thisProcess}
                                group by process) as b
        where a.id = b.id + 1
        and a.process_id=#{processId}
        and a.order_number=#{orderNumber}
        and position(a.technology_number in #{technologyNumber})
 
    </select>
 
    <select id="selectShiftQuantitySv">
        select * from(select CAST(concat(b.order_id,'/',a.order_number,'/',a.technology_number) as char ) as 'order_id',
               c.child_width,
               c.child_height,
               a.completed_quantity,
               a.breakage_quantity,
               a.order_number
        from pp.reporting_work as b
        left join pp.reporting_work_detail as a
            on a.reporting_work_id = b.reporting_work_id
        left join sd.order_glass_detail as c
            on b.order_id = c.order_id
            and  c.order_number = a.order_number
            and c.technology_number = a.technology_number
        where b.reviewed_state >=0
        and b.creator_id = #{creatorId}
        and UNIX_TIMESTAMP(b.reporting_work_time) BETWEEN UNIX_TIMESTAMP(#{startDatetime}) and UNIX_TIMESTAMP(#{endDatetime})
        order by b.id desc ) as e
        <if test="step != null and step != ''">
            group by e.order_number
        </if>
    </select>
    
    <select id="getBehindProcess">
        select group_concat(process) from sd.order_process_detail as a
        where a.order_id = #{orderId}
        and a.process_id = #{processId}
        and a.order_number =#{orderNumber}
        and a.technology_number =#{technologyNumber}
        and a.id>(select id
                  from sd.order_process_detail as b
                  where b.order_id = #{orderId}
                    and b.process_id = #{processId}
                    and b.order_number =#{orderNumber}
                    and b.technology_number =#{technologyNumber}
                  and b.process = #{thisProcess}
                )
    </select>
</mapper>