Parcourir la source

修改bug:MVP2-472、MVP2-470、MVP2-465

donglang il y a 5 jours
Parent
commit
64518c2f64

+ 1 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -791,6 +791,7 @@ public class KwoTradeOrderService {
                 contractInfo.setContractName(contractRes.getContactName());
                 contractInfo.setContractSigningWay(contractRes.getSigningWayName());
                 contractInfo.setContractStatus(contractRes.getStatusName());
+                contractInfo.setDispatchWay(contractRes.getDispatchWay());
             }
             detail.setContractInfo(contractInfo);
         }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingHandler.java

@@ -271,7 +271,7 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
         } else {
             //订单按照卸货货方式计算
             KwtWaybillOrderNode node = getWaybillOrderNode(param, waybillOrder);
-            node.setRemark("司机[" + waybillOrder.getDriverName() + "]已上传卸货凭证");
+            node.setRemark("司机[" + waybillOrder.getDriverName() + "]已上传卸货凭证,卸货量[" + param.getUnloadAmount() + "]");
             waybillOrderNodeRepository.save(node);
             log.info("记录【卸货】节点轨迹成功,节点ID:{}", node.getId());
         }

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderResp.java

@@ -5,6 +5,7 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @author :chenXiaoFei
@@ -188,5 +189,5 @@ public class LogisticsOrderResp implements Serializable {
      * 订单余量
      */
     @Schema(description = "订单余量")
-    private String orderSurplus;
+    private BigDecimal orderSurplus;
 }

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

@@ -209,5 +209,5 @@ public class WaybillOrderStatusResp implements Serializable {
      * 订单余量
      */
     @Schema(description = "订单余量")
-    private String orderSurplus;
+    private BigDecimal orderSurplus;
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.core.model.enums.LogisticsOrderV1Enum;
 import com.sckw.transport.dao.KwtLogisticsOrderMapper;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import org.apache.commons.collections4.CollectionUtils;
@@ -136,4 +137,16 @@ public class KwtLogisticsOrderRepository extends ServiceImpl<KwtLogisticsOrderMa
                 .in( KwtLogisticsOrder::getId, logOrderIds)
                 .like(StringUtils.isNotBlank(logisticOrderNo), KwtLogisticsOrder::getLOrderNo, logisticOrderNo));
     }
+
+
+    public List<KwtLogisticsOrder> queryByLogOrderIds(List<Long> logOrderIdList) {
+        return list(Wrappers.<KwtLogisticsOrder>lambdaQuery()
+                .in(KwtLogisticsOrder::getId, logOrderIdList)
+                .eq(KwtLogisticsOrder::getDelFlag,0)
+                .eq(KwtLogisticsOrder::getStatus, LogisticsOrderV1Enum.IN_TRANSIT.getCode())
+                .orderByDesc(KwtLogisticsOrder::getCreateTime)
+                .orderByDesc(KwtLogisticsOrder::getId));
+    }
+
+
 }

+ 83 - 21
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -1,12 +1,11 @@
 package com.sckw.transport.service.app;
 
 
-import cn.hutool.core.map.MapUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.collect.Maps;
+import com.google.common.collect.Lists;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
@@ -18,7 +17,6 @@ import com.sckw.core.model.enums.LogisticsOrderV1Enum;
 import com.sckw.core.model.enums.UnitTypeEnum;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.DateUtils;
-import com.sckw.core.utils.DistanceUtils;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RTruckVo;
@@ -28,7 +26,6 @@ import com.sckw.order.api.model.OrderUnitInfoDetailVO;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.system.api.RemoteSystemService;
-import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.handler.*;
 import com.sckw.transport.model.*;
@@ -36,7 +33,7 @@ import com.sckw.transport.model.param.*;
 import com.sckw.transport.model.vo.OrderTotalTakeVo;
 import com.sckw.transport.model.vo.StatisticsWaybillResp;
 import com.sckw.transport.repository.*;
-import com.sckw.transport.service.*;
+import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -203,6 +200,9 @@ public class WaybillOrderService {
         if (StringUtils.isBlank(param.getTruckNo())) {
             return PageDataResult.empty(param.getPageNum(), param.getPageSize());
         }
+        //查询车辆信息
+        RTruckVo rTruckVo = getTruck(param.getTruckNo());
+
         List<KwtLogisticsOrderCirculate> circulateList = logisticsOrderCirculateRepository.queryOrderCirculateByEntId(param.getEntId(), param.getTruckNo());
         if (CollectionUtils.isEmpty(circulateList)) {
             log.info("当前车辆无派单订单,truckNo:{}", param.getTruckNo());
@@ -215,14 +215,7 @@ public class WaybillOrderService {
         List<Long> logOrderIdList = circulateList.stream().map(KwtLogisticsOrderCirculate::getLOrderId).filter(Objects::nonNull).collect(Collectors.toList());
 
         //物流订单
-        LambdaQueryWrapper<KwtLogisticsOrder> queryWrapper = Wrappers.<KwtLogisticsOrder>lambdaQuery()
-                .in(KwtLogisticsOrder::getId, logOrderIdList)
-                .eq(KwtLogisticsOrder::getDelFlag,0)
-                .eq(KwtLogisticsOrder::getStatus, LogisticsOrderV1Enum.IN_TRANSIT.getCode())
-                .orderByDesc(KwtLogisticsOrder::getCreateTime)
-                .orderByDesc(KwtLogisticsOrder::getId);
-        Page<KwtLogisticsOrder> page = logisticsOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
-        List<KwtLogisticsOrder> logOrderList = page.getRecords();
+        List<KwtLogisticsOrder> logOrderList = logisticsOrderRepository.queryByLogOrderIds(logOrderIdList);
         if (CollectionUtils.isEmpty(logOrderList)) {
             log.info("当前车辆无物流订单,truckNo:{}", param.getTruckNo());
             throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_STATUS_ERROR, "当前车辆无物流订单");
@@ -297,12 +290,82 @@ public class WaybillOrderService {
                 .map(order -> {
                     return getLogisticsOrderResp(order, logOrderIdAndGoodsMap, goodsIdAndGoodsMap, logOrderIdAndUnitMap,
                             tOrderIdAndUnitMap, logOrderIdAndAddressMap, logOrderIdAndCirculateMap, tradeIdAndOrderDetailVoMap,
-                            tradeIdAndLogOrderList,logOrderIdAndSubtaskMap,dictValueAndDictResDtoMap);
-                }).collect(Collectors.toList());
+                            tradeIdAndLogOrderList, logOrderIdAndSubtaskMap, dictValueAndDictResDtoMap);
+                })
+                .filter(logisticsOrderResp -> {
+                    // 校验是否满足车辆任务量,满足才保留
+                    return checkCurTruckLoadVolume(rTruckVo, logisticsOrderResp.getOrderSurplus());
+                })
+                .collect(Collectors.toList());
+
+        //内存分页
+        List<List<LogisticsOrderResp>> pageList = Lists.partition(ordderList, param.getPageSize());
+        List<LogisticsOrderResp> walletPageList = pageList.size() >= param.getPageNum() ?
+                pageList.get(param.getPageNum() - 1) : Collections.emptyList();
+
+        PageDataResult<LogisticsOrderResp> walletPageResponse = PageDataResult.success(param.getPageNum(), param.getPageSize(), (long) walletPageList.size(), walletPageList);
         log.info("查询司机关联车辆的物流订单成功!");
-        return PageDataResult.success(param.getPageNum(), param.getPageSize(), page.getTotal(), ordderList);
+        return walletPageResponse;
+
+    }
+
+    /**
+     * 校验车辆状态
+     * @param param
+     * @return
+     */
+    private RTruckVo getTruck(String truckNo) {
+        RTruckVo truckVO = remoteFleetService.findTruckByTruckNo(truckNo);
+        if (truckVO == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.TRUCK_NOT_FOUND, "当前车辆不存在");
+        }
+        //核定载重
+        if (truckVO.getLegalLoad() == null || BigDecimal.ZERO.compareTo(truckVO.getLegalLoad()) == 0) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.RESOURCE_NOT_FOUND, "车辆核定载重不能为空!");
+        }
+
+        return truckVO;
+    }
+
+    /**
+     * 校验当前车辆任务量:
+     * 若有皮重:任务量 = 核定载重 - 皮重
+     * 若无皮重:任务量 = 核定载重 × 80%
+     * <p>
+     * 1.当订单余量>=车辆的(法定载重-首次皮重)且<(法定载重-首次皮重 + 2)时,接取的任务量为车辆的(法定载重-首次皮重);
+     * 2.订单余量<车辆的(法定载重-首次皮重)时,该车辆无法接单;
+     * 3.当订单余量>= (法定载重-首次皮重 + 2)时,接取的任务量为 (法定载重-首次皮重 + 2)
+     *
+     * @param truckNo
+     */
+    private Boolean checkCurTruckLoadVolume(RTruckVo truckNo, BigDecimal orderSurplus) {
+        log.info("开始校验当前车辆任务量!");
+        //核定载重
+        BigDecimal actualWeight = truckNo.getLegalLoad();
+        //首次皮重
+        BigDecimal tareWeight = truckNo.getTareWeight();
+        //任务量
+        BigDecimal loadVolume;
+        if (tareWeight != null) {
+            // 有皮重:任务量 = 核定载重 - 皮重
+            loadVolume = actualWeight.subtract(tareWeight);
+            log.info("车辆有皮重,皮重:{}, 任务量:{}", tareWeight, loadVolume);
+
+        } else {
+            // 无皮重:任务量 = 核定载重 × 80%
+            loadVolume = actualWeight.multiply(EIGHTY_PERCENT);
+            log.info("车辆无皮重,按80%核定载重计算,车辆任务量:{}", loadVolume);
+        }
+
+        if (orderSurplus.compareTo(loadVolume) < 0) {
+            // 规则2:订单余量 < 任务量 → 无法接单
+            return false;
+        }
+
+        return true;
     }
 
+
     /**
      * 装卸货地址
      * @param logOrderIdList
@@ -388,7 +451,7 @@ public class WaybillOrderService {
         orderResp.setStatus(Optional.ofNullable(order.getStatus()).map(String::valueOf).orElse(null));
         orderResp.setStatusDesc(LogisticsOrderV1Enum.IN_TRANSIT.getCode().equals(order.getStatus()) ? "待接单" : "未知状态");
         //设置余量
-        String orderSurplus = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList);
+        BigDecimal orderSurplus = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList);
         orderResp.setOrderSurplus(orderSurplus);
         return orderResp;
     }
@@ -741,7 +804,7 @@ public class WaybillOrderService {
         wbOrderResp.setChargeTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), logOrder.getBillingMode()));
         //设置余量
         KwtLogisticsOrder order = logOrderMap.getOrDefault(wbOrder.getLOrderId(), new KwtLogisticsOrder());
-        String supAmount = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList);
+        BigDecimal supAmount = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList);
         wbOrderResp.setOrderSurplus(supAmount);
         //托运企业
         KwtLogisticsOrderUnit consignEnt = logOrderIdAndUnitMap.getOrDefault(wbOrder.getLOrderId() + "-" + UnitTypeEnum.CONSIGN.getCode(), new KwtLogisticsOrderUnit());
@@ -818,7 +881,7 @@ public class WaybillOrderService {
 
     }
 
-    private static String getSupAmount(Long tradeOrderId,
+    private static BigDecimal getSupAmount(Long tradeOrderId,
                                        Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap,
                                        Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList,
                                        Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList) {
@@ -837,7 +900,6 @@ public class WaybillOrderService {
                         .map(KwtWaybillOrderSubtask::getEntrustAmount)
                         .filter(Objects::nonNull)
                         .reduce(BigDecimal.ZERO, BigDecimal::add);
-                //logTotatalAmount = logTotatalAmount.add(loadAmountSum);
                 if (org.apache.commons.lang3.StringUtils.equals(billingMode, DictEnum.CHARGING_TYPE_1.getValue())){
                     BigDecimal unloadAmountSum = waybillOrderSubtasks.stream()
                             .filter(x->!Objects.equals(x.getStatus(),CarWaybillV1Enum.CANCELLED.getCode()))
@@ -857,7 +919,7 @@ public class WaybillOrderService {
                 //logTotatalAmount = logTotatalAmount.add(unloadAmountSum);
             }
         }
-        return tradeAmount.subtract(logTotatalAmount).setScale(2, RoundingMode.HALF_UP).toPlainString();
+        return tradeAmount.subtract(logTotatalAmount).setScale(2, RoundingMode.HALF_UP);
     }
 
     /**