diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/entity/ProcessStandardComplianceCheckDetail.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/entity/ProcessStandardComplianceCheckDetail.java index 989435f1..74c120da 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/entity/ProcessStandardComplianceCheckDetail.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/entity/ProcessStandardComplianceCheckDetail.java @@ -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 { /** * 主键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 parts1 = splitByNumber(termNumber1); + List 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 splitByNumber(String input) { + Matcher matcher = Pattern.compile("[0-9]+|[^0-9]+").matcher(input); + List 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; + } + } } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/service/impl/ProcessStandardComplianceCheckServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/service/impl/ProcessStandardComplianceCheckServiceImpl.java index 25005992..374dae62 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/service/impl/ProcessStandardComplianceCheckServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardComplianceCheck/service/impl/ProcessStandardComplianceCheckServiceImpl.java @@ -551,6 +551,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl 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 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 detail.getProcessInstanceId().equals(processInstanceId)).collect(Collectors.toList()); + detailList.sort(new ProcessStandardComplianceCheckDetail()); processSccVO.setDetailInfoList(detailList); break; } @@ -981,6 +985,8 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl detailQueryWrapper = new LambdaQueryWrapper<>(); detailQueryWrapper.eq(ProcessStandardComplianceCheckDetail::getProcessInstanceId, processInstanceId); List detailList = sccDetailService.list(detailQueryWrapper); + // 排序detailList + detailList.sort(new ProcessStandardComplianceCheckDetail()); processSccVO.setDetailInfoList(detailList); }