Explorar o código

运单统计按照车牌和司机分开

donglang hai 1 mes
pai
achega
008d5559dc

+ 24 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -991,8 +991,8 @@ public class WaybillOrderService {
         }
 
         //查询运单关联数据
-        List<WaybillOrderStatusResp> waybillOrdertDatas = getWaybillOrderRelevantData(param, records);
-        waybillResp.setOrderStatusStatistics(calculateStatusStatistics(waybillOrdertDatas));
+//        List<WaybillOrderStatusResp> waybillOrdertDatas = getWaybillOrderRelevantData(param, records);
+        waybillResp.setOrderStatusStatistics(calculateStatusStatistics(param, records));
         return waybillResp;
     }
 
@@ -1026,10 +1026,10 @@ public class WaybillOrderService {
 
     /**
      * 计算运单状态统计
-     * @param waybillOrdertDatas
+     * @param records
      * @return
      */
-    private static List<StatisticsWaybillResp.OrderBillStatusStatistics> calculateStatusStatistics(List<WaybillOrderStatusResp> waybillOrdertDatas) {
+    private static List<StatisticsWaybillResp.OrderBillStatusStatistics> calculateStatusStatistics(WaybillOrderQueryParam param, List<KwtWaybillOrder> records) {
         // 定义状态码聚合规则
         Map<List<String>, String[]> aggregateRules = Map.of(
                 Arrays.asList("1", "5", "10", "11", "12", "13", "14", "15", "16", "17", "18"), new String[]{"1", "进行中"},
@@ -1038,7 +1038,7 @@ public class WaybillOrderService {
         );
 
         // 按原始状态统计数量
-        Map<String, Long> statusCountMap = waybillOrdertDatas.stream()
+        Map<String, Long> statusCountMap = records.stream()
                 .collect(Collectors.groupingBy(va ->String.valueOf(va.getStatus()), Collectors.counting()));
 
         // 进行状态聚合
@@ -1046,15 +1046,29 @@ public class WaybillOrderService {
                 .map(rule -> {
                     List<String> originalStatuses = rule.getKey();
                     String[] aggregateInfo = rule.getValue();
+                    String aggStatus = aggregateInfo[0];  // 1/2/3
+                    String aggDesc = aggregateInfo[1];
 
                     // 汇总对应状态的数量
-                    long totalNum = originalStatuses.stream()
-                            .mapToLong(status -> statusCountMap.getOrDefault(status, 0L))
-                            .sum();
+                    long totalNum;
+                    // ===================== 你要的过滤逻辑 =====================
+                    if ("1".equals(aggStatus)) {
+                        // 状态1:按truckNo过滤
+                        totalNum = records.stream()
+                                .filter(va -> originalStatuses.contains(String.valueOf(va.getStatus())))
+                                .filter(va -> Objects.equals(va.getTruckNo(), param.getTruckNo()))
+                                .count();
+                    } else {
+                        // 状态2、3:按driverId过滤
+                        totalNum = records.stream()
+                                .filter(va -> originalStatuses.contains(String.valueOf(va.getStatus())))
+                                .filter(va -> Objects.equals(va.getDriverId(), param.getDriverId()))
+                                .count();
+                    }
                     // 构建聚合结果对象
                     StatisticsWaybillResp.OrderBillStatusStatistics aggregateStat = new StatisticsWaybillResp.OrderBillStatusStatistics();
-                    aggregateStat.setOrderStatus(aggregateInfo[0]); // 聚合状态编码
-                    aggregateStat.setOrderStatusDesc(aggregateInfo[1]); // 聚合状态描述
+                    aggregateStat.setOrderStatus(aggStatus); // 聚合状态编码
+                    aggregateStat.setOrderStatusDesc(aggDesc); // 聚合状态描述
                     aggregateStat.setOrderNum(String.valueOf(totalNum)); // 汇总数量
                     return aggregateStat;
                 })