shish il y a 5 ans
Parent
commit
56935c3650

+ 13 - 0
app/ghs/controllers/ItemController.php

@@ -5,6 +5,7 @@ namespace ghs\controllers;
 use bizGhs\item\classes\ItemClass;
 use bizGhs\item\services\ItemService;
 use common\components\util;
+use common\services\xhItemService;
 use Yii;
 class ItemController extends BaseController
 {
@@ -45,4 +46,16 @@ class ItemController extends BaseController
         ItemService::deleteGhsItem($id,$this->shopId,$this->adminId);
         util::complete('操作成功');
     }
+
+    //获取平台里的花材信息
+    public function actionPlatformItem()
+    {
+        $py = Yii::$app->request->get('py','');
+        $where = [];
+        if($py){
+            $where = ['py' => $py];
+        }
+        $list = xhItemService::getItemList('*',$where,'id desc');
+        util::success($list);
+    }
 }

+ 4 - 0
app/ghs/controllers/ProductController.php

@@ -25,14 +25,18 @@ class ProductController extends BaseController
         //获取所有当前供应商的分类 (全部、常用)
         //根据分类组装分类下的花材信息
         $classIds = ItemClassClass::getGhsItemClassAll($this->merchantId);
+
         //获取供应商下所有花材ID (itemIds)
         $itemIdsInfo = ItemService::getGhsItemIds($this->merchantId);
+
         $itemIds = array_column($itemIdsInfo,'itemId');
         if($py){
             $pyNameItemIds = ItemClass::getItemIdsByPyName($py);
             $itemIds = array_intersect($itemIds,$pyNameItemIds);
         }
+
         $itemInfoData = ProductClass::getProductInfoByItemIds($itemIds);
+
         //常用的itemIds
         $oftenItemIds = ProductClass::getOftenItemIds($this->merchantId);
 

+ 12 - 4
app/ghs/controllers/StockOutController.php

@@ -40,8 +40,10 @@ class StockOutController extends BaseController
         $post['inShopId'] = $inShopId;
         //是否判断 inShopId 下还有未完成出库的订单?
         //todo
-
-
+        $check = StockOutOrderClass::getByCondition(['outShopId'=>$this->shopId,'inShopId'=>$inShopId,'status'=>StockOutOrderClass::STATUS_WAIT]);
+        if($check){
+            util::fail('还有待出库的订单');
+        }
         $ghsItemInfo = $post['itemInfo']??'';
         if(empty($ghsItemInfo)){
             util::fail('请选择花材');
@@ -79,7 +81,7 @@ class StockOutController extends BaseController
     }
 
     //确认出库 linqh 2021.1.23
-    public function actionConfirmOut()
+    public function actionConfirmOrder()
     {
         $get = Yii::$app->request->get();
         $orderSn = $get['orderSn'];
@@ -89,5 +91,11 @@ class StockOutController extends BaseController
 
 
     //取消出库 linqh 2021.1.23
-
+    public function actionCancelOrder()
+    {
+        $get = Yii::$app->request->get();
+        $orderSn = $get['orderSn'];
+        StockOutOrderClass::cancelOrder($orderSn,$this->shopId,$this->adminId);
+        util::complete("取消成功");
+    }
 }

+ 13 - 7
app/ghs/controllers/TestController.php

@@ -6,6 +6,7 @@ use biz\merchant\services\MerchantService;
 use biz\message\classes\InformAdminClass;
 use biz\message\services\InformAdminService;
 use biz\order\services\OrderService;
+use bizGhs\product\classes\ProductClass;
 use common\components\wxUtil;
 use Yii;
 use common\components\util;
@@ -15,6 +16,11 @@ class TestController extends BaseController
 
 	public $withoutLogin = ['inform', 'notice','order-query','add-order'];
 
+	public function actionIndex()
+    {
+
+    }
+
 	//新增订单
 	public function actionAddOrder()
 	{
@@ -24,13 +30,13 @@ class TestController extends BaseController
 		require_once $dada . 'client/dadaResponse.php';
 		require_once $dada . 'config/config.php';
 		require_once $dada . 'model/orderModel.php';
-		
+
 		// isOnline 判断是否是测试环境,会有不同的域名等
 		$isOnline = false;
 		$sourceId = 1000000;
 		// 初始化一个config
 		$config = new \Config($sourceId, $isOnline);
-		
+
 		$orderModel = new \OrderModel();
 		$orderModel->setShopNo('11047059');
 		$orderModel->setOriginId('2018091100000002');
@@ -61,7 +67,7 @@ class TestController extends BaseController
 		require_once $dada . 'client/dadaResponse.php';
 		require_once $dada . 'config/config.php';
 		require_once $dada . 'model/orderModel.php';
-		
+
 		// isOnline 判断是否是测试环境,会有不同的域名等
 		$isOnline = false;
 		$sourceId = 1000000;
@@ -78,7 +84,7 @@ class TestController extends BaseController
 		$resp = $dada_client->makeRequest();
 		echo json_encode($resp);
 	}
-	
+
 	public function actionFocus()
 	{
 		$name = '花卉宝';
@@ -89,7 +95,7 @@ class TestController extends BaseController
 		$list = wxUtil::getSubscribeUserList($merchant);
 		dd($list);
 	}
-	
+
 	//宝贝售出提醒 shish 2020.1.30
 	public function actionInform()
 	{
@@ -107,5 +113,5 @@ class TestController extends BaseController
 		$msg = serialize($data);
 		$r = $producer->publish($msg, 'informExchange', 'informRoute');
 	}
-	
-}
+
+}

+ 50 - 56
biz-ghs/order/classes/CheckOrderClass.php

@@ -40,28 +40,10 @@ class CheckOrderClass extends BaseClass
 
         $data['orderSn'] = $orderSn;
         $ghsItemInfo = $data['itemInfo']; // [{bigNum:0,smallNum:0,productId:1}]
-        $bigNum = 0; //总共多少扎
-        $smallNum = 0; //总共多少支
-
-
-        $productIds = array_column($ghsItemInfo,'productId');
-        $productData = ProductClass::getProductByIds($productIds);
-        $itemIds =  array_column($productData,'itemId');
-        $productData =  array_column($productData, NULL, 'id');
-
-        $itemData = xhItemService::getByIds($itemIds);
-        $itemData = array_column($itemData, NULL, 'id');
-
-        if(!empty($ghsItemInfo)){
-            foreach ($ghsItemInfo as $v){
-                $bigNum += $v['bigNum']??0;
-                $smallNum += $v['smallNum']??0;
-
-            }
-        }
-        $data['bigNum'] = $bigNum;
-        $data['smallNum'] = $smallNum;
 
+        $sumNum = self::sumNumByItemInfo($ghsItemInfo);
+        $data['bigNum'] = $sumNum['bigNum'];// 总的大单位数量 总共多少扎
+        $data['smallNum'] = $sumNum['smallNum']; //总的小单位数量 总共多少支
         $connection = Yii::$app->db;
         $transaction = $connection->beginTransaction();
         try{
@@ -71,36 +53,7 @@ class CheckOrderClass extends BaseClass
             }
             $order = self::add($data);
             //写入详情表
-            $batchData = [];
-
-            foreach ($ghsItemInfo as $v){
-                $tmp = [];
-                $productId =  $v['productId']??0;
-                $itemId = $productData[$productId]['itemId'];
-                $tmp['productId'] = $productId;
-                $tmp['orderSn'] = $orderSn;
-                $tmp['itemId'] = $itemId;
-                $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
-                $unitNum = $itemData[$itemId]['unitNum']??0;
-                $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);
-                $tmp['profitLossNum'] = bcsub(   $tmp['itemNum']- $tmp['itemStock'],2); //盈亏数 = 盘点数-当时库存数
-                $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
-                $itemInfo = [
-                    'itemName'=> $itemData[$itemId]['name']??'',
-                    'itemCover'=> $itemData[$itemId]['cover']??'',
-                    'bigNum'=> $v['bigNum']??0,
-                    'smallNum'=> $v['smallNum']??0,
-                    'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
-                    'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
-                    'bigNumProfitLoss'=>bcsub($v['bigNum'],$stockFormat['bigNum'],2),//大单位的盈亏
-                    'smallNumProfitLoss'=>bcsub($v['smallNum'],$stockFormat['smallNum'],2),//小单位的盈亏
-                    'itemUnit'=> $unitNum?2:1,
-                    'itemBigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']??1),
-                    'itemSmallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']??2),
-                ];
-                $tmp['itemInfo'] = json_encode($itemInfo);
-                $batchData[] = $tmp;
-            }
+            $batchData = self::groupOrderItem($ghsItemInfo,$orderSn);
             if($update){
                 //先删除
                 CheckOrderItemClass::deleteByCondition(['orderSn'=>$orderSn]);
@@ -111,6 +64,7 @@ class CheckOrderClass extends BaseClass
                 //盘点完成完成,直接将库存中的数量改为当时盘点的数量
                 foreach ($batchData as $v){
                     $productId = $v['productId'];
+                    //修改库存数量
                     ProductClass::updateStockById($productId,$v['itemNum'],$adminId);
                     //流水记录
                     $record = [];
@@ -118,11 +72,10 @@ class CheckOrderClass extends BaseClass
                     $record['shopId'] = $shopId;
                     $record['orderSn'] = $orderSn;
                     $record['itemId'] = $v['itemId'];
-                    $record['itemNum'] = $v['itemNum'];
+                    $record['itemNum'] = $v['profitLossNum'];//盈亏数
                     $record['oldStock'] = $v['itemStock'];
                     $record['newStock'] =  $v['itemNum']; //新库存直接等于盘点的数量
-                    StockRecordService::addPurchaseOrderRecord($record);
-
+                    StockRecordService::addCheckOrderRecord($record);
                 }
             }
             $transaction->commit();
@@ -159,8 +112,8 @@ class CheckOrderClass extends BaseClass
                 $info = json_decode($v['itemInfo'],true);
                 $tmp = $info;
                 $tmp['itemCover'] = self::groupImg($info['itemCover']);
-                $tmp['productId'] = $v['productId'];
-                $tmp['itemId'] = $v['itemId'];
+                unset($v['itemInfo']);
+                $tmp = array_merge($tmp,$v);
                 $itemData[] = $tmp;
             }
         }
@@ -183,5 +136,46 @@ class CheckOrderClass extends BaseClass
         return $orderData;
     }
 
+    // 组装 orderItem  linqh 2021.1.25
+    public static function groupOrderItem($ghsItemInfo,$orderSn)
+    {
+        $productData = self::getProductMapData($ghsItemInfo);
+        $itemIds =  array_column($productData,'itemId');
+        $itemData = xhItemService::getByIds($itemIds);
+        $itemData = array_column($itemData, NULL, 'id');
+        //写入详情表
+        $batchData = [];
+        foreach($ghsItemInfo as $v){
+            $tmp = [];
+            $productId = $v['productId'];
+            $itemId = $productData[$productId]['itemId'];
+            $tmp['orderSn'] = $orderSn;
+            $tmp['itemId'] = $itemId;
+            $tmp['productId'] = $v['productId'];
+            $unitNum = $itemData[$itemId]['unitNum']??0;
+            $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
+            $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);// 盘点数量
+            $tmp['itemPrice'] =$productData[$productId]['price']??0; //当时售卖的价格
+            $tmp['profitLossNum'] = bcsub(   $tmp['itemNum']- $tmp['itemStock'],2); //盈亏数 = 盘点数-当时库存数
+            $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
+            $itemInfo = [
+                'itemName'=> $itemData[$itemId]['name']??'',//花材名称
+                'itemCover'=> $itemData[$itemId]['cover']??'',//花材图片
+                'bigNum'=> $v['bigNum']??0,//数量(大单位)
+                'smallNum'=> $v['smallNum']??0,//数量(小单位)
+                'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
+                'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
+                'bigNumProfitLoss'=>bcsub($v['bigNum'],$stockFormat['bigNum'],2),//大单位的盈亏
+                'smallNumProfitLoss'=>bcsub($v['smallNum'],$stockFormat['smallNum'],2),//小单位的盈亏
+                'itemUnit'=> $unitNum?2:1,//单位
+                'ratio'=>$unitNum,// 比例
+                'bigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']),//大单位名称 扎
+                'smallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']),//小单位名称 支
+            ];
+            $tmp['itemInfo'] = json_encode($itemInfo);
+            $batchData[] = $tmp;
+        }
+        return $batchData;
+    }
 
 }

+ 46 - 42
biz-ghs/order/classes/PurchaseOrderClass.php

@@ -39,16 +39,6 @@ class PurchaseOrderClass extends BaseClass
         $smallNum = 0; //总共多少支
         $totalItemPrice = 0;
 
-
-        $productIds = array_column($ghsItemInfo,'productId');
-        $productData = ProductClass::getProductByIds($productIds);
-        //通过productData 获取itemID. 对传过来的itemId 不用
-        $itemIds = array_column($productData,'itemId');
-        $productData =  array_column($productData, NULL, 'id');
-
-        $itemData = xhItemService::getByIds($itemIds);
-        $itemData = array_column($itemData, NULL, 'id');
-
         if(!empty($ghsItemInfo)){
             foreach ($ghsItemInfo as $v){
                 $bigNum += $v['bigNum']??0;
@@ -80,32 +70,9 @@ class PurchaseOrderClass extends BaseClass
         try{
 
             $order = self::add($data);
+            //组装详情表数据
+            $batchData = self::groupOrderItem($ghsItemInfo,$orderSn);
             //写入详情表
-            $batchData = [];
-
-            foreach ($ghsItemInfo as $v){
-                $tmp = [];
-                $productId = $v['productId'];
-                $itemId = $productData[$productId]['itemId'];
-                $tmp['orderSn'] = $orderSn;
-                $tmp['itemId'] = $itemId;
-                $tmp['productId'] = $v['productId'];
-                $unitNum = $itemData[$itemId]['unitNum']??0;
-                $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);
-                $tmp['itemPrice'] = $v['itemPrice'];
-                $itemInfo = [
-                    'itemName'=> $itemData[$itemId]['name']??'',
-                    'itemCover'=> $itemData[$itemId]['cover']??'',
-                    'bigNum'=> $v['bigNum']??0,
-                    'smallNum'=> $v['smallNum']??0,
-                    'unitCount'=> $unitNum?2:1,
-                    'bigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']),
-                    'smallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']),
-                ];
-                $tmp['itemInfo'] = json_encode($itemInfo);
-                $batchData[] = $tmp;
-            }
-
             PurchaseOrderItemClass::batchAddOrderItem($batchData);
             //现在暂时点击确定,完成 加库存
             foreach ($batchData as $v){
@@ -118,8 +85,8 @@ class PurchaseOrderClass extends BaseClass
                 $record['orderSn'] = $orderSn;
                 $record['itemId'] = $itemId;
                 $record['itemNum'] = $v['itemNum'];
-                $record['oldStock'] = $productData[$productId]['stock'];
-                $record['newStock'] =  bcadd($productData[$productId]['stock'],$v['itemNum'],2);
+                $record['oldStock'] = $v['itemStock'];
+                $record['newStock'] =  bcadd($v['itemStock'],$v['itemNum'],2);
                 StockRecordService::addPurchaseOrderRecord($record);
                 //加库存
                 ProductClass::addStockByItemNum($productId,$v['itemNum']);
@@ -160,20 +127,57 @@ class PurchaseOrderClass extends BaseClass
             foreach ($orderInfo as $v) {
                 $info = json_decode($v['itemInfo'],true);
                 $tmp = $info;
-                $tmp['productId'] = $v['productId'];
-                $tmp['itemId'] = $v['itemId'];
-                $tmp['itemPrice'] = $v['itemPrice'];
                 $tmp['itemCover'] = self::groupImg($info['itemCover']);
+                unset($v['itemInfo']);
+                $tmp = array_merge($tmp,$v);
                 $itemData[] = $tmp;
             }
         }
+        $orderData = self::groupAdmin($orderData);
         $gysInfo = SupplierClass::getById($orderData['supplierId']);
-        $orderData['adminName'] = $gysInfo['adminName']??'';
+        $orderData['upName'] = $gysInfo['adminName']??'';
         $orderData['upCover'] = $gysInfo['upCover']??'';
         $orderData['itemInfo'] = $itemData;
         return $orderData;
     }
 
-
+    // 组装 orderItem  linqh 2021.1.25
+    public static function groupOrderItem($ghsItemInfo,$orderSn)
+    {
+        $productData = self::getProductMapData($ghsItemInfo);
+        $itemIds =  array_column($productData,'itemId');
+        $itemData = xhItemService::getByIds($itemIds);
+        $itemData = array_column($itemData, NULL, 'id');
+        //写入详情表
+        $batchData = [];
+        foreach($ghsItemInfo as $v){
+            $tmp = [];
+            $productId = $v['productId'];
+            $itemId = $productData[$productId]['itemId'];
+            $tmp['orderSn'] = $orderSn;
+            $tmp['itemId'] = $itemId;
+            $tmp['productId'] = $v['productId'];
+            $unitNum = $itemData[$itemId]['unitNum']??0;
+            $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
+            $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);// 采购数量
+            $tmp['itemPrice'] = $v['itemPrice']; //采购价格
+            $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
+            $itemInfo = [
+                'itemName'=> $itemData[$itemId]['name']??'',//花材名称
+                'itemCover'=> $itemData[$itemId]['cover']??'',//花材图片
+                'bigNum'=> $v['bigNum']??0,//采购数量(大单位)
+                'smallNum'=> $v['smallNum']??0,//采购数量(小单位)
+                'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
+                'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
+                'itemUnit'=> $unitNum?2:1,//单位
+                'ratio'=>$unitNum,// 比例
+                'bigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']),//大单位名称 扎
+                'smallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']),//小单位名称 支
+            ];
+            $tmp['itemInfo'] = json_encode($itemInfo);
+            $batchData[] = $tmp;
+        }
+        return $batchData;
+    }
 
 }

+ 73 - 7
biz-ghs/order/classes/StockInOrderClass.php

@@ -2,7 +2,9 @@
 
 namespace bizGhs\order\classes;
 
+use bizGhs\order\traits\OrderTrait;
 use bizGhs\product\classes\ProductClass;
+use bizGhs\stock\classes\StockRecordClass;
 use common\components\orderSn;
 use common\components\util;
 use Yii;
@@ -10,10 +12,11 @@ use bizGhs\base\classes\BaseClass;
 
 class StockInOrderClass extends BaseClass
 {
-
+    use OrderTrait;
     const STATUS_WAIT = 1; //待入库
     const STATUS_COMPLETE = 2 ; //已入库
     const STATUS_CANCEL = 3; //取消入库
+    const ACTION_CONFIRM = 'confirm'; //直接入库
     public static $baseFile = '\bizGhs\order\models\StockInOrder';
 
     //入库 (状态在待入库中 )linqh  2021.1.23
@@ -52,7 +55,6 @@ class StockInOrderClass extends BaseClass
                 $tmp = [];
                 $itemId = $v['itemId'];
                 $productId =  $itemData[$itemId]['id']??0;
-
                 if(!$productId){
                     util::fail("入库失败");
                 }
@@ -60,7 +62,6 @@ class StockInOrderClass extends BaseClass
                 $tmp['orderSn'] = $orderSn;
                 $tmp['itemId'] = $itemId;
                 $tmp['itemStock'] = $itemData[$itemId]['stock']??0;//当时库存
-
                 $tmp['itemNum'] = $v['itemNum'];
                 $tmp['itemPrice'] = $v['itemPrice']; //售卖的价格
 
@@ -72,8 +73,9 @@ class StockInOrderClass extends BaseClass
                     'bigNumStock'=> $v['bigNumStock'],// 当时库存大单位数
                     'smallNumStock'=> $v['smallNumStock'],//当时库存 小单位数
                     'itemUnit'=> $v['itemUnit'],
-                    'itemBigUnit'=> $v['itemBigUnit'],
-                    'itemSmallUnit'=> $v['itemSmallUnit'],
+                    'ratio'=>$v['ratio'],// 比例
+                    'bigUnit'=> $v['bigUnit'],
+                    'smallUnit'=> $v['smallUnit'],
                 ];
                 $tmp['itemInfo'] = json_encode($itemInfo);
                 $batchData[] = $tmp;
@@ -89,14 +91,78 @@ class StockInOrderClass extends BaseClass
     }
 
     //确定入库
+    //修改状态 1=》2
+    // 加库存
+    // 加流水记录
     public static function confirmOrder($orderSn,$shopId,$adminId)
     {
+        $data = [
+            'status'=>self::STATUS_COMPLETE,
+            'adminId'=>$adminId,
+        ];
+        $orderData =  self::getOrderDetail($orderSn,$shopId);
+        if($orderData['status'] != self::STATUS_WAIT){
+            util::fail("订单已处理");
+        }
+        $orderId = $orderData['id'];
+        $connection = Yii::$app->db;
+        $transaction = $connection->beginTransaction();
+        try{
+            self::updateById($orderId,$data);
+            //加库存
+            $itemInfo = $orderData['itemInfo']??[];
+            if(empty($itemInfo)){
+                $transaction->rollBack();
+                util::fail("订单异常");
+            }
+
+            foreach ($itemInfo as $v){
+                ProductClass::addStockByItemNum($v['productId'],$v['itemNum']);
+            }
+
+            //流水记录
+            $orderData['shopId'] = $shopId;
+            StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_IN_STOCK);
+
+            $transaction->commit();
+
+        }catch (\Exception $exception){
+            $transaction->rollBack();
+            util::fail();
+        }
 
     }
 
-    //取消入库
-    public static function cancelOrder($orderSn,$shopId,$adminId)
+
+
+    //2021.1.23 linqh 订单详情
+    public static function getOrderDetail($orderSn,$shopId)
     {
+        $orderData = self::orderExist(['orderSn'=>$orderSn,'outShopId'=>$shopId]);
+        $orderInfo = StockInOrderItemClass::getOrderItemDetail($orderSn);
+        $itemData = [];
+        if($orderInfo) {
+            foreach ($orderInfo as $v) {
+                $info = json_decode($v['itemInfo'],true);
+                $tmp = $info;
+                $tmp['itemCover'] = self::groupImg($info['itemCover']);
+                unset($v['itemInfo']);
+                $tmp = array_merge($tmp,$v);
+                $itemData[] = $tmp;
+            }
+        }
+        $orderData = self::groupAdmin($orderData);
+        $orderData['itemInfo'] = $itemData;
+        return $orderData;
+    }
 
+    //2021.1.25 linqh 判断定时是否存在
+    public static function orderExist($where)
+    {
+        $orderData = self::getByCondition($where);
+        if(!$orderData) {
+            util::fail('订单不存在');
+        }
+        return $orderData;
     }
 }

+ 0 - 8
biz-ghs/order/classes/StockInSnClass.php

@@ -10,12 +10,4 @@ class StockInSnClass extends BaseClass
 
 	public static $baseFile = '\bizGhs\order\models\StockInSn';
 
-    public static function batchAddOrderItem($data)
-    {
-        self::batchAdd($data);
-    }
-    public static function getOrderItemDetail($orderSn)
-    {
-        return self::getAllByCondition(['orderSn'=>$orderSn],null,'*');
-    }
 }

+ 64 - 98
biz-ghs/order/classes/StockOutOrderClass.php

@@ -17,6 +17,8 @@ class StockOutOrderClass extends BaseClass
     const STATUS_WAIT = 1; //待出库
     const STATUS_COMPLETE = 2 ; //已出库
     const STATUS_CANCEL = 3; //取消出库
+    const STATUS_BACK = 4; //退回,取消入库
+
 
     const ACTION_WAIT = 'wait';
     const ACTION_CONFIRM = 'confirm'; //直接入库
@@ -25,74 +27,28 @@ class StockOutOrderClass extends BaseClass
 
     //2021.1.23 linqh 新增出库订单:
     // 一、保存订单表和订单详情表
-    //二、减改门店的库存,
     public static function addOrder($data)
     {
-
         $action = $data['action'];
         $data['status'] = self::STATUS_WAIT; //待入库
         $orderSn =orderSn::getGhsStockOutSn();
         $data['orderSn'] = $orderSn;
         $ghsItemInfo = $data['itemInfo']; // [{bigNum:0,smallNum:0,productId:1}]
-        $bigNum = 0; //总共多少扎
-        $smallNum = 0; //总共多少支
-
-        $productIds = array_column($ghsItemInfo,'productId');
-        $productData = ProductClass::getProductByIds($productIds);
-        $itemIds =  array_column($productData,'itemId');
-        $productData =  array_column($productData, NULL, 'id');
-
-        $itemData = xhItemService::getByIds($itemIds);
-        $itemData = array_column($itemData, NULL, 'id');
-
-        if(!empty($ghsItemInfo)){
-            foreach ($ghsItemInfo as $v){
-                $bigNum += $v['bigNum']??0;
-                $smallNum += $v['smallNum']??0;
 
-            }
-        }
-        $data['bigNum'] = $bigNum;
-        $data['smallNum'] = $smallNum;
+        $sumNum = self::sumNumByItemInfo($ghsItemInfo);
+        $data['bigNum'] = $sumNum['bigNum'];// 总的大单位数量 总共多少扎
+        $data['smallNum'] = $sumNum['smallNum']; //总的小单位数量 总共多少支
 
         $connection = Yii::$app->db;
         $transaction = $connection->beginTransaction();
         try{
             $order = self::add($data);
             //写入详情表
-            $batchData = [];
-            foreach ($ghsItemInfo as $v){
-                $tmp = [];
-                $productId =  $v['productId']??0;
-                $itemId = $productData[$productId]['itemId'];
-                $tmp['productId'] = $productId;
-                $tmp['orderSn'] = $orderSn;
-                $tmp['itemId'] = $itemId;
-                $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
-                $unitNum = $itemData[$itemId]['unitNum']??0;
-                $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);
-                $tmp['itemPrice'] = $productData[$productId]['price']; //售卖的价格
-                $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
-                $itemInfo = [
-                    'itemName'=> $itemData[$itemId]['name']??'',
-                    'itemCover'=> $itemData[$itemId]['cover']??'',
-                    'bigNum'=> $v['bigNum']??0,// 出库的大单位数量
-                    'smallNum'=> $v['smallNum']??0, //出库的小单位数量
-                    'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
-                    'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
-                    'itemUnit'=> $unitNum?2:1,
-                    'itemBigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']??1),
-                    'itemSmallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']??2),
-                ];
-                $tmp['itemInfo'] = json_encode($itemInfo);
-                $batchData[] = $tmp;
-                //减库存
-                ProductClass::decreaseStock($productId,$v['bigNum'],$v['smallNum']);
-            }
+            $batchData = self::groupOrderItem($ghsItemInfo,$orderSn);
             StockOutOrderItemClass::batchAddOrderItem($batchData);
             $transaction->commit();
             if($action===self::ACTION_CONFIRM){
-                //直接入库
+                //直接出库=》直接入库
                 self::confirmOrder($orderSn,$data['outShopId'],$data['adminId']);
             }
             return $order;
@@ -104,32 +60,31 @@ class StockOutOrderClass extends BaseClass
 
     }
 
+
     //2021.1.23 linqh  确认出库 :
     // 一、从状态 1 修改为 2
-    //
+    // 二、解除解冻的库存 todo
     // 三、增加流水记录
     // 四、写入一条数据到入库门店的入库订单表(生成入库订单号)
     // 五、将入库订单号保存当前记录中
     public static function confirmOrder($orderSn,$shopId,$adminId)
     {
-        $where = [
-            'orderSn'=>$orderSn,
-            'status'=>self::STATUS_WAIT,
-            'outShopId'=>$shopId,
-        ];
-        self::orderExist($where);
+
         $data = [
             'status'=>self::STATUS_COMPLETE,
             'adminId'=>$adminId,
         ];
         $orderData =  self::getOrderDetail($orderSn,$shopId);
+        if($orderData['status'] != self::STATUS_WAIT){
+            util::fail("订单已处理");
+        }
         $merchantId = $orderData['merchantId'];
         $orderId = $orderData['id'];
         $connection = Yii::$app->db;
         $transaction = $connection->beginTransaction();
         try{
             //修改状态
-            self::updateByCondition($where,$data);
+            self::updateById($orderId,$data);
             $itemInfo = $orderData['itemInfo']??[];
             if(empty($itemInfo)){
                 $transaction->rollBack();
@@ -137,24 +92,10 @@ class StockOutOrderClass extends BaseClass
             }
             $orderData['shopId'] = $shopId;
             StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK);
-
-//            $productData = self::getProductMapData($itemInfo);
-//            foreach ($itemInfo as $v){
-//                $itemId = $v['itemId'];
-//                $productId = $v['productId'];
-//                $record = [];
-//                $itemNum = ProductClass::mergeItemNumByItemId($v['bigNum'],$v['smallNum'],$itemId);
-//                $record['merchantId'] = $merchantId;
-//                $record['shopId'] = $shopId;
-//                $record['orderSn'] = $orderSn;
-//                $record['itemId'] = $itemId;
-//                $record['itemNum'] = $itemNum;
-//                $record['oldStock'] = $productData[$productId]['stock'];
-//                $record['newStock'] =  bcsub($productData[$productId]['stock'],$itemNum,2);
-//                //记录流水
-//                StockRecordService::addPurchaseOrderRecord($record);
-//
-//            }
+            //减库存
+            foreach ($itemInfo as $v){
+                ProductClass::decreaseStockByItemNum($v['productId'],$v['itemNum']);
+            }
             //写入一条数据到入库门店的入库订单表(生成入库订单号
             $inOrderData = StockInOrderClass::addOrder($orderData);
             $inOrderSn = $inOrderData['orderSn'];
@@ -171,8 +112,6 @@ class StockOutOrderClass extends BaseClass
 
     //2021.1.23. linqh 取消出库 :
     //一、 从状态1 修改为 3
-    //二、退回库存
-    // 三、记录流水
     public static function cancelOrder($orderSn,$shopId,$adminId)
     {
         $where = [
@@ -180,25 +119,12 @@ class StockOutOrderClass extends BaseClass
             'status'=>self::STATUS_WAIT,
             'outShopId'=>$shopId,
         ];
+        self::orderExist($where);
         $data = [
             'status'=>self::STATUS_CANCEL,
             'adminId'=>$adminId,
         ];
-        $connection = Yii::$app->db;
-        $transaction = $connection->beginTransaction();
-        try{
-            self::updateByCondition($where,$data);
-            $orderData =  self::getOrderDetail($orderSn,$shopId);
-            //退回库存
-            ProductClass::backStockByOrderItemInfo($orderData['itemInfo']);
-            //记录流水
-            $orderData['shopId'] = $orderData['outShopId'];
-            StockRecordClass::addRecordByOrder($orderData,StockRecordClass::STOCK_RECORD_TYPE_OUT_STOCK_CANCEL);
-            $transaction->commit();
-        }catch (\Exception $exception){
-            $transaction->rollBack();
-            util::fail();
-        }
+        self::updateByCondition($where,$data);
 
     }
 
@@ -212,6 +138,7 @@ class StockOutOrderClass extends BaseClass
         }
         $data['list'] = $list;
         $data['list'] = self::groupAdminList($list);
+
         return $data;
     }
 
@@ -226,10 +153,8 @@ class StockOutOrderClass extends BaseClass
                 $info = json_decode($v['itemInfo'],true);
                 $tmp = $info;
                 $tmp['itemCover'] = self::groupImg($info['itemCover']);
-                $tmp['productId'] = $v['productId'];
-                $tmp['itemId'] = $v['itemId'];
-                $tmp['itemPrice'] = $v['itemPrice'];
-                $tmp['itemNum'] = $v['itemNum'];
+                unset($v['itemInfo']);
+                $tmp = array_merge($tmp,$v);
                 $itemData[] = $tmp;
             }
         }
@@ -237,6 +162,7 @@ class StockOutOrderClass extends BaseClass
         $orderData['itemInfo'] = $itemData;
         return $orderData;
     }
+
     //2021.1.23 linqh 判断定时是否存在
     public static function orderExist($where)
     {
@@ -246,4 +172,44 @@ class StockOutOrderClass extends BaseClass
         }
         return $orderData;
     }
+
+    // 组装 orderItem  linqh 2021.1.25
+    public static function groupOrderItem($ghsItemInfo,$orderSn)
+    {
+        $productData = self::getProductMapData($ghsItemInfo);
+        $itemIds =  array_column($productData,'itemId');
+        $itemData = xhItemService::getByIds($itemIds);
+        $itemData = array_column($itemData, NULL, 'id');
+        //写入详情表
+        $batchData = [];
+        foreach($ghsItemInfo as $v){
+            $tmp = [];
+            $productId = $v['productId'];
+            $itemId = $productData[$productId]['itemId'];
+            $tmp['orderSn'] = $orderSn;
+            $tmp['itemId'] = $itemId;
+            $tmp['productId'] = $v['productId'];
+            $unitNum = $itemData[$itemId]['unitNum']??0;
+            $tmp['itemStock'] = $productData[$productId]['stock']??0;//当时库存
+            $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'],$v['smallNum'],$unitNum);// 数量
+            $tmp['itemPrice'] =$productData[$productId]['price']??0; //当时售卖的价格
+            $stockFormat= ProductClass::formatStock($tmp['itemStock'],$unitNum); // 库存总单位数量转大小单位的数量
+            $itemInfo = [
+                'itemName'=> $itemData[$itemId]['name']??'',//花材名称
+                'itemCover'=> $itemData[$itemId]['cover']??'',//花材图片
+                'bigNum'=> $v['bigNum']??0,//数量(大单位)
+                'smallNum'=> $v['smallNum']??0,//数量(小单位)
+                'bigNumStock'=> $stockFormat['bigNum'],// 当时库存大单位数
+                'smallNumStock'=> $stockFormat['smallNum'],//当时库存 小单位数
+                'itemUnit'=> $unitNum?2:1,//单位数量 2表示有两个单位(e.g 扎和支) 1表是只有一个单位(e.g 扎)
+                'ratio'=>$unitNum,// 比例
+                'bigUnit'=> xhItemService::getUnitName($itemData[$itemId]['bigUnit']),//大单位名称 扎
+                'smallUnit'=> xhItemService::getUnitName($itemData[$itemId]['smallUnit']),//小单位名称 支
+            ];
+            $tmp['itemInfo'] = json_encode($itemInfo);
+            $batchData[] = $tmp;
+        }
+        return $batchData;
+    }
+
 }

+ 19 - 1
biz-ghs/order/traits/OrderTrait.php

@@ -10,6 +10,7 @@ namespace bizGhs\order\traits;
 use bizGhs\admin\classes\AdminClass;
 use bizGhs\merchant\classes\SupplierClass;
 use bizGhs\product\classes\ProductClass;
+use common\services\xhItemService;
 
 trait OrderTrait
 {
@@ -35,7 +36,7 @@ trait OrderTrait
     public static function groupAdmin($data)
     {
         $adminId = $data['adminId']??0;
-        $adminInfo = AdminClass::getById($adminId);
+        $adminInfo = AdminClass::getAdminById($adminId);
         $data['adminName'] = $adminInfo['adminName']??'';
         $data['nickName'] = $adminInfo['nickName']??'';
         $data['avatar'] = $adminInfo['avatar']??'';
@@ -67,4 +68,21 @@ trait OrderTrait
         return $productData;
     }
 
+    //通过itemInfo  求和大、小单位数  linqh 2021.1.25
+    public static function sumNumByItemInfo($itemInfo)
+    {
+        $bigNum = 0; //总共多少扎
+        $smallNum = 0; //总共多少支
+        if(!empty($itemInfo)){
+            foreach ($itemInfo as $v){
+                $bigNum += $v['bigNum']??0;
+                $smallNum += $v['smallNum']??0;
+            }
+        }
+        return [
+            'bigNum'=>$bigNum,
+            'smallNum'=>$smallNum
+        ];
+    }
+
 }

+ 24 - 7
biz-ghs/product/classes/ProductClass.php

@@ -28,7 +28,7 @@ class ProductClass extends BaseClass
         //取得itemIds
         $itemIds = array_column($list, 'itemId');
         //获取相应的图片,名称,py
-        $where = ['id' => $itemIds];
+        $where = ['id' =>  ['in', $itemIds]];
         $data = xhItemService::getAllByCondition($where, null, '*');
         if (!empty($data)) {
             $data = array_column($data, NULL, 'id');
@@ -66,15 +66,24 @@ class ProductClass extends BaseClass
     //花材的库存转换: 库存是小数,根据各个花材的unitNum, 计算出多少扎,多少支
     public static function formatStock($stock, $unitNum)
     {
+        $pn = true; //正数
+        if($stock < 0 ){
+            $pn = false;
+            $stock = abs($stock);
+        }
         $bigNum = floor($stock); // 扎
         $stockArr = explode('.', $stock);
         $smallNum = 0; //支
         if (count($stockArr) === 2) {
-            $smallNum = bcdiv(bcmul($stockArr[1], $unitNum, 1), 100);
+            $smallNum = bcmul(($stock-$bigNum),$unitNum);
+        }
+        if(!$pn){
+            $bigNum *=-1;
+            $smallNum *=-1;
         }
         return [
             'bigNum'   => $bigNum,
-            'smallNum' => (int)$smallNum,
+            'smallNum' => $smallNum,
         ];
     }
 
@@ -123,7 +132,7 @@ class ProductClass extends BaseClass
 
 
     //加库存,允许负库存,负数数量(盘点时)
-
+    //todo 库存修改 加锁
     /**
      * @param $productId  门店下的花材ID(xhGhsItemInfo 主键ID)
      * @param $itemNumBundle  花材数量(扎)
@@ -146,6 +155,7 @@ class ProductClass extends BaseClass
     }
 
 
+    //todo 库存修改 加锁
     /**
      * 对商品ID 加库存
      * @param $productId  商品ID
@@ -165,7 +175,7 @@ class ProductClass extends BaseClass
     }
 
     //减库存,允许负库存,负数数量(盘点时)
-
+    //todo 库存修改 加锁
     /**
      * @param $productId  门店下的花材ID(xhGhsItemInfo 主键ID)
      * @param $itemNumBundle  花材数量(扎)
@@ -189,7 +199,13 @@ class ProductClass extends BaseClass
     }
 
 
-    //根据数量加库存
+    //根据数量减库存
+    //todo 库存修改 加锁
+    /**
+     * @param $productId
+     * @param $itemNum
+     * @return bool
+     */
     public static function decreaseStockByItemNum($productId, $itemNum)
     {
         $productData = self::getById($productId);
@@ -311,6 +327,7 @@ class ProductClass extends BaseClass
     }
 
     //修改花材商品的库存(盘点用)
+    //todo 库存修改 加锁
     public static function updateStockById($id, $stock, $adminId = 0)
     {
         $data['stock'] = $stock;
@@ -322,7 +339,7 @@ class ProductClass extends BaseClass
     public static function backStockByOrderItemInfo($orderItemInfo)
     {
         foreach ($orderItemInfo as $v){
-            ProductClass::addStock($v['productId'],$v['bigNum'],$v['smallNum']);
+            ProductClass::addStockByItemNum($v['productId'],$v['itemNum']);
         }
     }
 

+ 1 - 1
common/models/xhItem.php

@@ -7,7 +7,7 @@
 namespace common\models;
 
 
-class xhItem extends xhBaseModel
+class xhItem extends   \biz\base\models\Base
 {
     public static function tableName()
     {

+ 24 - 4
common/services/xhItemService.php

@@ -8,17 +8,37 @@ namespace common\services;
 
 
 use common\models\xhItem;
-
+use Yii;
 class xhItemService
 {
 
+    //列表数据
+    public static function getItemList($select, $where, $order = '', $with = '')
+    {
+        $get = Yii::$app->request->get();
+        $page = isset($get['page']) ? $get['page'] : 1;
+        Yii::$app->params['page'] = $page;
+        $pageSize = isset($get['pageSize']) && !empty($get['pageSize']) ? $get['pageSize'] : Yii::$app->params['pageSize'];
+        $model = new xhItem();
+        $data = $model->getList($select, $where, $page, $pageSize, $order, $with);
+        $list = $data['list'];
+        if($list){
+            foreach ($list as $k => $v) {
+                $list[$k]['cover'] = Yii::$app->params['imgHost'].$v['cover'];
+                $list[$k]['bigUnit'] = xhItemService::getUnitName($v['bigUnit']);
+                $list[$k]['smallUnit'] = xhItemService::getUnitName($v['smallUnit']);
+            }
+        }
+        $data['list'] = $list;
+        return $data;
+    }
     public static function getAllByCondition($condition, $order = null, $field = '*')
     {
-        return xhItem::getAllByCondition($condition, $order,$field);
+        return (new xhItem())->getAllByCondition($condition, $order,$field);
     }
 
     public static function getById($id){
-        return xhItem::getById($id);
+        return (new xhItem())->getById($id);
     }
 
     public static function getItemUnitNum($id)
@@ -30,7 +50,7 @@ class xhItemService
 
     public static function getByIds($ids)
     {
-        return xhItem::getByIds($ids);
+        return (new xhItem())->getByIds($ids);
     }
 
     //先写死,之后查表

+ 6 - 0
sql.sql

@@ -913,6 +913,12 @@ ALTER TABLE `xhGhsProduct`
 MODIFY COLUMN `addTime`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间' AFTER `adminId`,
 MODIFY COLUMN `updateTime`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间' AFTER `addTime`;
 
+
+====
+==linqh 2021.1.25
+ALTER TABLE `xhGhsPurchaseOrderItem`
+ADD COLUMN `itemStock`  decimal(10,2) NOT NULL DEFAULT 0 COMMENT '当时的库存' AFTER `itemId`;
+
 =====
 == shish 20210125
 ALTER TABLE `xhPurchase` ADD `supplierId` INT NOT NULL DEFAULT 0 COMMENT '供货商id' AFTER `shopId`;