刘光辉
15 小时以前 34981c30a78e8bbd7791131059a9210f9928b62c
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
<?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="jnpf.limsMapper.LimsWendingxingFenxiMapper">
 
    <resultMap id="optionMap" type="jnpf.limsEntity.LimsWendingxingFenxiOptionVo">
        <id property="key" column="key"/>
        <result property="id" column="id"/>
        <result property="code" column="code"/>
        <result property="name" column="name"/>
        <result property="guige" column="guige"/>
        <result property="shujuLeixing" column="shuju_leixing"/>
        <result property="unit" column="unit"/>
        <result property="jihuaId" column="jihua_id"/>
        <result property="jihuaBianhao" column="jihua_bianhao"/>
        <result property="fanganMingcheng" column="fangan_mingcheng"/>
        <result property="pihao" column="pihao"/>
    </resultMap>
 
    <resultMap id="rowMap" type="jnpf.limsEntity.LimsWendingxingFenxiRowVo">
        <result property="yangpinMingcheng" column="yangpin_mingcheng"/>
        <result property="jihuaId" column="jihua_id"/>
        <result property="jihuaBianhao" column="jihua_bianhao"/>
        <result property="pihao" column="pihao"/>
        <result property="jieguoLuruRiqi" column="jieguo_luru_riqi"/>
        <result property="zhouqi" column="zhouqi"/>
        <result property="zhouqiDanwei" column="zhouqi_danwei"/>
        <result property="xiangmuId" column="xiangmu_id"/>
        <result property="xiangmuBianma" column="xiangmu_bianma"/>
        <result property="xiangmuMingcheng" column="xiangmu_mingcheng"/>
        <result property="rawResult" column="raw_result"/>
        <result property="shangxian" column="shangxian"/>
        <result property="xiaxian" column="xiaxian"/>
        <result property="unit" column="unit"/>
        <result property="shujuLeixing" column="shuju_leixing"/>
        <result property="biaozhunId" column="biaozhun_id"/>
        <result property="jianyanJielun" column="jianyan_jielun"/>
        <result property="yichangDiaochaLeixing" column="yichang_diaocha_leixing"/>
    </resultMap>
 
    <resultMap id="completenessMap" type="jnpf.limsEntity.LimsWendingxingFenxiCompletenessRecordVo">
        <result property="expectedKey" column="expected_key"/>
        <result property="jianyanZhuangtai" column="jianyan_zhuangtai"/>
        <result property="rawResult" column="raw_result"/>
        <result property="xiangmuId" column="xiangmu_id"/>
        <result property="zhouqi" column="zhouqi"/>
        <result property="zhouqiDanwei" column="zhouqi_danwei"/>
    </resultMap>
 
    <sql id="approvedPlanWhere">
        p.f_tenant_id = #{tenantId}
        AND p.f_flow_state = 2
        AND COALESCE(p.f_delete_mark, 0) &lt;&gt; 1
    </sql>
 
    <sql id="softDeleteYangpin">
        COALESCE(yp.f_delete_mark, 0) &lt;&gt; 1
    </sql>
 
    <select id="selectCategories" resultMap="optionMap">
        SELECT DISTINCT ql.fenlei_bianma AS id,
               ql.fenlei_bianma AS key,
               ql.fenlei_bianma AS code,
               ql.fenlei_mingcheng AS name
        FROM lims_wendingxing_kaoca_jihua p
        INNER JOIN yangpin_guanli yp
                ON yp.f_id = p.yangpin_id AND yp.f_tenant_id = p.f_tenant_id
        INNER JOIN qingyan_leixing ql
                ON yp.leixin = ql.fenlei_bianma AND ql.f_tenant_id = p.f_tenant_id
        WHERE <include refid="approvedPlanWhere"/>
          AND <include refid="softDeleteYangpin"/>
          AND COALESCE(ql.f_delete_mark, 0) &lt;&gt; 1
          AND ql.biz_enabled = 'enabled'
        ORDER BY code, name
    </select>
 
    <select id="selectProducts" resultMap="optionMap">
        SELECT DISTINCT yp.f_id AS id,
               yp.f_id AS key,
               yp.bianma AS code,
               yp.mingcheng AS name,
               yp.guige AS guige
        FROM lims_wendingxing_kaoca_jihua p
        INNER JOIN yangpin_guanli yp
                ON yp.f_id = p.yangpin_id AND yp.f_tenant_id = p.f_tenant_id
        INNER JOIN qingyan_leixing ql
                ON yp.leixin = ql.fenlei_bianma AND ql.f_tenant_id = p.f_tenant_id
        WHERE <include refid="approvedPlanWhere"/>
          AND <include refid="softDeleteYangpin"/>
          AND COALESCE(ql.f_delete_mark, 0) &lt;&gt; 1
          AND ql.biz_enabled = 'enabled'
          AND ql.fenlei_bianma = #{fenleiBianma}
        ORDER BY code, name, id
    </select>
 
    <select id="selectItems" resultMap="optionMap">
        SELECT DISTINCT z.f_id AS id,
               z.f_id AS key,
               z.jianyan_xiangmu_bianma AS code,
               z.jianyan_xiangmu_mingcheng AS name,
               z.shuju_leixing AS shuju_leixing,
               z.jianyan_danwei AS unit
        FROM lims_wendingxing_kaoca_jihua p
        INNER JOIN yangpin_guanli yp
                ON yp.f_id = p.yangpin_id AND yp.f_tenant_id = p.f_tenant_id
        INNER JOIN qingyan_leixing ql
                ON yp.leixin = ql.fenlei_bianma AND ql.f_tenant_id = p.f_tenant_id
        INNER JOIN lims_wendingxing_kaoca_jiangyan_xiangmu kx
                ON kx.kaoca_id = p.kaoca_id AND kx.f_tenant_id = p.f_tenant_id
        INNER JOIN zhiliang_biaozhun_guanli_zixiang z
                ON z.f_id = kx.zhiliang_biaozhun_guanli_zixiang_id
               AND z.f_tenant_id = p.f_tenant_id
        WHERE <include refid="approvedPlanWhere"/>
          AND <include refid="softDeleteYangpin"/>
          AND COALESCE(ql.f_delete_mark, 0) &lt;&gt; 1
          AND COALESCE(kx.f_delete_mark, 0) &lt;&gt; 1
          AND COALESCE(z.f_delete_mark, 0) &lt;&gt; 1
          AND TRIM(z.shuju_leixing) = '数值'
          AND ql.biz_enabled = 'enabled'
          AND ql.fenlei_bianma = #{fenleiBianma}
          AND p.yangpin_id = #{yangpinId}
        ORDER BY name, code, id
    </select>
 
    <select id="selectPlans" resultMap="optionMap">
        SELECT DISTINCT p.f_id AS id,
               p.f_id AS key,
               p.bianhao AS code,
               p.bianhao AS name
        FROM lims_wendingxing_kaoca_jihua p
        INNER JOIN lims_wendingxing_kaoca_jiangyan_xiangmu kx
                ON kx.kaoca_id = p.kaoca_id AND kx.f_tenant_id = p.f_tenant_id
        WHERE <include refid="approvedPlanWhere"/>
          AND COALESCE(kx.f_delete_mark, 0) &lt;&gt; 1
          AND p.yangpin_id = #{yangpinId}
          <if test="xiangmuIds != null and xiangmuIds.size() > 0">
              AND kx.zhiliang_biaozhun_guanli_zixiang_id IN
              <foreach collection="xiangmuIds" item="id" open="(" separator="," close=")">#{id}</foreach>
          </if>
        ORDER BY code, id
    </select>
 
    <select id="selectBatches" resultMap="optionMap">
        SELECT DISTINCT p.f_id || '::' || py.pihao AS id,
               p.f_id || '::' || py.pihao AS key,
               p.f_id AS jihua_id,
               p.bianhao AS jihua_bianhao,
               p.wendingxing_fangan_mingcheng AS fangan_mingcheng,
               py.pihao AS pihao,
               py.pihao AS name
        FROM lims_wendingxing_kaoca_jihua p
        INNER JOIN lims_wendingxing_kaoca_jihua_yangpin py
                ON py.kaoca_jihua_id = p.f_id AND py.f_tenant_id = p.f_tenant_id
        INNER JOIN lims_wendingxing_kaoca_jiangyan_xiangmu kx
                ON kx.kaoca_id = p.kaoca_id AND kx.f_tenant_id = p.f_tenant_id
        WHERE <include refid="approvedPlanWhere"/>
          AND COALESCE(py.f_delete_mark, 0) &lt;&gt; 1
          AND COALESCE(kx.f_delete_mark, 0) &lt;&gt; 1
          AND p.yangpin_id = #{yangpinId}
          <if test="xiangmuIds != null and xiangmuIds.size() > 0">
              AND kx.zhiliang_biaozhun_guanli_zixiang_id IN
              <foreach collection="xiangmuIds" item="id" open="(" separator="," close=")">#{id}</foreach>
          </if>
          <if test="jihuaIds != null and jihuaIds.size() > 0">
              AND p.f_id IN
              <foreach collection="jihuaIds" item="id" open="(" separator="," close=")">#{id}</foreach>
          </if>
        ORDER BY jihua_bianhao, jihua_id, pihao
    </select>
 
    <select id="selectRows" resultMap="rowMap">
        SELECT COALESCE(NULLIF(q.chanpin_mingcheng, ''), p.yangpin_mingcheng) AS yangpin_mingcheng,
               p.f_id AS jihua_id,
               p.bianhao AS jihua_bianhao,
               COALESCE(NULLIF(q.pihao, ''), c.pihao) AS pihao,
               COALESCE(jx.jieguo_luru_riqi, jx.wancheng_riqi) AS jieguo_luru_riqi,
               COALESCE(NULLIF(q.zhouqi, ''), c.zhouqi::text) AS zhouqi,
               COALESCE(NULLIF(q.zhouqi_danwei, ''), c.zhouqi_danwei) AS zhouqi_danwei,
               z.f_id AS xiangmu_id,
               COALESCE(NULLIF(jx.jianyan_xiangmu_bianma, ''), z.jianyan_xiangmu_bianma) AS xiangmu_bianma,
               COALESCE(NULLIF(jx.jianyan_xiangmu_mingcheng, ''), z.jianyan_xiangmu_mingcheng) AS xiangmu_mingcheng,
               jx.jianyan_jieguo AS raw_result,
               z.biaozhun_shangxian AS shangxian,
               z.biaozhun_xiaxian AS xiaxian,
               COALESCE(NULLIF(TRIM(jxm.moren_danwei), ''), '/') AS unit,
               COALESCE(NULLIF(jx.shuju_leixing, ''), z.shuju_leixing) AS shuju_leixing,
               z.f_foreign_id AS biaozhun_id,
               jx.jianyan_jielun AS jianyan_jielun,
               jx.yichang_diaocha_leixing AS yichang_diaocha_leixing
        FROM lims_wendingxing_kaoca_jihua p
        INNER JOIN lims_qingyandan q
                ON q.wendingxing_jilu_id = p.f_id AND q.f_tenant_id = p.f_tenant_id
        INNER JOIN lims_wendingxing_kaoca_jihua_zhouqi c
                ON q.wendingxing_zhouqi_id = c.f_id AND c.f_tenant_id = p.f_tenant_id
        INNER JOIN lims_jianyan_xiang jx
                ON jx.qingyandan_id = q.f_id AND jx.f_tenant_id = p.f_tenant_id
        INNER JOIN zhiliang_biaozhun_guanli_zixiang z
                ON jx.f_foreign_id = z.f_id AND z.f_tenant_id = p.f_tenant_id
        LEFT JOIN jianyan_xiangmu_guanli jxm
               ON jxm.bianma = z.jianyan_xiangmu_bianma
              AND jxm.f_tenant_id = p.f_tenant_id
              AND COALESCE(jxm.f_delete_mark, 0) &lt;&gt; 1
        WHERE <include refid="approvedPlanWhere"/>
          AND COALESCE(q.f_delete_mark, 0) &lt;&gt; 1
          AND COALESCE(c.f_delete_mark, 0) &lt;&gt; 1
          AND COALESCE(jx.f_delete_mark, 0) &lt;&gt; 1
          AND COALESCE(z.f_delete_mark, 0) &lt;&gt; 1
          AND q.qingyan_fenlei = 'wendingxing'
          AND jx.jianyan_zhuangtai = 'audited'
          AND p.yangpin_id = #{param.yangpinId}
          AND z.f_id IN
          <foreach collection="param.xiangmuIds" item="id" open="(" separator="," close=")">#{id}</foreach>
          <if test="param.jihuaIds != null and param.jihuaIds.size() > 0">
              AND p.f_id IN
              <foreach collection="param.jihuaIds" item="id" open="(" separator="," close=")">#{id}</foreach>
          </if>
          <if test="param.pihaoKeys != null and param.pihaoKeys.size() > 0">
              AND
              <foreach collection="param.pihaoKeys" item="batch" open="(" separator=" OR " close=")">
                  (p.f_id = #{batch.jihuaId} AND COALESCE(NULLIF(q.pihao, ''), c.pihao) = #{batch.pihao})
              </foreach>
          </if>
        ORDER BY xiangmu_mingcheng, xiangmu_bianma, p.bianhao, p.f_id,
                 pihao, c.zhouqi, c.zhouqi_danwei, jieguo_luru_riqi, jx.f_id
    </select>
 
    <select id="selectCompleteness" resultMap="completenessMap">
        WITH mapped AS (
            SELECT p.f_id AS jihua_id,
                   string_agg(DISTINCT kx.zhiliang_biaozhun_guanli_zixiang_id, ',') AS item_ids
            FROM lims_wendingxing_kaoca_jihua p
            INNER JOIN lims_wendingxing_kaoca_jiangyan_xiangmu kx
                    ON kx.kaoca_id = p.kaoca_id AND kx.f_tenant_id = p.f_tenant_id
            WHERE p.f_tenant_id = #{tenantId}
              AND p.f_flow_state = 2
              AND COALESCE(p.f_delete_mark, 0) &lt;&gt; 1
              AND COALESCE(kx.f_delete_mark, 0) &lt;&gt; 1
            GROUP BY p.f_id
        ), expected AS (
            SELECT p.f_id AS jihua_id,
                   c.f_id AS zhouqi_id,
                   COALESCE(NULLIF(c.pihao, ''), py.pihao) AS pihao,
                   c.zhouqi::text AS zhouqi,
                   c.zhouqi_danwei AS zhouqi_danwei,
                   TRIM(BOTH '"' FROM item.item_id) AS xiangmu_id
            FROM lims_wendingxing_kaoca_jihua p
            INNER JOIN lims_wendingxing_kaoca_jihua_zhouqi c
                    ON c.kaoca_jihua_id = p.f_id AND c.f_tenant_id = p.f_tenant_id
            INNER JOIN lims_wendingxing_kaoca_jihua_yangpin py
                    ON py.kaoca_jihua_id = p.f_id AND py.f_tenant_id = p.f_tenant_id
            INNER JOIN mapped ON mapped.jihua_id = p.f_id
            CROSS JOIN LATERAL regexp_split_to_table(
                COALESCE(NULLIF(TRIM(BOTH '[] ' FROM c.jiancha_xiangmu_ids), ''), mapped.item_ids),
                '\s*,\s*'
            ) AS item(item_id)
            WHERE <include refid="approvedPlanWhere"/>
              AND COALESCE(c.f_delete_mark, 0) &lt;&gt; 1
              AND COALESCE(py.f_delete_mark, 0) &lt;&gt; 1
              AND (NULLIF(c.pihao, '') IS NULL OR c.pihao = py.pihao)
              AND p.yangpin_id = #{param.yangpinId}
              AND TRIM(BOTH '"' FROM item.item_id) IN
              <foreach collection="param.xiangmuIds" item="id" open="(" separator="," close=")">#{id}</foreach>
              <if test="param.jihuaIds != null and param.jihuaIds.size() > 0">
                  AND p.f_id IN
                  <foreach collection="param.jihuaIds" item="id" open="(" separator="," close=")">#{id}</foreach>
              </if>
              <if test="param.pihaoKeys != null and param.pihaoKeys.size() > 0">
                  AND
                  <foreach collection="param.pihaoKeys" item="batch" open="(" separator=" OR " close=")">
                      (p.f_id = #{batch.jihuaId} AND COALESCE(NULLIF(c.pihao, ''), py.pihao) = #{batch.pihao})
                  </foreach>
              </if>
        )
        SELECT e.jihua_id || '::' || e.zhouqi_id || '::' || COALESCE(e.pihao, '') || '::' || e.xiangmu_id AS expected_key,
               jx.jianyan_zhuangtai AS jianyan_zhuangtai,
               jx.jianyan_jieguo AS raw_result,
               e.xiangmu_id AS xiangmu_id,
               e.zhouqi AS zhouqi,
               e.zhouqi_danwei AS zhouqi_danwei
        FROM expected e
        LEFT JOIN lims_qingyandan q
               ON q.wendingxing_jilu_id = e.jihua_id
              AND q.wendingxing_zhouqi_id = e.zhouqi_id
              AND q.f_tenant_id = #{tenantId}
              AND COALESCE(NULLIF(q.pihao, ''), e.pihao) = e.pihao
              AND q.qingyan_fenlei = 'wendingxing'
              AND COALESCE(q.f_delete_mark, 0) &lt;&gt; 1
        LEFT JOIN lims_jianyan_xiang jx
               ON jx.qingyandan_id = q.f_id
              AND jx.f_foreign_id = e.xiangmu_id
              AND jx.f_tenant_id = #{tenantId}
              AND COALESCE(jx.f_delete_mark, 0) &lt;&gt; 1
        ORDER BY expected_key, jianyan_zhuangtai
    </select>
</mapper>