jinlin
2024-01-10 cdf29a8f6fb9990f82ccc1d3f47bfba48cfaf4fc
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
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
<?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.zt.modules.workflowconfig.dao.WfDefStepDao">
 
    <select id="queryStepsList" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT
            wds.*,
            s1.name as stepRouterName,
            s2.name as stepReadRouterName,
            case when task_group='cj' then '厂家'
                    when task_group='zy' then '专业'
                    else '' end as taskGroupName
        FROM
            wf_def_step wds
            LEFT JOIN wf_def a ON a.id = wf_def_id
            left join sys_menu s1 on s1.id = wds.step_router_id
            left join sys_menu s2 on s2.id = wds.step_read_router_id
        <where>
            <if test="whereSql!=null">
                ${whereSql}
            </if>
            and a.id = #{id}
            and wds.is_delete = 0
        </where>
        order by wds.step_no
    </select>
 
    <select id="workflowSelect" resultType="com.zt.modules.workflowconfig.model.WfDef">
        SELECT
            id,
            name
        FROM
            wf_def
        WHERE
           status = 1 and is_delete = 0
        order by id
    </select>
 
    <select id="getUserByWorkflowSteps" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT
         a.id as stepId,
         b.id as userId,
         b.user_name as userName,
         b.nick_name as realName,
         c.dept_name AS deptName,
         d.dept_name AS companyName
        FROM
         wf_def_step a
         LEFT JOIN sys_user b ON instr(a.approver_ids,b.id) > 0
         LEFT JOIN sys_dept c ON b.dept_id = c.id
         LEFT JOIN sys_dept d ON b.company_id = d.id
        WHERE
         a.is_delete = 0
         AND a.id = #{stepsId}
    </select>
 
    <select id="getUserList" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT
        a.id AS userId,
        a.username AS userName,
        a.real_name AS realName,
        c.name AS deptName
        FROM
        (
        SELECT
        a.*
        FROM
        sys_user a,
        wf_def_step b
        WHERE
        (
        b.approver_ids IS NULL
        or CONCAT( ',', b.approver_ids, ',' ) NOT LIKE CONCAT( '%,', a.user_id, ',%' )
        )
        <if test="whereSql!=null">
           and ${whereSql}
        </if>
        <if test="userName != '' and userName != null">
            and a.name like concat('%',#{userName},'%')
        </if>
        AND a.is_delete = 0
        ORDER BY  a.name
        ) a
        LEFT JOIN sys_dept c ON a.dept_id = c.id
    </select>
 
    <update id="addWorkflowStepsUser">
        update wf_def_step set approver_ids = #{userId},update_date = CURRENT_TIMESTAMP where id = #{stepId}
    </update>
 
    <update id="deleteWorkflowStepsUser">
        update wf_def_step set approver_ids = #{userId},update_date = CURRENT_TIMESTAMP where id = #{stepId}
    </update>
 
    <update id="delete">
        update wf_def_step set is_delete = 1,update_date = CURRENT_TIMESTAMP where id = #{id}
    </update>
 
    <select id="getRoleByWorkflowSteps" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT
         a.id as stepId,
         b.id as roleId,
         b.name as roleName,
         d.name AS companyName
        FROM
         wf_def_step a
         LEFT JOIN sys_role b ON instr(a.approver_role_ids,b.id) > 0
         LEFT JOIN sys_dept d ON b.company_id = d.id
        WHERE
         a.is_delete = 0
         AND a.id = #{stepsId}
    </select>
 
    <select id="getRoleList" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT
        a.id AS roleId,
        a.name AS roleName,
        d.name AS companyName
        FROM
        (
        SELECT
        a.*
        FROM
        sys_role a,
        wf_def_step b
        WHERE
        (
        b.approver_role_ids IS NULL
        or CONCAT( ',', b.approver_role_ids, ',' ) NOT LIKE CONCAT( '%,', a.id, ',%' )
        )
        <if test="whereSql!=null">
            and ${whereSql}
        </if>
        <if test="roleName != '' and roleName != null">
            and a.name like concat('%',#{roleName},'%')
        </if>
        AND a.is_delete = 0
 
        ) a
        LEFT JOIN sys_dept d ON a.company_id = d.id
        WHERE a.id not in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm','rx'))
        ORDER BY d.name, a.sort
    </select>
 
    <update id="addWorkflowStepsRole">
        update wf_def_step set approver_role_ids = #{roleId},update_date = CURRENT_TIMESTAMP where id = #{stepId}
    </update>
 
    <update id="deleteWorkflowStepsRole">
        update wf_def_step set approver_role_ids = #{roleId},update_date = CURRENT_TIMESTAMP where id = #{stepId}
    </update>
 
    <update id="deleteFlowMenu">
        update sys_role_menu set is_delete=0,update_date = CURRENT_TIMESTAMP WHERE ID IN
(
    SELECT id FROM (
    SELECT * FROM (
    SELECT a.step_router_id AS menu_id,b.id AS role_id FROM wf_def_step a ,sys_role b
    WHERE a.is_delete =0 AND b.is_delete=0
       AND CONCAT(',',a.approver_role_ids,',') LIKE CONCAT(',',b.id,',')
    UNION
    SELECT a.step_read_router_id AS menu_id,b.id AS role_id FROM wf_def_step a ,sys_role b
    WHERE a.is_delete =0 AND b.is_delete=0
        AND CONCAT(',',a.approver_role_ids,',') LIKE CONCAT(',',b.id,',')
    )
    WHERE menu_id IS NOT NULL
    GROUP BY menu_id,role_id
    ) b,sys_role_menu c WHERE b.menu_id=c.menu_id AND b.role_id=c.role_id
)
    </update>
 
    <select id="selectFlowMenu" resultType="com.zt.modules.workflowconfig.dto.FlowMenuDto">
        select c.*,d.id as id2,d.menu_id as menuId2 from (
        SELECT * FROM (
        SELECT a.step_router_id AS menu_id,b.id AS role_id
        FROM wf_def_step a ,sys_role b
        WHERE a.is_delete =0 AND b.is_delete=0
        AND CONCAT(',',a.approver_role_ids,',') LIKE CONCAT('%,',b.id,',%')
        UNION
        SELECT a.step_read_router_id AS menu_id,b.id AS role_id
        FROM wf_def_step a ,sys_role b
        WHERE a.is_delete =0 AND b.is_delete=0
        AND CONCAT(',',a.approver_role_ids,',') LIKE CONCAT('%,',b.id,',%')
        ) b
        WHERE menu_id IS NOT NULL AND menu_id &lt;&gt; 0
        GROUP BY menu_id,role_id
        )c
        left join sys_role_menu d on d.role_id = c.role_id and d.menu_id = c.menu_id
        where d.is_delete is null or d.is_delete = 1
    </select>
    <update id="deleteRoleFlowMenu">
        update sys_role_menu set is_delete =1,update_date = CURRENT_TIMESTAMP where id in (select id2 from (select c.*,d.id as id2 from (
        SELECT * FROM (
        SELECT a.step_router_id AS menu_id,b.id AS role_id
        FROM wf_def_step a ,sys_role b
        WHERE a.is_delete =0 AND b.is_delete=0
        AND CONCAT(',',a.approver_role_ids,',') LIKE CONCAT('%,',b.id,',%')
        UNION
        SELECT a.step_read_router_id AS menu_id,b.id AS role_id
        FROM wf_def_step a ,sys_role b
        WHERE a.is_delete =0 AND b.is_delete=0
        AND CONCAT(',',a.approver_role_ids,',') LIKE CONCAT('%,',b.id,',%')
        ) b
        WHERE menu_id IS NOT NULL AND menu_id &lt;&gt; 0
        GROUP BY menu_id,role_id
        )c
        join sys_role_menu d
        join sys_menu m
        where d.menu_id = c.menu_id and d.menu_id = m.id and m.show_menu = 0
        ) f where f.role_id is null
        )
    </update>
 
    <select id="selectFlowMenuOld" resultType="com.zt.modules.workflowconfig.dto.FlowMenuDto">
        WITH menuList AS (
            SELECT step_router_id AS step_menu_id FROM wf_def_step WHERE is_delete =0 AND step_router_id IS NOT null
            UNION
            SELECT step_read_router_id AS step_menu_id FROM wf_def_step WHERE is_delete =0 AND step_read_router_id IS NOT null
        ),
             shoudList AS (
                 SELECT * FROM (
                                   SELECT a.step_router_id AS menu_id,b.id AS role_id
                                   FROM wf_def_step a ,sys_role b
                                   WHERE a.is_delete =0 AND b.is_delete=0
                                     AND CONCAT(',',a.approver_role_ids,',') LIKE CONCAT('%,',b.id,',%')
                                   UNION
                                   SELECT a.step_read_router_id AS menu_id,b.id AS role_id
                                   FROM wf_def_step a ,sys_role b
                                   WHERE a.is_delete =0 AND b.is_delete=0
                                     AND CONCAT(',',a.approver_role_ids,',') LIKE CONCAT('%,',b.id,',%')
                               )
                 WHERE menu_id IS NOT NULL AND menu_id &lt;&gt; 0
                 GROUP BY menu_id,role_id
             ),existList as(
            SELECT id as id2, menu_id AS menu_id2, role_id  AS role_id2, is_delete AS is_delete2
            FROM sys_role_menu b
            WHERE menu_id IN (SELECT step_menu_id from menuList)
              AND role_id NOT IN (1331061516255227905,1271368584383188993)
        )
 
        SELECT * FROM shoudList FULL OUTER JOIN existList ON menu_id=menu_id2 AND role_id = role_id2
    </select>
 
 
    <select id="querySteps" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
 
        SELECT wds.* FROM wf_def_step wds LEFT JOIN wf_def wd ON wds.wf_def_id=wd.ID WHERE
            wd.code=#{wfCode} AND wds.is_delete=0 ORDER BY wds.step_no ASC LIMIT 1
    </select>
 
    <select id="queryAllSteps" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT wds.* FROM wf_def_step wds LEFT JOIN wf_def wd ON wds.wf_def_id=wd.id WHERE
            wd.code=#{wfCode} AND wds.is_delete=0 ORDER BY wds.step_no ASC LIMIT 100
    </select>
 
    <select id="getAllSteps" resultType="java.lang.String">
        SELECT step_marker
        FROM wf_def_step
        WHERE is_delete = 0
            AND step_no &lt;&gt; 100
        ORDER BY wf_def_id,step_no
    </select>
 
    <select id="queryWfDefFirstStep" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT * FROM wf_def_step wds
        WHERE 1=1
        <if test="wfDefIdCode!=null">
            and (CONCAT('',wf_def_id ) =#{wfDefIdCode} or wf_def_id in (select id from wf_def where code=#{wfDefIdCode}))
        </if>
        ORDER BY wds.step_no ASC LIMIT 1
    </select>
 
    <select id="queryWfDefFinallyStep" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT * FROM wf_def_step wds
        WHERE 1=1 and wds.is_delete=0
        <if test="wfDefIdCode!=null">
            and (CONCAT('',wf_def_id ) = #{wfDefIdCode} or wf_def_id in (select id from wf_def where code=#{wfDefIdCode}))
        </if>
        ORDER BY wds.step_no desc LIMIT 1
    </select>
 
    <select id="queryWfDefStep" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT * FROM wf_def_step wds
        WHERE 1=1
        <if test="wfDefIdCode!=null">
            and (CONCAT('',wf_def_id ) =#{wfDefIdCode} or wf_def_id in (select id from wf_def where code=#{wfDefIdCode}))  /*liquan*/
        </if>
        <if test="stepIdMarker!=null">
            and (CONCAT('',id) = #{stepIdMarker} or  step_Marker = #{stepIdMarker})  /*liquan*/
        </if>
        ORDER BY wds.step_no desc LIMIT 1
    </select>
 
    <select id="queryWfDefNextStep" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        <![CDATA[
        SELECT *
        FROM wf_def_step wds
        WHERE is_delete = 0
            and step_type = 0
            and wds.wf_def_id=#{wfDefId}
            AND wds.step_no > #{stepNo}
        ORDER BY wds.step_no ASC LIMIT 1
        ]]>
    </select>
 
    <select id="queryWfDefPreStep" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        <![CDATA[
        SELECT *
        FROM wf_def_step wds
        WHERE is_delete = 0
            and step_type = 0
            AND wds.wf_def_id = #{wfDefId}
            AND wds.step_no < #{stepNo}
        ORDER BY wds.step_no DESC LIMIT 1
        ]]>
    </select>
 
    <select id="queryStepsBYMap" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        SELECT * FROM wf_def_step a,
        wf_def b
        WHERE a.is_delete=0
        and a.is_delete=0
        <if test="wfId!=null">
            AND b.id=#{wfId}
        </if>
        <if test="wfCode!=null">
            AND b.code=#{wfCode}
        </if>
        <if test="wfDefId!=null">
            AND a.wf_def_id=#{wfDefId}
        </if>
        <if test="stepMarker!=null">
            AND a.step_marker=#{stepMarker}
        </if>
        ORDER BY a.step_no
    </select>
 
    <select id="getWorkflowStepByCode" resultType="com.zt.modules.workflowconfig.model.WfDefStep">
        <![CDATA[
        SELECT *
        FROM wf_def_step wds
        WHERE is_delete = 0
            AND wds.step_marker = #{stepMarker}
        ORDER BY wds.step_no ASC LIMIT 1
        ]]>
    </select>
 
</mapper>