소스 검색

更新贸易订单地址下实际交付量dubbo接口逻辑优化

yzc 1 년 전
부모
커밋
4a028f26ad

+ 39 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/AddressActualAmountParam.java

@@ -0,0 +1,39 @@
+package com.sckw.order.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author: yzc
+ * @date: 2024-03-13  08:59
+ * @desc: 贸易订单地址下实际交付量参数
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class AddressActualAmountParam implements Serializable {
+
+
+    @Serial
+    private static final long serialVersionUID = 3315075003391902459L;
+
+    /**
+     * 地址id
+     */
+    @JsonProperty("tAddressId")
+    private Long tAddressId;
+
+    /**
+     * 实际成交量
+     */
+    private BigDecimal actualAmount;
+
+}

+ 3 - 14
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateAddressActualAmountParam.java

@@ -8,7 +8,7 @@ import lombok.experimental.Accessors;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author: yzc
@@ -30,20 +30,9 @@ public class UpdateAddressActualAmountParam implements Serializable {
     private Long tOrderId;
 
     /**
-     * 地址id
+     * 地址实际成交量参数
      */
-    @JsonProperty("tAddressId")
-    private Long tAddressId;
-
-    /**
-     * 实装量
-     */
-    private BigDecimal actualLoadAmount;
-
-    /**
-     * 实卸量
-     */
-    private BigDecimal actualUnloadAmount;
+    private List<AddressActualAmountParam> addressActualAmountParams;
 
     /**
      * 更新用户id 需传,订单状态变化记录需要

+ 38 - 22
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/RemoteTradeOrderAmountServiceImpl.java

@@ -1,14 +1,18 @@
 package com.sckw.order.dubbo;
 
+import cn.hutool.core.collection.CollUtil;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.order.api.dubbo.RemoteTradeOrderAmountService;
+import com.sckw.order.api.model.AddressActualAmountParam;
 import com.sckw.order.api.model.UpdateAddressActualAmountParam;
 import com.sckw.order.api.model.UpdateAddressEntrustAmountParam;
 import com.sckw.order.enums.DeliveryTypeEnum;
+import com.sckw.order.enums.OrderAddressTypeEnum;
 import com.sckw.order.enums.OrderStatusEnum;
 import com.sckw.order.model.KwoTradeOrder;
 import com.sckw.order.model.KwoTradeOrderAmount;
+import com.sckw.order.serivce.KwoTradeOrderAddressService;
 import com.sckw.order.serivce.KwoTradeOrderAmountService;
 import com.sckw.order.serivce.KwoTradeOrderService;
 import com.sckw.redis.constant.RedisConstant;
@@ -19,7 +23,10 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author: yzc
@@ -33,6 +40,7 @@ public class RemoteTradeOrderAmountServiceImpl implements RemoteTradeOrderAmount
 
     private final KwoTradeOrderService tradeOrderService;
     private final KwoTradeOrderAmountService tradeOrderAmountService;
+    private final KwoTradeOrderAddressService tradeOrderAddressService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -88,39 +96,47 @@ public class RemoteTradeOrderAmountServiceImpl implements RemoteTradeOrderAmount
         if (Objects.isNull(tOrderId)) {
             return HttpResult.error("贸易订单id不能为空!");
         }
-        Long tAddressId = param.getTAddressId();
-        if (Objects.isNull(tAddressId)) {
-            return HttpResult.error("贸易订单地址id不能为空!");
+        List<AddressActualAmountParam> addressActualAmountParams = param.getAddressActualAmountParams();
+        if (CollUtil.isEmpty(addressActualAmountParams) || addressActualAmountParams.size() != 2) {
+            return HttpResult.error("地址实际成交量参数有误!");
         }
-        BigDecimal actualLoadAmount = param.getActualLoadAmount();
-        BigDecimal actualUnloadAmount = param.getActualUnloadAmount();
-        if (Objects.isNull(actualLoadAmount) || Objects.isNull(actualUnloadAmount)) {
-            return HttpResult.error("实装实卸量不能为空!");
+        Map<Long, BigDecimal> map = addressActualAmountParams.stream().collect(Collectors.toMap
+                (AddressActualAmountParam::getTAddressId, AddressActualAmountParam::getActualAmount, (k1, k2) -> k1));
+        if (map.size() != 2) {
+            return HttpResult.error("地址实际成交量参数有误!");
         }
         Long updateBy = param.getUpdateBy();
         String updateByName = param.getUpdateByName();
         if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
             return HttpResult.error("操作人信息不能为空!");
         }
-        String lockKey = String.format(RedisConstant.TORDER_ADDRESS_UPDATE_ACTUAL_AMOUNT, tAddressId);
+        KwoTradeOrder order = tradeOrderService.getById(tOrderId);
+        if (Objects.isNull(order)) {
+            return HttpResult.error("订单不存在!");
+        }
+        if (!Objects.equals(order.getStatus(), OrderStatusEnum.EXECUTING.getCode())) {
+            return HttpResult.error("执行中的订单才可物流托运!");
+        }
+        Map<String, Long> addressTypeMap = tradeOrderAddressService.getByIdsAndTOrderId(map.keySet(), tOrderId);
+        String addressType = Objects.equals(order.getDeliveryType(), DeliveryTypeEnum.ISSUE.getType()) ? OrderAddressTypeEnum.LOAD.getType() : OrderAddressTypeEnum.UNLOAD.getType();
+        Long addressId = addressTypeMap.get(addressType);
+        if (Objects.isNull(addressId)) {
+            return HttpResult.error("未查询到订单交付类型对应的地址实际成交量参数!");
+        }
+        BigDecimal actualAmount = map.get(addressId);
+        if (Objects.isNull(actualAmount)) {
+            return HttpResult.error("地址实际成交量不能为空!");
+        }
+        KwoTradeOrderAmount orderAmount = tradeOrderAmountService.getByOrderIdAndTaddressId(tOrderId, addressId);
+        if (Objects.isNull(orderAmount)) {
+            return HttpResult.error("地址下分配量信息不存在!");
+        }
+        String lockKey = String.format(RedisConstant.TORDER_ADDRESS_UPDATE_ACTUAL_AMOUNT, addressId);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             return HttpResult.error("业务繁忙,请稍后再试!");
         }
         try {
-            KwoTradeOrder order = tradeOrderService.getById(tOrderId);
-            if (Objects.isNull(order)) {
-                return HttpResult.error("订单不存在!");
-            }
-            if (!Objects.equals(order.getStatus(), OrderStatusEnum.EXECUTING.getCode())) {
-                return HttpResult.error("执行中的订单才可物流托运!");
-            }
-            KwoTradeOrderAmount orderAmount = tradeOrderAmountService.getByOrderIdAndTaddressId(tOrderId, tAddressId);
-            if (Objects.isNull(orderAmount)) {
-                return HttpResult.error("地址下分配量信息不存在!");
-            }
-            BigDecimal addActualAmount = Objects.equals(order.getDeliveryType(), DeliveryTypeEnum.ISSUE.getType())
-                    ? actualLoadAmount : actualUnloadAmount;
-            orderAmount.setActualAmount(Objects.isNull(orderAmount.getActualAmount()) ? addActualAmount : orderAmount.getActualAmount().add(addActualAmount))
+            orderAmount.setActualAmount(Objects.isNull(orderAmount.getActualAmount()) ? actualAmount : orderAmount.getActualAmount().add(actualAmount))
                     .setUpdateBy(param.getUpdateBy());
             tradeOrderAmountService.updateById(orderAmount);
             //更新mongodb??

+ 23 - 6
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java

@@ -16,10 +16,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @desc: 交易订单装卸货地址信息service
@@ -151,9 +149,9 @@ public class KwoTradeOrderAddressService {
     }
 
     /**
-     * @desc 根据ids删除
      * @param ids
      * @return void
+     * @desc 根据ids删除
      * @author yzc
      * @date 2024/3/12 11:54
      */
@@ -179,8 +177,27 @@ public class KwoTradeOrderAddressService {
                 .orderByAsc(KwoTradeOrderAddress::getTOrderId)
                 .orderByAsc(KwoTradeOrderAddress::getSort);
         List<KwoTradeOrderAddress> list = kwoTradeOrderAddressMapper.selectList(wrapper);
-        return CollectionUtils.emptyIfNull(list);
+        return CollUtil.emptyIfNull(list);
     }
 
+    /**
+     * @param ids
+     * @param tOrderId
+     * @return java.util.Map<java.lang.String, java.lang.Long>
+     * @desc 根据id集合及贸易订单id查询
+     * @author yzc
+     * @date 2024/3/13 9:25
+     */
+    public Map<String, Long> getByIdsAndTOrderId(Collection<Long> ids, Long tOrderId) {
+        LambdaQueryWrapper<KwoTradeOrderAddress> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwoTradeOrderAddress::getId, ids)
+                .eq(KwoTradeOrderAddress::getTOrderId, tOrderId)
+                .eq(KwoTradeOrderAddress::getDelFlag, Global.NO);
+        List<KwoTradeOrderAddress> list = kwoTradeOrderAddressMapper.selectList(wrapper);
+        if (CollUtil.isEmpty(list)) {
+            return Collections.emptyMap();
+        }
+        return list.stream().collect(Collectors.toMap(KwoTradeOrderAddress::getAddressType, KwoTradeOrderAddress::getId, (k1, k2) -> k1));
+    }
 
 }