✏️ 正在编辑: ImportacaoAsyncService.php
路径:
/srv/systems_dir/yuppiecred/application/Modules/Contrato/Service/ImportacaoAsyncService.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php namespace Modules\Contrato\Service; use Carbon\Carbon; use Modules\Core\Pipeline\PipelineContexts; use Modules\Core\Exception\SemImportacaoPendenteException; use Zend_Controller_Request_Abstract as Request; use Modules\Contrato\Model\DbTable\ImportacaoBancoAsyncTable as Table; class ImportacaoAsyncService { /** @var string */ public const ASYNC_DIR = '/arquivos-importar-async/'; /** @var Table */ private $table; public function __construct() { $this->table = new Table(); } /** * @param Request $request * @return int */ public function initImportacaoAsync(Request $request): int { return $this->createImportacaoBancoAsync($request); } /** * @param Request $request * @return int */ public function createImportacaoBancoAsync(Request $request): int { $params = $request->getParam('params'); $session = new \Zend_Session_Namespace('importacao_prod_banco'); $sheetData = $session->importacao_prod_banco; $fileAsync = $this->getFile($sheetData); $pendente = $this->getImpotacaoPendente($fileAsync, $session); if ($pendente) { return $pendente; } $dados = []; $dados['banco_id'] = $params['banco_id']; $dados['layout_banco'] = $params['layout_banco']; $dados['subestabelecido_id'] = $params['subestabelecido_id']; $dados['qtd_registros'] = $session->total_count; $dados['arquivo_origem'] = $session->arquivo; $dados['arquivo_async'] = $fileAsync; $dados['data_inicio'] = Carbon::now()->format('Y-m-d H:i:s'); $session->unsetAll(); file_put_contents($this->getFilePath() . $fileAsync, json_encode($sheetData)); return (new Table())->insert($dados); } /** * @param array $request * @return int */ public function createImportacaoAsyncExterno( array $sheetData, ?int $banco, string $filename ): int { $fileAsync = $this->getFile($sheetData); $dados = []; $dados['banco_id'] = $banco; $dados['qtd_registros'] = count($sheetData); $dados['arquivo_origem'] = $filename; $dados['arquivo_async'] = $fileAsync; $dados['data_inicio'] = Carbon::now()->format('Y-m-d H:i:s'); file_put_contents($this->getFilePath() . $fileAsync, json_encode($sheetData)); return (new Table())->insert($dados); } /** * @return string */ public function getFilePath(): string { $path = UPLOAD_PATH . self::ASYNC_DIR; if (!is_dir($path)) { mkdir($path); } return $path; } /** * @param array $sheetData * @param string|null $sufix * @return string */ public function getFile(array $sheetData, ?string $sufix = ''): string { $dataToHash = $sheetData; $dataTohash = json_encode(array_slice($dataToHash, 0, 20)); return md5($dataTohash) . $sufix . '.json'; } /** * @param \Zend_Session_Namespace $session * @return int|null */ public function getImpotacaoPendente(string $arquivo, \Zend_Session_Namespace $session): ?int { $existente = $this->table->findByName($arquivo); if (!empty($existente)) { $session->unsetAll(); return $existente[0]['id']; } return null; } /** * @return \stdClass */ public function runImportacao(?int $importacaoAsync = null): \stdClass { $impPendente = $this->getImportacoesPendentesOrThrow($importacaoAsync); $context = PipelineContexts::importacaoAsync($impPendente); $context->handle(); return $context->getDataContext(); } /** * @param string $filename * @param string $arquivoOrigem */ public function setCabecalhoImportacao(string $filename, string $arquivoOrigem): void { $session = new \Zend_Session_Namespace('importacao_prod_banco'); $cabecalhoData = json_decode(file_get_contents($filename), true); $session->cabecalho = $cabecalhoData; $session->arquivo = $arquivoOrigem; } /** * @param int|null $impotacaoAsync * @return array|null */ protected function getImportacoesPendentesOrThrow(?int $impotacaoAsync = null): ?array { $impPendente = $this->table->findPendentes($impotacaoAsync); if (empty($impPendente[0])) { throw new SemImportacaoPendenteException(); } return $impPendente[0]; } }
💾 保存文件
← 返回文件管理器