Ver código fonte

退款退货 零售端花材处理

林琦海 5 anos atrás
pai
commit
ed03e31f5c

+ 84 - 2
biz-hd/cg/classes/CgRefundClass.php

@@ -2,12 +2,14 @@
 
 namespace bizHd\cg\classes;
 
+use common\components\util;
 use Yii;
 use bizGhs\base\classes\BaseClass;
-
+use bizGhs\order\traits\OrderTrait;
+use bizGhs\product\classes\ProductClass;
 class CgRefundClass extends BaseClass
 {
-
+    use OrderTrait;
     public static $baseFile = '\bizHd\cg\models\CgRefund';
 
     const STATUS_COMPLETE = 1; //已完成
@@ -15,4 +17,84 @@ class CgRefundClass extends BaseClass
     const REFUND_TYPE_MONEY_GOOD = 1; //退款退货
     const REFUND_TYPE_MONEY= 2; // 仅退款
 
+
+    //2021.1.23 linqh 订单详情
+    public static function getOrderDetail($orderSn,$shopId)
+    {
+        $orderData = self::orderExist(['orderSn' => $orderSn, 'shopId' => $shopId]);
+        $orderInfo = CgRefundItemClass::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']);
+                //兼容 旧数据,没有 rank (花材等级 默认给B)
+                if (!isset($tmp['rank'])) {
+                    $tmp['rank'] = 'B';
+                }
+                $tmp = array_merge($tmp, $v);
+                $itemData[] = $tmp;
+            }
+        }
+        //下面注释放开前,员工id要用shopAdminId
+        //$orderData = self::groupAdmin($orderData);
+        $orderData['itemInfo'] = $itemData;
+        return $orderData;
+    }
+
+
+    //2021.1.23 linqh 判断定时是否存在
+    public static function orderExist($where)
+    {
+        $orderData = self::getByCondition($where);
+        if (!$orderData) {
+            util::fail('订单不存在');
+        }
+        return $orderData;
+    }
+
+
+    // 组装 orderItem  linqh 2021.1.25
+    public static function groupOrderItem($ghsItemInfo, $orderSn)
+    {
+        $productData = self::getProductMapData($ghsItemInfo);
+        //写入详情表
+        $batchData = [];
+        foreach ($ghsItemInfo as $v) {
+            $tmp = [];
+            $productId = $v['productId'];
+            $itemId = $productData[$productId]['itemId'];
+            $rank = $productData[$productId]['rank'] ?? 'B';// 花材级别
+            $tmp['orderSn'] = $orderSn;
+            $tmp['itemId'] = $itemId;
+            $tmp['productId'] = $v['productId'];
+            $unitNum = $productData[$productId]['ratio'] ?? 0;
+            $tmp['itemStock'] = $v['oldStock'];//当时库存
+            $tmp['newStock'] = $v['newStock'];//当时库存
+            $tmp['itemNum'] = ProductClass::mergeItemNum($v['bigNum'], $v['smallNum'], $unitNum);// 数量
+
+            $tmp['itemPrice'] = $productData[$productId]['price'] ?? 0; //当时售卖的价格
+            $tmp['itemCost'] = $productData[$productId]['cost'] ?? 0; //当时成本价
+            $stockFormat = ProductClass::formatStock($tmp['itemStock'], $unitNum); // 库存总单位数量转大小单位的数量
+            $itemInfo = [
+                'itemName' => $productData[$productId]['name'] ?? '',//花材名称
+                'itemCover' => $productData[$productId]['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,// 比例
+                'rank' => $rank,// 花材级别
+                'bigUnit' => $productData[$productId]['bigUnit'],//大单位名称 扎
+                'smallUnit' => $productData[$productId]['smallUnit'],//小单位名称 支
+            ];
+            $tmp['itemInfo'] = json_encode($itemInfo);
+            $batchData[] = $tmp;
+        }
+        return $batchData;
+    }
+
 }

+ 23 - 0
biz-hd/cg/classes/CgRefundItemClass.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace bizHd\cg\classes;
+
+use Yii;
+use bizGhs\base\classes\BaseClass;
+use bizGhs\order\traits\OrderTrait;
+use bizGhs\product\classes\ProductClass;
+class CgRefundItemClass extends BaseClass
+{
+    use OrderTrait;
+    public static $baseFile = '\bizHd\cg\models\CgRefundItem';
+
+    public static function batchAddOrderItem($data)
+    {
+        self::batchAdd($data);
+    }
+    public static function getOrderItemDetail($orderSn)
+    {
+        return self::getAllByCondition(['orderSn'=>$orderSn],null,'*');
+    }
+
+}

+ 15 - 0
biz-hd/cg/models/CgRefundItem.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace bizHd\cg\models;
+
+use bizHd\base\models\Base;
+
+class CgRefundItem extends Base
+{
+
+    public static function tableName()
+    {
+        return 'xhCgRefundItem';
+    }
+
+}

+ 53 - 2
biz-hd/cg/services/CgRefundService.php

@@ -8,8 +8,11 @@ use biz\pt\classes\PtYeChangeClass;
 use biz\shop\classes\ShopCapitalClass;
 use biz\shop\classes\ShopClass;
 use biz\shop\classes\ShopYeChangeClass;
+use bizGhs\product\classes\ProductClass;
+use bizGhs\stock\classes\StockRecordClass;
 use bizHd\base\services\BaseService;
 use bizHd\cg\classes\CgRefundClass;
+use bizHd\cg\classes\CgRefundItemClass;
 use bizHd\purchase\classes\PurchaseClass;
 use bizHd\stat\classes\StatIncomeClass;
 use bizHd\wx\classes\WxOpenClass;
@@ -36,7 +39,7 @@ class CgRefundService extends BaseService
             util::fail('第三方支付订单号没有找到');
         }
         $refundOrderSn = orderSn::getCgRefundSn();
-        $post['orderSn'] = $refundOrderSn;
+        //$post['orderSn'] = $refundOrderSn;
         $post['cgId'] = $cg->id;
         $refundPrice = $post['price'] ?? 0;
         if (is_numeric($refundPrice) == false || $refundPrice < 0) {
@@ -44,13 +47,61 @@ class CgRefundService extends BaseService
         }
         $post['refundPrice'] = $refundPrice;
         //创建退款单
-        $cgRefund = CgRefundClass::add($post, true);
+        //$cgRefund = CgRefundClass::add($post, true);
 
         $shopId = $cg->shopId ?? 0;
         $shop = ShopClass::getLockById($shopId);
         if (empty($shop)) {
             util::fail('没有找到门店');
         }
+
+        //--------start-----花材处理逻辑 linqh 2021.6.28------
+        $ghsItemInfo = $post['product'] ?? '';
+        $data = [];
+        $data['status'] = CgRefundClass::STATUS_COMPLETE;
+        $data['orderSn'] = $refundOrderSn;
+        $data['shopId'] = $cg->shopId;
+        $data['sjId'] = $cg->sjId;
+        $data['shopAdminId'] = $cg->shopAdminId;
+        $data['shopAdminName'] = $cg->shopAdminName;
+        $data['cgId'] = $cg->id;
+        $data['refundType'] = $post['refundType'];
+        $data['refundPrice'] = $refundPrice;
+        $data['remark'] = $post['remark'];
+
+        if ($ghsItemInfo) {
+            $ghsItemInfo = CgRefundClass::mergeItemInfo($ghsItemInfo);
+            $sumNum = CgRefundClass::sumNumByItemInfo($ghsItemInfo);
+        }
+        $data['bigNum'] = $sumNum['bigNum'] ?? 0;// 总的大单位数量 总共多少扎
+        $data['smallNum'] = $sumNum['smallNum'] ?? 0; //总的小单位数量 总共多少支
+
+        //写入订单表
+        $cgRefund = CgRefundClass::add($data, true);
+        if($ghsItemInfo){
+            //写入cgRefundItem, 转hdProductId
+            $ghsItemInfo = ProductClass::toggleProductList($ghsItemInfo, $cg->shopId, $cg->sjId);
+            //将hdProductId =》productId
+            foreach ($ghsItemInfo as $k=>$v){
+                $ghsItemInfo[$k]['productId'] =$v['hdProductId'];
+            }
+            //退货,减库存
+            foreach ($ghsItemInfo as $k=>$v){
+                $stockInfo = ProductClass::decreaseStock($v['hdProductId'], $v['bigNum'], $v['smallNum']);
+                $ghsItemInfo[$k]['oldStock'] = $stockInfo['oldStock'];
+                $ghsItemInfo[$k]['newStock'] = $stockInfo['newStock'];
+            }
+
+            $batchData = CgRefundClass::groupOrderItem($ghsItemInfo, $refundOrderSn);
+            CgRefundItemClass::batchAddOrderItem($batchData);
+
+            $orderData = CgRefundClass::getOrderDetail($refundOrderSn, $cg->shopId);
+            $orderData['shopId'] = $data['shopId'];
+            //写流水
+            StockRecordClass::addRecordByOrder($orderData, StockRecordClass::STOCK_RECORD_TYPE_REFUND);
+
+        }
+        //--------end-----花材处理逻辑 linqh 2021.6.28------
         //门店总收入增加
         $currentTotalIncome = bcadd($shop->totalIncome, $refundPrice, 2);
         $shop->totalIncome = $currentTotalIncome;