Просмотр исходного кода

提供托运订单生成、撤销、完结时更新贸易订单已委托量、实际成交量dubbo接口

yzc 2 лет назад
Родитель
Сommit
0835c036de

+ 19 - 4
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -1,10 +1,7 @@
 package com.sckw.order.api.dubbo;
 
 import com.sckw.core.web.response.HttpResult;
-import com.sckw.order.api.model.ContractSignCompletedParam;
-import com.sckw.order.api.model.OrderDetailRes;
-import com.sckw.order.api.model.UpdateOrderAmountParam;
-import com.sckw.order.api.model.UpdateOrderStatusParam;
+import com.sckw.order.api.model.*;
 
 /**
  * @desc: 贸易订单信息相关dubbo
@@ -32,6 +29,7 @@ public interface TradeOrderInfoService {
     HttpResult updateOrderStatus(UpdateOrderStatusParam param);
 
     /**
+     * @desc: 已废弃,请用orderAmountUpdate
      * @desc: 更新订单委托量、已履约量
      * @author: yzc
      * @date: 2023-07-18 18:34
@@ -40,6 +38,23 @@ public interface TradeOrderInfoService {
      */
     HttpResult updateOrderAmount(UpdateOrderAmountParam param);
 
+    /**
+     * @desc: 生成或撤销物流订单
+     * @author: yzc
+     * @date: 2023-08-03 10:57
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    HttpResult createOrCancelLogisticsOrder(CreateOrCancelLogisticsOrderParam param);
+    /**
+     * @desc: 完结物流订单
+     * @author: yzc
+     * @date: 2023-08-03 11:11
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    HttpResult completeLogisticsOrder(CompleteLogisticsOrderParam param);
+
     /**
      * @desc: 合同签约完成
      * @author: yzc

+ 55 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CompleteLogisticsOrderParam.java

@@ -0,0 +1,55 @@
+package com.sckw.order.api.model;
+
+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;
+
+/**
+ * @desc: 更新订单委托量、已履约量
+ * @author: yzc
+ * @date: 2023-08-03 10:52
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class CompleteLogisticsOrderParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 8425395587373735142L;
+
+    /**
+     * 订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 任务量  传负数
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 实装量 传正数
+     */
+    private BigDecimal actualLoadAmount;
+
+    /**
+     * 实卸量  传正数
+     */
+    private BigDecimal actualUnloadAmount;
+
+    /**
+     * 更新用户id 需传,订单状态变化记录需要
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名 需传,订单状态变化记录需要
+     */
+    private String updateByName;
+
+}

+ 45 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CreateOrCancelLogisticsOrderParam.java

@@ -0,0 +1,45 @@
+package com.sckw.order.api.model;
+
+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;
+
+/**
+ * @desc: 更新订单委托量、已履约量
+ * @author: yzc
+ * @date: 2023-08-03 10:52
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class CreateOrCancelLogisticsOrderParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 8425395587373735142L;
+
+    /**
+     * 订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 任务量  生成物流订单传正数,撤销物流订单传负数
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 更新用户id 需传,订单状态变化记录需要
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名 需传,订单状态变化记录需要
+     */
+    private String updateByName;
+
+}

+ 81 - 40
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -10,10 +10,7 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.order.api.model.ContractSignCompletedParam;
-import com.sckw.order.api.model.OrderDetailRes;
-import com.sckw.order.api.model.UpdateOrderAmountParam;
-import com.sckw.order.api.model.UpdateOrderStatusParam;
+import com.sckw.order.api.model.*;
 import com.sckw.order.model.KwoTradeOrder;
 import com.sckw.order.model.KwoTradeOrderContract;
 import com.sckw.order.model.KwoTradeOrderTrack;
@@ -92,19 +89,30 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         SckwTradeOrder updateParam = new SckwTradeOrder();
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy())
                 .setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
-        saveMongoDb(3, updateParam);
+        saveMongoDb(updateParam);
         return HttpResult.ok();
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public HttpResult updateOrderAmount(UpdateOrderAmountParam param) {
-        if (Objects.isNull(param.getUpdateBy()) || StringUtils.isBlank(param.getUpdateByName())) {
-            return HttpResult.error("操作人信息不能为空!");
-        }
+        return HttpResult.ok();
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult createOrCancelLogisticsOrder(CreateOrCancelLogisticsOrderParam param) {
         Long id = param.getTOrderId();
+        BigDecimal entrustAmount = param.getEntrustAmount();
         Long updateBy = param.getUpdateBy();
-        String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
+        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_UPDATE_AMOUNT_KEY, id);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 10L, 30L))) {
             return HttpResult.error("业务繁忙,请稍后再试!");
         }
@@ -116,40 +124,76 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
                 return HttpResult.error("执行中的订单才可物流托运!");
             }
-            BigDecimal amount = order.getAmount();
-            BigDecimal addEntrustAmount = order.getEntrustAmount();
-            if (Objects.nonNull(param.getEntrustAmount())) {
-                addEntrustAmount = addEntrustAmount.add(param.getActualAmount());
-                if (amount.compareTo(addEntrustAmount) < 0) {
-                    return HttpResult.error("物流已委托总量不可大于订单总量!");
-                }
+            BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? entrustAmount : entrustAmount.add(order.getEntrustAmount());
+            if (order.getAmount().compareTo(totalEntrustAmount) < 0) {
+                return HttpResult.error("物流已委托总量不可大于订单总量!");
+            }
+            order.setEntrustAmount(totalEntrustAmount).setUpdateBy(param.getUpdateBy());
+            kwoTradeOrderService.updateById(order);
+            //更新mongodb
+            SckwTradeOrder updateParam = new SckwTradeOrder();
+            updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount)
+                    .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+            saveMongoDb(updateParam);
+            return HttpResult.ok();
+        } finally {
+            RedissonUtils.unlock(lockKey);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult completeLogisticsOrder(CompleteLogisticsOrderParam param) {
+        Long id = param.getTOrderId();
+        BigDecimal entrustAmount = param.getEntrustAmount();
+        BigDecimal actualLoadAmount = param.getActualLoadAmount();
+        BigDecimal actualUnloadAmount = param.getActualUnloadAmount();
+        Long updateBy = param.getUpdateBy();
+        String updateByName = param.getUpdateByName();
+        if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
+            return HttpResult.error("操作人信息不能为空!");
+        }
+        if (Objects.isNull(entrustAmount) || Objects.isNull(actualLoadAmount) || Objects.isNull(actualUnloadAmount)) {
+            return HttpResult.error("任务量或装卸量不能为空!");
+        }
+        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 10L, 30L))) {
+            return HttpResult.error("业务繁忙,请稍后再试!");
+        }
+        try {
+            KwoTradeOrder order = kwoTradeOrderService.getById(id);
+            if (Objects.isNull(order)) {
+                return HttpResult.error("订单不存在!");
             }
-            BigDecimal addActualAmount = order.getActualAmount();
-            if (Objects.nonNull(param.getActualAmount())) {
-                addActualAmount = addActualAmount.add(param.getActualAmount());
-                if (amount.compareTo(addActualAmount) < 0) {
-                    return HttpResult.error("物流实际交付总量不可大于订单总量!");
-                }
+            if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
+                return HttpResult.error("执行中的订单才可物流托运!");
             }
-            order.setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount).setUpdateBy(param.getUpdateBy());
-            //已履约量等于订单总量自动完结订单
-            if (amount.compareTo(addActualAmount) == 0) {
-                order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
-                KwoTradeOrderTrack track = new KwoTradeOrderTrack();
-                track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
-                        .setCreateBy(updateBy).setUpdateBy(updateBy);
-                kwoTradeOrderTrackService.insert(track);
+            BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? entrustAmount : order.getEntrustAmount().add(entrustAmount);
+            BigDecimal totalActualAmount;
+            if (Objects.equals(order.getDeliveryType(), DictEnum.DELIVERY_TYPE_0.getValue())) {
+                totalActualAmount = Objects.isNull(order.getActualAmount()) ? actualLoadAmount : order.getActualAmount().add(actualLoadAmount);
+            } else {
+                totalActualAmount = Objects.isNull(order.getActualAmount()) ? actualUnloadAmount : order.getActualAmount().add(actualUnloadAmount);
             }
+            order.setEntrustAmount(totalEntrustAmount).setActualAmount(totalActualAmount).setUpdateBy(param.getUpdateBy());
+            //todo 自动完结订单规则缺少
+//            if (amount.compareTo(addActualAmount) == 0) {
+//                order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
+//                KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+//                track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
+//                        .setCreateBy(updateBy).setUpdateBy(updateBy);
+//                kwoTradeOrderTrackService.insert(track);
+//            }
             kwoTradeOrderService.updateById(order);
             //更新mongodb
             SckwTradeOrder updateParam = new SckwTradeOrder();
-            updateParam.setTOrderId(order.getId()).setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount)
+            updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount).setActualAmount(totalActualAmount)
                     .setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
-            saveMongoDb(3, updateParam);
+            saveMongoDb(updateParam);
+            return HttpResult.ok();
         } finally {
             RedissonUtils.unlock(lockKey);
         }
-        return HttpResult.ok();
     }
 
     @Override
@@ -186,23 +230,20 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             tradeOrders.add(updateParam);
         });
         kwoTradeOrderTrackService.insertBatch(tracks);
-        tradeOrders.forEach(e -> {
-            saveMongoDb(3, e);
-        });
+        tradeOrders.forEach(this::saveMongoDb);
     }
 
     /**
      * @desc: mq保存mongodb
      * @author: yzc
      * @date: 2023-07-17 8:43
-     * @Param method:
      * @Param order:
      * @return: void
      */
-    private void saveMongoDb(Integer method, Object order) {
+    private void saveMongoDb(Object order) {
         SckwBusSum busSum = new SckwBusSum();
         busSum.setBusSumType("tradeOrder");
-        busSum.setMethod(method);
+        busSum.setMethod(3);
         busSum.setObject(order);
         streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
     }