Explorar o código

取消与销量的管理

shish hai 11 meses
pai
achega
1e3552ef2c

+ 6 - 7
app-hd/controllers/OrderController.php

@@ -86,17 +86,16 @@ class OrderController extends BaseController
         $get = Yii::$app->request->get();
         $id = $get['id'] ?? 0;
         $order = OrderClass::getById($id, true);
-        OrderClass::valid($order, $this->mainId);
-        $deadTime = $order->deadline ?? 0;
-        $current = time();
-        $diff = bcsub($deadTime, $current);
-        if ($diff < 60) {
-            util::fail('60秒后将自动取消');
+        if ($order->mainId != $this->mainId) {
+            util::fail('不是你的订单');
         }
+
+        $staff = $this->shopAdmin;
+
         $connection = Yii::$app->db;
         $transaction = $connection->beginTransaction();
         try {
-            OrderClass::setExpire($order, true);
+            OrderClass::setExpire($order, true, $staff);
             $transaction->commit();
             util::complete();
         } catch (\Exception $exception) {

+ 8 - 1
biz-hd/goods/classes/GoodsClass.php

@@ -791,7 +791,7 @@ class GoodsClass extends BaseClass
 
     //库存变动入口
     //加库存
-    public static function addStock($goodsId, $mainId, $num)
+    public static function addStock($goodsId, $mainId, $num, $params = [])
     {
         $key = self::LOCK_STOCK_GOODS . '_' . $goodsId;
         $lock = util::lock($key);
@@ -812,6 +812,13 @@ class GoodsClass extends BaseClass
         //改库存
         $newStock = $goodsData['stock'] + $num;
         $data['stock'] = $newStock;
+        $reduceSale = $params['reduceSale'] ?? 0;
+        if ($reduceSale == 1) {
+            $actualSold = $goodsData['actualSold'];
+            $newSold = bcsub($actualSold, $num);
+            $newSold = max($newSold, 0);
+            $data['actualSold'] = $newSold;
+        }
         self::updateById($goodsId, $data);
         util::unlock($key);
         return ['oldStock' => $goodsData['stock'], 'newStock' => $newStock];

+ 32 - 3
biz-hd/order/classes/OrderClass.php

@@ -619,7 +619,7 @@ class OrderClass extends BaseClass
     }
 
     //订单取消 ssh 20220516
-    public static function setExpire($order, $force = false)
+    public static function setExpire($order, $force = false, $staff = null)
     {
         $now = time();
         if ($order->deadline > $now && $force == false) {
@@ -631,8 +631,8 @@ class OrderClass extends BaseClass
         $order->status = 5;
         $order->cancelTime = date("Y-m-d H:i:s");
         $order->save();
-        //暂时只考虑花材库存的回滚。商品只有下单成功了才会占用库存。
         $orderSn = $order->orderSn ?? '';
+        $relateName = $staff->name ?? '系统';
         $itemList = OrderItemClass::getAllByCondition(['orderSn' => $orderSn], null, '*', null, true);
         if (!empty($itemList)) {
             foreach ($itemList as $item) {
@@ -661,10 +661,39 @@ class OrderClass extends BaseClass
                 $recordData['newStock'] = $stockInfo['newStock'];
                 $recordData['productId'] = $itemId;
                 $recordData['orderSn'] = $orderSn;
-                $recordData['relateName'] = '系统';
+                $recordData['relateName'] = $relateName;
                 StockRecordClass::addSellStockOrderCancelRecord($recordData);
             }
         }
+        $goodsList = OrderGoodsClass::getAllByCondition(['orderSn' => $orderSn], null, '*', null, true);
+        if (!empty($goodsList)) {
+            foreach ($goodsList as $goods) {
+
+                $goodsId = $goods->goodsId ?? 0;
+                $num = $goods->num ?? 0;
+                $mainId = $goods->mainId ?? 0;
+                $orderSn = $goods->orderSn ?? '';
+                $shopId = $goods->shopId ?? 0;
+                $sjId = $goods->sjId ?? 0;
+                $params = ['reduceSale' => 1];
+                $respond = \bizHd\goods\classes\GoodsClass::addStock($goodsId, $mainId, $num, $params);
+                $oldStock = $respond['oldStock'] ?? 0;
+                $newStock = $respond['newStock'] ?? 0;
+
+                $data = [];
+                $data['sjId'] = $sjId;
+                $data['shopId'] = $shopId;
+                $data['mainId'] = $mainId;
+                $data['orderSn'] = $orderSn;
+                $data['goodsId'] = $goodsId;
+                $data['goodsNum'] = $num;
+                $data['oldStock'] = $oldStock;
+                $data['newStock'] = $newStock;
+                $data['relateName'] = $relateName;
+                GoodsStockRecordClass::cancelOrder($data);
+
+            }
+        }
         $shopId = $order->shopId ?? 0;
         $shop = ShopClass::getById($shopId, true);
         if (!empty($shop)) {