Explorar el Código

1、运单完结运量及运单数向上累计调整;;

zk hace 1 año
padre
commit
8fd1b744d0

+ 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);
+
 }

+ 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;
+
     /**
      * 备注
      */

+ 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);
         }
     }

+ 5 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java

@@ -1084,7 +1084,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 +1241,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 +1263,7 @@ public class KwtTransportCommonService {
             orderTrack.setUpdateBy(LoginUserHolder.getUserId());
             orderTrack.setUpdateTime(new Date());
             orderTrack.setDelFlag(NumberConstant.ZERO);
+            orderTrack.setReserved(reserved);
             logisticsOrderTrackMapper.insert(orderTrack);
         }
     }
@@ -1666,12 +1667,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);
                 //更新商品辅助单位信息

+ 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);
         }

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

@@ -885,6 +885,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>