Sau câu trả lời @Shoaib Munir & @Rk Rathod , các bảng này sẽ không cập nhật trong thời gian chạy nên bạn cần chạy Refresh kê từ Reports -> Statistics -> Refresh Statistics
mỗi lần. nhưng nếu bạn không muốn làm mới Thống kê theo cách thủ công mỗi lần để bạn có thể đặt cron cho điều đó để nó sẽ tự động làm mới Thống kê.
Trước tiên, bạn cần vượt qua báo cáoTypes đối số cho lớp cron của mình bằng cách sử dụng di.xml như bên dưới (Tôi đã chuyển tất cả các đối số bạn có thể vượt qua theo yêu cầu của bạn).
<type name="Vendor\Module\Cron\CronFile">
<arguments>
<argument name="reportTypes" xsi:type="array">
<item name="sales" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Order</item>
<item name="tax" xsi:type="string">Magento\Tax\Model\ResourceModel\Report\Tax</item>
<item name="shipping" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Shipping</item>
<item name="invoiced" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Invoiced</item>
<item name="refunded" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Refunded</item>
<item name="coupons" xsi:type="string">Magento\SalesRule\Model\ResourceModel\Report\Rule</item>
<item name="bestsellers" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Bestsellers</item>
<item name="viewed" xsi:type="string">Magento\Reports\Model\ResourceModel\Report\Product\Viewed</item>
</argument>
</arguments>
</type>
Sau đó, trong tập tin cron của bạn nên như thế này.
<?php
namespace Vendor\Module\Cron;
use Magento\Reports\Model\ResourceModel\Refresh\Collection;
class CronFile extends Collection
{
protected $logger;
protected $reportTypes;
public function __construct(
\Magento\Framework\Data\Collection\EntityFactory $entityFactory,
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
\Magento\Reports\Model\FlagFactory $reportsFlagFactory,
\Psr\Log\LoggerInterface $logger,
array $reportTypes
) {
$this->logger = $logger;
$this->reportTypes = $reportTypes;
parent::__construct($entityFactory,$localeDate,$reportsFlagFactory);
}
/**
* @return $this
*/
public function execute()
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
try {
$codes = $this->loadData();
foreach ($codes->_items as $codek=>$codev) {
$objectManager->create($this->reportTypes[$codek])->aggregate();
}
} catch (\Magento\Framework\Exception\LocalizedException $e) {
$this->logger->critical($e->getMessage());
} catch (\Exception $e) {
$this->logger->critical($e->getMessage());
}
return $this;
}
}
Tôi hy vọng nó sẽ giúp!