Files
stemcell/app/code/Stemcell/Sales/Block/Tracking/Popup.php
T
2026-09-15 10:26:34 +08:00

65 lines
2.4 KiB
PHP

<?php
namespace Stemcell\Sales\Block\Tracking;
use Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface;
use Magento\Shipping\Model\Order\Track;
use Magento\Shipping\Model\ResourceModel\Order\Track\CollectionFactory;
use Psr\Log\LoggerInterface;
use Stemcell\Sales\Helper\Data;
class Popup extends \Magento\Shipping\Block\Tracking\Popup
{
protected Data $helper;
protected CollectionFactory $trackCollectionFactory;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Framework\Registry $registry,
DateTimeFormatterInterface $dateTimeFormatter,
CollectionFactory $trackCollectionFactory,
Data $helper,
LoggerInterface $logger,
array $data = []
) {
parent::__construct($context, $registry, $dateTimeFormatter, $data);
$this->trackCollectionFactory = $trackCollectionFactory;
$this->helper = $helper;
$this->logger = $logger;
}
/**
* @return array
*/
public function getExpressInfo(): array
{
$info = $this->_registry->registry('current_shipping_info');
if ($info->getOrderId()) {
/* @var $track Track */
$track = $this->trackCollectionFactory->create()
->setOrderFilter($info->getOrderId())
->setItemObjectClass(Track::class)
->getFirstItem();
$expressInfo = json_decode($track->getDescription(), true);
//是否已签收
$isReceived = !empty($expressInfo) && isset($expressInfo['deliverystatus']) && $expressInfo['deliverystatus']==3;
if ($track->getTrackNumber() && !$isReceived) {
try {
$result = $this->helper->getExpressInfo($track->getTrackNumber());
if (isset($result['expName'])) {
$track->setDescription(json_encode($result))->save();
}
} catch (\Exception $exception) {
$this->logger->critical('request express info fail, message:'.$exception->getMessage(), $exception->getTrace());
}
}
if ($track->getDescription()) {
if (isset($expressInfo['list']) && is_array($expressInfo['list'])) {
return $expressInfo['list'];
}
}
}
return [];
}
}