65 lines
2.4 KiB
PHP
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 [];
|
|
}
|
|
}
|