Pārlūkot izejas kodu

1.物流订单撤销订单,接口新增多装多卸地址,amount以及entrustAmount计算

lengfaqiang 1 gadu atpakaļ
vecāks
revīzija
80c42a098b

+ 16 - 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.LogisticsOrderCancelAmountVo;
 import com.sckw.transport.model.vo.LogisticsOrderFinishAmountVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -23,5 +24,20 @@ public interface KwtLogisticsOrderAmountMapper extends BaseMapper<KwtLogisticsOr
 
     List<KwtLogisticsOrderAmount> findByLOrderId(@Param("lOrderId") Long lOrderId);
 
+    /**
+     * 订单完结统计装货量卸货量
+     * @param id
+     * @param addressType
+     * @return
+     */
     List<LogisticsOrderFinishAmountVo> countAddressAmount(@Param("id") Long id,@Param("addressType") Integer addressType);
+
+
+    /**
+     * 查询订单本身的量
+     * @param id
+     * @param addressType
+     * @return
+     */
+    List<LogisticsOrderCancelAmountVo> cancelOrderToAmountByOrderId(@Param("orderId") Long id, @Param("addressType") Integer addressType);
 }

+ 46 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsOrderCancelAmountVo.java

@@ -0,0 +1,46 @@
+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 LogisticsOrderCancelAmountVo implements Serializable {
+
+    /**
+     * 物流订单id
+     */
+    private Long lOrderId;
+
+    /**
+     * 贸易订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 物流订单地址id
+     */
+    private Long lOrderAddressId;
+
+    /**
+     * 贸易订单地址id
+     */
+    private Long tOrderAddressId;
+
+    /**
+     *
+     */
+    private BigDecimal amount;
+
+    /**
+     * order_amount表主键id
+     */
+    private Long amountId;
+
+}

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

@@ -405,7 +405,7 @@ public class KwtTransportCommonService {
      * @param orderDto 请求参数
      * @return 处理结果
      */
-    @Transactional(rollbackFor = Exception.class)
+    @GlobalTransactional
     public HttpResult cancelConsign(CancelOrderDTO orderDto) {
         log.info("订单-撤销托运请求参数:{}", JSONObject.toJSONString(orderDto));
         HttpResult result = new HttpResult();
@@ -433,7 +433,28 @@ public class KwtTransportCommonService {
 //                    HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(logisticsOrder.getTOrderId(), goodsLoading);
                     HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), logisticsOrder.getTOrderId(), goodsLoading);
                     if (HttpStatus.SUCCESS_CODE != httpResult.getCode()) {
-                        log.info("撤销托运错误:,请求参数:{}{},响应信息:{}", logisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
+                        log.info("撤销托运错误:请求参数:{}{},响应信息:{}", logisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
+                        throw new BusinessException("撤销托运错误:" + httpResult.getMsg());
+                    }
+                    Long id = logisticsOrder.getId();
+                    List<LogisticsOrderCancelAmountVo> logisticsOrderCancelAmountVos = logisticsOrderAmountMapper.cancelOrderToAmountByOrderId(id, NumberConstant.ONE);
+                    if (CollectionUtils.isNotEmpty(logisticsOrderCancelAmountVos)) {
+                        logisticsOrderCancelAmountVos.forEach(cancelAmountVos -> {
+                            Long tOrderId = cancelAmountVos.getTOrderId();
+                            Long tOrderAddressId = cancelAmountVos.getTOrderAddressId();
+                            UpdateAddressEntrustAmountParam param = new UpdateAddressEntrustAmountParam();
+                            param.setTOrderId(tOrderId);
+                            param.setTAddressId(tOrderAddressId);
+                            param.setEntrustAmount(cancelAmountVos.getAmount().negate());
+                            param.setUpdateBy(LoginUserHolder.getUserId());
+                            param.setUpdateByName(LoginUserHolder.getUserName());
+                            HttpResult httpResult1 = tradeOrderAmountService.updateAddressEntrustAmount(param);
+                            if (HttpStatus.SUCCESS_CODE != httpResult1.getCode()) {
+                                log.info("撤销托运还原地址的分配量错误:,请求参数:{},{},响应信息:{}",
+                                        logisticsOrder.getTOrderId(), JSONObject.toJSONString(param), JSONObject.toJSONString(httpResult1));
+                                throw new BusinessException("撤销托运还原地址的分配量错误:" + httpResult1.getMsg());
+                            }
+                        });
                     }
                     logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
                             .eq(KwtLogisticsOrder::getId, logisticsOrder.getId())
@@ -478,6 +499,8 @@ public class KwtTransportCommonService {
                             .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
                             .set(KwtLogisticsOrder::getUpdateTime, new Date()));
                     //            updateOrderTrack(logisticsOrder.getId(),orderDto.getRemark(),LogisticsOrderEnum.CANCEL_ORDER);
+                    /**修改上游地址id的分包量*/
+                    updateOrderAmount(logisticsOrder, order);
                     /**下游订单进行状态改变*/
                     logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
                             .eq(KwtLogisticsOrder::getId, logisticsOrder.getId())
@@ -554,6 +577,39 @@ public class KwtTransportCommonService {
         return result;
     }
 
+    /**
+     * 修改订单地址的量
+     *
+     * @param currentLogisticsOrder 当前订单
+     * @param pidLogisticsOrder     父级订单
+     */
+    private void updateOrderAmount(KwtLogisticsOrder currentLogisticsOrder, KwtLogisticsOrder pidLogisticsOrder) {
+        List<LogisticsOrderCancelAmountVo> currentOrder = logisticsOrderAmountMapper.cancelOrderToAmountByOrderId(currentLogisticsOrder.getId(), NumberConstant.ONE);
+        List<LogisticsOrderCancelAmountVo> pidOrder = logisticsOrderAmountMapper.cancelOrderToAmountByOrderId(pidLogisticsOrder.getId(), NumberConstant.ONE);
+        Map<String, BigDecimal> currentOrderMap = new HashMap<>();
+        if (currentOrder.size() > 0) {
+            for (LogisticsOrderCancelAmountVo logisticsOrderCancelAmountVo : currentOrder) {
+                String key = String.valueOf(logisticsOrderCancelAmountVo.getLOrderId()) + "-" + String.valueOf(logisticsOrderCancelAmountVo.getTOrderAddressId());
+                BigDecimal amount = logisticsOrderCancelAmountVo.getAmount();
+                currentOrderMap.put(key, amount);
+            }
+        }
+        if (pidOrder.size() > 0) {
+            for (LogisticsOrderCancelAmountVo logisticsOrderCancelAmountVo : pidOrder) {
+                Long lOrderId = logisticsOrderCancelAmountVo.getLOrderId();
+                Long tOrderAddressId = logisticsOrderCancelAmountVo.getTOrderAddressId();
+                String key = String.valueOf(lOrderId) + "-" + String.valueOf(tOrderAddressId);
+                if (currentOrderMap.get(key) != null) {
+                    logisticsOrderCancelAmountVo.setAmount(logisticsOrderCancelAmountVo.getAmount().subtract(currentOrderMap.get(key)));
+                    logisticsOrderAmountMapper.update(null,new LambdaUpdateWrapper<KwtLogisticsOrderAmount>()
+                            .set(KwtLogisticsOrderAmount::getEntrustAmount,logisticsOrderCancelAmountVo.getAmount())
+                            .eq(KwtLogisticsOrderAmount::getId,logisticsOrderCancelAmountVo.getAmountId())
+                    );
+                }
+            }
+        }
+    }
+
     /**
      * 根据物流订单修改物流状态表
      *

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

@@ -57,4 +57,23 @@
         </if>
         AND a.del_flag = 0
     </select>
+
+    <select id="cancelOrderToAmountByOrderId" resultType="com.sckw.transport.model.vo.LogisticsOrderCancelAmountVo">
+        SELECT
+        a.l_order_id as lOrderId,
+        a.t_address_id AS tOrderId,
+        a.id AS lAddressId,
+        a.t_address_id AS tAddressId,
+        b.id as amountId,
+        b.amount AS amount,
+        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 = #{orderId}
+        <if test="addressType != null">
+            AND a.address_type = #{addressType,jdbcType=INTEGER}
+        </if>
+        AND a.del_flag = 0
+    </select>
 </mapper>