Ver código fonte

运单模糊查询优化

donglang 1 mês atrás
pai
commit
7df14c214d

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/enterpriseApp/AppWayBillController.java

@@ -242,7 +242,7 @@ public class AppWayBillController {
      */
     @PostMapping("/statisticsWaybillOrder")
     @Operation(summary = "运单状态统计")
-    public BaseResult<StatisticsWaybillResp> statisticsWaybillOrder(@RequestBody @Valid WaybillStatisticsParam param) {
+    public BaseResult<StatisticsWaybillResp> statisticsWaybillOrder(@RequestBody @Valid WaybillOrderQueryParam param) {
         return BaseResult.success(waybillOrderService.statisticsWaybillOrder(param));
     }
 

+ 0 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderQueryParam.java

@@ -37,7 +37,6 @@ public class WaybillOrderQueryParam extends PageReq implements Serializable {
      * 状态 (1-进行中、2-单证审核、3-已完成)
      */
     @Schema(description = "状态 (1-进行中、2-单证审核、3-已完成)")
-    @NotNull(message = "状态不能为空!")
     private Integer status;
 
     /**

+ 25 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderStatusResp.java

@@ -1,6 +1,7 @@
 package com.sckw.transport.model.param;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Data;
 
 import java.io.Serial;
@@ -133,6 +134,18 @@ public class WaybillOrderStatusResp implements Serializable {
     @Schema(description = "装货地址")
     private String loadAddress;
 
+    /**
+     * 经度(装货地址)
+     */
+    @Schema(description = "经度(装货地址)")
+    private String loadLng;
+
+    /**
+     * 纬度(装货地址)
+     */
+    @Schema(description = "纬度(装货地址)")
+    private String loadLat;
+
     /**
      * 卸货地址
      */
@@ -140,6 +153,18 @@ public class WaybillOrderStatusResp implements Serializable {
     @Schema(description = "卸货地址")
     private String unloadAddress;
 
+    /**
+     * 经度(卸货地址)
+     */
+    @Schema(description = "经度(卸货地址)")
+    private String unloadLng;
+
+    /**
+     * 纬度(卸货地址)
+     */
+    @Schema(description = "经度(卸货地址)")
+    private String unloadLat;
+
     /**
      * 装卸货之间距离
      */

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -168,4 +168,14 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                 .in(CollectionUtils.isNotEmpty(logOrderIds),KwtWaybillOrder::getId,logOrderIds)
                 .orderByDesc(KwtWaybillOrder::getId));
     }
+
+
+    public List<KwtWaybillOrder> queryWaybillOrderByLogOrderIds(List<Long> logOrderIds, Long entId, String truckNo) {
+        return list(
+                Wrappers.<KwtWaybillOrder>lambdaQuery()
+                        .in(KwtWaybillOrder::getLOrderId, logOrderIds)
+                        .eq(KwtWaybillOrder::getEntId, entId)
+                        .eq(KwtWaybillOrder::getTruckNo, truckNo)
+                        .eq(KwtWaybillOrder::getDelFlag, 0));
+    }
 }

+ 230 - 99
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -51,6 +51,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
@@ -58,6 +59,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -366,6 +368,40 @@ public class WaybillOrderService {
         if (StringUtils.isBlank(param.getTruckNo())) {
             return PageDataResult.empty(param.getPageNum(), param.getPageSize());
         }
+        //构建查询条件
+        LambdaQueryWrapper<KwtWaybillOrder> queryWrapper = buildAndExecuteQuery(param);
+
+        //分页查询运单主数据
+        Page<KwtWaybillOrder> waybillOrderList = waybillOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
+        List<KwtWaybillOrder> records = waybillOrderList.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            log.info("当前车辆辆的无物流运单,truckNo:{}", param.getTruckNo());
+            return PageDataResult.empty(param.getPageNum(), param.getPageSize());
+        }
+
+        //获取运单关联数据并返回结果
+        List<WaybillOrderStatusResp> ordderList = getWaybillOrderRelevantData(param, records);
+        log.info("查询司机的物流运单成功!");
+        return PageDataResult.success(param.getPageNum(), param.getPageSize(), (long) ordderList.size(), ordderList);
+    }
+
+    /**
+     * 构建查询条件并执行分页查询
+     */
+    private LambdaQueryWrapper<KwtWaybillOrder> buildAndExecuteQuery(WaybillOrderQueryParam param) {
+        //基础查询条件
+        LambdaQueryWrapper<KwtWaybillOrder> queryWrapper = buildBaseQueryWrapper(param);
+        //模糊查询条件
+        handleSearchKeyword(queryWrapper, param.getSearchKeyword(), param);
+        return queryWrapper;
+    }
+
+    /**
+     * 构建基础查询条件
+     * @param param
+     * @return
+     */
+    private static LambdaQueryWrapper<KwtWaybillOrder> buildBaseQueryWrapper(WaybillOrderQueryParam param) {
         LambdaQueryWrapper<KwtWaybillOrder> queryWrapper = Wrappers.<KwtWaybillOrder>lambdaQuery()
                 .eq(KwtWaybillOrder::getEntId, param.getEntId())
                 .eq(KwtWaybillOrder::getTruckNo, param.getTruckNo())
@@ -382,31 +418,151 @@ public class WaybillOrderService {
             //已完成
             queryWrapper.in(KwtWaybillOrder::getStatus, COMPLETED);
         }
+        return queryWrapper;
+    }
 
-        //模糊查询
-        String searchKeyword = param.getSearchKeyword();
-        if (StringUtils.isNotBlank(searchKeyword)) {
-            // 1. 先查询匹配的物流订单ID
-            Set<Long> matchedOrderIds = findMatchedLogisticsOrderIds(searchKeyword);
+    /**
+     * 关键词模糊查询
+     */
+    private void handleSearchKeyword(LambdaQueryWrapper<KwtWaybillOrder> queryWrapper, String searchKeyword, WaybillOrderQueryParam param) {
+        if (StringUtils.isBlank(searchKeyword)) {
+            return;
+        }
+        Set<Long> matchedWaybillOrderIds = findMatchedWaybillOrderIds(searchKeyword, param);
+        if (CollectionUtils.isEmpty(matchedWaybillOrderIds)) {
+            log.info("模糊查询无匹配结果,关键词:{},车牌号:{}", searchKeyword, param.getTruckNo());
+            // 设置一个不可能的条件,确保返回空结果
+            queryWrapper.eq(KwtWaybillOrder::getId, Global.MINUS_ONE);
+            return;
+        } else {
+            queryWrapper.in(KwtWaybillOrder::getId, matchedWaybillOrderIds);
+        }
+    }
+
+    /**
+     * 查询匹配的运单ID(以运单ID为主键)
+     */
+    private Set<Long> findMatchedWaybillOrderIds(String keyword, WaybillOrderQueryParam param) {
+        Set<Long> waybillOrderIds = ConcurrentHashMap.newKeySet();;
+        List<Runnable> searchTasks = Arrays.asList(
+                //1. 运单编号查询(主表字段,直接匹配)
+                () -> addMatchedIdsFromWaybillNo(keyword, param, waybillOrderIds),
+
+                // 2. 通过物流订单编号查询关联的运单
+                () -> addMatchedIdsFromLogisticsOrderNo(waybillOrderIds, keyword, param),
+
+                // 3. 通过托运单位查询关联的运单
+                () -> addMatchedIdsFromShipper(waybillOrderIds, keyword, param),
+
+                // 4. 通过货物名称查询关联的运单
+                () -> addMatchedIdsFromGoodsName(waybillOrderIds, keyword, param)
+        );
+        // 使用并行流执行查询任务
+        searchTasks.parallelStream().forEach(Runnable::run);
+        return waybillOrderIds;
+    }
 
-            if (CollectionUtils.isEmpty(matchedOrderIds)) {
-                // 如果没有匹配的,直接返回空分页
-                return PageDataResult.empty(param.getPageNum(), param.getPageSize());
-            }
+    /**
+     * 从运单编号查询匹配运单ID
+     * @param keyword
+     * @param param
+     * @param waybillOrderIds
+     */
+    private void addMatchedIdsFromWaybillNo(String keyword, WaybillOrderQueryParam param, Set<Long> waybillOrderIds) {
+        // 1. 运单编号查询(主表字段,直接匹配)
+        List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.list(
+                Wrappers.<KwtWaybillOrder>lambdaQuery()
+                        .like(KwtWaybillOrder::getWOrderNo, keyword)
+                        .eq(KwtWaybillOrder::getEntId, param.getEntId())
+                        .eq(KwtWaybillOrder::getTruckNo, param.getTruckNo())
+                        .eq(KwtWaybillOrder::getDelFlag, 0)
+        );
+        waybillOrderIds.addAll(waybillOrders.stream()
+                .map(KwtWaybillOrder::getId)
+                .collect(Collectors.toList()));
+    }
 
-            // 2. 在主查询中使用IN条件
-            queryWrapper.in(KwtWaybillOrder::getLOrderId, matchedOrderIds);
+    /**
+     * 从物流订单编号查询运单ID
+     */
+    private void addMatchedIdsFromLogisticsOrderNo(Set<Long> waybillOrderIds, String keyword, WaybillOrderQueryParam param) {
+        // 2. 通过物流订单编号查询关联的运单
+        List<KwtLogisticsOrder> logisticsOrders = logisticsOrderRepository.list(
+                Wrappers.<KwtLogisticsOrder>lambdaQuery()
+                        .like(KwtLogisticsOrder::getLOrderNo, keyword)
+                        .eq(KwtLogisticsOrder::getDelFlag, 0)
+        );
+        if (CollectionUtils.isNotEmpty(logisticsOrders)) {
+            List<Long> matchedLogOrderIds = logisticsOrders.stream()
+                    .map(KwtLogisticsOrder::getId)
+                    .collect(Collectors.toList());
+
+            // 查询这些物流订单对应的运单
+            List<KwtWaybillOrder> waybillsByLogOrder = waybillOrderRepository
+                    .queryWaybillOrderByLogOrderIds(matchedLogOrderIds, param.getEntId(), param.getTruckNo());
+
+            waybillOrderIds.addAll(waybillsByLogOrder.stream()
+                    .map(KwtWaybillOrder::getId)
+                    .collect(Collectors.toList()));
         }
+    }
 
+    /**
+     * 从托运单位查询匹配运单ID
+     */
+    private void addMatchedIdsFromShipper(Set<Long> waybillOrderIds, String keyword, WaybillOrderQueryParam param) {
+        List<KwtLogisticsOrderUnit> orderUnits = logisticsOrderUnitRepository.list(
+                Wrappers.<KwtLogisticsOrderUnit>lambdaQuery()
+                        .eq(KwtLogisticsOrderUnit::getUnitType, UnitTypeEnum.CONSIGN.getCode())
+                        .like(KwtLogisticsOrderUnit::getFirmName, keyword)
+                        .eq(KwtLogisticsOrderUnit::getDelFlag, 0)
+        );
+        if (CollectionUtils.isNotEmpty(orderUnits)) {
+            List<Long> matchedLogOrderIds = orderUnits.stream()
+                    .map(KwtLogisticsOrderUnit::getLOrderId)
+                    .collect(Collectors.toList());
+
+            // 查询这些物流订单对应的运单
+            List<KwtWaybillOrder> waybillsByUnits =  waybillOrderRepository
+                    .queryWaybillOrderByLogOrderIds(matchedLogOrderIds, param.getEntId(), param.getTruckNo());
+
+            waybillOrderIds.addAll(waybillsByUnits.stream()
+                    .map(KwtWaybillOrder::getId)
+                    .collect(Collectors.toList()));
+        }
+    }
 
-        //当前车辆的运单
-        Page<KwtWaybillOrder> waybillOrderList = waybillOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
-        List<KwtWaybillOrder> records = waybillOrderList.getRecords();
-        if (CollectionUtils.isEmpty(records)) {
-            log.info("当前车辆辆的无物流运单,truckNo:{}", param.getTruckNo());
-            return PageDataResult.empty(param.getPageNum(), param.getPageSize());
+    /**
+     * 从货物名称查询匹配运单ID
+     */
+    private void addMatchedIdsFromGoodsName(Set<Long> waybillOrderIds, String keyword, WaybillOrderQueryParam param) {
+        List<KwtLogisticsOrderGoods> orderGoods = logisticsOrderGoodsRepository.list(
+                Wrappers.<KwtLogisticsOrderGoods>lambdaQuery()
+                        .like(KwtLogisticsOrderGoods::getGoodsName, keyword)
+                        .eq(KwtLogisticsOrderGoods::getDelFlag, 0)
+        );
+        if (CollectionUtils.isNotEmpty(orderGoods)) {
+            List<Long> matchedLogOrderIds = orderGoods.stream()
+                    .map(KwtLogisticsOrderGoods::getLOrderId)
+                    .collect(Collectors.toList());
+
+            // 查询这些物流订单对应的运单
+            List<KwtWaybillOrder> waybillsByGoods = waybillOrderRepository
+                    .queryWaybillOrderByLogOrderIds(matchedLogOrderIds, param.getEntId(), param.getTruckNo());
+
+            waybillOrderIds.addAll(waybillsByGoods.stream()
+                    .map(KwtWaybillOrder::getId)
+                    .collect(Collectors.toList()));
         }
+    }
 
+    /**
+     * 获取运单关联数据
+     * @param param
+     * @param records
+     * @return
+     */
+    private List<WaybillOrderStatusResp> getWaybillOrderRelevantData(WaybillOrderQueryParam param, List<KwtWaybillOrder> records) {
         //物流运单id
         List<Long>  wbOrderIdList = records.stream().map(KwtWaybillOrder::getId)
                 .filter(Objects::nonNull).distinct().collect(Collectors.toList());
@@ -480,61 +636,7 @@ public class WaybillOrderService {
                     return getWaybillOrderResp(billOrder, subtaskMap, logOrderMap, logOrderIdAndCirculateMap,
                             logOrderIdAndGoodsMap, logOrderIdAndUnitMap, logOrderIdAndAddressMap, ticketMap);
                 }).collect(Collectors.toList());
-        log.info("查询司机的物流运单成功!");
-        return PageDataResult.success(param.getPageNum(), param.getPageSize(), (long) ordderList.size(), ordderList);
-
-    }
-
-    /**
-     * 查询匹配的物流订单ID
-     * @param keyword
-     * @return
-     */
-    private Set<Long> findMatchedLogisticsOrderIds(String keyword) {
-        Set<Long> orderIds = new HashSet<>();
-
-        // 运单编号查询(主表)
-        List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.list(
-                Wrappers.<KwtWaybillOrder>lambdaQuery()
-                        .like(KwtWaybillOrder::getWOrderNo, keyword)
-                        .eq(KwtWaybillOrder::getDelFlag, 0)
-        );
-        orderIds.addAll(waybillOrders.stream()
-                .map(KwtWaybillOrder::getLOrderId)
-                .collect(Collectors.toList()));
-
-        // 物流订单编号查询
-        List<KwtLogisticsOrder> logisticsOrders = logisticsOrderRepository.list(
-                Wrappers.<KwtLogisticsOrder>lambdaQuery()
-                        .like(KwtLogisticsOrder::getLOrderNo, keyword)
-                        .eq(KwtLogisticsOrder::getDelFlag, 0)
-        );
-        orderIds.addAll(logisticsOrders.stream()
-                .map(KwtLogisticsOrder::getId)
-                .collect(Collectors.toList()));
-
-        // 托运单位查询
-        List<KwtLogisticsOrderUnit> orderUnits = logisticsOrderUnitRepository.list(
-                Wrappers.<KwtLogisticsOrderUnit>lambdaQuery()
-                        .eq(KwtLogisticsOrderUnit::getUnitType, UnitTypeEnum.CONSIGN.getCode())
-                        .like(KwtLogisticsOrderUnit::getFirmName, keyword)
-                        .eq(KwtLogisticsOrderUnit::getDelFlag, 0)
-        );
-        orderIds.addAll(orderUnits.stream()
-                .map(KwtLogisticsOrderUnit::getLOrderId)
-                .collect(Collectors.toList()));
-
-        // 货物名称查询
-        List<KwtLogisticsOrderGoods> orderGoods = logisticsOrderGoodsRepository.list(
-                Wrappers.<KwtLogisticsOrderGoods>lambdaQuery()
-                        .like(KwtLogisticsOrderGoods::getGoodsName, keyword)
-                        .eq(KwtLogisticsOrderGoods::getDelFlag, 0)
-        );
-        orderIds.addAll(orderGoods.stream()
-                .map(KwtLogisticsOrderGoods::getLOrderId)
-                .collect(Collectors.toList()));
-
-        return orderIds;
+        return ordderList;
     }
 
 
@@ -581,9 +683,13 @@ public class WaybillOrderService {
         //装货地址
         KwtLogisticsOrderAddress shipmentAddress = logOrderIdAndAddressMap.getOrDefault(wbOrder.getLOrderId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtLogisticsOrderAddress());
         wbOrderResp.setLoadAddress(shipmentAddress.getDetailAddress());
+        wbOrderResp.setLoadLng(shipmentAddress.getLng());
+        wbOrderResp.setLoadLat(shipmentAddress.getLat());
         //卸货地址
         KwtLogisticsOrderAddress takeAddress = logOrderIdAndAddressMap.getOrDefault(wbOrder.getLOrderId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtLogisticsOrderAddress());
         wbOrderResp.setUnloadAddress(takeAddress.getDetailAddress());
+        wbOrderResp.setUnloadLng(takeAddress.getLng());
+        wbOrderResp.setUnloadLat(takeAddress.getLat());
         //装卸地之间距离
         double distanceKm = DistanceUtils.calculateDistance(
                 Optional.ofNullable(shipmentAddress.getLat()).map(Double::valueOf).orElse(null),
@@ -597,7 +703,7 @@ public class WaybillOrderService {
         wbOrderResp.setTareAmount(tareAmountTicket.getTareAmount());
         //毛重
         KwtWaybillOrderTicket grossAmountTicket = ticketMap.getOrDefault(wbOrder.getId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtWaybillOrderTicket());
-        wbOrderResp.setGrossAmount(grossAmountTicket.getTareAmount());
+        wbOrderResp.setGrossAmount(grossAmountTicket.getGrossAmount());
 
         //司机信息
         wbOrderResp.setDriverId(wbOrder.getDriverId());
@@ -625,44 +731,69 @@ public class WaybillOrderService {
 
     }
 
-    public StatisticsWaybillResp statisticsWaybillOrder(WaybillStatisticsParam param) {
+    /**
+     * 运单统计
+     * @param param
+     * @return
+     */
+    public StatisticsWaybillResp statisticsWaybillOrder(WaybillOrderQueryParam param) {
+        log.info("运单状态统计,参数:{}", JSON.toJSONString(param));
         StatisticsWaybillResp waybillResp = new StatisticsWaybillResp();
-        log.info("运单状态统计");
-        WaybillOrderReq waybillOrderReq = new WaybillOrderReq();
-        waybillOrderReq.setEntId(String.valueOf(param.getEntId()));
-        waybillOrderReq.setTruckNo(param.getTruckNo());
-        StatisticsWaybillResp statisticsWaybillResp = waybillOrderV1Service.statisticsWaybillOrder(waybillOrderReq);
-        if (statisticsWaybillResp == null || CollectionUtils.isEmpty(statisticsWaybillResp.getOrderStatusStatistics())) {
-            return new StatisticsWaybillResp();
+        if (StringUtils.isBlank(param.getTruckNo())) {
+            return waybillResp;
+        }
+        //构建查询条件并获取运单数据
+        LambdaQueryWrapper<KwtWaybillOrder> queryWrapper = buildAndExecuteQuery(param);
+        List<KwtWaybillOrder> records = waybillOrderRepository.list(queryWrapper);
+        if (CollectionUtils.isEmpty(records)) {
+            log.info("当前车辆辆的无物流运单,统计结果为空, truckNo:{}", param.getTruckNo());
+            return waybillResp;
         }
+
+        //查询运单关联数据
+        List<WaybillOrderStatusResp> waybillOrdertDatas = getWaybillOrderRelevantData(param, records);
+        waybillResp.setOrderStatusStatistics(calculateStatusStatistics(waybillOrdertDatas));
+        return waybillResp;
+    }
+
+    /**
+     * 计算运单状态统计
+     * @param waybillOrdertDatas
+     * @return
+     */
+    private static List<StatisticsWaybillResp.OrderBillStatusStatistics> calculateStatusStatistics(List<WaybillOrderStatusResp> waybillOrdertDatas) {
         // 定义状态码聚合规则
         Map<List<String>, String[]> aggregateRules = Map.of(
                 Arrays.asList("1", "5", "10", "15"), new String[]{"1", "进行中"},
                 Arrays.asList("20", "30"), new String[]{"2", "单证审核"},
                 Arrays.asList("25", "99"), new String[]{"3", "已完成"}
         );
-        List<StatisticsWaybillResp.OrderBillStatusStatistics> orderStatusStatistics = statisticsWaybillResp.getOrderStatusStatistics();
 
-        List<StatisticsWaybillResp.OrderBillStatusStatistics> aggregatedList = aggregateRules.entrySet()
-                .stream().map(rule -> {
+        // 按原始状态统计数量
+        Map<String, Long> statusCountMap = waybillOrdertDatas.stream()
+                .collect(Collectors.groupingBy(va ->String.valueOf(va.getStatus()), Collectors.counting()));
+
+        // 进行状态聚合
+        List<StatisticsWaybillResp.OrderBillStatusStatistics> aggregatedList = aggregateRules.entrySet().stream()
+                .map(rule -> {
                     List<String> originalStatuses = rule.getKey();
                     String[] aggregateInfo = rule.getValue();
-                    // 过滤并汇总对应状态的数量
-                    int totalNum = orderStatusStatistics.stream()
-                            .filter(stat -> originalStatuses.contains(stat.getOrderStatus()))
-                            .mapToInt(stat -> Integer.parseInt(stat.getOrderNum()))
+                    
+                    // 汇总对应状态的数量
+                    long totalNum = originalStatuses.stream()
+                            .mapToLong(status -> statusCountMap.getOrDefault(status, 0L))
                             .sum();
-            // 构建聚合结果对象
-            StatisticsWaybillResp.OrderBillStatusStatistics aggregateStat = new StatisticsWaybillResp.OrderBillStatusStatistics();
-            aggregateStat.setOrderStatus(aggregateInfo[0]); // 聚合状态编码
-            aggregateStat.setOrderStatusDesc(aggregateInfo[1]); // 聚合状态描述
-            aggregateStat.setOrderNum(String.valueOf(totalNum)); // 汇总数量
-            return aggregateStat;
-        }).collect(Collectors.toList());
-        aggregatedList.sort(Comparator.comparing(StatisticsWaybillResp.OrderBillStatusStatistics::getOrderStatus));
-
-        waybillResp.setOrderStatusStatistics(aggregatedList);
-        return waybillResp;
+                    // 构建聚合结果对象
+                    StatisticsWaybillResp.OrderBillStatusStatistics aggregateStat = new StatisticsWaybillResp.OrderBillStatusStatistics();
+                    aggregateStat.setOrderStatus(aggregateInfo[0]); // 聚合状态编码
+                    aggregateStat.setOrderStatusDesc(aggregateInfo[1]); // 聚合状态描述
+                    aggregateStat.setOrderNum(String.valueOf(totalNum)); // 汇总数量
+                    return aggregateStat;
+                })
+                .filter(stat -> Long.parseLong(stat.getOrderNum()) > 0)
+                .sorted(Comparator.comparing(StatisticsWaybillResp.OrderBillStatusStatistics::getOrderStatus))
+                .collect(Collectors.toList());
+        return aggregatedList;
     }
 
     /**