12 Commitit 81f3d74ce9 ... 6acd613e1a

Tekijä SHA1 Viesti Päivämäärä
  xucaiqin 6acd613e1a Merge remote-tracking branch 'origin/dev' into dev 1 vuosi sitten
  zk 4a37211417 1、按车次计费调整; 1 vuosi sitten
  zk 0c85603b10 Merge remote-tracking branch 'origin/dev' into dev 1 vuosi sitten
  zk 0785d743fb 1、按车次计费调整; 1 vuosi sitten
  xucaiqin e99dc92e85 fix 1 vuosi sitten
  xucaiqin cc0c57e756 fix 1 vuosi sitten
  xucaiqin bd456cd159 对账确认 ,修改物流订单状态 1 vuosi sitten
  lengfaqiang e52dc2bfd5 1.新增对账dubbo接口 1 vuosi sitten
  lengfaqiang d8f9d30a31 1.新增对账dubbo接口 1 vuosi sitten
  zk c11425be0c 1、手动完结运量向上统计; 1 vuosi sitten
  zk 01ab9df1b6 1、手动完结运量向上统计; 1 vuosi sitten
  zk 8fd1b744d0 1、运单完结运量及运单数向上累计调整;; 1 vuosi sitten
22 muutettua tiedostoa jossa 415 lisäystä ja 57 poistoa
  1. 36 2
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/DateUtil.java
  2. 15 4
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java
  3. 5 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/AcceptCarriageLogisticsOrderDto.java
  4. 43 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/UpdateOrderStatusDto.java
  5. 5 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/LogisticsOrderVO.java
  6. 0 1
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/TestController.java
  7. 21 3
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java
  8. 19 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java
  9. 59 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  10. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  11. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderTrack.java
  12. 31 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderSubcontractDto.java
  13. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderDetailVO.java
  14. 3 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtCommonService.java
  15. 9 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java
  16. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java
  17. 48 13
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java
  18. 47 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderTicketService.java
  19. 19 14
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  20. 3 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/operateService/KwtManagementLogisticsOrderService.java
  21. 3 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  22. 32 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderV1Mapper.xml

+ 36 - 2
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/DateUtil.java

@@ -132,7 +132,7 @@ public class DateUtil {
 
 
     /**
-     * yyyy-MM-dd 转换成 LocalDateTime
+     * yyyy-MM-dd 转换成 LocalDateTime-添加00:00:00
      *
      * @param str
      * @return
@@ -395,6 +395,40 @@ public class DateUtil {
         return null;
     }
 
+    /**
+     * 日期字符串转换为LocalDateTime方法-添加00:00:00
+     *
+     * @param dateString 日期字符串,格式:yyyy-MM-dd
+     * @return
+     */
+    public static LocalDateTime strToLocalDateTimeStart(String dateString) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDateTime localDateTime = LocalDate.parse(dateString, formatter).atStartOfDay();
+//        LocalDateTime localDateTime1 = strToLocalDateTime(dateString);
+        return localDateTime;
+    }
+
+
+    /**
+     * 日期字符串转换为LocalDateTime方法-添加00:00:00
+     *
+     * @param dateString 日期字符串,格式:yyyy-MM-dd
+     * @return
+     */
+    public static LocalDateTime strToLocalDateTimeEnd(String dateString) {
+        String timeString = " 23:59:59";
+        String dateTimeString = timeString + timeString;
+        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime localDateTime = LocalDateTime.now();
+        try {
+            localDateTime = LocalDateTime.parse(dateTimeString, formatter1);
+            return localDateTime;
+        } catch (java.time.format.DateTimeParseException e) {
+            throw new RuntimeException("Invalid date strToLocalDateTimeEnd error" + e.getMessage());
+        }
+    }
+
+
     public static String date() {
         return LocalDate.now().format(YYYY_MM_DD);
     }
@@ -584,7 +618,7 @@ public class DateUtil {
 //        //结束时间
 //        String beforeMonthDateAndDaysEndToString1 = getBeforeMonthDateAndDaysEndToString(1, 0);
 //        System.out.println(beforeMonthDateAndDaysEndToString1);
-       String SS= cn.hutool.core.date.DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd")+" 00:00:00";
+        String SS = cn.hutool.core.date.DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd") + " 00:00:00";
         //月
         //开始时间
         String monthDateStart = DateUtil.getBeforeMonthDateAndDaysStartToString(LocalDateTime.now(), 1, -1);

+ 15 - 4
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java

@@ -6,6 +6,7 @@ import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
+import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
 import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
 import com.sckw.transport.api.model.vo.RTruckMonitorVo;
 import com.sckw.transport.api.model.vo.RWaybillOrderVo;
@@ -44,6 +45,7 @@ public interface TransportRemoteService {
      * @return
      */
     List<Integer> getLogisticsOrderAddressList();
+
     /**
      * 贸易订单验证物流订单是否已完成
      *
@@ -72,21 +74,22 @@ public interface TransportRemoteService {
      * 根据企业id 判断是否存在未完成完结的物流订单
      *
      * @param entId 企业id
-     * @return  ture 代表还有未完结的  false代表没有未完结的
+     * @return ture 代表还有未完结的  false代表没有未完结的
      */
     boolean checkLogisticsOrderFinishByEntId(Long entId);
 
     /**
      * 根据企业id 判断是否存在未完成完结的物流订单
      *
-     * @param consignEntId 托运企业id
+     * @param consignEntId        托运企业id
      * @param acceptCarriageEntId 承运企业id
-     * @return   根据data是否为空判断 是否存在未完结订单  空  不存在  不为空  存在
+     * @return 根据data是否为空判断 是否存在未完结订单  空  不存在  不为空  存在
      */
-    HttpResult checkLogisticsOrderIsFinishByEntId(Long consignEntId,Long acceptCarriageEntId);
+    HttpResult checkLogisticsOrderIsFinishByEntId(Long consignEntId, Long acceptCarriageEntId);
 
     /**
      * 合同变更,修改物流订单状态【仅仅支持待签约变更为已签约】  0 已签约 1待签约
+     *
      * @param param
      */
     void contractSignLogisticsCompleted(ContractSignLogisticsParam param);
@@ -106,4 +109,12 @@ public interface TransportRemoteService {
      * @date 2023/10/8
      **/
     List<RTruckMonitorVo> truckInTask(Long checkEntId);
+
+
+    /**
+     * 物流订单发起对账状态变更
+     *
+     * @param params 请求参数
+     */
+    HttpResult logisticsOrderInitiateReconciliationUpdateStatus(UpdateOrderStatusDto params);
 }

+ 5 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/AcceptCarriageLogisticsOrderDto.java

@@ -318,4 +318,9 @@ public class AcceptCarriageLogisticsOrderDto implements Serializable {
 
     @JsonProperty("totalUnloadAmount")
     private BigDecimal totalUnloadAmount;
+
+    /**
+     * 趟次(自己+下游承运总卸货量,算方式为趟次时,最终值以完结输入值为准)
+     */
+    private Integer totalTake;
 }

+ 43 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/UpdateOrderStatusDto.java

@@ -0,0 +1,43 @@
+package com.sckw.transport.api.model.param;
+
+import com.sckw.core.model.enums.LogisticsOrderEnum;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 修改物流订单状态dto
+ * @date 2024-05-27 11:05:33
+ */
+@Data
+public class UpdateOrderStatusDto implements Serializable {
+
+    /**
+     * 物流订单id
+     */
+    @NotNull(message = "物流订单id不能为空")
+    private List<Long> orderIds;
+
+    /**
+     * 物流订单状态
+     */
+    @NotNull(message = "物流订单状态不能为空")
+    private LogisticsOrderEnum logisticsOrderStatus;
+
+
+    /**
+     * 修改人
+     */
+    @NotNull(message = "修改人不能为空")
+    private Long updateBy;
+
+    /**
+     * 修改时间
+     */
+    @NotNull(message = "修改时间不能为空")
+    private LocalDateTime updateTime;
+}

+ 5 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/LogisticsOrderVO.java

@@ -322,4 +322,9 @@ public class LogisticsOrderVO implements Serializable {
 
     @JsonProperty("totalUnloadAmount")
     private BigDecimal totalUnloadAmount;
+
+    /**
+     * 趟次(自己+下游承运总卸货量,算方式为趟次时,最终值以完结输入值为准)
+     */
+    private Integer totalTake;
 }

+ 0 - 1
sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/TestController.java

@@ -2,7 +2,6 @@ package com.sckw.example.controller;
 
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
-import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.dto.MemberDetail;
 import com.sckw.payment.api.model.dto.WalletDto;
 import com.sckw.payment.api.model.dto.common.R;

+ 21 - 3
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java

@@ -1,5 +1,7 @@
 package com.sckw.payment.service;
 
+import com.sckw.core.model.enums.LogisticsOrderEnum;
+
 import com.alibaba.fastjson2.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -15,6 +17,7 @@ import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.OrderGenerateSeqNoUtils;
 import com.sckw.core.utils.StringTimeUtil;
+import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.payment.dao.KwpLedgerLogisticsMapper;
@@ -35,6 +38,7 @@ import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
+import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -66,7 +70,6 @@ public class KwpLedgerLogisticsService extends AbsLedger {
     private KwpLedgerLogisticsOrderService logisticsOrderService;
     @Resource
     private MessageSender messageSender;
-
     @Resource
     private KwpLedgerLogisticsMapper logisticsMapper;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -543,6 +546,21 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         KwpLedgerLogisticsUnit logisticsUnit = logisticsUnitService.queryCustomerEnt(confirmReq.getIdLong(), LogisticsUnitType.SHIPPER);
         //承运方
         KwpLedgerLogisticsUnit logisticsUnit2 = logisticsUnitService.queryCustomerEnt(confirmReq.getIdLong(), LogisticsUnitType.CARRIER);
+
+        //5.27 修改物流单状态
+        List<KwpLedgerLogisticsOrder> kwpLedgerLogisticsOrders = logisticsOrderService.queryList(confirmReq.getIdLong());
+        if (CollectionUtils.isNotEmpty(kwpLedgerLogisticsOrders)) {
+            UpdateOrderStatusDto updateOrderStatusDto = new UpdateOrderStatusDto();
+            updateOrderStatusDto.setOrderIds(kwpLedgerLogisticsOrders.stream().map(KwpLedgerLogisticsOrder::getLOrderId).toList());
+            updateOrderStatusDto.setLogisticsOrderStatus(LogisticsOrderEnum.HAVE_RECONCILED);
+            updateOrderStatusDto.setUpdateBy(LoginUserHolder.getUserId());
+            updateOrderStatusDto.setUpdateTime(LocalDateTime.now());
+            HttpResult httpResult = transportRemoteService.logisticsOrderInitiateReconciliationUpdateStatus(updateOrderStatusDto);
+            if (!Objects.equals(httpResult.getCode(), HttpStatus.SUCCESS_CODE)) {
+                throw new BusinessException(httpResult.getMsg());
+            }
+        }
+
         //推送创建人
         messageSender.sendCreate(LoginUserHolder.getUserId(), new HashMap<>(Global.NUMERICAL_SIXTEEN) {{
             put("company", logisticsUnit.getFirmName());
@@ -814,8 +832,8 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         return logisticsMapper.selectJoin(entId, entTarget);
     }
 
-    public LedgerSize count(Long entId,List<Long> enterpriseIds) {
-        return logisticsMapper.countSize(entId,enterpriseIds);
+    public LedgerSize count(Long entId, List<Long> enterpriseIds) {
+        return logisticsMapper.countSize(entId, enterpriseIds);
     }
 
     public List<LedgerLogisticsDto> exportList(LogisticsReq logisticsReq, List<Long> idList) {

+ 19 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java

@@ -102,6 +102,17 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
      */
     WaybillCountVo findTicketCountByAddress(Map<String, Object> params);
 
+    /**
+     * 计算地址下所有的运单榜单上的运量
+     * @param params {
+     *               wAddressIds 运单地址ID集,
+     *               type  榜单装卸货类型
+     *               unit 单位
+     *               }
+     * @return 统计信息
+     */
+    WaybillCountVo findTicketAmountByAddress(Map<String, Object> params);
+
     /**
      * 易订单id查找相关联车辆信息
      * @param params {tOrderIds 贸易订单ID, page , pageSize}
@@ -135,4 +146,12 @@ public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
     Map<String,Object> selectOrderByOrderId(@Param("orderId") Long orderId,
                                             @Param("type") Integer type,
                                             @Param("statusList") List<Long> statusList);
+
+    /**
+     * 统计物流订单的车辆运单
+     * @param lOrderId 物流订单订单ID
+     * @return 统计信息
+     */
+    int findWaybillOrderCountByLOrderId(@Param("lOrderId") Long lOrderId);
+
 }

+ 59 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -13,6 +13,7 @@ import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
@@ -31,11 +32,13 @@ import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
-import com.sckw.transport.api.model.dto.*;
+import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
+import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
+import com.sckw.transport.api.model.dto.RWaybillOrderDto;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
+import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
 import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
-import com.sckw.transport.api.model.vo.LogisticsOrderVO;
 import com.sckw.transport.api.model.vo.RTruckMonitorVo;
 import com.sckw.transport.api.model.vo.RWaybillOrderVo;
 import com.sckw.transport.dao.*;
@@ -54,7 +57,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -310,8 +312,10 @@ public class TransportServiceImpl implements TransportRemoteService {
 //                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price).subtract(fineValue);
         } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(billingMode)) {
             // 物流订单运单趟次数量
-            WaybillCountVo waybillOrderCount = waybillOrderV1Mapper.findCountByLOrderId(Long.parseLong(logisticsOrderDTO.getLOrderId()));
-            BigDecimal totalComplete = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());
+            /*WaybillCountVo waybillOrderCount = waybillOrderV1Mapper.findCountByLOrderId(Long.parseLong(logisticsOrderDTO.getLOrderId()));
+            BigDecimal totalComplete = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());*/
+
+            BigDecimal totalComplete = BigDecimal.valueOf(logisticsOrderDTO.getTotalTake());
             actualAmount = totalComplete.multiply(price);
         } else if (DictEnum.CHARGING_TYPE_4.getValue().equals(billingMode)) {
             String lOrderId = logisticsOrderDTO.getLOrderId();
@@ -748,4 +752,54 @@ public class TransportServiceImpl implements TransportRemoteService {
             findLogisticsOrderChild(orderIds, StringUtil.join(idList, Global.COMMA));
         }
     }
+
+    /**
+     * 物流订单发起对账状态变更
+     *
+     * @param params 请求参数
+     */
+    @Transactional
+    public HttpResult logisticsOrderInitiateReconciliationUpdateStatus(UpdateOrderStatusDto params) {
+        List<Long> orderIds = params.getOrderIds();
+        for (Long orderId : orderIds) {
+            KwtLogisticsOrder kwtLogisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, orderId));
+            Integer code = params.getLogisticsOrderStatus().getCode();
+            if (LogisticsOrderEnum.HAVE_ALREADY_SETTLED.getCode() == kwtLogisticsOrder.getStatus()) {
+                return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, "已结算,不能进行对账");
+            }
+            if (LogisticsOrderEnum.HAVE_FINISHED.getCode() != kwtLogisticsOrder.getStatus()) {
+                return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, "订单并未完成,不能进行对账");
+            }
+            if (LogisticsOrderEnum.HAVE_RECONCILED.getCode() != code) {
+                return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, "订单状态错误");
+            }
+            logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, orderId)
+                    .set(KwtLogisticsOrder::getStatus, code)
+            );
+            KwtLogisticsOrderTrack orderTrack = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                    .eq(KwtLogisticsOrderTrack::getLOrderId, orderId)
+                    .eq(KwtLogisticsOrderTrack::getStatus, code)
+                    .eq(KwtLogisticsOrderTrack::getDelFlag, 0)
+            );
+            if (orderTrack != null) {
+                orderTrack.setStatus(code);
+                orderTrack.setUpdateBy(params.getUpdateBy());
+                orderTrack.setUpdateTime(DateUtils.formatDate(params.getUpdateTime()));
+            } else {
+                KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+                track.setId(new IdWorker(NumberConstant.ONE).nextId());
+                track.setLOrderId(orderId);
+                track.setStatus(code);
+                track.setCreateBy(params.getUpdateBy());
+                track.setCreateTime(DateUtils.formatDate(params.getUpdateTime()));
+                track.setUpdateBy(params.getUpdateBy());
+                track.setUpdateTime(DateUtils.formatDate(params.getUpdateTime()));
+                track.setDelFlag(0);
+                logisticsOrderTrackMapper.insert(track);
+            }
+        }
+        return HttpResult.ok();
+    }
 }

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

@@ -165,6 +165,11 @@ public class KwtLogisticsOrder implements Serializable {
      */
     private BigDecimal deficitPrice;
 
+    /**
+     * 趟次(自己+下游承运总卸货量,算方式为趟次时,最终值以完结输入值为准)
+     */
+    private Integer totalTake;
+
     /**
      * 卸货-履约量(自己+下游承运总卸货量)
      */

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderTrack.java

@@ -26,6 +26,11 @@ public class KwtLogisticsOrderTrack implements Serializable {
      */
     private Long lOrderId;
 
+    /**
+     * 预留字段
+     */
+    private String reserved;
+
     /**
      * 备注
      */

+ 31 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderSubcontractDto.java

@@ -75,6 +75,37 @@ public class LogisticsOrderSubcontractDto implements Serializable {
     @NotNull(message = "托运联系人id不能为空")
     private String consignContactsId;
 
+    /**
+     * 托运单位
+     */
+    @NotBlank(message = "托运单位名称不能为空")
+    private String checkCompany;
+
+    /**
+     * 托运单位id
+     */
+    @NotNull(message = "托运单位id不能为空")
+    private String checkCompanyId;
+
+
+    /**
+     * 托运联系电话
+     */
+    @NotNull(message = "托运联系电话不能为空")
+    private String checkContactPhone;
+
+    /**
+     * 托运联系人
+     */
+    @NotNull(message = "托运联系人不能为空")
+    private String checkContacts;
+
+    /**
+     * 托运联系人id
+     */
+    @NotNull(message = "托运联系人id不能为空")
+    private String checkContactsId;
+
     /**
      * 承运单位
      */

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderDetailVO.java

@@ -209,6 +209,11 @@ public class OrderDetailVO {
 //     */
 //    private String unloadAddressDetail;
 
+    /**
+     * 趟次(自己+下游承运总卸货量,算方式为趟次时,最终值以完结输入值为准)
+     */
+    private Integer totalTake;
+
     /**
      * 卸货-履约量(自己+下游承运总卸货量)
      */

+ 3 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtCommonService.java

@@ -211,13 +211,14 @@ public class KwtCommonService {
         } else if (DictEnum.CHARGING_TYPE_2.getValue().equals(billingMode)) {
             actualAmount = unloadAmount;
         } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(billingMode)) {
-            // 物流订单运单趟次数量
+            /*// 物流订单运单趟次数量
             Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN) {{
                 put("upperlOrderId", logisticsOrder.getId());
                 put("passStatus", Global.NUMERICAL_ONE);
             }};
             WaybillCountVo waybillOrderCount = kwtWaybillOrderV1Mapper.findWaybillOrderCount(map);
-            actualAmount = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());
+            actualAmount = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());*/
+            actualAmount = BigDecimal.valueOf(logisticsOrder.getTotalTake());
         } else if (DictEnum.CHARGING_TYPE_4.getValue().equals(billingMode)) {
             log.debug("“该方式不处理合同");
         } else {

+ 9 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java

@@ -812,6 +812,7 @@ public class KwtLogisticsOrderConsignmentService {
         order.setTotalUnloadAmount(decimal);
         order.setTotalLoadAmount(decimal);
         order.setBindStatus(String.valueOf(NumberConstant.ZERO));
+        order.setTotalTake(NumberConstant.ZERO);
         logisticsOrderMapper.insert(order);
     }
 
@@ -1290,6 +1291,7 @@ public class KwtLogisticsOrderConsignmentService {
         order.setBindStatus(String.valueOf(NumberConstant.ZERO));
         order.setTotalUnloadAmount(decimal);
         order.setTotalLoadAmount(decimal);
+        order.setTotalTake(NumberConstant.ZERO);
         logisticsOrderMapper.insert(order);
 
     }
@@ -1910,22 +1912,22 @@ public class KwtLogisticsOrderConsignmentService {
 
     private void insertSubcontractLogisticsOrderUnit(LogisticsOrderSubcontractDto bo, Long orderId) {
         EntCacheResDto consignentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getAcceptCompanyId()));
-        EntCacheResDto checkentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getConsignCompanyId()));
+        EntCacheResDto checkentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getCheckCompanyId()));
         KwtLogisticsOrderUnit checkUnit = new KwtLogisticsOrderUnit()
                 .setLOrderId(orderId)
                 .setId(new IdWorker(NumberConstant.ONE).nextId())
                 .setUnitType(NumberConstant.ONE)
-                .setFirmName(bo.getConsignCompany())
+                .setFirmName(bo.getCheckCompany())
                 .setRemark(bo.getRemark())
                 .setTopEntId(checkentMap == null ? null : checkentMap.getId())
-                .setEntId(Long.parseLong(bo.getConsignCompanyId()))
-                .setContacts(bo.getConsignContacts())
-                .setPhone(bo.getConsignContactPhone())
+                .setEntId(Long.parseLong(bo.getCheckCompanyId()))
+                .setContacts(bo.getCheckContacts())
+                .setPhone(bo.getCheckContactPhone())
                 .setCreateBy(LoginUserHolder.getUserId())
                 .setCreateTime(new Date())
                 .setUpdateBy(LoginUserHolder.getUserId())
                 .setUpdateTime(new Date())
-                .setContactsId(Long.parseLong(bo.getConsignContactsId()));
+                .setContactsId(Long.parseLong(bo.getCheckContactsId()));
         logisticsOrderUnitMapper.insert(checkUnit);
 
         KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit()
@@ -2021,6 +2023,7 @@ public class KwtLogisticsOrderConsignmentService {
         order.setTotalUnloadAmount(decimal);
         order.setTotalLoadAmount(decimal);
         order.setBindStatus(String.valueOf(NumberConstant.ZERO));
+        order.setTotalTake(NumberConstant.ZERO);
         logisticsOrderMapper.insert(order);
     }
 

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

@@ -229,8 +229,8 @@ public class KwtLogisticsOrderGoodsService {
             queryParams.put("unit", goodsUnit.getUnit());
             KwtLogisticsOrderGoodsUnit unitCount = goodsUnitMapper.findGoodsUnitCount(queryParams);
             //更新物流订单商品辅助单位-总装卸货量
-            goodsUnit.setTotalLoadAmount(unitCount.getLoadAmount().add(goodsUnit.getLoadAmount()));
-            goodsUnit.setTotalUnloadAmount(unitCount.getUnloadAmount().add(goodsUnit.getUnloadAmount()));
+            goodsUnit.setTotalLoadAmount(unitCount.getTotalLoadAmount().add(goodsUnit.getLoadAmount()));
+            goodsUnit.setTotalUnloadAmount(unitCount.getTotalUnloadAmount().add(goodsUnit.getUnloadAmount()));
             goodsUnitMapper.updateById(goodsUnit);
         }
     }

+ 48 - 13
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java

@@ -127,7 +127,6 @@ public class KwtTransportCommonService {
     @Autowired
     public KwtLogisticsOrderMapper logisticsOrderMapper;
 
-
     @Autowired
     private KwtWaybillOrderV1Mapper kwtWaybillOrderV1Mapper;
 
@@ -394,14 +393,15 @@ public class KwtTransportCommonService {
             } else if (DictEnum.CHARGING_TYPE_2.getValue().equals(logisticsOrder.getBillingMode())) {
                 orderDetailVO.setOrderAmount(unloadAmount.multiply(price).subtract(fineValue));
             } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(logisticsOrder.getBillingMode())) {
-                // 物流订单运单趟次数量
+                /*// 物流订单运单趟次数量
                 Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN) {{
                     put("upperlOrderId", logisticsOrder.getId());
                     put("passStatus", Global.NUMERICAL_ONE);
                 }};
                 WaybillCountVo waybillOrderCount = kwtWaybillOrderV1Mapper.findWaybillOrderCount(map);
-                int count = waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete();
-                orderDetailVO.setOrderAmount(new BigDecimal(count).multiply(price).subtract(fineValue));
+                int count = waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete();*/
+                BigDecimal totalComplete = BigDecimal.valueOf(logisticsOrder.getTotalTake());
+                orderDetailVO.setOrderAmount(totalComplete.multiply(price).subtract(fineValue));
             }
         } else {
             orderDetailVO.setOrderAmount(NumberUtils.parseBigDecimal(logisticsOrder.getAmount()).multiply(NumberUtils.parseBigDecimal(logisticsOrder.getPrice())));
@@ -410,7 +410,7 @@ public class KwtTransportCommonService {
 
         List<LineFreightRateVo> lineFreightRateVos = kwtLogisticsOrderLineFreightRateMapper.selectListByOrderId(Long.parseLong(dto.getId()));
         orderDetailVO.setLineFreightRate(lineFreightRateVos);
-
+        orderDetailVO.setTotalTake(logisticsOrder.getTotalTake());
         return orderDetailVO;
     }
 
@@ -817,8 +817,9 @@ public class KwtTransportCommonService {
 //                        put("passStatus", Global.NUMERICAL_ONE);
 //                    }};
 
-                    WaybillCountVo waybillOrderCount = kwtWaybillOrderV1Mapper.findCountByLOrderId(Long.parseLong(logisticsOrderDTO.getLOrderId()));
-                    BigDecimal totalComplete = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());
+                   /* WaybillCountVo waybillOrderCount = kwtWaybillOrderV1Mapper.findCountByLOrderId(Long.parseLong(logisticsOrderDTO.getLOrderId()));
+                    BigDecimal totalComplete = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());*/
+                    BigDecimal totalComplete = BigDecimal.valueOf(logisticsOrderDTO.getTotalTake());
                     actualAmount = totalComplete.multiply(price);
                 } else if (DictEnum.CHARGING_TYPE_4.getValue().equals(billingMode)) {
                     String lOrderId = logisticsOrderDTO.getLOrderId();
@@ -1025,11 +1026,12 @@ public class KwtTransportCommonService {
             add(CarWaybillEnum.APPROVAL_PASS.getCode());
         }};
 //        orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
-        orderFinishVO.setNumber(waybillOrderSubtaskMapper.selectCount(
+        /*orderFinishVO.setNumber(waybillOrderSubtaskMapper.selectCount(
                 new LambdaQueryWrapper<KwtWaybillOrderSubtask>()
                         .eq(KwtWaybillOrderSubtask::getLOrderId, Long.parseLong(orderId))
                         .eq(KwtWaybillOrderSubtask::getDelFlag, 0)
-                        .in(KwtWaybillOrderSubtask::getStatus, orderStatus)).intValue());
+                        .in(KwtWaybillOrderSubtask::getStatus, orderStatus)).intValue());*/
+        orderFinishVO.setNumber(logisticsOrder.getTotalTake());
         orderFinishVO.setUnit(logisticsOrder.getUnit());
         orderFinishVO.setUnitName(unitMap != null ? unitMap.get(logisticsOrder.getUnit()) : null);
         orderFinishVO.setAmount(logisticsOrder.getAmount());
@@ -1084,7 +1086,7 @@ public class KwtTransportCommonService {
                 logisticsOrder.setIgnoreAmount(ignoreAmount);
                 logisticsOrderMapper.updateById(logisticsOrder);
                 //物流订单状态记录
-                updateLogisticOrderTrack(logisticsOrder.getId(), LogisticsOrderEnum.HAVE_FINISHED.getCode(), params.getRemark());
+                updateLogisticOrderTrack(logisticsOrder.getId(), LogisticsOrderEnum.HAVE_FINISHED.getCode(), params.getRemark(), JSON.toJSONString(params));
                 //修改mongodb的数据
                 updateMongoDbByLogisticsOrder(logisticsOrder);
                 //更新商品辅助单位信息
@@ -1241,7 +1243,7 @@ public class KwtTransportCommonService {
      * @param code     状态码
      * @param remark   备注
      */
-    private void updateLogisticOrderTrack(Long lOrderId, int code, String remark) {
+    private void updateLogisticOrderTrack(Long lOrderId, int code, String remark, String reserved) {
         KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
                 .eq(KwtLogisticsOrderTrack::getLOrderId, lOrderId).eq(KwtLogisticsOrderTrack::getStatus, code)
         );
@@ -1263,6 +1265,7 @@ public class KwtTransportCommonService {
             orderTrack.setUpdateBy(LoginUserHolder.getUserId());
             orderTrack.setUpdateTime(new Date());
             orderTrack.setDelFlag(NumberConstant.ZERO);
+            orderTrack.setReserved(reserved);
             logisticsOrderTrackMapper.insert(orderTrack);
         }
     }
@@ -1352,11 +1355,42 @@ public class KwtTransportCommonService {
                     //差值=上游委托量-实际总装货量
                     BigDecimal difference = order.getAmount().subtract(order.getTotalLoadAmount());
                     currentOrder.setSubcontractAmount(currentOrder.getSubcontractAmount().subtract(difference));
+
+                    //装货统计(当前物流订单)
+                    Map<String, Object> queryParams = new HashMap<>(NumberConstant.SIXTEEN);
+                    queryParams.put("lOrderId", currentOrder.getId());
+                    queryParams.put("unit", currentOrder.getUnit());
+                    queryParams.put("type", NumberConstant.ONE);
+                    queryParams.put("passStatus", Global.NUMERICAL_ONE);
+                    WaybillCountVo loadCount = kwtWaybillOrderV1Mapper.findTicketCountByAddress(queryParams);
+                    //卸货统计(当前物流订单)
+                    queryParams.put("type", NumberConstant.TWO);
+                    WaybillCountVo unloadCount = kwtWaybillOrderV1Mapper.findTicketCountByAddress(queryParams);
+
+                    //下级物流订单统计
+                    Map<String, Object> params = new HashMap<>(){{put("upperlOrderId", currentOrder.getId()); put("ownOrderId", currentOrder.getId());}};
+                    List<KwtLogisticsOrder> upperlOrders = logisticsOrderMapper.findLogisticsOrder(params);
+
+                    //运量
+                    BigDecimal totalLoadAmount = upperlOrders.stream().map(KwtLogisticsOrder::getTotalLoadAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    BigDecimal totalUnloadAmount = upperlOrders.stream().map(KwtLogisticsOrder::getTotalUnloadAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    currentOrder.setTotalLoadAmount(loadCount.getAmount().add(totalLoadAmount));
+                    currentOrder.setTotalUnloadAmount(unloadCount.getAmount().add(totalUnloadAmount));
+
+                    //运单数量
+                    int sum = upperlOrders.stream().mapToInt(KwtLogisticsOrder::getTotalTake).sum();
+                    int totalTake = kwtWaybillOrderV1Mapper.findWaybillOrderCountByLOrderId(currentOrder.getId());
+                    currentOrder.setTotalTake(totalTake + sum);
                     logisticsOrderMapper.updateById(currentOrder);
 
+                    //辅助单位运量
+                    logisticsOrderGoodsService.editLogisticsOrderGoodsTotalLoading(currentOrder.getId());
+
                     //Mongodb数据更新
                     SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
                     lOrder.setSubcontractAmount(currentOrder.getSubcontractAmount());
+                    lOrder.setTotalUnloadAmount(currentOrder.getTotalUnloadAmount());
+                    lOrder.setTotalLoadAmount(currentOrder.getTotalLoadAmount());
                     waybillOrderService.editSckwLogisticsOrder(lOrder, currentOrder);
                 }
             }
@@ -1666,12 +1700,13 @@ public class KwtTransportCommonService {
                 logisticsOrder.setUpdateTime(new Date());
                 logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
                 logisticsOrder.setIgnoreAmount(ignoreAmount);
+                logisticsOrder.setTotalTake(params.getCount() != null ? params.getCount() : logisticsOrder.getTotalTake());
                 if (DictEnum.CHARGING_TYPE_4.getValue().equals(logisticsOrder.getBillingMode())) {
                     updateLogisticsOrderLineFreightRate(logisticsOrder, params);
                 }
                 logisticsOrderMapper.updateById(logisticsOrder);
                 //物流订单状态记录
-                updateLogisticOrderTrack(logisticsOrder.getId(), LogisticsOrderEnum.HAVE_FINISHED.getCode(), params.getRemark());
+                updateLogisticOrderTrack(logisticsOrder.getId(), LogisticsOrderEnum.HAVE_FINISHED.getCode(), params.getRemark(), JSON.toJSONString(params));
                 //修改mongodb的数据
                 updateMongoDbByLogisticsOrder(logisticsOrder);
                 //更新商品辅助单位信息
@@ -1730,7 +1765,7 @@ public class KwtTransportCommonService {
                 //修改合同履约量
                 commonService.updatePerformed(logisticsOrder, loadAmount, unloadAmount);
 
-                //完结物流订单数据处理-上级物流订单分包量计算
+                //完结物流订单数据处理-上级物流订单量计算
                 closeHandleByOrderFinish(logisticsOrder.getId());
 
                 //关闭运单

+ 47 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderTicketService.java

@@ -1,6 +1,7 @@
 package com.sckw.transport.service;
 
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.constant.Global;
@@ -12,11 +13,10 @@ import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.NumberUtils;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
-import com.sckw.transport.dao.KwtLogisticsOrderGoodsUnitMapper;
-import com.sckw.transport.dao.KwtWaybillOrderMapper;
-import com.sckw.transport.dao.KwtWaybillOrderTicketMapper;
+import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.WaybillOrderTicketLoadingDto;
+import com.sckw.transport.model.vo.WaybillCountVo;
 import com.sckw.transport.model.vo.WaybillOrderLoadingVO;
 import com.sckw.transport.model.vo.WaybillTicketVO;
 import lombok.extern.slf4j.Slf4j;
@@ -27,6 +27,7 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author zk
@@ -42,6 +43,10 @@ public class KwtWaybillOrderTicketService {
     @Autowired
     KwtLogisticsOrderGoodsUnitMapper goodsUnitMapper;
     @Autowired
+    KwtLogisticsOrderAddressMapper logisticsOrderAddressMapper;
+    @Autowired
+    KwtWaybillOrderV1Mapper waybillOrderV1Mapper;
+    @Autowired
     KwtWaybillOrderTicketMapper ticketMapper;
     @DubboReference(version = "1.0.0", group = "design", check = false)
     RemoteSystemService remoteSystemService;
@@ -363,4 +368,43 @@ public class KwtWaybillOrderTicketService {
         return loadLoading;
     }
 
+    /**
+     * 计算地址下所有的地址
+     * @param lAddressId 地址ID
+     * @return 地址ID
+     */
+    public List<Long> getLAddressIds(Long lAddressId) {
+        LambdaQueryWrapper<KwtLogisticsOrderAddress> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwtLogisticsOrderAddress::getPAddressId, lAddressId);
+        wrapper.eq(KwtLogisticsOrderAddress::getDelFlag, Global.NO);
+        List<KwtLogisticsOrderAddress> list = logisticsOrderAddressMapper.selectList(wrapper);
+        List<Long> lAddressIds = list.stream().map(KwtLogisticsOrderAddress::getId).toList();
+        if (CollectionUtils.isNotEmpty(lAddressIds)) {
+            for (Long lAddressId1:lAddressIds) {
+                List<Long> lAddressIds1 = getLAddressIds(lAddressId1);
+                if (CollectionUtils.isNotEmpty(lAddressIds1)) {
+                    lAddressIds.addAll(lAddressIds1);
+                }
+            }
+        }
+        return lAddressIds;
+    }
+
+    /**
+     * 计算地址下所有的运单榜单上的运量
+     * @param lAddressId 地址ID
+     * @return 运载量
+     */
+    public BigDecimal getAmount(Long lAddressId, String unit, int type) {
+        List<Long> lAddressIds = new ArrayList<>(){{add(lAddressId);}};
+        lAddressIds.addAll(getLAddressIds(lAddressId));
+        Map<String, Object> queryParams = new HashMap<>(NumberConstant.SIXTEEN);
+        queryParams.put("lAddressIds", lAddressIds);
+        queryParams.put("unit", unit);
+        queryParams.put("type", type);
+        queryParams.put("passStatus", Global.NUMERICAL_ONE);
+        WaybillCountVo loadCount = waybillOrderV1Mapper.findTicketAmountByAddress(queryParams);
+        return loadCount.getAmount();
+    }
+
 }

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

@@ -2190,6 +2190,7 @@ public class KwtWaybillOrderV1Service {
             BigDecimal deficitPrice = deficitPrice(logisticsOrder.getLoadAmount(), logisticsOrder.getDeficitAmount(),
                     logisticsOrder.getLoss(), logisticsOrder.getLossUnit(), logisticsOrder.getGoodsPrice());
             logisticsOrder.setDeficitPrice(deficitPrice);
+            logisticsOrder.setTotalTake(logisticsOrder.getTotalTake() == null ? NumberConstant.ONE : logisticsOrder.getTotalTake() + NumberConstant.ONE);
             logisticsOrderDao.updateById(logisticsOrder);
 
             /*2、物流订单地址运量信息更新*/
@@ -2255,18 +2256,27 @@ public class KwtWaybillOrderV1Service {
         /*1、物流订单信息更新*/
         //物流订单信息
         KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
-        //装货统计
+        //装货统计(当前物流订单)
         Map<String, Object> queryParams = new HashMap<>(NumberConstant.SIXTEEN);
-        queryParams.put("upperlOrderId", lOrderId);
+        queryParams.put("lOrderId", lOrderId);
         queryParams.put("unit", logisticsOrder.getUnit());
         queryParams.put("type", NumberConstant.ONE);
         queryParams.put("passStatus", Global.NUMERICAL_ONE);
         WaybillCountVo loadCount = waybillOrderV1Dao.findTicketCountByAddress(queryParams);
-        //卸货统计
+        //卸货统计(当前物流订单)
         queryParams.put("type", NumberConstant.TWO);
         WaybillCountVo unloadCount = waybillOrderV1Dao.findTicketCountByAddress(queryParams);
-        logisticsOrder.setTotalLoadAmount(loadCount.getAmount());
-        logisticsOrder.setTotalUnloadAmount(unloadCount.getAmount());
+
+        //下级物流订单统计
+        Map<String, Object> params = new HashMap<>(){{put("upperlOrderId", lOrderId); put("ownOrderId", lOrderId);}};
+        List<KwtLogisticsOrder> logisticsOrders = logisticsOrderDao.findLogisticsOrder(params);
+        BigDecimal totalLoadAmount = logisticsOrders.stream().map(KwtLogisticsOrder::getTotalLoadAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalUnloadAmount = logisticsOrders.stream().map(KwtLogisticsOrder::getTotalUnloadAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        int sum = logisticsOrders.stream().mapToInt(KwtLogisticsOrder::getTotalTake).sum();
+        int totalTake = waybillOrderV1Dao.findWaybillOrderCountByLOrderId(lOrderId);
+        logisticsOrder.setTotalTake(totalTake + sum);
+        logisticsOrder.setTotalLoadAmount(loadCount.getAmount().add(totalLoadAmount));
+        logisticsOrder.setTotalUnloadAmount(unloadCount.getAmount().add(totalUnloadAmount));
         logisticsOrderDao.updateById(logisticsOrder);
 
         /*2、物流订单地址运量信息更新*/
@@ -2274,18 +2284,13 @@ public class KwtWaybillOrderV1Service {
         for (KwtLogisticsOrderAmount amount : amounts) {
             //物流运单地址信息
             KwtLogisticsOrderAddress address = logisticsOrderAddressDao.selectById(amount.getLAddressId());
-
             //运单地址进行统计
-            queryParams.clear();
-            queryParams.put("lAddressId", amount.getLAddressId());
-            queryParams.put("upperlOrderId", lOrderId);
-            queryParams.put("unit", logisticsOrder.getUnit());
-            queryParams.put("passStatus", Global.NUMERICAL_ONE);
-            WaybillCountVo waybillCount1 = waybillOrderV1Dao.findTicketCountByAddress(queryParams);
+            BigDecimal totalAmount = waybillOrderTicketService.getAmount(amount.getLAddressId(), logisticsOrder.getUnit(), address.getAddressType());
+
             if (address.getAddressType().equals(AddressTypeEnum.SHIPMENT.getCode())) {
-                amount.setTotalLoadAmount(waybillCount1.getAmount());
+                amount.setTotalLoadAmount(totalAmount);
             } else {
-                amount.setTotalUnloadAmount(waybillCount1.getAmount());
+                amount.setTotalUnloadAmount(totalAmount);
             }
             logisticsOrderAmountDao.updateById(amount);
         }

+ 3 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/operateService/KwtManagementLogisticsOrderService.java

@@ -719,13 +719,14 @@ public class KwtManagementLogisticsOrderService {
             } else if (DictEnum.CHARGING_TYPE_2.getValue().equals(logisticsOrder.getBillingMode())) {
                 orderDetailVO.setOrderAmount(unloadAmount.multiply(price).subtract(fineValue));
             } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(logisticsOrder.getBillingMode())) {
-                // 物流订单运单趟次数量
+                /*// 物流订单运单趟次数量
                 Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN) {{
                     put("upperlOrderId", logisticsOrder.getId());
                     put("passStatus", Global.NUMERICAL_ONE);
                 }};
                 WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
-                BigDecimal totalComplete = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());
+                BigDecimal totalComplete = waybillOrderCount == null ? NumberConstant.ZERO_TWO : new BigDecimal(waybillOrderCount.getTotalComplete());*/
+                BigDecimal totalComplete = BigDecimal.valueOf(logisticsOrder.getTotalTake());
                 orderDetailVO.setOrderAmount(totalComplete.multiply(price).subtract(fineValue));
             }
         } else {

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

@@ -326,6 +326,7 @@
                         a.unload_amount       AS unloadAmount,
                         a.total_load_amount   AS totalLoadAmount,
                         a.total_unload_amount AS totalUnloadAmount,
+                        a.total_take AS totalTake,
                         a.settlement_cycle    as settlementCycle,
                         a.start_time          AS startTime,
                         a.end_time            AS endTime,
@@ -811,6 +812,7 @@
                         a.unload_amount       AS unloadAmount,
                         a.total_load_amount   AS totalLoadAmount,
                         a.total_unload_amount AS totalUnloadAmount,
+                        a.total_take AS totalTake,
                         a.settlement_cycle    as settlementCycle,
                         a.start_time          AS startTime,
                         a.end_time            AS endTime,
@@ -885,6 +887,7 @@
                remark,
                `status`,
                create_by           createBy,
+                total_take totalTake,
                total_load_amount   totalLoadAmount,
                total_unload_amount totalUnloadAmount,
                create_time         createTime,

+ 32 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderV1Mapper.xml

@@ -322,6 +322,29 @@
         </if>
     </select>
 
+    <select id="findTicketAmountByAddress" resultType="com.sckw.transport.model.vo.WaybillCountVo" >
+        SELECT
+        IFNULL(sum(wot.amount), 0.0) amount
+        from kwt_waybill_order_ticket wot
+        left join kwt_waybill_order_address woa on woa.id = wot.w_address_id
+        left join kwt_waybill_order wo on wo.id = wot.w_order_id
+        where wot.del_flag = 0 and wo.status = 502
+        <if test="type != null and type != ''">
+            and wot.type = #{type, jdbcType=VARCHAR}
+        </if>
+        <if test="unit != null and unit != ''">
+            and wot.unit = #{unit, jdbcType=VARCHAR}
+        </if>
+        <choose>
+            <when test="lAddressIds != null and lAddressIds != '' and lAddressIds.size() > 0">
+                and woa.l_address_id in
+                <foreach collection="lAddressIds" item="lAddressId" open="(" close=")" separator=",">
+                    #{lAddressId,jdbcType=BIGINT}
+                </foreach>
+            </when>
+        </choose>
+    </select>
+
     <select id="selectWaybillOrderCarPage" parameterType="java.util.Map" resultType="com.sckw.transport.model.dto.OrderCarDTO">
         SELECT
         kwo.id as wOrderId,
@@ -470,6 +493,7 @@
             </if>
         </where>
     </select>
+
     <select id="selectOrderByOrderId" resultType="java.util.Map">
         SELECT COUNT(a.id) total,
         IFNULL(SUM(b.entrust_amount),0) AS amount
@@ -485,4 +509,12 @@
             </foreach>
         </if>
     </select>
+
+    <select id="findWaybillOrderCountByLOrderId" resultType="java.lang.Integer">
+        SELECT count(1) totalTake from kwt_waybill_order_subtask kwos
+        left join kwt_waybill_order kwo on kwo.id = kwos.w_order_id
+        left join kwt_logistics_order klo on klo.id = kwos.l_order_id
+        where kwos.del_flag = 0 and kwo.status = 502
+        and klo.id = #{lOrderId, jdbcType=BIGINT}
+    </select>
 </mapper>