Jelajahi Sumber

采购订单保存

林琦海 5 tahun lalu
induk
melakukan
175e705cd6

+ 48 - 0
app/ghs/controllers/PurchaseOrderController.php

@@ -0,0 +1,48 @@
+<?php
+namespace ghs\controllers;
+
+use bizGhs\order\classes\PurchaseOrderClass;
+use common\components\util;
+use Yii;
+class PurchaseOrderController extends BaseController
+{
+
+    //新增采购订单
+    public function actionCreateOrder()
+    {
+        $post = Yii::$app->request->post();
+        $post['ghsId'] = $this->ghsId;
+        $post['shopId'] = $this->shopId;
+        $post['adminId'] = $this->adminId;
+
+        $ghsItemInfo = $post['itemInfo']??'';
+        if(empty($ghsItemInfo)){
+            util::fail('请选择花材');
+        }
+        $ghsItemInfo = json_decode($ghsItemInfo,true);
+        if(!is_array($ghsItemInfo)){
+            util::fail('花材格式不正确');
+        }
+        //判断花材里的信息
+        foreach ($ghsItemInfo as $v){
+            $itemId = $v['itemId']??0;
+            $itemNumBundle = $v['itemNumBundle']??0;
+            $itemNumPiece = $v['itemNumPiece']??0;
+            $itemPrice = $v['itemPrice']??0;
+            if(!$itemId){
+                util::fail('花材不存在');
+            }
+            if($itemNumPiece <=0 && $itemNumBundle <=0){
+                util::fail('花材数量不能为0');
+            }
+        }
+        $post['itemInfo'] = $ghsItemInfo;
+        $order = PurchaseOrderClass::addOrder($post);
+        if($order){
+            util::success($order);
+        }else{
+            util::fail();
+        }
+    }
+
+}

+ 63 - 19
biz-ghs/item/classes/ItemInfoClass.php

@@ -8,6 +8,7 @@ namespace bizGhs\item\classes;
 
 
 use bizGhs\base\classes\BaseClass;
+use bizGhs\item\models\ItemInfo;
 use common\components\business;
 use common\components\util;
 use common\services\xhItemService;
@@ -56,7 +57,7 @@ class ItemInfoClass extends BaseClass
         $stockArr = explode('.',$stock);
         $stockPiece = 0; //支
         if(count($stockArr)===2){
-            $stockPiece = bcdiv(bcmul($stockArr[1],$unitNum),100);
+            $stockPiece = bcdiv(bcmul($stockArr[1],$unitNum,1),100,2);
         }
         return [
             'stockBundle'=>$stockBundle,
@@ -64,6 +65,19 @@ class ItemInfoClass extends BaseClass
         ];
     }
 
+    //花材扎、支 转换  统一数
+    public static function mergeItemNum($itemNumBundle,$itemNumPiece,$unitNum)
+    {
+        $stockDecimal = 0;
+        if($unitNum > 0 ){
+            $stockDecimal = bcdiv($itemNumPiece,$unitNum,2);
+        }
+        $itemNum = bcadd($itemNumBundle,$stockDecimal,2);
+        return $itemNum;
+    }
+
+
+
     //获取常用的itemIds
     public static function getOftenItemIds($ghsId)
     {
@@ -92,19 +106,26 @@ class ItemInfoClass extends BaseClass
         }
         $itemId = $itemInfoData['itemId'];
         $unitNum = xhItemService::getItemUnitNum($itemId);
-        if(!$unitNum){
-            util::fail("系统错误");
-        }
         //转成小数,加库存
-        $stockDecimal = bcdiv($itemNumPiece,$unitNum,2);
-        $itemNum = bcadd($itemNumBundle,$stockDecimal,2);
-        $newStock = bcadd($itemInfoData['stock'],$itemNum);
+        $itemNum = self::mergeItemNum($itemNumBundle,$itemNumPiece,$unitNum);
+        $newStock = bcadd($itemInfoData['stock'],$itemNum,2);
         self::updateById($ghsItemInfoId,['stock'=>$newStock]);
         return true;
     }
 
-    //减库存,允许负库存,负数数量(盘点时)
+    //根据数量加库存
+    public static function addStockByItemNum($ghsItemInfoId,$itemNum)
+    {
+        $itemInfoData =self::getById($ghsItemInfoId);
+        if(!$itemInfoData){
+            util::fail("花材不存在");
+        }
+        $newStock = bcadd($itemInfoData['stock'],$itemNum,2);
+        self::updateById($ghsItemInfoId,['stock'=>$newStock]);
+        return true;
+    }
 
+    //减库存,允许负库存,负数数量(盘点时)
     /**
      * @param $ghsItemInfoId  门店下的花材ID(xhGhsItemInfo 主键ID)
      * @param $itemNumBundle  花材数量(扎)
@@ -119,18 +140,26 @@ class ItemInfoClass extends BaseClass
         }
         $itemId = $itemInfoData['itemId'];
         $unitNum = xhItemService::getItemUnitNum($itemId);
-        if(!$unitNum){
-            util::fail("系统错误");
-        }
         //转成小数,更新库存
-        $stockDecimal = bcdiv($itemNumPiece,$unitNum,2);
-        $itemNum = bcadd($itemNumBundle,$stockDecimal,2);
-        $newStock = bcsub($itemInfoData['stock'],$itemNum);
+        $itemNum = self::mergeItemNum($itemNumBundle,$itemNumPiece,$unitNum);
+        $newStock = bcsub($itemInfoData['stock'],$itemNum,2);
         self::updateById($ghsItemInfoId,['stock'=>$newStock]);
         return true;
     }
 
 
+    //根据数量加库存
+    public static function decreaseStockByItemNum($ghsItemInfoId,$itemNum)
+    {
+        $itemInfoData =self::getById($ghsItemInfoId);
+        if(!$itemInfoData){
+            util::fail("花材不存在");
+        }
+        $newStock = bcsub($itemInfoData['stock'],$itemNum,2);
+        self::updateById($ghsItemInfoId,['stock'=>$newStock]);
+        return true;
+    }
+
     //计算价格
     /**
      * @param $ghsItemInfoId  门店下的花材ID(xhGhsItemInfo 主键ID)
@@ -149,14 +178,29 @@ class ItemInfoClass extends BaseClass
         $itemId = $itemInfoData['itemId'];
         $unitNum = xhItemService::getItemUnitNum($itemId);
         //换算出一支多少钱
-        if(!$unitNum){
-            util::fail("系统错误");
+        $piecePrice = 0;
+        if($unitNum >0){
+            //有支
+            $unitPrice = bcdiv($price,$unitNum,2);
+            $piecePrice = bcmul($unitPrice,$itemNumPiece,2);
         }
-        $unitPrice = bcdiv($price,$unitNum,2);
-        $bundlePrice = bcmul($price,$itemNumBundle);
-        $piecePrice = bcmul($unitPrice,$itemNumPiece);
+        $bundlePrice = bcmul($price,$itemNumBundle,2);
+
         $total = bcadd($bundlePrice,$piecePrice,2);
         return $total;
     }
 
+    //根据门店ID, 平台花材ID, 获取门店的花材ID
+    public static function getGhsItemInfoId($shopId,$itemId)
+    {
+        $where = [
+            'shopId'=>$shopId,
+            'itemId'=>$itemId,
+        ];
+        $data = self::getByCondition($where);
+        if($data){
+            return $data['id'];
+        }
+        return 0;
+    }
 }

+ 110 - 0
biz-ghs/order/classes/PurchaseOrderClass.php

@@ -0,0 +1,110 @@
+<?php
+
+namespace bizGhs\order\classes;
+
+use bizGhs\base\classes\BaseClass;
+use bizGhs\item\classes\ItemInfoClass;
+use common\components\util;
+use common\services\xhItemService;
+use Yii;
+class PurchaseOrderClass extends BaseClass
+{
+    public static $baseFile = '\bizGhs\order\models\PurchaseOrder';
+
+
+    const PURCHASE_ORDER_STATUS_WAIT = 1; //待确认
+    const PURCHASE_ORDER_STATUS_UN_SEND = 2; //待配送
+    const PURCHASE_ORDER_STATUS_SENDING = 3; //配送中
+    const PURCHASE_ORDER_STATUS_COMPLETE  = 4; //已完成
+
+
+    public static function addOrder($data)
+    {
+        $date = date("Y-m-d H:i:s");
+        $ghsId = $data['ghsId'];
+        $shopId = $data['shopId'];
+        $data['orderStatus'] = self::PURCHASE_ORDER_STATUS_COMPLETE;
+        $orderSn = time();
+        $data['orderSn'] = $orderSn;
+        $ghsItemInfo = $data['itemInfo']; // [{itemId:0,itemNumBundle:0,itemNumPiece:0,itemPrice:1.0}]
+        //计算出总共多少扎,多少支
+        $itemNumBundle = 0; //总共多少扎
+        $itemNumPiece = 0; //总共多少支
+        $totalItemPrice = 0;
+        $itemIds = array_column($ghsItemInfo,'itemId');
+        $itemData = xhItemService::getByIds($itemIds);
+        $itemData = array_column($itemData, NULL, 'id');
+        if(!empty($ghsItemInfo)){
+            foreach ($ghsItemInfo as $v){
+                $itemNumBundle += $v['itemNumBundle'];
+                $itemNumPiece += $v['itemNumPiece'];
+                $totalItemPrice = bcadd($totalItemPrice,$v['itemPrice'],2);
+            }
+        }
+        $data['itemNumBundle'] = $itemNumBundle;
+        $data['itemNumPiece'] = $itemNumPiece;
+        $data['totalItemPrice'] = $totalItemPrice;
+
+        //计算订单总价
+        $packingCharge = $data['packingCharge']??0;
+        $shortHaulCharge = $data['shortHaulCharge']??0;
+        $lineHaulCharge = $data['lineHaulCharge']??0;
+        $pickCharge = $data['pickCharge']??0;
+        $localHaulCharge = $data['localHaulCharge']??0;
+        $orderPrice = bcadd($totalItemPrice,$packingCharge,2);
+        $orderPrice = bcadd($orderPrice,$shortHaulCharge,2);
+        $orderPrice = bcadd($orderPrice,$lineHaulCharge,2);
+        $orderPrice = bcadd($orderPrice,$pickCharge,2);
+        $orderPrice = bcadd($orderPrice,$localHaulCharge,2);
+        $data['orderPrice'] = $orderPrice;
+
+
+        $connection = Yii::$app->db;
+        $transaction = $connection->beginTransaction();
+
+        try{
+
+            $order = self::add($data);
+            //写入详情表
+            $batchData = [];
+
+            foreach ($ghsItemInfo as $v){
+                $tmp = [];
+                $itemId = $v['itemId'];
+                $tmp['orderSn'] = $orderSn;
+                $tmp['itemId'] = $v['itemId'];
+                $unitNum = $itemData[$itemId]['unitNum']??0;
+                $tmp['itemNum'] = ItemInfoClass::mergeItemNum($v['itemNumBundle'],$v['itemNumPiece'],$unitNum);
+                $tmp['itemPrice'] = $v['itemPrice'];
+                $itemInfo = [
+                    'itemName'=> $itemData[$itemId]['name']??'',
+                    'itemCover'=> $itemData[$itemId]['cover']??'',
+                    'itemNumBundle'=> $v['itemNumBundle'],
+                    'itemNumPiece'=> $v['itemNumPiece'],
+                ];
+                $tmp['itemInfo'] = json_encode($itemInfo);
+                $batchData[] = $tmp;
+            }
+
+            PurchaseOrderItemClass::batchAddOrderItem($batchData);
+            //现在暂时点击确定,定时完成 加库存
+            foreach ($batchData as $v){
+                $itemId = $v['itemId'];
+                $ghsItemInfoId = ItemInfoClass::getGhsItemInfoId($shopId,$itemId);
+                if(!$ghsItemInfoId){
+                    $transaction->rollBack();
+                    util::fail('有商品不存在');
+                }
+                //加库存
+                ItemInfoClass::addStockByItemNum($ghsItemInfoId,$v['itemNum']);
+            }
+            $transaction->commit();
+            return $order;
+        }catch (\Exception $exception){
+            $transaction->rollBack();
+            util::fail('保存失败:'.$exception->getMessage());
+        }
+        return false;
+    }
+
+}

+ 18 - 0
biz-ghs/order/classes/PurchaseOrderItemClass.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace bizGhs\order\classes;
+
+
+use Yii;
+use bizGhs\base\classes\BaseClass;
+
+class PurchaseOrderItemClass extends BaseClass
+{
+
+    public static $baseFile = '\bizGhs\order\models\PurchaseOrderItem';
+
+    public static function batchAddOrderItem($data)
+    {
+        self::batchAdd($data);
+    }
+}

+ 13 - 0
biz-ghs/order/models/PurchaseOrder.php

@@ -0,0 +1,13 @@
+<?php
+namespace bizGhs\order\models;
+use bizGhs\base\models\Base;
+//采购订单
+class PurchaseOrder extends Base
+{
+
+	public static function tableName()
+	{
+		return 'xhGhsPurchaseOrder';
+	}
+
+}

+ 13 - 0
biz-ghs/order/models/PurchaseOrderItem.php

@@ -0,0 +1,13 @@
+<?php
+namespace bizGhs\order\models;
+use bizGhs\base\models\Base;
+//采购订单详情
+class PurchaseOrderItem extends Base
+{
+
+	public static function tableName()
+	{
+		return 'xhGhsPurchaseOrderItem';
+	}
+
+}

+ 16 - 0
biz-ghs/order/services/PurchaseOrderItemService.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace bizGhs\order\services;
+
+use bizGhs\base\services\BaseService;
+use bizGhs\order\classes\OrderClass;
+use Yii;
+
+class PurchaseOrderItemService extends BaseService
+{
+
+    public static $baseFile = '\bizGhs\order\classes\PurchaseOrderItemClass';
+
+
+
+}

+ 17 - 0
biz-ghs/order/services/PurchaseOrderService.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace bizGhs\order\services;
+
+use bizGhs\base\services\BaseService;
+use bizGhs\order\classes\OrderClass;
+use bizGhs\order\classes\PurchaseOrderClass;
+use bizGhs\order\classes\PurchaseOrderItemClass;
+use Yii;
+
+class PurchaseOrderService extends BaseService
+{
+
+    public static $baseFile = '\bizGhs\order\classes\PurchaseOrderClass';
+
+
+}

+ 5 - 0
common/services/xhItemService.php

@@ -27,4 +27,9 @@ class xhItemService
         $unitNum = $itemData['unitNum'];
         return $unitNum;
     }
+
+    public static function getByIds($ids)
+    {
+        return xhItem::getByIds($ids);
+    }
 }

+ 7 - 1
sql.sql

@@ -517,4 +517,10 @@ CREATE TABLE `xhGhsStatOrderCount` (
   KEY `ghs` (`ghsId`,`time`)
 ) COMMENT='供货商月订单量,包括未付款';
 ALTER TABLE xhGhsAdmin ADD currentShopId INT NOT NULL DEFAULT 0 COMMENT '当前管理的门店' AFTER `openId`;
-ALTER TABLE xhAdmin ADD currentShopId INT NOT NULL DEFAULT 0 COMMENT '当前管理的门店' AFTER `openId`;
+ALTER TABLE xhAdmin ADD currentShopId INT NOT NULL DEFAULT 0 COMMENT '当前管理的门店' AFTER `openId`;
+
+====
+==linqh 2021-01-16
+ALTER TABLE `xhGhsPurchaseOrder`
+CHANGE COLUMN `totalGoodsPrice` `totalItemPrice`  decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '商品总价格' AFTER `itemNumPiece`;
+