Browse Source

预订单与退款

shish 4 năm trước cách đây
mục cha
commit
fa669264d4

+ 10 - 36
app-ghs/controllers/RefundController.php

@@ -48,19 +48,22 @@ class RefundController extends BaseController
 
             $post = Yii::$app->request->post();
             $id = isset($post['id']) ? $post['id'] : 0;
-            $order = OrderService::getOrderInfo($id, false, false, false, false);
+            $order = OrderClass::getById($id, true);
             OrderClass::valid($order, $this->shopId);
-            if ($order['status'] != OrderClass::ORDER_STATUS_COMPLETE) {
+            if ($order->status != OrderClass::ORDER_STATUS_COMPLETE) {
                 util::fail("订单完成了才能发起退款");
             }
 
-            $addTime = $order['addTime'] ?? '';
+            $addTime = $order->addTime ?? '';
             $current = time();
             if ((strtotime($addTime) + 3 * 30 * 24 * 60 * 60) < $current) {
                 util::fail('历史订单,不能再发起退款');
             }
+            if (strtotime($addTime) <= strtotime('2022-04-01 00:00:00')) {
+                util::fail('历史订单,不能发起退款哦');
+            }
 
-            //根据退款类型:1退货并退款(需要减库存) 2:仅退款(不用减库存,不用传花材)
+            //退款类型 1退货并退款 2 仅退款
             $refundType = $post['refundType'] ?? 0;
 
             if ($refundType != RefundOrderClass::REFUND_TYPE_MONEY_GOOD && $refundType != RefundOrderClass::REFUND_TYPE_MONEY) {
@@ -68,46 +71,17 @@ class RefundController extends BaseController
             }
 
             if ($refundType == RefundOrderClass::REFUND_TYPE_MONEY_GOOD) {
-                $infoProduct = $order['product'];
-                $productIds = array_unique(array_filter(array_column($infoProduct, 'productId')));
-                $productData = ProductClass::getProductByIds($productIds);
-                $productData = array_column($productData, NULL, 'id');
-                $orderProductMap = [];
-                foreach ($infoProduct as $v) {
-                    $orderProductMap[$v['productId']] = $v;
-                }
-                //[{productId:0,bigNum:1,smallNum:0}]
+
+                //[{productId:0,num:1,unitType:0}]
                 $productJson = $post['product'] ?? '';
                 if (empty($productJson)) {
                     util::fail('请选择花材');
                 }
                 $productList = json_decode($productJson, true);
                 if (!is_array($productList)) {
-                    util::fail('花材格式不正确');
-                }
-                //合并
-                $productList = ProductClass::mergeItemInfo($productList);
-                if (empty($productList)) {
-                    util::fail('请选择花材');
+                    util::fail('请选择花材哦');
                 }
 
-                //判定花材数不能大于原订单数
-                foreach ($productList as $v) {
-                    $orderProductNum = $orderProductMap[$v['productId']]['num'] ?? 0;
-                    $productName = $productData[$v['productId']]['name'] ?? '';
-                    if (!$orderProductNum) {
-                        util::fail($productName . "花材数量错误");
-                    }
-                    //数量
-                    $bigNum = $v['bigNum'] ?? 0;
-                    $smallNum = $v['smallNum'] ?? 0;
-                    $ratio = $productData[$v['productId']]['ratio'] ?? 0;
-
-                    $num = ProductClass::mergeItemNum($bigNum, $smallNum, $ratio);
-                    if ($num > $orderProductNum) {
-                        util::fail($productName . "花材数量错误");
-                    }
-                }
                 $post['product'] = $productList;
             } else {
                 //仅退款花材直接设置为空

+ 11 - 32
biz-ghs/order/services/RefundOrderService.php

@@ -34,6 +34,11 @@ class RefundOrderService extends BaseService
         $order->refund = OrderClass::REFUND_YES;
         $order->save();
 
+        $refundPrice = $post['price'] ?? 0;
+        if ($refundPrice <= 0) {
+            util::fail('请输入退款金额');
+        }
+
         $data = [];
         $data['status'] = RefundOrderClass::STATUS_COMPLETE;
         $orderSn = orderSn::getGhsRefundSn();
@@ -47,43 +52,15 @@ class RefundOrderService extends BaseService
 
         //花材列表
         $ghsItemInfo = $post['product'] ?? '';
-        if ($ghsItemInfo) {
-            $ghsItemInfo = RefundOrderClass::mergeItemInfo($ghsItemInfo);
-            $sumNum = RefundOrderClass::sumNumByItemInfo($ghsItemInfo);
-        }
 
-        $data['bigNum'] = $sumNum['bigNum'] ?? 0;// 总的大单位数量 总共多少扎
-        $data['smallNum'] = $sumNum['smallNum'] ?? 0; //总的小单位数量 总共多少支
 
-        //限制小单位退货,这样大单位就量总数量
-        if ($data['smallNum'] > 0) {
-            util::fail('暂时只支持整扎退款');
-        }
         $data['itemNum'] = $data['bigNum'];
-        $data['customId'] = $order->customId ?? 0;
 
+        $data['customId'] = $order->customId ?? 0;
         $data['remark'] = $post['remark'] ?? '';
-        $refundPrice = $post['price'] ?? 0;
-        if (is_numeric($refundPrice) == false || $refundPrice < 0) {
-            util::fail('退款金额有问题哦');
-        }
         $data['refundPrice'] = $refundPrice;
         $data['refundType'] = $post['refundType'] ?? 0;
 
-        $actPrice = $order->actPrice ?? 0;
-        if (floatval($refundPrice) == floatval($actPrice)) {
-            //检查采购端有没红包并进行退回
-            $purchaseId = $order->purchaseId ?? 0;
-            $cg = PurchaseClass::getById($purchaseId, true);
-            $hbId = $cg->hbId ?? 0;
-            if (!empty($hbId)) {
-                $hbInfo = HbClass::getById($hbId, true);
-                if (!empty($hbInfo)) {
-                    $data['hbAmount'] = $hbInfo->amount ?? 0;
-                    $data['hbRefund'] = 1;
-                }
-            }
-        }
 
         //写入订单表
         $refund = RefundOrderClass::add($data, true);
@@ -94,10 +71,8 @@ class RefundOrderService extends BaseService
                 $ghsItemInfo[$k]['oldStock'] = $stockInfo['oldStock'];
                 $ghsItemInfo[$k]['newStock'] = $stockInfo['newStock'];
             }
-        }
 
-        //退款订单花材详情
-        if ($ghsItemInfo) {
+            //退款订单花材详情
             $saleOrderSn = $order->orderSn ?? '';
             $orderItemData = OrderItemClass::getAllByCondition(['orderSn' => $saleOrderSn], null, '*', 'productId');
 
@@ -108,7 +83,9 @@ class RefundOrderService extends BaseService
             foreach ($batchData as $refundItemInfo) {
                 StatItemClass::refundReplace($refundItemInfo);
             }
+
         }
+
         $orderData = RefundOrderClass::getOrderDetail($orderSn, $refund->shopId);
         $orderData['shopId'] = $data['shopId'];
 
@@ -158,6 +135,8 @@ class RefundOrderService extends BaseService
         $order->refund = OrderClass::REFUND_YES;
         $order->save();
 
+
+        //退款流程
         if ($payWay == dict::getDict('payWay', 'wxPay')) {
 
             $currentRefund = bcadd($order->refundPrice, $refundPrice, 2);

+ 3 - 0
sql.txt

@@ -683,4 +683,7 @@ ALTER TABLE xhCgItem ADD `xhPreUnitType` TINYINT(4) NOT NULL DEFAULT '0' COMMENT
 ALTER TABLE xhCgItem ADD `xhPreUnitPrice` DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMMENT '预订时单价' AFTER `xhPreUnitType`;
 ALTER TABLE xhCgItem ADD `xhPrePrice` DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMMENT '预订时总价' AFTER `xhPreUnitPrice`;
 
+ALTER TABLE xhCgItem ADD `refundNum` INT(11) NOT NULL DEFAULT '0' COMMENT '已退货数量' AFTER `xhPrePrice`;
+ALTER TABLE xhGhsOrderItem ADD `refundNum` INT(11) NOT NULL DEFAULT '0' COMMENT '已退货数量' AFTER `xhPrePrice`;
+
 ====预订单 ssh 20220321