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

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

@@ -75,6 +75,7 @@ class CheckOrderClass extends BaseClass
                     if (!$lock) {
                         util::fail("系统繁忙中,请稍后再试!");
                     }
+                    $productData = ProductClass::getById($productId);
                     ProductClass::updateStockById($productId,$v['itemNum'],$adminId);
                     util::unlock($key);
                     //流水记录
@@ -83,8 +84,9 @@ class CheckOrderClass extends BaseClass
                     $record['shopId'] = $shopId;
                     $record['orderSn'] = $orderSn;
                     $record['itemId'] = $v['itemId'];
+                    $record['productId'] = $productId;
                     $record['itemNum'] = $v['profitLossNum'];//盈亏数
-                    $record['oldStock'] = $v['itemStock'];
+                    $record['oldStock'] = $productData['stock'];
                     $record['newStock'] =  $v['itemNum']; //新库存直接等于盘点的数量
                     StockRecordService::addCheckOrderRecord($record);
                 }

+ 31 - 4
biz-ghs/order/classes/OrderClass.php

@@ -14,6 +14,8 @@ use bizGhs\admin\classes\AdminClass;
 use bizGhs\custom\classes\CustomClass;
 use bizGhs\stat\classes\StatOrderCountClass;
 use bizGhs\stat\classes\StatYjClass;
+use bizGhs\stock\classes\StockRecordClass;
+use bizGhs\stock\services\StockRecordService;
 use bizHd\purchase\classes\PurchaseClass;
 use bizHd\stat\classes\StatIncomeClass;
 use bizHd\stat\classes\StatOrderClass;
@@ -126,21 +128,36 @@ class OrderClass extends BaseClass
         $current = time() + $validTime;
         $data['deadline'] = date("Y-m-d H:i:s", $current);
         $data['status'] = self::ORDER_STATUS_UN_PAY;
-
+        $currentShopId = $data['shopId'] ?? 0;
         //计算总重量(kg)
         $weight = 0;
+        $productMapData = ProductClass::getProductMapData($product);
         foreach ($product as $key => $val) {
             $w = ProductClass::getWeight($val['productId'], $val['bigNum'], $val['smallNum']);
+            $productId = $val['productId'];
             $weight = bcadd($w, $weight, 2);
             //减库存
             $orderType = $data['orderType'] ?? 1;
             $checkStock = $orderType == OrderClass::ORDER_TYPE_HD_ADD ? true : false;
-            ProductClass::decreaseStock($val['productId'], $val['bigNum'], $val['smallNum'], $checkStock);
+            $stockInfo = ProductClass::decreaseStock($val['productId'], $val['bigNum'], $val['smallNum'], $checkStock);
+            //记录库存流水
+            $recordData = [];
+            $recordData['merchantId'] = $sjId;
+            $recordData['shopId'] = $currentShopId;
+            $recordData['itemId'] = $productMapData[$productId]['itemId']??0;
+            $ratio =  $productMapData[$productId]['ratio']??0;
+            $recordData['itemNum'] = ProductClass::mergeItemNum($val['bigNum'],$val['smallNum'],$ratio);
+            $recordData['oldStock'] = $stockInfo['oldStock'];
+            $recordData['newStock'] = $stockInfo['newStock'];
+            $recordData['productId'] = $productId;
+            $recordData['orderSn'] = $orderSn;
+            StockRecordService::addSellStockOrderRecord($recordData);
         }
+
         $data['weight'] = $weight;
 
         //门店总订单数+1
-        $currentShopId = $data['shopId'] ?? 0;
+
         $shop = Shop::findBySql('select * from ' . Shop::tableName() . ' where id = :id for update', ['id' => $currentShopId])->one();
         if (empty($shop)) {
             util::fail('没有找到门店');
@@ -545,7 +562,17 @@ class OrderClass extends BaseClass
         //加回库存
         $orderItem = OrderItemClass::getOrderItem($order->orderSn);
         foreach ($orderItem as $v){
-            ProductClass::addStockByItemNum($v['productId'],$v['num']);
+            $stockInfo = ProductClass::addStockByItemNum($v['productId'],$v['num']);
+            $recordData = [];
+            $recordData['merchantId'] = $order->merchantId;
+            $recordData['shopId'] = $shopId;
+            $recordData['itemId'] =$v['itemId']??0;
+            $recordData['itemNum'] = $v['num'];
+            $recordData['oldStock'] = $stockInfo['oldStock'];
+            $recordData['newStock'] = $stockInfo['newStock'];
+            $recordData['productId'] = $v['productId'];
+            $recordData['orderSn'] = $order->orderSn;
+            StockRecordService::addSellStockOrderCancelRecord($recordData);
         }
         return $order;
     }

+ 6 - 2
biz-ghs/order/classes/StockInOrderClass.php

@@ -139,11 +139,15 @@ class StockInOrderClass extends BaseClass
                 $transaction->rollBack();
                 util::fail("订单异常");
             }
-            foreach ($itemInfo as $v){
-                ProductClass::addStockByItemNum($v['productId'],$v['itemNum']);
+            foreach ($itemInfo as $k=>$v){
+                $stockInfo = ProductClass::addStockByItemNum($v['productId'],$v['itemNum']);
+                $itemInfo[$k]['oldStock'] = $stockInfo['oldStock'];
+                $itemInfo[$k]['itemStock'] = $stockInfo['oldStock'];
+                $itemInfo[$k]['newStock'] = $stockInfo['newStock'];
             }
             //流水记录
             $orderData['shopId'] = $shopId;
+            $orderData['itemInfo'] = $itemInfo;
             StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK);
             $transaction->commit();
 

+ 22 - 11
biz-ghs/order/classes/StockOutOrderClass.php

@@ -50,25 +50,32 @@ class StockOutOrderClass extends BaseClass
 
         try{
             $order = self::add($data);
+            //先减库存,若取消出库则加回来
+            foreach ($ghsItemInfo as $k=>$v){
+                $stockInfo = ProductClass::decreaseStock($v['productId'],$v['bigNum'],$v['smallNum']);
+                $ghsItemInfo[$k]['oldStock'] = $stockInfo['oldStock'];
+                $ghsItemInfo[$k]['newStock'] = $stockInfo['newStock'];
+            }
+
             //写入详情表
             $batchData = self::groupOrderItem($ghsItemInfo,$orderSn);
             StockOutOrderItemClass::batchAddOrderItem($batchData);
 
-            //先减库存,若取消出库则加回来
+
             $orderData =  self::getOrderDetail($orderSn,$data['outShopId']);
-            //减库存
+            $orderData['shopId'] = $data['outShopId'];
             $itemInfo = $orderData['itemInfo']??[];
             if(empty($itemInfo)){
                 $transaction->rollBack();
                 util::fail("订单异常");
             }
-            foreach ($itemInfo as $v){
-                ProductClass::decreaseStockByItemNum($v['productId'],$v['itemNum']);
-            }
+
+            //写流水
+            StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK);
 
             $transaction->commit();
             if($action===self::ACTION_CONFIRM){
-                //直接出库=》直接入库
+                //直接出库=》入库
                 self::confirmOrder($orderSn,$data['outShopId'],$data['adminId']);
             }
             return $order;
@@ -111,7 +118,6 @@ class StockOutOrderClass extends BaseClass
                 util::fail("订单异常");
             }
             $orderData['shopId'] = $shopId;
-            StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK);
 
             //写入一条数据到入库门店的入库订单表(生成入库订单号
             $inOrderData = StockInOrderClass::addOrder($orderData);
@@ -145,15 +151,19 @@ class StockOutOrderClass extends BaseClass
         ];
 
         $orderData =  self::getOrderDetail($orderSn,$shopId);
+        $orderData['shopId'] = $shopId;
         //加库存
         $itemInfo = $orderData['itemInfo']??[];
         if(empty($itemInfo)){
             util::fail("订单异常");
         }
-        foreach ($itemInfo as $v){
-            ProductClass::addStockByItemNum($v['productId'],$v['itemNum']);
+        foreach ($itemInfo as $k=>$v){
+            $stockInfo = ProductClass::addStockByItemNum($v['productId'],$v['itemNum']);
+            $itemInfo[$k]['oldStock'] = $stockInfo['oldStock'];
+            $itemInfo[$k]['itemStock'] = $stockInfo['oldStock'];
+            $itemInfo[$k]['newStock'] = $stockInfo['newStock'];
         }
-        $orderData =  self::getOrderDetail($orderSn,$shopId);
+        $orderData['itemInfo'] = $itemInfo;
         StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK_CANCEL);
         self::updateByCondition($where,$data);
 
@@ -231,7 +241,8 @@ class StockOutOrderClass extends BaseClass
             $tmp['itemId'] = $itemId;
             $tmp['productId'] = $v['productId'];
             $unitNum = $productData[$productId]['ratio']??0;
-            $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
+            $tmp['itemStock'] = $v['oldStock'];//当时库存
+            $tmp['newStock'] = $v['newStock'];//当时库存
             $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);// 数量
             $tmp['itemPrice'] =$productData[$productId]['price']??0; //当时售卖的价格
             $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量

+ 12 - 12
biz-ghs/product/classes/ProductClass.php

@@ -193,7 +193,7 @@ class ProductClass extends BaseClass
      * @param $productId  门店下的花材ID(xhGhsItemInfo 主键ID)
      * @param $itemNumBundle  花材数量(扎)
      * @param $itemNumPiece  花材数量(支)
-     * @return bool
+     * @return mixed
      */
     public static function addStock($productId, $itemNumBundle, $itemNumPiece)
     {
@@ -207,14 +207,14 @@ class ProductClass extends BaseClass
             util::unlock($key);
             util::fail("花材不存在");
         }
-        $itemId = $productData['itemId'];
-        $unitNum = xhItemService::getItemUnitNum($itemId);
+        // $itemId = $productData['itemId'];
+        $ratio = $productData['ratio'];
         //转成小数,加库存
-        $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $unitNum);
+        $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $ratio);
         $newStock = bcadd($productData['stock'], $itemNum, 2);
         self::updateStockById($productId, $newStock);
         util::unlock($key);
-        return true;
+        return ['oldStock'=>$productData['stock'],'newStock'=>$newStock];
     }
 
 
@@ -224,7 +224,7 @@ class ProductClass extends BaseClass
      * 对商品ID 加库存
      * @param $productId  商品ID
      * @param $itemNum  数量
-     * @return bool
+     * @return mixed
      */
     public static function addStockByItemNum($productId, $itemNum)
     {
@@ -241,7 +241,7 @@ class ProductClass extends BaseClass
         $newStock = bcadd($productData->stock, $itemNum, 2);
         self::updateStockById($productId, $newStock);
         util::unlock($key);
-        return true;
+        return ['oldStock'=>$productData['stock'],'newStock'=>$newStock];
     }
 
     //减库存,允许负库存,负数数量(盘点时)
@@ -251,7 +251,7 @@ class ProductClass extends BaseClass
      * @param $itemNumBundle  花材数量(扎)
      * @param $itemNumPiece  花材数量(支)
      * @param $checkStock boolean 是否需要判断库存
-     * @return bool
+     * @return mixed
      */
     public static function decreaseStock($productId, $itemNumBundle, $itemNumPiece,$checkStock=false)
     {
@@ -266,7 +266,7 @@ class ProductClass extends BaseClass
             util::fail("花材不存在");
         }
 
-        $ratio = $productData['ratio'];
+        $ratio = $productData->ratio;
         //转成小数,更新库存
         $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $ratio);
         $newStock = bcsub($productData->stock, $itemNum, 2);
@@ -277,7 +277,7 @@ class ProductClass extends BaseClass
         }
         self::updateStockById($productId, $newStock);
         util::unlock($key);
-        return true;
+        return ['oldStock'=>$productData['stock'],'newStock'=>$newStock];
     }
 
 
@@ -286,7 +286,7 @@ class ProductClass extends BaseClass
     /**
      * @param $productId
      * @param $itemNum
-     * @return bool
+     * @return mixed  返回减之前的库存,和减之后的库存
      */
     public static function decreaseStockByItemNum($productId, $itemNum,$checkStock=false)
     {
@@ -308,7 +308,7 @@ class ProductClass extends BaseClass
         }
         self::updateStockById($productId, $newStock);
         util::unlock($key);
-        return true;
+        return ['oldStock'=>$productData['stock'],'newStock'=>$newStock];
     }
 
 

+ 10 - 2
biz-ghs/stock/classes/StockRecordClass.php

@@ -19,13 +19,19 @@ class StockRecordClass extends BaseClass
     const STOCK_RECORD_TYPE_SELL_STOCK = 5; //销售(卖出)
     const STOCK_RECORD_TYPE_OUT_STOCK_CANCEL = 6; //取消入库
     const STOCK_RECORD_TYPE_IN_STOCK_CANCEL = 7; //取消出库
+    const STOCK_RECORD_TYPE_SELL_STOCK_CANCEL = 8;// 取消售卖
+
 
     public static $typeMap = [
         self::STOCK_RECORD_TYPE_PURCHASE=>'采购入库',
         self::STOCK_RECORD_TYPE_IN_STOCK=>'调拨入库',
         self::STOCK_RECORD_TYPE_OUT_STOCK=>'调拨出库',
         self::STOCK_RECORD_TYPE_CHECK_STOCK=>'盘点',
-        self::STOCK_RECORD_TYPE_SELL_STOCK=>'开单出库',
+        self::STOCK_RECORD_TYPE_SELL_STOCK=>'开单',
+        self::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL=>'取消入库',
+        self::STOCK_RECORD_TYPE_IN_STOCK_CANCEL=>'取消出库',
+        self::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL=>'取消开单',
+
     ];
 
     public static function getRecordList($where)
@@ -61,6 +67,8 @@ class StockRecordClass extends BaseClass
     }
 
     //根据order 记录流水
+    // sjId,shopId,orderSn
+    //itemInfo = [{productId:1,itemId:1,itemNum:操作的花材数据,oldStock(itemStock):当时库存,newStock:变化后的库存}]
     public static function addRecordByOrder($orderData,$type)
     {
         $itemInfo = $orderData['itemInfo'];
@@ -79,7 +87,7 @@ class StockRecordClass extends BaseClass
             $record['oldStock'] = $v['itemStock']; //当时库存
             $record['recordType'] =$type;
             $record['productId'] = $productId;
-            $record['newStock'] = $productData[$productId]['stock'];// 最新库存
+            $record['newStock'] = $v['newStock'];// 最新库存
 //            switch ($type){
 //                case self::STOCK_RECORD_TYPE_OUT_STOCK:
 //                    //出库

+ 7 - 0
biz-ghs/stock/services/StockRecordService.php

@@ -60,4 +60,11 @@ class StockRecordService extends BaseService
         $data['recordType'] = StockRecordClass::STOCK_RECORD_TYPE_SELL_STOCK;
         return StockRecordClass::addRecord($data);
     }
+
+    //取消销售订单
+    public static function addSellStockOrderCancelRecord($data)
+    {
+        $data['recordType'] = StockRecordClass::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL;
+        return StockRecordClass::addRecord($data);
+    }
 }

+ 14 - 2
biz-hd/purchase/classes/PurchaseClass.php

@@ -8,6 +8,7 @@ use biz\shop\models\Shop;
 use bizGhs\admin\classes\AdminClass;
 use bizGhs\order\traits\OrderTrait;
 use bizGhs\product\classes\ProductClass;
+use bizGhs\stock\services\StockRecordService;
 use bizHd\purchase\models\Purchase;
 use common\components\dict;
 use common\components\orderSn;
@@ -303,7 +304,18 @@ class PurchaseClass extends BaseClass
         $orderSn = $purchase->orderSn;
         $purchaseItem = PurchaseItemClass::getAllByCondition(['orderSn' => $orderSn], null, "*");
         foreach ($purchaseItem as $v) {
-            ProductClass::addStockByItemNum($v['productId'], $v['itemNum']);
+            $stockInfo = ProductClass::addStockByItemNum($v['productId'], $v['itemNum']);
+            //记录库存流水
+            $recordData = [];
+            $recordData['merchantId'] = $purchase->merchantId;
+            $recordData['shopId'] = $purchase->shopId;
+            $recordData['itemId'] = $v['itemId']??0;
+            $recordData['itemNum'] = $v['itemNum'];
+            $recordData['oldStock'] = $stockInfo['oldStock'];
+            $recordData['newStock'] = $stockInfo['newStock'];
+            $recordData['productId'] = $v['productId'];
+            $recordData['orderSn'] = $orderSn;
+            StockRecordService::addPurchaseOrderRecord($recordData);
         }
     }
 
@@ -327,4 +339,4 @@ class PurchaseClass extends BaseClass
         $shop->save();
     }
 
-}
+}

+ 7 - 1
sql.sql

@@ -2584,4 +2584,10 @@ ALTER TABLE `xhGhsStockRecord`
 ADD COLUMN `productId`  int(11) NOT NULL DEFAULT 0 AFTER `orderSn`;
 
 ---shish 20210518
-ALTER TABLE xhGhsOrder ADD customPrice DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMMENT '客户实际付款金额' AFTER `actPrice`;
+ALTER TABLE xhGhsOrder ADD customPrice DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMMENT '客户实际付款金额' AFTER `actPrice`;
+
+
+----linqh  2021.5.18
+ALTER TABLE `xhGhsStockOutOrderItem`
+MODIFY COLUMN `itemStock`  decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '当时的库存(变更前)' AFTER `itemNum`,
+ADD COLUMN `newStock`  decimal(10,2) NOT NULL DEFAULT 0 COMMENT '变更后的库存' AFTER `itemPrice`;