Jelajahi Sumber

运单新增模糊查询

donglang 1 bulan lalu
induk
melakukan
160e55070b

+ 3 - 8
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/CancelHandler.java

@@ -54,8 +54,8 @@ public class CancelHandler extends AbstractWaybillOrderHandler<WaybillOrderCance
         //2.更新上游订单:更新物流订单运输量
         KwtLogisticsOrder logOrder = updateLogOrder(param, entrustAmount);
 
-        //3.更新上游订单:更新贸易订单运输量
-        updateTradeOrder(logOrder, entrustAmount);
+//        //3.更新上游订单:更新贸易订单运输量
+//        updateTradeOrder(logOrder, entrustAmount);
     }
 
 
@@ -72,17 +72,12 @@ public class CancelHandler extends AbstractWaybillOrderHandler<WaybillOrderCance
             log.info("当前物流运单无关联物流订单数据:{}", param.getLogOrderId());
             throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_LOG_ORDER, "当前物流运单无关联物流订单数据!");
         }
-
         //取消接单的物流订单的总运输量不能为空
         if (logOrder.getEntrustAmount() == null || logOrder.getEntrustAmount().compareTo(BigDecimal.ZERO) <= 0) {
             throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_AMOUNT_ERROR, "已接单物订单的总运单量不能为空或0!");
         }
-        //总接单数
-        Integer totalTake = Optional.ofNullable(logOrder.getTotalTake())
-                .map(val -> Math.max(val - 1, 0))
-                .orElse(0);
+
         logOrder.setEntrustAmount(logOrder.getEntrustAmount().subtract(entrustAmount));
-        logOrder.setTotalTake(totalTake);
         logisticsOrderRepository.updateById(logOrder);
 
         log.info("更新上游物流订单运输量成功, 物流订单ID:{}", logOrder.getId());

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

@@ -94,7 +94,6 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
 
         // 第二条:称重信息
         KwtWaybillOrderNode node2 = getWaybillOrderNode(param, waybillOrder);
-        node2.setWeighUrl(param.getWeighUrl());
         node2.setRemark("[" + param.getWeighbridgeName() + "]称重[" + param.getTareAmount() + "吨]");
         waybillOrderNodeRepository.save(node2);
         log.info("记录【称重】节点轨迹成功,节点ID:{}", node2.getId());

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

@@ -470,6 +470,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
         ticket.setWAddressId(shipmentAddress.getId());
         ticket.setType(shipmentAddress.getAddressType());
         ticket.setUnit(logOrder.getUnit());
+        ticket.setAmount(BigDecimal.ZERO);
         ticket.setCreateBy(waybillOrder.getDriverId());
         waybillOrderTicketRepository.save(ticket);
     }

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

@@ -3,23 +3,23 @@ package com.sckw.transport.handler;
 
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
+import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.AddressTypeEnum;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.order.api.model.OrderDetailVo;
-import com.sckw.transport.model.KwtLogisticsOrder;
-import com.sckw.transport.model.KwtWaybillOrder;
-import com.sckw.transport.model.KwtWaybillOrderSubtask;
-import com.sckw.transport.model.KwtWaybillOrderTicket;
+import com.sckw.transport.model.*;
 import com.sckw.transport.model.param.WaybillOrderUnloadParam;
 import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * Author: donglang
@@ -69,7 +69,7 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
 
         //按照装货量计算:推送到已完成状态
         if (orderDetailVo.getChargeType() == 1) {
-            this.targetStatus = CarWaybillV1Enum.WAIT_UNLOADING.getCode();
+            this.targetStatus = Global.NUMERICAL_ONE;
             //1.计算净装货量
             BigDecimal loadAmount = getLoadAmount(param);
 
@@ -80,7 +80,10 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
             updateTradeOrder(logisticsOrder, loadAmount, subtask);
 
         } else if (orderDetailVo.getChargeType() == 2) {
-            this.targetStatus = CarWaybillV1Enum.COMPLETION_LOADING.getCode();
+            if (param.getUnloadAmount() == null || StringUtils.isBlank(param.getUnloadUrl())) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "卸货净重和卸货凭证不能为空!");
+            }
+            this.targetStatus = Global.NUMERICAL_ONE;
             //按照卸货量计算:推送到已卸货状态,更新子运单卸货净重
             KwtWaybillOrderSubtask subtask = getWaybillSubtask(waybill.getId());
             subtask.setUnloadAmount(param.getUnloadAmount());
@@ -158,12 +161,43 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
 
     @Override
     protected Integer getStatus() {
-        return Optional.ofNullable(this.targetStatus)
-                .orElse(CarWaybillV1Enum.COMPLETION_LOADING.getCode());
+        if (this.targetStatus == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.SYSTEM_ERROR, "[卸货]计算方式为空!");
+        }
+        return  Objects.equals(this.targetStatus, Global.NUMERICAL_ONE) ? CarWaybillV1Enum.WAIT_UNLOADING.getCode()
+                : CarWaybillV1Enum.COMPLETION_LOADING.getCode();
     }
 
     @Override
     protected String getRemark(WaybillOrderUnloadParam param, KwtWaybillOrder waybillOrder) {
-        return "司机[" + waybillOrder.getDriverName() + "]已上传卸货凭证";
+        return null;
+    }
+
+    /**
+     * 重写 createNodeTrace,生成两条轨迹记录
+     */
+    protected void createNodeTrace(WaybillOrderUnloadParam param, KwtWaybillOrder waybillOrder) {
+        if (this.targetStatus == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.SYSTEM_ERROR, "[卸货]计算方式为空!");
+        }
+        if (this.targetStatus == Global.NUMERICAL_ONE) {
+            // 第一条:卸货已完成
+            KwtWaybillOrderNode node1 = getWaybillOrderNode(param, waybillOrder);
+            node1.setRemark("司机[" + waybillOrder.getDriverName() + "]已卸货");
+            node1.setOrderStatus(CarWaybillV1Enum.COMPLETION_LOADING.getCode());
+            waybillOrderNodeRepository.save(node1);
+            log.info("记录【卸货】节点轨迹成功,节点ID:{}", node1.getId());
+
+            // 第二条:运单完成
+            KwtWaybillOrderNode node2 = getWaybillOrderNode(param, waybillOrder);
+            node2.setRemark("运单[" + waybillOrder.getId() + "]已完成");
+            waybillOrderNodeRepository.save(node2);
+            log.info("记录【完成】节点轨迹成功,节点ID:{}", node2.getId());
+        } else {
+            KwtWaybillOrderNode node = getWaybillOrderNode(param, waybillOrder);
+            node.setRemark("司机[" + waybillOrder.getDriverName() + "]已上传卸货凭证");
+            waybillOrderNodeRepository.save(node);
+            log.info("记录【卸货】节点轨迹成功,节点ID:{}", node.getId());
+        }
     }
 }

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

@@ -40,7 +40,10 @@ public class WaybillOrderQueryParam extends PageReq implements Serializable {
     @NotNull(message = "状态不能为空!")
     private Integer status;
 
-
+    /**
+     * 模糊查询字段
+     */
+    private String searchKeyword;
 
 
 }

+ 0 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderUnloadParam.java

@@ -32,14 +32,12 @@ public class WaybillOrderUnloadParam extends WaybillOrderProcessParam implements
      * 卸货净重
      */
     @Schema(description = "卸货净重")
-    @NotNull(message = "卸货净重不能为空!")
     private BigDecimal unloadAmount;
 
     /**
      * 卸货凭证
      */
     @Schema(description = "卸货凭证")
-    @NotBlank(message = "卸货凭证不能为空!")
     private String unloadUrl;
 
 

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

@@ -3426,7 +3426,7 @@ public class KwtWaybillOrderV1Service {
         waybillOrderDetailResp.setTareAmount(tareAmountTicket.getTareAmount());
         //毛重
         KwtWaybillOrderTicket grossAmountTicket = ticketMap.getOrDefault(subtask.getWOrderId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtWaybillOrderTicket());
-        waybillOrderDetailResp.setGrossAmount(grossAmountTicket.getTareAmount());
+        waybillOrderDetailResp.setGrossAmount(grossAmountTicket.getGrossAmount());
 
         waybillOrderDetailResp.setStatus(subtask.getStatus());
         waybillOrderDetailResp.setStatusDesc(CarWaybillV1Enum.geDesc(subtask.getStatus()));

+ 69 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -357,7 +357,7 @@ public class WaybillOrderService {
     }
 
     /**
-     * 查询司机关联车辆的物流
+     * 查询司机关联车辆的物流
      * @param param
      * @return
      */
@@ -383,6 +383,22 @@ public class WaybillOrderService {
             queryWrapper.in(KwtWaybillOrder::getStatus, COMPLETED);
         }
 
+        //模糊查询
+        String searchKeyword = param.getSearchKeyword();
+        if (StringUtils.isNotBlank(searchKeyword)) {
+            // 1. 先查询匹配的物流订单ID
+            Set<Long> matchedOrderIds = findMatchedLogisticsOrderIds(searchKeyword);
+
+            if (CollectionUtils.isEmpty(matchedOrderIds)) {
+                // 如果没有匹配的,直接返回空分页
+                return PageDataResult.empty(param.getPageNum(), param.getPageSize());
+            }
+
+            // 2. 在主查询中使用IN条件
+            queryWrapper.in(KwtWaybillOrder::getLOrderId, matchedOrderIds);
+        }
+
+
         //当前车辆的运单
         Page<KwtWaybillOrder> waybillOrderList = waybillOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
         List<KwtWaybillOrder> records = waybillOrderList.getRecords();
@@ -469,6 +485,58 @@ public class WaybillOrderService {
 
     }
 
+    /**
+     * 查询匹配的物流订单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;
+    }
+
 
     /**
      * 组装运单列表信息