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