diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DirectoryComparator.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DirectoryComparator.java new file mode 100644 index 00000000..e81b1a46 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DirectoryComparator.java @@ -0,0 +1,43 @@ +package com.jero.modules.laws.documenttool.common; + +import java.util.Comparator; +import java.util.Map; + +/** + * @ClassName: DirectoryComparator + * @Description: + * @Author: yjz + * @Date: 2023-11-03 11:24 + * @Version: 1.0 + **/ +public class DirectoryComparator implements Comparator> { + public int compare(Map dir1, Map dir2) { + String sortNumber1 = (String) dir1.get("item_num"); + String sortNumber2 = (String) dir2.get("item_num"); + + String[] parts1 = sortNumber1.split("\\."); + String[] parts2 = sortNumber2.split("\\."); + + int i = 0; + while (i < parts1.length && i < parts2.length) { + int part1 = tryParseInt(parts1[i]); + int part2 = tryParseInt(parts2[i]); + + if (part1 != part2) { + return part1 - part2; + } + + i++; + } + + return parts1.length - parts2.length; + } + + private int tryParseInt(String str) { + try { + return Integer.parseInt(str); + } catch(NumberFormatException e) { + return str.hashCode(); + } + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java index 0a00b62f..ab10ff28 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java @@ -16,6 +16,7 @@ import com.jero.common.util.UUIDUtils; import com.jero.common.util.ZipUtil; import com.jero.modules.laws.common.constant.FieldCommon; import com.jero.modules.laws.common.mapper.LawsCommonMapper; +import com.jero.modules.laws.documenttool.common.DirectoryComparator; import com.jero.modules.laws.documenttool.common.DocumentSplitCommon; import com.jero.modules.laws.documenttool.entity.DocumentSplitInfo; import com.jero.modules.laws.documenttool.entity.LawsDocumentSplitView; @@ -541,6 +542,8 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { StringBuilder strSelectCondition = new StringBuilder(selectCondition); // 查询数据 List> listMap = documentSplitMapper.queryDocumentSplitDetail(selectColumn, strSelectCondition.toString()); + // 排序 + listMap.sort(new DirectoryComparator()); // 第一条数据 Map firstData = listMap.get(0); listMap.remove(0); @@ -572,7 +575,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { } List sarFileSplitItemsValEOS = documentSplitMapper.queryItemsValByItemId((String) firstData.get(ID), ""); // 第一条数据信息的最大的排序字段值 - Optional sarFileSplitItemsValEOOptional = sarFileSplitItemsValEOS.stream().sorted().findFirst(); + Optional sarFileSplitItemsValEOOptional = sarFileSplitItemsValEOS.stream().sorted(Comparator.comparing(v -> Integer.valueOf(String.valueOf(v.getDisplaySeq())))).findFirst(); sarFileSplitItemsValEOOptional.ifPresent(v ->{ // 排序字段 Integer displaySeq = v.getDisplaySeq();