林琦海 5 лет назад
Родитель
Сommit
18075ec8cc

+ 6 - 0
biz-ghs/order/classes/CheckOrderClass.php

@@ -70,7 +70,13 @@ class CheckOrderClass extends BaseClass
                 foreach ($batchData as $v){
                     $productId = $v['productId'];
                     //修改库存数量
+                    $key = ProductClass::LOCK_STOCK . '_' . $productId;
+                    $lock = util::lock($key);
+                    if (!$lock) {
+                        util::fail("系统繁忙中,请稍后再试!");
+                    }
                     ProductClass::updateStockById($productId,$v['itemNum'],$adminId);
+                    util::unlock($key);
                     //流水记录
                     $record = [];
                     $record['merchantId'] = $merchantId;

+ 3 - 1
biz-ghs/order/classes/OrderClass.php

@@ -125,7 +125,9 @@ class OrderClass extends BaseClass
             $w = ProductClass::getWeight($val['productId'], $val['bigNum'], $val['smallNum']);
             $weight = bcadd($w, $weight, 2);
             //减库存
-            ProductClass::decreaseStock($val['productId'], $val['bigNum'], $val['smallNum']);
+            $orderType = $data['orderType']??1;
+            $checkStock = $orderType==OrderClass::ORDER_TYPE_HD_ADD?true:false;
+            ProductClass::decreaseStock($val['productId'], $val['bigNum'], $val['smallNum'],$checkStock);
         }
         $data['weight'] = $weight;
 

+ 3 - 2
biz-ghs/order/services/OrderService.php

@@ -56,7 +56,8 @@ class OrderService extends BaseService
             'ghsAvatar' => $ghsAvatar,
             'customId' => $customId,
             'payWay' => $payWay,
-            'status' => PurchaseClass::STATUS_UN_PAY
+            'status' => PurchaseClass::STATUS_UN_PAY,
+            'orderType'=>PurchaseClass::ORDER_TYPE_GHS_ADD,
         ];
         $purchase = PurchaseClass::addPurchase($purchaseData);
         $purchaseId = $purchase->id ?? 0;
@@ -301,4 +302,4 @@ class OrderService extends BaseService
         return ['price' => $discountPrice, 'discountType' => $discountType, 'discountAmount' => $discountAmount];
     }
 
-}
+}

+ 43 - 8
biz-ghs/product/classes/ProductClass.php

@@ -23,6 +23,7 @@ class ProductClass extends BaseClass
     const PRICE_LABEL_CHANGE = 2; //改价
     const LOCK_STOCK = 'lock_stock';//修改库存锁
     const LOCK_PRICE = 'lock_price'; //改价锁
+    const LOCK_CHECK_STOCK = 'lock_check_stock'; //判断库存
 
     //根据itemIds获取相应的花材信息
     public static function getProductInfoByItemIds(array $itemIds, $shopId)
@@ -196,8 +197,14 @@ class ProductClass extends BaseClass
      */
     public static function addStock($productId, $itemNumBundle, $itemNumPiece)
     {
+        $key = self::LOCK_STOCK . '_' . $productId;
+        $lock = util::lock($key);
+        if (!$lock) {
+            util::fail("系统繁忙中,请稍后再试!");
+        }
         $productData = self::getById($productId);
         if (!$productData) {
+            util::unlock($key);
             util::fail("花材不存在");
         }
         $itemId = $productData['itemId'];
@@ -206,6 +213,7 @@ class ProductClass extends BaseClass
         $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $unitNum);
         $newStock = bcadd($productData['stock'], $itemNum, 2);
         self::updateStockById($productId, $newStock);
+        util::unlock($key);
         return true;
     }
 
@@ -220,12 +228,19 @@ class ProductClass extends BaseClass
      */
     public static function addStockByItemNum($productId, $itemNum)
     {
+        $key = self::LOCK_STOCK . '_' . $productId;
+        $lock = util::lock($key);
+        if (!$lock) {
+            util::fail("系统繁忙中,请稍后再试!");
+        }
         $productData = self::getById($productId, true);
         if (!$productData) {
+            util::unlock($key);
             util::fail("花材不存在");
         }
         $newStock = bcadd($productData->stock, $itemNum, 2);
         self::updateStockById($productId, $newStock);
+        util::unlock($key);
         return true;
     }
 
@@ -235,19 +250,33 @@ class ProductClass extends BaseClass
      * @param $productId  门店下的花材ID(xhGhsItemInfo 主键ID)
      * @param $itemNumBundle  花材数量(扎)
      * @param $itemNumPiece  花材数量(支)
+     * @param $checkStock boolean 是否需要判断库存
      * @return bool
      */
-    public static function decreaseStock($productId, $itemNumBundle, $itemNumPiece)
+    public static function decreaseStock($productId, $itemNumBundle, $itemNumPiece,$checkStock=false)
     {
+        $key = self::LOCK_STOCK . '_' . $productId;
+        $lock = util::lock($key);
+        if (!$lock) {
+            util::fail("系统繁忙中,请稍后再试!");
+        }
         $productData = self::getById($productId, true);
         if (!$productData) {
+            util::unlock($key);
             util::fail("花材不存在");
         }
+
         $ratio = $productData['ratio'];
         //转成小数,更新库存
         $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $ratio);
         $newStock = bcsub($productData->stock, $itemNum, 2);
+        if($checkStock && $newStock < 0){
+            //需要判断库存是否充足
+            util::unlock($key);
+            util::fail("库存不足");
+        }
         self::updateStockById($productId, $newStock);
+        util::unlock($key);
         return true;
     }
 
@@ -259,14 +288,26 @@ class ProductClass extends BaseClass
      * @param $itemNum
      * @return bool
      */
-    public static function decreaseStockByItemNum($productId, $itemNum)
+    public static function decreaseStockByItemNum($productId, $itemNum,$checkStock=false)
     {
+        $key = self::LOCK_STOCK . '_' . $productId;
+        $lock = util::lock($key);
+        if (!$lock) {
+            util::fail("系统繁忙中,请稍后再试!");
+        }
         $productData = self::getById($productId);
         if (!$productData) {
+            util::unlock($key);
             util::fail("花材不存在");
         }
         $newStock = bcsub($productData['stock'], $itemNum, 2);
+        if($checkStock && $newStock < 0){
+            //需要判断库存是否充足
+            util::unlock($key);
+            util::fail("库存不足");
+        }
         self::updateStockById($productId, $newStock);
+        util::unlock($key);
         return true;
     }
 
@@ -385,17 +426,11 @@ class ProductClass extends BaseClass
     //todo 库存修改 加锁
     public static function updateStockById($id, $stock, $adminId = 0)
     {
-        $key = self::LOCK_STOCK . '_' . $id;
-        $lock = util::lock($key);
-        if (!$lock) {
-            util::fail("系统繁忙中,请稍后再试!");
-        }
         $data['stock'] = $stock;
         if ($adminId) {
             $data['adminId'] = $adminId;
         }
         $res = self::updateById($id, $data);
-        util::unlock($key);
         return $res;
     }
 

+ 1 - 0
biz-hd/purchase/services/PurchaseService.php

@@ -59,6 +59,7 @@ class PurchaseService extends BaseService
             'customShopAdminId' => $shopAdminId,
             'customShopAdminName' => $shopAdminName,
             'ghsId' => $ghsId,
+            'orderType'=>OrderClass::ORDER_TYPE_HD_ADD,
         ];
         $result = OrderClass::addOrder($arr);
         $saleId = $result['id'] ?? 0;