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 org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
import java.util.regex.Matcher;
|
||||||
import java.util.Date;
|
import java.util.regex.Pattern;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -31,7 +30,7 @@ import java.util.List;
|
|||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
@ApiModel(value="process_standard_compliance_check对象", description="法规符合性排查流程-子表")
|
@ApiModel(value="process_standard_compliance_check对象", description="法规符合性排查流程-子表")
|
||||||
public class ProcessStandardComplianceCheckDetail implements Serializable {
|
public class ProcessStandardComplianceCheckDetail implements Serializable, Comparator<ProcessStandardComplianceCheckDetail> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 主键ID
|
* 主键ID
|
||||||
@@ -242,4 +241,56 @@ public class ProcessStandardComplianceCheckDetail implements Serializable {
|
|||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private static final long serialVersionUID = 1L;
|
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);
|
List<ProcessStandardComplianceCheckDetail> newRecordsExport = new ArrayList<>(detailInfoList);
|
||||||
|
newRecordsExport.sort(new ProcessStandardComplianceCheckDetail());
|
||||||
Workbook workbook = ExcelExportUtil
|
Workbook workbook = ExcelExportUtil
|
||||||
.exportExcel(exportParams, ProcessStandardComplianceCheckDetail.class, detailInfoList);
|
.exportExcel(exportParams, ProcessStandardComplianceCheckDetail.class, detailInfoList);
|
||||||
// 生成超链接
|
// 生成超链接
|
||||||
@@ -914,6 +915,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
|||||||
if (Objects.nonNull(scc)) {
|
if (Objects.nonNull(scc)) {
|
||||||
detailQueryWrapper.eq(ProcessStandardComplianceCheckDetail::getCheckId, scc.getId());
|
detailQueryWrapper.eq(ProcessStandardComplianceCheckDetail::getCheckId, scc.getId());
|
||||||
detailList = sccDetailService.list(detailQueryWrapper);
|
detailList = sccDetailService.list(detailQueryWrapper);
|
||||||
|
detailList.sort(new ProcessStandardComplianceCheckDetail());
|
||||||
}
|
}
|
||||||
String xmlNodeId = record.getNodeId();
|
String xmlNodeId = record.getNodeId();
|
||||||
// 设置流程信息
|
// 设置流程信息
|
||||||
@@ -932,6 +934,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
|||||||
detailList = detailList.stream().filter(detail ->
|
detailList = detailList.stream().filter(detail ->
|
||||||
StrUtil.isBlank(detail.getDesignEngineer())
|
StrUtil.isBlank(detail.getDesignEngineer())
|
||||||
&& detail.getProcessInstanceId().equals(processInstanceId)).collect(Collectors.toList());
|
&& detail.getProcessInstanceId().equals(processInstanceId)).collect(Collectors.toList());
|
||||||
|
detailList.sort(new ProcessStandardComplianceCheckDetail());
|
||||||
processSccVO.setDetailInfoList(detailList);
|
processSccVO.setDetailInfoList(detailList);
|
||||||
break;
|
break;
|
||||||
case DESIGNER_ENGINEER_EVALUATION:
|
case DESIGNER_ENGINEER_EVALUATION:
|
||||||
@@ -941,6 +944,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
|||||||
case MAIN_CHECK_USER_REDISTRIBUTE:
|
case MAIN_CHECK_USER_REDISTRIBUTE:
|
||||||
detailList = detailList.stream().filter(detail ->
|
detailList = detailList.stream().filter(detail ->
|
||||||
detail.getProcessInstanceId().equals(processInstanceId)).collect(Collectors.toList());
|
detail.getProcessInstanceId().equals(processInstanceId)).collect(Collectors.toList());
|
||||||
|
detailList.sort(new ProcessStandardComplianceCheckDetail());
|
||||||
processSccVO.setDetailInfoList(detailList);
|
processSccVO.setDetailInfoList(detailList);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -981,6 +985,8 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
|||||||
LambdaQueryWrapper<ProcessStandardComplianceCheckDetail> detailQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ProcessStandardComplianceCheckDetail> detailQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
detailQueryWrapper.eq(ProcessStandardComplianceCheckDetail::getProcessInstanceId, processInstanceId);
|
detailQueryWrapper.eq(ProcessStandardComplianceCheckDetail::getProcessInstanceId, processInstanceId);
|
||||||
List<ProcessStandardComplianceCheckDetail> detailList = sccDetailService.list(detailQueryWrapper);
|
List<ProcessStandardComplianceCheckDetail> detailList = sccDetailService.list(detailQueryWrapper);
|
||||||
|
// 排序detailList
|
||||||
|
detailList.sort(new ProcessStandardComplianceCheckDetail());
|
||||||
processSccVO.setDetailInfoList(detailList);
|
processSccVO.setDetailInfoList(detailList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user