|
| 1 | +diff --git a/vendor/magento/module-sales/Model/Service/OrderService.php b/vendor/magento/module-sales/Model/Service/OrderService.php |
| 2 | +index 2e062caca9a2..a73716f096e6 100644 |
| 3 | +--- a/vendor/magento/module-sales/Model/Service/OrderService.php |
| 4 | ++++ b/vendor/magento/module-sales/Model/Service/OrderService.php |
| 5 | +@@ -5,8 +5,10 @@ |
| 6 | + */ |
| 7 | + namespace Magento\Sales\Model\Service; |
| 8 | + |
| 9 | +-use Magento\Sales\Api\OrderManagementInterface; |
| 10 | ++use Magento\Framework\App\ObjectManager; |
| 11 | + use Magento\Payment\Gateway\Command\CommandException; |
| 12 | ++use Magento\Sales\Api\OrderManagementInterface; |
| 13 | ++use Magento\Sales\Model\OrderMutexInterface; |
| 14 | + use Psr\Log\LoggerInterface; |
| 15 | + |
| 16 | + /** |
| 17 | +@@ -61,6 +63,11 @@ class OrderService implements OrderManagementInterface |
| 18 | + */ |
| 19 | + private $logger; |
| 20 | + |
| 21 | ++ /** |
| 22 | ++ * @var OrderMutexInterface |
| 23 | ++ */ |
| 24 | ++ private $orderMutex; |
| 25 | ++ |
| 26 | + /** |
| 27 | + * Constructor |
| 28 | + * |
| 29 | +@@ -73,6 +80,8 @@ class OrderService implements OrderManagementInterface |
| 30 | + * @param \Magento\Sales\Model\Order\Email\Sender\OrderCommentSender $orderCommentSender |
| 31 | + * @param \Magento\Sales\Api\PaymentFailuresInterface $paymentFailures |
| 32 | + * @param LoggerInterface $logger |
| 33 | ++ * @param OrderMutexInterface|null $orderMutex |
| 34 | ++ * @SuppressWarnings(PHPMD.ExcessiveParameterList) |
| 35 | + */ |
| 36 | + public function __construct( |
| 37 | + \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, |
| 38 | +@@ -83,7 +92,8 @@ public function __construct( |
| 39 | + \Magento\Framework\Event\ManagerInterface $eventManager, |
| 40 | + \Magento\Sales\Model\Order\Email\Sender\OrderCommentSender $orderCommentSender, |
| 41 | + \Magento\Sales\Api\PaymentFailuresInterface $paymentFailures, |
| 42 | +- LoggerInterface $logger |
| 43 | ++ LoggerInterface $logger, |
| 44 | ++ ?OrderMutexInterface $orderMutex = null |
| 45 | + ) { |
| 46 | + $this->orderRepository = $orderRepository; |
| 47 | + $this->historyRepository = $historyRepository; |
| 48 | +@@ -94,6 +104,7 @@ public function __construct( |
| 49 | + $this->orderCommentSender = $orderCommentSender; |
| 50 | + $this->paymentFailures = $paymentFailures; |
| 51 | + $this->logger = $logger; |
| 52 | ++ $this->orderMutex = $orderMutex ?: ObjectManager::getInstance()->get(OrderMutexInterface::class); |
| 53 | + } |
| 54 | + |
| 55 | + /** |
| 56 | +@@ -103,6 +114,22 @@ public function __construct( |
| 57 | + * @return bool |
| 58 | + */ |
| 59 | + public function cancel($id) |
| 60 | ++ { |
| 61 | ++ return $this->orderMutex->execute( |
| 62 | ++ (int) $id, |
| 63 | ++ \Closure::fromCallable([$this, 'cancelOrder']), |
| 64 | ++ [$id] |
| 65 | ++ ); |
| 66 | ++ } |
| 67 | ++ |
| 68 | ++ /** |
| 69 | ++ * Order cancel |
| 70 | ++ * |
| 71 | ++ * @param int $id |
| 72 | ++ * @return bool |
| 73 | ++ * @SuppressWarnings(PHPMD.UnusedPrivateMethod) |
| 74 | ++ */ |
| 75 | ++ private function cancelOrder($id): bool |
| 76 | + { |
| 77 | + $order = $this->orderRepository->get($id); |
| 78 | + if ($order->canCancel()) { |
| 79 | + |
0 commit comments