Procházet zdrojové kódy

Merge branch 'master' of http://git.huaml.com/zhh/huahuibao

shish před 5 roky
rodič
revize
d92d0c00ad

+ 9 - 3
app-ghs/controllers/OrderController.php

@@ -525,14 +525,20 @@ class OrderController extends BaseController
 
             $num = ProductClass::mergeItemNum($bigNum,$smallNum,$ratio);
             if($num > $orderProductNum) {
-                util::fail($productName."花材错误错误");
+                util::fail($productName."花材数量错误");
             }
         }
-
+        $post['product'] = $productList;
         $connection = Yii::$app->db;
         $transaction = $connection->beginTransaction();
         try {
-            OrderService::refund($order,$productList);
+            $post['shopId'] = $this->shopId;
+            $post['sjId'] = $this->sjId;
+            $post['shopAdminId'] = $this->shopAdminId;
+            $shopAdmin = $this->shopAdmin;
+            $adminName = $shopAdmin['name'] ?? '';
+            $post['shopAdminName'] = $adminName;
+            OrderService::refund($order,$post);
             $transaction->commit();
         } catch (\Exception $exception) {
             $transaction->rollBack();

+ 168 - 0
biz-ghs/order/classes/RefundOrderClass.php

@@ -0,0 +1,168 @@
+<?php
+
+namespace bizGhs\order\classes;
+
+use biz\shop\classes\ShopCapitalClass;
+use biz\shop\classes\ShopClass;
+use biz\stat\classes\StatOutClass;
+use bizGhs\order\traits\OrderTrait;
+use bizGhs\product\classes\ProductClass;
+use bizGhs\stock\classes\StockRecordClass;
+use common\components\dict;
+use common\components\orderSn;
+use common\components\util;
+use Yii;
+use bizGhs\base\classes\BaseClass;
+
+class RefundOrderClass extends BaseClass
+{
+    use OrderTrait;
+    public static $baseFile = '\bizGhs\order\models\RefundOrder';
+    const STATUS_COMPLETE = 1; //已完成
+
+    const REFUND_TYPE_MONEY_GOOD = 1; //退款退货
+    const REFUND_TYPE_MONEY= 2; // 仅退款
+
+
+    // 订单列表
+    public static function getOrderList($where)
+    {
+        $data = self::getList('*', $where, 'addTime DESC');
+        $list = isset($data['list']) && !empty($data['list']) ? $data['list'] : [];
+        if (empty($list)) {
+            return $data;
+        }
+
+        $data['list'] = $list;
+        return $data;
+    }
+
+    public static function addOrder($post)
+    {
+        $data = [];
+        $data['status'] = self::STATUS_COMPLETE;
+        $orderSn = orderSn::getGhsRefundSn();
+        $data['orderSn'] = $orderSn;
+        $data['relateOrderSn'] = $post['relateOrderSn']??0;
+        $data['sjId'] = $post['sjId'];
+        $data['shopId'] = $post['shopId'];
+        $data['shopAdminId'] = $post['shopAdminId'] ?? 0;
+        $data['shopAdminName'] = $post['shopAdminName'] ?? '';
+
+        //花材列表
+        $ghsItemInfo = $post['product'];
+        $ghsItemInfo = self::mergeItemInfo($ghsItemInfo);
+        $sumNum = self::sumNumByItemInfo($ghsItemInfo);
+        $data['bigNum'] = $sumNum['bigNum'];// 总的大单位数量 总共多少扎
+        $data['smallNum'] = $sumNum['smallNum']; //总的小单位数量 总共多少支
+        $data['remark'] = $post['remark'] ?? '';
+        $data['refundPrice'] = $post['price'] ?? 0;
+        $data['refundType'] = $post['refundType'] ?? 0;
+
+        try {
+            //写入订单表
+            $order = self::add($data);
+            if( $data['refundType'] == self::REFUND_TYPE_MONEY_GOOD){
+                //退货,加库存
+                foreach ($ghsItemInfo as $k => $v) {
+                    $stockInfo = ProductClass::addStock($v['productId'], $v['bigNum'], $v['smallNum']);
+                    $ghsItemInfo[$k]['oldStock'] = $stockInfo['oldStock'];
+                    $ghsItemInfo[$k]['newStock'] = $stockInfo['newStock'];
+                }
+            }
+            //写入详情表
+            $batchData = self::groupOrderItem($ghsItemInfo, $orderSn);
+            RefundOrderItemClass::batchAddOrderItem($batchData);
+            $orderData = self::getOrderDetail($orderSn,$order['shopId']);
+            $orderData['shopId'] = $data['shopId'];
+            if( $data['refundType'] == self::REFUND_TYPE_MONEY_GOOD){
+                //写流水
+                StockRecordClass::addRecordByOrder($orderData, StockRecordClass::STOCK_RECORD_TYPE_REFUND);
+            }
+
+
+            return $order;
+        } catch (\Exception $exception) {
+            util::fail("操作失败" . $exception->getMessage());
+        }
+    }
+
+    //2021.1.23 linqh 订单详情
+    public static function getOrderDetail($orderSn,$shopId)
+    {
+        $orderData = self::orderExist(['orderSn' => $orderSn, 'shopId' => $shopId]);
+        $orderInfo = RefundOrderItemClass::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;
+    }
+
+}

+ 21 - 0
biz-ghs/order/classes/RefundOrderItemClass.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace bizGhs\order\classes;
+
+use Yii;
+use bizGhs\base\classes\BaseClass;
+
+class RefundOrderItemClass extends BaseClass
+{
+
+    public static $baseFile = '\bizGhs\order\models\RefundOrderItem';
+
+    public static function batchAddOrderItem($data)
+    {
+        self::batchAdd($data);
+    }
+    public static function getOrderItemDetail($orderSn)
+    {
+        return self::getAllByCondition(['orderSn'=>$orderSn],null,'*');
+    }
+}

+ 13 - 0
biz-ghs/order/classes/RefundSnClass.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace bizGhs\order\classes;
+
+use Yii;
+use bizGhs\base\classes\BaseClass;
+
+class RefundSnClass extends BaseClass
+{
+
+	public static $baseFile = '\bizGhs\order\models\RefundSn';
+
+}

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

@@ -0,0 +1,13 @@
+<?php
+namespace bizGhs\order\models;
+use bizGhs\base\models\Base;
+
+class RefundOrder extends Base
+{
+
+	public static function tableName()
+	{
+		return 'xhRefund';
+	}
+
+}

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

@@ -0,0 +1,13 @@
+<?php
+namespace bizGhs\order\models;
+use bizGhs\base\models\Base;
+
+class RefundOrderItem extends Base
+{
+
+	public static function tableName()
+	{
+		return 'xhRefundItem';
+	}
+
+}

+ 15 - 0
biz-ghs/order/models/RefundSn.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace bizGhs\order\models;
+
+use bizGhs\base\models\Base;
+
+class RefundSn extends Base
+{
+
+	public static function tableName()
+	{
+		return 'xhRefundSn';
+	}
+
+}

+ 18 - 1
biz-ghs/order/services/OrderService.php

@@ -12,6 +12,7 @@ use bizGhs\custom\classes\CustomClass;
 use bizGhs\order\classes\OrderClass;
 use bizGhs\order\classes\OrderExpressClass;
 use bizGhs\order\classes\OrderSendClass;
+use bizGhs\order\classes\RefundOrderClass;
 use bizGhs\stat\classes\StatYjClass;
 use bizGhs\ws\services\WsService;
 use bizHd\purchase\services\PurchaseService;
@@ -566,8 +567,24 @@ class OrderService extends BaseService
     }
 
     //退款订单
-    public static function refund($order, $productData)
+    public static function refund($order,$post)
     {
+        //根据退款类型:1退货并退款(需要减库存) 2:仅退款(不用减库存)
+        $refundType = $post['refundType']??0;
+
+        if($refundType != RefundOrderClass::REFUND_TYPE_MONEY_GOOD && $refundType != RefundOrderClass::REFUND_TYPE_MONEY) {
+            util::fail("请选择退款类型");
+        }
+        //订单状态变更 4=》6  refund = 2
+        $orderId = $order['id'];
+        OrderClass::updateById($orderId,['status'=>OrderClass::ORDER_STATUS_REFUND,'refund'=>2]);
+        //记录退款订单
+        $post['relateOrderSn'] = $order['orderSn'];
+        RefundOrderClass::addOrder($post);
+
+        //退钱(根据订单的支付类型 payWay)
+        $payWay = $order['payWay'];
+
 
     }
 }

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

@@ -21,6 +21,7 @@ class StockRecordClass extends BaseClass
     const STOCK_RECORD_TYPE_IN_STOCK_CANCEL = 7; //取消出库
     const STOCK_RECORD_TYPE_SELL_STOCK_CANCEL = 8;// 取消售卖
     const STOCK_RECORD_TYPE_WASTAGE = 9;// 报损
+    const STOCK_RECORD_TYPE_REFUND = 10;// 退款退货
 
 
 
@@ -34,6 +35,7 @@ class StockRecordClass extends BaseClass
         self::STOCK_RECORD_TYPE_IN_STOCK_CANCEL=>'取消出库',
         self::STOCK_RECORD_TYPE_SELL_STOCK_CANCEL=>'取消开单',
         self::STOCK_RECORD_TYPE_WASTAGE=>'报损',
+        self::STOCK_RECORD_TYPE_REFUND=>'退货',
 
     ];
 

+ 15 - 0
common/components/orderSn.php

@@ -230,4 +230,19 @@ class orderSn
         return $prefix . $id;
     }
 
+    //供货商退款订单号 linqh 2021.6.26
+    public static function getGhsRefundSn()
+    {
+        $prefix = 'TK_CS';
+        if (getenv('YII_ENV', 'local') == 'production') {
+            $prefix = 'TK';
+        }
+        $respond = \bizGhs\order\classes\RefundSnClass::add(['id' => null]);
+        $id = $respond['id'] ?? 0;
+        if (empty($id)) {
+            util::fail('退款单号没有生成');
+        }
+        return $prefix . $id;
+    }
+
 }