Преглед изворни кода

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

donglang пре 2 месеци
родитељ
комит
142b5545ed

+ 37 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarStatusEnum.java

@@ -0,0 +1,37 @@
+package com.sckw.core.model.enums;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @desc 车辆运单状态枚举
+ * @date 2023-07-14 14:07:23
+ */
+@Getter
+@RequiredArgsConstructor
+public enum CarStatusEnum {
+
+    //正常
+    NORMAL(0, "正常"),
+    //锁定
+    NOT_NORMAL(1, "锁定");
+
+
+    private final int code;
+
+    private final String name;
+
+    public static String getName(int code) {
+        for (CarStatusEnum carStatusEnum : CarStatusEnum.values()) {
+            if (carStatusEnum.getCode() == code) {
+                return carStatusEnum.getName();
+            }
+        }
+        return null;
+    }
+}

+ 2 - 0
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java

@@ -4,6 +4,7 @@ import com.sckw.fleet.api.model.vo.*;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author zk
@@ -105,4 +106,5 @@ public interface RemoteFleetService {
     List<TmsTruckAxleNumVO> getCarAxisInfo(List<Integer> axleNumIds);
 
 
+    List<RTruckVo> findTruckByTruckIds(Set<Long> truckIds);
 }

+ 8 - 0
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/model/vo/RTruckVo.java

@@ -66,4 +66,12 @@ public class RTruckVo implements Serializable {
      * 车队id
      */
     private String fleetId;
+    /**
+     * 轴数
+     */
+    private String carAxis;
+    /**
+     * 车辆状态
+     */
+    private Integer status;
 }

+ 13 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java

@@ -333,6 +333,8 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
         rTruckVo.setTotalWeight(truck.getTotalWeight());
         rTruckVo.setBusinessStatus(truck.getBusinessStatus());
         rTruckVo.setTruckType(StringUtils.isBlank(truck.getType()) ? "": String.valueOf(truck.getType()));
+        rTruckVo.setStatus(truck.getStatus());
+        rTruckVo.setCarAxis(truck.getCarAxis());
         return rTruckVo;
     }
 
@@ -386,6 +388,17 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
         return voList;
     }
 
+    @Override
+    public List<RTruckVo> findTruckByTruckIds(Set<Long> truckIds) {
+        List<KwfTruck> trucks = kwfTruckRepository.findTruckByTruckIds(truckIds);
+        if (CollectionUtils.isEmpty(trucks)){
+            return Collections.emptyList();
+        }
+        return trucks.stream()
+                .map(RemoteFleetServiceImpl::getTruckVo)
+                .collect(Collectors.toList());
+
+    }
 
 
 }

+ 7 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java

@@ -77,4 +77,11 @@ public class KwfTruckRepository extends ServiceImpl<KwfTruckMapper, KwfTruck> {
                 .ge(StringUtils.isNotBlank(startTime),KwfTruck::getCreateTime, startTime)
                 .le(StringUtils.isNotBlank(endTime),KwfTruck::getCreateTime, endTime));
     }
+
+    public List<KwfTruck> findTruckByTruckIds(Set<Long> truckIds) {
+
+        return list(Wrappers.<KwfTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .in(KwfTruck::getId, truckIds));
+    }
 }

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

@@ -13,6 +13,7 @@ import com.sckw.transport.model.param.AddLogisticsOrderParam;
 import com.sckw.transport.model.param.LogisticsOrderResp;
 import com.sckw.transport.model.param.QueryLogisticsOrderReq;
 import com.sckw.transport.model.vo.LogisticsOrderDetailResp;
+import com.sckw.transport.model.vo.LogisticsOrderDispatchResp;
 import com.sckw.transport.model.vo.LogisticsOrderReq;
 import com.sckw.transport.service.KwtLogisticsConsignmentService;
 import com.sckw.transport.service.KwtTransportCommonService;
@@ -23,6 +24,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @author lfdc
  * @desc 物流订单Controller-v4.2
@@ -135,5 +138,12 @@ public class KwtLogisticsOrderController {
     public BaseResult<LogisticsOrderDetailResp> getLogisticsOrderDetail(@RequestBody @Valid LogisticsOrderReq req) {
         return BaseResult.success(logisticsConsignmentService.getLogisticsOrderDetail(req));
     }
+    /**
+     * 根据物流订单查询已派运力
+     */
+    @PostMapping(value = "/getLogisticsOrderDispatch")
+    public BaseResult<PageDataResult<LogisticsOrderDispatchResp>> getLogisticsOrderDispatch(@RequestBody @Valid LogisticsOrderReq req) {
+        return BaseResult.success(logisticsConsignmentService.getLogisticsOrderDispatch(req));
+    }
 
 }

+ 71 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsOrderDispatchResp.java

@@ -0,0 +1,71 @@
+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;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 已派运力结果查询
+ * @create :2025-11-11 16:35:00
+ */
+@Data
+public class LogisticsOrderDispatchResp implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -6650929422788544278L;
+    /**
+     *  运单id
+     */
+    @Schema(description = "运单id")
+    private String wayBillId;
+    /**
+     *  车牌号
+     */
+    @Schema(description = "车牌号")
+    private String truckNo;
+    /**
+     *  车辆轴数
+     */
+    @Schema(description = "车辆轴数")
+    private String carAxis;
+    /**
+     *  完成车次
+     */
+    @Schema(description = "完成车次")
+    private String finishWaybillCount;
+
+    /**
+     *  累计装货量
+     */
+    @Schema(description = "累计装货量")
+    private String loadAmount;
+    /**
+     *  累计卸货量
+     */
+    @Schema(description = "累计卸货量")
+    private String unloadAmount;
+    /**
+     *  最新状态
+     */
+    @Schema(description = "最新状态")
+    private String status;
+    /**
+     * 状态描述
+     */
+    @Schema(description = "状态描述")
+    private String statusDesc;
+    /**
+     *  关闭接单
+     */
+    @Schema(description = "关闭接单")
+    private String closeOrder;
+    /**
+     * 关闭接单描述
+     */
+    @Schema
+    @Schema(description = "关闭接单描述")
+    private String closeOrderDesc;
+}

+ 4 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsOrderReq.java

@@ -1,8 +1,10 @@
 package com.sckw.transport.model.vo;
 
+import com.sckw.core.web.request.PageReq;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -13,8 +15,9 @@ import java.io.Serializable;
  * @description : 物流订单分页查询请求参数
  * @create :2025-11-11 14:33:00
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
-public class LogisticsOrderReq implements Serializable {
+public class LogisticsOrderReq extends PageReq implements Serializable {
     @Serial
     private static final long serialVersionUID = 1501220305275964969L;
     /**

+ 11 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -1,6 +1,7 @@
 package com.sckw.transport.repository;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,6 +15,7 @@ import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * @Author: 马超伟
@@ -100,4 +102,13 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                 .eq(Objects.nonNull(entId),KwtWaybillOrder::getEntId,entId)
                 .orderByDesc(KwtWaybillOrder::getId));
     }
+
+    public IPage<KwtWaybillOrder> queryPageByBillOrderIds(Set<Long> billOrderIds, int pageNum, int pageSize) {
+        return page(new Page<>(pageNum, pageSize),
+                Wrappers.<KwtWaybillOrder>lambdaQuery()
+                        .eq(KwtWaybillOrder::getDelFlag,0)
+                        .in(KwtWaybillOrder::getId, billOrderIds)
+                        .orderByDesc(KwtWaybillOrder::getCreateTime)
+                        .orderByDesc(KwtWaybillOrder::getId));
+    }
 }

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java

@@ -1,10 +1,13 @@
 package com.sckw.transport.repository;
 
+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.base.BaseModel;
 import com.sckw.transport.dao.KwtWaybillOrderSubtaskMapper;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
+import jakarta.validation.constraints.NotBlank;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -53,4 +56,11 @@ public class KwtWaybillOrderSubtaskRepository extends ServiceImpl<KwtWaybillOrde
                 .eq(BaseModel::getDelFlag,0)
                 .eq(KwtWaybillOrderSubtask::getLOrderId,logOrderId));
     }
+
+    public IPage<KwtWaybillOrderSubtask> queryByPage(@NotBlank(message = "物流订单id不能为空") String logisticsOrderId, int pageNum, int pageSize) {
+        return page(new Page<>(pageNum, pageSize),
+                Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
+                        .eq(BaseModel::getDelFlag,0)
+                        .eq(KwtWaybillOrderSubtask::getLOrderId,logisticsOrderId));
+    }
 }

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

@@ -2,8 +2,10 @@ package com.sckw.transport.service;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ArrayUtil;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.shaded.io.grpc.StatusException;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -161,6 +163,7 @@ public class KwtLogisticsConsignmentService {
     private final KwtLogisticsOrderAddressRepository logisticsOrderAddressRepository;
     private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
     private final KwtWaybillOrderSubtaskRepository logisticsOrderSubtaskRepository;
+    private final KwtWaybillOrderRepository waybillOrderRepository;
     /**
      * 采购订单-物流托运生成托运订单
      *
@@ -2550,4 +2553,70 @@ public class KwtLogisticsConsignmentService {
         }
         logisticsOrderDetailResp.setContractInfoVO(contractInfoVO);
     }
+
+    public PageDataResult<LogisticsOrderDispatchResp> getLogisticsOrderDispatch(@Valid LogisticsOrderReq req) {
+        KwtLogisticsOrder kwtLogisticsOrder = logisticsOrderRepository.queryByLogisticsOrderId(Long.parseLong(req.getLogisticsOrderId()));
+        if (Objects.nonNull(kwtLogisticsOrder)) {
+            throw new BusinessException("物流订单不存在");
+        }
+        //通过物流订单号查询运单
+
+        List<KwtWaybillOrderSubtask> waybillOrderSubtasks = logisticsOrderSubtaskRepository.queryByLogId(kwtLogisticsOrder.getId());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(waybillOrderSubtasks)) {
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
+        //物流订单id列表
+        Set<Long> billOrderIds =
+                waybillOrderSubtasks.stream().map(KwtWaybillOrderSubtask::getWOrderId).collect(Collectors.toSet());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(billOrderIds)) {
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
+        //根据运单id查询物流运单
+        IPage<KwtWaybillOrder> page = waybillOrderRepository.queryPageByBillOrderIds(billOrderIds, req.getPageNum(), req.getPageSize());
+
+        List<KwtWaybillOrder> records = page.getRecords();
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(records)) {
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
+        //获取车辆id
+        Set<Long> truckIds = records.stream()
+                .map(KwtWaybillOrder::getTruckId)
+                .collect(Collectors.toSet());
+        Map<Long, RTruckVo> truckIdAndTruckMap = Maps.newHashMap();
+        List<RTruckVo> truckByTruckIds = Lists.newArrayList() ;
+        //查询车辆信息
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(truckIds)) {
+            truckByTruckIds = remoteFleetService.findTruckByTruckIds(truckIds);
+        }
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(truckByTruckIds)){
+            truckIdAndTruckMap =
+                    truckByTruckIds.stream()
+                            .collect(Collectors.toMap(RTruckVo::getId, Function.identity(),(k1, k2)->k1));
+        }
+        //组装返回信息
+        Map<Long, RTruckVo> finalTruckIdAndTruckMap = truckIdAndTruckMap;
+        List<LogisticsOrderDispatchResp> resps = records.stream()
+                .map(record -> getLogisticsOrderDispatchResp(record, finalTruckIdAndTruckMap, kwtLogisticsOrder))
+                .collect(Collectors.toList());
+        return PageDataResult.of(page,resps);
+    }
+
+    @NotNull
+    private static LogisticsOrderDispatchResp getLogisticsOrderDispatchResp(KwtWaybillOrder record, Map<Long, RTruckVo> finalTruckIdAndTruckMap, KwtLogisticsOrder kwtLogisticsOrder) {
+        LogisticsOrderDispatchResp logisticsOrderDispatchResp = new LogisticsOrderDispatchResp();
+        logisticsOrderDispatchResp.setWayBillId(String.valueOf(record.getId()));
+        RTruckVo truckVo = finalTruckIdAndTruckMap.getOrDefault(record.getTruckId(), new RTruckVo());
+        logisticsOrderDispatchResp.setTruckNo(truckVo.getTruckNo());
+        logisticsOrderDispatchResp.setCarAxis(truckVo.getCarAxis());
+        logisticsOrderDispatchResp.setFinishWaybillCount(String.valueOf(kwtLogisticsOrder.getTotalTake()));
+        logisticsOrderDispatchResp.setLoadAmount(Objects.nonNull(record.getLoadAmount()) ?
+                record.getLoadAmount().setScale(2,RoundingMode.HALF_UP).toPlainString() : "0.00");
+        logisticsOrderDispatchResp.setUnloadAmount(Objects.nonNull(record.getUnloadAmount())? record.getUnloadAmount().setScale(2,RoundingMode.HALF_UP).toPlainString() : "0.00");
+        logisticsOrderDispatchResp.setStatus(String.valueOf(record.getStatus()));
+        logisticsOrderDispatchResp.setStatusDesc(CarWaybillEnum.getName(record.getStatus()));
+
+        logisticsOrderDispatchResp.setCloseOrder(String.valueOf(truckVo.getStatus()));
+        logisticsOrderDispatchResp.setCloseOrderDesc(CarStatusEnum.getName(truckVo.getStatus()));
+        return logisticsOrderDispatchResp;
+    }
 }