소스 검색

修复:取消订单时未回退商品总库存

萤火科技 5 년 전
부모
커밋
18dab8ed78
2개의 변경된 파일과 31개의 추가작업 그리고 28개의 파일을 삭제
  1. 3 3
      app/common/service/goods/source/Basics.php
  2. 28 25
      app/common/service/goods/source/Master.php

+ 3 - 3
app/common/service/goods/source/Basics.php

@@ -8,7 +8,7 @@
 // +----------------------------------------------------------------------
 // +----------------------------------------------------------------------
 // | Author: 萤火科技 <admin@yiovo.com>
 // | Author: 萤火科技 <admin@yiovo.com>
 // +----------------------------------------------------------------------
 // +----------------------------------------------------------------------
-declare (strict_types = 1);
+declare (strict_types=1);
 
 
 namespace app\common\service\goods\source;
 namespace app\common\service\goods\source;
 
 
@@ -38,9 +38,9 @@ abstract class Basics extends BaseService
     /**
     /**
      * 回退商品库存
      * 回退商品库存
      * @param $goodsList
      * @param $goodsList
-     * @param $isPayOrder
+     * @param bool $isPayOrder 是否为已支付订单
      * @return mixed
      * @return mixed
      */
      */
-    abstract function backGoodsStock($goodsList, $isPayOrder);
+    abstract function backGoodsStock($goodsList, bool $isPayOrder = false);
 
 
 }
 }

+ 28 - 25
app/common/service/goods/source/Master.php

@@ -8,7 +8,7 @@
 // +----------------------------------------------------------------------
 // +----------------------------------------------------------------------
 // | Author: 萤火科技 <admin@yiovo.com>
 // | Author: 萤火科技 <admin@yiovo.com>
 // +----------------------------------------------------------------------
 // +----------------------------------------------------------------------
-declare (strict_types = 1);
+declare (strict_types=1);
 
 
 namespace app\common\service\goods\source;
 namespace app\common\service\goods\source;
 
 
@@ -34,7 +34,7 @@ class Master extends Basics
         $goodsSkuData = [];
         $goodsSkuData = [];
         foreach ($goodsList as $goods) {
         foreach ($goodsList as $goods) {
             // 是否减库存 (下单减库存)
             // 是否减库存 (下单减库存)
-            $isUpdateStockNum = $goods['deduct_stock_type'] == 10;
+            $isUpdateStockNum = $goods['deduct_stock_type'] == DeductStockTypeEnum::CREATE;
             // 商品的数据
             // 商品的数据
             $isUpdateStockNum && $goodsData[] = [
             $isUpdateStockNum && $goodsData[] = [
                 'where' => ['goods_id' => $goods['goods_id']],
                 'where' => ['goods_id' => $goods['goods_id']],
@@ -52,9 +52,9 @@ class Master extends Basics
                 ],
                 ],
             ];
             ];
         }
         }
-        // 更新商品信息
+        // 更新商品总库存
         !empty($goodsData) && $this->updateGoods($goodsData);
         !empty($goodsData) && $this->updateGoods($goodsData);
-        // 更新商品sku信息
+        // 更新商品sku库存
         !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
         !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
         return true;
         return true;
     }
     }
@@ -70,7 +70,7 @@ class Master extends Basics
         $goodsSkuData = [];
         $goodsSkuData = [];
         foreach ($goodsList as $goods) {
         foreach ($goodsList as $goods) {
             // 是否减库存 (付款减库存)
             // 是否减库存 (付款减库存)
-            $isUpdateStockNum = $goods['deduct_stock_type'] == 20;
+            $isUpdateStockNum = $goods['deduct_stock_type'] == DeductStockTypeEnum::PAYMENT;
             // 商品的数据
             // 商品的数据
             $goodsDataItm = [
             $goodsDataItm = [
                 'where' => ['goods_id' => $goods['goods_id']],
                 'where' => ['goods_id' => $goods['goods_id']],
@@ -99,33 +99,36 @@ class Master extends Basics
     }
     }
 
 
     /**
     /**
-     * 回退商品库存
-     * @param $goodsList
-     * @param $isPayOrder
-     * @return array|false
-     * @throws \Exception
+     * 回退商品库存事件 (用于取消订单时调用)
+     * @param mixed $goodsList 订单商品列表
+     * @param bool $isPayOrder 是否为已支付订单
+     * @return bool|mixed
      */
      */
-    public function backGoodsStock($goodsList, $isPayOrder = false)
+    public function backGoodsStock($goodsList, bool $isPayOrder = false)
     {
     {
+        $goodsData = [];
         $goodsSkuData = [];
         $goodsSkuData = [];
         foreach ($goodsList as $goods) {
         foreach ($goodsList as $goods) {
-            $item = [
-                'where' => [
-                    'goods_id' => $goods['goods_id'],
-                    'goods_sku_id' => $goods['goods_sku_id'],
-                ],
-                'data' => ['stock_num' => ['inc', $goods['total_num']]],
-            ];
-            if ($isPayOrder == true) {
-                // 付款订单全部库存
-                $goodsSkuData[] = $item;
-            } else {
-                // 未付款订单,判断必须为下单减库存时才回退
-                $goods['deduct_stock_type'] == DeductStockTypeEnum::CREATE && $goodsSkuData[] = $item;
+            // 更新条件: 订单已经支付或者订单商品为 "下单减库存"
+            if ($isPayOrder == true || $goods['deduct_stock_type'] == DeductStockTypeEnum::CREATE) {
+                $goodsData[] = [
+                    'where' => ['goods_id' => $goods['goods_id']],
+                    'data' => ['stock_total' => ['inc', $goods['total_num']]]
+                ];
+                $goodsSkuData[] = [
+                    'where' => [
+                        'goods_id' => $goods['goods_id'],
+                        'goods_sku_id' => $goods['goods_sku_id'],
+                    ],
+                    'data' => ['stock_num' => ['inc', $goods['total_num']]],
+                ];
             }
             }
         }
         }
+        // 更新商品总库存
+        !empty($goodsData) && $this->updateGoods($goodsData);
         // 更新商品sku库存
         // 更新商品sku库存
-        return !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
+        !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
+        return true;
     }
     }
 
 
     /**
     /**