Parcourir la source

批量发货逻辑调整

zouxuan il y a 6 mois
Parent
commit
d240e6e8a1

+ 7 - 3
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderController.java

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
 import com.yonge.cooleshow.admin.dto.*;
 import com.yonge.cooleshow.admin.service.OmsOrderService;
+import com.yonge.cooleshow.mall.common.api.ResultCode;
 import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -17,6 +18,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -52,9 +54,11 @@ public class OmsOrderController {
         try {
             boolean b = lock.tryLock(60, 60, TimeUnit.SECONDS);
             if (b) {
-                int count = orderService.delivery(deliveryParamList);
-                if (count > 0) {
-                    return CommonResult.success(count);
+                Map<Long, String> delivery = orderService.delivery(deliveryParamList);
+                if (delivery.isEmpty()) {
+                    return CommonResult.success(delivery);
+                }else {
+                    return CommonResult.failed(ResultCode.FAILED,ResultCode.FAILED.getMessage(),delivery);
                 }
             }
         } catch (InterruptedException e) {

+ 1 - 2
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderService.java

@@ -23,8 +23,7 @@ public interface OmsOrderService {
     /**
      * 批量发货
      */
-    @Transactional
-    int delivery(List<OmsOrderDeliveryParam> deliveryParamList);
+    Map<Long,String> delivery(List<OmsOrderDeliveryParam> deliveryParamList);
 
     void syncSkuStock(List<Long> skuIds);
 

+ 27 - 15
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java

@@ -127,10 +127,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int delivery(List<OmsOrderDeliveryParam> deliveryParamList) {
-        //批量发货
-        int count = orderDao.delivery(deliveryParamList);
-
+    public Map<Long,String> delivery(List<OmsOrderDeliveryParam> deliveryParamList) {
         // 扣减库存
         //库存扣减规则更新
         //扣减顺序:内部库存>税务库存>进货批次
@@ -142,7 +139,13 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         // 查询出所有订单关联的skuId
         // 订单ID集合
         List<Long> orderIds = deliveryParamList.stream().map(OmsOrderDeliveryParam::getOrderId).collect(Collectors.toList());
-        updateSkuStock( orderIds);
+        Map<Long,String> resultMap = new HashMap<>();
+        updateSkuStock(orderIds,resultMap);
+        if (!resultMap.isEmpty()){
+            return resultMap;
+        }
+        //批量发货
+        int count = orderDao.delivery(deliveryParamList);
 
 
         //添加操作记录
@@ -158,7 +161,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
             }).collect(Collectors.toList());
         orderOperateHistoryDao.insertList(operateHistoryList);
 
-        return count;
+        return resultMap;
     }
 
     /**
@@ -166,8 +169,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
      */
 //    @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateSkuStock(List<Long> orderIds) {
-
+    public void updateSkuStock(List<Long> orderIds,Map<Long,String> resultMap) {
         // 查询订单详情
         OmsOrderItemExample example = new OmsOrderItemExample();
         example.createCriteria().andOrderIdIn(orderIds);
@@ -202,15 +204,19 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         Map<String, List<OmsOrderItem>> map = omsOrderItems.stream().collect(Collectors.groupingBy(o -> o.getOrderSn()));
         List<OrderSkuSync> skuSyncList = new ArrayList<>();
         List<OmsOrderItem> updateItems = new ArrayList<>();
-        map.forEach((sn,v) -> {
+        for (String sn : map.keySet()) {
+            List<OmsOrderItem> v = map.get(sn);
             OrderSkuSync skuSync = new OrderSkuSync();
             skuSync.setOrderNo(sn);
             List<OrderSkuSync.SkuSync> skuSyncs = new ArrayList<>();
             skuSync.setSkuSyncList(skuSyncs);
-            v.stream().forEach(o -> {
-
+            for (OmsOrderItem o : v) {
                 List<PmsProductSkuStockRecord> skuStockRecords = skuStockRecordMap.get(o.getProductSkuId());
                 if (CollectionUtils.isEmpty(skuStockRecords)) {
+                    if (resultMap != null){
+                        resultMap.put(o.getProductSkuId(),skuMap.get(o.getProductSkuId()) +"库存不足");
+                        continue;
+                    }
                     throw new BizException(skuMap.get(o.getProductSkuId()) +"库存不足");
                 }
                 List<OrderSkuSync.SkuSync> itemSkus = new ArrayList<>();
@@ -277,6 +283,10 @@ public class OmsOrderServiceImpl implements OmsOrderService {
                     }
                 }
                 if (count1 > 0) {
+                    if (resultMap != null){
+                        resultMap.put(o.getProductSkuId(),skuMap.get(o.getProductSkuId()) +"库存不足");
+                        continue;
+                    }
                     throw new BizException(skuMap.get(o.getProductSkuId())+"库存不足");
                 }
                 if (CollUtil.isNotEmpty(itemSkus)) {
@@ -286,9 +296,12 @@ public class OmsOrderServiceImpl implements OmsOrderService {
                     orderItem.setStockJson(JSON.toJSONString(itemSkus));
                     updateItems.add(orderItem);
                 }
-            });
+            }
             skuSyncList.add(skuSync);
-        });
+        }
+        if(resultMap != null && !resultMap.isEmpty()){
+            return;
+        }
         for (Map.Entry<Long, PmsProductSkuStockRecord> entry : updateMap.entrySet()) {
             PmsProductSkuStockRecord v = entry.getValue();
             PmsProductSkuStockRecord update = new PmsProductSkuStockRecord();
@@ -805,8 +818,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
 
         // 如果订单状态是已发货,扣减库存
         if (order.getStatus() ==2 || order.getStatus() == 3) {
-
-            updateSkuStock(Lists.newArrayList(detail.getId()));
+            updateSkuStock(Lists.newArrayList(detail.getId()),null);
         }
     }
 

+ 9 - 0
mec-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/api/CommonResult.java

@@ -69,6 +69,15 @@ public class CommonResult<T> {
 
     /**
      * 失败返回结果
+     * @param errorCode 错误码
+     * @param message 错误信息
+     */
+    public static <T> CommonResult<T> failed(IErrorCode errorCode,String message,T data) {
+        return new CommonResult<T>(errorCode.getCode(), message, data);
+    }
+
+    /**
+     * 失败返回结果
      * @param message 提示信息
      */
     public static <T> CommonResult<T> failed(String message) {