Parcourir la source

提供更新贸易订单地址下委托量dubbo接口
提供更新贸易订单地址下实际交付量dubbo接口

yzc il y a 1 an
Parent
commit
bb6a5b9ff4

+ 8 - 0
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java

@@ -42,6 +42,14 @@ public class RedisConstant {
      * 更新贸易订单委托量、已履约量锁key
      */
     public static final String TORDER_UPDATE_AMOUNT_KEY = "order:trade:update:amount:%s";
+    /**
+     * 更新贸易订单地址下的委托量锁key
+     */
+    public static final String TORDER_ADDRESS_UPDATE_ENTRUST_AMOUNT = "order:trade:address:update:entrustAmount:%s";
+    /**
+     * 更新贸易订单地址下的实际交付量锁key
+     */
+    public static final String TORDER_ADDRESS_UPDATE_ACTUAL_AMOUNT = "order:trade:address:update:actualAmount:%s";
     /**
      * 合同签约完成更新贸易订单状态锁key
      */

+ 34 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/RemoteTradeOrderAmountService.java

@@ -0,0 +1,34 @@
+package com.sckw.order.api.dubbo;
+
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.order.api.model.UpdateAddressActualAmountParam;
+import com.sckw.order.api.model.UpdateAddressEntrustAmountParam;
+
+/**
+ * @desc: 贸易订单地址分配量信息相关dubbo
+ * @author: yzc
+ * @date: 2023-07-18 18:18
+ */
+
+public interface RemoteTradeOrderAmountService {
+
+
+    /**
+     * @param param
+     * @return com.sckw.core.web.response.HttpResult
+     * @desc 更新贸易订单地址下的委派量
+     * @author yzc
+     * @date 2024/3/12 16:40
+     */
+    HttpResult updateAddressEntrustAmount(UpdateAddressEntrustAmountParam param);
+
+    /**
+     * @param param
+     * @return com.sckw.core.web.response.HttpResult
+     * @desc 更新贸易订单地址下的实际交付量
+     * @author yzc
+     * @date 2024/3/12 16:41
+     */
+    HttpResult updateAddressActualAmount(UpdateAddressActualAmountParam param);
+
+}

+ 58 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateAddressActualAmountParam.java

@@ -0,0 +1,58 @@
+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-12  16:29
+ * @desc: 更新贸易订单地址下实际交付量
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class UpdateAddressActualAmountParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4767110260359382199L;
+
+    /**
+     * 订单id
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 地址id
+     */
+    @JsonProperty("tAddressId")
+    private Long tAddressId;
+
+    /**
+     * 实装量
+     */
+    private BigDecimal actualLoadAmount;
+
+    /**
+     * 实卸量
+     */
+    private BigDecimal actualUnloadAmount;
+
+    /**
+     * 更新用户id 需传,订单状态变化记录需要
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名 需传,订单状态变化记录需要
+     */
+    private String updateByName;
+
+}

+ 53 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateAddressEntrustAmountParam.java

@@ -0,0 +1,53 @@
+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-12  16:29
+ * @desc: 更新贸易订单地址下委托量
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class UpdateAddressEntrustAmountParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -2032841683310300595L;
+
+    /**
+     * 订单id
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 地址id
+     */
+    @JsonProperty("tAddressId")
+    private Long tAddressId;
+
+    /**
+     * 委托量  生成物流订单传正数,撤销物流订单传负数
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 更新用户id 需传,订单状态变化记录需要
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名 需传,订单状态变化记录需要
+     */
+    private String updateByName;
+
+}

+ 132 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/RemoteTradeOrderAmountServiceImpl.java

@@ -0,0 +1,132 @@
+package com.sckw.order.dubbo;
+
+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.UpdateAddressActualAmountParam;
+import com.sckw.order.api.model.UpdateAddressEntrustAmountParam;
+import com.sckw.order.enums.DeliveryTypeEnum;
+import com.sckw.order.enums.OrderStatusEnum;
+import com.sckw.order.model.KwoTradeOrder;
+import com.sckw.order.model.KwoTradeOrderAmount;
+import com.sckw.order.serivce.KwoTradeOrderAmountService;
+import com.sckw.order.serivce.KwoTradeOrderService;
+import com.sckw.redis.constant.RedisConstant;
+import com.sckw.redis.utils.RedissonUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Objects;
+
+/**
+ * @author: yzc
+ * @date: 2024-03-12  16:23
+ * @desc: 贸易订单地址分配量信息相关dubbo实现
+ */
+@DubboService(group = "design", version = "1.0.0")
+@Slf4j
+@RequiredArgsConstructor
+public class RemoteTradeOrderAmountServiceImpl implements RemoteTradeOrderAmountService {
+
+    private final KwoTradeOrderService tradeOrderService;
+    private final KwoTradeOrderAmountService tradeOrderAmountService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult updateAddressEntrustAmount(UpdateAddressEntrustAmountParam param) {
+        Long tOrderId = param.getTOrderId();
+        if (Objects.isNull(tOrderId)) {
+            return HttpResult.error("贸易订单id不能为空!");
+        }
+        Long tAddressId = param.getTAddressId();
+        if (Objects.isNull(tAddressId)) {
+            return HttpResult.error("贸易订单地址id不能为空!");
+        }
+        BigDecimal entrustAmount = param.getEntrustAmount();
+        Long updateBy = param.getUpdateBy();
+        String updateByName = param.getUpdateByName();
+        if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
+            return HttpResult.error("操作人信息不能为空!");
+        }
+        if (Objects.isNull(entrustAmount)) {
+            return HttpResult.error("任务量不能为空!");
+        }
+        String lockKey = String.format(RedisConstant.TORDER_ADDRESS_UPDATE_ENTRUST_AMOUNT, tAddressId);
+        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 totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ?
+                    entrustAmount : entrustAmount.add(order.getEntrustAmount());
+            orderAmount.setEntrustAmount(totalEntrustAmount).setUpdateBy(param.getUpdateBy());
+            tradeOrderAmountService.updateById(orderAmount);
+            //更新mongodb??
+        } finally {
+            RedissonUtils.unlock(lockKey);
+        }
+        return HttpResult.ok();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult updateAddressActualAmount(UpdateAddressActualAmountParam param) {
+        Long tOrderId = param.getTOrderId();
+        if (Objects.isNull(tOrderId)) {
+            return HttpResult.error("贸易订单id不能为空!");
+        }
+        Long tAddressId = param.getTAddressId();
+        if (Objects.isNull(tAddressId)) {
+            return HttpResult.error("贸易订单地址id不能为空!");
+        }
+        BigDecimal actualLoadAmount = param.getActualLoadAmount();
+        BigDecimal actualUnloadAmount = param.getActualUnloadAmount();
+        if (Objects.isNull(actualLoadAmount) || Objects.isNull(actualUnloadAmount)) {
+            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);
+        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))
+                    .setUpdateBy(param.getUpdateBy());
+            tradeOrderAmountService.updateById(orderAmount);
+            //更新mongodb??
+        } finally {
+            RedissonUtils.unlock(lockKey);
+        }
+        return HttpResult.ok();
+    }
+}

+ 16 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAmountService.java

@@ -10,6 +10,7 @@ import com.sckw.order.model.vo.req.UpdateAddressAmountParam;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -88,9 +89,9 @@ public class KwoTradeOrderAmountService {
      * @Param torderId:
      * @return: java.util.List<com.sckw.order.model.KwoTradeOrderAmount>
      */
-    public List<KwoTradeOrderAmount> getByOrderId(Long torderId) {
+    public List<KwoTradeOrderAmount> getByOrderId(Long tOrderId) {
         LambdaQueryWrapper<KwoTradeOrderAmount> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KwoTradeOrderAmount::getTOrderId, torderId).eq(KwoTradeOrderAmount::getDelFlag, Global.NO);
+        wrapper.eq(KwoTradeOrderAmount::getTOrderId, tOrderId).eq(KwoTradeOrderAmount::getDelFlag, Global.NO);
         List<KwoTradeOrderAmount> list = tradeOrderAmountMapper.selectList(wrapper);
         return CollUtil.emptyIfNull(list);
     }
@@ -108,4 +109,17 @@ public class KwoTradeOrderAmountService {
                 .eq(KwoTradeOrderAmount::getId, param.getId());
         tradeOrderAmountMapper.update(null, wrapper);
     }
+
+    public KwoTradeOrderAmount getByOrderIdAndTaddressId(Long tOrderId, Long tAddressId) {
+        LambdaQueryWrapper<KwoTradeOrderAmount> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrderAmount::getTOrderId, tOrderId)
+                .eq(KwoTradeOrderAmount::getTAddressId,tAddressId)
+                .eq(KwoTradeOrderAmount::getDelFlag, Global.NO);
+        return tradeOrderAmountMapper.selectOne(wrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void updateById(KwoTradeOrderAmount orderAmount) {
+        tradeOrderAmountMapper.updateById(orderAmount);
+    }
 }

+ 2 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -64,6 +64,7 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -1374,6 +1375,7 @@ public class KwoTradeOrderService {
      * @Param order:
      * @return: void
      */
+    @Transactional(rollbackFor = Exception.class)
     public void updateById(KwoTradeOrder order) {
         kwoTradeOrderMapper.updateById(order);
     }