Sfoglia il codice sorgente

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

# Conflicts:
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderResp.java
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
donglang 1 mese fa
parent
commit
95c6b0f169
36 ha cambiato i file con 1109 aggiunte e 177 eliminazioni
  1. 70 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillV1Enum.java
  2. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java
  3. 62 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderV1Enum.java
  4. 9 4
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java
  5. 5 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractLogisticsOrderResDto.java
  6. 32 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractTradeOrderDto.java
  7. 156 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractTradeOrderInfo.java
  8. 32 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/LogisticsOrderDto.java
  9. 157 10
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java
  10. 0 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogisticsUnit.java
  11. 7 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsGoodsRepository.java
  12. 14 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsUnitRepository.java
  13. 7 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeGoodsRepository.java
  14. 7 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeUnitRepository.java
  15. 3 5
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java
  16. 1 113
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java
  17. 2 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java
  18. 4 4
      sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsEnterpriseRepository.java
  19. 0 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  20. 17 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsOrderController.java
  21. 19 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  22. 3 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  23. 1 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderUnit.java
  24. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderResp.java
  25. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DeleteCapacityReq.java
  26. 57 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DispatchCarReq.java
  27. 22 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DispatchCarResp.java
  28. 26 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishReq.java
  29. 32 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/ReviewWaybillOrderReq.java
  30. 90 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderDetailResp.java
  31. 11 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java
  32. 4 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java
  33. 8 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java
  34. 7 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java
  35. 128 23
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  36. 103 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

+ 70 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillV1Enum.java

@@ -0,0 +1,70 @@
+package com.sckw.core.model.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @desc 车辆运单状态枚举
+ * @date 2023-07-14 14:07:23
+ */
+@Getter
+@AllArgsConstructor
+public enum CarWaybillV1Enum {
+
+    /**
+     * 已接单
+     */
+    PENDING_VEHICLE(1,  "已接单"),
+    /**
+     * 到达装货点
+     */
+    REFUSE_TRAFFIC(5, "到达装货点"),
+    /**
+     * 已装货
+     */
+    EXIT_COMPLETED(10,  "已装货"),
+    /**
+     * 已离场
+     */
+    WAIT_LOADING(15,  "已离场"),
+    /**
+     * 已卸货
+     */
+    COMPLETION_LOADING(20,  "已卸货"),
+    /**
+     * 已完成
+     */
+    WAIT_UNLOADING(25,  "已完成"),
+    /**
+     * 审核驳回
+     */
+    COMPLETION_UNLOADING(30,  "审核驳回"),
+    /**
+     * 已作废
+     */
+    APPROVAL_TREAT(99, "已作废"),
+
+    ;
+
+    private final Integer code;
+
+    private final String destination;
+
+
+    public static String geDesc(Integer status) {
+        for (CarWaybillV1Enum carWaybillV1Enum : EnumSet.allOf(CarWaybillV1Enum.class)) {
+            if (carWaybillV1Enum.code.equals(status)) {
+                return carWaybillV1Enum.destination;
+            }
+        }
+        return null;
+    }
+
+}

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java

@@ -51,6 +51,7 @@ public enum LogisticsOrderEnum {
     REJECT_ORDER(8, "rejectOrder", "8", "已拒单"),
     REJECT_ORDER(8, "rejectOrder", "8", "已拒单"),
 
 
     CANCEL_ORDER(9, "cancelOrder", "9", "已撤销"),
     CANCEL_ORDER(9, "cancelOrder", "9", "已撤销"),
+    NEARING_COMPLETION(10, "nearingCompletion", "9", "完结中"),
     ;
     ;
 
 
     private final Integer code;
     private final Integer code;

+ 62 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderV1Enum.java

@@ -0,0 +1,62 @@
+package com.sckw.core.model.enums;
+
+import com.sckw.core.model.constant.NumberConstant;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 物流订单-单据状态
+ * @date 2023-07-07 14:07:23
+ */
+@Getter
+@AllArgsConstructor
+public enum LogisticsOrderV1Enum {
+
+    /**
+     * 物流订单-待接单
+     */
+    PENDING_ORDER(1, "pendingOrder", "1", "待处理"),
+    /**
+     * 物流订单-待派车
+     */
+    WAIT_DELIVERY(5, "waitDelivery", "5", "待派车"),
+    /**
+     * 物流订单-运输中
+     */
+    IN_TRANSIT(10, "inTransit", "10", "运输中"),
+    /**
+     * 物流订单-已完成
+     */
+    HAVE_FINISHED(15, "haveFinished", "15", "完结中"),
+    /**
+     * 物流订单-已对账
+     */
+    HAVE_RECONCILED(20, "haveReconciled", "20", "已完成"),
+
+    REJECT_ORDER(99, "rejectOrder", "99", "已拒单"),
+
+    ;
+
+    private final Integer code;
+    private final String value;
+    private final String status;
+    private final String destination;
+
+
+    public static String getDesc(int code) {
+        for (LogisticsOrderV1Enum logisticsOrderV1Enum : EnumSet.allOf(LogisticsOrderV1Enum.class)) {
+            if (logisticsOrderV1Enum.code.equals(code)) {
+                return logisticsOrderV1Enum.destination;
+            }
+        }
+        return StringUtils.EMPTY;
+
+    }
+}

+ 9 - 4
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java

@@ -1,8 +1,6 @@
 package com.sckw.contract.api;
 package com.sckw.contract.api;
 
 
-import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
-import com.sckw.contract.api.model.dto.res.ContractLogisticsAndTradeOrderResDto;
-import com.sckw.contract.api.model.dto.res.ContractLogisticsOrderResDto;
+import com.sckw.contract.api.model.dto.res.*;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
@@ -59,5 +57,12 @@ public interface RemoteContractService {
      */
      */
     ContractLogisticsAndTradeOrderResDto queryContractByContractId(Long tradeOrderContractId,Long tradeId);
     ContractLogisticsAndTradeOrderResDto queryContractByContractId(Long tradeOrderContractId,Long tradeId);
 
 
-
+    /**
+     * 查询物流合同信息
+     */
+    List<ContractLogisticsOrderResDto> queryContractLogisticsOrder(LogisticsOrderDto logisticsOrderDto);
+    /**
+     * 查询贸易合同信息
+     */
+    List<ContractTradeOrderInfo> queryContractTradeOrder(ContractTradeOrderDto contractTradeOrderDto);
 }
 }

+ 5 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractLogisticsOrderResDto.java

@@ -4,6 +4,7 @@ import lombok.Data;
 
 
 import java.io.Serial;
 import java.io.Serial;
 import java.io.Serializable;
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 
 /**
 /**
  * @author czh
  * @author czh
@@ -70,5 +71,9 @@ public class ContractLogisticsOrderResDto implements Serializable {
      * 承运企业名称
      * 承运企业名称
      */
      */
     private String acceptCarriageEntName;
     private String acceptCarriageEntName;
+    /**
+     * 价格
+     */
+    private BigDecimal price;
 
 
 }
 }

+ 32 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractTradeOrderDto.java

@@ -0,0 +1,32 @@
+package com.sckw.contract.api.model.dto.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-14 15:57:00
+ */
+@Data
+public class ContractTradeOrderDto implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1154651392583058057L;
+    /**
+     * 商品id
+     */
+    private Long goodsId;
+
+    /**
+     * 托运方企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业类型(1-供应 2-采购)
+     */
+    private Integer entType;
+}

+ 156 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractTradeOrderInfo.java

@@ -0,0 +1,156 @@
+package com.sckw.contract.api.model.dto.res;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-14 15:57:00
+ */
+@Data
+public class ContractTradeOrderInfo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1154651392583058057L;
+    private Long id;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 合同编号
+     */
+    private String contractNo;
+
+    /**
+     * 合同名称
+     */
+    private String name;
+
+    /**
+     * 签约方式(1线上签约、2线下签约)
+     */
+    private Integer signingWay;
+
+    /**
+     * 交易方式(1预付款、2货到付款)
+     */
+    private Integer trading;
+
+    /**
+     * 开始日期
+     */
+    private Date startTime;
+
+    /**
+     * 结束日期
+     */
+
+    private Date endTime;
+
+    /**
+     * 数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 履行量
+     */
+    private BigDecimal performedAmount;
+
+    /**
+     * 签署文件
+     */
+    private String signingUrl;
+
+    /**
+     * 已签署文件
+     */
+    private String signedUrl;
+
+    /**
+     * 签约编号
+     */
+    private String signingNo;
+
+    /**
+     * 合同关联id
+     */
+    private Long contractPid;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 签约状态(签约中、已签约、已完结(结算时间已完成)、已解约、签约失败)
+     */
+    private Integer status;
+
+    /**
+     *
+     */
+    private Long createBy;
+
+    /**
+     *
+     */
+    private Date createTime;
+
+    /**
+     *
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 是否删除(0未删除,1删除)
+     */
+    private Integer delFlag;
+
+    /**
+     * 业务id
+     */
+    private String businessId;
+
+    /**
+     * 结算方式
+     */
+
+    private Integer settlement;
+
+    /**
+     * 托运方式
+     */
+
+    private Integer consignment;
+    /**
+     * 卸货方式
+     */
+
+    private Integer unloadWay;
+    /**
+     * 销售人员id
+     */
+
+    private Long salesmanId;
+    /**
+     * 销售联系电话
+     */
+
+    private String salesmanPhone;
+}

+ 32 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/LogisticsOrderDto.java

@@ -0,0 +1,32 @@
+package com.sckw.contract.api.model.dto.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 物流合同请求参数
+ * @create :2025-11-14 15:56:00
+ */
+@Data
+public class LogisticsOrderDto implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -2666407909388440211L;
+    /**
+     * 商品id
+     */
+    private Long goodsId;
+
+    /**
+     * 托运方企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业类型(3-托运 4-承运)
+     */
+    private Integer entType;
+}

+ 157 - 10
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java

@@ -1,22 +1,17 @@
 package com.sckw.contract.dubbo;
 package com.sckw.contract.dubbo;
 
 
-import com.google.common.collect.Lists;
+import com.alibaba.fastjson.JSON;
 import com.google.common.collect.Sets;
 import com.google.common.collect.Sets;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.RemoteContractService;
-import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
-import com.sckw.contract.api.model.dto.res.ContractLogisticsAndTradeOrderResDto;
-import com.sckw.contract.api.model.dto.res.ContractLogisticsOrderResDto;
-import com.sckw.contract.api.model.dto.res.EntInfo;
+import com.sckw.contract.api.model.dto.res.*;
 import com.sckw.contract.dao.KwcContractLogisticsMapper;
 import com.sckw.contract.dao.KwcContractLogisticsMapper;
 import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
 import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.model.dto.res.QueryContractValidCountResDto;
 import com.sckw.contract.model.dto.res.QueryContractValidCountResDto;
-import com.sckw.contract.model.entity.KwcContractLogistics;
-import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
-import com.sckw.contract.model.entity.KwcContractTrade;
-import com.sckw.contract.repository.KwcContractLogisticsRepository;
-import com.sckw.contract.repository.KwcContractTradeRepository;
+import com.sckw.contract.model.entity.*;
+import com.sckw.contract.repository.*;
 import com.sckw.contract.service.KwcContractLogisticsUnitService;
 import com.sckw.contract.service.KwcContractLogisticsUnitService;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ContractStatusEnum;
 import com.sckw.core.model.enums.ContractStatusEnum;
 import com.sckw.core.model.enums.CooperateTypeEnum;
 import com.sckw.core.model.enums.CooperateTypeEnum;
@@ -26,12 +21,15 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.vo.LogisticContractVo;
 import com.sckw.transport.api.model.vo.LogisticContractVo;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -41,6 +39,7 @@ import java.util.stream.Collectors;
  */
  */
 @DubboService(group = "design", version = "1.0.0")
 @DubboService(group = "design", version = "1.0.0")
 @RequiredArgsConstructor
 @RequiredArgsConstructor
+@Slf4j
 public class RemoteContractServiceImpl implements RemoteContractService {
 public class RemoteContractServiceImpl implements RemoteContractService {
 
 
     @Autowired
     @Autowired
@@ -62,6 +61,10 @@ public class RemoteContractServiceImpl implements RemoteContractService {
 
 
     private final KwcContractTradeRepository kwcContractTradeRepository ;
     private final KwcContractTradeRepository kwcContractTradeRepository ;
     private final KwcContractLogisticsRepository contractLogisticsRepository;
     private final KwcContractLogisticsRepository contractLogisticsRepository;
+    private final KwcContractTradeUnitRepository kwcContractTradeUnitRepository;
+    private final KwcContractTradeGoodsRepository kwcContractTradeGoodsRepository;
+    private final KwcContractLogisticsUnitRepository kwcContractLogisticsUnitRepository;
+    private final KwcContractLogisticsGoodsRepository kwcContractLogisticsGoodsRepository;
 
 
     @Override
     @Override
     public Map<Long, ContractCommonInfoResDto> queryContractBaseInfo(List<Long> contractIds) {
     public Map<Long, ContractCommonInfoResDto> queryContractBaseInfo(List<Long> contractIds) {
@@ -240,6 +243,150 @@ public class RemoteContractServiceImpl implements RemoteContractService {
         return contractLogisticsAndTradeOrderResDto;
         return contractLogisticsAndTradeOrderResDto;
     }
     }
 
 
+    @Override
+    public List<ContractLogisticsOrderResDto> queryContractLogisticsOrder(LogisticsOrderDto logisticsOrderDto) {
+        log.info("查询物流合同请求:{}",JSON.toJSONString( logisticsOrderDto));
+
+        if (Objects.isNull(logisticsOrderDto.getGoodsId())) {
+            throw new BusinessException("商品id不能为空!");
+        }
+        if (Objects.isNull(logisticsOrderDto.getEntId())) {
+            throw new BusinessException("托运方企业id不能为空!");
+        }
+        //查询物流公司
+        List<KwcContractLogisticsUnit> contractLogistics =
+                kwcContractLogisticsUnitRepository.queryByEntId(logisticsOrderDto.getEntId());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(contractLogistics)){
+            return Collections.emptyList();
+        }
+        //物流订单和类型组成唯一key
+        Map<String, KwcContractLogisticsUnit> contractLogisticsMap =
+                contractLogistics.stream()
+                .collect(Collectors.toMap(c -> c.getContractId() + "_" + c.getUnitType(),
+                        Function.identity(), (x, y) -> x));
+        //物流订单合id
+        Set<Long> logTradeContractIds =
+                contractLogistics.stream().map(KwcContractLogisticsUnit::getContractId).collect(Collectors.toSet());
+
+        //查询商品信息
+       List<KwcContractLogisticsGoods> kwcContractLogisticsGoods = kwcContractLogisticsGoodsRepository.queryByLogIdsAndGoodsId(logTradeContractIds,
+                logisticsOrderDto.getGoodsId());
+       if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractLogisticsGoods)){
+           return Collections.emptyList();
+       }
+       //合同id和商品映射
+        Map<Long, KwcContractLogisticsGoods> contractLogisticsGoodsMap =
+                kwcContractLogisticsGoods.stream().collect(Collectors.toMap(KwcContractLogisticsGoods::getContractId,
+                Function.identity(), (x, y) -> x));
+        Set<Long> logTradeContractIdList =
+                kwcContractLogisticsGoods.stream().map(KwcContractLogisticsGoods::getContractId).collect(Collectors.toSet());
+       //查询物流订单
+        List<KwcContractLogistics> logistics = contractLogisticsRepository.queryByLogisticContractIds(logTradeContractIdList);
+        if (CollectionUtils.isEmpty( logistics)){
+            return Collections.emptyList();
+        }
+       return logistics.stream()
+                .map(log -> getContractLogisticsOrderResDto(log, contractLogisticsMap, contractLogisticsGoodsMap))
+               .collect(Collectors.toList());
+
+    }
+
+    @NotNull
+    private static ContractLogisticsOrderResDto getContractLogisticsOrderResDto(KwcContractLogistics log, Map<String, KwcContractLogisticsUnit> contractLogisticsMap, Map<Long, KwcContractLogisticsGoods> contractLogisticsGoodsMap) {
+        ContractLogisticsOrderResDto contractLogisticsOrderResDto = new ContractLogisticsOrderResDto();
+        contractLogisticsOrderResDto.setId(log.getId());
+        contractLogisticsOrderResDto.setContactName(log.getName());
+        contractLogisticsOrderResDto.setContractNo(log.getContractNo());
+        contractLogisticsOrderResDto.setSigningWay(log.getSigningWay());
+        contractLogisticsOrderResDto.setStatus(log.getStatus());
+        KwcContractLogisticsUnit consignEnt = contractLogisticsMap.getOrDefault(log.getId() + "_" + CooperateTypeEnum.CONSIGN.getCode(),
+                new KwcContractLogisticsUnit());
+        KwcContractLogisticsUnit acceptCarriageEnt = contractLogisticsMap.getOrDefault(log.getId() + "_" + CooperateTypeEnum.CARRIAGE.getCode(),
+                new KwcContractLogisticsUnit());
+        contractLogisticsOrderResDto.setConsignEntId(consignEnt.getContractId());
+        contractLogisticsOrderResDto.setConsignEntName(consignEnt.getFirmName());
+        contractLogisticsOrderResDto.setAcceptCarriageEntId(acceptCarriageEnt.getContractId());
+        contractLogisticsOrderResDto.setAcceptCarriageEntName(acceptCarriageEnt.getFirmName());
+        KwcContractLogisticsGoods goods = contractLogisticsGoodsMap.getOrDefault(log.getId(),
+                new KwcContractLogisticsGoods());
+        contractLogisticsOrderResDto.setPrice(goods.getPrice());
+        return contractLogisticsOrderResDto;
+    }
+
+    @Override
+    public List<ContractTradeOrderInfo> queryContractTradeOrder(ContractTradeOrderDto contractTradeOrderDto) {
+        log.info("查询贸易合同订单,请求:{}", JSON.toJSONString(contractTradeOrderDto));
+        checkParam(contractTradeOrderDto.getGoodsId(), contractTradeOrderDto.getEntId(), contractTradeOrderDto.getEntType());
+        //查询贸易合同企业信息
+        List<KwcContractTradeUnit> tradeUnits = kwcContractTradeUnitRepository.queryByEntIdAndUnitType(contractTradeOrderDto.getEntId(),
+                contractTradeOrderDto.getEntType());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeUnits)){
+            return Collections.emptyList();
+        }
+        Set<Long> contractIds =
+                tradeUnits.stream().map(KwcContractTradeUnit::getContractId).collect(Collectors.toSet());
+        //查询商品信息
+        List<KwcContractTradeGoods> kwcContractGoods = kwcContractTradeGoodsRepository.queryByContractIdsAndGoodsId(contractIds,
+                contractTradeOrderDto.getGoodsId());
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractGoods)){
+            return Collections.emptyList();
+        }
+        Set<Long> contractIdList = kwcContractGoods.stream()
+                        .map(KwcContractTradeGoods::getContractId)
+                        .collect(Collectors.toSet());
+        //查询贸易合同
+        List<KwcContractTrade> kwcContractTrades = kwcContractTradeRepository.queryByContractIds(contractIdList);
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwcContractTrades)){
+            return Collections.emptyList();
+        }
+       return kwcContractTrades.stream().map(RemoteContractServiceImpl::getContractTradeOrderInfo)
+               .collect(Collectors.toList());
+    }
+
+    private static void checkParam(Long contractTradeOrderDto, Long contractTradeOrderDto1, Integer contractTradeOrderDto2) {
+        if (Objects.isNull(contractTradeOrderDto)) {
+            throw new BusinessException("商品id不能为空!");
+        }
+        if (Objects.isNull(contractTradeOrderDto1)) {
+            throw new BusinessException("托运方企业id不能为空!");
+        }
+        if (Objects.isNull(contractTradeOrderDto2)) {
+            throw new BusinessException("企业类型不能为空!");
+        }
+    }
+
+    @NotNull
+    private static ContractTradeOrderInfo getContractTradeOrderInfo(KwcContractTrade c) {
+        ContractTradeOrderInfo contractTradeOrderInfo = new ContractTradeOrderInfo();
+        contractTradeOrderInfo.setId(c.getId());
+        contractTradeOrderInfo.setEntId(c.getEntId());
+        contractTradeOrderInfo.setContractNo(c.getContractNo());
+        contractTradeOrderInfo.setName(c.getName());
+        contractTradeOrderInfo.setSigningWay(c.getSigningWay());
+        contractTradeOrderInfo.setTrading(c.getTrading());
+        contractTradeOrderInfo.setStartTime(c.getStartTime());
+        contractTradeOrderInfo.setEndTime(c.getEndTime());
+        contractTradeOrderInfo.setAmount(c.getAmount());
+        contractTradeOrderInfo.setPerformedAmount(c.getPerformedAmount());
+        contractTradeOrderInfo.setSigningUrl(c.getSigningUrl());
+        contractTradeOrderInfo.setSignedUrl(c.getSignedUrl());
+        contractTradeOrderInfo.setSigningNo(c.getSigningNo());
+        contractTradeOrderInfo.setContractPid(c.getContractPid());
+        contractTradeOrderInfo.setRemark(c.getRemark());
+        contractTradeOrderInfo.setStatus(c.getStatus());
+        contractTradeOrderInfo.setCreateBy(c.getCreateBy());
+        contractTradeOrderInfo.setCreateTime(c.getCreateTime());
+        contractTradeOrderInfo.setUpdateBy(c.getUpdateBy());
+        contractTradeOrderInfo.setUpdateTime(c.getUpdateTime());
+        contractTradeOrderInfo.setDelFlag(c.getDelFlag());
+        contractTradeOrderInfo.setBusinessId(c.getBusinessId());
+        contractTradeOrderInfo.setSettlement(c.getSettlement());
+        contractTradeOrderInfo.setConsignment(c.getConsignment());
+        contractTradeOrderInfo.setUnloadWay(c.getUnloadWay());
+        contractTradeOrderInfo.setSalesmanId(c.getSalesmanId());
+        contractTradeOrderInfo.setSalesmanPhone(c.getSalesmanPhone());
+        return contractTradeOrderInfo;
+    }
 
 
 
 
     private ContractCommonInfoResDto fillContractLogistics(KwcContractLogistics kwcContractLogistics) {
     private ContractCommonInfoResDto fillContractLogistics(KwcContractLogistics kwcContractLogistics) {

+ 0 - 2
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogisticsUnit.java

@@ -90,7 +90,5 @@ public class KwcContractLogisticsUnit implements Serializable {
      */
      */
     private Integer delFlag;
     private Integer delFlag;
 
 
-    @TableField(exist = false)
-    private String contractIdUnitTypeKey;
 
 
 }
 }

+ 7 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsGoodsRepository.java

@@ -40,4 +40,11 @@ public class KwcContractLogisticsGoodsRepository extends ServiceImpl<KwcContract
         remove(Wrappers.<KwcContractLogisticsGoods>lambdaQuery()
         remove(Wrappers.<KwcContractLogisticsGoods>lambdaQuery()
                 .eq(KwcContractLogisticsGoods::getContractId,contactId));
                 .eq(KwcContractLogisticsGoods::getContractId,contactId));
     }
     }
+
+    public List<KwcContractLogisticsGoods> queryByLogIdsAndGoodsId(Set<Long> logTradeContractIds, Long goodsId) {
+        return list(Wrappers.<KwcContractLogisticsGoods>lambdaQuery()
+                .eq(KwcContractLogisticsGoods::getDelFlag,0)
+                .eq(KwcContractLogisticsGoods::getGoodsId,goodsId)
+                .in(KwcContractLogisticsGoods::getContractId,logTradeContractIds));
+    }
 }
 }

+ 14 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsUnitRepository.java

@@ -3,6 +3,7 @@ package com.sckw.contract.repository;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
 import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
+import com.sckw.contract.model.entity.KwcContractLogistics;
 import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
 import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
 import com.sckw.contract.model.entity.KwcContractTradeUnit;
 import com.sckw.contract.model.entity.KwcContractTradeUnit;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
@@ -40,4 +41,17 @@ public class KwcContractLogisticsUnitRepository extends ServiceImpl<KwcContractL
         remove(Wrappers.<KwcContractLogisticsUnit>lambdaQuery()
         remove(Wrappers.<KwcContractLogisticsUnit>lambdaQuery()
                 .eq(KwcContractLogisticsUnit::getContractId, contactId));
                 .eq(KwcContractLogisticsUnit::getContractId, contactId));
     }
     }
+
+    public List<KwcContractLogisticsUnit> queryByEntIdAndEntType(Long entId, Integer entType) {
+        return list(Wrappers.<KwcContractLogisticsUnit>lambdaQuery()
+                .eq(KwcContractLogisticsUnit::getEntId, entId)
+                .eq(KwcContractLogisticsUnit::getUnitType, entType)
+                .eq(KwcContractLogisticsUnit::getDelFlag,0));
+    }
+
+    public List<KwcContractLogisticsUnit> queryByEntId(Long entId) {
+        return list(Wrappers.<KwcContractLogisticsUnit>lambdaQuery()
+                .eq(KwcContractLogisticsUnit::getEntId, entId)
+                .eq(KwcContractLogisticsUnit::getDelFlag,0));
+    }
 }
 }

+ 7 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeGoodsRepository.java

@@ -42,4 +42,11 @@ public class KwcContractTradeGoodsRepository extends ServiceImpl<KwcContractTrad
                 .eq(KwcContractTradeGoods::getDelFlag,0)
                 .eq(KwcContractTradeGoods::getDelFlag,0)
                 .eq(KwcContractTradeGoods::getContractId, contractId));
                 .eq(KwcContractTradeGoods::getContractId, contractId));
     }
     }
+
+    public List<KwcContractTradeGoods> queryByContractIdsAndGoodsId(Set<Long> contractIds, Long goodsId) {
+        return list(Wrappers.<KwcContractTradeGoods>lambdaQuery()
+                .eq(KwcContractTradeGoods::getDelFlag,0)
+                .in(KwcContractTradeGoods::getContractId, contractIds)
+                .eq(KwcContractTradeGoods::getGoodsId, goodsId));
+    }
 }
 }

+ 7 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeUnitRepository.java

@@ -35,4 +35,11 @@ public class KwcContractTradeUnitRepository extends ServiceImpl<KwcContractTrade
                 .eq(KwcContractTradeUnit::getDelFlag, 0)
                 .eq(KwcContractTradeUnit::getDelFlag, 0)
                 .in(KwcContractTradeUnit::getContractId, tradeContractIds));
                 .in(KwcContractTradeUnit::getContractId, tradeContractIds));
     }
     }
+
+    public List<KwcContractTradeUnit> queryByEntIdAndUnitType(Long entId, Integer unitType) {
+       return list(Wrappers.<KwcContractTradeUnit>lambdaQuery()
+                .eq(KwcContractTradeUnit::getEntId, entId)
+                .eq(KwcContractTradeUnit::getUnitType, unitType)
+                .eq(KwcContractTradeUnit::getDelFlag, 0));
+    }
 }
 }

+ 3 - 5
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java

@@ -1092,9 +1092,8 @@ public class KwcContractLogisticsService {
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)){
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)){
             //合同id和单位类型组合成key映射物流企业信息
             //合同id和单位类型组合成key映射物流企业信息
              contractUniTypeAndUnitMap = kwcContractLogisticsUnits.stream()
              contractUniTypeAndUnitMap = kwcContractLogisticsUnits.stream()
-                    .peek(k -> k.setContractIdUnitTypeKey(k.getContractId() + "-" + k.getUnitType()))
-                    .collect(Collectors.toMap(KwcContractLogisticsUnit::getContractIdUnitTypeKey, Function.identity(),
-                            (x, y) -> x));
+                    .collect(Collectors.toMap(k->k.getContractId() + "-" + k.getUnitType(),
+                            Function.identity(), (x, y) -> x));
         }
         }
 
 
         Map<Long, UserCacheResDto> finalLongUserCacheResDtoMap = longUserCacheResDtoMap;
         Map<Long, UserCacheResDto> finalLongUserCacheResDtoMap = longUserCacheResDtoMap;
@@ -1331,8 +1330,7 @@ public class KwcContractLogisticsService {
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)){
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)){
             //合同id和单位类型组合成key映射物流企业信息
             //合同id和单位类型组合成key映射物流企业信息
             contractUniTypeAndUnitMap = kwcContractLogisticsUnits.stream()
             contractUniTypeAndUnitMap = kwcContractLogisticsUnits.stream()
-                    .peek(k -> k.setContractIdUnitTypeKey(k.getContractId() + "-" + k.getUnitType()))
-                    .collect(Collectors.toMap(KwcContractLogisticsUnit::getContractIdUnitTypeKey, Function.identity(),
+                    .collect(Collectors.toMap(k->k.getContractId() + "-" + k.getUnitType(), Function.identity(),
                             (x, y) -> x));
                             (x, y) -> x));
         }
         }
 
 

+ 1 - 113
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -1377,33 +1377,6 @@ public class KwcContractTradeService {
             goodsIdAndGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
             goodsIdAndGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
 
 
         }
         }
-        //查询贸易订单
-        KwcContractTradeOrder kwcContractTradeOrder =
-                kwcContractTradeOrderRepository.queryByContractId(kwcContractTrade.getId());
-
-        //根据贸易订单号查询贸易订单信息
-        OrderDetailVo orderDetailVo = tradeOrderInfoService.queryByTradeOrderId(kwcContractTrade.getId());
-        //查询运单信息
-        List<RWaybillSubOrderVo> rWaybillSubOrderVos = transportRemoteService.queryWaybillOrderByTradeOrderIds(Set.of(kwcContractTrade.getId()));
-        Map<Long, RWaybillSubOrderVo> tradeOrderIdAndSubOrderVoMap = Maps.newHashMap();
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(rWaybillSubOrderVos)){
-           tradeOrderIdAndSubOrderVoMap =
-                    rWaybillSubOrderVos.stream().collect(Collectors.toMap(RWaybillSubOrderVo::getTradeId, Function.identity(), (k1, k2) -> k1));
-        }
-
-        //查询物流合同
-        List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitRepository.queryByContractId(kwcContractTrade.getId());
-        //合同id和单位类型组合成key映射物流对象
-        Map<String, KwcContractLogisticsUnit> contractIdUnitTypeKeyAndUnitMap = kwcContractLogisticsUnits.stream()
-                .peek(x -> x.setContractIdUnitTypeKey(x.getContractId() + "-" + x.getUnitType()))
-                .collect(Collectors.toMap(KwcContractLogisticsUnit::getContractIdUnitTypeKey, Function.identity(), (x, y) -> x));
-
-        //查询物流商品
-        List<KwcContractLogisticsGoods> kwcContractLogisticsGoods = kwcContractLogisticsGoodsRepository.queryByContractId(kwcContractTrade.getId());
-        //合同id和商品id组成唯一key映射物流信息
-        Map<String, KwcContractLogisticsGoods> contractIdGoodsIdKeyAndGoodsMap = kwcContractLogisticsGoods.stream()
-                .peek(x -> x.setContractIdGoodsIdKey(x.getContractId() + "-" + x.getGoodsId()))
-                .collect(Collectors.toMap(KwcContractLogisticsGoods::getContractIdGoodsIdKey, Function.identity(), (x, y) -> x));
 
 
         ContractDetailResp contractDetailResp = new ContractDetailResp();
         ContractDetailResp contractDetailResp = new ContractDetailResp();
         contractDetailResp.setId(kwcContractTrade.getId());
         contractDetailResp.setId(kwcContractTrade.getId());
@@ -1422,98 +1395,13 @@ public class KwcContractTradeService {
                     .collect(Collectors.toList());
                     .collect(Collectors.toList());
             contractDetailResp.setGoodsInfo(tradeGoodsInfos);
             contractDetailResp.setGoodsInfo(tradeGoodsInfos);
         }
         }
-//        //获取关联贸易订单
-//        ContractDetailResp.AssociatedOrder associatedOrder = getAssociateOrder(kwcContractTradeOrder,orderDetailVo,
-//                ctTypeKeyAndUnitMap,
-//                kwcContractTrade, contractIdUnitTypeKeyAndUnitMap, goodsIdAndGoodsMap,
-//                contractIdGoodsIdKeyAndGoodsMap,tradeOrderIdAndSubOrderVoMap);
-//        contractDetailResp.setAssociatedOrder(associatedOrder);
+
 
 
         contractDetailResp.setRemark(kwcContractTrade.getRemark());
         contractDetailResp.setRemark(kwcContractTrade.getRemark());
 
 
         return contractDetailResp;
         return contractDetailResp;
     }
     }
 
 
-//    private static ContractDetailResp.AssociatedOrder getAssociateOrder(KwcContractTradeOrder kwcContractTradeOrder,OrderDetailVo orderDetailVo, Map<String,
-//            KwcContractTradeUnit> ctTypeKeyAndUnitMap, KwcContractTrade kwcContractTrade, Map<String, KwcContractLogisticsUnit> contractIdUnitTypeKeyAndUnitMap,
-//                                                                        Map<Long, KwpGoods> goodsIdAndGoodsMap, Map<String, KwcContractLogisticsGoods> contractIdGoodsIdKeyAndGoodsMap
-//    ,Map<Long, RWaybillSubOrderVo> tradeOrderIdAndSubOrderVoMap) {
-//        ContractDetailResp.AssociatedOrder associatedOrder = new ContractDetailResp.AssociatedOrder();
-//        if (Objects.nonNull(kwcContractTradeOrder)){
-//            associatedOrder.setOrderId(kwcContractTradeOrder.getOrderId());
-//            associatedOrder.setOrderStatus(kwcContractTradeOrder.getStatus());
-//            associatedOrder.setOrderCode(kwcContractTradeOrder.getOrderNo());
-//            KwcContractTradeUnit purchaseUnit =
-//                    ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.PURCHASER.getCode(), new KwcContractTradeUnit());
-//
-//
-//            KwcContractTradeUnit provideUnit =
-//                    ctTypeKeyAndUnitMap.getOrDefault(kwcContractTrade.getId() + "-" + CooperateTypeEnum.SUPPLIER.getCode(), new KwcContractTradeUnit());
-//
-//            associatedOrder.setPurchaseEntId(purchaseUnit.getEntId());
-//            associatedOrder.setPurchaseEntName(purchaseUnit.getFirmName());
-//            associatedOrder.setProvideEntId(provideUnit.getEntId());
-//            associatedOrder.setProvideEntName(provideUnit.getFirmName());
-//
-//            KwcContractLogisticsUnit logisticsUnit =
-//                    contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
-//            if (Objects.nonNull(logisticsUnit)){
-//                associatedOrder.setTransportEntId(logisticsUnit.getEntId());
-//                associatedOrder.setTransportEntName(logisticsUnit.getFirmName());
-//            }
-//            KwcContractLogisticsUnit logisticsCarrigeUnit =
-//                    contractIdUnitTypeKeyAndUnitMap.get(kwcContractTrade.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
-//            if (Objects.nonNull(logisticsCarrigeUnit)){
-//                associatedOrder.setTransportEntId(logisticsCarrigeUnit.getEntId());
-//                associatedOrder.setTransportEntName(logisticsCarrigeUnit.getFirmName());
-//            }
-//            OrderDetailVo.GoodsInfo goodsInfo = orderDetailVo.getGoodsInfo();
-//            if (Objects.nonNull(goodsInfo)){
-//                associatedOrder.setGoodsId(goodsInfo.getGoodsId());
-//                KwpGoods goods = goodsIdAndGoodsMap.getOrDefault(goodsInfo.getGoodsId(), new KwpGoods());
-//                associatedOrder.setGoodsName(goods.getName());
-//            }
-//
-//
-//            associatedOrder.setBillingWay(orderDetailVo.getChargeType());
-//            associatedOrder.setBillingWayDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
-//                    String.valueOf(orderDetailVo.getChargeType())));
-//            associatedOrder.setAmount(Objects.nonNull(orderDetailVo.getAmount()) ?
-//                    orderDetailVo.getAmount().toPlainString() : null);
-//            RWaybillSubOrderVo rWaybillSubOrderVo = tradeOrderIdAndSubOrderVoMap.get(kwcContractTrade.getId());
-//            List<RWaybillSubOrderVo.BillSubOrder> subOrders = rWaybillSubOrderVo.getSubOrders();
-//
-//            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)){
-//                String loadAmount = subOrders.stream()
-//                        .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
-//                        .filter(Objects::nonNull)
-//                        .reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
-//                associatedOrder.setLoadAmount(loadAmount);
-//                String unloadAmount = subOrders.stream()
-//                        .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
-//                        .filter(Objects::nonNull)
-//                        .reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
-//                associatedOrder.setUnloadAmount(unloadAmount);
-//            }
-//
-//
-//            List<OrderDetailVo.AddressInfo> addressInfos = orderDetailVo.getAddressInfo();
-//            Map<String, OrderDetailVo.AddressInfo> tradeOrderIdAndUnitTypeKeyAndUnitMap = Maps.newHashMap() ;
-//            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(addressInfos)){
-//               tradeOrderIdAndUnitTypeKeyAndUnitMap =
-//                        addressInfos.stream().peek(x -> x.setTradeOrderIdTypeKey(x.getTOrderId() + "-" + x.getAddressType()))
-//                        .collect(Collectors.toMap(OrderDetailVo.AddressInfo::getTradeOrderIdTypeKey, Function.identity(), (x, y) -> x));
-//            }
-//
-//            associatedOrder.setTransportPrice(Objects.nonNull(orderDetailVo.getPrice()) ?
-//                    orderDetailVo.getPrice().setScale(2, RoundingMode.HALF_UP).toPlainString() : null);
-//            OrderDetailVo.AddressInfo loadAdd = tradeOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwcContractTradeOrder.getContractId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new OrderDetailVo.AddressInfo());
-//            associatedOrder.setLoadAddress(loadAdd.getDetailAddress());
-//            OrderDetailVo.AddressInfo unloadAdd = tradeOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwcContractTradeOrder.getContractId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new OrderDetailVo.AddressInfo());
-//            associatedOrder.setUnloadAddress(unloadAdd.getDetailAddress());
-//        }
-//        return associatedOrder;
-//    }
 
 
     private static ContractDetailResp.TradeGoodsInfo getTradeGoodsInfo(KwcContractTradeGoods t, Map<Long,
     private static ContractDetailResp.TradeGoodsInfo getTradeGoodsInfo(KwcContractTradeGoods t, Map<Long,
             KwpGoods> finalGoodsIdAndGoodsMap) {
             KwpGoods> finalGoodsIdAndGoodsMap) {

+ 2 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java

@@ -244,8 +244,9 @@ public class KwfFleetService {
         }
         }
 
 
         Map<Long, List<KwfFleetTruck>> finalFleetIdAndKwfFleetTruckList = fleetIdAndKwfFleetTruckList;
         Map<Long, List<KwfFleetTruck>> finalFleetIdAndKwfFleetTruckList = fleetIdAndKwfFleetTruckList;
+        Map<Long, KwfTruck> finalTruckIdAndTruckMap = truckIdAndTruckMap;
         List<QueryFleetResp> fleets = records.stream()
         List<QueryFleetResp> fleets = records.stream()
-                .map(item -> getQueryFleetResp(item, userIdAndUserCacheResDtoMap, finalFleetIdAndKwfFleetTruckList,truckIdAndTruckMap))
+                .map(item -> getQueryFleetResp(item, userIdAndUserCacheResDtoMap, finalFleetIdAndKwfFleetTruckList, finalTruckIdAndTruckMap))
                 .toList();
                 .toList();
         return PageDataResult.of(page, fleets);
         return PageDataResult.of(page, fleets);
     }
     }

+ 4 - 4
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsEnterpriseRepository.java

@@ -23,22 +23,22 @@ public class KwsEnterpriseRepository extends ServiceImpl<KwsEnterpriseDao,KwsEnt
     public IPage<KwsEnterprise> pageEnt(int pageNum, int pageSize, Long entId) {
     public IPage<KwsEnterprise> pageEnt(int pageNum, int pageSize, Long entId) {
         return page(new Page<>(pageNum, pageSize), Wrappers.<KwsEnterprise>lambdaQuery()
         return page(new Page<>(pageNum, pageSize), Wrappers.<KwsEnterprise>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
                 .eq(BaseModel::getDelFlag,0)
+                .eq(BaseModel::getStatus,0)
                 .eq(Objects.nonNull(entId),KwsEnterprise::getId, entId));
                 .eq(Objects.nonNull(entId),KwsEnterprise::getId, entId));
     }
     }
 
 
     public List<KwsEnterprise> queryByEntIdAndName(String entId, String entName) {
     public List<KwsEnterprise> queryByEntIdAndName(String entId, String entName) {
         return list(Wrappers.<KwsEnterprise>lambdaQuery()
         return list(Wrappers.<KwsEnterprise>lambdaQuery()
                 .eq(BaseModel::getDelFlag, 0)
                 .eq(BaseModel::getDelFlag, 0)
-                .and(StringUtils.isNotBlank(entId), wrapper -> wrapper
-                        .eq(BaseModel::getId, entId)
-                        .or()
-                        .eq(KwsEnterprise::getId, entId))
+                .eq(BaseModel::getStatus, 0)
+                .eq(StringUtils.isNotBlank(entId), KwsEnterprise::getId, entId)
                 .like(StringUtils.isNotBlank(entName), KwsEnterprise::getFirmName, entName));
                 .like(StringUtils.isNotBlank(entName), KwsEnterprise::getFirmName, entName));
     }
     }
 
 
     public List<KwsEnterprise> queryByEntIds(Set<Long> entIds,String entName) {
     public List<KwsEnterprise> queryByEntIds(Set<Long> entIds,String entName) {
         return list(Wrappers.<KwsEnterprise>lambdaQuery()
         return list(Wrappers.<KwsEnterprise>lambdaQuery()
                 .eq(BaseModel::getDelFlag, 0)
                 .eq(BaseModel::getDelFlag, 0)
+                .eq(BaseModel::getStatus, 0)
                 .in(KwsEnterprise::getId, entIds)
                 .in(KwsEnterprise::getId, entIds)
                 .like(StringUtils.isNotBlank(entName), KwsEnterprise::getFirmName, entName));
                 .like(StringUtils.isNotBlank(entName), KwsEnterprise::getFirmName, entName));
     }
     }

+ 0 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java

@@ -1455,7 +1455,6 @@ public class KwsEnterpriseService {
     public EntInfoResp queryEntInfo(EntInfoReq req) {
     public EntInfoResp queryEntInfo(EntInfoReq req) {
         //如果是发起方是采购方,采购方只能是自己和下级,供应方可以选所有入住的供应企业
         //如果是发起方是采购方,采购方只能是自己和下级,供应方可以选所有入住的供应企业
         // 如果发起方是供应方,则供应方是能自己和下级,采购方可以是所有入住企业
         // 如果发起方是供应方,则供应方是能自己和下级,采购方可以是所有入住企业
-        if (org.apache.commons.lang3.StringUtils.equals(req.getEntType(),req.getLoginEntType())){
         if (req.getEntType().contains(req.getLoginEntType())){
         if (req.getEntType().contains(req.getLoginEntType())){
             //登录客户的企业类型和查询的类型是一直的说明只能查询自己和自己的下级
             //登录客户的企业类型和查询的类型是一直的说明只能查询自己和自己的下级
             //发起方的公司信息
             //发起方的公司信息

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

@@ -175,4 +175,21 @@ public class KwtLogisticsOrderController {
         return BaseResult.success(logisticsConsignmentService.closeCapacity(req));
         return BaseResult.success(logisticsConsignmentService.closeCapacity(req));
     }
     }
 
 
+    /**
+     * 派车
+     */
+    @PostMapping("/dispatchCar")
+    @Operation(summary = "派车", description = "派车")
+    public BaseResult<DispatchCarResp> dispatchCar(@RequestBody @Valid DispatchCarReq req) {
+        return BaseResult.success(logisticsConsignmentService.dispatchCar(req));
+    }
+
+    /**
+     * 完结订单
+     */
+    @PostMapping("/logisticOrderFinish")
+    @Operation(summary = "完结订单", description = "完结订单")
+    public BaseResult<Boolean> logisticOrderFinish(@RequestBody @Valid OrderFinishReq req ) {
+        return BaseResult.success(logisticsConsignmentService.logisticOrderFinish(req));
+    }
 }
 }

+ 19 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -20,12 +20,11 @@ import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.WaybillOrderReq;
 import com.sckw.transport.model.param.WaybillOrderReq;
 import com.sckw.transport.model.param.WaybillOrderResp;
 import com.sckw.transport.model.param.WaybillOrderResp;
-import com.sckw.transport.model.vo.WaybillOrderDetailVo;
-import com.sckw.transport.model.vo.WaybillOrderExportVo;
-import com.sckw.transport.model.vo.WaybillOrderSelectVo;
+import com.sckw.transport.model.vo.*;
 import com.sckw.transport.service.KwtWaybillOrderService;
 import com.sckw.transport.service.KwtWaybillOrderService;
 import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import jakarta.validation.Valid;
@@ -47,6 +46,7 @@ import java.util.Map;
 @Slf4j
 @Slf4j
 @RestController
 @RestController
 @RequestMapping("/kwtWaybillOrder")
 @RequestMapping("/kwtWaybillOrder")
+@Tag(name = "运单相关接口")
 public class KwtWaybillOrderController {
 public class KwtWaybillOrderController {
 
 
     @Autowired
     @Autowired
@@ -665,4 +665,20 @@ public class KwtWaybillOrderController {
         return BaseResult.success(waybillOrderV1Service.findBillOrderListPage(req));
         return BaseResult.success(waybillOrderV1Service.findBillOrderListPage(req));
     }
     }
 
 
+    /**
+     * 查询运单详情信息
+     */
+    @PostMapping("/queryBillOrderDetail")
+    @Operation(summary = "查询运单详情信息")
+    public BaseResult<WaybillOrderDetailResp> queryBillOrderDetail(@RequestBody WaybillOrderRequest req) {
+        return BaseResult.success(waybillOrderV1Service.queryBillOrderDetail(req));
+    }
+    /**
+     * 运单审核,完善单证接口
+     */
+    @PostMapping("/reviewWaybillOrder")
+    @Operation(summary = "运单审核,完善单证接口")
+    public BaseResult<Boolean> reviewWaybillOrder(@RequestBody @Valid ReviewWaybillOrderReq req) {
+        return BaseResult.success(waybillOrderV1Service.reviewWaybillOrder(req));
+    }
 }
 }

+ 3 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java

@@ -1,8 +1,6 @@
 package com.sckw.transport.model;
 package com.sckw.transport.model;
 
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import jakarta.validation.constraints.DecimalMin;
 import jakarta.validation.constraints.DecimalMin;
 import jakarta.validation.constraints.Digits;
 import jakarta.validation.constraints.Digits;
 import jakarta.validation.constraints.Max;
 import jakarta.validation.constraints.Max;
@@ -10,6 +8,7 @@ import jakarta.validation.constraints.Min;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.lang.reflect.Type;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.Date;
@@ -26,6 +25,7 @@ public class KwtLogisticsOrder implements Serializable {
     /**
     /**
      * 主键
      * 主键
      */
      */
+    @TableId(type = IdType.NONE)
     private Long id;
     private Long id;
 
 
     /**
     /**

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

@@ -92,6 +92,5 @@ public class KwtLogisticsOrderUnit implements Serializable {
     private Integer delFlag;
     private Integer delFlag;
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
-    @TableField(exist = false)
-    private String logisticsOrderIdAndUnitTypeKey;
+
 }
 }

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderResp.java

@@ -138,6 +138,16 @@ public class LogisticsOrderResp implements Serializable {
      */
      */
     @Schema(description = "创建时间")
     @Schema(description = "创建时间")
     private String createTime;
     private String createTime;
+    /**
+     * 状态
+     */
+    @Schema(description = "状态")
+    private String status;
+    /**
+     * 状态描述
+     */
+    @Schema(description = "状态描述")
+    private String statusDesc;
 
 
     /**
     /**
      * 供应单位id
      * 供应单位id

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DeleteCapacityReq.java

@@ -2,6 +2,7 @@ package com.sckw.transport.model.vo;
 
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotEmpty;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -28,7 +29,7 @@ public class DeleteCapacityReq implements Serializable {
     /**
     /**
      * 物流订单id
      * 物流订单id
      */
      */
-    @NotNull(message = "物流订单id")
+    @NotEmpty(message = "物流订单id不能为空")
     @Schema(description = "物流订单id")
     @Schema(description = "物流订单id")
     private List<String> logisticsOrderIds;
     private List<String> logisticsOrderIds;
     /**
     /**

+ 57 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DispatchCarReq.java

@@ -0,0 +1,57 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 派车请求参数
+ * @create :2025-11-14 10:01:00
+ */
+@Data
+public class DispatchCarReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8280142385536425018L;
+    /**
+     * 物流订单id
+     */
+    @Schema(description = "物流订单id")
+    @NotBlank(message = "物流订单id不能为空")
+    private String logisticOrderId;
+    /**
+     * 企业id
+     */
+    @Schema(description = "企业id")
+    @NotBlank(message = "企业id不能为空")
+    private String entId;
+    /**
+     * 车辆id列表
+     */
+    @Schema(description = "车辆id")
+    @NotEmpty(message = "车辆id列表")
+    private List<CarInfo> carInfos;
+    @Data
+    public static class CarInfo implements Serializable{
+        @Serial
+        private static final long serialVersionUID = 4384175564253296575L;
+        /**
+         * 车辆id
+         */
+        @Schema(description = "车辆id")
+        @NotBlank(message = "车辆id不能为空")
+        private String truckId;
+        /**
+         * 车牌号
+         */
+        @Schema(description = "车牌号")
+        @NotBlank(message = "车牌号不能为空")
+        private String truckNo;
+    }
+}

+ 22 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/DispatchCarResp.java

@@ -0,0 +1,22 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description :
+ * @create :2025-11-14 10:23:00
+ */
+@Data
+public class DispatchCarResp implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5084673710895915098L;
+    /**
+     * 成功条数
+     */
+    private String successCount;
+}

+ 26 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishReq.java

@@ -0,0 +1,26 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 完结订单请求参数
+ * @create :2025-11-14 15:22:00
+ */
+@Data
+public class OrderFinishReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 2204191724806474658L;
+    /**
+     * 物流订单id
+     */
+    @Schema(description = "物流订单id")
+    @NotBlank(message = "物流订单id不能为空")
+    private String logisticOrderId;
+}

+ 32 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/ReviewWaybillOrderReq.java

@@ -0,0 +1,32 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 审核接口请求参数
+ * @create :2025-11-15 14:44:00
+ */
+@Data
+public class ReviewWaybillOrderReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5923170864658959346L;
+    /**
+     * 运单id
+     */
+    @Schema(description = "运单id")
+    @NotBlank(message = "运单id不能为空")
+    private String waybillId;
+    /**
+     * 状态
+     */
+    @Schema(description = "状态")
+    @NotBlank(message = "状态不能为空")
+    private String status;
+}

+ 90 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderDetailResp.java

@@ -0,0 +1,90 @@
+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-15 13:46:00
+ */
+@Data
+public class WaybillOrderDetailResp implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8652529429805600924L;
+    /**
+     * 运单id
+     */
+    @Schema(description = "运单id")
+    private String waybillOrderId;
+    /**
+     * 物流订单号
+     */
+    @Schema(description = "物流订单号")
+    private String logisticOrderNo;
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号")
+    private String truckNo;
+    /**
+     * 车辆轴数
+     */
+    @Schema(description = "车辆轴数")
+    private String carAxis;
+    /**
+     * 所属车队
+     */
+    @Schema(description = "所属车队")
+    private String fleetName;
+    /**
+     * 司机姓名
+     */
+    @Schema(description = "司机姓名")
+    private String driverName;
+    /**
+     * 联系方式
+     */
+    @Schema(description = "联系方式")
+    private String driverPhone;
+    /**
+     * 身份证号
+     */
+    @Schema(description = "身份证号")
+    private String driverIdCard;
+    /**
+     * 商品名称
+     */
+    @Schema(description = "商品名称")
+    private String goodsName;
+    /**
+     * 装货地址
+     */
+    @Schema(description = "装货地址")
+    private String loadAddress;
+    /**
+     * 卸货地址
+     */
+    @Schema(description = "卸货地址")
+    private String unloadAddress;
+    /**
+     * 任务量
+     */
+    @Schema(description = "任务量")
+    private String taskVolume;
+    /**
+     * 装货量
+     */
+    @Schema(description = "装货量")
+    private String loadAmount;
+    /**
+     * 卸货量
+     */
+    @Schema(description = "卸货量")
+    private String unloadAmount;
+
+}

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

@@ -43,4 +43,15 @@ public class KwtLogisticsOrderCirculateRepository extends ServiceImpl<KwtLogisti
         return updateBatchById(updateCirculates);
         return updateBatchById(updateCirculates);
 
 
     }
     }
+
+    public List<KwtLogisticsOrderCirculate> findOneByLogOrderIdsAndTruckIds(Long logOrderId, Set<String> truckIds) {
+        return list(Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
+                .eq(KwtLogisticsOrderCirculate::getDelFlag,0)
+                .eq(KwtLogisticsOrderCirculate::getLOrderId, logOrderId)
+                .in(KwtLogisticsOrderCirculate::getTruckId, truckIds));
+    }
+
+    public Boolean insertCirculates(List<KwtLogisticsOrderCirculate> insertOrderCirculates) {
+       return saveBatch(insertOrderCirculates);
+    }
 }
 }

+ 4 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java

@@ -80,12 +80,14 @@ public class KwtLogisticsOrderRepository extends ServiceImpl<KwtLogisticsOrderMa
                 .in(KwtLogisticsOrder::getId, logOrderIds));
                 .in(KwtLogisticsOrder::getId, logOrderIds));
     }
     }
 
 
+    public Boolean updateLogisticsOrder(KwtLogisticsOrder updateLogisticsOrder) {
+       return updateById(updateLogisticsOrder);
+    }
+
     public KwtLogisticsOrder queryByLogOrderIdAndStatus(Long logOrderId) {
     public KwtLogisticsOrder queryByLogOrderIdAndStatus(Long logOrderId) {
         return getOne(Wrappers.<KwtLogisticsOrder>lambdaQuery()
         return getOne(Wrappers.<KwtLogisticsOrder>lambdaQuery()
                 .eq(KwtLogisticsOrder::getDelFlag,0)
                 .eq(KwtLogisticsOrder::getDelFlag,0)
                 .eq(KwtLogisticsOrder::getId, logOrderId)
                 .eq(KwtLogisticsOrder::getId, logOrderId)
                 .eq(KwtLogisticsOrder::getStatus, 15));
                 .eq(KwtLogisticsOrder::getStatus, 15));
     }
     }
-
-
 }
 }

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

@@ -138,4 +138,12 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                 .orderByDesc(KwtWaybillOrder::getCreateTime)
                 .orderByDesc(KwtWaybillOrder::getCreateTime)
         );
         );
     }
     }
+
+    public KwtWaybillOrder queryByBillOrderId(Long orderId) {
+        return getOne(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getDelFlag,0)
+                .eq(KwtWaybillOrder::getId,orderId)
+                .last("limit 1")
+        );
+    }
 }
 }

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

@@ -71,4 +71,11 @@ public class KwtWaybillOrderSubtaskRepository extends ServiceImpl<KwtWaybillOrde
                         .orderByDesc(BaseModel::getCreateTime)
                         .orderByDesc(BaseModel::getCreateTime)
                         .orderByDesc(KwtWaybillOrderSubtask::getId));
                         .orderByDesc(KwtWaybillOrderSubtask::getId));
     }
     }
+
+    public KwtWaybillOrderSubtask queryByBillOrderId(Long id) {
+        return getOne(Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
+                .eq(KwtWaybillOrderSubtask::getWOrderId,id)
+                .eq(BaseModel::getDelFlag,0)
+                .last("limit 1"));
+    }
 }
 }

+ 128 - 23
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
@@ -20,6 +22,7 @@ import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.exception.SystemException;
+import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.*;
 import com.sckw.core.model.enums.*;
@@ -49,6 +52,7 @@ import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.*;
@@ -57,6 +61,7 @@ import com.sckw.transport.model.param.*;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.repository.*;
 import com.sckw.transport.repository.*;
 import com.sckw.transport.utils.DistanceUtils;
 import com.sckw.transport.utils.DistanceUtils;
+import com.sckw.transport.utils.DistanceUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
 import jakarta.validation.Valid;
@@ -72,6 +77,7 @@ import org.springframework.util.ObjectUtils;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.function.Function;
@@ -2246,8 +2252,7 @@ public class KwtLogisticsConsignmentService {
         Map<String, KwtLogisticsOrderUnit> logOrderIdAndUnitTypeKeyAndUnitMap = Maps.newHashMap();
         Map<String, KwtLogisticsOrderUnit> logOrderIdAndUnitTypeKeyAndUnitMap = Maps.newHashMap();
         if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(unitList)){
         if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(unitList)){
             logOrderIdAndUnitTypeKeyAndUnitMap = unitList.stream()
             logOrderIdAndUnitTypeKeyAndUnitMap = unitList.stream()
-                    .peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getUnitType()))
-                    .collect(Collectors.toMap(KwtLogisticsOrderUnit::getLogisticsOrderIdAndUnitTypeKey,
+                    .collect(Collectors.toMap(x -> x.getLOrderId() + "-" + x.getUnitType(),
                             Function.identity(), (x, y) -> x));
                             Function.identity(), (x, y) -> x));
         }
         }
         //查询商品信息
         //查询商品信息
@@ -2279,8 +2284,8 @@ public class KwtLogisticsConsignmentService {
         Map<Long, KwtLogisticsOrderContract> finalLogOrderIdAndContractMap = logOrderIdAndContractMap;
         Map<Long, KwtLogisticsOrderContract> finalLogOrderIdAndContractMap = logOrderIdAndContractMap;
 
 
         List<LogisticsOrderResp> resps = records.stream()
         List<LogisticsOrderResp> resps = records.stream()
-                .map(x ->getLogisticsOrderResp(x,
-                finalLogOrderIdAndUnitTypeKeyAndUnitMap, finalLogIdAndGoodsMap, finalGoodsIdAndGoodsMap, finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap, finalLogOrderIdAndContractMap))
+                .map(x ->getLogisticsOrderResp(x, finalLogOrderIdAndUnitTypeKeyAndUnitMap, finalLogIdAndGoodsMap
+                        , finalGoodsIdAndGoodsMap, finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap, finalLogOrderIdAndContractMap))
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
 
 
         return PageDataResult.of(page,resps);
         return PageDataResult.of(page,resps);
@@ -2378,7 +2383,12 @@ public class KwtLogisticsConsignmentService {
     }
     }
 
 
     @NotNull
     @NotNull
-    private static LogisticsOrderResp getLogisticsOrderResp(KwtLogisticsOrder kwtLogisticsOrder, Map<String, KwtLogisticsOrderUnit> finalLogOrderIdAndUnitTypeKeyAndUnitMap, Map<Long, KwtLogisticsOrderGoods> finalLogIdAndGoodsMap, Map<Long, KwpGoods> finalGoodsIdAndGoodsMap, Map<String, KwtLogisticsOrderAddress> finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap, Map<Long, KwtLogisticsOrderContract> finalLogOrderIdAndContractMap) {
+    private static LogisticsOrderResp getLogisticsOrderResp(KwtLogisticsOrder kwtLogisticsOrder,
+                                                            Map<String, KwtLogisticsOrderUnit> finalLogOrderIdAndUnitTypeKeyAndUnitMap,
+                                                            Map<Long, KwtLogisticsOrderGoods> finalLogIdAndGoodsMap,
+                                                            Map<Long, KwpGoods> finalGoodsIdAndGoodsMap,
+                                                            Map<String, KwtLogisticsOrderAddress> finalLogisticsOrderIdAndUnitTypeKeyAndAddressMap,
+                                                            Map<Long, KwtLogisticsOrderContract> finalLogOrderIdAndContractMap) {
         LogisticsOrderResp logisticsOrderResp = new LogisticsOrderResp();
         LogisticsOrderResp logisticsOrderResp = new LogisticsOrderResp();
         logisticsOrderResp.setLogisticsOrderId(String.valueOf(kwtLogisticsOrder.getId()));
         logisticsOrderResp.setLogisticsOrderId(String.valueOf(kwtLogisticsOrder.getId()));
         logisticsOrderResp.setLogisticsOrderNo(kwtLogisticsOrder.getLOrderNo());
         logisticsOrderResp.setLogisticsOrderNo(kwtLogisticsOrder.getLOrderNo());
@@ -2393,7 +2403,7 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderResp.setCarriageCompanyName(carriageCompany.getFirmName());
         logisticsOrderResp.setCarriageCompanyName(carriageCompany.getFirmName());
 
 
         KwtLogisticsOrderGoods goods = finalLogIdAndGoodsMap.getOrDefault(kwtLogisticsOrder.getId(), new KwtLogisticsOrderGoods());
         KwtLogisticsOrderGoods goods = finalLogIdAndGoodsMap.getOrDefault(kwtLogisticsOrder.getId(), new KwtLogisticsOrderGoods());
-        KwpGoods kwpGoods = finalGoodsIdAndGoodsMap.getOrDefault(goods.getId(), new KwpGoods());
+        KwpGoods kwpGoods = finalGoodsIdAndGoodsMap.getOrDefault(goods.getGoodsId(), new KwpGoods());
         logisticsOrderResp.setGoodsId(String.valueOf(goods.getId()));
         logisticsOrderResp.setGoodsId(String.valueOf(goods.getId()));
         logisticsOrderResp.setGoodsName(kwpGoods.getName());
         logisticsOrderResp.setGoodsName(kwpGoods.getName());
         logisticsOrderResp.setTransportPrice(Objects.nonNull(kwtLogisticsOrder.getPrice()) ? kwtLogisticsOrder.getPrice().setScale(2,
         logisticsOrderResp.setTransportPrice(Objects.nonNull(kwtLogisticsOrder.getPrice()) ? kwtLogisticsOrder.getPrice().setScale(2,
@@ -2405,19 +2415,11 @@ public class KwtLogisticsConsignmentService {
                 kwtLogisticsOrder.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00");
                 kwtLogisticsOrder.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00");
         BigDecimal expectedTransportPrice = BigDecimal.ZERO;
         BigDecimal expectedTransportPrice = BigDecimal.ZERO;
         BigDecimal actualTransportPrice = BigDecimal.ZERO;
         BigDecimal actualTransportPrice = BigDecimal.ZERO;
-        if (org.apache.commons.lang3.StringUtils.equals(kwtLogisticsOrder.getBillingMode(),DictEnum.CHARGING_TYPE_1.getValue())){
-            expectedTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getLoadAmount()) ?
+        expectedTransportPrice =
+                Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getAmount()) ?
                     kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getLoadAmount()) : BigDecimal.ZERO;
                     kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getLoadAmount()) : BigDecimal.ZERO;
-            actualTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getTotalLoadAmount()) ?
-                    kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getTotalLoadAmount()) : BigDecimal.ZERO;
-
-        }else if (org.apache.commons.lang3.StringUtils.equals(kwtLogisticsOrder.getBillingMode(),DictEnum.CHARGING_TYPE_2.getValue())){
-            expectedTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getUnloadAmount()) ?
-                    kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getUnloadAmount()) : BigDecimal.ZERO;
-            actualTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getTotalUnloadAmount()) ?
-                    kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getTotalUnloadAmount()) : BigDecimal.ZERO;
-        }
-
+        actualTransportPrice = Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(kwtLogisticsOrder.getTotalUnloadAmount()) ?
+                kwtLogisticsOrder.getPrice().multiply(kwtLogisticsOrder.getTotalUnloadAmount()) : BigDecimal.ZERO;
 
 
         logisticsOrderResp.setExpectedTransportPrice(expectedTransportPrice.setScale(2,RoundingMode.HALF_UP).toPlainString());
         logisticsOrderResp.setExpectedTransportPrice(expectedTransportPrice.setScale(2,RoundingMode.HALF_UP).toPlainString());
         logisticsOrderResp.setActualTransportPrice(actualTransportPrice.setScale(2,RoundingMode.HALF_UP).toPlainString());
         logisticsOrderResp.setActualTransportPrice(actualTransportPrice.setScale(2,RoundingMode.HALF_UP).toPlainString());
@@ -2440,6 +2442,8 @@ public class KwtLogisticsConsignmentService {
                 new KwtLogisticsOrderContract());
                 new KwtLogisticsOrderContract());
         logisticsOrderResp.setContractNo(orderContract.getContractNo());
         logisticsOrderResp.setContractNo(orderContract.getContractNo());
         logisticsOrderResp.setCreateTime(DateUtils.format(kwtLogisticsOrder.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
         logisticsOrderResp.setCreateTime(DateUtils.format(kwtLogisticsOrder.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
+        logisticsOrderResp.setStatus(String.valueOf(kwtLogisticsOrder.getStatus()));
+        logisticsOrderResp.setStatusDesc(LogisticsOrderV1Enum.getDesc(kwtLogisticsOrder.getStatus()));
 
 
         return logisticsOrderResp;
         return logisticsOrderResp;
     }
     }
@@ -2457,8 +2461,7 @@ public class KwtLogisticsConsignmentService {
         Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap = Maps.newHashMap();
         Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap = Maps.newHashMap();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(unitList)){
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(unitList)){
             logOrderIdUnitTypeKeyAndUnitMap = unitList.stream()
             logOrderIdUnitTypeKeyAndUnitMap = unitList.stream()
-                    .peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getUnitType()))
-                    .collect(Collectors.toMap(KwtLogisticsOrderUnit::getLogisticsOrderIdAndUnitTypeKey, Function.identity(), (v1, v2) -> v1));
+                    .collect(Collectors.toMap(x -> x.getLOrderId() + "-" + x.getUnitType(), Function.identity(), (v1, v2) -> v1));
 
 
         }
         }
 
 
@@ -2773,6 +2776,110 @@ public class KwtLogisticsConsignmentService {
         return logisticsOrderCirculateRepository.updateCirculates(orderCirculates);
         return logisticsOrderCirculateRepository.updateCirculates(orderCirculates);
     }
     }
 
 
+    public DispatchCarResp dispatchCar(@Valid DispatchCarReq req) {
+        log.info("派车请求参数:{}", JSON.toJSONString(req));
+        //查询物流订单
+        Long logOrderId = Long.parseLong(req.getLogisticOrderId());
+        KwtLogisticsOrder logisticsOrder =
+                logisticsOrderRepository.queryByLogisticsOrderId(logOrderId);
+        if (Objects.isNull(logisticsOrder)){
+            throw new BusinessException("未找到该物流订单信息");
+        }
+        //车牌id去重
+        List<DispatchCarReq.CarInfo> carInfos = req.getCarInfos();
+        Set<String> truckIds = carInfos.stream()
+                        .map(DispatchCarReq.CarInfo::getTruckId)
+                        .collect(Collectors.toSet());
+        //查询派车信息
+        List<KwtLogisticsOrderCirculate> logisticsOrderCirculates =
+                logisticsOrderCirculateRepository.findOneByLogOrderIdsAndTruckIds(logisticsOrder.getId(), truckIds);
+
+        List<KwtLogisticsOrderCirculate> insertOrderCirculates = Lists.newArrayList();
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(logisticsOrderCirculates)){
+            //直接新增
+            List<KwtLogisticsOrderCirculate> saveOrderCirculates = carInfos.stream()
+                    .map(t -> getKwtLogisticsOrderCirculate(req, t, logOrderId, logisticsOrder))
+                    .collect(Collectors.toList());
+            insertOrderCirculates.addAll(saveOrderCirculates);
+        }else {
+            //过滤掉已有的车
+            List<Long> truckIdList = logisticsOrderCirculates.stream()
+                    .map(KwtLogisticsOrderCirculate::getTruckId)
+                    .collect(Collectors.toList());
+            List<KwtLogisticsOrderCirculate> saveOrderCirculates = carInfos.stream().filter(t -> !truckIdList.contains(t.getTruckId()))
+                    .map(t -> getKwtLogisticsOrderCirculate(req, t, logOrderId, logisticsOrder))
+                    .collect(Collectors.toList());
+            insertOrderCirculates.addAll(saveOrderCirculates);
+        }
+        DispatchCarResp dispatchCarResp = new DispatchCarResp();
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(insertOrderCirculates)){
+            //批量新增
+            dispatchCarResp.setSuccessCount("0");
+            return new DispatchCarResp();
+        }
+        Boolean b = logisticsOrderCirculateRepository.insertCirculates(insertOrderCirculates);
+        if (!b){
+            throw new BusinessException("派车失败");
+        }
+        dispatchCarResp.setSuccessCount(String.valueOf(insertOrderCirculates.size()));
+        return dispatchCarResp;
+    }
+
+    @NotNull
+    private static KwtLogisticsOrderCirculate getKwtLogisticsOrderCirculate(DispatchCarReq req,
+                                                                            DispatchCarReq.CarInfo carInfo, Long logOrderId, KwtLogisticsOrder logisticsOrder) {
+        KwtLogisticsOrderCirculate logisticsOrderCirculate = new KwtLogisticsOrderCirculate();
+        logisticsOrderCirculate.setEntId(Long.valueOf(req.getEntId()));
+        logisticsOrderCirculate.setLOrderId(logOrderId);
+        logisticsOrderCirculate.setTruckId(Long.valueOf(carInfo.getTruckId()));
+        logisticsOrderCirculate.setTruckNo(carInfo.getTruckNo());
+        Date startDate = Objects.nonNull(logisticsOrder.getStartTime()) ?
+                Date.from(logisticsOrder.getStartTime().atZone(ZoneId.systemDefault()).toInstant()) : null;
+        logisticsOrderCirculate.setStartTime(startDate);
+        Date endDate = Objects.nonNull(logisticsOrder.getEndTime()) ?
+                Date.from(logisticsOrder.getEndTime().atZone(ZoneId.systemDefault()).toInstant()) : null;
+        logisticsOrderCirculate.setEndTime(endDate);
+        logisticsOrderCirculate.setUnit(logisticsOrder.getUnit());
+        logisticsOrderCirculate.setEntrustAmount(logisticsOrder.getEntrustAmount());
+        Date date = new Date();
+        logisticsOrderCirculate.setCreateBy(LoginUserHolder.getUserId());
+        logisticsOrderCirculate.setCreateTime(date);
+        logisticsOrderCirculate.setUpdateBy(LoginUserHolder.getUserId());
+        logisticsOrderCirculate.setUpdateTime(date);
+        return logisticsOrderCirculate;
+    }
+
+    public Boolean logisticOrderFinish(@Valid OrderFinishReq req) {
+        log.info("物流订单-完结订单传递参数信息:{}", JSONObject.toJSONString(req));
+        //查询物流订单
+        Long logOrderId = Long.parseLong(req.getLogisticOrderId());
+        KwtLogisticsOrder logisticsOrder =
+                logisticsOrderRepository.queryByLogisticsOrderId(logOrderId);
+        if (Objects.isNull(logisticsOrder)){
+            throw new BusinessException("未找到该物流订单信息");
+        }
+        KwtLogisticsOrder updateLogisticsOrder = new KwtLogisticsOrder();
+        updateLogisticsOrder.setId(logOrderId);
+        if (Objects.equals(logisticsOrder.getStatus(), LogisticsOrderV1Enum.WAIT_DELIVERY.getCode())){
+            updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.HAVE_FINISHED.getCode());
+        }
+
+        //查询物流订单下的所有运单
+        List<KwtWaybillOrderSubtask> waybillOrderSubtasks = logisticsOrderSubtaskRepository.queryByLogId(logOrderId);
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrderSubtasks) && Objects.equals(logisticsOrder.getStatus(), LogisticsOrderV1Enum.IN_TRANSIT.getCode())){
+            boolean b = waybillOrderSubtasks.stream().anyMatch(x -> !Objects.equals(x.getStatus(),
+                    CarWaybillV1Enum.WAIT_UNLOADING.getCode()) || !Objects.equals(x.getStatus(),
+                    CarWaybillV1Enum.APPROVAL_TREAT.getCode()));
+            if (b){
+                updateLogisticsOrder.setStatus(LogisticsOrderEnum.NEARING_COMPLETION.getCode());
+            }else if (Objects.equals(logisticsOrder.getStatus(), LogisticsOrderEnum.NEARING_COMPLETION.getCode())){
+                updateLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            }
+        }
+        return logisticsOrderRepository.updateLogisticsOrder(updateLogisticsOrder);
+    }
+
+
     /**
     /**
      * 查询司机关联完成运单和累计运输量
      * 查询司机关联完成运单和累计运输量
      * @param param
      * @param param
@@ -2886,7 +2993,7 @@ public class KwtLogisticsConsignmentService {
         List<LogisticsOrderResp> ordderList = logOrderList.stream()
         List<LogisticsOrderResp> ordderList = logOrderList.stream()
                 .map(order -> {
                 .map(order -> {
                     return getLogisticsOrderResp(order, logOrderIdAndGoodsMap, goodsIdAndGoodsMap, logOrderIdAndUnitMap,
                     return getLogisticsOrderResp(order, logOrderIdAndGoodsMap, goodsIdAndGoodsMap, logOrderIdAndUnitMap,
-                    tOrderIdAndUnitMap, logOrderIdAndAddressMap, logOrderIdAndCirculateMap);
+                            tOrderIdAndUnitMap, logOrderIdAndAddressMap, logOrderIdAndCirculateMap);
                 }).collect(Collectors.toList());
                 }).collect(Collectors.toList());
         log.info("查询司机关联车辆的物流订单成功!");
         log.info("查询司机关联车辆的物流订单成功!");
         return PageDataResult.success(param.getPageNum(), param.getPageSize(), (long) ordderList.size(), ordderList);
         return PageDataResult.success(param.getPageNum(), param.getPageSize(), (long) ordderList.size(), ordderList);
@@ -2975,6 +3082,4 @@ public class KwtLogisticsConsignmentService {
 
 
 
 
     }
     }
-
-
 }
 }

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

@@ -10,6 +10,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.google.common.collect.Sets;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.constant.UrlConstants;
 import com.sckw.core.model.constant.UrlConstants;
@@ -121,6 +122,8 @@ public class KwtWaybillOrderV1Service {
     private final KwtWaybillOrderRepository kwtWaybillOrderRepository;
     private final KwtWaybillOrderRepository kwtWaybillOrderRepository;
     private final KwtLogisticsOrderUnitRepository kwtLogisticsOrderUnitRepository;
     private final KwtLogisticsOrderUnitRepository kwtLogisticsOrderUnitRepository;
     private final KwtLogisticsOrderGoodsRepository kwtLogisticsOrderGoodsRepository;
     private final KwtLogisticsOrderGoodsRepository kwtLogisticsOrderGoodsRepository;
+    private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
+    private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
     @Resource
     @Resource
     private StreamBridge streamBridge;
     private StreamBridge streamBridge;
     @DubboReference(version = "1.0.0", group = "design", check = false)
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -3020,8 +3023,8 @@ public class KwtWaybillOrderV1Service {
         Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap = Maps.newHashMap();
         Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap = Maps.newHashMap();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(logisticsOrderUnits)){
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(logisticsOrderUnits)){
             logOrderIdUnitTypeKeyAndUnitMap =
             logOrderIdUnitTypeKeyAndUnitMap =
-                    logisticsOrderUnits.stream().peek(x -> x.setLogisticsOrderIdAndUnitTypeKey(x.getLOrderId() + "-" + x.getUnitType()))
-                    .collect(Collectors.toMap(KwtLogisticsOrderUnit::getLogisticsOrderIdAndUnitTypeKey,
+                    logisticsOrderUnits.stream()
+                    .collect(Collectors.toMap(x -> x.getLOrderId() + "-" + x.getUnitType(),
                             Function.identity(), (k1, k2) -> k1));
                             Function.identity(), (k1, k2) -> k1));
         }
         }
         return logOrderIdUnitTypeKeyAndUnitMap;
         return logOrderIdUnitTypeKeyAndUnitMap;
@@ -3141,7 +3144,7 @@ public class KwtWaybillOrderV1Service {
         waybillOrderResp.setLoadingTime(DateUtils.format(loadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
         waybillOrderResp.setLoadingTime(DateUtils.format(loadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
         waybillOrderResp.setOffsiteTime(DateUtils.format(unloadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
         waybillOrderResp.setOffsiteTime(DateUtils.format(unloadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
         waybillOrderResp.setStatus(String.valueOf(record.getStatus()));
         waybillOrderResp.setStatus(String.valueOf(record.getStatus()));
-        waybillOrderResp.setStatusDesc(CarWaybillEnum.getName(record.getStatus()));
+        waybillOrderResp.setStatusDesc(CarWaybillV1Enum.geDesc(record.getStatus()));
         return waybillOrderResp;
         return waybillOrderResp;
     }
     }
 
 
@@ -3155,4 +3158,101 @@ public class KwtWaybillOrderV1Service {
         return order;
         return order;
     }
     }
 
 
+    public WaybillOrderDetailResp queryBillOrderDetail(WaybillOrderRequest req) {
+        log.info("查询运单详情请求:{}",JSON.toJSONString( req));
+        Long orderId = req.getOrderId();
+        KwtWaybillOrder billOrder = kwtWaybillOrderRepository.queryByBillOrderId(orderId);
+        if (Objects.isNull(billOrder)){
+            throw new BusinessException("运单信息不存在");
+        }
+        //查询车辆信息
+        RTruckVo truck = remoteFleetService.findTruck(billOrder.getTruckId());
+        //查询子运单
+        KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.queryByBillOrderId(billOrder.getId());
+        if (Objects.isNull(subtask)){
+            throw new BusinessException("子运单信息不存在");
+        }
+        //查询物流信息
+        KwtLogisticsOrder logOrder = kwtLogisticsOrderRepository.queryByLogisticsOrderId(subtask.getLOrderId());
+        if (Objects.isNull(logOrder)){
+            throw new BusinessException("物流信息不存在");
+        }
+        //查询车队
+        Long fleetId = Objects.nonNull(truck) && org.apache.commons.lang3.StringUtils.isNotBlank(truck.getFleetId()) ?
+                Long.parseLong(truck.getFleetId()) : null;
+
+        RFleetVo fleet = remoteFleetService.findFleetById(fleetId);
+
+        //查询商品信息
+        KwtLogisticsOrderGoods goods = kwtLogisticsOrderGoodsRepository.queryByLogOrderId(logOrder.getId());
+        //查询运单装货地址卸货地址
+        List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = waybillOrderAddressRepository.queryByWOrderId(billOrder.getId());
+        Map<String, KwtWaybillOrderAddress> keyAndAddressMap = Maps.newHashMap() ;
+        if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwtWaybillOrderAddresses)){
+            keyAndAddressMap = kwtWaybillOrderAddresses.stream()
+                    .collect(Collectors.toMap(x -> x.getId() + "-" + x.getAddressType(),
+                    Function.identity(), (x, y) -> x));
+        }
+
+        return getWaybillOrderDetailResp(billOrder, logOrder, truck, fleet, goods, keyAndAddressMap);
+    }
+
+    @NotNull
+    private static WaybillOrderDetailResp getWaybillOrderDetailResp(KwtWaybillOrder billOrder, KwtLogisticsOrder logOrder, RTruckVo truck, RFleetVo fleet, KwtLogisticsOrderGoods goods, Map<String, KwtWaybillOrderAddress> keyAndAddressMap) {
+        WaybillOrderDetailResp waybillOrderDetailResp = new WaybillOrderDetailResp();
+        waybillOrderDetailResp.setWaybillOrderId(String.valueOf(billOrder.getId()));
+        waybillOrderDetailResp.setLogisticOrderNo(logOrder.getLOrderNo());
+        waybillOrderDetailResp.setTruckNo(billOrder.getTruckNo());
+        waybillOrderDetailResp.setCarAxis(Objects.nonNull(truck) ? truck.getCarAxis() : "");
+        waybillOrderDetailResp.setFleetName(Optional.ofNullable(fleet).map(RFleetVo::getName).orElse( ""));
+        waybillOrderDetailResp.setDriverName(billOrder.getDriverName());
+        waybillOrderDetailResp.setDriverPhone(billOrder.getDriverPhone());
+        waybillOrderDetailResp.setDriverIdCard(billOrder.getDriverIdcard());
+        waybillOrderDetailResp.setGoodsName(Optional.ofNullable(goods).map(KwtLogisticsOrderGoods::getGoodsName).orElse( ""));
+        KwtWaybillOrderAddress loadAdd = keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtWaybillOrderAddress());
+        waybillOrderDetailResp.setLoadAddress(loadAdd.getDetailAddress());
+        KwtWaybillOrderAddress unLoadAdd =
+                keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.TAKE.getCode(),
+                        new KwtWaybillOrderAddress());
+        waybillOrderDetailResp.setUnloadAddress(unLoadAdd.getDetailAddress());
+        waybillOrderDetailResp.setTaskVolume(Objects.nonNull(billOrder.getEntrustAmount()) ?
+                billOrder.getEntrustAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        waybillOrderDetailResp.setLoadAmount(Objects.nonNull(billOrder.getLoadAmount()) ?
+                billOrder.getLoadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        waybillOrderDetailResp.setUnloadAmount(Objects.nonNull(billOrder.getUnloadAmount()) ?
+                billOrder.getUnloadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        return waybillOrderDetailResp;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean reviewWaybillOrder(@Valid ReviewWaybillOrderReq req) {
+        log.info("审核运单请求参数:{}", JSON.toJSONString(req));
+        Long waybillId = Long.parseLong(req.getWaybillId());
+        Integer status = Integer.parseInt(req.getStatus());
+        //查询运单信息
+        KwtWaybillOrder billOrder = kwtWaybillOrderRepository.queryByBillOrderId(waybillId);
+        if (Objects.isNull(billOrder)){
+            throw new BusinessException("运单信息不存在");
+        }
+        KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.queryByBillOrderId(waybillId);
+        if (Objects.isNull(subtask)){
+            throw new BusinessException("子运单信息不存在");
+        }
+        KwtWaybillOrder updateOrder = new KwtWaybillOrder();
+        updateOrder.setId(billOrder.getId());
+        KwtWaybillOrderSubtask updateSubtask = new KwtWaybillOrderSubtask();
+        updateSubtask.setId(subtask.getId());
+        //运单当前状态是已卸货,传入的订单是已完成  驳回的订单可以通过完善单证变成已完成
+        List<Integer> statusList = Arrays.asList(CarWaybillV1Enum.COMPLETION_LOADING.getCode(),
+                CarWaybillV1Enum.COMPLETION_UNLOADING.getCode());
+        if (statusList.contains(billOrder.getStatus()) && Objects.equals(status, CarWaybillV1Enum.WAIT_UNLOADING.getCode())){
+            updateOrder.setStatus(status);
+            updateSubtask.setStatus(status);
+            boolean b = kwtWaybillOrderRepository.updateById(updateOrder) && kwtWaybillOrderSubtaskRepository.updateById(updateSubtask);
+            if (!b){
+               throw new BusinessException("运单状态更新失败");
+            }
+        }
+        return Boolean.TRUE;
+    }
 }
 }