175 lines
7.3 KiB
PHP
175 lines
7.3 KiB
PHP
<?php
|
|
|
|
namespace Stemcell\Customer\Controller\Avatr;
|
|
|
|
use Magento\Framework\App\Action\HttpPostActionInterface;
|
|
use Magento\Framework\App\Filesystem\DirectoryList;
|
|
use Magento\Framework\Controller\Result\RedirectFactory;
|
|
use Magento\Framework\Exception\FileSystemException;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\MediaStorage\Model\File\UploaderFactory;
|
|
use Magento\Framework\Filesystem;
|
|
use Magento\Framework\Message\ManagerInterface as MessageManagerInterface;
|
|
use Stemcell\Customer\Api\AvatrRepositoryInterface;
|
|
use Stemcell\Customer\Helper\Avatr as AvatrHelper;
|
|
use Stemcell\Customer\Helper\CarSeriesClueFactory;
|
|
use Stemcell\Customer\Model\AvatrFactory;
|
|
use Stemcell\Customer\Helper\Avatr\Transformers as TransformersHelper;
|
|
|
|
class Post implements HttpPostActionInterface
|
|
{
|
|
private \Magento\Framework\App\Request\Http $request;
|
|
private UploaderFactory $fileUploader;
|
|
private \Magento\Framework\Filesystem\Directory\WriteInterface $filesystem;
|
|
private RedirectFactory $redirectFactory;
|
|
private \Magento\Framework\File\Csv $csv;
|
|
private AvatrFactory $avatrFactory;
|
|
private AvatrRepositoryInterface $avatrRepository;
|
|
private AvatrHelper $avatrHelper;
|
|
private MessageManagerInterface $messageManager;
|
|
|
|
private TransformersHelper $transformersHelper;
|
|
|
|
//正式环境,默认测试环境
|
|
protected array $config = [
|
|
'media_id' => 6110,
|
|
'media_name' => 'SHANGHAILIQI',
|
|
'ak' => 6110,
|
|
'sk' => 'OvsbfYqDXcqr',
|
|
'aes_key' => 'oEr4HdIIouvveWL0Jjk74tA8Cf3fkaqQ',
|
|
'aes_iv' => 'WUPXlZGkfu7yo4gi',
|
|
'host' => 'https://sl-api-amstp.avatr.com'
|
|
];
|
|
private CarSeriesClueFactory $clueHelperFactory;
|
|
|
|
/**
|
|
* @throws FileSystemException
|
|
*/
|
|
public function __construct(
|
|
\Magento\Framework\App\Request\Http $request,
|
|
UploaderFactory $fileUploader,
|
|
Filesystem $filesystem,
|
|
RedirectFactory $redirectFactory,
|
|
\Magento\Framework\File\Csv $csv,
|
|
AvatrFactory $avatrFactory,
|
|
AvatrRepositoryInterface $avatrRepository,
|
|
AvatrHelper $avatrHelper,
|
|
TransformersHelper $transformersHelper,
|
|
MessageManagerInterface $messageManager,
|
|
CarSeriesClueFactory $clueHelperFactory
|
|
) {
|
|
$this->request = $request;
|
|
$this->fileUploader = $fileUploader;
|
|
$this->redirectFactory = $redirectFactory;
|
|
$this->csv = $csv;
|
|
$this->avatrFactory = $avatrFactory;
|
|
$this->avatrRepository = $avatrRepository;
|
|
$this->avatrHelper = $avatrHelper;
|
|
$this->transformersHelper = $transformersHelper;
|
|
$this->messageManager = $messageManager;
|
|
$this->clueHelperFactory = $clueHelperFactory;
|
|
$this->filesystem = $filesystem->getDirectoryWrite(DirectoryList::VAR_IMPORT_EXPORT);
|
|
}
|
|
|
|
private function encode(array $data)
|
|
{
|
|
foreach ($data as $key=>$val){
|
|
$data[$key] = mb_convert_encoding($val, 'UTF-8', ['gb2312', 'gbk']);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 注意:上传的csv第三个列一定要是意向车型
|
|
* @return \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\Result\Redirect|\Magento\Framework\Controller\ResultInterface
|
|
*/
|
|
public function execute()
|
|
{
|
|
ini_set('max_execution_time', -1);
|
|
set_time_limit(0);
|
|
$file = $this->request->getFiles('avatr');
|
|
/* @var $logger \Psr\Log\LoggerInterface */
|
|
$logger = \Magento\Framework\App\ObjectManager::getInstance()->get(\Psr\Log\LoggerInterface::class);
|
|
if (file_exists($file['tmp_name'])) {
|
|
$this->csv->setDelimiter(",");
|
|
$index = 1;
|
|
$rawData=[];
|
|
try {
|
|
$failRow = [];
|
|
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
|
$reader->setReadDataOnly(true);
|
|
$workSheet = $reader->load($file['tmp_name'])->getSheet(0);
|
|
|
|
$count = 0;
|
|
foreach ($workSheet->toArray() as $row => $item) {
|
|
|
|
if ($row > 0 && !empty($item[2])){
|
|
|
|
$rawData = $item;
|
|
$index = $row;
|
|
// not count the empty row
|
|
$count++;
|
|
$env = $this->request->getParam('env');
|
|
$clueHelper = $this->clueHelperFactory->create($item[2], $env=='dev');
|
|
|
|
try {
|
|
$rowData = $clueHelper->transform($item);
|
|
|
|
$item = array_combine(
|
|
['name', 'telephone', 'favorite_vehicle', 'province_id', 'city_id'],
|
|
$rowData
|
|
);
|
|
|
|
$avatr = $this->avatrRepository->getByTelephone($item['telephone'], $item['favorite_vehicle']);
|
|
|
|
if (!$avatr->getId()) {
|
|
$avatr = $this->avatrFactory->create();
|
|
}
|
|
foreach ($item as $key=>$value) {
|
|
$avatr->setData($key, $value);
|
|
}
|
|
|
|
$avatr = $this->avatrRepository->save($avatr);
|
|
$clueHelper->setClue($avatr)->post();
|
|
$avatr->setIsSent(0);
|
|
if ($clueHelper->isSuccess()) {
|
|
$avatr->setIsSent(1);
|
|
} else {
|
|
$failRow[] = $row;
|
|
}
|
|
$requestLog = [
|
|
'response' => $clueHelper->getResponse(),
|
|
'request' => $clueHelper->getRequestData()
|
|
];
|
|
|
|
$avatr->setResponse(json_encode($requestLog, JSON_UNESCAPED_UNICODE));
|
|
$this->avatrRepository->save($avatr);
|
|
} catch (LocalizedException $e) {
|
|
$failRow[] = $row;
|
|
// echo '第'.$row.'行数据发送异常, 原因:'.$e->getMessage().'<br/>';
|
|
$this->messageManager->addErrorMessage('第'.$row.'行数据发送异常, 原因:'.$e->getMessage());
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->messageManager->addSuccessMessage(
|
|
'总共: '.($count).' 条数据, '
|
|
.$count-count($failRow).' 条数据发送成功, '.count($failRow).' 条数据发送失败 '
|
|
);
|
|
if (count($failRow)) {
|
|
$this->messageManager->addErrorMessage('第'.implode('、', $failRow).'行数据发送失败');
|
|
}
|
|
|
|
} catch (\Exception $e) {
|
|
// echo '数据发送失败, 原因:'.$e->getMessage().'<br/>';
|
|
$this->messageManager->addErrorMessage(sprintf('第%d条数据发送失败', $index).', '.$e->getMessage());
|
|
$logger->alert('详细信息: '.$e->getMessage(), $e->getTrace());
|
|
$logger->alert(sprintf('第%d条数据发送失败', $index), $rawData);
|
|
|
|
}
|
|
}
|
|
|
|
return $this->redirectFactory->create()->setPath('*/*/');
|
|
}
|
|
}
|