Files
stemcell/app/code/Stemcell/Sales/Controller/Adminhtml/Order/MassReview.php
T
2026-09-15 10:26:34 +08:00

96 lines
3.6 KiB
PHP

<?php
namespace Stemcell\Sales\Controller\Adminhtml\Order;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Action\HttpGetActionInterface;
use Magento\Framework\App\Action\HttpPostActionInterface;
use Magento\Framework\App\Response\Http\FileFactory;
use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\Controller\Result\RawFactory;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
use Magento\Framework\Registry;
use Magento\Framework\Translate\InlineInterface;
use Magento\Framework\View\Result\LayoutFactory;
use Magento\Framework\View\Result\PageFactory;
use Magento\Sales\Api\OrderManagementInterface;
use Magento\Sales\Api\OrderRepositoryInterface;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
use Magento\Ui\Component\MassAction\Filter;
use Psr\Log\LoggerInterface;
use Stemcell\Sales\Model\OrderStatus;
class MassReview extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction implements HttpPostActionInterface
{
const ADMIN_RESOURCE = 'Magento_Sales::sales_order';
/**
* @param Context $context
* @param Filter $filter
* @param CollectionFactory $collectionFactory
* @param OrderManagementInterface|null $orderManagement
*/
public function __construct(
Context $context,
Filter $filter,
CollectionFactory $collectionFactory,
protected OrderManagementInterface $orderManagement,
protected OrderRepositoryInterface $orderRepository,
protected LoggerInterface $logger,
) {
parent::__construct($context, $filter);
$this->collectionFactory = $collectionFactory;
}
/**
* Cancel selected orders
*
* @param AbstractCollection $collection
* @return \Magento\Backend\Model\View\Result\Redirect
*/
protected function massAction(AbstractCollection $collection)
{
$success = $failure = [];
$messages = [];
/* @var $order Order */
foreach ($collection->getItems() as $order) {
try {
if ($order->canShip()) {
$this->orderManagement->setState(
$order,
Order::STATE_PROCESSING,
OrderStatus::reviewed->name,
'订单批量审核',
null,
false
);
$this->orderRepository->save($order);
$success[] = $order->getIncrementId();
} else {
$failure[] = $order->getIncrementId();
}
} catch (LocalizedException $e) {
// $messages .= sprintf('订单%s审核异常,原因:%s', $order->getIncrementId(), $e->getMessage()).'<br/>';
$messages[$order->getIncrementId()] = $e->getMessage();
}
}
if ($messages) {
$this->logger->critical('订单批量审核异常', $messages);
}
if ($failure) {
$this->messageManager->addErrorMessage(sprintf('订单:%s 批量审核失败', implode(', ', $failure)));
}
if ($success) {
$this->messageManager->addSuccessMessage(sprintf('批量审核%d笔订单, %d审核成功.', $collection->count(), count($success)));
}
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath($this->getComponentRefererUrl());
return $resultRedirect;
}
}