diff --git a/app/common/service/RefundOrderService.php b/app/common/service/RefundOrderService.php index 59eb7c418..6807cbbcf 100644 --- a/app/common/service/RefundOrderService.php +++ b/app/common/service/RefundOrderService.php @@ -36,14 +36,11 @@ class RefundOrderService throw new BusinessException('订单不能退款'); } $orderCartInfoWhere = ['oid' => $order['id']]; - $refundNum = 0; if (!empty($params['product_arr'])) { $orderCartInfoWhere['product_id'] = array_column($params['product_arr'], 'product_id'); - $refundNum = count($params['product_arr']); } if (!empty($params['old_cart_id'])) { $orderCartInfoWhere['id'] = $params['old_cart_id']; - $refundNum = count($params['old_cart_id']); $params['product_arr'] = StoreOrderCartInfo::field('product_id,cart_num')->where($orderCartInfoWhere)->select()->toArray(); } $orderCartProducts = StoreOrderCartInfo::where($orderCartInfoWhere)->select(); @@ -63,7 +60,7 @@ class RefundOrderService $this->refundMoney($order, $refundAmount); $this->updateProductStock($orderCartProducts, $productInfo); $this->updateOrderCartInfo($order, $orderCartProducts, $refundAmount, $productInfo); - $this->updateOrderStatus($order, $refundAmount, $refundNum); + $this->updateOrderStatus($order, $refundAmount); $this->resetStoreFinanceFlow($order, $orderCartProducts, $productInfo); // if ($order->status == 2 && $order->is_writeoff == 1) { // $this->financeSettle($order); @@ -116,6 +113,8 @@ class RefundOrderService continue; } $number = $productInfo[$product['product_id']]['cart_num']; + $maxNumber = bcsub($product['cart_num'], $product['refund_num'], 2); + $number = min($number, $maxNumber); $storeBranchProductId = StoreBranchProduct::where('store_id', $product['store_id']) ->where('product_id', $product['product_id']) ->withTrashed()->value('id'); @@ -133,7 +132,8 @@ class RefundOrderService /** * 更新订单商品状态 * @param $order - * @param $orderCartIds + * @param $orderCartProducts + * @param $refundAmount * @param $productInfo * @return void * @throws DbException @@ -178,14 +178,13 @@ class RefundOrderService * 更新订单状态 * @param $order * @param $refundAmount - * @param $refundNum * @return void * @throws DbException */ - public function updateOrderStatus($order, $refundAmount, $refundNum): void + public function updateOrderStatus($order, $refundAmount): void { $order->refund_price = bcadd($order['refund_price'], $refundAmount, 2); - $order->refund_num += $refundNum; + $order->refund_num = StoreOrderCartInfo::where('oid', $order['id'])->where('refund_num', '>', 0)->count(); if ($order->pay_price == $order->refund_price) { // 全部退款完成,订单状态改为已退款 $order->refund_status = OrderEnum::REFUND_STATUS_FINISH;