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().'
'; $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().'
'; $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('*/*/'); } }