✏️ 正在编辑: StrategyAbstract.php
路径:
/srv/systems_dir/yuppiecred/application/services/Importacao/Strategy/StrategyAbstract.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\Contrato\Service\ImportacaoAsyncService; use Modules\Contrato\Service\ImportacaoBancoService; use Zend_File_Transfer_Adapter_Http as Upload; use Service_Importacao_Strategy_StrategyInterface as Strategy; abstract class Service_Importacao_Strategy_StrategyAbstract implements Strategy { /** @var string */ public const IMPORTADOS_PATH = '/arquivos-importados/'; /** @var string */ public const PATH_INVALIDO = 'Pasta de upload nao existe e não pode ser criada.', ERRO = 'Ocorreu um erro ao importar o arquivo' ; /** @var string */ public const MB_ENCODING = 'UTF-8,ISO-8859-1,ISO-8859-15,WINDOWS-1252', SESSION = 'importacao_prod_banco' ; /** @var string[] */ public const READER_CSV_EXTENSION = [ 'CSV' => '.csv', 'TXT' => '.txt' ]; /** @var string */ private $diretorioDestino; /** * @param Upload $upload * @param int $layout * @return mixed */ abstract public function doImport(Upload $upload, int $layout): array; /** * @return string|null */ public function getDiretorioDestino(): ?string { return $this->diretorioDestino ? $this->diretorioDestino : UPLOAD_PATH . self::IMPORTADOS_PATH ; } /** * @param int $layout */ public function setDiretorioDestino(int $layout): void { $diretorioDestino = UPLOAD_PATH . self::IMPORTADOS_PATH . $layout; if (!is_dir($diretorioDestino)) { $this->createDiretorioDestino($diretorioDestino); } $this->diretorioDestino = $diretorioDestino; } /** * @param string $diretorioDestino */ public function createDiretorioDestino(string $diretorioDestino): void { if (!mkdir($diretorioDestino, 0777, true)) { throw new DomainException(self::PATH_INVALIDO); } } /** * @param string $extension * @param string $fileName * @return PHPExcel_Reader_IReader * @throws PHPExcel_Reader_Exception */ public function getReaderResolve(string $extension, string $fileName) { if (in_array($extension, self::READER_CSV_EXTENSION)) { $objReader = PHPExcel_IOFactory::createReader('CSV'); $objReader->setInputEncoding($this->getEncodeResolve($fileName)); $objReader->setDelimiter($this->getDelimiter($extension)); return $objReader; } $objReader = PHPExcel_IOFactory::createReaderForFile($fileName); $fileinfo = $objReader->listWorksheetInfo($fileName); if (is_array($fileinfo) && ($arrayFilter = array_filter($fileinfo) != null)) { $firstSheetName = $fileinfo[0]['worksheetName']; $objReader->setLoadSheetsOnly($firstSheetName); } return $objReader; } /** * @param string $fileName */ public function getEncodeResolve(string $fileName) { $encoding = Core_Util::detectFileEncoding($fileName); if ( strstr($encoding, 'unknown') || is_null($encoding) || strstr($encoding, 'binary') ) { return mb_detect_encoding(file_get_contents($fileName), self::MB_ENCODING); } return $encoding; } /** * @param string $extensao * @return string */ public function getDelimiter(string $extensao): string { return $extensao === self::READER_CSV_EXTENSION['CSV'] ? ';' : '#'; } /** * @param Upload $upload * @param array $sheetData * @param int $layout * @param string $extensao * @throws Exception */ public function import( Upload $upload, array $sheetData, int $layout, string $extensao ): array { /** @var Model_Contrato $contrato */ $contrato = model('contrato'); $log = new stdClass(); $log->arquivo = $upload->getFileName(null, false); if (ImportacaoBancoService::isImportacaoAsync(count($sheetData))) { $importacao = (new ImportacaoAsyncService()) ->createImportacaoAsyncExterno($sheetData, $layout, $upload->getFileName()) ; return [ 'repetir' => true, 'url' => domain('/public/acesso-externo/importacao-async/importacao/' . $importacao) ]; } $contrato->importarProducaoBanco($layout, $sheetData, null, null, $extensao, $log); return ['concluido' => true]; } /** * @param $objPHPExcel */ public function isPhpExcelValid($objPHPExcel): void { if (!isset($objPHPExcel) || !is_object($objPHPExcel)) { throw new DomainException(self::ERRO); } } }
💾 保存文件
← 返回文件管理器