Переглянути джерело

Merge remote-tracking branch 'origin/dev_20251130' into dev_20251130

donglang 1 місяць тому
батько
коміт
8971e17ca6
14 змінених файлів з 366 додано та 8 видалено
  1. 10 4
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java
  2. 11 4
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcLogisticsContractController.java
  3. 53 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractStatusCountResp.java
  4. 6 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsRepository.java
  5. 6 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeRepository.java
  6. 44 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java
  7. 39 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java
  8. 9 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsOrderController.java
  9. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  10. 51 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderStatusStatisticsResp.java
  11. 52 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsWaybillResp.java
  12. 6 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java
  13. 34 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  14. 35 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

+ 10 - 4
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java

@@ -6,6 +6,7 @@ import com.sckw.contract.api.model.dto.res.ContractTradeOrderInfo;
 import com.sckw.contract.api.model.dto.res.LogisticsOrderDto;
 import com.sckw.contract.model.vo.req.*;
 import com.sckw.contract.model.vo.res.ContractDetailResp;
+import com.sckw.contract.model.vo.res.ContractStatusCountResp;
 import com.sckw.contract.model.vo.res.QueryListResVo;
 import com.sckw.contract.service.operateService.KwcContractTradeService;
 import com.sckw.core.model.enums.EntTypeEnum;
@@ -20,10 +21,7 @@ import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -283,4 +281,12 @@ public class KwcContractSaleController {
     public BaseResult<List<ContractTradeOrderInfo>> queryContractTradeOrder(@Valid @RequestBody ContractTradeOrderDto req) {
         return BaseResult.success(kwcContractTradeService.queryContractTradeOrder(req));
     }
+    /**
+     * 贸易合同状态统计
+     */
+    @GetMapping("/queryTradeContractStatusCount")
+    @Operation(summary = "贸易合同状态统计")
+    public BaseResult<ContractStatusCountResp> queryTradeContractStatusCount() {
+        return BaseResult.success(kwcContractTradeService.queryTradeContractStatusCount());
+    }
 }

+ 11 - 4
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcLogisticsContractController.java

@@ -4,6 +4,7 @@ import com.sckw.contract.model.vo.req.ContractDetailReq;
 import com.sckw.contract.model.vo.req.LogisticListReq;
 import com.sckw.contract.model.vo.req.QueryLogisticListReq;
 import com.sckw.contract.model.vo.req.UpdateLogisticsReq;
+import com.sckw.contract.model.vo.res.ContractStatusCountResp;
 import com.sckw.contract.model.vo.res.QueryLogisticDetailResp;
 import com.sckw.contract.model.vo.res.QueryLogisticListResp;
 import com.sckw.contract.service.operateService.KwcContractLogisticsService;
@@ -12,10 +13,7 @@ import com.sckw.core.web.response.result.PageDataResult;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author :chenXiaoFei
@@ -68,4 +66,13 @@ public class KwcLogisticsContractController {
     public BaseResult<Boolean> updateLogistics(@RequestBody UpdateLogisticsReq req) {
         return BaseResult.success(kwcContractLogisticsService.updateLogistics(req));
     }
+
+    /**
+     * 统计物流合同状态
+     */
+    @GetMapping("/queryLogisticContractStatusCount")
+    @Operation(summary = "统计物流合同状态")
+    public BaseResult<ContractStatusCountResp> queryLogisticContractStatusCount() {
+        return BaseResult.success(kwcContractLogisticsService.queryLogisticContractStatusCount());
+    }
 }

+ 53 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractStatusCountResp.java

@@ -0,0 +1,53 @@
+package com.sckw.contract.model.vo.res;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-20 18:53:00
+ */
+@Data
+public class ContractStatusCountResp implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4388133884705884874L;
+
+
+    /**
+     * 总量
+     */
+    @Schema(description = "总量")
+    private String totalNum;
+    /**
+     * 状态信息集合
+     */
+    @Schema(description = "状态信息集合")
+    private List<ContractStatusCount> contractStatusInfo;
+    @Data
+    public static class ContractStatusCount implements Serializable{
+        @Serial
+        private static final long serialVersionUID = 8246703631833564773L;
+        /**
+         * 订单状态
+         */
+        @Schema(description = "订单状态")
+        private String orderStatus;
+        /**
+         * 状态描述
+         */
+        @Schema(description = "状态描述")
+        private String orderStatusDesc;
+        /**
+         * 数量
+         */
+        @Schema(description = "数量")
+        private String orderNum;
+
+    }
+}

+ 6 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsRepository.java

@@ -65,4 +65,10 @@ public class KwcContractLogisticsRepository extends ServiceImpl<KwcContractLogis
                 Wrappers.<KwcContractLogistics>lambdaQuery()
                         .eq(KwcContractLogistics::getId, updateLogistics.getId()));
     }
+
+    public List<KwcContractLogistics> queryByEntId(Long entId) {
+        return list(Wrappers.<KwcContractLogistics>lambdaQuery()
+                .eq(KwcContractLogistics::getEntId, entId)
+                .eq(KwcContractLogistics::getDelFlag, 0));
+    }
 }

+ 6 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeRepository.java

@@ -88,4 +88,10 @@ public class KwcContractTradeRepository extends ServiceImpl<KwcContractTradeMapp
                 .eq(KwcContractTrade::getDelFlag, 0)
                 .in(KwcContractTrade::getId, contractIdList));
     }
+
+    public List<KwcContractTrade> queryByEntId(Long entId) {
+        return list(Wrappers.<KwcContractTrade>lambdaQuery()
+                .eq(KwcContractTrade::getEntId, entId)
+                .eq(KwcContractTrade::getDelFlag, 0));
+    }
 }

+ 44 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java

@@ -1430,4 +1430,48 @@ public class KwcContractLogisticsService {
         }
        return kwcContractLogisticsRepository.updateLogistics(updateLogistics);
     }
+
+    public ContractStatusCountResp queryLogisticContractStatusCount() {
+
+        log.info("查询物流合同订单状态统计");
+        List<KwcContractLogistics> contractLogistics = kwcContractLogisticsRepository.queryByEntId(LoginUserHolder.getEntId());
+
+        List<ContractStatusEnum> statusEnums = Arrays.stream(ContractStatusEnum.values())
+                .sorted(Comparator.comparing(ContractStatusEnum::getCode))
+                .collect(Collectors.toList());
+        ContractStatusCountResp contractStatusCountResp = new ContractStatusCountResp();
+        contractStatusCountResp.setTotalNum(String.valueOf(contractLogistics.size()));
+
+        if (CollectionUtils.isEmpty(contractLogistics)){
+            Map<Integer, List<KwcContractLogistics>> statusAndLogOrdersMap = new HashMap<>();
+            List<ContractStatusCountResp.ContractStatusCount> statusCounts = statusEnums.stream()
+                    .map(x -> getContractStatusCount(x, statusAndLogOrdersMap))
+                    .collect(Collectors.toList());
+            contractStatusCountResp.setContractStatusInfo(statusCounts);
+            return contractStatusCountResp;
+        }
+        Map<Integer, List<KwcContractLogistics>> statusAndLogOrdersMap = contractLogistics.stream().collect(Collectors.groupingBy(KwcContractLogistics::getStatus));
+        return getContractStatusCountResp(statusEnums, statusAndLogOrdersMap, contractStatusCountResp, contractLogistics);
+    }
+
+    @NotNull
+    private static ContractStatusCountResp getContractStatusCountResp(List<ContractStatusEnum> statusEnums,
+                                                                      Map<Integer, List<KwcContractLogistics>> statusAndLogOrdersMap,
+                                                                      ContractStatusCountResp contractStatusCountResp,
+                                                                      List<KwcContractLogistics> kwcContractLogistics) {
+        List<ContractStatusCountResp.ContractStatusCount> statusCounts = statusEnums.stream()
+                .map(x -> getContractStatusCount(x, statusAndLogOrdersMap))
+                .collect(Collectors.toList());
+        contractStatusCountResp.setContractStatusInfo(statusCounts);
+        contractStatusCountResp.setTotalNum(String.valueOf(kwcContractLogistics.size()));
+        return contractStatusCountResp;
+    }
+
+    private static ContractStatusCountResp.ContractStatusCount getContractStatusCount(ContractStatusEnum statusEnum, Map<Integer, List<KwcContractLogistics>> finalStatusAndLogOrdersMap1) {
+        ContractStatusCountResp.ContractStatusCount contractStatusCount = new ContractStatusCountResp.ContractStatusCount();
+        contractStatusCount.setOrderStatus(String.valueOf(statusEnum.getCode()));
+        contractStatusCount.setOrderStatusDesc(statusEnum.getName());
+        contractStatusCount.setOrderNum(String.valueOf(finalStatusAndLogOrdersMap1.getOrDefault(statusEnum.getCode(), new ArrayList<>()).size()));
+        return contractStatusCount;
+    }
 }

+ 39 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -1808,4 +1808,43 @@ public class KwcContractTradeService {
         return contractTradeOrderInfo;
     }
 
+    public ContractStatusCountResp queryTradeContractStatusCount() {
+        log.info("查询贸易合同订单状态统计");
+        List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.queryByEntId(LoginUserHolder.getEntId());
+
+        List<ContractStatusEnum> statusEnums = Arrays.stream(ContractStatusEnum.values())
+                .sorted(Comparator.comparing(ContractStatusEnum::getCode))
+                .collect(Collectors.toList());
+        ContractStatusCountResp contractStatusCountResp = new ContractStatusCountResp();
+        contractStatusCountResp.setTotalNum(String.valueOf(kwcContractTrades.size()));
+
+        if (CollectionUtils.isEmpty(kwcContractTrades)){
+            Map<Integer, List<KwcContractTrade>> statusAndLogOrdersMap = new HashMap<>();
+            List<ContractStatusCountResp.ContractStatusCount> statusCounts = statusEnums.stream()
+                    .map(x -> getContractStatusCount(x, statusAndLogOrdersMap))
+                    .collect(Collectors.toList());
+            contractStatusCountResp.setContractStatusInfo(statusCounts);
+            return contractStatusCountResp;
+        }
+        Map<Integer, List<KwcContractTrade>> statusAndLogOrdersMap = kwcContractTrades.stream().collect(Collectors.groupingBy(KwcContractTrade::getStatus));
+        return getContractStatusCountResp(statusEnums, statusAndLogOrdersMap, contractStatusCountResp, kwcContractTrades);
+    }
+
+    @NotNull
+    private static ContractStatusCountResp getContractStatusCountResp(List<ContractStatusEnum> statusEnums, Map<Integer, List<KwcContractTrade>> statusAndLogOrdersMap, ContractStatusCountResp contractStatusCountResp, List<KwcContractTrade> kwcContractTrades) {
+        List<ContractStatusCountResp.ContractStatusCount> statusCounts = statusEnums.stream()
+                .map(x -> getContractStatusCount(x, statusAndLogOrdersMap))
+                .collect(Collectors.toList());
+        contractStatusCountResp.setContractStatusInfo(statusCounts);
+        contractStatusCountResp.setTotalNum(String.valueOf(kwcContractTrades.size()));
+        return contractStatusCountResp;
+    }
+
+    private static ContractStatusCountResp.ContractStatusCount getContractStatusCount(ContractStatusEnum x, Map<Integer, List<KwcContractTrade>> finalStatusAndLogOrdersMap1) {
+        ContractStatusCountResp.ContractStatusCount contractStatusCount = new ContractStatusCountResp.ContractStatusCount();
+        contractStatusCount.setOrderStatus(String.valueOf(x.getCode()));
+        contractStatusCount.setOrderStatusDesc(x.getName());
+        contractStatusCount.setOrderNum(String.valueOf(finalStatusAndLogOrdersMap1.getOrDefault(x.getCode(), new ArrayList<>()).size()));
+        return contractStatusCount;
+    }
 }

+ 9 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsOrderController.java

@@ -186,4 +186,13 @@ public class KwtLogisticsOrderController {
     public BaseResult<Boolean> logisticOrderFinish(@RequestBody @Valid OrderFinishReq req ) {
         return BaseResult.success(logisticsConsignmentService.logisticOrderFinish(req));
     }
+
+    /**
+     * 状态统计
+     */
+    @GetMapping("/orderStatusStatistics")
+    @Operation(summary = "状态统计", description = "状态统计")
+    public BaseResult<OrderStatusStatisticsResp> orderStatusStatistics() {
+        return BaseResult.success(logisticsConsignmentService.orderStatusStatistics());
+    }
 }

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -661,6 +661,7 @@ public class KwtWaybillOrderController {
      * 分页查询运单信息
      */
     @PostMapping("/findBillOrderListPage")
+    @Operation(summary = "分页查询运单信息")
     public BaseResult<PageDataResult<WaybillOrderResp>> findBillOrderListPage(@RequestBody WaybillOrderReq req) {
         return BaseResult.success(waybillOrderV1Service.findBillOrderListPage(req));
     }
@@ -681,4 +682,13 @@ public class KwtWaybillOrderController {
     public BaseResult<Boolean> reviewWaybillOrder(@RequestBody @Valid ReviewWaybillOrderReq req) {
         return BaseResult.success(waybillOrderV1Service.reviewWaybillOrder(req));
     }
+
+    /**
+     * 运单状态统计
+     */
+    @GetMapping("/statisticsWaybillOrder")
+    @Operation(summary = "运单状态统计")
+    public BaseResult<StatisticsWaybillResp> statisticsWaybillOrder() {
+        return BaseResult.success(waybillOrderV1Service.statisticsWaybillOrder());
+    }
 }

+ 51 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderStatusStatisticsResp.java

@@ -0,0 +1,51 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-20 17:32:00
+ */
+@Data
+public class OrderStatusStatisticsResp implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 6300921024895200180L;
+    /**
+     * 总量
+     */
+    @Schema(description = "总量")
+    private String totalNum;
+    /**
+     * 状态信息集合
+     */
+    @Schema(description = "状态信息集合")
+    private List<OrderStatusStatistics> orderStatusStatistics;
+    @Data
+    public static class OrderStatusStatistics implements Serializable{
+        @Serial
+        private static final long serialVersionUID = 8246703631833564773L;
+        /**
+         * 订单状态
+         */
+        @Schema(description = "订单状态")
+        private String orderStatus;
+        /**
+         * 状态描述
+         */
+        @Schema(description = "状态描述")
+        private String orderStatusDesc;
+        /**
+         * 数量
+         */
+        @Schema(description = "数量")
+        private String orderNum;
+
+    }
+}

+ 52 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/StatisticsWaybillResp.java

@@ -0,0 +1,52 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-20 18:02:00
+ */
+@Data
+public class StatisticsWaybillResp implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 634965619826817616L;
+
+    /**
+     * 总量
+     */
+    @Schema(description = "总量")
+    private String totalNum;
+    /**
+     * 状态信息集合
+     */
+    @Schema(description = "状态信息集合")
+    private List<OrderBillStatusStatistics> orderStatusStatistics;
+    @Data
+    public static class OrderBillStatusStatistics implements Serializable{
+        @Serial
+        private static final long serialVersionUID = 8246703631833564773L;
+        /**
+         * 订单状态
+         */
+        @Schema(description = "订单状态")
+        private String orderStatus;
+        /**
+         * 状态描述
+         */
+        @Schema(description = "状态描述")
+        private String orderStatusDesc;
+        /**
+         * 数量
+         */
+        @Schema(description = "数量")
+        private String orderNum;
+
+    }
+}

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java

@@ -90,4 +90,10 @@ public class KwtLogisticsOrderRepository extends ServiceImpl<KwtLogisticsOrderMa
                 .eq(KwtLogisticsOrder::getId, logOrderId)
                 .eq(KwtLogisticsOrder::getStatus, code));
     }
+
+    public List<KwtLogisticsOrder> queryByEntIds(Long entId) {
+        return list(Wrappers.<KwtLogisticsOrder>lambdaQuery()
+                .eq(KwtLogisticsOrder::getDelFlag,0)
+                .eq(KwtLogisticsOrder::getEntId, entId));
+    }
 }

+ 34 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -2962,6 +2962,40 @@ public class KwtLogisticsConsignmentService {
 
     }
 
+    public OrderStatusStatisticsResp orderStatusStatistics() {
+        log.info("物流订单状态统计");
+
+        List<KwtLogisticsOrder> logisticsOrders =logisticsOrderRepository.queryByEntIds(LoginUserHolder.getEntId());
+        List<LogisticsOrderV1Enum> orderV1Enums = Arrays.stream(LogisticsOrderV1Enum.values())
+                .sorted(Comparator.comparingInt(LogisticsOrderV1Enum::getCode))
+                .collect(Collectors.toList());
+        OrderStatusStatisticsResp orderStatusStatisticsResp = new OrderStatusStatisticsResp();
+        orderStatusStatisticsResp.setTotalNum(String.valueOf(logisticsOrders.size()));
+        if (Objects.isNull(logisticsOrders)){
+            Map<Integer, List<KwtLogisticsOrder>> statusAndLogOrdersMap = Maps.newHashMap() ;
+            List<OrderStatusStatisticsResp.OrderStatusStatistics> statistics = orderV1Enums.stream()
+                    .map(o -> getOrderStatusStatistics(o, statusAndLogOrdersMap))
+                    .collect(Collectors.toList());
+            orderStatusStatisticsResp.setOrderStatusStatistics(statistics);
+            return orderStatusStatisticsResp;
+        }
+        Map<Integer, List<KwtLogisticsOrder>> statusAndLogOrdersMap = logisticsOrders.stream().collect(Collectors.groupingBy(KwtLogisticsOrder::getStatus));
+        List<OrderStatusStatisticsResp.OrderStatusStatistics> statusStatistics = orderV1Enums.stream()
+                .map(o -> getOrderStatusStatistics(o, statusAndLogOrdersMap))
+                .collect(Collectors.toList());
+        orderStatusStatisticsResp.setOrderStatusStatistics(statusStatistics);
+        orderStatusStatisticsResp.setTotalNum(String.valueOf(logisticsOrders.size()));
+        return orderStatusStatisticsResp;
+    }
+
+    private static OrderStatusStatisticsResp.OrderStatusStatistics getOrderStatusStatistics(LogisticsOrderV1Enum o, Map<Integer, List<KwtLogisticsOrder>> finalStatusAndLogOrdersMap1) {
+        OrderStatusStatisticsResp.OrderStatusStatistics orderStatusStatistics = new OrderStatusStatisticsResp.OrderStatusStatistics();
+        orderStatusStatistics.setOrderStatus(String.valueOf(o.getCode()));
+        orderStatusStatistics.setOrderStatusDesc(o.getDestination());
+        orderStatusStatistics.setOrderNum(String.valueOf(finalStatusAndLogOrdersMap1.getOrDefault(o.getCode(), new ArrayList<>()).size()));
+        return orderStatusStatistics;
+    }
+
     /**
      * 查询司机关联车辆的物流订单
      * @param param

+ 35 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -3424,4 +3424,39 @@ public class KwtWaybillOrderV1Service {
         kwtLogisticsOrder.setUnloadAmount(unloadAmount.add(subUnloadAmount));
         return kwtLogisticsOrder;
     }
+
+    public StatisticsWaybillResp statisticsWaybillOrder() {
+        log.info("运单状态统计");
+        List<KwtWaybillOrder> orders = kwtWaybillOrderRepository.findByEntId(LoginUserHolder.getEntId());
+        List<CarWaybillV1Enum> carWaybillV1Enums = Arrays.stream(CarWaybillV1Enum.values())
+                .sorted(Comparator.comparing(CarWaybillV1Enum::getCode))
+                .collect(Collectors.toList());
+
+        StatisticsWaybillResp statisticsWaybillResp = new StatisticsWaybillResp();
+        statisticsWaybillResp.setTotalNum(String.valueOf(orders.size()));
+
+        if (CollectionUtils.isEmpty(orders)) {
+            Map<Integer, List<KwtWaybillOrder>> stausAndBillOrdersMap = Maps.newHashMap();
+            List<StatisticsWaybillResp.OrderBillStatusStatistics> statusStatistics = carWaybillV1Enums.stream()
+                    .map(c -> getOrderBillStatusStatistics(c, stausAndBillOrdersMap))
+                    .collect(Collectors.toList());
+            statisticsWaybillResp.setOrderStatusStatistics(statusStatistics);
+            return statisticsWaybillResp;
+        }
+        Map<Integer,List<KwtWaybillOrder>> stausAndBillOrdersMap = orders.stream().collect(Collectors.groupingBy(KwtWaybillOrder::getStatus));
+        List<StatisticsWaybillResp.OrderBillStatusStatistics> statusStatis = carWaybillV1Enums.stream()
+                .map(c -> getOrderBillStatusStatistics(c, stausAndBillOrdersMap))
+                .collect(Collectors.toList());
+        statisticsWaybillResp.setOrderStatusStatistics(statusStatis);
+        statisticsWaybillResp.setTotalNum(String.valueOf(orders.size()));
+       return statisticsWaybillResp;
+    }
+
+    private static StatisticsWaybillResp.OrderBillStatusStatistics getOrderBillStatusStatistics(CarWaybillV1Enum c, Map<Integer, List<KwtWaybillOrder>> finalStausAndBillOrdersMap) {
+        StatisticsWaybillResp.OrderBillStatusStatistics orderBillStatusStatistics = new StatisticsWaybillResp.OrderBillStatusStatistics();
+        orderBillStatusStatistics.setOrderStatus(String.valueOf(c.getCode()));
+        orderBillStatusStatistics.setOrderStatusDesc(c.getDestination());
+        orderBillStatusStatistics.setOrderNum(String.valueOf(finalStausAndBillOrdersMap.getOrDefault(c.getCode(), new ArrayList<>()).size()));
+        return orderBillStatusStatistics;
+    }
 }