فهرست منبع

1.新增v4.2版本分包托运接口
2.修改v4.2版本订单详情接口
3.修改v4.2版本分包订单详情接口
4.新增v4.2版本线路dubbo接口
5.修改V4.2版本完结订单查询接口
6.修改v4.2版本完结订单接口

lengfaqiang 1 سال پیش
والد
کامیت
3d50616d80
29فایلهای تغییر یافته به همراه640 افزوده شده و 85 حذف شده
  1. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  2. 1 1
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/easyexcel/ExcelImportListener.java
  3. 13 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteLineFreightRateService.java
  4. 0 7
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  5. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtAcceptCarriageOrderController.java
  6. 3 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderAmountMapper.java
  7. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderLineFreightRateMapper.java
  8. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  9. 37 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportRemoteLineFreightRateServiceImpl.java
  10. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderLineFreightRate.java
  11. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/ExeclDTO/LogisticsOrderExcelImportDTO.java
  12. 8 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LineFreightDto.java
  13. 46 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderFinishDto.java
  14. 24 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderLineFreightRateDto.java
  15. 31 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LineFreightRateVo.java
  16. 45 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsOrderFinishAmountVo.java
  17. 6 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishVO.java
  18. 3 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderGoodsLoadingVo.java
  19. 10 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/Import/KwtAcceptCarriageOrderImportService.java
  20. 43 35
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtCommonService.java
  21. 26 11
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtConsignOrderService.java
  22. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  23. 29 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java
  24. 24 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java
  25. 228 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java
  26. 19 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderAmountMapper.xml
  27. 15 5
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderLineFreightRateMapper.xml
  28. 1 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  29. 3 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderSubtaskMapper.xml

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

@@ -80,6 +80,7 @@ public enum DictEnum {
     CHARGING_TYPE_1("charging_type", "1", "按装货量") ,
     CHARGING_TYPE_2("charging_type", "2", "按卸货量") ,
     CHARGING_TYPE_3("charging_type", "3", "按车次"),
+    CHARGING_TYPE_4("charging_type", "4", "按线路"),
     SIGNING_WAY_1("signing_way", "1", "线上签约"),
     SIGNING_WAY_2("signing_way", "2", "线下签约"),
     TRANSPORT_DEMAND_STATUS_0("transport_demand_status", "0","已保存"),

+ 1 - 1
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/easyexcel/ExcelImportListener.java

@@ -31,7 +31,7 @@ public class ExcelImportListener extends AnalysisEventListener<Object> {
         String validMsg = ValidDataUtil.valid(data);
         if (validMsg != null) {
             //+1行(实际中excel中第几行的数据)
-            int rowIndex = context.readRowHolder().getRowIndex() + 1;
+            int rowIndex = context.readRowHolder().getRowIndex() + 4;
             String errorMsg = "第" + rowIndex + "行数据有误," + validMsg;
             errorList.add(errorMsg);
         } else {

+ 13 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteLineFreightRateService.java

@@ -0,0 +1,13 @@
+package com.sckw.transport.api.dubbo;
+
+import java.util.List;
+
+public interface TransportRemoteLineFreightRateService {
+
+    /**
+     * 路径id是否被关联
+     * @param lineFreightRateIds 线路ids
+     * @return
+     */
+    Boolean getRemoteLineFreightRateIsUse(List<Long> lineFreightRateIds);
+}

+ 0 - 7
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -199,14 +199,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             for (GoodsLoadingParam goodsLoading : loading) {
                 //差值
                 BigDecimal differenceAmount = goodsLoading.getLoadAmount().subtract(goodsLoading.getAmount());
-//                BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? differenceAmount : differenceAmount.add(order.getEntrustAmount());
                 BigDecimal totalEntrustAmount = NumberConstant.ZERO_TWO.compareTo(order.getEntrustAmount()) == 0 ? differenceAmount : differenceAmount.add(order.getEntrustAmount());
-//                BigDecimal totalEntrustAmount = new BigDecimal("0.00");
-//                if (NumberConstant.ZERO_TWO.compareTo(order.getEntrustAmount()) == 0) {
-//                    totalEntrustAmount = differenceAmount;
-//                } else {
-//                    totalEntrustAmount = differenceAmount.add(order.getEntrustAmount());
-//                }
                 if (goodsLoading.getUnit().equals(order.getUnit())) {
                     order.setEntrustAmount(totalEntrustAmount).setUpdateBy(updateBy);
                     kwoTradeOrderService.updateById(order);

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtAcceptCarriageOrderController.java

@@ -409,7 +409,7 @@ public class KwtAcceptCarriageOrderController {
     }
 
     /**
-     * 承运订单数据导入(外部数据)
+     * 承运订单数据导入(外部数据)-批量导入
      *
      * @param file 文件
      * @return  响应结果

+ 3 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderAmountMapper.java

@@ -3,6 +3,7 @@ package com.sckw.transport.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.transport.model.KwtLogisticsOrderAddress;
 import com.sckw.transport.model.KwtLogisticsOrderAmount;
+import com.sckw.transport.model.vo.LogisticsOrderFinishAmountVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,4 +22,6 @@ public interface KwtLogisticsOrderAmountMapper extends BaseMapper<KwtLogisticsOr
     KwtLogisticsOrderAmount findByLAddressId(@Param("lAddressId") Long lAddressId);
 
     List<KwtLogisticsOrderAmount> findByLOrderId(@Param("lOrderId") Long lOrderId);
+
+    List<LogisticsOrderFinishAmountVo> countAddressAmount(@Param("id") Long id,@Param("addressType") Integer addressType);
 }

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderLineFreightRateMapper.java

@@ -2,7 +2,11 @@ package com.sckw.transport.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.transport.model.KwtLogisticsOrderLineFreightRate;
+import com.sckw.transport.model.vo.LineFreightRateVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author zk
@@ -11,4 +15,10 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface KwtLogisticsOrderLineFreightRateMapper extends BaseMapper<KwtLogisticsOrderLineFreightRate> {
+    /**
+     * 订单id 获取线路信息
+     * @param orderId
+     * @return
+     */
+    List<LineFreightRateVo> selectListByOrderId(@Param("orderId") Long orderId);
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -85,7 +85,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param id
      * @return
      */
-    List<LogisticsOrderDto> selectOrderCountByTorderId(@Param("id") String id, @Param("type") String type);
+    List<LogisticsOrderDto> selectOrderCountByOrderId(@Param("id") String id, @Param("type") String type);
 
     /**
      * @param id   贸易订单id

+ 37 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportRemoteLineFreightRateServiceImpl.java

@@ -0,0 +1,37 @@
+package com.sckw.transport.dubbo;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.transport.api.dubbo.TransportRemoteLineFreightRateService;
+import com.sckw.transport.dao.KwtLogisticsOrderLineFreightRateMapper;
+import com.sckw.transport.model.KwtLogisticsOrderLineFreightRate;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 物流订单线路dubbo实现
+ * @date 2024-03-13 10:03:45
+ */
+@Slf4j
+@Service
+@DubboService(group = "design", version = "1.0.0")
+public class TransportRemoteLineFreightRateServiceImpl implements TransportRemoteLineFreightRateService {
+
+    @Autowired
+    KwtLogisticsOrderLineFreightRateMapper lineFreightRateMapper;
+
+    @Override
+    public Boolean getRemoteLineFreightRateIsUse(List<Long> lineFreightRateIds) {
+        int count = lineFreightRateMapper.selectCount(new LambdaQueryWrapper<KwtLogisticsOrderLineFreightRate>()
+                .in(KwtLogisticsOrderLineFreightRate::getLineFreightRateId, lineFreightRateIds)
+                .eq(KwtLogisticsOrderLineFreightRate::getDelFlag, 0)).intValue();
+        if (count > 0) {
+            return true;
+        }
+        return false;
+    }
+}

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

@@ -20,6 +20,11 @@ public class KwtLogisticsOrderLineFreightRate extends BaseModel {
      */
     private Long lOrderId;
 
+    /**
+     * 线路id
+     */
+    private Long lineFreightRateId;
+
     /**
      * 线路名称
      */
@@ -99,4 +104,9 @@ public class KwtLogisticsOrderLineFreightRate extends BaseModel {
      * 结算货物数量
      */
     private BigDecimal settlementAmount;
+
+    /**
+     * 物流托运填写的量/自建订单填写的量
+     */
+    private BigDecimal transportAmount;
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/ExeclDTO/LogisticsOrderExcelImportDTO.java

@@ -90,7 +90,7 @@ public class LogisticsOrderExcelImportDTO implements Serializable {
     /**
      * 商品价值(扣亏货值)单位
      */
-    @NotBlank(message = "扣亏货值不能为空")
+//    @NotBlank(message = "扣亏货值不能为空")
     private String goodsPriceUnit;
     /**
      * 计划发货时间

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LineFreightDto.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @author lfdc
@@ -24,4 +25,11 @@ public class LineFreightDto implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonFormat(shape = JsonFormat.Shape.STRING)
     private Long lineFreightId;
+
+    /**
+     * 线路id
+     */
+//    @JsonSerialize(using = ToStringSerializer.class)
+//    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private BigDecimal amount;
 }

+ 46 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderFinishDto.java

@@ -0,0 +1,46 @@
+package com.sckw.transport.model.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 物流完结订单v4.2
+ * @date 2024-03-12 09:03:16
+ */
+@Data
+public class LogisticsOrderFinishDto implements Serializable {
+    /**
+     * 数据id
+     */
+    @NotNull(message = "单据id不能为空")
+    private Long id;
+
+    /**
+     * 备注
+     */
+    @Length(max = 200,message = "单据编号长度错误最大长度:{max}")
+    private String remark;
+
+    /**
+     * 装卸货信息
+     */
+    private List<OrderGoodsLoadingDto> loading;
+
+
+    /**
+     * 装卸货信息
+     */
+    private List<LogisticsOrderLineFreightRateDto> lineFreightRate;
+
+
+    /**
+     * 运输趟次
+     */
+    private Integer count;
+
+}

+ 24 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderLineFreightRateDto.java

@@ -0,0 +1,24 @@
+package com.sckw.transport.model.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @description 完结订单,线路数据
+ * @date 2024-03-12 09:03:24
+ */
+@Data
+public class LogisticsOrderLineFreightRateDto implements Serializable {
+    /**
+     * 线路id
+     */
+    private Long lineFreightRateId;
+
+    /**
+     * 数量
+     */
+    private BigDecimal amount;
+}

+ 31 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LineFreightRateVo.java

@@ -0,0 +1,31 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author lfdc
+ * @description 线路信息返回vo-4.2
+ * @date 2024-03-13 09:03:58
+ */
+@Data
+public class LineFreightRateVo implements Serializable {
+
+    /**
+     * 数据主键
+     */
+    private Long id;
+    /**
+     * 线路id
+     */
+    private Long lineFreightId;
+    /**
+     * 线路名称
+     */
+    private String lineFreightName;
+    /**
+     * 结算数量
+     */
+    private Integer lineFreightCount;
+}

+ 45 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsOrderFinishAmountVo.java

@@ -0,0 +1,45 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @description 物流订单完结统计订单下完结量V4.2
+ * @date 2024-03-12 15:03:29
+ */
+@Data
+public class LogisticsOrderFinishAmountVo implements Serializable {
+
+    /**
+     * 物流订单id
+     */
+    private Long lOrderId;
+
+    /**
+     * 贸易订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 物流订单地址id
+     */
+    private Long lOrderAddressId;
+
+    /**
+     * 贸易订单地址id
+     */
+    private Long tOrderAddressId;
+
+    /**
+     * 完成量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 完成量
+     */
+    private BigDecimal unloadAmount;
+}

+ 6 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishVO.java

@@ -1,6 +1,5 @@
 package com.sckw.transport.model.vo;
 
-import com.sckw.transport.model.dto.OrderGoodsLoadingDto;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -47,5 +46,10 @@ public class OrderFinishVO {
     /**
      * 辅助单位信息
      */
-    List<OrderGoodsLoadingVo> assistUnit;
+    private List<OrderGoodsLoadingVo> assistUnit;
+
+    /**
+     * 卸货数量
+     */
+    private List<LineFreightRateVo> lineFreightRate;
 }

+ 3 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderGoodsLoadingVo.java

@@ -1,6 +1,8 @@
 package com.sckw.transport.model.vo;
 
 import lombok.Data;
+
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -9,7 +11,7 @@ import java.math.BigDecimal;
  * @date 2023/12/15 0015
  */
 @Data
-public class OrderGoodsLoadingVo {
+public class OrderGoodsLoadingVo implements Serializable {
 
     /**
      * 装卸货单位

+ 10 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/Import/KwtAcceptCarriageOrderImportService.java

@@ -703,8 +703,12 @@ public class KwtAcceptCarriageOrderImportService {
         //当前合理损耗  文档导入默认使用 千分比 ‰
         order.setLossUnit(String.valueOf(TaxRateTypeEnum.PERCENT.getCode()));
         order.setGoodsPrice(excelImport.getGoodsPrice() == null ? null : excelImport.getGoodsPrice());
-        String goodsPriceUnit = excelImport.getGoodsPriceUnit().trim();
-        order.setGoodsPriceUnit(priceTypeEnum.get(goodsPriceUnit) == null ? null : priceTypeEnum.get(goodsPriceUnit).getValue());
+        if (excelImport.getGoodsPriceUnit() != null) {
+            String goodsPriceUnit = excelImport.getGoodsPriceUnit().trim();
+            order.setGoodsPriceUnit(priceTypeEnum.get(goodsPriceUnit) == null ? null : priceTypeEnum.get(goodsPriceUnit).getValue());
+        } else {
+            order.setGoodsPriceUnit("元/" + excelImport.getAmountUnit().trim());
+        }
         order.setStartTime(org.apache.commons.lang3.ObjectUtils.isEmpty(excelImport.getStartTime()) ?
                 null : DateUtil.strToTime(excelImport.getStartTime() + " 00:00:00"));
         order.setEndTime(org.apache.commons.lang3.ObjectUtils.isEmpty(excelImport.getEndTime()) ?
@@ -761,7 +765,7 @@ public class KwtAcceptCarriageOrderImportService {
         List<String> unitTypeEnum = unitTypeMap.values().stream().map(SysDictResDto::getLabel).distinct().collect(Collectors.toList());
 
 
-        int number = 0;
+        int number = 3;
         for (int i = 0; i < driverExcels.size(); i++) {
             number = number + 1;
             LogisticsOrderExcelImportDTO excelImport = driverExcels.get(i);
@@ -786,7 +790,7 @@ public class KwtAcceptCarriageOrderImportService {
             }
 
             String goodsName = excelImport.getGoodsName().trim();
-            if (StringUtils.isBlank(goodsName)){
+            if (StringUtils.isBlank(goodsName)) {
                 throw new RuntimeException("第" + number + "行货物信息必填写");
             }
 //            KwpGoods goods = goodsInfoService.getGoodsByGoodsName(goodsName);
@@ -840,8 +844,8 @@ public class KwtAcceptCarriageOrderImportService {
             if (!tradeEnum.contains(payment)) {
                 throw new RuntimeException("第" + number + "行支付方式不存在");
             }
-            String unloadAddressName = excelImport.getUnloadAddress();
-            String loadAddressName = excelImport.getLoadAddress();
+            String unloadAddressName = excelImport.getUnloadAddress().trim();
+            String loadAddressName = excelImport.getLoadAddress().trim();
             Long id = acceptCarriageEnterprise.getId();
             List<Long> idsList = new ArrayList<>();
             idsList.add(id);

+ 43 - 35
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtCommonService.java

@@ -40,6 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
+
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
@@ -88,7 +89,7 @@ public class KwtCommonService {
      * 组装返回数据
      *
      * @param mappedResults 请求参数
-     * @param arrayList 请求参数
+     * @param arrayList     请求参数
      */
     public List<TableTops> packageReturnStatistics(List<com.sckw.mongo.model.TableTops> mappedResults, List<TableTops> arrayList) {
         List<String> codeList = LogisticsOrderEnum.getCodeStringList();
@@ -194,7 +195,8 @@ public class KwtCommonService {
 
     /**
      * 修改合同履约量
-     * @param loadAmount 装货量
+     *
+     * @param loadAmount   装货量
      * @param unloadAmount 卸货量
      */
     public void updatePerformed(KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount, BigDecimal unloadAmount) {
@@ -209,12 +211,14 @@ public class KwtCommonService {
             actualAmount = unloadAmount;
         } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(billingMode)) {
             // 物流订单运单趟次数量
-            Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN){{
+            Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN) {{
                 put("upperlOrderId", logisticsOrder.getId());
                 put("passStatus", Global.NUMERICAL_ONE);
             }};
             WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
             actualAmount = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());
+        } else if (DictEnum.CHARGING_TYPE_4.getValue().equals(billingMode)) {
+            log.debug("“该方式不处理合同");
         } else {
             throw new BusinessException("单据计费方式错误!");
         }
@@ -227,6 +231,7 @@ public class KwtCommonService {
     /**
      * @desc 查询用户信息
      * @param userIds 企业用户ID+司机ID
+     * @desc 查询用户信息
      * @author zk
      * @date 2023/9/7
      **/
@@ -251,16 +256,13 @@ public class KwtCommonService {
     }
 
 
-
-
-
     public void importExcelToMessage(KwtLogisticsOrderUnit consignUnit, KwtLogisticsOrderUnit carriageUnit,
-                                               String number, Long createBy, Long entId,
-                                               String pcConsignUrl, String appConsignUrl,
-                                               String pcCarriageUrl, String appCarriageUrl,
-                                               MessageEnum consignMessageEnum,
-                                               MessageEnum carriageMessageEnum,
-                                               String type) {
+                                     String number, Long createBy, Long entId,
+                                     String pcConsignUrl, String appConsignUrl,
+                                     String pcCarriageUrl, String appCarriageUrl,
+                                     MessageEnum consignMessageEnum,
+                                     MessageEnum carriageMessageEnum,
+                                     String type) {
         boolean flag = createBy.equals(consignUnit.getContactsId()) || createBy.equals(carriageUnit.getContactsId());
         Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN);
         map.put("number", number);
@@ -285,6 +287,7 @@ public class KwtCommonService {
 
     /**
      * 发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]
+     *
      * @param consignUnit    托运单位
      * @param carriageUnit   承运单位
      * @param orderNo        单据号
@@ -327,11 +330,12 @@ public class KwtCommonService {
 
     /**
      * 发送消息
-     * @param createBy 创建人
-     * @param entId 企业ID
-     * @param map 消息内容
-     * @param pcUrl pc调整地址
-     * @param appUrl app调整地址
+     *
+     * @param createBy    创建人
+     * @param entId       企业ID
+     * @param map         消息内容
+     * @param pcUrl       pc调整地址
+     * @param appUrl      app调整地址
      * @param messageEnum 消息模板
      */
     public void sendLogisticsCreateByMessage(Long createBy, Long entId, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
@@ -355,17 +359,18 @@ public class KwtCommonService {
                 .setUserInfos(userInfos)
                 .setCreateBy(LoginUserHolder.getUserId());
         log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-创建人:{}", JSON.toJSONString(msg));
-        log.info("发起物流托运-企业:{},消息内容:{},-创建人:{},所有消息:{}", userCacheResDto.getEntInfo().getFirmName(),messageEnum.getContent(),name,JSON.toJSONString(msg));
+        log.info("发起物流托运-企业:{},消息内容:{},-创建人:{},所有消息:{}", userCacheResDto.getEntInfo().getFirmName(), messageEnum.getContent(), name, JSON.toJSONString(msg));
         streamBridge.send("sckw-message", JSON.toJSONString(msg));
     }
 
     /**
      * 给业务联系人发消息[承运方]
+     *
      * @param carriageUnit 承运单位
-     * @param map 消息参数
-     * @param pcUrl  pc端调整地址
-     * @param appUrl app调整地址
-     * @param messageEnum 消息模板
+     * @param map          消息参数
+     * @param pcUrl        pc端调整地址
+     * @param appUrl       app调整地址
+     * @param messageEnum  消息模板
      */
     public void sendLogisticsCarriageMessage(KwtLogisticsOrderUnit carriageUnit, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
         //给业务联系人发消息[承运方]
@@ -386,16 +391,17 @@ public class KwtCommonService {
                 .setUserInfos(userInfoList)
                 .setCreateBy(LoginUserHolder.getUserId());
         log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-[承运方]-业务联系人:{}", JSON.toJSONString(sckwMessage));
-        log.info("[承运方]-companyName:{}-消息:{}", carriageUnit.getFirmName(),messageEnum.getContent());
+        log.info("[承运方]-companyName:{}-消息:{}", carriageUnit.getFirmName(), messageEnum.getContent());
         streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
     }
 
     /**
      * 给业务联系人发消息[托运方]
+     *
      * @param consignUnit 发货单位
-     * @param map 消息参数
-     * @param pcUrl pc端调整地址
-     * @param appUrl app调整地址
+     * @param map         消息参数
+     * @param pcUrl       pc端调整地址
+     * @param appUrl      app调整地址
      * @param messageEnum 消息模板
      */
     public void sendLogisticsConsignMessage(KwtLogisticsOrderUnit consignUnit, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
@@ -417,15 +423,16 @@ public class KwtCommonService {
                 .setUserInfos(list)
                 .setCreateBy(LoginUserHolder.getUserId());
         log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-[托运方]-业务联系人:{}", JSON.toJSONString(message));
-        log.info("[托运方]-companyName:{}-消息:{}", consignUnit.getFirmName(),messageEnum.getContent());
+        log.info("[托运方]-companyName:{}-消息:{}", consignUnit.getFirmName(), messageEnum.getContent());
         streamBridge.send("sckw-message", JSON.toJSONString(message));
     }
 
     /**
      * 给承运和托运双方发送消息
-     * @param checkUnit 托运单位
+     *
+     * @param checkUnit    托运单位
      * @param carriageUnit 承运单位
-     * @param map 消息参数
+     * @param map          消息参数
      */
     public void sendMessageLogistics(KwtLogisticsOrderUnit checkUnit, KwtLogisticsOrderUnit carriageUnit, Map map) {
         //给业务联系人发消息[承运方]
@@ -496,9 +503,10 @@ public class KwtCommonService {
 
     /**
      * 推送消息
-     * @param consignUnit 托运单位
-     * @param carriageUnit 承运单位
-     * @param map          消息参数
+     *
+     * @param consignUnit        托运单位
+     * @param carriageUnit       承运单位
+     * @param map                消息参数
      * @param consignMessageEnum 消息模板
      */
     private void sendMessagePublicLogistics(KwtLogisticsOrderUnit consignUnit, KwtLogisticsOrderUnit carriageUnit, Map<String, Object> map, MessageEnum consignMessageEnum) {
@@ -543,9 +551,9 @@ public class KwtCommonService {
     }
 
 
-
     /**
      * 推送消息
+     *
      * @param consignUnit         托运单位
      * @param carriageUnit        承运单位
      * @param map                 参数
@@ -622,10 +630,10 @@ public class KwtCommonService {
     }
 
     /**
-     * @desc 计算扣亏量
      * @param loadAmount    装货量
      * @param deficitAmount 亏吨量
      * @param loss          合理损耗
+     * @desc 计算扣亏量
      **/
     public BigDecimal deficitAmount(BigDecimal loadAmount, BigDecimal deficitAmount, BigDecimal entrustAmount, BigDecimal loss, String lossUnit) {
         //亏吨<=0
@@ -667,10 +675,10 @@ public class KwtCommonService {
     }
 
     /**
-     * @desc 计算扣亏量
      * @param loadAmount    装货量
      * @param deficitAmount 亏吨量
      * @param loss          合理损耗
+     * @desc 计算扣亏量
      * @author zk
      * @date 2023/7/27
      **/

+ 26 - 11
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtConsignOrderService.java

@@ -120,6 +120,12 @@ public class KwtConsignOrderService {
     @Autowired
     public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
 
+    @Autowired
+    public KwtWaybillOrderSubtaskMapper waybillOrderSubtaskMapper;
+
+    @Autowired
+    public KwtLogisticsOrderLineFreightRateMapper lineFreightRateMapper;
+
     @Autowired
     public KwtLogisticsOrderAddressMapper kwtLogisticsOrderAddressMapper;
 
@@ -352,15 +358,15 @@ public class KwtConsignOrderService {
         Map<String, String> unitDictData = commonService.getDictData(DictTypeEnum.UNIT_TYPE.getType());
         for (String id : list) {
             KwtLogisticsOrder order = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                            .eq(StringUtils.isNotBlank(id), KwtLogisticsOrder::getId, Long.parseLong(id))
-                    );
+                    .eq(StringUtils.isNotBlank(id), KwtLogisticsOrder::getId, Long.parseLong(id))
+            );
             if (ObjectUtils.isEmpty(order)) {
                 continue;
             }
             List<KwtWaybillOrder> kwtWaybillOrders = kwtWaybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
-                            .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrder::getLOrderId, order.getId())
-                            .orderByDesc(KwtWaybillOrder::getCreateTime)
-                    );
+                    .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrder::getLOrderId, order.getId())
+                    .orderByDesc(KwtWaybillOrder::getCreateTime)
+            );
             if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
                 for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
                     CarWaybillVO carWaybillVo = new CarWaybillVO();
@@ -630,15 +636,15 @@ public class KwtConsignOrderService {
         /**趟次数据*/
         for (Long id : list) {
             KwtLogisticsOrder order = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                            .eq(StringUtils.isNotBlank(id), KwtLogisticsOrder::getId, id)
-                   );
+                    .eq(StringUtils.isNotBlank(id), KwtLogisticsOrder::getId, id)
+            );
             if (ObjectUtils.isEmpty(order)) {
                 continue;
             }
             List<KwtWaybillOrder> kwtWaybillOrders = kwtWaybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
-                            .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrder::getLOrderId, order.getId())
-                            .orderByDesc(KwtWaybillOrder::getCreateTime)
-                    );
+                    .eq(StringUtils.isNotBlank(order.getId()), KwtWaybillOrder::getLOrderId, order.getId())
+                    .orderByDesc(KwtWaybillOrder::getCreateTime)
+            );
             if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
                 for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
                     CarWaybillVO carWaybillVo = new CarWaybillVO();
@@ -1284,13 +1290,22 @@ public class KwtConsignOrderService {
             });
         }
 
-        orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
+//        orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
+        List<Integer> orderStatus = new ArrayList<>() {{
+            add(CarWaybillEnum.APPROVAL_PASS.getCode());
+        }};
+        orderFinishVO.setNumber(waybillOrderSubtaskMapper.selectCount(
+                new LambdaQueryWrapper<KwtWaybillOrderSubtask>()
+                        .eq(KwtWaybillOrderSubtask::getLOrderId, Long.parseLong(orderId))
+                        .eq(KwtWaybillOrderSubtask::getDelFlag, 0)
+                        .in(KwtWaybillOrderSubtask::getStatus,orderStatus)).intValue());
         orderFinishVO.setUnit(logisticsOrder.getUnit());
         orderFinishVO.setUnitName(unitMap != null ? unitMap.get(logisticsOrder.getUnit()) : null);
         orderFinishVO.setAmount(logisticsOrder.getAmount());
         orderFinishVO.setLoadAmount(logisticsOrder.getTotalLoadAmount());
         orderFinishVO.setUnloadAmount(logisticsOrder.getTotalUnloadAmount());
         orderFinishVO.setAssistUnit(assistUnit);
+        orderFinishVO.setLineFreightRate(lineFreightRateMapper.selectListByOrderId(Long.parseLong(orderId)));
         return HttpResult.ok(orderFinishVO);
     }
 

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

@@ -901,7 +901,7 @@ public class KwtLogisticsConsignmentService {
         BigDecimal residue = NumberConstant.ZERO_TWO;
         if (flag) {
             count = getLogisticsOrderCount(id, type);
-            list = kwtLogisticsOrderMapper.selectOrderCountByTorderId(id, type);
+            list = kwtLogisticsOrderMapper.selectOrderCountByOrderId(id, type);
             /**数据统计*/
             for (LogisticsOrderDto logisticsOrderDTO : list) {
                 amount = amount.add(logisticsOrderDTO.getAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getAmount());

+ 29 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java

@@ -31,6 +31,7 @@ import com.sckw.manage.api.model.dto.res.FindEntCooperateResVo;
 import com.sckw.manage.api.model.dto.res.LineFreightAddressRes;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
+import com.sckw.order.api.dubbo.RemoteTradeOrderAmountService;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.*;
 import com.sckw.product.api.dubbo.GoodsInfoService;
@@ -100,6 +101,9 @@ public class KwtLogisticsOrderConsignmentService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 80000)
     TradeOrderInfoService tradeOrderInfoService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 80000)
+    RemoteTradeOrderAmountService tradeOrderAmountService;
+
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     RemoteFleetService remoteFleetService;
 
@@ -224,6 +228,21 @@ public class KwtLogisticsOrderConsignmentService {
             log.info("{}生成物流托运失败!,返回信息:{}", tradeOrder.getTOrderNo(), JSONObject.toJSONString(httpResult));
             throw new BusinessException("{" + tradeOrder.getTOrderNo() + "}生成物流托运失败!" + httpResult.getMsg());
         }
+        long tOrderId = Long.parseLong(dto.getTOrderId());
+        List<AddressInfoDto> addressInfo = dto.getAddressInfo();
+        addressInfo.forEach(addressInfoDto -> {
+            UpdateAddressEntrustAmountParam param = new UpdateAddressEntrustAmountParam();
+            param.setTOrderId(tOrderId);
+            param.setTAddressId(Long.parseLong(addressInfoDto.getAddressId()));
+            param.setEntrustAmount(addressInfoDto.getAmount());
+            param.setUpdateBy(LoginUserHolder.getUserId());
+            param.setUpdateByName(LoginUserHolder.getUserName());
+            HttpResult result = tradeOrderAmountService.updateAddressEntrustAmount(param);
+            if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+                log.info("{}生成物流托运失败!,返回信息:{}", tradeOrder.getTOrderNo(), JSONObject.toJSONString(httpResult));
+                throw new BusinessException("{" + tradeOrder.getTOrderNo() + "}生成物流托运失败!" + httpResult.getMsg());
+            }
+        });
         pushConsoleMessage(dto, lOrderNo);
     }
 
@@ -239,6 +258,7 @@ public class KwtLogisticsOrderConsignmentService {
 
     private void saveLogisticsOrderLineFreight(LogisticsConsignmentDto dto, Long orderId) {
         List<LineFreightDto> lineFreightList = dto.getLineFreightList();
+        Map<Long, BigDecimal> lineFreightMap = lineFreightList.stream().collect(Collectors.toMap(LineFreightDto::getLineFreightId, LineFreightDto::getAmount));
         List<Long> lineFreightId = lineFreightList.stream().map(t -> t.getLineFreightId()).distinct().collect(Collectors.toList());
         Map<Long, LineFreightAddressRes> resMap = manageService.findLineFreightAddress(lineFreightId);
         if (resMap != null) {
@@ -246,6 +266,7 @@ public class KwtLogisticsOrderConsignmentService {
                 if (resMap.get(id) != null) {
                     LineFreightAddressRes res = resMap.get(id);
                     KwtLogisticsOrderLineFreightRate lineFreightRate = new KwtLogisticsOrderLineFreightRate();
+                    lineFreightRate.setLineFreightRateId(res.getId());
                     lineFreightRate.setLOrderId(orderId);
                     lineFreightRate.setName(res.getName());
                     lineFreightRate.setLoadName(res.getLoadName());
@@ -264,6 +285,7 @@ public class KwtLogisticsOrderConsignmentService {
                     lineFreightRate.setTransportPrice(res.getTransportPrice());
                     BigDecimal defultBigDecimal = new BigDecimal("0.00");
                     lineFreightRate.setSettlementAmount(defultBigDecimal);
+                    lineFreightRate.setTransportAmount(lineFreightMap.get(id));
                     lineFreightRate.setId(new IdWorker(NumberConstant.FOUR).nextId());
                     lineFreightRate.setRemark(res.getRemark());
                     lineFreightRate.setStatus(res.getStatus());
@@ -866,6 +888,7 @@ public class KwtLogisticsOrderConsignmentService {
 
     private void saveCreateLogisticsOrderLineFreight(AddLogisticsOrderParam addOrderDTO, Long lOrderId) {
         List<LineFreightDto> lineFreightList = addOrderDTO.getLineFreightList();
+        Map<Long, BigDecimal> lineFreightMap = lineFreightList.stream().collect(Collectors.toMap(LineFreightDto::getLineFreightId, LineFreightDto::getAmount));
         List<Long> lineFreightId = lineFreightList.stream().map(t -> t.getLineFreightId()).distinct().collect(Collectors.toList());
         Map<Long, LineFreightAddressRes> resMap = manageService.findLineFreightAddress(lineFreightId);
         if (resMap != null) {
@@ -873,6 +896,7 @@ public class KwtLogisticsOrderConsignmentService {
                 if (resMap.get(id) != null) {
                     LineFreightAddressRes res = resMap.get(id);
                     KwtLogisticsOrderLineFreightRate lineFreightRate = new KwtLogisticsOrderLineFreightRate();
+                    lineFreightRate.setLineFreightRateId(res.getId());
                     lineFreightRate.setLOrderId(lOrderId);
                     lineFreightRate.setName(res.getName());
                     lineFreightRate.setLoadName(res.getLoadName());
@@ -891,6 +915,7 @@ public class KwtLogisticsOrderConsignmentService {
                     lineFreightRate.setTransportPrice(res.getTransportPrice());
                     BigDecimal defultBigDecimal = new BigDecimal("0.00");
                     lineFreightRate.setSettlementAmount(defultBigDecimal);
+                    lineFreightRate.setTransportAmount(lineFreightMap.get(id));
                     lineFreightRate.setId(new IdWorker(NumberConstant.FOUR).nextId());
                     lineFreightRate.setRemark(res.getRemark());
                     lineFreightRate.setStatus(res.getStatus());
@@ -1500,9 +1525,9 @@ public class KwtLogisticsOrderConsignmentService {
 
                 /**数据发送至消息列表*/
                 String type = bo.getType();
-                if ("1".equals(type)){
+                if ("1".equals(type)) {
                     /**托运订单*/
-                }else if ("2".equals(type)){
+                } else if ("2".equals(type)) {
                     /**承运订单*/
                     EntCacheResDto consignentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getAcceptCompanyId()));
                     EntCacheResDto checkentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getConsignCompanyId()));
@@ -1641,6 +1666,7 @@ public class KwtLogisticsOrderConsignmentService {
 
     private void insertLogisticsOrderLineFreight(LogisticsOrderSubcontractDto dto, Long orderId) {
         List<LineFreightDto> lineFreightList = dto.getLineFreightList();
+        Map<Long, BigDecimal> lineFreihtMap = lineFreightList.stream().collect(Collectors.toMap(LineFreightDto::getLineFreightId, LineFreightDto::getAmount));
         List<Long> lineFreightId = lineFreightList.stream().map(t -> t.getLineFreightId()).distinct().collect(Collectors.toList());
         Map<Long, LineFreightAddressRes> resMap = manageService.findLineFreightAddress(lineFreightId);
         if (resMap != null) {
@@ -1666,6 +1692,7 @@ public class KwtLogisticsOrderConsignmentService {
                     lineFreightRate.setTransportPrice(res.getTransportPrice());
                     BigDecimal defultBigDecimal = new BigDecimal("0.00");
                     lineFreightRate.setSettlementAmount(defultBigDecimal);
+                    lineFreightRate.setTransportAmount(lineFreihtMap.get(id));
                     lineFreightRate.setId(new IdWorker(NumberConstant.FOUR).nextId());
                     lineFreightRate.setRemark(res.getRemark());
                     lineFreightRate.setStatus(res.getStatus());

+ 24 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java

@@ -1,7 +1,6 @@
 package com.sckw.transport.service;
 
 import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
@@ -17,10 +16,7 @@ import com.sckw.transport.dao.*;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtLogisticsOrderGoods;
 import com.sckw.transport.model.KwtLogisticsOrderGoodsUnit;
-import com.sckw.transport.model.dto.AddOrderDTO;
-import com.sckw.transport.model.dto.LogisticsConsignmentDto;
-import com.sckw.transport.model.dto.OrderGoodsLoadingDto;
-import com.sckw.transport.model.dto.OrderManualCompletionDto;
+import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.GoodsUnitParam;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.GoodsUnitVo;
@@ -262,6 +258,29 @@ public class KwtLogisticsOrderGoodsService {
         }
     }
 
+    /**
+     * 完结物流订单更新商品辅助单位
+     * @param params 完结参数
+     */
+    public void editLogisticsOrderGoodsTotalLoadingV42(LogisticsOrderFinishDto params) {
+        //辅助单位
+        Map<String, Object> queryParams = new HashMap<>(NumberConstant.SIXTEEN);
+        queryParams.put("lOrderId", params.getId());
+        List<KwtLogisticsOrderGoodsUnit> assistUnit = goodsUnitMapper.findList(queryParams);
+        //数据处理
+        List<OrderGoodsLoadingDto> loading = params.getLoading();
+        for (KwtLogisticsOrderGoodsUnit goodsUnit:assistUnit) {
+            for (OrderGoodsLoadingDto goodsLoading : loading) {
+                if (goodsLoading.getUnit().equals(goodsUnit.getUnit())) {
+                    //更新物流订单商品辅助单位-总装卸货量
+                    goodsUnit.setTotalLoadAmount(goodsLoading.getLoadAmount());
+                    goodsUnit.setTotalUnloadAmount(goodsLoading.getUnloadAmount());
+                    goodsUnitMapper.updateById(goodsUnit);
+                }
+            }
+        }
+    }
+
     /**
      * 物流托运校验贸易订单可派量
      *

+ 228 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java

@@ -20,6 +20,7 @@ import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
+import com.sckw.order.api.dubbo.RemoteTradeOrderAmountService;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.*;
 import com.sckw.redis.config.RedisLockUtil;
@@ -34,13 +35,11 @@ import com.sckw.transport.api.model.vo.LogisticsOrderVO;
 import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
-import com.sckw.transport.model.dto.CancelOrderDTO;
-import com.sckw.transport.model.dto.DocumentParamDTO;
-import com.sckw.transport.model.dto.OrderGoodsLoadingDto;
-import com.sckw.transport.model.dto.OrderManualCompletionDto;
+import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.ContractParam;
 import com.sckw.transport.model.param.LogisticsOrderParam;
 import com.sckw.transport.model.vo.*;
+import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -69,6 +68,9 @@ public class KwtTransportCommonService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 10000)
     TradeOrderInfoService tradeOrderInfoService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 10000)
+    RemoteTradeOrderAmountService tradeOrderAmountService;
+
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 10000)
     RemoteContractService remoteContractService;
 
@@ -1010,6 +1012,27 @@ public class KwtTransportCommonService {
         return BigDecimal.ZERO;
     }
 
+
+    /**
+     * @param params 完结参数
+     * @param unit   单位
+     * @param type   装卸货类型
+     * @desc 获取装卸货量
+     * @author zk
+     * @date 2023/9/18
+     **/
+    public BigDecimal getLoadingV42(LogisticsOrderFinishDto params, String unit, int type) {
+        List<OrderGoodsLoadingDto> loadings = params.getLoading();
+        if (CollectionUtils.isNotEmpty(loadings)) {
+            for (OrderGoodsLoadingDto loading : loadings) {
+                if (loading.getUnit().equals(unit)) {
+                    return type == NumberConstant.ONE ? loading.getLoadAmount() : loading.getUnloadAmount();
+                }
+            }
+        }
+        return BigDecimal.ZERO;
+    }
+
     /**
      * 物流订单完结订单-修改物流表+新增物流状态记录
      *
@@ -1433,4 +1456,205 @@ public class KwtTransportCommonService {
         return null;
     }
 
+
+    /**
+     * @param params 手动完结参数
+     * @desc 完结物流订单-采购/销售/托运/承运-v4.2
+     * @author lfdc
+     * @date 2024/03/08
+     **/
+    @GlobalTransactional
+    public HttpResult logisticsOrderFinish(LogisticsOrderFinishDto params) {
+        /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
+        /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
+        Long id = params.getId();
+        String key = String.format(RedisConstant.LOGISTICS_ORDER_FINISH_KEY, params.getId());
+        if (redisLockUtil.tryLock(key)) {
+            try {
+                KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectById(id);
+                if (logisticsOrder == null) {
+                    throw new BusinessException("完结订单-物流单据不存在!");
+                }
+                String billingMode = logisticsOrder.getBillingMode();
+                if (DictEnum.CHARGING_TYPE_4.getValue().equals(billingMode)) {
+                    List<LogisticsOrderLineFreightRateDto> lineFreightRate = params.getLineFreightRate();
+                    if (CollectionUtils.isEmpty(lineFreightRate)) {
+                        throw new BusinessException("按里程计费时,数量不能为空");
+                    }
+                }
+                /**订单状态验证*/
+                if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
+                        && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
+                    throw new BusinessException("当前订单并不属于【待派车】,【运输中】状态");
+                }
+                //验证当前物流订单是否还存在进行的车辆运单
+                boolean flag = commonService.judgmentWaybillOrderIsFinish(String.valueOf(id));
+                if (flag) {
+                    throw new BusinessException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕!");
+                }
+
+                //修改单据本身数据
+                BigDecimal loadAmount = getLoadingV42(params, logisticsOrder.getUnit(), NumberConstant.ONE);
+                BigDecimal unloadAmount = getLoadingV42(params, logisticsOrder.getUnit(), NumberConstant.TWO);
+                BigDecimal ignoreAmount = logisticsOrder.getAmount().subtract(loadAmount == null ? NumberConstant.ZERO_TWO : logisticsOrder.getLoadAmount());
+                logisticsOrder.setTotalLoadAmount(loadAmount);
+                logisticsOrder.setTotalUnloadAmount(unloadAmount);
+                logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+                logisticsOrder.setUpdateTime(new Date());
+                logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+                logisticsOrder.setIgnoreAmount(ignoreAmount);
+                logisticsOrderMapper.updateById(logisticsOrder);
+                //物流订单状态记录
+                updateLogisticOrderTrack(logisticsOrder.getId(), LogisticsOrderEnum.HAVE_FINISHED.getCode(), params.getRemark());
+                //修改mongodb的数据
+                updateMongoDbByLogisticsOrder(logisticsOrder);
+                //更新商品辅助单位信息
+                logisticsOrderGoodsService.editLogisticsOrderGoodsTotalLoadingV42(params);
+
+                //获取物流订单下的子单
+                /**完结订单-对应物流订单下子订单都要进行完结*/
+                List<KwtLogisticsOrder> kwtLogisticsOrders = logisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                        .eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO)
+                        .apply(id != null, "FIND_IN_SET ('" + id + "', pids)").ne(KwtLogisticsOrder::getId, id));
+                if (!CollectionUtils.isEmpty(kwtLogisticsOrders)) {
+                    //修改单据剩余运输量
+                    kwtLogisticsOrders.forEach(kwtLogisticsOrder -> {
+                        BigDecimal subtract = kwtLogisticsOrder.getAmount().subtract(kwtLogisticsOrder.getTotalLoadAmount());
+                        //更新忽略剩余量
+                        updateLogisticOrderAndTrack(kwtLogisticsOrder);
+                        //更新Mongodb
+                        updateMongoDbByLogisticsOrder(kwtLogisticsOrder);
+                    });
+                }
+
+                /**是否是一级订单,是->推送至贸易*/
+                if (logisticsOrder.getPid() == null && "1".equals(logisticsOrder.getType())) {
+                    //todo: 原来逻辑
+
+                    List<GoodsLoadingV1Param> loadings = new ArrayList<>();
+                    List<OrderGoodsLoadingDto> loading = params.getLoading();
+                    loading.forEach(e -> {
+                        loadings.add(new GoodsLoadingV1Param(e.getUnit(), e.getLoadAmount(), e.getUnloadAmount()));
+                    });
+                    //数据推送至贸易订单-更新总装卸货量
+                    HttpResult httpResult = tradeOrderInfoService.completeLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), logisticsOrder.getTOrderId(), loadings);
+                    if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
+                        log.info("贸易订单手动完结订单异常,传递信息:{}{},返回信息:{}", logisticsOrder.getTOrderId(), loadings, JSONObject.toJSONString(httpResult));
+                        throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
+                    }
+
+                    //数据推送至贸易订单-更新时间装货量
+                    List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(logisticsOrder, loading);
+//                    httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(logisticsOrder.getTOrderId(), goodsLoading);
+                    httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), logisticsOrder.getTOrderId(), goodsLoading);
+                    if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
+                        log.info("手动完结订单-完结订单,传递信息:{},返回信息:{}",
+                                "userId:" + LoginUserHolder.getUserId() +
+                                        "userName:" + LoginUserHolder.getUserName() +
+                                        "id:" + logisticsOrder.getTOrderId() +
+                                        "orderNo" + logisticsOrder.getTOrderNo(),
+                                JSONObject.toJSONString(httpResult))
+                        ;
+                        throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 手动完结订单-完结订单!" + httpResult.getMsg());
+                    }
+                    //todo:新的逻辑 多装多卸
+                    updateTradeOrderAddressAmount(logisticsOrder);
+                }
+
+                //修改合同履约量
+                commonService.updatePerformed(logisticsOrder, loadAmount, unloadAmount);
+
+                //完结物流订单数据处理-上级物流订单分包量计算
+                closeHandleByOrderFinish(logisticsOrder.getId());
+
+                //关闭运单
+                waybillOrderService.cancelSendCar(logisticsOrder.getId());
+            } finally {
+                redisLockUtil.unlock(key);
+            }
+        } else {
+            HttpResult.error("当前数据正在处理,请稍后再试");
+        }
+        return HttpResult.ok("托运订单-完结订单成功");
+    }
+
+    private void updateTradeOrderAddressAmount(KwtLogisticsOrder logisticsOrder) {
+        Long tOrderId = logisticsOrder.getTOrderId();
+        if (!Objects.isNull(tOrderId)) {
+            List<KwtLogisticsOrderAddress> logisticsOrderAddressList = logisticsOrderAddressMapper.selectList(
+                    new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+                            .eq(KwtLogisticsOrderAddress::getLOrderId, logisticsOrder.getId()));
+            if (CollectionUtils.isNotEmpty(logisticsOrderAddressList)) {
+                Map<Integer, List<KwtLogisticsOrderAddress>> map = logisticsOrderAddressList.stream()
+                        .collect(Collectors.groupingBy(KwtLogisticsOrderAddress::getAddressType));
+
+                List<KwtLogisticsOrderAddress> loadingLogisticsOrderAddresses = map.get(NumberConstant.ONE);
+                List<Long> loadAddressIds = loadingLogisticsOrderAddresses.stream().map(KwtLogisticsOrderAddress::getId).collect(Collectors.toList());
+                List<KwtLogisticsOrderAmount> kwtLogisticsOrderAmounts = logisticsOrderAmountMapper.selectList(
+                        new LambdaQueryWrapper<KwtLogisticsOrderAmount>()
+                                .eq(KwtLogisticsOrderAmount::getLOrderId, logisticsOrder.getId())
+                                .eq(KwtLogisticsOrderAmount::getDelFlag, NumberConstant.ZERO)
+                                .in(KwtLogisticsOrderAmount::getLAddressId, loadAddressIds)
+                );
+                //总装货量
+                BigDecimal resultLoadAmount = new BigDecimal("0.00");
+                if (CollectionUtils.isNotEmpty(kwtLogisticsOrderAmounts)) {
+                    resultLoadAmount = kwtLogisticsOrderAmounts.stream()
+                            .map(KwtLogisticsOrderAmount::getTotalLoadAmount)
+                            .filter(Objects::nonNull)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+                }
+                List<KwtLogisticsOrderAddress> unloadLogisticsOrderAddresses = map.get(NumberConstant.TWO);
+                List<Long> unloadAddressIds = unloadLogisticsOrderAddresses.stream().map(KwtLogisticsOrderAddress::getId).collect(Collectors.toList());
+                List<KwtLogisticsOrderAmount> unloadLogisticsOrderAmounts = logisticsOrderAmountMapper.selectList(
+                        new LambdaQueryWrapper<KwtLogisticsOrderAmount>()
+                                .eq(KwtLogisticsOrderAmount::getLOrderId, logisticsOrder.getId())
+                                .eq(KwtLogisticsOrderAmount::getDelFlag, NumberConstant.ZERO)
+                                .in(KwtLogisticsOrderAmount::getLAddressId, unloadAddressIds)
+                );
+                //总卸货量
+                BigDecimal resultUnLoadAmount = new BigDecimal("0.00");
+                if (CollectionUtils.isNotEmpty(unloadLogisticsOrderAmounts)) {
+                    resultUnLoadAmount = kwtLogisticsOrderAmounts.stream()
+                            .map(KwtLogisticsOrderAmount::getTotalLoadAmount)
+                            .filter(Objects::nonNull)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add);
+                }
+                //对应地址id装货量+卸货量
+                List<LogisticsOrderFinishAmountVo> loadAddressAmount = logisticsOrderAmountMapper.countAddressAmount(logisticsOrder.getId(), NumberConstant.ONE);
+                List<LogisticsOrderFinishAmountVo> unloadAddressAmount = logisticsOrderAmountMapper.countAddressAmount(logisticsOrder.getId(), NumberConstant.TWO);
+                List<AddressActualAmountParam> paramList = new ArrayList<>();
+                loadAddressAmount.forEach(addressAmount -> {
+                    Long tOrderAddressId = addressAmount.getTOrderAddressId();
+                    BigDecimal countLoadAmount = addressAmount.getLoadAmount();
+                    AddressActualAmountParam amountParam = new AddressActualAmountParam();
+                    amountParam.setTAddressId(tOrderAddressId);
+                    amountParam.setActualAmount(countLoadAmount);
+                    paramList.add(amountParam);
+                });
+                unloadAddressAmount.forEach(addressAmount -> {
+                    Long tOrderAddressId = addressAmount.getTOrderAddressId();
+                    BigDecimal countUnloadAmount = addressAmount.getUnloadAmount();
+                    AddressActualAmountParam amountParam = new AddressActualAmountParam();
+                    amountParam.setTAddressId(tOrderAddressId);
+                    amountParam.setActualAmount(countUnloadAmount);
+                    paramList.add(amountParam);
+                });
+                if (paramList.size() > 0) {
+                    UpdateAddressActualAmountParam param = new UpdateAddressActualAmountParam();
+                    param.setTOrderId(tOrderId);
+                    param.setUpdateBy(LoginUserHolder.getUserId());
+                    param.setUpdateByName(LoginUserHolder.getUserName());
+                    param.setAddressActualAmountParams(paramList);
+                    tradeOrderAmountService.updateAddressActualAmount(param);
+                } else {
+                    log.info("完结订单--返回上游贸易订单地址数据异常---> lOrderId:{},tOrderId:{},tOrderNo:{}",
+                            logisticsOrder.getId(), logisticsOrder.getTOrderId(), logisticsOrder.getTOrderNo());
+                }
+            }
+        }
+
+    }
 }

+ 19 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderAmountMapper.xml

@@ -38,4 +38,23 @@
         where del_flag = 0
         and l_order_id = #{lOrderId, jdbcType=BIGINT}
     </select>
+
+    <select id="countAddressAmount" resultType="com.sckw.transport.model.vo.LogisticsOrderFinishAmountVo">
+        SELECT
+            a.l_order_id as lOrderId,
+            a.t_address_id AS tOrderId,
+            a.id AS lAddressId,
+            a.t_address_id AS tAddressId,
+            b.total_load_amount AS loadAmount,
+            b.total_unload_amount AS unloadAmount
+        FROM
+            kwt_logistics_order_address a
+                LEFT JOIN kwt_logistics_order_amount b ON a.id = b.l_address_id
+        WHERE
+            a.l_order_id = #{id}
+        <if test="addressType != null">
+            AND a.address_type = #{addressType,jdbcType=INTEGER}
+        </if>
+        AND a.del_flag = 0
+    </select>
 </mapper>

+ 15 - 5
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderLineFreightRateMapper.xml

@@ -1,11 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.sckw.transport.dao.KwtLogisticsOrderLineFreightRateMapper">
-
-    <select id="findByAddress" resultType="com.sckw.transport.model.KwtLogisticsOrderLineFreightRate" >
-        select * from kwt_logistics_order_line_freight_rate
+    <select id="findByAddress" resultType="com.sckw.transport.model.KwtLogisticsOrderLineFreightRate">
+        select *
+        from kwt_logistics_order_line_freight_rate
         where del_flag = 0
-        and l_order_id = #{lOrderId, jdbcType=BIGINT}
-        and name = #{name, jdbcType=VARCHAR}
+          and l_order_id = #{lOrderId, jdbcType=BIGINT}
+          and name = #{name, jdbcType=VARCHAR}
+    </select>
+
+    <select id="selectListByOrderId" resultType="com.sckw.transport.model.vo.LineFreightRateVo">
+        select id,
+               line_freight_rate_id AS lineFreightId,
+               `name`               AS lineFreightName,
+               transport_amount     AS lineFreightCount
+        from kwt_logistics_order_line_freight_rate
+        where l_order_id = #{orderId}
+          AND del_flag = 0
     </select>
 </mapper>

+ 1 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -922,7 +922,7 @@
         </if>
     </select>
 
-    <select id="selectOrderCountByTorderId" resultType="com.sckw.transport.model.dto.LogisticsOrderDto">
+    <select id="selectOrderCountByOrderId" resultType="com.sckw.transport.model.dto.LogisticsOrderDto">
         SELECT a.id as lOrderId,
         a.l_order_no as lOrderNo,
         b.`status` as `status`,

+ 3 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderSubtaskMapper.xml

@@ -10,7 +10,9 @@
         remark, status, create_by createBy, create_time createTime, update_by updateBy, update_time updateTime
         from kwt_waybill_order_subtask
         where del_flag = 0
-        and w_order_id = #{wOrderId, jdbcType=BIGINT}
+        <if test="wOrderId != null">
+            and w_order_id = #{wOrderId, jdbcType=BIGINT}
+        </if>
     </select>
 
     <select id="findByOrderId" resultType="com.sckw.transport.model.KwtWaybillOrderSubtask" >