✏️ 正在编辑: ImportarCorretores.php
路径:
/srv/systems_dir/yuppiecred/library/Core/ImportarCorretores.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_ImportarCorretores { protected $_sheetData; protected $_fields; protected $_naoImportados; protected $_arquivoOrigem; protected $_atualizados = 0; protected $_inseridos = 0; protected $_codigosInseridos = 0; protected $_bancoId = 0; private $tipoPix = [ 'cpf', 'telefone', 'email', 'aleatoria' ]; protected $_colunas = [ 'corretor_id' => 'A', 'nome' => 'B', 'cpf' => 'C', 'apelido' => 'D', 'rg' => 'E', 'data_nascimento' => 'F', 'celular' => 'G', 'email' => 'H', 'responsavel' => 'I', 'cpf_responsavel' => 'J', 'endereco' => 'K', 'numero' => 'L', 'complemento' => 'M', 'bairro' => 'N', 'cidade' => 'O', 'uf' => 'P', 'cep' => 'Q', 'banco' => 'R', 'agencia' => 'S', 'conta' => 'T', 'titular' => 'U', 'cpf_titular' => 'V', 'tipo_conta' => 'W', 'tipo_pix' => 'X', 'chave_pix' => 'Y', 'numero_certificado' => 'Z', 'validade_certificado' => 'AA', 'codigo_usuario' => 'AB', 'banco_usuario' => 'AC', ]; public function __construct($upload = null) { if (!empty($upload)) { $this->_sheetData = $this->loadData($upload); } } public function getSheetData() { return $this->_sheetData; } public function setSheetData($sheetData) { $this->_sheetData = $sheetData; } public function getColuna($coluna) { return isset($this->_colunas[$coluna]) ? trim($this->_colunas[$coluna]) : null; } public function getNaoImportados() { return $this->_naoImportados; } protected function addNaoImportados(array $linha, $motivo) { $this->_naoImportados[] = [ "dados" => $linha, "motivo" => $motivo ]; } public function setArquivoOrigem($arquivoOrigem) { $this->_arquivoOrigem = $arquivoOrigem; } public function getArquivoOrigem() { return $this->_arquivoOrigem; } /** * Lê e carrega os dados do arquivo utilizando o PHPExcel * @param Zend_File_Transfer_Adapter_Http $upload * @return array $sheetData */ public function loadData(Zend_File_Transfer_Adapter_Http $upload) { $extension = strtolower(pathinfo($upload->getFileName(), PATHINFO_EXTENSION)); if (in_array($extension, ['csv'])) { $encode = Core_Util::detectFileEncoding($upload->getFileName()); $objReader = PHPExcel_IOFactory::createReader('CSV'); $objReader->setDelimiter($extension == 'csv' ? ';' : '#'); $objReader->setInputEncoding($encode); } else { $objReader = PHPExcel_IOFactory::createReaderForFile($upload->getFileName()); $fileinfo = $objReader->listWorksheetInfo($upload->getFileName()); if (is_array($fileinfo) && ($arrayFilter = array_filter($fileinfo) != null)) { $firstSheetName = $fileinfo[0]['worksheetName']; $objReader->setLoadSheetsOnly($firstSheetName); } } $objPHPExcel = $objReader->load($upload->getFileName()); if (isset($objPHPExcel) && is_object($objPHPExcel)) { $sheetData = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true); $objPHPExcel->disconnectWorksheets(); unset($objPHPExcel); unset($objReader); unset($sheetData[1]); unlink($upload->getFileName()); } return $sheetData; } public function importar($fields) { $this->_naoImportados = []; $this->_fields = $fields; if (count($this->_sheetData) > 0) { foreach ($this->_sheetData as $linha) { $dadosCodigos = []; $dados = [ 'empresa_id' => $fields['empresa_id'], 'rota_id' => $fields['rota_id'], 'status_cadastro' => $fields['status_cadastro'], 'grupo_acesso' => $fields['grupo_acesso'], 'nivel_esteira' => $fields['nivel_esteira'], 'permitir_autocontratacao' => $fields['permitir_autocontratacao'], 'grupo_comissao' => $fields['grupo_comissao'], 'tipo_venda' => $fields['tipo_venda'], 'mudar_senha' => $fields['mudar_senha'], 'indicador_id' => Yuppie_Auth::getIdentity()->grupo == 'Indicador' ? Yuppie_Auth::getIdentity()->id : $fields['indicador_id'], ]; $dados = array_filter($dados); try { if ($fields['importar_id']) { $this->_getCampoFormatado($linha, $dados, 'corretor_id', 'id', 'numero'); } $this->_getCampoFormatado($linha, $dados, 'nome', 'nome', 'texto'); $this->_getCampoFormatado($linha, $dados, 'cpf', 'cpf', 'cpfCnpj'); $this->_getCampoFormatado($linha, $dados, 'cpf', 'login', 'cpfCnpj'); $this->_getCampoFormatado($linha, $dados, 'cpf', 'senha', 'cpfCnpj'); $this->_getCampoFormatado($linha, $dados, 'apelido', 'apelido', 'texto'); $this->_getCampoFormatado($linha, $dados, 'rg', 'rg', 'texto'); $this->_getCampoFormatado($linha, $dados, 'data_nascimento', 'data_nascimento', 'data'); $this->_getCampoFormatado($linha, $dados, 'celular', 'celular', 'fone'); $this->_getCampoFormatado($linha, $dados, 'email', 'email', 'email'); $this->_getCampoFormatado($linha, $dados, 'responsavel', 'responsavel', 'texto'); $this->_getCampoFormatado($linha, $dados, 'cpf_responsavel', 'cpf_responsavel', 'cpfCnpj'); $this->_getCampoFormatado($linha, $dados, 'endereco', 'endereco', 'texto'); $this->_getCampoFormatado($linha, $dados, 'numero', 'numero', 'texto'); $this->_getCampoFormatado($linha, $dados, 'complemento', 'complemento', 'texto'); $this->_getCampoFormatado($linha, $dados, 'bairro', 'bairro', 'texto'); $this->_getCampoFormatado($linha, $dados, 'cidade', 'cidade', 'texto'); $this->_getCampoFormatado($linha, $dados, 'uf', 'uf', 'texto'); $this->_getCampoFormatado($linha, $dados, 'cep', 'cep', 'numero'); $this->_getCampoFormatado($linha, $dados, 'banco', 'banco', 'numero'); $this->_getCampoFormatado($linha, $dados, 'agencia', 'agencia', 'numero'); $this->_getCampoFormatado($linha, $dados, 'conta', 'conta', 'numero'); $this->_getCampoFormatado($linha, $dados, 'titular', 'titular', 'texto'); $this->_getCampoFormatado($linha, $dados, 'cpf_titular', 'cpf_titular', 'cpfCnpj'); $this->_getCampoFormatado($linha, $dados, 'tipo_conta', 'tipo_conta', 'texto'); $this->_getCampoFormatado($linha, $dados, 'tipo_pix', 'tipo_pix', 'tipo_pix'); $this->_getCampoFormatado($linha, $dados, 'chave_pix', 'chave_pix', 'chave_pix'); $this->_getCampoFormatado($linha, $dados, 'numero_certificado', 'numero_certificado', 'texto'); $this->_getCampoFormatado($linha, $dados, 'validade_certificado', 'validade_certificado', 'data'); $this->_getCampoFormatado($linha, $dados, 'validade_certificado', 'validade_certificado', 'data'); $this->_getCampoFormatado($linha, $dados, 'validade_certificado', 'validade_certificado', 'data'); $this->_getCampoFormatado($linha, $dadosCodigos, 'codigo_usuario', 'senha', 'texto'); $this->_getCampoFormatado($linha, $dadosCodigos, 'banco_usuario', 'banco', 'texto'); $this->salvarLinha($dados, $dadosCodigos); } catch (Throwable $ex) { $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/yuppie_log_corretores_{$urlSistema}_" . date('dmY') . ".txt"); $log = new Zend_Log($writer); $log->log("Erro: " . $ex->getMessage(), Zend_Log::INFO); unset($dados['senha']); $this->addNaoImportados($dados, $ex->getMessage()); } } } return [ 'inseridos' => $this->_inseridos, 'atualizados' => $this->_atualizados, 'usuarios' => $this->_codigosInseridos ]; } public function _getCampoFormatado($linha, &$dados, $column, $campo, $tipo = 'texto') { $info = !empty($linha[$this->getColuna($column)]) ? $linha[$this->getColuna($column)] : null; switch ($tipo) { case 'texto': $info = trim($info); break; case 'numero': $info = String_Refatorar::soNumeros($info); break; case 'cpfCnpj': $info = String_Refatorar::soNumeros($info); if (!empty($info) && !(new Validators_CpfCnpj())->isValid($info)) { throw new Core_Exception("O Cpf ou CNPJ informado é inválido!"); } break; case 'data': $data = Core_Util::convertDate($info); $info = !is_array($data) ? $data : null; break; case 'fone': $info = String_Refatorar::formatarTelefone($info); break; case 'email': $info = trim($info); if (!empty($info) && !filter_var($info, FILTER_VALIDATE_EMAIL)) { throw new Core_Exception("O e-mail é inválido. Valor informado: '{$info}'"); } break; case 'tipo_pix': $info = !empty($info) ? $this->validaTipoPix($info) : null; break; case 'chave_pix': $info = !empty($info) ? $this->validaChavePix($info, $dados) : null; break; } if (empty($info)) { return; } $dados[$campo] = $info; } protected function validaTipoPix($tipo) { $info = strtolower(String_Refatorar::soLetra($tipo)); if (!in_array($info, $this->tipoPix)) { $tipos = implode(', ', $this->tipoPix); throw new Core_Exception("Tipo de chave PIX incorreto, valores aceitos ({$tipos}). O tipo informado foi '{$tipo}'"); } return $info; } protected function validaChavePix($chave, $dados) { $info = null; switch ($dados['tipo_pix']) { case 'cpf'; $info = !empty($chave) ? $chave : $dados['cpf']; if (!empty($info) && !(new Validators_CpfCnpj())->isValid($info)) { throw new Core_Exception("A chave do tipo 'cpf' é inválida"); } break; case 'telefone'; $info = !empty($chave) ? String_Refatorar::formatarTelefone($chave) : $dados['celular']; break; case 'email'; $info = !empty($chave) ? trim($chave) : $dados['email']; if (!filter_var($info, FILTER_VALIDATE_EMAIL)) { throw new Core_Exception("Chave PIX e-mail é inválida. Valor informado: '{$info}'"); } break; default: $info = trim($chave); break; } return $info; } public function salvarLinha($dados, $dadosCodigos) { $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/yuppie_log_corretores_{$urlSistema}_" . date('dmY') . ".txt"); $classeChamada = get_class($this); $log = new Zend_Log($writer); $log->log('#######################', Zend_Log::INFO); $log->log("IMPORTAÇÃO: " . $classeChamada, Zend_Log::INFO); $log->log('ARQUIVO IMPORTADO: ' . print_r($this->getArquivoOrigem(), true), Zend_Log::INFO); $log->log("Usuário logado: " . Yuppie_Auth::getIdentity()->login, Zend_Log::INFO); $table = new Model_DbTable_Corretor(); $corretor = $table->fetchRow("cpf = '" . $dados['cpf'] . "'"); if ($corretor) { $id = $corretor->id; if (empty($this->_fields['atualizar'])) { $this->addNaoImportados($dados, "Corretor já cadastrado."); } else { unset($dados['id']); unset($dados['login']); unset($dados['senha']); $log->log("Tentativa de atualização do corretor: " . print_r($dados, true), Zend_Log::INFO); $save = $table->update($dados, 'id = ' . $corretor->id); $this->_atualizados += $save > 0 ? 1 : 0; } } else { $this->checkCamposObrigatorios($dados); if (!empty($this->_fields['importar_id']) && !empty($dados['id'])) { $corretor = $table->fetchRow("id = '" . $dados['id'] . "'"); } if ($corretor && $corretor->cpf != $dados['cpf']) { throw new Core_Exception("Existe outro corretor com o ID {$corretor->id}."); } $log->log("Tentativa de inserção do corretor: " . print_r($dados, true), Zend_Log::INFO); $id = $table->insert($dados); $this->_inseridos += $id > 0 ? 1 : 0; } if (!empty($id)) { if (empty($dadosCodigos['senha'])) { return; } $bancoId = Model_Banco::bancoPorNome($dadosCodigos['banco']); if (empty($bancoId)) { $dados = array_merge($dados, $dadosCodigos); $this->addNaoImportados($dados, "Usuário de banco não cadastrado: Banco não localizado."); return; } $tableSenhas = new Model_DbTable_CorretorSenha(); $codUsuario = $tableSenhas->verificaSenhaCadastrada($dadosCodigos['senha'], $bancoId); if (!empty($codUsuario)) { $dados = array_merge($dados, $dadosCodigos); $this->addNaoImportados($dados, "Usuário de banco já cadastrado."); return; } $dadosCodigos['corretor_id'] = $id; $dadosCodigos['banco_id'] = $bancoId; unset($dadosCodigos['banco']); $log->log("Tentativa de inserção do código de usuário: " . print_r($dadosCodigos, true), Zend_Log::INFO); $idSenha = $tableSenhas->insert($dadosCodigos); $this->_codigosInseridos += $idSenha > 0 ? 1 : 0; } } protected function checkCamposObrigatorios($dados) { if (empty($dados['empresa_id'])) { throw new Core_Exception('Empresa não definida.'); } if (empty($dados['rota_id'])) { throw new Core_Exception('Rota não definida.'); } if (empty($dados['status_cadastro'])) { throw new Core_Exception('Status Cadastrado não definido.'); } if (empty($dados['grupo_acesso'])) { throw new Core_Exception('O Tipo de Acesso não foi definido.'); } if (empty($dados['cpf'])) { throw new Core_Exception('CPF/CNPJ não informado.'); } } }
💾 保存文件
← 返回文件管理器