Pārlūkot izejas kodu

y优化司机app端运单量和运输量

donglang 1 mēnesi atpakaļ
vecāks
revīzija
e15cbd3cd4

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

@@ -7,7 +7,7 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.transport.model.dto.WaybillListAppDTO;
 import com.sckw.transport.model.param.*;
-import com.sckw.transport.model.vo.OrderCirculateTotalTakeVo;
+import com.sckw.transport.model.vo.OrderTotalTakeVo;
 import com.sckw.transport.model.vo.StatisticsWaybillResp;
 import com.sckw.transport.service.KwtLogisticsConsignmentService;
 import com.sckw.transport.service.KwtWaybillManagementService;
@@ -205,8 +205,8 @@ public class AppWayBillController {
      */
     @Operation(summary = "查询完成运单和累计运输量", description = "查询司机关联的完成运单和累计运输量")
     @PostMapping("/queryTotalTake")
-    public BaseResult<OrderCirculateTotalTakeVo> queryTotalTake(@RequestBody @Valid OrderCirculateTotalTakeParam param){
-        OrderCirculateTotalTakeVo totalTakeVo = waybillOrderService.queryTotalTake(param);
+    public BaseResult<OrderTotalTakeVo> queryTotalTake(@RequestBody @Valid OrderCirculateTotalTakeParam param){
+        OrderTotalTakeVo totalTakeVo = waybillOrderService.queryTotalTake(param);
         return BaseResult.success(totalTakeVo);
     }
 

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderCirculateTotalTakeVo.java → sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderTotalTakeVo.java

@@ -14,7 +14,7 @@ import java.math.BigDecimal;
  * @create :2025-11-13 08:59:00
  */
 @Data
-public class OrderCirculateTotalTakeVo implements Serializable {
+public class OrderTotalTakeVo implements Serializable {
 
     @Serial
     private static final long serialVersionUID = -9098396227857171692L;

+ 61 - 29
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -40,8 +40,8 @@ import com.sckw.transport.dao.*;
 import com.sckw.transport.handler.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.param.*;
-import com.sckw.transport.model.vo.OrderCirculateTotalTakeVo;
 import com.sckw.transport.model.vo.OrderStatusStatisticsResp;
+import com.sckw.transport.model.vo.OrderTotalTakeVo;
 import com.sckw.transport.model.vo.StatisticsWaybillResp;
 import com.sckw.transport.repository.*;
 import com.sckw.transport.service.*;
@@ -143,39 +143,41 @@ public class WaybillOrderService {
      * @param param
      * @return
      */
-    public OrderCirculateTotalTakeVo queryTotalTake(OrderCirculateTotalTakeParam param) {
+    public OrderTotalTakeVo queryTotalTake(OrderCirculateTotalTakeParam param) {
         log.info("查询司机关联完成运单和累计运输量:{}", JSON.toJSONString(param));
-        LambdaQueryWrapper<KwtLogisticsOrderCirculate> queryWrapper = Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
-                .eq(KwtLogisticsOrderCirculate::getEntId, param.getEntId())
-                .eq(KwtLogisticsOrderCirculate::getDriverId, param.getDriverId())
-                .eq(KwtLogisticsOrderCirculate::getDelFlag,0)
-                .orderByDesc(KwtLogisticsOrderCirculate::getCreateTime)
-                .orderByDesc(KwtLogisticsOrderCirculate::getId);
-        List<KwtLogisticsOrderCirculate> circulateList = logisticsOrderCirculateRepository.list(queryWrapper);
-        if (CollectionUtils.isEmpty(circulateList)) {
+        LambdaQueryWrapper<KwtWaybillOrder> queryWrapper = Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getEntId, param.getEntId())
+                .eq(KwtWaybillOrder::getDriverId, param.getDriverId())
+                .eq(KwtWaybillOrder::getDelFlag,0)
+                .eq(KwtWaybillOrder::getStatus,CarWaybillV1Enum.WAIT_UNLOADING.getCode())
+                .orderByDesc(KwtWaybillOrder::getCreateTime)
+                .orderByDesc(KwtWaybillOrder::getId);
+        //1. 查询司机的完成运单
+        List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.list(queryWrapper);
+        if (CollectionUtils.isEmpty(waybillOrders)) {
             log.info("当前司机的无运单,driverId: {}", JSON.toJSONString(param));
-            return new OrderCirculateTotalTakeVo();
+            return new OrderTotalTakeVo();
+        }
+        //2. 批量查询子运单
+        List<Long> waybillOrderIds = waybillOrders.stream().map(KwtWaybillOrder::getId).distinct().collect(Collectors.toList());
+        List<KwtWaybillOrderSubtask> kwtWaybillOrderSubtasks = waybillOrderSubtaskRepository.queryByWOrderIds(waybillOrderIds);
+        if (CollectionUtils.isEmpty(kwtWaybillOrderSubtasks)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_SUB_NOT_FOUND, "当前车辆的物流订单无商品信息");
         }
 
-        //总运单量
-        int totalTake = circulateList.stream()
-                .filter(cr -> cr.getTotalTake() != null)
-                .mapToInt(KwtLogisticsOrderCirculate::getTotalTake)
-                .sum();
-        //总运输量
-        BigDecimal toalEntrustAmount = circulateList.stream().map(KwtLogisticsOrderCirculate::getEntrustAmount)
-                .filter(Objects::nonNull)
+        // 总运输量 = 累计装货量 + 卸货
+        BigDecimal toalEntrustAmount = kwtWaybillOrderSubtasks
+                .stream()
+                .map(sub -> {
+                    BigDecimal loadAmount = Optional.ofNullable(sub.getLoadAmount()).orElse(BigDecimal.ZERO);
+                    BigDecimal unloadAmount = Optional.ofNullable(sub.getUnloadAmount()).orElse(BigDecimal.ZERO);
+                    return loadAmount.add(unloadAmount);
+                })
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
 
-        //单位
-        String unit = circulateList.stream().map(KwtLogisticsOrderCirculate::getUnit)
-                .filter(Objects::nonNull)
-                .findFirst().orElse(null);
-
-        OrderCirculateTotalTakeVo totalTakeVo = new OrderCirculateTotalTakeVo();
-        totalTakeVo.setTotalTake(totalTake);
+        OrderTotalTakeVo totalTakeVo = new OrderTotalTakeVo();
+        totalTakeVo.setTotalTake(waybillOrders.size());
         totalTakeVo.setEntrustAmount(toalEntrustAmount);
-        totalTakeVo.setUnit(unit);
         log.info("查询司机关联完成运单和累计运输量成功,结果:{}", JSON.toJSONString(totalTakeVo));
 
         return totalTakeVo;
@@ -740,6 +742,8 @@ public class WaybillOrderService {
         log.info("运单状态统计,参数:{}", JSON.toJSONString(param));
         StatisticsWaybillResp waybillResp = new StatisticsWaybillResp();
         if (StringUtils.isBlank(param.getTruckNo())) {
+            // 车牌号为空时,返回默认的三种状态
+            waybillResp.setOrderStatusStatistics(buildDefaultStatusStatistics());
             return waybillResp;
         }
         //构建查询条件并获取运单数据
@@ -747,6 +751,7 @@ public class WaybillOrderService {
         List<KwtWaybillOrder> records = waybillOrderRepository.list(queryWrapper);
         if (CollectionUtils.isEmpty(records)) {
             log.info("当前车辆辆的无物流运单,统计结果为空, truckNo:{}", param.getTruckNo());
+            waybillResp.setOrderStatusStatistics(buildDefaultStatusStatistics());
             return waybillResp;
         }
 
@@ -756,6 +761,34 @@ public class WaybillOrderService {
         return waybillResp;
     }
 
+
+    /**
+     * 构建默认的状态统计列表(三种状态,数量均为0)
+     * @return 默认统计列表
+     */
+    private List<StatisticsWaybillResp.OrderBillStatusStatistics> buildDefaultStatusStatistics() {
+        List<StatisticsWaybillResp.OrderBillStatusStatistics> defaultList = new ArrayList<>();
+        // 进行中
+        StatisticsWaybillResp.OrderBillStatusStatistics underWay = new StatisticsWaybillResp.OrderBillStatusStatistics();
+        underWay.setOrderStatus("1");
+        underWay.setOrderStatusDesc("进行中");
+        underWay.setOrderNum("0");
+        defaultList.add(underWay);
+        // 单证审核
+        StatisticsWaybillResp.OrderBillStatusStatistics review = new StatisticsWaybillResp.OrderBillStatusStatistics();
+        review.setOrderStatus("2");
+        review.setOrderStatusDesc("单证审核");
+        review.setOrderNum("0");
+        defaultList.add(review);
+        // 已完成
+        StatisticsWaybillResp.OrderBillStatusStatistics completed = new StatisticsWaybillResp.OrderBillStatusStatistics();
+        completed.setOrderStatus("3");
+        completed.setOrderStatusDesc("已完成");
+        completed.setOrderNum("0");
+        defaultList.add(completed);
+        return defaultList;
+    }
+
     /**
      * 计算运单状态统计
      * @param waybillOrdertDatas
@@ -778,7 +811,7 @@ public class WaybillOrderService {
                 .map(rule -> {
                     List<String> originalStatuses = rule.getKey();
                     String[] aggregateInfo = rule.getValue();
-                    
+
                     // 汇总对应状态的数量
                     long totalNum = originalStatuses.stream()
                             .mapToLong(status -> statusCountMap.getOrDefault(status, 0L))
@@ -790,7 +823,6 @@ public class WaybillOrderService {
                     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;