zouyu
2025-03-19 3647aa5008055528f075ee73002542a1399575ae
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
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
package com.ruoyi.inspect.handler;
 
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsFiberMapper;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsProductResultMapper;
import com.ruoyi.inspect.pojo.InsFiber;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsProductResult;
import com.ruoyi.inspect.pojo.InsReport;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
 
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
/**
 * 温度循环报告生成处理方法
 */
public class TemperatureCyclingReportHandler1 {
 
    private final InsProductMapper insProductMapper;
 
    private final InsFiberMapper insFiberMapper;
 
    private final InsProductResultMapper insProductResultMapper;
 
    public TemperatureCyclingReportHandler1(InsProductMapper insProductMapper, InsFiberMapper insFiberMapper, InsProductResultMapper insProductResultMapper) {
        this.insProductMapper = insProductMapper;
        this.insFiberMapper = insFiberMapper;
        this.insProductResultMapper = insProductResultMapper;
    }
 
    public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String, Object>> tables3) {
        AtomicInteger index3 = new AtomicInteger(1);
        // 自定义比较器
        Comparator<InsProduct> customComparator = Comparator.comparing(
                InsProduct::getInspectionItemSubclass,
                Comparator.naturalOrder()
        );
        samples.forEach(sample -> {
            // 查询温度循环下的检验项目
            List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getInsSampleId, sample.getId())
                    .isNotNull(InsProduct::getSpecialItemParentId)
                    .isNotNull(InsProduct::getInsFiberId)
                    .isNotNull(InsProduct::getInspectionItemClass));
            //获取所有光纤色标
            List<InsFiber> insFibers = insFiberMapper.selectBatchIds(insPros.stream().map(InsProduct::getInsFiberId).collect(Collectors.toList()));
            //获取光纤色标的数量(行数)
            long size2 = insPros.stream().map(InsProduct::getInsFiberId).distinct().count();
            //获取所有的光纤项目(1310nm)
            List<String> nm = insPros.stream().map(InsProduct::getInspectionItemClass).distinct().collect(Collectors.toList());
            /*先根据循环次数进行遍历*/
            Map<String, List<InsProduct>> xunhuans = insPros.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
            for (int i = 0; i < xunhuans.entrySet().size(); i++) {
                //获取该循环的所有温度
                String s1 = String.valueOf((i + 1));
                //过滤出20℃(常温)和20℃
                List<InsProduct> filterList = xunhuans.get(s1).stream().filter(f->f.getInspectionItemSubclass().equals("20℃(常温)")).collect(Collectors.toList());
                List<InsProduct> filterList2 = xunhuans.get(s1).stream().filter(f->f.getInspectionItemSubclass().equals("20℃")).collect(Collectors.toList());
                //排序其他温度
                List<InsProduct> sortList = xunhuans.get(s1).stream()
                        .filter(f->!Arrays.asList("20℃(常温)","20℃").contains(f.getInspectionItemSubclass()))
                        .sorted(customComparator).collect(Collectors.toList());
                //合并
                Map<String, List<InsProduct>> wendus = Stream.of(filterList,sortList,filterList2).flatMap(List::stream).collect(Collectors.groupingBy(
                        InsProduct::getInspectionItemSubclass,
                        LinkedHashMap::new, // 保证 Map 中键的顺序是插入顺序
                        Collectors.toCollection(ArrayList::new) // 保证每个组内元素顺序
                ));
                List<String> wendu = new ArrayList<>(wendus.keySet());
                for (int m = 0; m < wendu.size(); m += 3) {
                    int wenduSize = (wendu.size()-m)/3>0?3:(wendu.size()-m);
                    //三个温度一张表,当遍历到第四个温度的时候需要重新建表
                    List<RowRenderData> rows = new ArrayList<>();
                    //表格的行数(光纤色标的数量+8)
                    for (int j = 0; j < size2 + 8; j++) {
                        RowRenderData rowRenderData = new RowRenderData();
                        RowStyle rowStyle = new RowStyle();
                        rowStyle.setHeight(40);
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        //表格的列数(2*光纤项目*3+1)
                        for (int k = 0; k < 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1; k++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                            cellRenderData.setCellStyle(cellStyle);
                            List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                            ParagraphStyle paragraphStyle = new ParagraphStyle();
                            paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                            paragraphRenderData.setParagraphStyle(paragraphStyle);
                            List<RenderData> renderData = new ArrayList<>();
                            TextRenderData textRenderData = new TextRenderData();
                            Style style = new Style();
                            style.setFontFamily("宋体");
                            style.setColor("000000");
                            style.setFontSize(10);
                            textRenderData.setStyle(style);
                            if (j == 0) {
                                //第一行
                                int size = (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)));
                                switch (size){
                                    case 12:
                                        if (k <= 2) {
                                            //第一列
                                            textRenderData.setText("样品编号@Sample number∑1000");
                                        } else if (k > 2 && k <= 5) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode() + "∑998");
                                        } else if (k > 5 && k < 9) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type ∑999");
                                        } else {
                                            //第四列
                                            textRenderData.setText(sample.getModel()+"∑999888");
                                        }
                                        break;
                                    case 8:
                                        if (k <= 1) {
                                            //第一列
                                            textRenderData.setText("样品编号@Sample number∑1000");
                                        } else if (k > 1 && k <= 3) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode() + "∑998");
                                        } else if (k > 3 && k < 6) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type ∑999");
                                        } else {
                                            //第四列
                                            textRenderData.setText(sample.getModel()+"∑999888");
                                        }
                                        break;
                                    case 4:
                                        if (k <= 0) {
                                            //第一列
                                            textRenderData.setText("样品编号@Sample number∑1000");
                                        } else if (k == 1) {
                                            //第二列
                                            textRenderData.setText(sample.getSampleCode() + "∑998");
                                        } else if (k == 2) {
                                            //第三列
                                            textRenderData.setText("规格型号@Type ∑999");
                                        } else {
                                            //第四列
                                            textRenderData.setText(sample.getModel()+"∑999888");
                                        }
                                        break;
                                }
//                                if (k <= (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1) / 4) {
//                                    //第一列
//                                    textRenderData.setText("样品编号@Sample number∑1000");
//                                } else if (k > (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1) / 4 && k <= (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1) / 2) {
//                                    //第二列
//                                    textRenderData.setText(sample.getSampleCode() + "∑998");
//                                } else if (k > (2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) + 1) / 2 && k < 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m))) {
//                                    //第三列
//                                    textRenderData.setText("规格型号@Type ∑999");
//                                } else {
//                                    //第四列
//                                    textRenderData.setText(sample.getModel());
//                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 1) {
                                //第二行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                } else {
                                    textRenderData.setText("检测结果(dB/km)(循环" + (i + 1) + ")∑1005");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 2) {
                                //第三行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                    textRenderData.setText(wendu.get(m) + "∑52"+j + m);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                    int i1 = m + 1;
                                    String s = "";
                                    try {
                                        s = wendu.get(m + 1);
                                    } catch (Exception e) {
                                    }
                                    textRenderData.setText(s + "∑52"+j + i1);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    int i1 = m + 2;
                                    String s = "";
                                    try {
                                        s = wendu.get(m + 2);
                                    } catch (Exception e) {
                                    }
                                    textRenderData.setText(s + "∑52" +j+ i1);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (j == 3) {
                                //第四行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    for (int j1 = 0; j1 < 3; j1++) {//一张表3个温度
                                        for (int i1 = 0; i1 < nm.size(); i1++) {//循环光纤项目:1310nm
                                            if (k > 2 * j1 * nm.size() + 2 * i1 && k <= 2 * j1 * nm.size() + 2 * (i1 + 1)) {
                                                textRenderData.setText(nm.get(i1) + "∑88888" + ((k + 1) / nm.size()) + i1);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        }
                                    }
                                }
                            }
                            else if (j == 4) {
                                //第五行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k % 2 == 1) {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / 3 && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("衰减" + "∑42" +j+ k);
                                    } else {
                                        textRenderData.setText("衰减");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / 3 && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("衰减" + "∑42"+j + (k - 1));
                                    } else {
                                        textRenderData.setText("|∆α|");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (j == size2 + 5) {
                                //倒数第三行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("|max|");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (k % 2 == 0) {
                                    String s = "";
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    //计算第()温度的第()个项目的所有色标的最终值的最大值
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        try {
                                            if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && wendu.get(m).equals("20℃(常温)")){
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                                .eq(InsProduct::getState,1)
                                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                                .isNotNull(InsProduct::getInsFiberId)
                                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())))
                                                        .stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    {
                                                        String[] splitStr = insProductResult.getComValue().split(":");
                                                        return splitStr[splitStr.length - 1].split("\"")[1];
                                                    }
                                                }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                                textRenderData.setText(max.get() + "∑"+j+ (k-1));
                                            }else {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                                .eq(InsProduct::getState,1)
                                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                                .isNotNull(InsProduct::getInsFiberId)
                                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                            }
                                        } catch (Exception e) {
                                            textRenderData.setText("");
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else {
                                    String s = "";
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    //计算第()温度的第()个项目的所有色标的平均值的最大值
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState,1)
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 1) / 2 % nm.size()))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                        List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                        Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                            {
                                                String[] splitStr = insProductResult.getComValue().split(":");
                                                return splitStr[splitStr.length - 1].split("\"")[1];
                                            }
                                        }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                        if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize&& wendu.get(m).equals("20℃(常温)")){
                                            textRenderData.setText(max.get() + "∑"+j+ k);
                                        }else {
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (j == size2 + 6) {
                                //倒数第二行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("|∆α max|");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k % 2 == 0) {
                                    String s = "";
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    //计算第()温度的第()个项目的所有色标的最终值的最大值
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && wendu.get(m).equals("20℃(常温)")) {
                                            textRenderData.setText("-" + "∑" + j + (k-1));
                                        } else {
                                            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState,1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, s)
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())));
                                            try {
                                                Optional<String> max = insProducts.stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                            } catch (Exception e) {
                                                textRenderData.setText("");
                                            }
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("-" + "∑" + j + k);
                                    } else {
                                        textRenderData.setText("-");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (j == size2 + 7) {
                                //倒数第一行
                                textRenderData.setText("“|∆ α|”表示附加衰减绝对值∑111111");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else {
                                //其余填写检验值的内容
                                if (k == 0) {
                                    //第一列填写色标
                                    InsFiber insFiber = insFibers.get((j - 5));
                                    textRenderData.setText(insFiber.getBushColor() + "-" + insFiber.getColor());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k % 2 == 0) {
                                    //填写衰减差就是last_value
                                    String s = "";
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize && k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    if (s.isEmpty()) {
                                        textRenderData.setText("");
                                    } else {
                                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState,1)
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInsFiberId, insFibers.get(j - 5).getId())
                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())));
                                        if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / 3 && s.equals("20℃(常温)")) {
                                            String comValue = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                                            .eq(InsProductResult::getInsProductId, insProducts.get(0).getId()))
                                                    .getComValue();
                                            String[] splitStr = comValue.split(":");
                                            textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1] + "∑" + j + (k - 1));
                                        } else {
                                            textRenderData.setText(insProducts.get(0).getLastValue());
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //填写其余正常温度的衰减(result表里面的com_value)
                                    String s = "";
                                    if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize) {
                                        s = wendu.get(m);
                                    } else if (k > 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize&& k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / wenduSize * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState,1)
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInsFiberId, insFibers.get(j - 5).getId())
                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 1) / 2 % nm.size())));
                                        String comValue = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                                        .eq(InsProductResult::getInsProductId, insProducts.get(0).getId()))
                                                .getComValue();
                                        String[] splitStr = comValue.split(":");
                                        if (k <= 2 * nm.size()*((wendu.size()-m)/3>0?3:(wendu.size()-m)) / 3 && s.equals("20℃(常温)")) {
                                            textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1] + "∑" + j + k);
                                        } else {
                                            textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1]);
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (!rowRenderData.getCells().isEmpty()) {
                            rows.add(rowRenderData);
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等5");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    if(m==0 && countSize==13){
                        tableStyle.setWidth("10000");
                        tableStyle.setColWidths(new int[]{1580,850,0,850,0,840,840,840,840,840,840,840,840});
                    }else if(countSize==13){
                        tableStyle.setWidth("10000");
                        tableStyle.setColWidths(new int[]{1220,735,745,735,745,735,745,735,745,735,745,735,745});
                    }else{
                        tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    }
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table3", tableRenderData);
                    table.put("report", insReport);
                    table.put("index3", index3.get());
                    tables3.add(table);
                    index3.getAndIncrement();
                }
            }
        });
    }
 
}