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);
|
}
|
|
}
|