diff --git a/laws-modules/src/main/java/com/jero/modules/laws/consultation/common/DirectoryComparator.java b/laws-modules/src/main/java/com/jero/modules/laws/consultation/common/DirectoryComparator.java new file mode 100644 index 00000000..1336c73a --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/consultation/common/DirectoryComparator.java @@ -0,0 +1,44 @@ +package com.jero.modules.laws.consultation.common; + +import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationList; + +import java.util.Comparator; + +/** + * @ClassName: DirectoryComparator + * @Description: + * @Author: yjz + * @Date: 2023-11-03 11:24 + * @Version: 1.0 + **/ +public class DirectoryComparator implements Comparator { + public int compare(ProcessFbConsultationList dir1, ProcessFbConsultationList dir2) { + String sortNumber1 = dir1.getChapterNumber(); + String sortNumber2 = dir2.getChapterNumber(); + + 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/consultation/service/impl/ConsultationServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/consultation/service/impl/ConsultationServiceImpl.java index b76d4c28..6716b311 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/consultation/service/impl/ConsultationServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/consultation/service/impl/ConsultationServiceImpl.java @@ -10,6 +10,7 @@ import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationList; import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardConsultation; import com.jero.modules.activiti.process.fb.service.IProcessFbConsultationListService; import com.jero.modules.activiti.process.fb.service.IProcessFbStandardConsultationService; +import com.jero.modules.laws.consultation.common.DirectoryComparator; import com.jero.modules.laws.consultation.service.IConsultationService; import com.jero.modules.laws.consultation.vo.ProcessFbConsultationListVO; import com.jero.modules.laws.standard.entity.LawsDomesticStandard; @@ -123,6 +124,7 @@ public class ConsultationServiceImpl implements IConsultationService { List list = processFbConsultationListService.list( new LambdaQueryWrapper() .eq(ProcessFbConsultationList::getBusinessId, businessId)); + list.sort(new DirectoryComparator()); setProperty(list); return list; } @@ -191,10 +193,18 @@ public class ConsultationServiceImpl implements IConsultationService { fillProperty(processFbStandardConsultations); processFbConsultationListVO.setProcessFbStandardConsultation(processFbStandardConsultations.get(0)); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .eq(ProcessFbConsultationList::getBusinessId, businessId) - .last("ORDER BY convert(chapter_number, DECIMAL), id"); - IPage page = processFbConsultationListService.page(new Page<>(pageNo, pageSize), queryWrapper); - setProperty(page.getRecords()); + .eq(ProcessFbConsultationList::getBusinessId, businessId); + List list = processFbConsultationListService.list(queryWrapper); + list.sort(new DirectoryComparator()); + // 手动分页 + IPage page = new Page<>(pageNo ,pageSize); + page.setTotal(list.size()); + page.setRecords( + list.stream() + .skip((long) (Math.max(1, pageNo) - 1) * pageSize) + .limit(pageSize) + .collect(Collectors.toList())); + setProperty(list); processFbConsultationListVO.setProcessFbConsultationList(page); return processFbConsultationListVO; }