shish 4 年 前
コミット
9dad3a8c27

+ 1 - 7
app-ghs/controllers/RefundController.php

@@ -64,15 +64,9 @@ class RefundController extends BaseController
             }
 
             //退款类型 1退货并退款 2 仅退款
-            $refundType = $post['refundType'] ?? 0;
-
-            if ($refundType != RefundOrderClass::REFUND_TYPE_MONEY_GOOD && $refundType != RefundOrderClass::REFUND_TYPE_MONEY) {
-                util::fail("请选择退款类型");
-            }
+            $refundType = $post['refundType'] ?? 1;
 
             if ($refundType == RefundOrderClass::REFUND_TYPE_MONEY_GOOD) {
-
-                //[{productId:0,num:1,unitType:0}]
                 $productJson = $post['product'] ?? '';
                 if (empty($productJson)) {
                     util::fail('请选择花材');

+ 34 - 1
biz-ghs/order/classes/RefundOrderItemClass.php

@@ -10,12 +10,45 @@ class RefundOrderItemClass extends BaseClass
 
     public static $baseFile = '\bizGhs\order\models\RefundOrderItem';
 
+    public static function addData($data)
+    {
+
+        //退货加库存
+        foreach ($productInfo as $k => $v) {
+            $stockInfo = ProductClass::addStock($v['productId'], $v['bigNum'], $v['smallNum']);
+            $productInfo[$k]['oldStock'] = $stockInfo['oldStock'];
+            $productInfo[$k]['newStock'] = $stockInfo['newStock'];
+        }
+
+
+        $batchData = RefundOrderClass::groupOrderItem($productInfo, $orderSn, $orderItemData);
+        RefundOrderItemClass::batchAddOrderItem($batchData);
+
+        //花材销量统计变动
+        foreach ($batchData as $refundItemInfo) {
+            StatItemClass::refundReplace($refundItemInfo);
+        }
+
+
+        $orderData = RefundOrderClass::getOrderDetail($orderSn, $refund->shopId);
+        $orderData['shopId'] = $data['shopId'];
+
+        //增加库存变动记录
+        if ($data['refundType'] == RefundOrderClass::REFUND_TYPE_MONEY_GOOD) {
+            $orderData['relateName'] = $order->customName ?? '';
+            StockRecordClass::addRecordByOrder($orderData, StockRecordClass::STOCK_RECORD_TYPE_REFUND);
+        }
+
+
+    }
+
     public static function batchAddOrderItem($data)
     {
         self::batchAdd($data);
     }
+
     public static function getOrderItemDetail($orderSn)
     {
-        return self::getAllByCondition(['orderSn'=>$orderSn],null,'*');
+        return self::getAllByCondition(['orderSn' => $orderSn], null, '*');
     }
 }

+ 57 - 36
biz-ghs/order/services/RefundOrderService.php

@@ -36,7 +36,7 @@ class RefundOrderService extends BaseService
 
         $refundPrice = $post['price'] ?? 0;
         if ($refundPrice <= 0) {
-            util::fail('请输入退款金额');
+            util::fail('请填写退款金额');
         }
 
         $data = [];
@@ -44,56 +44,77 @@ class RefundOrderService extends BaseService
         $orderSn = orderSn::getGhsRefundSn();
         $data['orderSn'] = $orderSn;
         $data['relateOrderSn'] = $order->orderSn ?? '';
-        $data['sjId'] = $post['sjId'];
-        $data['shopId'] = $post['shopId'];
-        $data['mainId'] = $post['mainId'];
+        $sjId = $post['sjId'] ?? 0;
+        $shopId = $post['shopId'] ?? 0;
+        $mainId = $post['mainId'] ?? 0;
+        $data['sjId'] = $sjId;
+        $data['shopId'] = $shopId;
+        $data['mainId'] = $mainId;
         $data['shopAdminId'] = $post['shopAdminId'] ?? 0;
         $data['shopAdminName'] = $post['shopAdminName'] ?? '';
 
-        //花材列表
-        $ghsItemInfo = $post['product'] ?? '';
+        //花材列表 [{productId:0,num:1,unitType:0}] productId 花材id num 退货数 unitType 大小单位0大1小
+        $postProduct = $post['product'] ?? '';
 
-
-        $data['itemNum'] = $data['bigNum'];
-
-        $data['customId'] = $order->customId ?? 0;
-        $data['remark'] = $post['remark'] ?? '';
-        $data['refundPrice'] = $refundPrice;
-        $data['refundType'] = $post['refundType'] ?? 0;
-
-
-        //写入订单表
-        $refund = RefundOrderClass::add($data, true);
         if ($data['refundType'] == RefundOrderClass::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'];
+            if (empty($postProduct)) {
+                util::fail('没有退款花材');
             }
+            $ids = array_column($postProduct, 'productId');
+            $productInfo = ProductClass::getByids($ids, null, 'id');
 
-            //退款订单花材详情
             $saleOrderSn = $order->orderSn ?? '';
             $orderItemData = OrderItemClass::getAllByCondition(['orderSn' => $saleOrderSn], null, '*', 'productId');
+            if (empty($orderItemData)) {
+                util::fail('没有找到花材');
+            }
 
-            $batchData = RefundOrderClass::groupOrderItem($ghsItemInfo, $orderSn, $orderItemData);
-            RefundOrderItemClass::batchAddOrderItem($batchData);
-
-            //花材销量统计变动
-            foreach ($batchData as $refundItemInfo) {
-                StatItemClass::refundReplace($refundItemInfo);
+            foreach ($postProduct as $currentProduct) {
+                $id = $currentProduct['productId'] ?? 0;
+                $num = $currentProduct['num'] ?? 0;
+                $unitType = $currentProduct['unitType'] ?? 0;
+                $name = $productInfo[$id]['name'] ?? '';
+                $ptItemId = $productInfo[$id]['itemId'] ?? 0;
+                $itemCost = $productInfo[$id]['cost'] ?? 0;
+
+                $xhNum = $orderItemData[$id]['xhNum'] ?? 0;
+                $refundNum = $orderItemData[$id]['refundNum'] ?? 0;
+                $remainNum = bcsub($xhNum, $refundNum);
+                if ($num > $remainNum) {
+                    util::fail("{$name}超过可退数量");
+                }
+
+                $thisItemData = [
+                    'sjId' => $sjId,
+                    'shopId' => $shopId,
+                    'orderSn' => $orderSn,
+                    'productId' => $id,
+                    'name' => $name,
+                    'itemId' => $ptItemId,
+                    'itemStock' => 0,
+                    'itemCost' => $itemCost,
+                    'newStock' => 0,
+                    'xhNum' => $xhNum,
+                    'xhUnitName' => $xhUnitName,
+                    'xhUnitType' => $unitType,
+                    'xhUnitPrice' => $xhUnitPrice,
+                    'xhPrice' => $xhPrice,
+                ];
+                RefundOrderItemClass::addData($thisItemData);
             }
 
         }
 
-        $orderData = RefundOrderClass::getOrderDetail($orderSn, $refund->shopId);
-        $orderData['shopId'] = $data['shopId'];
 
-        //增加库存变动记录
-        if ($data['refundType'] == RefundOrderClass::REFUND_TYPE_MONEY_GOOD) {
-            $orderData['relateName'] = $order->customName ?? '';
-            StockRecordClass::addRecordByOrder($orderData, StockRecordClass::STOCK_RECORD_TYPE_REFUND);
-        }
+        $data['customId'] = $order->customId ?? 0;
+        $data['remark'] = $post['remark'] ?? '';
+        $data['refundPrice'] = $refundPrice;
+        $data['refundType'] = $post['refundType'] ?? 0;
+
+
+        //写入订单表
+        $refund = RefundOrderClass::add($data, true);
+
 
         $payWay = $order->payWay;
         $shopId = $order->shopId;

+ 13 - 1
sql.txt

@@ -686,4 +686,16 @@ ALTER TABLE xhCgItem ADD `xhPrePrice` DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMME
 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
+ALTER TABLE xhRefundItem ADD `xhNum` INT(11) NOT NULL DEFAULT '0' COMMENT '当前单位数量' AFTER `newStock`;
+ALTER TABLE xhRefundItem ADD `xhUnitName` CHAR(10) NOT NULL DEFAULT '' COMMENT '当前单位名称' AFTER `xhNum`;
+ALTER TABLE xhRefundItem ADD `xhUnitType` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '当前单位类型 0大单位 1小单位' AFTER `xhUnitName`;
+ALTER TABLE xhRefundItem ADD `xhUnitPrice` DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMMENT '当前单位单价,售价' AFTER `xhUnitType`;
+ALTER TABLE xhRefundItem ADD `xhPrice` DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMMENT '当前单位的总价,售价总和' AFTER `xhUnitPrice`;
+
+ALTER TABLE xhCgRefundItem ADD `xhNum` INT(11) NOT NULL DEFAULT '0' COMMENT '当前单位数量' AFTER `newStock`;
+ALTER TABLE xhCgRefundItem ADD `xhUnitName` CHAR(10) NOT NULL DEFAULT '' COMMENT '当前单位名称' AFTER `xhNum`;
+ALTER TABLE xhCgRefundItem ADD `xhUnitType` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '当前单位类型 0大单位 1小单位' AFTER `xhUnitName`;
+ALTER TABLE xhCgRefundItem ADD `xhUnitPrice` DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMMENT '当前单位单价,售价' AFTER `xhUnitType`;
+ALTER TABLE xhCgRefundItem ADD `xhPrice` DECIMAL(9,2) NOT NULL DEFAULT '0.00' COMMENT '当前单位的总价,售价总和' AFTER `xhUnitPrice`;
+
+====预订单 ssh 20220327