zss
2025-03-13 3b92cf3f9cd038c446e390aab18e759b0463d24a
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
package com.ruoyi.inspect.comparater;
 
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.inspect.dto.SampleProductDto2;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysDictTypeService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
 
import java.text.Collator;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
 
/**
     * 数据查看接口,自定义排序规则
     */
@Component
public class CustomComparator implements Comparator<SampleProductDto2> {
 
    public CustomComparator(ISysDictTypeService dictTypeService) {
        this.dictTypeService = dictTypeService;
    }
 
    private final ISysDictTypeService dictTypeService;
 
    @Override
    public int compare(SampleProductDto2 o1, SampleProductDto2 o2) {
        //根据试验室排序
        if(StringUtils.isNotBlank(o1.getSonLaboratory())&& StringUtils.isNotBlank(o2.getSonLaboratory())){
            if(!Objects.equals(o1.getSonLaboratory(),o2.getSonLaboratory())){
                Collator instance = Collator.getInstance(Locale.CHINA);
                return instance.compare(o1.getSonLaboratory(),o2.getSonLaboratory());
            }
        }
        //查询全色谱,过滤色标并排序
        List<String> colorList = dictTypeService.selectDictDataByType("fiber_color_type").stream()
                .sorted(Comparator.comparing(SysDictData::getDictSort))
                .map(SysDictData::getDictLabel)
                .collect(Collectors.toList());
        //先按样品编号升序
        if(!Objects.equals(o1.getSampleCode(),o2.getSampleCode())){
            if(containsOnlyDigits(o1.getSampleCode()) && containsOnlyDigits(o2.getSampleCode())){
//                Integer o1Num = Integer.parseInt(o1.getSampleCode());
//                Integer o2Num = Integer.parseInt(o2.getSampleCode());
                Long o1Num = Long.parseLong(o1.getSampleCode());
                Long o2Num = Long.parseLong(o2.getSampleCode());
                return o1Num.compareTo(o2Num);
            }
            return o1.getSampleCode().compareTo(o2.getSampleCode());
        }
        //根据套管色标以及光纤色标排序
        if(StringUtils.isNotBlank(o1.getBushColor())&& StringUtils.isNotBlank(o2.getBushColor())){
            //套管色标排序
            if(!Objects.equals(o1.getBushColor(),o2.getBushColor())){
                Integer o1Index = colorList.indexOf(o1.getBushColor());
                Integer o2Index = colorList.indexOf(o2.getBushColor());
                return o1Index.compareTo(o2Index);
            }
            //光纤带排序
            if(StringUtils.isNotBlank(o1.getCode())&& StringUtils.isNotBlank(o2.getCode())){
                if(!Objects.equals(o1.getCode(),o2.getCode())){
                    return o1.getCode().compareTo(o2.getCode());
                }
            }
            //光纤色标排序
            if(StringUtils.isNotBlank(o1.getColor())&& StringUtils.isNotBlank(o2.getColor())){
                if(!Objects.equals(o1.getColor(),o2.getColor())){
                    Integer o1Index = colorList.indexOf(o1.getColor());
                    Integer o2Index = colorList.indexOf(o2.getColor());
                    return o1Index.compareTo(o2Index);
                }
            }
 
        }
        //根据检验项排序
        if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){
            List<String> specialItems = Arrays.asList("耐环境应力开裂","热收缩率");
            if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){
                return Integer.MAX_VALUE;
            }
            Collator instance = Collator.getInstance(Locale.CHINA);
            return instance.compare(o1.getInspectionItem(),o2.getInspectionItem());
        }
        //检验子项排序
        if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){
            if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){
                Collator instance = Collator.getInstance(Locale.CHINA);
                return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass());
            }
        }
        return 0;
    }
 
    public static boolean containsOnlyDigits(String str) {
        String regex = "\\d+"; // 匹配一个或多个数字
        return Pattern.matches(regex, str);
    }
 
}