fix: scc流程并行流处理后排序错乱问题
This commit is contained in:
+56
-5
@@ -17,10 +17,9 @@ import org.jeecgframework.poi.excel.annotation.ExcelCollection;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -31,7 +30,7 @@ import java.util.List;
|
||||
@Accessors(chain = true)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@ApiModel(value="process_standard_compliance_check对象", description="法规符合性排查流程-子表")
|
||||
public class ProcessStandardComplianceCheckDetail implements Serializable {
|
||||
public class ProcessStandardComplianceCheckDetail implements Serializable, Comparator<ProcessStandardComplianceCheckDetail> {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
@@ -242,4 +241,56 @@ public class ProcessStandardComplianceCheckDetail implements Serializable {
|
||||
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public int compare(ProcessStandardComplianceCheckDetail o1, ProcessStandardComplianceCheckDetail o2) {
|
||||
String termNumber1 = o1.getTermNumber();
|
||||
String termNumber2 = o2.getTermNumber();
|
||||
|
||||
// 提取字符串中的数字和非数字部分
|
||||
List<String> parts1 = splitByNumber(termNumber1);
|
||||
List<String> parts2 = splitByNumber(termNumber2);
|
||||
|
||||
int size = Math.min(parts1.size(), parts2.size());
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
String part1 = parts1.get(i);
|
||||
String part2 = parts2.get(i);
|
||||
|
||||
int result;
|
||||
|
||||
// 如果部分是数字,按数值比较
|
||||
if (isNumeric(part1) && isNumeric(part2)) {
|
||||
result = Integer.compare(Integer.parseInt(part1), Integer.parseInt(part2));
|
||||
} else {
|
||||
// 非数字部分按字典顺序比较
|
||||
result = part1.compareTo(part2);
|
||||
}
|
||||
|
||||
if (result != 0) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果前面的部分都相等,则按长度比较
|
||||
return Integer.compare(parts1.size(), parts2.size());
|
||||
}
|
||||
|
||||
private List<String> splitByNumber(String input) {
|
||||
Matcher matcher = Pattern.compile("[0-9]+|[^0-9]+").matcher(input);
|
||||
List<String> result = new ArrayList<>();
|
||||
while (matcher.find()) {
|
||||
result.add(matcher.group());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private boolean isNumeric(String str) {
|
||||
try {
|
||||
Integer.parseInt(str);
|
||||
return true;
|
||||
} catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
@@ -551,6 +551,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
});
|
||||
// 复制一份数据
|
||||
List<ProcessStandardComplianceCheckDetail> newRecordsExport = new ArrayList<>(detailInfoList);
|
||||
newRecordsExport.sort(new ProcessStandardComplianceCheckDetail());
|
||||
Workbook workbook = ExcelExportUtil
|
||||
.exportExcel(exportParams, ProcessStandardComplianceCheckDetail.class, detailInfoList);
|
||||
// 生成超链接
|
||||
@@ -914,6 +915,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
if (Objects.nonNull(scc)) {
|
||||
detailQueryWrapper.eq(ProcessStandardComplianceCheckDetail::getCheckId, scc.getId());
|
||||
detailList = sccDetailService.list(detailQueryWrapper);
|
||||
detailList.sort(new ProcessStandardComplianceCheckDetail());
|
||||
}
|
||||
String xmlNodeId = record.getNodeId();
|
||||
// 设置流程信息
|
||||
@@ -932,6 +934,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
detailList = detailList.stream().filter(detail ->
|
||||
StrUtil.isBlank(detail.getDesignEngineer())
|
||||
&& detail.getProcessInstanceId().equals(processInstanceId)).collect(Collectors.toList());
|
||||
detailList.sort(new ProcessStandardComplianceCheckDetail());
|
||||
processSccVO.setDetailInfoList(detailList);
|
||||
break;
|
||||
case DESIGNER_ENGINEER_EVALUATION:
|
||||
@@ -941,6 +944,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
case MAIN_CHECK_USER_REDISTRIBUTE:
|
||||
detailList = detailList.stream().filter(detail ->
|
||||
detail.getProcessInstanceId().equals(processInstanceId)).collect(Collectors.toList());
|
||||
detailList.sort(new ProcessStandardComplianceCheckDetail());
|
||||
processSccVO.setDetailInfoList(detailList);
|
||||
break;
|
||||
}
|
||||
@@ -981,6 +985,8 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
||||
LambdaQueryWrapper<ProcessStandardComplianceCheckDetail> detailQueryWrapper = new LambdaQueryWrapper<>();
|
||||
detailQueryWrapper.eq(ProcessStandardComplianceCheckDetail::getProcessInstanceId, processInstanceId);
|
||||
List<ProcessStandardComplianceCheckDetail> detailList = sccDetailService.list(detailQueryWrapper);
|
||||
// 排序detailList
|
||||
detailList.sort(new ProcessStandardComplianceCheckDetail());
|
||||
processSccVO.setDetailInfoList(detailList);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user