shish 4 ani în urmă
părinte
comite
e7fc9bce9e

+ 1 - 1
app-hd/controllers/OrderController.php

@@ -310,7 +310,7 @@ class OrderController extends BaseController
         $post['staffId'] = $this->shopAdminId ?? 0;
         $post['staffName'] = $this->shopAdmin->name ?? '';
         $groupId = isset($post['groupId']) && !empty($post['groupId']) ? $post['groupId'] : 0;
-        //商城
+        //门店
         $post['fromType'] = 1;
         //客户
         $customId = isset($post['customId']) && $post['customId'] > 0 ? $post['customId'] : 0;

+ 38 - 0
app-mall/controllers/OrderController.php

@@ -21,6 +21,44 @@ use common\components\util;
 class OrderController extends BaseController
 {
 
+    //购买花材 ssh 20220511
+    public function actionBuyItem()
+    {
+        $post = Yii::$app->request->post();
+        $post['sjId'] = $this->sjId;
+        $post['shopId'] = $this->shopId;
+        $post['payWay'] = $this->isWx == true ? 0 : 1;
+        $post['mainId'] = $this->mainId ?? 0;
+        $post['userId'] = $this->userId ?? 0;
+        $now = time();
+        //订单30分钟后过期
+        $expireTime = $now + 1800;
+        $post['deadline'] = $expireTime;
+        //商城
+        $post['fromType'] = 2;
+        $productJson = $post['product'] ?? '';
+        if (empty($productJson) && empty($groupId)) {
+            util::fail('请选择商品');
+        }
+        $productList = json_decode($productJson, true);
+        if (empty($productList)) {
+            util::fail('请选择商品');
+        }
+        $connection = Yii::$app->db;
+        $transaction = $connection->beginTransaction();
+        try {
+            $post['product'] = $productList;
+            $post['deadline'] = date("Y-m-d H:i:s", strtotime('+360 day'));
+            $return = OrderService::createOrder($post);
+            $transaction->commit();
+            util::success($return);
+        } catch (\Exception $e) {
+            $transaction->rollBack();
+            Yii::error("下单失败原因:" . $e->getMessage());
+            util::fail('下单失败');
+        }
+    }
+
     //商城下单操作 ssh 2019.12.3
     public function actionCreateOrder()
     {

+ 13 - 0
biz-mall/custom/classes/CustomClass.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace bizMall\custom\classes;
+
+use Yii;
+use bizMall\base\classes\BaseClass;
+
+class CustomClass extends BaseClass
+{
+
+    public static $baseFile = '\bizMall\custom\models\Custom';
+
+}

+ 13 - 0
biz-mall/custom/models/Custom.php

@@ -0,0 +1,13 @@
+<?php
+namespace bizMall\custom\models;
+use bizMall\base\models\Base;
+
+class Custom extends Base
+{
+	
+	public static function tableName()
+	{
+		return 'xhCustom';
+	}
+	
+}

+ 12 - 0
biz-mall/custom/services/CustomService.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace bizMall\custom\services;
+
+use bizMall\base\services\BaseService;
+
+class CustomService extends BaseService
+{
+
+    public static $baseFile = '\bizMall\custom\classes\CustomClass';
+
+}

+ 13 - 0
biz-mall/item/classes/ItemClass.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace bizMall\item\classes;
+use Yii;
+use bizMall\base\classes\BaseClass;
+
+class ItemClass extends BaseClass
+{
+
+    public static $baseFile = '\bizMall\item\models\Item';
+
+
+}

+ 15 - 0
biz-mall/item/models/Item.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace bizMall\item\models;
+
+use bizMall\base\models\Base;
+
+class Item extends Base
+{
+
+    public static function tableName()
+    {
+        return 'xhGhsItem';
+    }
+
+}

+ 12 - 0
biz-mall/item/services/ItemService.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace bizMall\item\services;
+
+use bizMall\base\services\BaseService;
+
+class ItemService extends BaseService
+{
+
+    public static $baseFile = '\bizMall\item\classes\ItemClass';
+
+}

+ 3 - 8
biz-mall/order/classes/OrderClass.php

@@ -6,6 +6,7 @@ use biz\shop\models\Shop;
 use biz\stat\classes\StatOrderCountClass;
 use bizMall\merchant\classes\MerchantAssetClass;
 use bizMall\shop\classes\MainClass;
+use bizMall\shop\classes\ShopClass;
 use bizMall\stat\classes\StatOrderClass;
 use bizMall\user\classes\UserClass;
 use common\components\miniUtil;
@@ -63,8 +64,7 @@ class OrderClass extends BaseClass
         $data['orderSn'] = orderSn::getOrderSn();
         $data['payStatus'] = 0;
         $shopId = $data['shopId'] ?? 0;
-
-        $shop = Shop::findBySql('select * from ' . Shop::tableName() . ' where id = :id for update', ['id' => $shopId])->one();
+        $shop = ShopClass::getLockById($shopId);
         if (empty($shop)) {
             util::fail('没有找到门店');
         }
@@ -77,13 +77,8 @@ class OrderClass extends BaseClass
 
         //将花店每月的总订单数作为编号
         $data['sendNum'] = date('j') . $riseNum;
-        $data['totalFlow'] = OrderClass::ORDER_TOTAL_FLOW;
-        $return = self::add($data);
+        $return = self::add($data, true);
 
-        //全部订单+1,待付款订单+1
-        if (empty($shop)) {
-            util::fail('没有找到门店');
-        }
         $main->unPayOrder += 1;
         $main->totalOrder += 1;
         $main->save();

+ 37 - 0
biz-mall/order/classes/OrderGoodsClass.php

@@ -5,12 +5,49 @@ namespace bizMall\order\classes;
 use common\components\business;
 use Yii;
 use bizMall\base\classes\BaseClass;
+use biz\stock\classes\GoodsStockRecordClass;
+use bizHd\goods\classes\GoodsClass;
 
 class OrderGoodsClass extends BaseClass
 {
 
     public static $baseFile = '\bizMall\order\models\OrderGoods';
 
+    public static function addData($data, $custom)
+    {
+        $orderSn = $data['orderSn'] ?? '';
+        $sjId = $data['sjId'] ?? 0;
+        $shopId = $data['shopId'] ?? 0;
+        $mainId = $data['mainId'] ?? 0;
+        $goodsId = $data['goodsId'] ?? 0;
+        $num = $data['num'] ?? 0;
+        $customName = $custom->name ?? '';
+        //减库存
+        self::changeStockBySellGoods($orderSn, $sjId, $shopId, $mainId, $goodsId, $num, $customName);
+        return self::add($data);
+    }
+
+    //销售成品库存变更方法(减库存)
+    public static function changeStockBySellGoods($orderSn, $sjId, $shopId, $mainId, $goodsId, $goodsNum, $customName)
+    {
+        //减成品库存
+        $respond = GoodsClass::decreaseStock($goodsId, $mainId, $goodsNum);
+        $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'] = $goodsNum;
+        $data['oldStock'] = $oldStock;
+        $data['newStock'] = $newStock;
+        $data['relateName'] = $customName;
+        GoodsStockRecordClass::sellGoods($data);
+        return true;
+    }
+
     //取订单 ssh 2020.1.2
     public static function getGoodsListBySn($sn)
     {

+ 55 - 0
biz-mall/order/classes/OrderItemClass.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace bizMall\order\classes;
+
+use common\components\dict;
+use Yii;
+use bizMall\base\classes\BaseClass;
+use bizGhs\product\classes\ProductClass;
+use bizGhs\stock\classes\StockRecordClass;
+
+class OrderItemClass extends BaseClass
+{
+
+    public static $baseFile = '\bizMall\order\models\OrderItem';
+
+    //添加记录
+    public static function addData($data, $custom)
+    {
+        //库存变化
+        $sjId = $data['sjId'] ?? 0;
+        $shopId = $data['shopId'] ?? 0;
+        $itemId = $data['itemId'] ?? 0;
+        $unitType = $data['unitType'] ?? 0;
+        $num = $data['num'] ?? 0;
+        $ptItemId = $data['ptItemId'] ?? 0;
+        $ratio = $data['ratio'] ?? 0;
+        $orderSn = $data['orderSn'] ?? '';
+        $mainId = $data['mainId'] ?? 0;
+        $customName = $custom->name ?? '';
+        $bigNum = 0;
+        $smallNum = 0;
+        if ($unitType == dict::getDict('unitType', 'big')) {
+            $bigNum = $num;
+        } else {
+            $smallNum = $num;
+        }
+        //库存减少
+        $stockInfo = ProductClass::decreaseStock($itemId, $bigNum, $smallNum, true);
+        $recordData = [];
+        $recordData['sjId'] = $sjId;
+        $recordData['shopId'] = $shopId;
+        $recordData['mainId'] = $mainId;
+        $recordData['itemId'] = $ptItemId;
+        $recordData['itemNum'] = ProductClass::mergeItemNum($bigNum, $smallNum, $ratio);
+        $recordData['oldStock'] = $stockInfo['oldStock'];
+        $recordData['newStock'] = $stockInfo['newStock'];
+        $recordData['productId'] = $itemId;
+        $recordData['orderSn'] = $orderSn;
+        $recordData['relateName'] = $customName;
+        StockRecordClass::hdKdAddRecord($recordData);
+
+        return self::add($data);
+    }
+
+}

+ 14 - 0
biz-mall/order/models/OrderItem.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace bizMall\order\models;
+
+use bizMall\base\models\Base;
+
+class OrderItem extends Base
+{
+	
+	public static function tableName()
+	{
+		return 'xhOrderItem';
+	}
+}

+ 13 - 0
biz-mall/order/services/OrderItemService.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace bizMall\order\services;
+
+use bizMall\base\services\BaseService;
+use Yii;
+
+class OrderItemService extends BaseService
+{
+
+    public static $baseFile = '\bizMall\order\classes\OrderItemClass';
+
+}

+ 159 - 2
biz-mall/order/services/OrderService.php

@@ -3,11 +3,18 @@
 namespace bizMall\order\services;
 
 use bizMall\base\services\BaseService;
+use bizMall\custom\classes\CustomClass;
+use bizMall\goods\classes\GoodsClass;
+use bizMall\item\classes\ItemClass;
 use bizMall\merchant\services\MerchantCapitalService;
 use bizMall\merchant\services\MerchantService;
 use bizMall\order\classes\OrderClass;
+use bizMall\order\classes\OrderGoodsClass;
+use bizMall\order\classes\OrderItemClass;
 use bizMall\promote\services\CouponService;
 use bizMall\user\classes\UserAssetClass;
+use common\components\dict;
+use common\components\orderSn;
 use common\components\stringUtil;
 use common\components\util;
 use Yii;
@@ -17,9 +24,159 @@ class OrderService extends BaseService
 
     public static $baseFile = '\bizMall\order\classes\OrderClass';
 
-    public static function payAfter($order, $payWay)
+    public static function createOrder($data)
     {
-
+        $orderSn = orderSn::getOrderSn();
+        $sjId = $data['sjId'] ?? 0;
+        $shopId = $data['shopId'] ?? 0;
+        $userId = $data['userId'] ?? 0;
+        $mainId = $data['mainId'] ?? 0;
+        $custom = [];
+        $customId = 0;
+        $hdId = 0;
+        if (!empty($userId) && !empty($shopId)) {
+            $custom = CustomClass::getByCondition(['shopId' => $shopId, 'userId' => $userId], true);
+            $customId = $custom->id ?? 0;
+        }
+        $product = $data['product'] ?? [];
+        if (empty($product)) {
+            util::fail('没有花材');
+        }
+        $gIds = [];
+        $itIds = [];
+        foreach ($product as $key => $val) {
+            $currentId = $val['productId'] ?? 0;
+            $property = $val['property'];
+            if ($property == dict::getDict('property', 'goods')) {
+                $gIds[] = $currentId;
+            }
+            if ($property == dict::getDict('property', 'item')) {
+                $itIds[] = $currentId;
+            }
+        }
+        $goodsInfo = [];
+        $gIds = array_unique(array_filter($gIds));
+        if (!empty($gIds)) {
+            $goodsInfo = GoodsClass::getByIds($gIds, null, 'id');
+        }
+        $itemInfo = [];
+        $itIds = array_unique(array_filter($itIds));
+        if (!empty($itIds)) {
+            $itemInfo = ItemClass::getByIds($itIds, null, 'id');
+        }
+        $goodsPrice = 0;
+        foreach ($product as $key => $val) {
+            if (isset($val['property']) == false) {
+                util::fail('没有找到产品属性');
+            }
+            $currentPrice = $val['price'] ?? 0;
+            $goodsPrice = bcadd($goodsPrice, $currentPrice, 2);
+            $property = $val['property'];
+            $unitPrice = $val['unitPrice'] ?? 0;
+            $unitType = $val['unitType'] ?? 0;
+            $currentId = $val['productId'] ?? 0;
+            $num = $val['num'] ?? 0;
+            if ($property == dict::getDict('property', 'goods')) {
+                $name = $goodsInfo[$currentId]['name'] ?? '';
+                $cover = $goodsInfo[$currentId]['cover'] ?? '';
+                if (!empty($groupCover)) {
+                    $groupCover = $cover;
+                }
+                $currentMainId = $goodsInfo[$currentId]['mainId'] ?? 0;
+                if ($currentMainId != $mainId) {
+                    util::fail('不是您的商品');
+                }
+                $currentGoodsData = [
+                    'orderSn' => $orderSn,
+                    'goodsId' => $currentId,
+                    'customId' => $customId,
+                    'hdId' => $hdId,
+                    'sjId' => $sjId,
+                    'shopId' => $shopId,
+                    'name' => $name,
+                    'cover' => $cover,
+                    'unitPrice' => $unitPrice,
+                    'num' => $num,
+                    'price' => bcmul($unitPrice, $num, 2),
+                    'mainId' => $mainId,
+                ];
+                //库存变化在这里
+                OrderGoodsClass::addData($currentGoodsData, $custom);
+            }
+            if ($property == dict::getDict('property', 'item')) {
+                $name = $itemInfo[$currentId]['name'] ?? '';
+                $cover = $itemInfo[$currentId]['cover'] ?? '';
+                if (!empty($groupCover)) {
+                    $groupCover = $cover;
+                }
+                $ratio = $itemInfo[$currentId]['ratio'] ?? 20;
+                $currentMainId = $itemInfo[$currentId]['mainId'] ?? 0;
+                if ($currentMainId != $mainId) {
+                    util::fail('不是您的花材' . $mainId . ' ' . $currentMainId);
+                }
+                if ($unitType == dict::getDict('unitType', 'big')) {
+                    $unitName = $itemInfo[$currentId]['bigUnit'] ?? '';
+                    $unitId = $itemInfo[$currentId]['bigUnitId'] ?? 0;
+                    $totalNum = $num;
+                } else {
+                    $unitName = $itemInfo[$currentId]['smallUnit'] ?? '';
+                    $unitId = $itemInfo[$currentId]['smallUnitId'] ?? 0;
+                    $totalNum = bcdiv($num, $ratio, 2);
+                }
+                $ptItemId = $itemInfo[$currentId]['itemId'] ?? 0;
+                $currentItemData = [
+                    'name' => $name,
+                    'cover' => $cover,
+                    'ratio' => $ratio,
+                    'unitType' => $unitType,
+                    'unitName' => $unitName,
+                    'unitId' => $unitId,
+                    'unitPrice' => $unitPrice,
+                    'num' => $num,
+                    'orderSn' => $orderSn,
+                    'itemId' => $currentId,
+                    'ptItemId' => $ptItemId,
+                    'totalNum' => $totalNum,
+                    'totalPrice' => 0,
+                    'customId' => $customId,
+                    'hdId' => $hdId,
+                    'sjId' => $sjId,
+                    'shopId' => $shopId,
+                    'mainId' => $mainId,
+                    'price' => bcmul($unitPrice, $num, 2)
+                ];
+                //库存变化在这里
+                OrderItemClass::addData($currentItemData, $custom);
+            }
+        }
+        $sendCost = $data['sendCost'] ?? 0;
+        $totalPrice = bcadd($goodsPrice, $sendCost, 2);
+        $modifyPrice = $data['modifyPrice'] ?? 0;
+        if ($modifyPrice > $totalPrice) {
+            //人工资材包装费
+            $data['labourCost'] = bcsub($modifyPrice, $totalPrice, 2);
+        }
+        if ($modifyPrice < $totalPrice) {
+            //优惠
+            $data['discountType'] = dict::getDict('discountType', 'discount');
+            $discountAmount = bcsub($totalPrice, $modifyPrice, 2);
+            $data['discountAmount'] = $discountAmount;
+        }
+        $data['goodsPrice'] = $goodsPrice;
+        $data['prePrice'] = $totalPrice;
+        $data['orderPrice'] = $modifyPrice;
+        $data['actPrice'] = $modifyPrice;
+        $data['realPrice'] = $modifyPrice;
+        $data['customId'] = $customId;
+        $data['hdId'] = $hdId;
+        $data['sjId'] = $sjId;
+        $data['shopId'] = $shopId;
+        $data['mainId'] = $mainId;
+        $data['payWay'] = dict::getDict('payWay', 'unPay');
+        $data['orderSn'] = $orderSn;
+        $data['status'] = OrderClass::ORDER_STATUS_UN_PAY;
+        $returnOrder = OrderClass::addOrder($data);
+        return $returnOrder;
     }
 
     //获取订单信息 ssh 2019.11.28