diff --git a/crmeb/app/services/order/StoreCartServices.php b/crmeb/app/services/order/StoreCartServices.php index 4f139c623..e14c80eca 100644 --- a/crmeb/app/services/order/StoreCartServices.php +++ b/crmeb/app/services/order/StoreCartServices.php @@ -324,9 +324,27 @@ class StoreCartServices extends BaseServices if (!$id || !$number || !$uid) return false; $where = ['uid' => $uid, 'id' => $id]; $carInfo = $this->dao->getOne($where, 'product_id,combination_id,seckill_id,bargain_id,product_attr_unique,cart_num'); - /** @var StoreProductServices $StoreProduct */ - $StoreProduct = app()->make(StoreProductServices::class); - $stock = $StoreProduct->getProductStock($carInfo->product_id, $carInfo->product_attr_unique); + + //购物车修改数量检查限购 + /** @var StoreProductServices $productServices */ + $productServices = app()->make(StoreProductServices::class); + $limitInfo = $productServices->get($carInfo->product_id, ['is_limit', 'limit_type', 'limit_num']); + if ($limitInfo['is_limit']) { + if ($limitInfo['limit_type'] == 1 && $number > $limitInfo['limit_num']) { + throw new ApiException(410239, ['limit' => $limitInfo['limit_num']]); + } else if ($limitInfo['limit_type'] == 2) { + /** @var StoreOrderCartInfoServices $orderCartServices */ + $orderCartServices = app()->make(StoreOrderCartInfoServices::class); + $orderPayNum = $orderCartServices->sum(['uid' => $uid, 'product_id' => $carInfo->product_id], 'cart_num'); + $orderRefundNum = $orderCartServices->sum(['uid' => $uid, 'product_id' => $carInfo->product_id], 'refund_num'); + $orderNum = $orderPayNum - $orderRefundNum; + if (($number + $orderNum) > $limitInfo['limit_num']) { + throw new ApiException(410240, ['limit' => $limitInfo['limit_num'], 'pay_num' => $orderNum]); + } + } + } + + $stock = $productServices->getProductStock($carInfo->product_id, $carInfo->product_attr_unique); if (!$stock) throw new ApiException(410237); if ($stock < $number) throw new ApiException(410297, ['num' => $number]); if ($carInfo->cart_num == $number) return true;